all repos — h3rald @ 3823f20ada8de57b8a16651ddb10048224bbe828

The sources of https://h3rald.com

Reviewing articles.
h3rald h3rald@h3rald.com
Fri, 23 Feb 2024 13:43:42 +0100
commit

3823f20ada8de57b8a16651ddb10048224bbe828

parent

b8370013393ca9da6c0132ad49c4c7afbac7d883

121 files changed, 4530 insertions(+), 2796 deletions(-)

jump to
M assets/styles/style.cssassets/styles/style.css

@@ -230,8 +230,6 @@

sub, sup { line-height: 0; - position: relative; - vertical-align: baseline; } sup {
M contents/articles/10-programming-languages.htmlcontents/articles/10-programming-languages.html

@@ -8,74 +8,136 @@ tags: "programming"

----- <div class="toast"> <ul> - <li>This article has been translated into <a href="http://science.webhostinggeeks.com/10-programskih-jezika">Serbo-Croatian</a> by <cite><a href="http://webhostinggeeks.com/">Web Geeks</a></cite></li> - <li>This article has been translated into <a href="https://www.homeyou.com/~edu/10-linguagens-de-programacao">Portuguese</a> by <cite><a href="https://www.homeyou.com/~edu/">Artur Weber</a></cite></li> - <li>This article has been translated into <a href="http://www.1001-soldes.com/traductions/10-programming-languages.html">French</a> by <cite>Avice Robitaille</cite></li> + <li>This article has been translated into <a + href="http://science.webhostinggeeks.com/10-programskih-jezika">Serbo-Croatian</a> by <cite><a + href="http://webhostinggeeks.com/">Web Geeks</a></cite></li> + <li>This article has been translated into <a + href="https://www.homeyou.com/~edu/10-linguagens-de-programacao">Portuguese</a> by <cite><a + href="https://www.homeyou.com/~edu/">Artur Weber</a></cite></li> + <li>This article has been translated into <a + href="http://www.1001-soldes.com/traductions/10-programming-languages.html">French</a> by <cite>Avice + Robitaille</cite></li> </ul> </div> <div class="v-spacer"></div> -<p>If you program for fun or profit, chances are that you know C, C++, Java, <span class="caps">PHP</span>, Perl, Python or Ruby. These programming languages are all widely known, and, to a different degree, used in commercial applications. At least some of them can safely be considered <em>mainstream</em>, even if that word has become so overused and misused that has almost lost its original meaning, if it ever had one.</p> -<p>If you are earning your living by coding, it&#8217;s often one of these languages that pays the bills. Nevertheless, true hackers frequently meander in other directions, exploring and discovering different paradigms and methodologies, sometimes to the most <a href="http://esolangs.org/wiki/Main_Page">esoteric</a> extremes.</p> +<p>If you program for fun or profit, chances are that you know C, C++, Java, <span class="caps">PHP</span>, Perl, Python + or Ruby. These programming languages are all widely known, and, to a different degree, used in commercial + applications. At least some of them can safely be considered <em>mainstream</em>, even if that word has become so + overused and misused that has almost lost its original meaning, if it ever had one.</p> +<p>If you are earning your living by coding, it's often one of these languages that pays the bills. Nevertheless, + true hackers frequently meander in other directions, exploring and discovering different paradigms and methodologies, + sometimes to the most <a href="http://esolangs.org/wiki/Main_Page">esoteric</a> extremes.</p> <blockquote> - <p>&#8220;The most obvious common &#8216;personality&#8217; characteristics of hackers are high intelligence, consuming curiosity, and facility with intellectual abstractions. Also, most hackers are &#8216;neophiles&#8217;, stimulated by and appreciative of novelty (especially intellectual novelty). Most are also relatively individualistic and anti-conformist.&#8221;</p> + <p>&#8220;The most obvious common &#8216;personality' characteristics of hackers are high intelligence, + consuming curiosity, and facility with intellectual abstractions. Also, most hackers are &#8216;neophiles', + stimulated by and appreciative of novelty (especially intellectual novelty). Most are also relatively + individualistic and anti-conformist.&#8221;</p> </blockquote> -<p style="padding-left:4em;">&ndash; Eric S. Raymond, <cite><a href="http://catb.org/jargon/html/personality.html">The Jargon File</a></cite></p> -<p>Even if you&#8217;re particularly devoted to one of the languages mentioned above, it is normal to be curious about what else is out there. As the end of the year approaches, I find myself thinking about learning &ndash; or at least become acquainted with &ndash; some less known, more experimental, programming languages.<br /> -I was originally planning on learning another programming language as a New Year&#8217;s Resolution, which is quite common among programmers. The most difficult task turned out to be <em>choosing</em> a particular language: there are so many out there which makes it very hard to decide.</p> -<p>This article deals with ten possible candidates, and it&#8217;s far from being an exhaustive list. The programming languages described henceforth are very different from each other, but they all have one thing in common: they all stimulate my curiosity in their own, very different ways.</p> +<p style="padding-left:2rem;">&ndash; Eric S. Raymond, <cite><a href="http://catb.org/jargon/html/personality.html">The + Jargon File</a></cite></p> +<p>Even if you're particularly devoted to one of the languages mentioned above, it is normal to be curious about + what else is out there. As the end of the year approaches, I find myself thinking about learning &ndash; or at least + become acquainted with &ndash; some less known, more experimental, programming languages.<br /> + I was originally planning on learning another programming language as a New Year's Resolution, which is quite + common among programmers. The most difficult task turned out to be <em>choosing</em> a particular language: there are + so many out there which makes it very hard to decide.</p> +<p>This article deals with ten possible candidates, and it's far from being an exhaustive list. The programming + languages described henceforth are very different from each other, but they all have one thing in common: they all + stimulate my curiosity in their own, very different ways.</p> <h3 id="haskell">Haskell</h3> -<p>I tried to learn Haskell in the past. Quietly, I started diving into the multitude of articles, tutorials, overviews and even books about this fascinating academic language which claims to achieve functional purity though remaining extremely useful, practical and efficient. Sadly, I&#8217;m still not able to fully grasp some of its most crucial concepts, such as <a href="http://en.wikibooks.org/wiki/Programming:Haskell_monads">monads</a>, but this still doesn&#8217;t put me off <em>wishing</em> to learn the language.</p> -<p>If you&#8217;ve never enountered Haskell before, I find <a href="http://www.willamette.edu/~fruehr/haskell/evolution.html">The Evolution of a Haskell Programmer</a> an amusing and informative read. Although aiming to be humorous in a way, it serves a very important didascalic purpose: it is one of the most complete collections of the different paradigms and programming approaches Haskell allows.</p> -<p>Besides its very elegant, pragmatic and almost-magical syntax, what really intrigues me about this language is what it offers, in terms of features:</p> +<p>I tried to learn Haskell in the past. Quietly, I started diving into the multitude of articles, tutorials, overviews + and even books about this fascinating academic language which claims to achieve functional purity though remaining + extremely useful, practical and efficient. Sadly, I'm still not able to fully grasp some of its most crucial + concepts, such as <a href="http://en.wikibooks.org/wiki/Programming:Haskell_monads">monads</a>, but this still + doesn't put me off <em>wishing</em> to learn the language.</p> +<p>If you've never enountered Haskell before, I find <a + href="http://www.willamette.edu/~fruehr/haskell/evolution.html">The Evolution of a Haskell Programmer</a> an amusing + and informative read. Although aiming to be humorous in a way, it serves a very important didascalic purpose: it is + one of the most complete collections of the different paradigms and programming approaches Haskell allows.</p> +<p>Besides its very elegant, pragmatic and almost-magical syntax, what really intrigues me about this language is what + it offers, in terms of features:</p> <ul> - <li>9 different <a href="http://www.haskell.org/haskellwiki/Implementations">implementations</a> (multiple compilers <em>and</em> interpreters)</li> - <li>Countless <a href="http://haskell.org/ghc/docs/latest/html/libraries/">standard libraries</a> <a href="http://hackage.haskell.org/packages/archive/pkg-list.html">packages</a> which can be used to solve <em>any</em> programming challenge</li> + <li>9 different <a href="http://www.haskell.org/haskellwiki/Implementations">implementations</a> (multiple compilers + <em>and</em> interpreters) + </li> + <li>Countless <a href="http://haskell.org/ghc/docs/latest/html/libraries/">standard libraries</a> <a + href="http://hackage.haskell.org/packages/archive/pkg-list.html">packages</a> which can be used to solve + <em>any</em> programming challenge + </li> <li>Abundant <a href="http://www.haskell.org/haskellwiki/Books_and_tutorials">learning material</a></li> - <li><a href="http://www.haskell.org/haskellwiki/Why_Haskell_matters#The_speed_of_Haskell">Speed</a> that rivals C and C++</li> + <li><a href="http://www.haskell.org/haskellwiki/Why_Haskell_matters#The_speed_of_Haskell">Speed</a> that rivals C and + C++</li> <li>Very mature cross-platform compatibility</li> </ul> -<p>The catch? It is likely to be very different from any other language you might have encountered before, and that&#8217;s probably the reason why some people find it difficult to learn and master. That being said, if you are looking for a challenging (but very rewarding, I believe) New Year&#8217;s Resolution, you should definitely go for this.</p> +<p>The catch? It is likely to be very different from any other language you might have encountered before, and + that's probably the reason why some people find it difficult to learn and master. That being said, if you are + looking for a challenging (but very rewarding, I believe) New Year's Resolution, you should definitely go for + this.</p> <h4>To get you started&#8230;</h4> <ul> <li><a href="http://www.haskell.org/">Official Haskell Wiki</a></li> <li><a href="http://en.wikibooks.org/wiki/Haskell">Haskell Wikibook</a></li> <li><a href="http://book.realworldhaskell.org/read/index.html">Real World Haskell</a></li> - <li><a href="http://cdsmith.wordpress.com/2007/07/29/37-reasons-to-love-haskell-playing-off-the-ruby-article/">37 Reasons to Love Haskell</a></li> + <li><a href="http://cdsmith.wordpress.com/2007/07/29/37-reasons-to-love-haskell-playing-off-the-ruby-article/">37 + Reasons to Love Haskell</a></li> <li><a href="http://antoniocangiano.com/2007/03/13/haskell-eye-for-the-ruby-guy/">Haskell for the Ruby Guy</a></li> - <li><a href="http://www.techworld.com.au/article/261007/-z_programming_languages_haskell">A-Z of Programming Languages: Haskell</a></li> + <li><a href="http://www.techworld.com.au/article/261007/-z_programming_languages_haskell">A-Z of Programming + Languages: Haskell</a></li> <li><a href="http://learnyouahaskell.com/">Learn you a Haskell for Great Good!</a></li> <li><a href="http://cgi.cse.unsw.edu.au/~dons/blog/2008/05/16">Haskell Hacking</a></li> </ul> <h3>Erlang</h3> -<p><a href="http://erlang.org/">Erlang</a> is a concurrent programming language originally developed by Ericsson for their real-time applications. It goes without saying that with these premise, Erlang seems the most natural answer to all concurrency problems you may encounter in your life as a programmer.<br /> -Developing with concurrency in mind feels natural and easy in Erlang, and the performance of Erlang-powered systems can be unmatched.</p> +<p><a href="http://erlang.org/">Erlang</a> is a concurrent programming language originally developed by Ericsson for + their real-time applications. It goes without saying that with these premise, Erlang seems the most natural answer to + all concurrency problems you may encounter in your life as a programmer.<br /> + Developing with concurrency in mind feels natural and easy in Erlang, and the performance of Erlang-powered systems + can be unmatched.</p> <p>Quite a few interesting applications have been developed in this language, such as:</p> <ul> <li><a href="http://couchdb.apache.org/">CouchDB</a>, a popular distributed, document-oriented database</li> <li><a href="http://yaws.hyber.org/">Yaws</a>, a high-performance web server</li> <li>even <a href="http://www.facebook.com/note.php?note_id=14218138919&amp;id=9445547199">Facebook Chat</a></li> </ul> -<p>The price Erlang adepts have to pay, as Damien Katz (CouchDB creator and Erlang enthusiast) <a href="http://damienkatz.net/2008/03/what_sucks_abou.html">points out</a>, is:</p> +<p>The price Erlang adepts have to pay, as Damien Katz (CouchDB creator and Erlang enthusiast) <a + href="http://damienkatz.net/2008/03/what_sucks_abou.html">points out</a>, is:</p> <ul> <li>Awkward syntax, inspired by Prolog</li> <li>Weird if expressions</li> <li>Difficult string operations</li> <li>No classes or namespaces</li> </ul> -<p>&#8230;this list could go on. Damien&#8217;s article is an interesting read, enough to put anyone off learning the language if read superficially. On the other hand, it provides an invaluable resource for newcomers who wish to be prepared before taking on the challenge of learning Erlang to build their next scalable, concurrent and industry-proof application.</p> +<p>&#8230;this list could go on. Damien's article is an interesting read, enough to put anyone off learning the + language if read superficially. On the other hand, it provides an invaluable resource for newcomers who wish to be + prepared before taking on the challenge of learning Erlang to build their next scalable, concurrent and industry-proof + application.</p> <h4>To get you started&#8230;</h4> <ul> <li><a href="http://www.erlang.org/">Official Erlang Web Site</a></li> - <li><a href="http://www.onlamp.com/pub/a/onlamp/2007/09/13/introduction-to-erlang.html">An Introduction to Erlang</a></li> + <li><a href="http://www.onlamp.com/pub/a/onlamp/2007/09/13/introduction-to-erlang.html">An Introduction to Erlang</a> + </li> <li><a href="http://www.defmacro.org/ramblings/concurrency.html">Erlang Style Concurrency</a></li> <li><a href="http://www.planeterlang.org/">PlanetErlang</a></li> <li><a href="http://www.erlang-projects.org/">Erlang Projects</a></li> </ul> <h3 id="io">Io</h3> -<p><a href="http://iolanguage.com/">Io</a> is a relatively new programming language by Steve Dekorte which recently surfaced from Google&#8217;s oblivion (if you tried googling for it a few months ago, you couldn&#8217;t event find its home page) thanks to a short vut stimulating <a href="http://hackety.org/2008/01/05/ioHasAVeryCleanMirror.html">article</a> by <a href="http://whytheluckystiff.net/">_why</a>. It doesn&#8217;t have the best name for a programming language, that&#8217;s for sure, but it&#8217;s definitely a breath of fresh air in terms of the way it works.</p> -<p>Its unusual, minimalist and yet elegant and powerful syntax reminds of Smalltalk, but the language goes far beyond that. Io is an object-oriented, prototype-based, message-based and fully-reflective programming language. This means that you use messages like in Smalltalk, you create objects like in Javascript and every bit of your code can be inspected and passed around as you see fit.</p> -<p>If you think Ruby allows fancy (and potentially dirty) tricks like metaprogramming and monkey-patching, Io takes this to a whole different level, imposing virtually no limitation to the programmer. What&#8217;s truly amazing is that its grammar and syntax are so minimal that you can learn them in literally 10 minutes. After that, you can start experimenting, first with its extremely small core and then with its extension libraries and bindings.</p> -<p>Io has indeed a lot of potential. Granted, it&#8217;s still young and under development, but also already quite efficient and suitable for real-world tasks demanding high speed and concurrency. It is implemented in C, but Ola Bini started to design a similar language called <a href="http://kenai.com/projects/ioke/">Ioke</a> for the Java Virtual Machine.</p> +<p><a href="http://iolanguage.com/">Io</a> is a relatively new programming language by Steve Dekorte which recently + surfaced from Google's oblivion (if you tried googling for it a few months ago, you couldn't event find + its home page) thanks to a short vut stimulating <a + href="http://hackety.org/2008/01/05/ioHasAVeryCleanMirror.html">article</a> by <a + href="http://whytheluckystiff.net/">_why</a>. It doesn't have the best name for a programming language, + that's for sure, but it's definitely a breath of fresh air in terms of the way it works.</p> +<p>Its unusual, minimalist and yet elegant and powerful syntax reminds of Smalltalk, but the language goes far beyond + that. Io is an object-oriented, prototype-based, message-based and fully-reflective programming language. This means + that you use messages like in Smalltalk, you create objects like in Javascript and every bit of your code can be + inspected and passed around as you see fit.</p> +<p>If you think Ruby allows fancy (and potentially dirty) tricks like metaprogramming and monkey-patching, Io takes this + to a whole different level, imposing virtually no limitation to the programmer. What's truly amazing is that its + grammar and syntax are so minimal that you can learn them in literally 10 minutes. After that, you can start + experimenting, first with its extremely small core and then with its extension libraries and bindings.</p> +<p>Io has indeed a lot of potential. Granted, it's still young and under development, but also already quite + efficient and suitable for real-world tasks demanding high speed and concurrency. It is implemented in C, but Ola Bini + started to design a similar language called <a href="http://kenai.com/projects/ioke/">Ioke</a> for the Java Virtual + Machine.</p> <h4>To get you started&#8230;</h4> <ul> <li><a href="http://iolanguage.com/">Official Io Web Site</a></li>

@@ -84,35 +146,57 @@ <li><a href="http://tech.groups.yahoo.com/group/iolanguage/">Io user group</a></li>

<li><a href="http://hackety.org/2008/01/05/ioHasAVeryCleanMirror.html">Io has a very clean mirror</a></li> <li><a href="http://iota.flowsnake.org/">Io Notes</a></li> <li><a href="http://wiki.type-z.org/index.php/Io/IoLanguage">Io Language Notes</a></li> - <li><a href="http://ozone.wordpress.com/2006/03/15/blame-it-on-io/">Blame it on Io! A slow-paced introduction to the Io language</a></li> + <li><a href="http://ozone.wordpress.com/2006/03/15/blame-it-on-io/">Blame it on Io! A slow-paced introduction to the + Io language</a></li> <li><a href="http://en.wikibooks.org/wiki/Programming:Io">Io Wikibook</a></li> </ul> <h3 id="plt-scheme"><span class="caps">PLT</span> Scheme</h3> -<p>I stumbled upon the <a href="http://plt-scheme.org/"><span class="caps">PLT</span> Scheme web site</a> while browsing for different Lisp flavors about a year ago. At the time, I was determined to learn the rudiments of Lisp and I started reading a few articles and books on this old and yet still popular language.<br /> -Although I was originally put off by certain Common Lisp literature, which dismissed Scheme as an almost-heretic attempt to revitalize an venerable language, I soon found out that Scheme &ndash; and <span class="caps">PLT</span> Scheme in particular &ndash; is definitely worthy of attention and interest.</p> -<p>Being a technical writer, I immediately became fond of the <a href="http://docs.plt-scheme.org/guide/"><span class="caps">PLT</span> Scheme Guide</a>, one of the clearest and most well-organized examples of documentation available for a programming language I&#8217;ve ever come across.<br /> -The manual is exquisitely crafted as a Getting Started Manual and a Reference Book at the same time, though remaining pleasant to read sequentially: a rare trait in technical documentation. Best of all, it&#8217;s free: you simply have no real excuse not to read it.</p> -<p>Besides its excellent documentation, <span class="caps">PLT</span> Scheme feels like a fresh and modern implementation of one of the two most important dialects of Lisp. It&#8217;s cross-platform, it has an extensive <a href="http://planet.plt-scheme.org/">collection of packages</a> and a very active community behind it. <br /> -After my first attempt to learn Haskell, I felt compelled to try out <span class="caps">PLT</span> Scheme and it immediately felt much easier and more user friendly to learn, partly because of <a href="http://download.plt-scheme.org/drscheme/">DrScheme</a> a dedicated <span class="caps">IDE</span>/learning tool optimized to get you started and feel comfortable with the language.<br /> -Caveats? None, unless you have an adversion for parenthesis, that is.</p> +<p>I stumbled upon the <a href="http://plt-scheme.org/"><span class="caps">PLT</span> Scheme web site</a> while browsing + for different Lisp flavors about a year ago. At the time, I was determined to learn the rudiments of Lisp and I + started reading a few articles and books on this old and yet still popular language.<br /> + Although I was originally put off by certain Common Lisp literature, which dismissed Scheme as an almost-heretic + attempt to revitalize an venerable language, I soon found out that Scheme &ndash; and <span class="caps">PLT</span> + Scheme in particular &ndash; is definitely worthy of attention and interest.</p> +<p>Being a technical writer, I immediately became fond of the <a href="http://docs.plt-scheme.org/guide/"><span + class="caps">PLT</span> Scheme Guide</a>, one of the clearest and most well-organized examples of documentation + available for a programming language I've ever come across.<br /> + The manual is exquisitely crafted as a Getting Started Manual and a Reference Book at the same time, though remaining + pleasant to read sequentially: a rare trait in technical documentation. Best of all, it's free: you simply have + no real excuse not to read it.</p> +<p>Besides its excellent documentation, <span class="caps">PLT</span> Scheme feels like a fresh and modern + implementation of one of the two most important dialects of Lisp. It's cross-platform, it has an extensive <a + href="http://planet.plt-scheme.org/">collection of packages</a> and a very active community behind it. <br /> + After my first attempt to learn Haskell, I felt compelled to try out <span class="caps">PLT</span> Scheme and it + immediately felt much easier and more user friendly to learn, partly because of <a + href="http://download.plt-scheme.org/drscheme/">DrScheme</a> a dedicated <span class="caps">IDE</span>/learning tool + optimized to get you started and feel comfortable with the language.<br /> + Caveats? None, unless you have an adversion for parenthesis, that is.</p> <h4>To get you started&#8230;</h4> <ul> <li><a href="http://plt-scheme.org/">Official <span class="caps">PLT</span> Scheme Web Site</a></li> <li><a href="http://docs.plt-scheme.org/guide/index.html"><span class="caps">PLT</span> Scheme Guide</a></li> <li><a href="http://planet.plt-scheme.org/">PLaneT</a></li> - <li><a href="http://docs.plt-scheme.org/quick/">Quick: An Introduction to <span class="caps">PLT</span> Scheme with Pictures</a></li> - <li><a href="http://docs.plt-scheme.org/more/">More: Systems Programming with <span class="caps">PLT</span> Scheme</a></li> + <li><a href="http://docs.plt-scheme.org/quick/">Quick: An Introduction to <span class="caps">PLT</span> Scheme with + Pictures</a></li> + <li><a href="http://docs.plt-scheme.org/more/">More: Systems Programming with <span class="caps">PLT</span> Scheme</a> + </li> </ul> <h3 id="clojure">Clojure</h3> -<p><a href="http://clojure.org/">Clojure</a> is the most recent and notable attempt to bring Lisp back to life and ready to face the challenges posed to IT systems by the new century: concurrency and scalability. Because it runs on the Java Virtual Machine, you also get Java interoperability for free, in a more Lispy flavour. Although I&#8217;m a bit reluctant to deal with anything related to Java nowadays, Clojure&#8217;s approach makes it more appealing.</p> +<p><a href="http://clojure.org/">Clojure</a> is the most recent and notable attempt to bring Lisp back to life and ready + to face the challenges posed to IT systems by the new century: concurrency and scalability. Because it runs on the + Java Virtual Machine, you also get Java interoperability for free, in a more Lispy flavour. Although I'm a bit + reluctant to deal with anything related to Java nowadays, Clojure's approach makes it more appealing.</p> <p>Unlike other Lisps (and Schemes) you may have encountered before, Clojure comes with some interesting additions:</p> <ul> <li><a href="http://clojure.org/multimethods">Multimethods</a></li> <li><a href="http://clojure.org/agents">Agents asynchronous actions</a></li> - <li>Some interestings <a href="http://clojure.org/special_forms">special forms</a></li> - <li>Many pre-built <a href="http://clojure.org/data_structures">data structures</a>, like Vectors, Maps, Sets, Collections, &#8230;</li> + <li>Some interesting <a href="http://clojure.org/special_forms">special forms</a></li> + <li>Many pre-built <a href="http://clojure.org/data_structures">data structures</a>, like Vectors, Maps, Sets, + Collections, &#8230;</li> </ul> -<p>Despite all this, Rich Hickey became increasingly popular both in the Lisp and Java world for creating such an interesting and well-designed language. Unlike with many new (and old) programming languages, I have yet to find a single blog post or article which is seriously criticizing Clojure in any way.</p> +<p>Despite all this, Rich Hickey became increasingly popular both in the Lisp and Java world for creating such an + interesting and well-designed language. Unlike with many new (and old) programming languages, I have yet to find a + single blog post or article which is seriously criticizing Clojure in any way.</p> <h4>To get you started&#8230;</h4> <ul> <li><a href="http://clojure.org">Official Clojure Web Site</a></li>

@@ -123,51 +207,88 @@ <li><a href="http://groups.google.com/group/clojure/msg/f038decc18c7da37">My first look at Clojure</a></li>

<li><a href="http://enclojure.net/Index.html">Enclojure</a></li> </ul> <h3 id="squeak">Squeak</h3> -<p><a href="http://www.squeak.org/">Squeak</a> has become one of the most popular Smalltalk implementations available. It has been used in some very interesting projects:</p> +<p><a href="http://www.squeak.org/">Squeak</a> has become one of the most popular Smalltalk implementations available. + It has been used in some very interesting projects:</p> <ul> - <li><a href="http://wiki.laptop.org/go/Smalltalk_Development_on_XO">EToys</a>, a kids-oriented but powerful development environment built in Squeak, was included as part of the educational sofware suite of the <a href="http://www.laptop.org"><span class="caps">OLPC</span></a>.</li> + <li><a href="http://wiki.laptop.org/go/Smalltalk_Development_on_XO">EToys</a>, a kids-oriented but powerful + development environment built in Squeak, was included as part of the educational sofware suite of the <a + href="http://www.laptop.org"><span class="caps">OLPC</span></a>.</li> <li><a href="http://www.seaside.st/">Seaside</a> is a modern and very productive web framework running on Squeak.</li> - <li><a href="http://www.croquetproject.org/index.php/Main_Page">Croquet</a> is a development solution to build complex, multi-user virtual worlds.</li> + <li><a href="http://www.croquetproject.org/index.php/Main_Page">Croquet</a> is a development solution to build + complex, multi-user virtual worlds.</li> </ul> -<p>If you ask <a href="http://www.stonehenge.com/merlyn/">Randal Schwartz</a>, he&#8217;ll explain you <a href="http://www.infoq.com/articles/smalltalk-comeback-schwartz">why</a> Squeak and Smalltalk are at least worth a look. Personally, while I&#8217;m attracted by Smalltalk&#8217;s unique approach to programming and its friendly syntax, I am still a bit overwhelmed by the way it works. <br /> -Squeak, and Smalltalk in general, runs inside (literally) a virtual machine written in Squeak itself. This means that:</p> +<p>If you ask <a href="http://www.stonehenge.com/merlyn/">Randal Schwartz</a>, he'll explain you <a + href="http://www.infoq.com/articles/smalltalk-comeback-schwartz">why</a> Squeak and Smalltalk are at least worth a + look. Personally, while I'm attracted by Smalltalk's unique approach to programming and its friendly + syntax, I am still a bit overwhelmed by the way it works. <br /> + Squeak, and Smalltalk in general, runs inside (literally) a virtual machine written in Squeak itself. This means that: +</p> <ul> <li>You write your code inside Squeak</li> <li>You debug, inspect and interact your code inside squeak</li> <li>You run your code inside Squeak</li> <li>You can install Squeak on virtually any platform, including mobile phones, fairly easily</li> </ul> -<p>Everything lives inside Squeak. It&#8217;s very weird to picture this without actually trying it, so I suggest you <a href="http://www.squeak.org/Download/">download it</a> and give it a try: it will definitely be an unusual but intriguing experience.</p> -<p>Smalltalk takes programming to a whole different level, which is simply unimaginable for other languages. In return, it asks you to fully embrace the Smalltalk way of doing things, according to which external text editors, external version control systems and other common tools familiar to traditional programmers simply loose their purpose.</p> +<p>Everything lives inside Squeak. It's very weird to picture this without actually trying it, so I suggest you <a + href="http://www.squeak.org/Download/">download it</a> and give it a try: it will definitely be an unusual but + intriguing experience.</p> +<p>Smalltalk takes programming to a whole different level, which is simply unimaginable for other languages. In return, + it asks you to fully embrace the Smalltalk way of doing things, according to which external text editors, external + version control systems and other common tools familiar to traditional programmers simply loose their purpose.</p> <h4>To get you started&#8230;</h4> <ul> <li><a href="http://www.squeak.org/">Official Squeak Web Site</a></li> <li><a href="http://squeakbyexample.org/">Squeak by Example</a></li> <li><a href="http://www.squeakland.org/">SqueakLand</a></li> - <li><a href="http://www.infoq.com/articles/smalltalk-comeback-schwartz">Ruby&#8217;s Roots: Smalltalk Comeback and Randal Schwartz on Smalltalk</a></li> + <li><a href="http://www.infoq.com/articles/smalltalk-comeback-schwartz">Ruby's Roots: Smalltalk Comeback and + Randal Schwartz on Smalltalk</a></li> <li><a href="http://twit.tv/floss29"><span class="caps">FLOSS</span> Weekly 29: Dan Ingalls</a></li> </ul> <h3 id="ocaml">OCaml</h3> -<p>Like Smalltalk, <a href="http://caml.inria.fr/">OCaml</a> has been getting more attention recently than in the past. Sure, not everyone is planning to learn is these days, but after reading <a href="http://enfranchisedmind.com/blog/2008/04/14/useful-things-about-static-typing/">this article</a> I admit I was eager to give it a proper try.</p> -<p>Despite being statically typed, OCaml offers some of the features which are common in dynamically typed languages like Ruby, such as duck typing, the possibility of creating Domain-Specific Languages and even extending the language syntax with custom operators and constructs.</p> -<p>Additionally, the <a href="http://batteries.forge.ocamlcore.org/">OCaml Batteries Included</a> project was created as an attempt to bundle a standard set of commonly-used library together with the language core. Even if this project is still in alpha stage, it definitely <a href="http://dutherenverseauborddelatable.wordpress.com/2008/11/07/a-taste-of-ocaml-batteries-included/">looks promising</a>.</p> +<p>Like Smalltalk, <a href="http://caml.inria.fr/">OCaml</a> has been getting more attention recently than in the past. + Sure, not everyone is planning to learn is these days, but after reading <a + href="http://enfranchisedmind.com/blog/2008/04/14/useful-things-about-static-typing/">this article</a> I admit I was + eager to give it a proper try.</p> +<p>Despite being statically typed, OCaml offers some of the features which are common in dynamically typed languages + like Ruby, such as duck typing, the possibility of creating Domain-Specific Languages and even extending the language + syntax with custom operators and constructs.</p> +<p>Additionally, the <a href="http://batteries.forge.ocamlcore.org/">OCaml Batteries Included</a> project was created as + an attempt to bundle a standard set of commonly-used library together with the language core. Even if this project is + still in alpha stage, it definitely <a + href="http://dutherenverseauborddelatable.wordpress.com/2008/11/07/a-taste-of-ocaml-batteries-included/">looks + promising</a>.</p> <h4>To get you started&#8230;</h4> <ul> <li><a href="http://caml.inria.fr/">Official Caml Web Site</a></li> <li><a href="http://www.ocaml-tutorial.org/">Objective Caml Tutorial</a></li> - <li><a href="http://www.csc.villanova.edu/~dmatusze/resources/ocaml/ocaml.html">A Concise Introduction to Objective Caml</a></li> + <li><a href="http://www.csc.villanova.edu/~dmatusze/resources/ocaml/ocaml.html">A Concise Introduction to Objective + Caml</a></li> <li><a href="http://wiki.cocan.org/">The OCaml Alliance Network</a></li> <li><a href="http://ocamlnews.blogspot.com/">OCaml News</a></li> <li><a href="http://batteries.forge.ocamlcore.org/">OCaml Batteries Included</a></li> </ul> <h3>Factor</h3> -<p><a href="http://factorcode.org/">Factor</a> is to Forth what <a href="http://clojure.org">Clojure</a> is to Common Lisp: a reincarnation of an ancient language in a more modern and practical form. In the specific case, although it borrows from Lisp and Self as well, Factor retains the main characteristics of its ancestor: it&#8217;s stack-based, concatenative and has postfix notation.<br /> -While this is enough to put some people off, if you digg deeper you&#8217;ll discover that Factor offers all the most important features available in contemporary programming languages: garbage collection, dynamic typing, an object system, &#8230; they&#8217;re just presented in a very different way:</p> +<p><a href="http://factorcode.org/">Factor</a> is to Forth what <a href="http://clojure.org">Clojure</a> is to Common + Lisp: a reincarnation of an ancient language in a more modern and practical form. In the specific case, although it + borrows from Lisp and Self as well, Factor retains the main characteristics of its ancestor: it's stack-based, + concatenative and has postfix notation.<br /> + While this is enough to put some people off, if you digg deeper you'll discover that Factor offers all the most + important features available in contemporary programming languages: garbage collection, dynamic typing, an object + system, &#8230; they're just presented in a very different way:</p> <blockquote> - <p>&#8220;Learning Factor is tough. One reason for this is that Factor is very different from other programming languages. Programmers today are used to imperative programming languages where data is stored and passed around in named variables (or function calls, which name their variables). Factor is the opposite of this. A lot of code tends to be written in a functional style, and even more jarringly, variables are rare, only referenced in a small fraction of words. Nobody intends to change any of this; it&#8217;s a feature, not a bug!&#8221;</p> + <p>&#8220;Learning Factor is tough. One reason for this is that Factor is very different from other programming + languages. Programmers today are used to imperative programming languages where data is stored and passed around in + named variables (or function calls, which name their variables). Factor is the opposite of this. A lot of code tends + to be written in a functional style, and even more jarringly, variables are rare, only referenced in a small + fraction of words. Nobody intends to change any of this; it's a feature, not a bug!&#8221;</p> </blockquote> -<p style="padding-left:3em;">&ndash; Daniel Ehrenberg, <cite><a href="http://useless-factor.blogspot.com/2008/01/learning-factor.html">Learning Factor</a></cite></p> -<p>Like Haskell, Factor demands a completely different programming approach to what you may be used to, but once you get past that, it can be as useful as any other language, if not more. The <a href="http://docs.factorcode.org/content/article-furnace.html">Furnace</a> web framework, which powers the <a href="http://concatenative.org/">Concatenative</a> wiki, is entirely built in Factor and runs on top of a Factor web server.</p> +<p style="padding-left:2rem;">&ndash; Daniel Ehrenberg, <cite><a + href="http://useless-factor.blogspot.com/2008/01/learning-factor.html">Learning Factor</a></cite></p> +<p>Like Haskell, Factor demands a completely different programming approach to what you may be used to, but once you get + past that, it can be as useful as any other language, if not more. The <a + href="http://docs.factorcode.org/content/article-furnace.html">Furnace</a> web framework, which powers the <a + href="http://concatenative.org/">Concatenative</a> wiki, is entirely built in Factor and runs on top of a Factor web + server.</p> <h4>To get you started&#8230;</h4> <ul> <li><a href="http://factorcode.org/">Official Factor Web Site</a></li>

@@ -177,10 +298,20 @@ <li><a href="http://learnfactor.org/">Learn Factor</a></li>

<li><a href="http://planet.factorcode.org/">Planet Factor</a></li> </ul> <h3 id="lua">Lua</h3> -<p><a href="http://www.lua.org/">Lua</a> (&#8220;Moon&#8221; in Portuguese), is a lightweight and fast scripting language which can be easily embedded in other systems. Compared to the other languages mentioned in this article, it is definitely the less alien of the lot: if you know a tiny bit of C or Java, you&#8217;ll be able to understand (and possibly write) 80% of Lua code without reading a single line of its documentation.</p> -<p>Despite its simplicity, Lua is considered a multi-paradigm language supporting imperative, functional and even object-oriented approaches. More specifically, Lua&#8217;s <em>tables</em> provide a simple but powerful way to create arrays, hashes and even classes (or better, prototypes). Simple (and multiple) inheritance is achieved through <em>metatables</em>, which allow calls to undefined functions to be <em>transferred</em> to parent tables.</p> -<p>Lua programs are not interpreted in the traditional way: they are compiled to bytecode and then executed in the Lua Virtual Machine. As a result, Lua code tends to be executed much faster than other interpreted languages, so fast that &#8220;as fast as Lua&#8221; has become a proverbial expression.<br /> -Lua found its niche in embedded applications and games development, basically everywhere there&#8217;s the need to provide a fast scripting language which is also very easy to learn and extend with C or other languages.</p> +<p><a href="http://www.lua.org/">Lua</a> (&#8220;Moon&#8221; in Portuguese), is a lightweight and fast scripting + language which can be easily embedded in other systems. Compared to the other languages mentioned in this article, it + is definitely the less alien of the lot: if you know a tiny bit of C or Java, you'll be able to understand (and + possibly write) 80% of Lua code without reading a single line of its documentation.</p> +<p>Despite its simplicity, Lua is considered a multi-paradigm language supporting imperative, functional and even + object-oriented approaches. More specifically, Lua's <em>tables</em> provide a simple but powerful way to create + arrays, hashes and even classes (or better, prototypes). Simple (and multiple) inheritance is achieved through + <em>metatables</em>, which allow calls to undefined functions to be <em>transferred</em> to parent tables. +</p> +<p>Lua programs are not interpreted in the traditional way: they are compiled to bytecode and then executed in the Lua + Virtual Machine. As a result, Lua code tends to be executed much faster than other interpreted languages, so fast that + &#8220;as fast as Lua&#8221; has become a proverbial expression.<br /> + Lua found its niche in embedded applications and games development, basically everywhere there's the need to + provide a fast scripting language which is also very easy to learn and extend with C or other languages.</p> <h4>To get you started&#8230;</h4> <ul> <li><a href="http://www.lua.org/">Official Lua Web Site</a></li>

@@ -190,21 +321,46 @@ <li><a href="http://icculus.org/~theoddone33/lua/">Learning Lua</a></li>

<li><a href="http://lua.gts-stolberg.de/en/index.php?uml=1">Lua for Beginners</a></li> </ul> <h3 id="scala">Scala</h3> -<p>You may not be happy to see <a href="http://www.scala-lang.org/">Scala</a> in this list instead of other very valid and equally powerful languages for the Java Virtual Machine such as <a href="http://groovy.codehaus.org/">Groovy</a>. While there was no doubt on whether Clojure should have been included or not, I was a bit hesitant to include Scala. In the end, I chose to do so simply because Scala fits better in this list than other languages: as you should have noticed by now, I am somehow more inclined to learn functional languages as opposed to their object-oriented counterparts.</p> -<p>Scala is both object oriented and functional. It offers the best of both worlds: classes, traits and mixins which may be familiar to <span class="caps">OOP</span> lovers but also anonymous functions, currying and pattern matching which may please Haskell enthusiasts. Additionally, it&#8217;s also compatible with Java: so if you use Java for work, trying out Scala for pleasure is definitely the most logical next step, especially if you want to experiment with functional programming in the meantime.</p> -<p>Compared to learning a fully-functional (no pun intended) language like Haskell, Clojure or <span class="caps">PLT</span> Scheme, learning Scala is definitely easier and will feel less alien.</p> +<p>You may not be happy to see <a href="http://www.scala-lang.org/">Scala</a> in this list instead of other very valid + and equally powerful languages for the Java Virtual Machine such as <a href="http://groovy.codehaus.org/">Groovy</a>. + While there was no doubt on whether Clojure should have been included or not, I was a bit hesitant to include Scala. + In the end, I chose to do so simply because Scala fits better in this list than other languages: as you should have + noticed by now, I am somehow more inclined to learn functional languages as opposed to their object-oriented + counterparts.</p> +<p>Scala is both object oriented and functional. It offers the best of both worlds: classes, traits and mixins which may + be familiar to <span class="caps">OOP</span> lovers but also anonymous functions, currying and pattern matching which + may please Haskell enthusiasts. Additionally, it's also compatible with Java: so if you use Java for work, + trying out Scala for pleasure is definitely the most logical next step, especially if you want to experiment with + functional programming in the meantime.</p> +<p>Compared to learning a fully-functional (no pun intended) language like Haskell, Clojure or <span + class="caps">PLT</span> Scheme, learning Scala is definitely easier and will feel less alien.</p> <h4>To get you started&#8230;</h4> <ul> <li><a href="http://www.scala-lang.org/">Official Scala Web Site</a></li> <li><a href="http://blogs.zdnet.com/Burnette/?p=690">The Case for Scala</a></li> <li><a href="http://scala.sygneca.com/">Scala Wiki</a></li> <li><a href="http://grok-code.com/75/learning-scala-with-project-euler/">Learning Scala with Project Euler</a></li> - <li><a href="http://www.codecommit.com/blog/scala/roundup-scala-for-java-refugees">Roundup: Scala for Java Refugees</a></li> + <li><a href="http://www.codecommit.com/blog/scala/roundup-scala-for-java-refugees">Roundup: Scala for Java + Refugees</a></li> </ul> <h3>Epilogue</h3> -<p>There are so many interesting programming language out there that it&#8217;s very hard to keep track of all of them. I hope this list can aid you in the right direction, whichever it may be. <br /> -Some people may debate over the very essence of this article: why <em>choosing</em> a programming language? Why spending time and energy in a task which may lead to a lot of confusion in your mind and lead you nowhere? What&#8217;s the purpose of learning something which may feel totally alien to you?</p> -<p>A programming language is ultimately just a tool to get your job done. If you have to write an end-user, desktop <span class="caps">GUI</span> application which will always run on Windows and which needs to inteface with Microsoft technologies, you&#8217;ll choose C# over Haskell, there&#8217;s no doubt about that. Especially if 500 developers in your company already develop in C# and you don&#8217;t, as a matter of fact, have a saying on the matter.</p> -<p>But what if you <em>could</em> choose? What if you wanted to develop your own geeky command line application to automate a particular task for yourself, and not because someone else tells you to do so? Would you be willing to experiment with something totally different and potentially difficult just for the sake of learning new things?</p> -<p>If the answer is yes, then you should take a look at this list again. Not now, maybe not this month or this year, but when you feel the time is right, and give one of these languages a shot. It may not end well (so far I attempted to learn Haskell twice, with no luck), but I promise you it will be worthwhile, in the long run. <br /> -If you already mastered some of these languages already, or even all of them, be assured that they&#8217;re plenty out there ready to be discovered and open your mind even more. Or, if you prefer, there are a lot of minds out there which may need guidance in learning and discovery. Help them. Write articles, tutorials, books, educate and evangelize: ultimately, that will be your greatest reward.</p> +<p>There are so many interesting programming language out there that it's very hard to keep track of all of them. + I hope this list can aid you in the right direction, whichever it may be. <br /> + Some people may debate over the very essence of this article: why <em>choosing</em> a programming language? Why + spending time and energy in a task which may lead to a lot of confusion in your mind and lead you nowhere? + What's the purpose of learning something which may feel totally alien to you?</p> +<p>A programming language is ultimately just a tool to get your job done. If you have to write an end-user, desktop + <span class="caps">GUI</span> application which will always run on Windows and which needs to inteface with Microsoft + technologies, you'll choose C# over Haskell, there's no doubt about that. Especially if 500 developers in + your company already develop in C# and you don't, as a matter of fact, have a saying on the matter. +</p> +<p>But what if you <em>could</em> choose? What if you wanted to develop your own geeky command line application to + automate a particular task for yourself, and not because someone else tells you to do so? Would you be willing to + experiment with something totally different and potentially difficult just for the sake of learning new things?</p> +<p>If the answer is yes, then you should take a look at this list again. Not now, maybe not this month or this year, but + when you feel the time is right, and give one of these languages a shot. It may not end well (so far I attempted to + learn Haskell twice, with no luck), but I promise you it will be worthwhile, in the long run. <br /> + If you already mastered some of these languages already, or even all of them, be assured that they're plenty out + there ready to be discovered and open your mind even more. Or, if you prefer, there are a lot of minds out there which + may need guidance in learning and discovery. Help them. Write articles, tutorials, books, educate and evangelize: + ultimately, that will be your greatest reward.</p>
M contents/articles/10-reasons-to-learn-ruby.htmlcontents/articles/10-reasons-to-learn-ruby.html

@@ -7,78 +7,169 @@ timestamp: 1188988800

tags: "ruby" ----- <h3>Preamble</h3> -<p>I discovered Ruby fairly recently, through the excellent Ruby on Rails framework<sup class="footnote" id="fnr1"><a href="#fn1">1</a></sup>. Although I don&#8217;t consider myself a Ruby expert by any means, I read the PickAxe<sup class="footnote" id="fnr2"><a href="#fn2">2</a></sup>, I&#8217;ve coded a few utilities for my personal use in Ruby and I&#8217;m currently developing with Rails during my free time.</p> -<p>Ruby is currently my programming language of choice; I started off with Turbo Pascal in high school, discovered C and C++ at university, did my thesis in Java and learned <span class="caps">PHP</span> from scratch because I wanted to learn how to make websites quickly and easily. I guess I feel compelled to code sometimes, more as a form of entertainment than anything else. Rather dissatisfied with what I tried language-wise, I was determined to start learning either Python or Ruby. I chose the latter because I didn&#8217;t want incorrect indentation to break my code<sup class="footnote" id="fnr3"><a href="#fn3">3</a></sup>, and here I am, heaping praise upon it.</p> -<p>There are plenty<sup class="footnote" id="fnr4"><a href="#fn4">4</a></sup> of introductions, tutorials, articles and essays of different sorts which aim to guide the novice and advise the guru on how to get the most out of Ruby. This article, however, is not one of them.</p> -<p>It&#8217;s more of a modest, humble, and incomplete list of a few reasons which may (or may not) entice you to use Ruby or at least play with it a bit. A word of caution: if you are using another programming language for work or whatever, don&#8217;t complain to me if you don&#8217;t want to use it anymore &#8211; that&#8217;s exactly what happened to me, but luckily, it didn&#8217;t matter. Ruby is a very beautiful and elegant language, but like all things of this sort, it may well poison your mind and corrupt your soul&#8230;</p> +<p>I discovered Ruby fairly recently, through the excellent Ruby on Rails framework<sup class="footnote" id="fnr1"><a + href="#fn1">1</a></sup>. Although I don't consider myself a Ruby expert by any means, I read the PickAxe<sup + class="footnote" id="fnr2"><a href="#fn2">2</a></sup>, I've coded a few utilities for my personal use in Ruby + and I'm currently developing with Rails during my free time.</p> +<p>Ruby is currently my programming language of choice; I started off with Turbo Pascal in high school, discovered C and + C++ at university, did my thesis in Java and learned <span class="caps">PHP</span> from scratch because I wanted to + learn how to make websites quickly and easily. I guess I feel compelled to code sometimes, more as a form of + entertainment than anything else. Rather dissatisfied with what I tried language-wise, I was determined to start + learning either Python or Ruby. I chose the latter because I didn't want incorrect indentation to break my code<sup + class="footnote" id="fnr3"><a href="#fn3">3</a></sup>, and here I am, heaping praise upon it.</p> +<p>There are plenty<sup class="footnote" id="fnr4"><a href="#fn4">4</a></sup> of introductions, tutorials, articles and + essays of different sorts which aim to guide the novice and advise the guru on how to get the most out of Ruby. This + article, however, is not one of them.</p> +<p>It's more of a modest, humble, and incomplete list of a few reasons which may (or may not) entice you to use Ruby or + at least play with it a bit. A word of caution: if you are using another programming language for work or whatever, + don't complain to me if you don't want to use it anymore &#8211; that's exactly what happened to me, but luckily, it + didn't matter. Ruby is a very beautiful and elegant language, but like all things of this sort, it may well poison + your mind and corrupt your soul&#8230;</p> <p>You have been warned.<br /> -h3. Why learn Ruby?</p> + h3. Why learn Ruby?</p> <h4>#1 &#8211; You get all the treats without the tricks</h4> -<p>Ruby borrows from all the best programming languages out there, from smalltalk to Java, Perl to Python<sup class="footnote" id="fnr5"><a href="#fn5">5</a></sup>. Basically, here&#8217;s the features and functionalities Ruby gives you which you may have seen elsewhere:</p> +<p>Ruby borrows from all the best programming languages out there, from smalltalk to Java, Perl to Python<sup + class="footnote" id="fnr5"><a href="#fn5">5</a></sup>. Basically, here's the features and functionalities Ruby + gives you which you may have seen elsewhere:</p> <ul> - <li><em>Exceptions:</em> Believe it or not, exceptions are one of the most important things to master when developing any kind of application. PHP4 programmers probably won&#8217;t know anything about them and they&#8217;ll tell you to just print stuff on the screen or use their &#8220;extremely advanced&#8221; class for error handling. Please, ignore them. Fortunately for all of us, Ruby comes with try/catch (or better, begin/rescue) blocks and a series of predefined, extensible Exceptions to handle errors properly.</li> - <li><em>Namespaces:</em> Ruby modules make excellent and easy-to-use namespaces, for the joy of Java and C++ enthusiasts.</li> - <li><em>Built-in Regular Expressions:</em> For all the Perl monkeys, you can put something between slashes and it will become a regular expression, ready to be matched with a =~ operator.</li> + <li><em>Exceptions:</em> Believe it or not, exceptions are one of the most important things to master when + developing any kind of application. PHP4 programmers probably won't know anything about them and they'll tell + you to just print stuff on the screen or use their &#8220;extremely advanced&#8221; class for error handling. + Please, ignore them. Fortunately for all of us, Ruby comes with try/catch (or better, begin/rescue) blocks and a + series of predefined, extensible Exceptions to handle errors properly.</li> + <li><em>Namespaces:</em> Ruby modules make excellent and easy-to-use namespaces, for the joy of Java and C++ + enthusiasts.</li> + <li><em>Built-in Regular Expressions:</em> For all the Perl monkeys, you can put something between slashes and it + will become a regular expression, ready to be matched with a =~ operator.</li> <li><em>Overloadable operators:</em> Ruby lets you define operators like +, -, etc., for any of your classes.</li> - <li><em>Packages:</em> Called &#8220;gems&#8221;, they really are solid and precious indeed&#8230;and they work! Packages support dependencies, and they can be either cross-platform or platform-dependent.</li> - <li><em>Interactive Shell:</em> the Interactive Ruby Shell can be used to test Ruby code instantly, similar to the Python console.</li> - <li><em>Unit Testing</em>: The <code>Test::Unit</code> module makes things so easy that you really don&#8217;t have any excuse not to test your code.</li> + <li><em>Packages:</em> Called &#8220;gems&#8221;, they really are solid and precious indeed&#8230;and they work! + Packages support dependencies, and they can be either cross-platform or platform-dependent.</li> + <li><em>Interactive Shell:</em> the Interactive Ruby Shell can be used to test Ruby code instantly, similar to the + Python console.</li> + <li><em>Unit Testing</em>: The <code>Test::Unit</code> module makes things so easy that you really don't have any + excuse not to test your code.</li> </ul> -<h4>#2 &#8211; You&#8217;ll love the little things</h4> -<p>Ruby is elegant. Why&#8217;s that? Because it doesn&#8217;t focus on making code <em>concise</em> so much as <em>readable and usable</em>. Here are some tips to help you out:</p> +<h4>#2 &#8211; You'll love the little things</h4> +<p>Ruby is elegant. Why's that? Because it doesn't focus on making code <em>concise</em> so much as <em>readable and + usable</em>. Here are some tips to help you out:</p> <ul> - <li>You can use both <em>if</em> and <em>unless</em> in condition statements. Of course you can just use <em>if</em> and negate the condition, but <em>unless</em> can be less error-prone at times. Furthermore, you can use both operators as conditional modifiers, after a statement rather than before: <em>order.new unless order.exists</em>.</li> - <li>You can use question marks and exclamation marks at the end of your methods. Although no convention is enforced, ? is added if the method should return true or false, while ! is used to clarify that the method does something forcefully, like destroying a database record, chopping off the last character of a string, etc.</li> - <li>You can use the <em>alias</em> directives to create an alias for a method already defined. In this way you can have an <em>exist</em> and an <em>exists</em> method at no additional cost or repetition.</li> - <li>You can use the <em>attr_reader</em>, <em>attr_writer</em> or <em>attr_accessor</em> directives to automatically generate getter and setter methods for specified class members.</li> - <li>Some naming conventions are enforced for your own sanity: constants, classes and modules are capitalized, methods and members must start with a lowercase letter; global variables are prepended by a $, instance variables by <code>@</code> and class variables by <code>@@</code>; etc.</li> - <li>Parentheses are optional in method calls. You can therefore write <em>File.open(&#8220;/home/h3rald/test.txt&#8221;)</em> or simply <em>File.open &#8220;/home/h3rald/test.txt&#8221;</em>, which is particularly handy with methods that don&#8217;t take parameters.</li> + <li>You can use both <em>if</em> and <em>unless</em> in condition statements. Of course you can just use <em>if</em> + and negate the condition, but <em>unless</em> can be less error-prone at times. Furthermore, you can use both + operators as conditional modifiers, after a statement rather than before: <em>order.new unless + order.exists</em>.</li> + <li>You can use question marks and exclamation marks at the end of your methods. Although no convention is enforced, + ? is added if the method should return true or false, while ! is used to clarify that the method does something + forcefully, like destroying a database record, chopping off the last character of a string, etc.</li> + <li>You can use the <em>alias</em> directives to create an alias for a method already defined. In this way you can + have an <em>exist</em> and an <em>exists</em> method at no additional cost or repetition.</li> + <li>You can use the <em>attr_reader</em>, <em>attr_writer</em> or <em>attr_accessor</em> directives to automatically + generate getter and setter methods for specified class members.</li> + <li>Some naming conventions are enforced for your own sanity: constants, classes and modules are capitalized, + methods and members must start with a lowercase letter; global variables are prepended by a $, instance + variables by <code>@</code> and class variables by <code>@@</code>; etc.</li> + <li>Parentheses are optional in method calls. You can therefore write + <em>File.open(&#8220;/home/h3rald/test.txt&#8221;)</em> or simply <em>File.open + &#8220;/home/h3rald/test.txt&#8221;</em>, which is particularly handy with methods that don't take + parameters. + </li> </ul> -<h4>#3 &#8211; You won&#8217;t ever use a semicolon again</h4> -<p>You want to add another instruction? Just go on the next line. Hit <return> and you&#8217;re done. In Ruby, like in Python, newlines matter and you don&#8217;t have to remember to end your instructions with a semicolon. Unfortunately this means that you won&#8217;t be able to write your whole program in a single line of code, like the C++ folks&#8230; that&#8217;s too bad, isn&#8217;t it?</p> -<p><strong><span class="caps">UPDATE</span>:</strong> Indeed you <span class="caps">CAN</span> use semicolons as line delimiters in Ruby as well, the point, however, is that you don&#8217;t have to.</p> +<h4>#3 &#8211; You won't ever use a semicolon again</h4> +<p>You want to add another instruction? Just go on the next line. Hit <return> and you're done. In Ruby, like in Python, + newlines matter and you don't have to remember to end your instructions with a semicolon. Unfortunately this + means that you won't be able to write your whole program in a single line of code, like the C++ folks&#8230; + that's too bad, isn't it?</p> +<p><strong><span class="caps">UPDATE</span>:</strong> Indeed you <span class="caps">CAN</span> use semicolons as line + delimiters in Ruby as well, the point, however, is that you don't have to.</p> <h4>#4 &#8211; Everything is an object, as it should be</h4> <p>When I studied Java they taught me that everything is an object.</p> <p><em>- &#8220;So 14 and 374346.678 are objects then?&#8221;</em><br /> -<em>- &#8220;No, silly, they are numbers!&#8221;</em></p> -<p>In Ruby, numbers, strings, Boolean values <em>et al</em> are objects. Really. This means you&#8217;ll write things like:</p> -<div class='ruby'><pre><code>"YOU SHOULDN'T ALWAYS USE CAPITALS".downcase #=&gt; outputs "you shouldn't always use capitals" --12.abs #=&gt; outputs 12</code></pre></div><p>instead of something like:</p> -<div class='ruby'><pre><code># PHP Code + <em>- &#8220;No, silly, they are numbers!&#8221;</em> +</p> +<p>In Ruby, numbers, strings, Boolean values <em>et al</em> are objects. Really. This means you'll write things like: +</p> +<div class='ruby'> + <pre><code class="ruby">"YOU SHOULDN'T ALWAYS USE CAPITALS".downcase #=&gt; outputs "you shouldn't always use capitals" +-12.abs #=&gt; outputs 12</code></pre> +</div> +<p>instead of something like:</p> +<div class='php'> + <pre><code class="php"># PHP Code strtolower("YOU SHOULDN'T ALWAYS USE CAPITALS"); -abs(-12);</code></pre></div><p>You save time, you save brackets, and it just makes more sense.</p> +abs(-12);</code></pre> +</div> +<p>You save time, you save brackets, and it just makes more sense.</p> <h4>#5 &#8211; Everything has a value</h4> -<p>Or &#8220;you&#8217;ll hardly ever use return to return values&#8221;. In a nutshell, all Ruby instructions return a value, even variable assignments, so you don&#8217;t really need to use the &#8220;return&#8221; keyword at the end of a method; the value of the last assignment or <em>any</em> other expression will always be returned.</p> +<p>Or &#8220;you'll hardly ever use return to return values&#8221;. In a nutshell, all Ruby instructions return a value, + even variable assignments, so you don't really need to use the &#8220;return&#8221; keyword at the end of a method; + the value of the last assignment or <em>any</em> other expression will always be returned.</p> <h4>#6 &#8211; You can alter your environment in any way you like</h4> -<p>The first time I saw this, it really freaked me out. Imagine a typical programming situation: you start using a system class or a class written by someone else and you notice that you&#8217;d like to have an additional method. At this point you have a few ways to handle this in ordinary programming languages:<br /> -s</p> +<p>The first time I saw this, it really freaked me out. Imagine a typical programming situation: you start using a + system class or a class written by someone else and you notice that you'd like to have an additional method. At this + point you have a few ways to handle this in ordinary programming languages:<br /> + s</p> <ul> - <li>You modify the developer&#8217;s source code, if you have access to it. This is normally not a good idea, and you shouldn&#8217;t do it.</li> - <li>You derive a new class from the original one, and you implement the new method there. This is a good idea, but it could be overkill for just one method, and you may have to update some of your other code accordingly.</li> - <li>You give up, and you just create the method outside the class, somewhere else. This can be done, but it is not very elegant and goes against Object Oriented Programming.</li> + <li>You modify the developer's source code, if you have access to it. This is normally not a good idea, and you + shouldn't do it.</li> + <li>You derive a new class from the original one, and you implement the new method there. This is a good idea, but + it could be overkill for just one method, and you may have to update some of your other code accordingly.</li> + <li>You give up, and you just create the method outside the class, somewhere else. This can be done, but it is not + very elegant and goes against Object Oriented Programming.</li> </ul> -<p>In Ruby, you can simply add the method to the original class, without having to hack the original source code, and even for system classes! You want to have a method to automatically convert a measurement from meters to feet? You can simply extend the Numeric class as follows:</p> -<div class='ruby'><pre><code>class Numeric +<p>In Ruby, you can simply add the method to the original class, without having to hack the original source code, and + even for system classes! You want to have a method to automatically convert a measurement from meters to feet? You + can simply extend the Numeric class as follows:</p> +<div class='ruby'> + <pre><code class="ruby">class Numeric def feet self*3.2808399 end -end</code></pre></div><p>From now on, all your numbers will have a <em>feet</em> method, which can be used just like any other method that was originally defined for the class:</p> -<div class='ruby'><pre><code>5.feet #=&gt; Returns 16.4041995</code></pre></div><p>Basically, Ruby classes are never closed and can be modified at any time from anywhere. Use with care, of course.</p> -<h4>#7 You won&#8217;t get unicorns from birds and horses, but you&#8217;ll still get donkeys if you want</h4> -<p>I distinctly remember my C++ professor at university using animals to illustrate key object-oriented concepts like classes and inheritance. Weird things came in when she tried to explain multiple inheritance to inherit a class Pegasus from a class Bird and a class Horse. It had methods like &#8220;fly&#8221; and &#8220;neigh&#8221;&#8230; crazy stuff, anyhow, Ruby does not offer multiple inheritance. <br /> -This seems to be the trend, after all, and of course it&#8217;s up to tastes. I don&#8217;t quite fancy multiple inheritances, as they may lead to unpredictable things. Nevertheless, it is possible to create &#8220;mix-ins&#8221; using Ruby modules, so that members and methods defined in a module will be added to a particular class if the module is included in it.</p> -<h4>#8 You don&#8217;t really need <span class="caps">XML</span></h4> -<p><span class="caps">XML</span> is a nice, general-purpose markup language which can be processed by every programming language and used everywhere. Unfortunately, it can also be quite verbose to write, very difficult to parse, and let&#8217;s be honest, it&#8217;s not really readable at first glance in many cases, unlike the following code snippet:</p> -<div class='yaml'><pre><code>regexp: !ruby/regexp /a-zA-Z/ +end</code></pre> +</div> +<p>From now on, all your numbers will have a <em>feet</em> method, which can be used just like any other method that was + originally defined for the class:</p> +<div class='ruby'> + <pre><code class="ruby">5.feet #=&gt; Returns 16.4041995</code></pre> +</div> +<p>Basically, Ruby classes are never closed and can be modified at any time from anywhere. Use with care, of course.</p> +<h4>#7 You won't get unicorns from birds and horses, but you'll still get donkeys if you want</h4> +<p>I distinctly remember my C++ professor at university using animals to illustrate key object-oriented concepts like + classes and inheritance. Weird things came in when she tried to explain multiple inheritance to inherit a class + Pegasus from a class Bird and a class Horse. It had methods like &#8220;fly&#8221; and &#8220;neigh&#8221;&#8230; + crazy stuff, anyhow, Ruby does not offer multiple inheritance. <br /> + This seems to be the trend, after all, and of course it's up to tastes. I don't quite fancy multiple inheritances, + as they may lead to unpredictable things. Nevertheless, it is possible to create &#8220;mix-ins&#8221; using Ruby + modules, so that members and methods defined in a module will be added to a particular class if the module is + included in it.</p> +<h4>#8 You don't really need <span class="caps">XML</span></h4> +<p><span class="caps">XML</span> is a nice, general-purpose markup language which can be processed by every programming + language and used everywhere. Unfortunately, it can also be quite verbose to write, very difficult to parse, and + let's be honest, it's not really readable at first glance in many cases, unlike the following code snippet:</p> +<div class='yaml'> + <pre><code class="yaml">regexp: !ruby/regexp /a-zA-Z/ number: 4.7 -string: a string</code></pre></div><p>This is definitely easier and more readable than <span class="caps">XML</span>, isn&#8217;t it? Welcome to <span class="caps">YAML</span>, Ruby&#8217;s favorite markup (but not really<sup class="footnote" id="fnr6"><a href="#fn6">6</a></sup>) language, which can be used to represent any Ruby object in a simple, clear and yet complete way. <br /> -Ruby <em>can</em> parse <span class="caps">XML</span>, but YAML&#8217;s simplicity convinced a lot of developers to use it as an alternative to <span class="caps">XML</span> for configuration files, for example (Rails does this).<br /> -The code snipped presented before was obtained by executing the following line of Ruby code:</p> -<div class='ruby'><pre><code>{"string" =&gt; "a string", "number" =&gt; 4.7, "regexp" =&gt; /a-zA-Z/}.to_yaml</code></pre></div><p>The <em>to_yaml</em> method is defined for the Object class, which is the father of all of the other classes, and thus it is available in all Ruby objects. This means that you can convert anything into <span class="caps">YAML</span> <em>and</em> re-convert anything back into Ruby objects, with total transparency for the developer. So much for parsing, huh?</p> +string: a string</code></pre> +</div> +<p>This is definitely easier and more readable than <span class="caps">XML</span>, isn't it? Welcome to <span + class="caps">YAML</span>, Ruby's favorite markup (but not really<sup class="footnote" id="fnr6"><a + href="#fn6">6</a></sup>) language, which can be used to represent any Ruby object in a simple, clear and yet + complete way. <br /> + Ruby <em>can</em> parse <span class="caps">XML</span>, but YAML's simplicity convinced a lot of developers to use it + as an alternative to <span class="caps">XML</span> for configuration files, for example (Rails does this).<br /> + The code snipped presented before was obtained by executing the following line of Ruby code:</p> +<div class='ruby'> + <pre><code class="ruby">{"string" =&gt; "a string", "number" =&gt; 4.7, "regexp" =&gt; /a-zA-Z/}.to_yaml</code></pre> +</div> +<p>The <em>to_yaml</em> method is defined for the Object class, which is the father of all of the other classes, and + thus it is available in all Ruby objects. This means that you can convert anything into <span + class="caps">YAML</span> <em>and</em> re-convert anything back into Ruby objects, with total transparency for + the developer. So much for parsing, huh?</p> <h4>#9 Lambda is much more than a Greek letter</h4> -<p>Ruby borrows some magic from Lisp and Perl with Proc objects and blocks. Procs are _&quot;blocks of code that have been bound to a set of local variables. Once bound, the code may be called in different contexts and still access those variables.&quot; _<sup class="footnote" id="fnr7"><a href="#fn7">7</a></sup> Consider the following:</p> -<div class='ruby'><pre><code>def gen_times(factor) +<p>Ruby borrows some magic from Lisp and Perl with Proc objects and blocks. Procs are _&quot;blocks of code that have + been bound to a set of local variables. Once bound, the code may be called in different contexts and still access + those variables.&quot; _<sup class="footnote" id="fnr7"><a href="#fn7">7</a></sup> Consider the following:</p> +<div class='ruby'> + <pre><code class="ruby">def gen_times(factor) return Proc.new {|n| n*factor } end

@@ -87,21 +178,52 @@ times5 = gen_times(5)

times3.call(12) #=&gt; 36 times5.call(5) #=&gt; 25 - times3.call(times5.call(4)) #=&gt; 60</code></pre></div><p>I could have used the <em>lambda</em> method instead of <em>Proc.new</em> and gotten the same result. This should ring a bell for people who know Perl and Python (or Lisp)<sup class="footnote" id="fnr8"><a href="#fn8">8</a></sup>. You can do the same thing in <span class="caps">PHP</span> as well, but most people don&#8217;t really use the function.<sup class="footnote" id="fnr9"><a href="#fn9">9</a></sup></p> -<p>Additionally, Ruby makes extensive use of blocks, sort of &#8220;unborn Procs&#8221;<sup class="footnote" id="fnr10"><a href="#fn10">10</a></sup>, for example, to iterate the contents of an object and execute some code, like the <em>each</em> method available for the Array class:</p> -<div class='ruby'><pre><code>[1, 2, 4, 6, 8].each {|c| puts c*2} #=&gt; outputs each element multiplied by 2 in a new line.</code></pre></div><p>Should the code in the block exceed one line, you&#8217;re advised (but not required) to include the block within <em>do &#8230; end</em> instead of using braces. Ruby folks don&#8217;t like braces much, really.</p> + times3.call(times5.call(4)) #=&gt; 60</code></pre> +</div> +<p>I could have used the <em>lambda</em> method instead of <em>Proc.new</em> and gotten the same result. This should + ring a bell for people who know Perl and Python (or Lisp)<sup class="footnote" id="fnr8"><a href="#fn8">8</a></sup>. + You can do the same thing in <span class="caps">PHP</span> as well, but most people don't really use the + function.<sup class="footnote" id="fnr9"><a href="#fn9">9</a></sup></p> +<p>Additionally, Ruby makes extensive use of blocks, sort of &#8220;unborn Procs&#8221;<sup class="footnote" + id="fnr10"><a href="#fn10">10</a></sup>, for example, to iterate the contents of an object and execute some + code, like the <em>each</em> method available for the Array class:</p> +<div class='ruby'> + <pre><code class="ruby">[1, 2, 4, 6, 8].each {|c| puts c*2} #=&gt; outputs each element multiplied by 2 in a new line.</code></pre> +</div> +<p>Should the code in the block exceed one line, you're advised (but not required) to include the block within <em>do + &#8230; end</em> instead of using braces. Ruby folks don't like braces much, really.</p> <h4>#10 &#8211; You can go on Rails</h4> -<p>Last but not least, you can always use Ruby on Rails for developing web applications. Deployment may not be as easy as it is with <span class="caps">PHP</span>, but Rails was built in Ruby because Ruby has features no other language can offer.</p> +<p>Last but not least, you can always use Ruby on Rails for developing web applications. Deployment may not be as easy + as it is with <span class="caps">PHP</span>, but Rails was built in Ruby because Ruby has features no other language + can offer.</p> <h3>Conclusion</h3> -<p>Time&#8217;s up. You&#8217;ve probably made up your mind about Ruby already, and you are either playing with it already, or you&#8217;re totally ignoring it. However, the next time you&#8217;re frustrated because your code looks ugly and you think you could have done the same thing with half the code you got, don&#8217;t blame me!</p> +<p>Time's up. You've probably made up your mind about Ruby already, and you are either playing with it already, or + you're totally ignoring it. However, the next time you're frustrated because your code looks ugly and you think you + could have done the same thing with half the code you got, don't blame me!</p> <h3>Notes</h3> -<p class="footnote" id="fn1"><a href="#fnr1"><sup>1</sup></a> <a href="http://www.rubyonrails.org">Ruby on Rails</a>, <span class="caps">MVC</span> Web Development Framework.</p> -<p class="footnote" id="fn2"><a href="#fnr2"><sup>2</sup></a> <a href="http://pragprog.com/book/ruby/programming-ruby/" title="2nd Ed.">Programming Ruby</a>, by Dave Thomas &amp; others, Pragmatic Programmers, 2004</p> -<p class="footnote" id="fn3"><a href="#fnr3"><sup>3</sup></a> Not entirely correct, but sort of. For more information on Python&#8217;s indentation rules and myths, read <a href="http://www.secnetix.de/~olli/Python/block_indentation.hawk">Python: Myths about Indentation</a>.</p> -<p class="footnote" id="fn4"><a href="#fnr4"><sup>4</sup></a> For a list of Ruby tutorials, refer to the <a href="http://www.ruby-lang.org/en/documentation/">Documentation</a> section of the Official Ruby Website.</p> -<p class="footnote" id="fn5"><a href="#fnr5"><sup>5</sup></a> For more information on Ruby, and in particular on the similarities and differences with other languages, refer to <a href="http://www.ruby-lang.org/en/documentation/ruby-from-other-languages/">Ruby from Other Languages</a>.</p> -<p class="footnote" id="fn6"><a href="#fnr6"><sup>6</sup></a> <span class="caps">YAML</span> is Not a Markup Language.</p> -<p class="footnote" id="fn7"><a href="#fnr7"><sup>7</sup></a> Definition and example taken from the official Ruby documentation for class <a href="http://www.ruby-doc.org/core/classes/Proc.html">Proc</a>.</p> -<p class="footnote" id="fn8"><a href="#fnr8"><sup>8</sup></a> For some example on lambda functions in Python, see <a href="http://www.secnetix.de/~olli/Python/lambda_functions.hawk">Python: Lambda Functions</a>.</p> -<p class="footnote" id="fn9"><a href="#fnr9"><sup>9</sup></a> For examples of &#8220;lambda functions&#8221; in <span class="caps">PHP</span> using create_function(), see <a href="http://www.webmasterworld.com/forum88/7414.htm">this</a>.</p> -<p class="footnote" id="fn10"><a href="#fnr10"><sup>10</sup></a> For more detailed information on Ruby&#8217;s Procs, blocks etc. refer to <a href="http://eli.thegreenplace.net/2006/04/18/understanding-ruby-blocks-procs-and-methods">Understanding Ruby blocks, Procs and methods</a>.</p> +<p class="footnote" id="fn1"><a href="#fnr1"><sup>1</sup></a> <a href="http://www.rubyonrails.org">Ruby on Rails</a>, + <span class="caps">MVC</span> Web Development Framework. +</p> +<p class="footnote" id="fn2"><a href="#fnr2"><sup>2</sup></a> <a href="http://pragprog.com/book/ruby/programming-ruby/" + title="2nd Ed.">Programming Ruby</a>, by Dave Thomas &amp; others, Pragmatic Programmers, 2004</p> +<p class="footnote" id="fn3"><a href="#fnr3"><sup>3</sup></a> Not entirely correct, but sort of. For more information on + Python's indentation rules and myths, read <a + href="http://www.secnetix.de/~olli/Python/block_indentation.hawk">Python: Myths about Indentation</a>.</p> +<p class="footnote" id="fn4"><a href="#fnr4"><sup>4</sup></a> For a list of Ruby tutorials, refer to the <a + href="http://www.ruby-lang.org/en/documentation/">Documentation</a> section of the Official Ruby Website.</p> +<p class="footnote" id="fn5"><a href="#fnr5"><sup>5</sup></a> For more information on Ruby, and in particular on the + similarities and differences with other languages, refer to <a + href="http://www.ruby-lang.org/en/documentation/ruby-from-other-languages/">Ruby from Other Languages</a>.</p> +<p class="footnote" id="fn6"><a href="#fnr6"><sup>6</sup></a> <span class="caps">YAML</span> is Not a Markup Language. +</p> +<p class="footnote" id="fn7"><a href="#fnr7"><sup>7</sup></a> Definition and example taken from the official Ruby + documentation for class <a href="http://www.ruby-doc.org/core/classes/Proc.html">Proc</a>.</p> +<p class="footnote" id="fn8"><a href="#fnr8"><sup>8</sup></a> For some example on lambda functions in Python, see <a + href="http://www.secnetix.de/~olli/Python/lambda_functions.hawk">Python: Lambda Functions</a>.</p> +<p class="footnote" id="fn9"><a href="#fnr9"><sup>9</sup></a> For examples of &#8220;lambda functions&#8221; in <span + class="caps">PHP</span> using create_function(), see <a + href="http://www.webmasterworld.com/forum88/7414.htm">this</a>.</p> +<p class="footnote" id="fn10"><a href="#fnr10"><sup>10</sup></a> For more detailed information on Ruby's Procs, blocks + etc. refer to <a + href="http://eli.thegreenplace.net/2006/04/18/understanding-ruby-blocks-procs-and-methods">Understanding Ruby + blocks, Procs and methods</a>.</p>
M contents/articles/10-reasons-why-i-didnt-update-my-blog.htmlcontents/articles/10-reasons-why-i-didnt-update-my-blog.html

@@ -6,22 +6,22 @@ tags: "internet|rant|personal|writing"

----- <p><em>&#8220;It has been a while since my last post, sorry about that&#8221;</em><br /> I read this sentence (or something along those lines) on many blogs on the Internet, including mine. As a matter of - fact, I actually didn&#8217;t write a meaningful post on my blog for a long time and no, probably this is not going + fact, I actually didn't write a meaningful post on my blog for a long time and no, probably this is not going to change that either.</p> <p>Yesterday I started thinking <strong>why</strong> this happens, not only to me but to a lot of other non-professional - bloggers. A professional blogger &emdash; for what I can tell &emdash; is someone like Michael Arrington or Gina + bloggers. A professional blogger &mdash; for what I can tell &mdash; is someone like Michael Arrington or Gina Trapani: someone who has the luck (or course) to be able to just blog for a living.</p> -<p>I don&#8217;t blog for a living: my site is self-sustaining via a few very unobtrusive ads, just that. I have a full +<p>I don't blog for a living: my site is self-sustaining via a few very unobtrusive ads, just that. I have a full time job, and I blog in my spare time about my interests, without even trying to make &#8220;proper&#8221; money - from my site. There&#8217;s nothing wrong with it: I believe there are some other people in my condition, and - that&#8217;s quite normal.</p> -<p>That being said, let&#8217;s examine the ten most common reasons why I (and you too, maybe) end up not updating my + from my site. There's nothing wrong with it: I believe there are some other people in my condition, and + that's quite normal.</p> +<p>That being said, let's examine the ten most common reasons why I (and you too, maybe) end up not updating my blog, <em>even when I have time to do so</em>.h3. Someone already blogged about it</p> <p>This is very irritating. I am obsessed with original content. I want to write about something other people - <em>never</em> (or hardly ever) wrote about. As a consequence, I often find myself googling the same topic I&#8217;m + <em>never</em> (or hardly ever) wrote about. As a consequence, I often find myself googling the same topic I'm planning my blog post on, and I <em>obviously</em> often get quite a few results, too! </p> -<p>I actually wanted to title this very post &#8220;The Blogger&#8217;s Block&#8221;, but I immediately thought of +<p>I actually wanted to title this very post &#8220;The Blogger's Block&#8221;, but I immediately thought of putting that very title into Google, just to see if someone else already blogged about it. Sure they did! Not original at all, tough luck. <br /> It also happened a few weeks ago: I wanted to write about the current state of tech news sites and Antonio Cangiano

@@ -29,36 +29,36 @@ comes up with a similar <a href="http://antoniocangiano.com/2008/05/29/random-thoughts-on-social-sites/">post</a>.

Very interesting indeed, but quite annoying as well!</p> <p>OK scrap that, think about something else&#8230;</p> <p>This can potentially go on for days, and the only solution is of course trying not to worry about it, and just write - the damn thing (that&#8217;s what I did to write this post).</p> -<h3>I didn&#8217;t research enough on the subject</h3> + the damn thing (that's what I did to write this post).</p> +<h3>I didn't research enough on the subject</h3> <p>This happens tipically with reviews, round-ups, etc. Things I actually enjoy writing, but which may be easily subject to (harsh) criticism unless ou do them right. <br /> - I wanted to write a review of the new Treo 750 I bought. I&#8217;ve been using for a while, I learnt a few + I wanted to write a review of the new Treo 750 I bought. I've been using for a while, I learnt a few interesting hacks etc. etc. Unfortunately the 3G iPhone came out, so everyone is all hyped up about it. Too bad that I, being Italian and living in Italy, I never actually touched the damn thing!<br /> What has that got to do with my Treo 750? Well, it would be nice to write a review of a Windows Mobile 6 phone - comparing to the upcoming Apple wonder, wouldn&#8217;t it?</p> -<p>The solution to this would be trying to limit the scope of your post: screw Apple, let&#8217;s just focus on my Treo + comparing to the upcoming Apple wonder, wouldn't it?</p> +<p>The solution to this would be trying to limit the scope of your post: screw Apple, let's just focus on my Treo 750 and on the amazing amount of programming languages I can use on it!</p> <h3>After researching for X days, I realized it was all a waste of time</h3> <p>This happens with big articles. I once thought about writing a comprehensive article about all the possible ways to - deploy a Ruby on Rails web site. Cool, isn&#8217;t it? I started researching about all the most esoteric lightweight + deploy a Ruby on Rails web site. Cool, isn't it? I started researching about all the most esoteric lightweight web servers, about JRuby, Glassfish, IronRuby, &#8230; A lot of things. And new solutions kept coming up, and with them more and more posts, and then even entire books on the subjects.</p> <p>Very frustrating. I abandoned the whole thing, because there was simply no reason to go on researching: it was all a waste of time.</p> <p>How to fix this? Again, reduce the scope of your article so that you are able to reduce the time you spend - researching about it. Or maybe try to get paid to write it, so that even if there&#8217;s plenty of articles about + researching about it. Or maybe try to get paid to write it, so that even if there's plenty of articles about the same subject, at least you have a concrete purpose to write yours.</p> <p>Erhm, yes, by the way, keep an eye on <a href="http://www.sitepoint.com">SitePoint</a> in the next few days/weeks, OK?</p> -<h3>I only write when I&#8217;m inspired, and now I&#8217;m not</h3> +<h3>I only write when I'm inspired, and now I'm not</h3> <p>Very, very common. I normally think about a very cool article to write in the evening, or early in the morning, or - whenever I don&#8217;t have access to a computer or the Internet. <br /> - Of course I don&#8217;t forget about it, but by the time I have a chance to actually write it, I really don&#8217;t + whenever I don't have access to a computer or the Internet. <br /> + Of course I don't forget about it, but by the time I have a chance to actually write it, I really don't fancy doing so. Oh, the irony! <br /> - It happened today, actually, during my lunch break: I was supposed to write this post but I didn&#8217;t feel like - it. I lost my inspiration and all my artistic verve, so no, it can&#8217;t be done. Tough luck, wait until next + It happened today, actually, during my lunch break: I was supposed to write this post but I didn't feel like + it. I lost my inspiration and all my artistic verve, so no, it can't be done. Tough luck, wait until next time.</p> <p>How did I solve this? Well, I started writing the post in my coffee break: there was no way to finish it in time, of course, but at least I started it.<br />

@@ -66,93 +66,93 @@ I also saved it to my <span class="caps">PDA</span> and continued writing it when I had a chance. Eventually, I

managed to finish it during my lunch break, the next day.</p> <p>Try to write <em>whenever you are inspired</em>. If you are not inspired in your lunch break, do some work in your lunch break and then write when, in an hour or so, probably, you feel like writing again.</p> -<h3>This won&#8217;t make Digg&#8217;s front page</h3> -<p>Digg, Reddit, DZone, you name it. They are all excellent free tools for promoting your content. Don&#8217;t tell me +<h3>This won't make Digg's front page</h3> +<p>Digg, Reddit, DZone, you name it. They are all excellent free tools for promoting your content. Don't tell me you never wrote a post <em>for the sake of making the front page</em> of one of those sites. I did, I confess.<br /> - I didn&#8217;t make Digg&#8217;s front page in a while, and I&#8217;m probably never going to make it again. The + I didn't make Digg's front page in a while, and I'm probably never going to make it again. The reason? When it comes to promoting the right content in a fair way Digg <strong>sucks</strong>. As a consequence, - 80% of the articles which appear on Digg <strong>suck</strong>. I&#8217;m sure you&#8217;ll be able to forgive my + 80% of the articles which appear on Digg <strong>suck</strong>. I'm sure you'll be able to forgive my French when I say that <strong>Digg utterly sucks</strong>.</p> -<p>No matter how clever your story may be, unless you&#8217;re backed up by a swarm or an active community willing to - Digg your story, you simply aren&#8217;t going to make it. When is the last time a proper programming article made - it to Digg? I don&#8217;t remember, probably way before I unsubscribed to the Digg&#8217;s Technology feed, about a +<p>No matter how clever your story may be, unless you're backed up by a swarm or an active community willing to + Digg your story, you simply aren't going to make it. When is the last time a proper programming article made + it to Digg? I don't remember, probably way before I unsubscribed to the Digg's Technology feed, about a year or so ago.</p> -<p>Just write for the sake of writing. Don&#8217;t even submit your story to Digg (unless you&#8217;re writing about the +<p>Just write for the sake of writing. Don't even submit your story to Digg (unless you're writing about the iPhone, of course, then you may have a chance): post it to a less-known site, maybe, or to Reddit, instead. You - won&#8217;t get as much traffic, granted, but you also won&#8217;t get tons of idiots writing pointless crap on your - site and you won&#8217;t risk a server crash. If it&#8217;s destiny, then some good soul will post it to Digg, but - nobody will digg it. That&#8217;s just life, I&#8217;m afraid.</p> + won't get as much traffic, granted, but you also won't get tons of idiots writing pointless crap on your + site and you won't risk a server crash. If it's destiny, then some good soul will post it to Digg, but + nobody will digg it. That's just life, I'm afraid.</p> <h3>It has been too long since my last post: the next one will have to make up for it</h3> -<p>This happens when you start feeling guilty because you didn&#8217;t post in a long time.</p> +<p>This happens when you start feeling guilty because you didn't post in a long time.</p> <p><em>&#8220;My next post is going to be superb, long, interesting and everyone will start flocking back to my blog!&#8221;</em></p> -<p>Wrong. First of all because statistically people just don&#8217;t &#8220;flock back&#8221; because you bestowed them +<p>Wrong. First of all because statistically people just don't &#8220;flock back&#8221; because you bestowed them of one interesting post (you have to keep up, too), and second because by doing so your mind will automatically - discard all those bits of things you wanted to write about, but you never did because you&#8217;re waiting for that + discard all those bits of things you wanted to write about, but you never did because you're waiting for that special <em>next post</em> which will be <em>so much better</em> and will bring your blob back to <del>spam</del> life.</p> -<p>It happened, it happened&#8230; again, all you have to do is just post all the tidbits you need, while you&#8217;re +<p>It happened, it happened&#8230; again, all you have to do is just post all the tidbits you need, while you're preparing your big shot: your blog will remain &#8220;fresh&#8221; and more people will enjoy your interesting - posts, whenever they&#8217;ll come.</p> + posts, whenever they'll come.</p> <h3>Nobody gives a damn, anyway</h3> -<p>I didn&#8217;t want to upset my younger audience by using a nasty f-word in the title, but that&#8217;s exactly how +<p>I didn't want to upset my younger audience by using a nasty f-word in the title, but that's exactly how it feels like it, sometimes.<br /> I went to Rome last week, did you know? I twittered about it, you <strong>ought</strong> to know! And of course - you&#8217;ll all be waiting for the usual 10-page-long article on my awesome vacation. Like when I <a + you'll all be waiting for the usual 10-page-long article on my awesome vacation. Like when I <a href="/articles/incomplete-guide-to-london">went to London</a>, remember?<br /> - No, sadly not everyone may be interested in this crap. So I probably won&#8217;t post about it: who cares? When you + No, sadly not everyone may be interested in this crap. So I probably won't post about it: who cares? When you start thinking like this, you may stop posting for weeks: not everyone may be interested in everything you post, and - I believe that&#8217;s normal.<br /> + I believe that's normal.<br /> Especially for a blog like mine, which is deliberately open to all my interests: programming, technology, - travelling, etc. That&#8217;s why most blogs try to be themed: they write about a particular subject, even a single + travelling, etc. That's why most blogs try to be themed: they write about a particular subject, even a single programming project, and they (try to) do it well. The trade-off is that a themed blog may run out of posts - amazingly quickly, if you&#8217;re not carefula and if you&#8217;re not 100% devoted to your blog&#8217;s theme. + amazingly quickly, if you're not carefula and if you're not 100% devoted to your blog's theme. <br /> A themed blog will build up a faithful audience, like when I was writing almost exclusively about CakePHP: a lot of <span class="caps">PHP</span> programmers where flocking here daily. Then things <a href=/articles/42">went wrong</a> - and I really couldn&#8217;t be bothered to write about the same crap. Which leads us to the next topic&#8230; + and I really couldn't be bothered to write about the same crap. Which leads us to the next topic&#8230; </p> <h3>If I write about this, a large chunk of my audience is going to be upset</h3> -<p>This applies especially to themed blogs: if you&#8217;re a well-known Firefox addict, you can&#8217;t suddenly start +<p>This applies especially to themed blogs: if you're a well-known Firefox addict, you can't suddenly start writing about <a href="/articles/firefox-lovers-guide-to-opera">Opera</a>, praising its speed and the features it offers out-of-the box!<br /> - If you take a side, you&#8217;d better stick to it, if you want your audience to stick to you: the ten people who + If you take a side, you'd better stick to it, if you want your audience to stick to you: the ten people who happen to read this blog are probably quite shocked by the amount of times I &#8220;changed side&#8221;: from CakePHP and <span class="caps">PHP</span> to Rails and Ruby, from Firefox to Opera (well, wait until my next SitePoint article comes out, at least&#8230;). Probably they are not the same people who read this blog a year or so ago.</p> -<p>In the end, it&#8217;s entirely up to you: if you are prone to radically change our opinion (and this happen in +<p>In the end, it's entirely up to you: if you are prone to radically change our opinion (and this happen in technology, much more than in politics), which involves changing the whole theme of your blog, maybe you should consider not having a themed blog at all. <br /> - And if you don&#8217;t feel 100% sure you want a themed blog, you definitely shouldn&#8217;t go for a themed domain - name, or you may end up abandoning it afterwards. And when that happens, unless you&#8217;re writing damn cool posts - like <a href="http://redhanded.hobix.com/">Why</a>, it&#8217;s going to hurt your audience. On the other hand, if - you&#8217;re sure you&#8217;ll get ten times more visitors, go for it.<br /> + And if you don't feel 100% sure you want a themed blog, you definitely shouldn't go for a themed domain + name, or you may end up abandoning it afterwards. And when that happens, unless you're writing damn cool posts + like <a href="http://redhanded.hobix.com/">Why</a>, it's going to hurt your audience. On the other hand, if + you're sure you'll get ten times more visitors, go for it.<br /> No, h3rald.com stays&#8230; I may end up raving about Safari at some point within the next ten years though, - don&#8217;t be upset!</p> -<h3>I&#8217;m not an expert on the subject, so I shouldn&#8217;t blog about it</h3> -<p>This is a common problem I have when I try to write about something I don&#8217;t know extensively enough. When I + don't be upset!</p> +<h3>I'm not an expert on the subject, so I shouldn't blog about it</h3> +<p>This is a common problem I have when I try to write about something I don't know extensively enough. When I started to learn Ruby, I was eager to start writing about it: it seemed just too cool to be true!<br /> - I thought about writing a longish post on learning Ruby from scratch, but then I realized it wouldn&#8217;t have - been a great idea: I was just starting to learn a new language, I didn&#8217;t know all the nitty-gritty and writing + I thought about writing a longish post on learning Ruby from scratch, but then I realized it wouldn't have + been a great idea: I was just starting to learn a new language, I didn't know all the nitty-gritty and writing about it to teach others was going to be a bit presumptuous, maybe!<br /> Instead, I opted for a lighted <a href="/articles/10-reasons-to-learn-ruby">10 reasons to learn Ruby</a> article, clearly stating in the first paragraph that I was just a noob getting excited about his new toy. It worked, actually: people seemed to enjoy it, and I was partially excused for the few mistakes I made here and there.<br /> - You don&#8217;t have to be an expert to blog about something: you just have to be totally honest about what you - know, and what you don&#8217;t know.</p> -<h3>There are a lot of professional bloggers out there, and I&#8217;m not one of them</h3> + You don't have to be an expert to blog about something: you just have to be totally honest about what you + know, and what you don't know.</p> +<h3>There are a lot of professional bloggers out there, and I'm not one of them</h3> <p>Finally, this can be summarized in two words: inferiority complex. &#8220;Proper&#8221; blogs fire out 10+ posts - <em>per day</em>, and I don&#8217;t even write ten points in <em>a month</em>! Again, those a professional bloggers: + <em>per day</em>, and I don't even write ten points in <em>a month</em>! Again, those a professional bloggers: they live for blogging (and make an awful lot of money out of it), and they most likely have someone else blogging for them, too! <br /> Think of TechCrunch or LifeHacker, for example: they have a small legion of talented writers working for them - &emdash; even if Michael Harrington does rant about Twitter about three times a week himself, though.<br /> + &mdash; even if Michael Harrington does rant about Twitter about three times a week himself, though.<br /> At the end of the day, what matters is the <em>quality</em> of your posts. Not the length minf, the Quality. I personally think that non-professionals (I said &#8220;non-professionals&#8221;, not &#8220;amateurs&#8221;!) are <em>allowed</em> to write about once a week, if they can provide good content, that is. </p> -<p>But you still do have to write <em>at least</em> once a week (OK, let&#8217;s make it ten days), otherwise either - you&#8217;re justified (you genuinely don&#8217;t have time) or you may be a victim of one of these common fears. +<p>But you still do have to write <em>at least</em> once a week (OK, let's make it ten days), otherwise either + you're justified (you genuinely don't have time) or you may be a victim of one of these common fears. Watch out, and happy blogging!</p>
M contents/articles/10.htmlcontents/articles/10.html

@@ -6,24 +6,37 @@ tags: "italy|politics"

----- <p style="float:right;"><img src="http://www.berluscastop.it/v_imag/sodom1.gif" alt="" /></p> <p>Another five years have passed and here we go again: General Elections time!<br /> -Today and tomorrow Italy <del>must</del> should vote for a new government, and the choice is <em>again</em> between two main contenders to the Prime Minister&#8217;s <del>throne</del> chair:</p> + Today and tomorrow Italy <del>must</del> should vote for a new government, and the choice is <em>again</em> between + two main contenders to the Prime Minister's <del>throne</del> chair:</p> <p>- <a href="http://news.bbc.co.uk/1/hi/world/europe/299254.stm">Romano Prodi</a><br /> -- <a href="http://news.bbc.co.uk/1/hi/world/europe/3034600.stm">Silvio Berlusconi</a></p> -<p>Just today I was reading an interesting article titled <a href="http://service.spiegel.de/cache/international/spiegel/0,1518,409538,00.html"><em>&#8216;The End of Silvio&#8217;s Show?&#8217;</em></a> in which the author examines the possibility that Berlusconi&#8217;s five years of subtle pseudo-dictatorship may end in favour the former president of European Commission Romano Prodi.</p> + - <a href="http://news.bbc.co.uk/1/hi/world/europe/3034600.stm">Silvio Berlusconi</a></p> +<p>Just today I was reading an interesting article titled <a + href="http://service.spiegel.de/cache/international/spiegel/0,1518,409538,00.html"><em>&#8216;The End of + Silvio's Show?'</em></a> in which the author examines the possibility that Berlusconi's five years of subtle + pseudo-dictatorship may end in favour the former president of European Commission Romano Prodi.</p> <p><em>Who are they?</em></p> -<p><strong>Silvio Berlusconi</strong><br /> -<img src="http://www.consapevolezza.it/notizie/gen-mar-2002/imgs/berlusconi_corna_5.jpg" alt="" /></p> -<p>I can&#8217;t imagine someone asking this question, at least I can&#8217;t think of anyone who doesn&#8217;t know Silvio Berlusconi as the icon of the latest <em>national oddity</em>. <br /> -Forthose who need their memory refreshed, here&#8217;s a small collection of links featuring him:</p> +<h3>Silvio Berlusconi</h3> +<img src="http://www.consapevolezza.it/notizie/gen-mar-2002/imgs/berlusconi_corna_5.jpg" alt="" /> +<p>I can't imagine someone asking this question, at least I can't think of anyone who doesn't know Silvio Berlusconi as + the icon of the latest <em>national oddity</em>. <br /> + Forthose who need their memory refreshed, here's a small collection of links featuring him:</p> <ul> - <li><a href="http://news.bbc.co.uk/1/hi/world/europe/3034600.stm"><span class="caps">BBC</span> <span class="caps">NEWS</span> Profile</a></li> + <li><a href="http://news.bbc.co.uk/1/hi/world/europe/3034600.stm"><span class="caps">BBC</span> <span + class="caps">NEWS</span> Profile</a></li> <li><a href="http://en.wikipedia.org/wiki/Silvio_Berlusconi">Wikipedia Page</a> about him</li> - <li><a href="http://www.economist.com/displaystory.cfm?story_id=587107">An Italian Story</a> &#8211; An article written in 2001 published by the Economist, <em>before</em> he was elected Prime Minister</li> - <li><a href="http://www.economist.com/displaystory.cfm?story_id=593654">Fit to run Italy?</a> &#8211; Another article by the Economists explaining why Berlusconi should <em>not</em> lead the Italian Government</li> - <li><a href="http://grabbyeducational.blogspot.com/">Meglio coglioni che mafiosi</a> &#8211; Italian blog against Berlusconi (warning: profanity).</li> - <li><a href="http://www.geocities.com/basta2006/">Basta 2006 &#8211; Geocities</a> &#8211; a comprehensive directory of websites dedicated to Berlusconi, a really good resource.</li> + <li><a href="http://www.economist.com/displaystory.cfm?story_id=587107">An Italian Story</a> &#8211; An article + written in 2001 published by the Economist, <em>before</em> he was elected Prime Minister</li> + <li><a href="http://www.economist.com/displaystory.cfm?story_id=593654">Fit to run Italy?</a> &#8211; Another + article by the Economists explaining why Berlusconi should <em>not</em> lead the Italian Government</li> + <li><a href="http://grabbyeducational.blogspot.com/">Meglio coglioni che mafiosi</a> &#8211; Italian blog against + Berlusconi (warning: profanity).</li> + <li><a href="http://www.geocities.com/basta2006/">Basta 2006 &#8211; Geocities</a> &#8211; a comprehensive directory + of websites dedicated to Berlusconi, a really good resource.</li> </ul> -<p>There are millions more. In particular, I&#8217;d like to add one more: <a href="http://www.consapevolezza.it/notizie/gen-mar-2002/impero_berlusconi.asp">The Empire of Silvio Berlusconi</a>, which features an image taken from an Italian magazine listing (roughly) everything owned (the image is dated 2002) by our current (for now) Prime Minister, such as:</p> +<p>There are millions more. In particular, I'd like to add one more: <a + href="http://www.consapevolezza.it/notizie/gen-mar-2002/impero_berlusconi.asp">The Empire of Silvio + Berlusconi</a>, which features an image taken from an Italian magazine listing (roughly) everything owned (the + image is dated 2002) by our current (for now) Prime Minister, such as:</p> <ul> <li>Mediaset Television (100%) &#8211; which includes three national channels</li> <li>Medusa Film (100%) &#8211; Movie productions</li>

@@ -33,23 +46,40 @@ <li>Blockbuster (51%) &#8211; Video retal shops</li>

<li>Mondadori Spa (48%) &#8211; Biggest Italian editorial company</li> <li>Mediolanum (35.5%) &#8211; Financial sociaty &#8211; banks, insurances etc.</li> </ul> -<p>Nice, isn&#8217;t it? Of course he had to give those societies to some trusted administrators before becoming Prime Minister&#8230; but let&#8217;s not talk about this&#8230;</p> -<p><strong>Romano Prodi</strong><br /> -<img src="http://upload.wikimedia.org/wikipedia/en/thumb/0/04/Prodi.jpg/200px-Prodi.jpg" alt="" /></p> -<p>Perhaps not as well known abroad as Silvio, but was recently the President of the European Commission for a while. Here are some (more serious) links about him:</p> +<p>Nice, isn't it? Of course he had to give those societies to some trusted administrators before becoming Prime + Minister&#8230; but let's not talk about this&#8230;</p> +<h3>Romano Prodi</h3> +<img src="http://upload.wikimedia.org/wikipedia/en/thumb/0/04/Prodi.jpg/200px-Prodi.jpg" alt="" /> +<p>Perhaps not as well known abroad as Silvio, but was recently the President of the European Commission for a while. + Here are some (more serious) links about him:</p> <ul> - <li><a href="http://europa.eu.int/comm/archives/commission_1999_2004/prodi/index_en.htm">European Commission Archives</a></li> - <li><a href="http://www.eitb24.com/portal/eitb24/noticia/en/international-news/centre-left-candidate--profile-of-romano-prodi-?itemId=D23503&amp;cl=%2Feitb24%2Finternacional&amp;idioma=en">eitb24&#8217;s profile of Romano Prodi</a></li> + <li><a href="http://europa.eu.int/comm/archives/commission_1999_2004/prodi/index_en.htm">European Commission + Archives</a></li> + <li><a + href="http://www.eitb24.com/portal/eitb24/noticia/en/international-news/centre-left-candidate--profile-of-romano-prodi-?itemId=D23503&amp;cl=%2Feitb24%2Finternacional&amp;idioma=en">eitb24's + profile of Romano Prodi</a></li> <li><a href="http://www.answers.com/topic/romano-prodi">Answers.com on Romano Prodi</a></li> - <li><a href="http://topics.nytimes.com/top/reference/timestopics/people/p/romano_prodi/index.html?inline=nyt-per">New York Times archives about Romano Prodi</a></li> + <li><a href="http://topics.nytimes.com/top/reference/timestopics/people/p/romano_prodi/index.html?inline=nyt-per">New + York Times archives about Romano Prodi</a></li> </ul> <p>Known as &#8220;The Professor&#8221; for his education&#8230;</p> <blockquote> -<p><em>&#8220;He graduated in economics at Milan&#8217;s Catholic University in 1961 and did postgraduate studies at the London School of Economics. He also spent a year as visiting professor at Harvard in 1974&#8221;</em><br /> -<em>(<a href="http://news.bbc.co.uk/1/hi/world/europe/299254.stm">Prodi&#8217;s <span class="caps">BBC</span> profile</a>)</em></p> + <p><em>&#8220;He graduated in economics at Milan's Catholic University in 1961 and did postgraduate studies at the + London School of Economics. He also spent a year as visiting professor at Harvard in 1974&#8221;</em><br /> + <em>(<a href="http://news.bbc.co.uk/1/hi/world/europe/299254.stm">Prodi's <span class="caps">BBC</span> + profile</a>)</em> + </p> </blockquote> -<p>&#8230;Romano Prodi is the candidate proposed by the current Italian opposition, grouping roughly all the center-left parties. He&#8217;s the one who pushed Italy &#8211; as President of the European Commission &#8211; to accept the Euro as new currency, back in the day, and also the one who was blamed for than after a few months when the <em>Euro effect</em> occurred: prices went higher and didn&#8217;t seem to be an <em>exact conversion</em> from Lire to Euro. He was chubby enough (&#8220;mortadella&#8221; is one of his most recurring nicknames) to be quickly appointed as scapegoat for the unpleasant situation.</p> +<p>&#8230;Romano Prodi is the candidate proposed by the current Italian opposition, grouping roughly all the center-left + parties. He's the one who pushed Italy &#8211; as President of the European Commission &#8211; to accept the Euro as + new currency, back in the day, and also the one who was blamed for than after a few months when the <em>Euro + effect</em> occurred: prices went higher and didn't seem to be an <em>exact conversion</em> from Lire to Euro. + He was chubby enough (&#8220;mortadella&#8221; is one of his most recurring nicknames) to be quickly appointed as + scapegoat for the unpleasant situation.</p> <p style="float:left;"><img src="http://www.dsmirandola.it/sg/img/berlusconi_corna.jpg" alt="" /></p> -<p>Besides that, if someone asks me what&#8217;s the difference between the two candidates, I&#8217;ll answer: one is a politician and devoted all his life to Politics, while the other partly devoted only the last 10-years-or-so to politics because it seemed to be <em>a cool and worthwhile investment</em>&#8230;</p> -<p><em><strong>Who am going to vote?</strong></em></p> -<p>Well, one thing is sure: I don&#8217;t want Silvio to win again, I don&#8217;t want Italy to be publicly ridicolized abroad all the time that muppet opens his mouth or simply does something <em>he</em> thinks is funny&#8230;</p> +<p>Besides that, if someone asks me what's the difference between the two candidates, I'll answer: one is a politician + and devoted all his life to Politics, while the other partly devoted only the last 10-years-or-so to politics + because it seemed to be <em>a cool and worthwhile investment</em>&#8230;</p> +<h3>Who am going to vote?</h3> +<p>Well, one thing is sure: I don't want Silvio to win again, I don't want Italy to be publicly ridicolized abroad all + the time that muppet opens his mouth or simply does something <em>he</em> thinks is funny&#8230;</p>
M contents/articles/11-07-2009.htmlcontents/articles/11-07-2009.html

@@ -17,10 +17,16 @@ <li><a href="#trivia">Trivia</a></li>

<li><a href="#quotes">Famous quotes</a></li> </ul> <h3 id="prologue">Prologue</h3> -<p>Roxanne and I arrived in Ireland on the 3rd of July, just over a week before the wedding day. We thought a week would have been more than enough to finish organizing our big day, and we were right: we spent a few days enjoying our holiday with relatives and going around to meet the photographer, the florist and all the others.</p> -<p>Slowly guests started arriving into the country from Italy, England, Romania etc. For some reason, everyone chose a different day to get to Killenaule, so we had people turning up right until the very day before.</p> -<p>In a similar fashion, I was waiting for my waistcoat to arrive until the last minute: it turns out that the guy I bought it from decided to send it through normal post about 10 days before &#8212; &#8220;They normally arrive in less than two weeks&#8221;, he wrote to me in his last email.</p> -<p>I ended up having to drive to Clonmel the afternoon before the wedding with half the wedding party in my car looking for a waistcoat. I eventually managed to rent one (with matching shirt and cravat) for <em>just</em> 40 Euro.</p> +<p>Roxanne and I arrived in Ireland on the 3rd of July, just over a week before the wedding day. We thought a week would + have been more than enough to finish organizing our big day, and we were right: we spent a few days enjoying our + holiday with relatives and going around to meet the photographer, the florist and all the others.</p> +<p>Slowly guests started arriving into the country from Italy, England, Romania etc. For some reason, everyone chose a + different day to get to Killenaule, so we had people turning up right until the very day before.</p> +<p>In a similar fashion, I was waiting for my waistcoat to arrive until the last minute: it turns out that the guy I + bought it from decided to send it through normal post about 10 days before &#8212; &#8220;They normally arrive in + less than two weeks&#8221;, he wrote to me in his last email.</p> +<p>I ended up having to drive to Clonmel the afternoon before the wedding with half the wedding party in my car looking + for a waistcoat. I eventually managed to rent one (with matching shirt and cravat) for <em>just</em> 40 Euro.</p> <h3 id="party">The wedding party</h3> <p>The following table lists all the members of the wedding party, for your own reference.</p> <table>

@@ -33,7 +39,7 @@ <td> Fabio Cevasco </td>

<td> Groom </td> </tr> <tr> - <td> Roxanne O&#8217;Mahoney </td> + <td> Roxanne O'Mahoney </td> <td> Bride </td> </tr> <tr>

@@ -53,23 +59,46 @@ <td> Delia Angheluta </td>

<td> Bridesmaid </td> </tr> <tr> - <td> Zacharry O&#8217;Mahoney </td> + <td> Zacharry O'Mahoney </td> <td> Usher </td> </tr> <tr> - <td> Caspar O&#8217;Mahoney </td> + <td> Caspar O'Mahoney </td> <td> Usher </td> </tr> </table> <h3 id="stag">The stag night</h3> -<p>In Italy, England, US and in many other countries a &#8220;stag night&#8221; may end up in many different ways: dinner with friends, strip club, wild practical jokes to the groom, and so on. In Ireland, it generally means one thing: <em>drink</em>. It occasionally ends up badly (there are rumors a poor fellow who was thrown out in a river and got married with a broken nose), but generally everything turns out just fine: have a few pints, sing and dance, and have a couple of eggs in the morning. That normally does the trick &#8212; if you&#8217;re an Irishman.</p> -<p>I was well aware of my in-laws drinking habits, so I decided to take uncle Felix&#8217;s offer: &#8220;I&#8217;ll have a taxi ready for you whenever you want to sneak out of the pub, and make sure you do&#8221; &#8212; he said.</p> -<p>The evening started with a few pints at Laffansbridge, an old country pub in the middle of nowhere, probably one of the best places for a pint of Guinnes in the whole Tipperary. The little smart guy who runs it has one simple rule: at midnight the light goes off and no more drinks are served, so all 16 of us got into a minibus by then, heading for the next pub.</p> -<p><em>Quinn&#8217;s</em> is the family pub, in the sense that it is owned by Felix Quinn Jr, son of Felix Quinn Sr, brother of Anastasia Quinn, mother of James O&#8217;Mahoney, father of Roxanne O&#8217;Mahoney, my wife (families are still very large and very close, in Ireland). Being the family pub, <em>Quinn&#8217;s</em> doesn&#8217;t close at midnight; in fact, it often doesn&#8217;t close at all for family and friends (i.e. the entire village of Killenaule).<br /> -As soon as we got in, Claire (wife of Felix, son of Felix, etc. etc.) greeted us with a full round of pints, and then another, and yet another&#8230;</p> -<p>Around the third round someone asked me if I could sing a song &#8212; a request I politely but firmly declined due to my total ignorance in Irish folk songs and my total inability to utter sounds in even the slightest musical way. Luckily, someone else volunteered and sang a beautiful ballad, perfectly in-tune, with no music backing at all: Irish people are amazingly musical when sober, imagine when drunk!</p> -<p>When people started getting into <em>their</em> fourth round (note the pronoun), I decided to try out an old trick to keep myself sober: I drank less than half a pint, and then pretended to drink the rest, leaving always something in my glass. In that way &ndash; I thought &ndash; I could pretend I didn&#8217;t need yet another pint. Unfortunately the pub owner spotted me straight away and said &#8220;That pint is stale&#8230; here, have another one, on the house!&#8221;. At that point I decided it was better for me &amp; the rest of the Italians to quietly sneak out.</p> -<p>I was at home (uncle Martin&#8217;s house) and in bed at about 1:30 AM. I almost didn&#8217;t sleep at all that night, as expected, so I wasn&#8217;t too bothered when the rest of the drinking comrades came back, singing and shouting at 4:30 am. Simona [the Maid of Honor and girlfriend of my brother-in-law Zac], on the other hand, wasn&#8217;t too amused when Zac turned up after drinking the (Irish) Nightly Guideline Drink Amount: approx. 10-11 pints of Guinness &#8212; those he could count, that is.</p> +<p>In Italy, England, US and in many other countries a &#8220;stag night&#8221; may end up in many different ways: + dinner with friends, strip club, wild practical jokes to the groom, and so on. In Ireland, it generally means one + thing: <em>drink</em>. It occasionally ends up badly (there are rumors a poor fellow who was thrown out in a river + and got married with a broken nose), but generally everything turns out just fine: have a few pints, sing and dance, + and have a couple of eggs in the morning. That normally does the trick &#8212; if you're an Irishman.</p> +<p>I was well aware of my in-laws drinking habits, so I decided to take uncle Felix's offer: &#8220;I'll have a taxi + ready for you whenever you want to sneak out of the pub, and make sure you do&#8221; &#8212; he said.</p> +<p>The evening started with a few pints at Laffansbridge, an old country pub in the middle of nowhere, probably one of + the best places for a pint of Guinnes in the whole Tipperary. The little smart guy who runs it has one simple rule: + at midnight the light goes off and no more drinks are served, so all 16 of us got into a minibus by then, heading + for the next pub.</p> +<p><em>Quinn's</em> is the family pub, in the sense that it is owned by Felix Quinn Jr, son of Felix Quinn Sr, brother + of Anastasia Quinn, mother of James O'Mahoney, father of Roxanne O'Mahoney, my wife (families are still very large + and very close, in Ireland). Being the family pub, <em>Quinn's</em> doesn't close at midnight; in fact, it often + doesn't close at all for family and friends (i.e. the entire village of Killenaule).<br /> + As soon as we got in, Claire (wife of Felix, son of Felix, etc. etc.) greeted us with a full round of pints, and + then another, and yet another&#8230;</p> +<p>Around the third round someone asked me if I could sing a song &#8212; a request I politely but firmly declined due + to my total ignorance in Irish folk songs and my total inability to utter sounds in even the slightest musical way. + Luckily, someone else volunteered and sang a beautiful ballad, perfectly in-tune, with no music backing at all: + Irish people are amazingly musical when sober, imagine when drunk!</p> +<p>When people started getting into <em>their</em> fourth round (note the pronoun), I decided to try out an old trick to + keep myself sober: I drank less than half a pint, and then pretended to drink the rest, leaving always something in + my glass. In that way &ndash; I thought &ndash; I could pretend I didn't need yet another pint. Unfortunately the + pub owner spotted me straight away and said &#8220;That pint is stale&#8230; here, have another one, on the + house!&#8221;. At that point I decided it was better for me &amp; the rest of the Italians to quietly sneak out.</p> +<p>I was at home (uncle Martin's house) and in bed at about 1:30 AM. I almost didn't sleep at all that night, as + expected, so I wasn't too bothered when the rest of the drinking comrades came back, singing and shouting at 4:30 + am. Simona [the Maid of Honor and girlfriend of my brother-in-law Zac], on the other hand, wasn't too amused when + Zac turned up after drinking the (Irish) Nightly Guideline Drink Amount: approx. 10-11 pints of Guinness &#8212; + those he could count, that is.</p> <h3 id="preparations">The preparations</h3> <p>This part of the day is best reported in chronological tabular form:</p> <table>

@@ -87,7 +116,10 @@ <td> The bridesmaids are up and about, ready to go to the hairdresser </td>

</tr> <tr> <td> 9:00 </td> - <td> Uncle Martin and the rest of the gang slowly regain consciousness. The groom spends about half an hour trying to explain uncle Martin that he&#8217;s his only hope to collect and bring back the flowers for the church (_&quot;Ahhhh you want <em>me</em> to do it&#8230; you could have said so since the beginning!&quot;_). </td> + <td> Uncle Martin and the rest of the gang slowly regain consciousness. The groom spends about half an hour + trying to explain uncle Martin that he's his only hope to collect and bring back the flowers for the church + (_&quot;Ahhhh you want <em>me</em> to do it&#8230; you could have said so since the beginning!&quot;_). + </td> </tr> <tr> <td> 9:45 </td>

@@ -99,23 +131,29 @@ <td> The groom attempts to gather his groomsmen for the first time </td>

</tr> <tr> <td> 10:15 </td> - <td> The groom starts having a chat with the best man and the head usher. The other ushers are <em>somewhere around</em>. </td> + <td> The groom starts having a chat with the best man and the head usher. The other ushers are <em>somewhere + around</em>. </td> </tr> <tr> <td> 10:30 </td> - <td> The groom realizes that one of the ushers (Zac) has the most terrible hangover on Earth and the other (Caspar) slept solidly from 3 am (while still in the pub) until now </td> + <td> The groom realizes that one of the ushers (Zac) has the most terrible hangover on Earth and the other + (Caspar) slept solidly from 3 am (while still in the pub) until now </td> </tr> <tr> <td> 11:00 </td> - <td> The groom attempts to gather his groomsmen for the second time, this time telling them it&#8217;s time to get ready (he&#8217;s not taken seriously) </td> + <td> The groom attempts to gather his groomsmen for the second time, this time telling them it's time to get + ready (he's not taken seriously) </td> </tr> <tr> <td> 11:30 </td> - <td> The groom attempts to gather his groomsmen for the third and final time, now everyone is starting to try out their suits </td> + <td> The groom attempts to gather his groomsmen for the third and final time, now everyone is starting to try + out their suits </td> </tr> <tr> <td> 11:45 </td> - <td> For some weird reason auntie Noelle decides to call the groom and tell him that the florist is not accepting checks, after 5 minuts of absolute panic, she says we&#8217;re going to get the flowers anyway and there&#8217;s nothing to worry about. </td> + <td> For some weird reason auntie Noelle decides to call the groom and tell him that the florist is not + accepting checks, after 5 minuts of absolute panic, she says we're going to get the flowers anyway and + there's nothing to worry about. </td> </tr> <tr> <td> 12:00 </td>

@@ -123,7 +161,8 @@ <td> All groomsman are dressed. It starts raining. </td>

</tr> <tr> <td> 12:30 </td> - <td> Zac decides he needs some fresh air and takes a walk outside in his morning suit, regardless of the heavy rain and the groom&#8217;s prayers </td> + <td> Zac decides he needs some fresh air and takes a walk outside in his morning suit, regardless of the heavy + rain and the groom's prayers </td> </tr> <tr> <td> 13:10 </td>

@@ -139,79 +178,174 @@ <td> The brides arrives and the ceremony starts. </td>

</tr> </table> <h3 id="ceremony">The ceremony</h3> -<p>The wedding ceremony was very suggestive, almost magic. As soon as I looked at Roxanne in her wedding dress all worries faded away, and we both enjoyed the wedding rite. I must say I also don&#8217;t remember much of the whole ceremony, but I&#8217;m told it&#8217;s a common thing to happen.</p> -<p>As the ceremony started, we sat down without looking at the audience, so I didn&#8217;t feel paranoid and enjoyed listening to the priest&#8217;s speech, the readings and the songs. Canon Liam Ryan embodies the typical Irish priest: about 70-year-old, tall, extremely talkative, cheerful and very charismatic. He shocked us all during the reharsal telling us what we&#8217;d have had to do the day after, and it felt like a lot of work. The groomsmen and the bridesmaids were terrified: <em>&#8220;So I have to help you sit down, move the chair&#8230; like that&#8230; then&#8230; go back&#8230; no, wait, what was that again?&#8221;</em>. Matteo and Roberto couldn&#8217;t believe the whole choreography involved in the event: it&#8217;s nothing like that in Italy, but they were glad they were part of it in the end.</p> -<p>It all happened exactly like Father Ryan predicted, he even guessed almost all the few mistakes we made: &#8220;You have to walk slowly in front of the bride&#8221; &ndash; he said to Delia, the bridesmain &ndash; &#8220;and if you <em>think</em> you&#8217;re going slow while you&#8217;re doing it, you&#8217;re probably going <em>way too fast</em>&#8221;. But nobody noticed, really, and nobody cared: they were all too excited to mind that, and everyone&#8217;s eyes were on Roxanne, anyway. She was really, really gorgeous and her dress was fabulous. It felt unreal, at times: we both felt we were in one of those movies&#8230;</p> -<p>The most peculiar thing about the whole ceremony was perhaps the different languages involved: English, Italian, Gaelic and Latin. I doubt there was a single person among us who could understand the entirety of the mass, but it was very evocatory. The whole mass was predominantly in English, with the following exceptions:</p> +<p>The wedding ceremony was very suggestive, almost magic. As soon as I looked at Roxanne in her wedding dress all + worries faded away, and we both enjoyed the wedding rite. I must say I also don't remember much of the whole + ceremony, but I'm told it's a common thing to happen.</p> +<p>As the ceremony started, we sat down without looking at the audience, so I didn't feel paranoid and enjoyed listening + to the priest's speech, the readings and the songs. Canon Liam Ryan embodies the typical Irish priest: about + 70-year-old, tall, extremely talkative, cheerful and very charismatic. He shocked us all during the reharsal telling + us what we'd have had to do the day after, and it felt like a lot of work. The groomsmen and the bridesmaids were + terrified: <em>&#8220;So I have to help you sit down, move the chair&#8230; like that&#8230; then&#8230; go + back&#8230; no, wait, what was that again?&#8221;</em>. Matteo and Roberto couldn't believe the whole + choreography involved in the event: it's nothing like that in Italy, but they were glad they were part of it in the + end.</p> +<p>It all happened exactly like Father Ryan predicted, he even guessed almost all the few mistakes we made: &#8220;You + have to walk slowly in front of the bride&#8221; &ndash; he said to Delia, the bridesmain &ndash; &#8220;and if you + <em>think</em> you're going slow while you're doing it, you're probably going <em>way too fast</em>&#8221;. But + nobody noticed, really, and nobody cared: they were all too excited to mind that, and everyone's eyes were on + Roxanne, anyway. She was really, really gorgeous and her dress was fabulous. It felt unreal, at times: we both felt + we were in one of those movies&#8230;</p> +<p>The most peculiar thing about the whole ceremony was perhaps the different languages involved: English, Italian, + Gaelic and Latin. I doubt there was a single person among us who could understand the entirety of the mass, but it + was very evocatory. The whole mass was predominantly in English, with the following exceptions:</p> <ul> - <li>The First Reading was in Latin (my mum read it superbly &#8212; she&#8217;s a Latin teacher!)</li> + <li>The First Reading was in Latin (my mum read it superbly &#8212; she's a Latin teacher!)</li> <li>The Second Reading was in Italian</li> <li><em>Our Father</em> was sung in Gaelic</li> </ul> -<p>By our own common decision, we didn&#8217;t ask for a professional video of the ceremony, only <a href="#photos">photos</a>. Nevertheless, my uncle captured most of the ceremony (and the most embarassing bits of the dancing after the <a href="#reception">reception</a>) using my dad&#8217;s video camera.</p> +<p>By our own common decision, we didn't ask for a professional video of the ceremony, only <a + href="#photos">photos</a>. Nevertheless, my uncle captured most of the ceremony (and the most embarassing bits + of the dancing after the <a href="#reception">reception</a>) using my dad's video camera.</p> <h3 id="reception">The reception</h3> -<p>When the ceremony ended it was still raining heavily, so after an endless amount of pictures taken we went straight into our Rolls. Technically, that was not <em>our</em> Rolls of course: we rented it from a local car hirer, and it was worth every penny. A lot of people get married in a VW Beatle or in a Mercedes at most, but Roxanne and I really love old cars, so when we saw <a href="http://www.alleventslimos.com/Wedding/rolls_silver_cloud.html">Ruby</a>, a red 1961 Silver Cloud II, we just had to get it. Champagne and chauffeur included, of course.</p> -<p>The chauffeur was a very jolly and chatty fellow from Waterford, and drove that beauty of a car for a very long time. Unfortunately though his sat nav decided to stop working and he wasn&#8217;t really <em>local</em>, so erhm&#8230;, well, let&#8217;s just say we were really lucky that at least <em>the bride</em>knew her way around. We made it safe and sound to Raheen House in no time: so fast that everyone else arrived about 10-15 minutes afterwards.</p> -<p><a href="http://www.raheenhouse.ie/">Raheen House</a> is a very charming <span class="caps">XIX</span> century Georgian House. One of those places you normally see only in movies: tapestries on the walls, old armchairs, stuffed heads over the doors (an african buffalo, a huge deer, an antelope, and some more)&#8230; you get the picture. Unfortunately it can only accomodate 120 people, so it isn&#8217;t a very popular location for wedding receptions in Ireland, because the number of people invited at Irish weddings ranges from 150 to 300. We were about 60 in total, nevertheless the dining hall looked quite full and lively, with 7 big tables covering all the room.</p> -<p>As soon as we got there, my best man was informed by the staff that he <em>had to</em> introduce the bride and groom. <em>&#8220;What? No, wait! What do I say&#8230; how&#8230; what? Fabio, come back!&#8221;</em> he freaked out, but as soon as I wrote down the two lines he was supposed to say in English everything was OK. Not only did he introduce us properly, he also made a <em>terrific</em> speech: he obviously gave it a lot of thought and it sounded just perfect.</p> -<p>After he spoke, it was my dad&#8217;s turn. Now, my dad speaks perfect French but never got a chance to learn and practice English (yet), so not only he had to write down his entire speech, he also had to annotate the pronunciation of <em>every</em> word. He managed fine though. It felt a little bit long, but he said really wonderful and touching words about Roxanne and I, our respective families, and countries. I&#8217;ll publish it soon on the Internet, for posterity&#8217;s sake.</p> -<p>The last three speeches were Jim&#8217;s (the father of the bride), who did great as always, without reading anything, right on the spot. And so did Roxanne and I: we basically just said a few words thanking all the guests for coming, and half of them for helping us with the wedding as well. Every speech (except mine and Roxanne&#8217;s) was characterized by subtle and very discreet exhortations to produce progeny (<em>&#8220;get on with it!&#8221;</em>), but other than that they were fine.</p> -<p>After all the traditional obligations, we finally started our dinner. The food was delicious and extremely tasty: Raheen House is renown for that, as we were told, but we honestly weren&#8217;t 100% sure until we started trying it. And there was also <em>plenty</em> of it, so everyone felt really satisfied towards the end of the meal. So satisfied that we decided to postpone the cake till later (see below) and indulge with wine instead.</p> -<p>Wine, right. They were going to charge us 20€ per bottle for some weird Chilean or Australian stuff. Silly and almost offending, especially considering that my family has been producing wine for family and friend&#8217;s use for at least three generations! This was my dad&#8217;s primary concern until we left for Ireland: &#8220;You sort the restaurant out, because I&#8217;m going to bring some bottles, no matter what&#8221;. He shipped over <em>96</em> special bottles of our 2005, 2006, 2007 and 2008 vintages. Ninety-six. We used about 25 of them for the meal and the rest of the evening, then we gave one to almost every guest, three to the staff of the restaurant, a few more to other hotel and B&amp;B owners, six to each uncle of the bride, etc. etc. None came back to Italy, that&#8217;s for sure.</p> -<p>Right after the meal the band came in, and we got ready to dance. Roxanne and I had to start with our First Dance, of course, then everyone else slowly joined in. The group was playing a mixture of traditional Irish music, ballads and rock &#8216;n&#8217; roll: they were amazing, and especially the Italian&#8217;s were really impressed.</p> -<p>Not as impressed as when they noticed uncle Martin dancing. I&#8217;ve never seen <em>anyone</em> in my life dancing so vigorously and wildly in my life. He has his own special technique that cannot be described with words. I&#8217;ll try to post a video of him soon. He really felt the rythm and never missed a step. Like a whirlwind he dragged everyone in, dancing with him: first his daughters and sons, then his brothers, the he thought he&#8217;d take my auntie for a spin, then the bride (well, mostly her dress), then even me! I don&#8217;t remember much, I think I was in the air at one point, and then all over the place&#8230;</p> -<p>Everyone of course joined in and started drinking and dancing for the whole evening. When the band performed the last two songs, I just remember a <em>huge</em> circle of nearly all the guests holding hands dancing around Roxanne and I, then coming closer, then far, then closer again. It was definitely the wildest night in our whole life.</p> +<p>When the ceremony ended it was still raining heavily, so after an endless amount of pictures taken we went straight + into our Rolls. Technically, that was not <em>our</em> Rolls of course: we rented it from a local car hirer, and it + was worth every penny. A lot of people get married in a VW Beatle or in a Mercedes at most, but Roxanne and I really + love old cars, so when we saw <a href="http://www.alleventslimos.com/Wedding/rolls_silver_cloud.html">Ruby</a>, a + red 1961 Silver Cloud II, we just had to get it. Champagne and chauffeur included, of course.</p> +<p>The chauffeur was a very jolly and chatty fellow from Waterford, and drove that beauty of a car for a very long time. + Unfortunately though his sat nav decided to stop working and he wasn't really <em>local</em>, so erhm&#8230;, well, + let's just say we were really lucky that at least <em>the bride</em>knew her way around. We made it safe and sound + to Raheen House in no time: so fast that everyone else arrived about 10-15 minutes afterwards.</p> +<p><a href="http://www.raheenhouse.ie/">Raheen House</a> is a very charming <span class="caps">XIX</span> century + Georgian House. One of those places you normally see only in movies: tapestries on the walls, old armchairs, stuffed + heads over the doors (an african buffalo, a huge deer, an antelope, and some more)&#8230; you get the picture. + Unfortunately it can only accomodate 120 people, so it isn't a very popular location for wedding receptions in + Ireland, because the number of people invited at Irish weddings ranges from 150 to 300. We were about 60 in total, + nevertheless the dining hall looked quite full and lively, with 7 big tables covering all the room.</p> +<p>As soon as we got there, my best man was informed by the staff that he <em>had to</em> introduce the bride and groom. + <em>&#8220;What? No, wait! What do I say&#8230; how&#8230; what? Fabio, come back!&#8221;</em> he freaked out, but + as soon as I wrote down the two lines he was supposed to say in English everything was OK. Not only did he introduce + us properly, he also made a <em>terrific</em> speech: he obviously gave it a lot of thought and it sounded just + perfect.</p> +<p>After he spoke, it was my dad's turn. Now, my dad speaks perfect French but never got a chance to learn and practice + English (yet), so not only he had to write down his entire speech, he also had to annotate the pronunciation of + <em>every</em> word. He managed fine though. It felt a little bit long, but he said really wonderful and touching + words about Roxanne and I, our respective families, and countries. I'll publish it soon on the Internet, for + posterity's sake.</p> +<p>The last three speeches were Jim's (the father of the bride), who did great as always, without reading anything, + right on the spot. And so did Roxanne and I: we basically just said a few words thanking all the guests for coming, + and half of them for helping us with the wedding as well. Every speech (except mine and Roxanne's) was characterized + by subtle and very discreet exhortations to produce progeny (<em>&#8220;get on with it!&#8221;</em>), but other than + that they were fine.</p> +<p>After all the traditional obligations, we finally started our dinner. The food was delicious and extremely tasty: + Raheen House is renown for that, as we were told, but we honestly weren't 100% sure until we started trying it. And + there was also <em>plenty</em> of it, so everyone felt really satisfied towards the end of the meal. So satisfied + that we decided to postpone the cake till later (see below) and indulge with wine instead.</p> +<p>Wine, right. They were going to charge us 20€ per bottle for some weird Chilean or Australian stuff. Silly and almost + offending, especially considering that my family has been producing wine for family and friend's use for at least + three generations! This was my dad's primary concern until we left for Ireland: &#8220;You sort the restaurant out, + because I'm going to bring some bottles, no matter what&#8221;. He shipped over <em>96</em> special bottles of our + 2005, 2006, 2007 and 2008 vintages. Ninety-six. We used about 25 of them for the meal and the rest of the evening, + then we gave one to almost every guest, three to the staff of the restaurant, a few more to other hotel and B&amp;B + owners, six to each uncle of the bride, etc. etc. None came back to Italy, that's for sure.</p> +<p>Right after the meal the band came in, and we got ready to dance. Roxanne and I had to start with our First Dance, of + course, then everyone else slowly joined in. The group was playing a mixture of traditional Irish music, ballads and + rock &#8216;n' roll: they were amazing, and especially the Italian's were really impressed.</p> +<p>Not as impressed as when they noticed uncle Martin dancing. I've never seen <em>anyone</em> in my life dancing so + vigorously and wildly in my life. He has his own special technique that cannot be described with words. I'll try to + post a video of him soon. He really felt the rythm and never missed a step. Like a whirlwind he dragged everyone in, + dancing with him: first his daughters and sons, then his brothers, the he thought he'd take my auntie for a spin, + then the bride (well, mostly her dress), then even me! I don't remember much, I think I was in the air at one point, + and then all over the place&#8230;</p> +<p>Everyone of course joined in and started drinking and dancing for the whole evening. When the band performed the last + two songs, I just remember a <em>huge</em> circle of nearly all the guests holding hands dancing around Roxanne and + I, then coming closer, then far, then closer again. It was definitely the wildest night in our whole life.</p> <h3 id="honeymoon">The honeymoon</h3> -<p>The day after we slowly recovered. We didn&#8217;t sleep much, but we managed to get up and have breakfast with some of the guests at the hotel, before they started heading back. Then we decided to go shopping in town: it was basically Roxanne and I, plus her brothers, her parents, and my parents. Not much of a honeymoon, as my mum pointed out, but we didn&#8217;t mind.</p> -<p>After spending the following day saying goodbye and thanks to all the relatives, we finally headed to Co. Galway, in Connemara. We booked three nights in the fabulous <a href="http://www.abbeyglen.ie/">Abbeyglen Castle</a>, highly recommended. Our superior room had a fireplace, a four-poster bed and jacuzzi bath: the bare essentials for a honeymoon really. Roxanne and I really enjoyed those three days, finally alone in the most breathtaking and romantic area of Ireland. Three days weren&#8217;t enough, really, but we&#8217;ll eventually go back there hopefully: maybe Sir Paul Hughes, proprietor of the castle, will still remember <em>&#8220;the bride and groom&#8221;</em>, as he kept calling us throughout our brief, but very pleasant stay.</p> -<p>Exactly as auntie Noelle said, everything was over in a blink: the ceremony, the reception, the honeymoon&#8230; everything went back to normal, eventually. It took a while to get used to our normal life: we had to go on a shopping spree before we went back to work&#8230; let&#8217;s say the money we got as present from most of the guest was well spent in a 42&quot; <span class="caps">LCD</span> HD TV, surround sound system, etc. etc.</p> +<p>The day after we slowly recovered. We didn't sleep much, but we managed to get up and have breakfast with some of the + guests at the hotel, before they started heading back. Then we decided to go shopping in town: it was basically + Roxanne and I, plus her brothers, her parents, and my parents. Not much of a honeymoon, as my mum pointed out, but + we didn't mind.</p> +<p>After spending the following day saying goodbye and thanks to all the relatives, we finally headed to Co. Galway, in + Connemara. We booked three nights in the fabulous <a href="http://www.abbeyglen.ie/">Abbeyglen Castle</a>, highly + recommended. Our superior room had a fireplace, a four-poster bed and jacuzzi bath: the bare essentials for a + honeymoon really. Roxanne and I really enjoyed those three days, finally alone in the most breathtaking and romantic + area of Ireland. Three days weren't enough, really, but we'll eventually go back there hopefully: maybe Sir Paul + Hughes, proprietor of the castle, will still remember <em>&#8220;the bride and groom&#8221;</em>, as he kept calling + us throughout our brief, but very pleasant stay.</p> +<p>Exactly as auntie Noelle said, everything was over in a blink: the ceremony, the reception, the honeymoon&#8230; + everything went back to normal, eventually. It took a while to get used to our normal life: we had to go on a + shopping spree before we went back to work&#8230; let's say the money we got as present from most of the guest was + well spent in a 42&quot; <span class="caps">LCD</span> HD TV, surround sound system, etc. etc.</p> <p>&#8230;And we still have our other half of the honeymoon, too! Probably Miami Beach and Bahamas, next November.</p> <h3 id="photos">Photos</h3> -<p>Our wedding photos were taken by <a href="http://www.patmccoole.ie/">Pat McCoole</a>, who did a truly amazing job portraying the magic of our special day.</p> -<p><embed type="application/x-shockwave-flash" src="http://picasaweb.google.com/s/c/bin/slideshow.swf" width="600" height="400" flashvars="host=picasaweb.google.com&hl=en_US&feat=flashalbum&RGB=0x000000&feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Fh3rald%2Falbumid%2F5359762418204291649%3Falt%3Drss%26kind%3Dphoto%26hl%3Den_US" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed></p> +<p>Our wedding photos were taken by <a href="http://www.patmccoole.ie/">Pat McCoole</a>, who did a truly amazing job + portraying the magic of our special day.</p> +<p><embed type="application/x-shockwave-flash" src="http://picasaweb.google.com/s/c/bin/slideshow.swf" width="600" + height="400" + flashvars="host=picasaweb.google.com&hl=en_US&feat=flashalbum&RGB=0x000000&feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Fh3rald%2Falbumid%2F5359762418204291649%3Falt%3Drss%26kind%3Dphoto%26hl%3Den_US" + pluginspage="http://www.macromedia.com/go/getflashplayer"></embed></p> <h3 id="trivia">Trivia</h3> <ul> <li>On the wedding day, it rained non-stop from 12 am to 7 pm.</li> <li>The groom drove for a total of 1758.7 Km in 14 days.</li> <li>On his stag night, the groom only drank 2.5 pints of Guinness (almost everyone else had 10, on average).</li> <li>The night before the wedding, the groom slept only from 5:30 to 7:30.</li> - <li>Only the middle tier of the wedding cake was eaten on the wedding day. The top tier was eaten during the following days by relatives and the bottom tier was shipped to Italy, together with the Bride&#8217;s dress.</li> - <li>The father of the bride decided to change into more comfortable clothes right after the ceremony. He borrowed a waistoat and a jacket for the speech.</li> + <li>Only the middle tier of the wedding cake was eaten on the wedding day. The top tier was eaten during the + following days by relatives and the bottom tier was shipped to Italy, together with the Bride's dress.</li> + <li>The father of the bride decided to change into more comfortable clothes right after the ceremony. He borrowed a + waistoat and a jacket for the speech.</li> <li>Uncle Martin danced with a lot of people after the meal, including the bride, her father, and the groom.</li> - <li>When he arrived at the church, the groom immediately realized he left the mass booklets and the confetti in the back of his car, at home. They were eventually brought to the church by a cousin of the bride just a few minutes before she arrived.</li> - <li>At the very start of the ceremony, the groom told the priest to tell the best man to get a mass booklet so that he and the bride can follow the mass properly. After 30 seconds of lip-reading and signalling, the best man understood and fetched one of the infamous booklets.</li> - <li>The bride forgot her change of clothes in uncle John&#8217;s car, who had to drive in early in the morning or she would have had her breakfast in her wedding dress.</li> + <li>When he arrived at the church, the groom immediately realized he left the mass booklets and the confetti in the + back of his car, at home. They were eventually brought to the church by a cousin of the bride just a few minutes + before she arrived.</li> + <li>At the very start of the ceremony, the groom told the priest to tell the best man to get a mass booklet so that + he and the bride can follow the mass properly. After 30 seconds of lip-reading and signalling, the best man + understood and fetched one of the infamous booklets.</li> + <li>The bride forgot her change of clothes in uncle John's car, who had to drive in early in the morning or she + would have had her breakfast in her wedding dress.</li> </ul> <h3 id="quotes">Famous quotes</h3> <blockquote> -<p>&#8220;This journey feels like going to Lourdes: you come back and your life changed forever.&#8221;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#8212; The best man, when he arrived in Killenaule.</p> + <p>&#8220;This journey feels like going to Lourdes: you come back and your life changed + forever.&#8221;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#8212; The best man, when he arrived in + Killenaule.</p> </blockquote> <blockquote> -<p>&#8220;Is there a garage around?&#8221;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8212; Auntie Isa while waving a car mirror, when she arrived in Killenaule</p> + <p>&#8220;Is there a garage around?&#8221;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8212; Auntie Isa while + waving a car mirror, when she arrived in Killenaule</p> </blockquote> <blockquote> -<p>&#8220;Do I really have to do a speech? Are you sure?&#8221;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8212; The best man, when he met the groom in Ireland.</p> + <p>&#8220;Do I really have to do a speech? Are you sure?&#8221;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + &#8212; The best man, when he met the groom in Ireland.</p> </blockquote> <blockquote> -<p>&#8220;My preciousssss!&#8221;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8212; The best man, when he was given the rings in custody.</p> + <p>&#8220;My preciousssss!&#8221;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8212; The best man, when he was + given the rings in custody.</p> </blockquote> <blockquote> -<p>&#8220;She&#8217;s the most calm and organized bride in history.&#8221;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8212; Auntie Noelle, about the bride on the wedding day.</p> + <p>&#8220;She's the most calm and organized bride in history.&#8221;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + &#8212; Auntie Noelle, about the bride on the wedding day.</p> </blockquote> <blockquote> -<p>&#8220;You could tell he was panicking on the phone&#8221;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8212; Auntie Noelle, about the groom on the wedding day.</p> + <p>&#8220;You could tell he was panicking on the phone&#8221;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + &#8212; Auntie Noelle, about the groom on the wedding day.</p> </blockquote> <blockquote> -<p>&#8220;Potatoes, potatoes, potatoes&#8230;&#8221;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8212; The father of the bride to the groom, during the traditional handshake of the wedding rehearsal.</p> + <p>&#8220;Potatoes, potatoes, potatoes&#8230;&#8221;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8212; The + father of the bride to the groom, during the traditional handshake of the wedding rehearsal.</p> </blockquote> <blockquote> -<p>&#8220;Potatoes, potatoes, potatoes&#8230;&#8221;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8212; The groom to the father of the bride, during the traditional handshake of the wedding ceremony.</p> + <p>&#8220;Potatoes, potatoes, potatoes&#8230;&#8221;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8212; The + groom to the father of the bride, during the traditional handshake of the wedding ceremony.</p> </blockquote> <blockquote> -<p><strong>Best man:</strong> &#8220;[&#8230;] this is the first time for me to speak in public, in front of an <em>English</em> audience [&#8230;]&#8221;<br /> -<strong>Audience:</strong> &#8220;Irish! <span class="caps">IRISH</span>!!!&#8221;<br /> -<strong>Best man:</strong> &#8220;&#8230;oh, right, Irish! Sorry&#8230;&#8221;<br /></p> + <p><strong>Best man:</strong> &#8220;[&#8230;] this is the first time for me to speak in public, in front of an + <em>English</em> audience [&#8230;]&#8221;<br /> + <strong>Audience:</strong> &#8220;Irish! <span class="caps">IRISH</span>!!!&#8221;<br /> + <strong>Best man:</strong> &#8220;&#8230;oh, right, Irish! Sorry&#8230;&#8221;<br /> + </p> </blockquote> <blockquote> -<p>&#8220;I need another shirt!&#8221;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8212; Uncle Martin, after about 2 hours of continuous dancing with almost all the guests.</p> + <p>&#8220;I need another shirt!&#8221;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8212; Uncle Martin, after + about 2 hours of continuous dancing with almost all the guests.</p> </blockquote>
M contents/articles/11.htmlcontents/articles/11.html

@@ -11,35 +11,35 @@ little bit my almost-rusty baking skills.</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&#8230; Now it&#8217;s a bit out of date, I must admit: it was based on a pre-beta release - of the framework, and we&#8217;re (more or less) stable now. <br /> + del.icio.us and ma.gnolia&#8230; Now it's a bit out of date, I must admit: it was based on a pre-beta release + of the framework, and we're (more or less) stable now. <br /> A lot of things changed in the Bakers Community since then! At the time the <a href="http://wiki.cakephp.org/">wiki</a> barely started and there was no <a href="http://manual.cakephp.org/">manual</a> whatsoever, only my long and perhaps <em>slightly</em> boring - article describing Cake&#8217;s functionalities. Now there things are much better for newcomers: they have a + article describing Cake's functionalities. Now there things are much better for newcomers: they have a continuously growing community to rely upon, both on the Google user group and on <span class="caps">IRC</span> (#cakephp on FreeNode counted 63 members today, while back in the day 20 was a big number). There are also a few people who started blogging and starting websites about CakePHP: while I was the first to write an article about - Cake I was <em>the last</em> so far to start a blog :/ Oh well, nobody&#8217;s perfect!</p> -<p>The first site I came across &#8211; although not a blog really &#8211; is Graham Bird&#8217;s <a + Cake I was <em>the last</em> so far to start a blog :/ Oh well, nobody's perfect!</p> +<p>The first site I came across &#8211; although not a blog really &#8211; is Graham Bird's <a href="http://grahambird.co.uk/cake/">Cake for Beginners</a>. When someone asks me some basic questions about - CakePHP I send him there because first of all they&#8217;ll find a short <span class="caps">FAQ</span> about the + CakePHP I send him there because first of all they'll find a short <span class="caps">FAQ</span> about the framework, i.e. something everybody should know before even start thinking about learning Cake. Similarly, the guy has a <a href="http://grahambird.co.uk/cake/glossary/">Glossary</a> in progress to help those souls who feel lost in - Cake&#8217;s terminology. If you don&#8217;t consider yourself a total beginner anymore, the <a + Cake's terminology. If you don't consider yourself a total beginner anymore, the <a href="http://grahambird.co.uk/cake/tutorials/">Tutorials</a> section can be a very interesting read: I wanted to add some <span class="caps">AJAX</span> bits to my site, but the documentation about this seemed pretty scarce, so I headed to the <a href="http://grahambird.co.uk/cake/tutorials/ajax.php">Ajax Task List</a> tutorial and it really helped.</p> <p>On the blogs front, on the other hand, <a href="http://cakebaker.42dh.com/">Cake Baker</a> seems to be the most - active: I&#8217;m starting to check this one often (OK, I&#8217;d better subscribe to the <span - class="caps">RSS</span> feeds, perhaps) because it seems to be <span class="caps">THE</span> best place to get - the latest news about everything concerning CakePHP: The author seems to post quite frequently (there&#8217;s always - a new post every 1-3 days maximum) includes short code snippets when necessary and report news when there&#8217;s + active: I'm starting to check this one often (OK, I'd better subscribe to the <span class="caps">RSS</span> feeds, + perhaps) because it seems to be <span class="caps">THE</span> best place to get + the latest news about everything concerning CakePHP: The author seems to post quite frequently (there's always + a new post every 1-3 days maximum) includes short code snippets when necessary and report news when there's anything to report.</p> <p><a href="http://sentino.wordpress.com/">Sentino</a> is also an interesting place to learn new things about CakePHP: the only problem is that the author seems to post less frequently&#8230; the blog seems to have some sort of - &#8220;milestone&#8221; schedule, publishing something when there&#8217;s something big enough to justify a post. If + &#8220;milestone&#8221; schedule, publishing something when there's something big enough to justify a post. If you want to subscribe to a less frequent blog with only the essentials about Cake, this is a good choice.</p> <p><a href="http://rossoft.wordpress.com/">RosSoft</a> unlike the others mentioned up to now has a much more technical approach: no news about Cake or anything, just some <span class="caps">REALLY</span> useful real-world example of

@@ -49,18 +49,18 @@ <br />

Among the most interesting fully working snippets:<br /> <a href="http://rossoft.wordpress.com/2006/03/29/ip-to-country-component-geo-location/">IP-to-country component</a> <br /> - <a href="http://rossoft.wordpress.com/2006/03/27/poor-mans-cron-component/">Poor man&#8217;s cron + <a href="http://rossoft.wordpress.com/2006/03/27/poor-mans-cron-component/">Poor man's cron component</a><br /> <a href="http://rossoft.wordpress.com/2006/03/16/image-auth-component/">Image Auth &#8211; <span class="caps">CAPTCHA</span> component</a> </p> <p style="float:right;"><img src="http://xcite-online.de/spliceit/themes/SpliceIt/logo.png" alt="" /></p> <p><a href="http://www.thinkingphp.org/">ThinkingPHP</a> is another &#8220;technical&#8221; Cake blog, with interesting - code snippets and thoughts about our favourite <span class="caps">PHP</span> framework. For those who don&#8217;t - know or don&#8217;t remember him (yes, like me&#8230;), he&#8217;s the author of <a + code snippets and thoughts about our favourite <span class="caps">PHP</span> framework. For those who don't + know or don't remember him (yes, like me&#8230;), he's the author of <a href="http://xcite-online.de/spliceit/">SpliceIt!</a>&#8230; what?</p> <blockquote> - <p>SpliceIt!&#8217;s mission is to provide a clean and light-weight code base for people who want to create complex + <p>SpliceIt!'s mission is to provide a clean and light-weight code base for people who want to create complex webapps faster then ever. The things we want to provide are:<br /> &#8211; User/Right Managment<br /> &#8211; Theming Support<br />

@@ -68,21 +68,21 @@ &#8211; i18n<br />

&#8211; Url Aliasing<br /> &#8211; and most notabily: Modularization of often used Code Segments</p> </blockquote> -<p>i.e. something I should have checked before recoding this website. I&#8217;ll definitely keep this in mind for the +<p>i.e. something I should have checked before recoding this website. I'll definitely keep this in mind for the next release of h3rald.com.</p> <p style="float:left;"><img src="http://rdos.rd11.com/img/rd11/rdlogo.gif" alt="" /></p> <p><a href="http://rd11.com/posts">Posts@ rd11</a> a.k.a. gwoo [and seth]&#8216;s blog. Moment of silence. Gwoo is - CakePHP&#8217;s project manager (respect+) and one of the lead developers of CakePHP and he also actually uses Cake + CakePHP's project manager (respect+) and one of the lead developers of CakePHP and he also actually uses Cake for his website and blog instead of WordPress :)<br /> - What can I write about him. It&#8217;s difficult. I&#8217;ll avoid all possible pseudo-religious comparisons but + What can I write about him. It's difficult. I'll avoid all possible pseudo-religious comparisons but when I say that <em>he created CakePHP</em> I think I say it all. The code he used for his blog is part of a collection of open-source, Cake-powered tools all prefixed with rd- or Cake, available on <a href="https://cakeforge.org/projects/rdos">CakeForge</a>. I personally think that looking at his sample applications can be one of the best way to learn how to bake <em>properly</em>, and yes, I <strong>did</strong> check them out before coding this site for the second time. Demos are <a href="http://rdos.rd11.com/">online</a>. </p> -<p>That&#8217;s it. These are perhaps the most well-known bakers and/or Cake bloggers on the planet. There are certainly - others, maybe even in other languages, but now I&#8217;d better stop writing now, because this is a rather long blog - post. Sorry. I&#8217;m new to blogging and I just can&#8217;t help myself: especially with Cake, I need to write +<p>That's it. These are perhaps the most well-known bakers and/or Cake bloggers on the planet. There are certainly + others, maybe even in other languages, but now I'd better stop writing now, because this is a rather long blog + post. Sorry. I'm new to blogging and I just can't help myself: especially with Cake, I need to write lenghty texts!<br /> More to come&#8230;</p>
M contents/articles/12.htmlcontents/articles/12.html

@@ -8,23 +8,23 @@ <p>The time has come. The times when I used to meander around reading stuff on the Net and writing about whatever I

wanted are over. Incidentally, the world may end, <em>your</em> laptop could explode and I could knock at your door in a few minutes asking for money, imagine that!</p> <p>Nothing of the above, alright, bad joke, but sooner or later the time to <em>start doing something</em> comes, at - some point you ought to start making some real money. It&#8217;s time to settle down, my fiance&eacute; are eager to - get our own independence, move to our new house (which we&#8217;re still doing up) etc. etc. Fair enough. I spent + some point you ought to start making some real money. It's time to settle down, my fiance&eacute; are eager to + get our own independence, move to our new house (which we're still doing up) etc. etc. Fair enough. I spent the last five months wasting my time looking for a job, a <em>proper</em> job having something to do with <acronym title="Information Technology"><span class="caps">IT</span></acronym> and finally something seems to be possible.</p> <p><em>Either nothing or everything</em> &#8211; I may even say that: now I have to face a difficult choice between two job proposals that seem both fairly interesting. <br /> - <em>&#8220;Go wherever you can get more bucks, you nutter!&#8221;</em> &#8211; Well, there&#8217;s more to it.<br /> - Let&#8217;s examine now the two similar but yet different realities I have to choose from. Maybe you&#8217;ll never + <em>&#8220;Go wherever you can get more bucks, you nutter!&#8221;</em> &#8211; Well, there's more to it.<br /> + Let's examine now the two similar but yet different realities I have to choose from. Maybe you'll never 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&#8217;s wing</strong></em><br /> - <img src="/images/pictures/genova.jpg" alt="" /> Not Microsoft. No, not directly at any rate. I&#8217;ve recently +<p><em><strong>Working under Uncle Bill's wing</strong></em><br /> + <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&#8230; Not quite, but let&#8217;s just say + electrical stuff to huge self-aware robots designed to conquer new worlds&#8230; Not quite, but let's just say that this image contributes to give an idea of a Corporate-type reality. </p> <p><em>Preliminaries</em><br />

@@ -36,13 +36,13 @@ class="caps">GCSE</span> English test with a bunch of &#8220;technical&#8221; questions (&#8220;What does <span

class="caps">HTTP</span> mean?&#8221;&#8230;).<br /> Thanks to our Merciful God I passed it (and thus avoided endless teasing by my British fiance&eacute;), and they wanted to have a proper interview with me today.<br /> - I went there and came back a few hours ago, and I think it wasn&#8217;t too bad, let&#8217;s say I may stand good + I went there and came back a few hours ago, and I think it wasn't too bad, let's say I may stand good chances but as normally happens in such companies in the end it was just something like <em>Thank you for coming, - we&#8217;ll call you by the end of April</em>. Although I mentioned that I recently had some other job offer - obviously they couldn&#8217;t give a damn: as any other big company, they need to interview all the possible - candidates to be sure they pick the right one, and that&#8217;s fair enough.</p> + we'll call you by the end of April</em>. Although I mentioned that I recently had some other job offer + obviously they couldn't give a damn: as any other big company, they need to interview all the possible + candidates to be sure they pick the right one, and that's fair enough.</p> <p><em>The job</em><br /> - In the remote eventuality they decide to take me on board, I&#8217;d be part of a Documentation Team in charge of + In the remote eventuality they decide to take me on board, I'd be part of a Documentation Team in charge of writing technical documents, manuals and silly jokes &#8211; perhaps &#8211; about some semi-classified huge internal semi-intelligent corporate framework. <br /> Now, although some people may already start to feel bored even at thinking about a job like that, I think this role

@@ -51,50 +51,50 @@ other boring (for other people) stuff! And they want me to write in English, not in Italian, which is &#8211; it may

sound weird &#8211; a true relief for me. <br /> At the interview I had a chance to talk about my <a href="/articles/">articles</a> and they seemed interested in this activity of mine&#8230; I even mentioned my <a href="/articles/cakephp/">CakePHP article</a> and they say - they&#8217;re gonna check it out. Oh well, this site&#8217;s stats are always one Firefox tab away from my current - main browsing tab, so you can bet I&#8217;ll be tracking that.</p> + they're gonna check it out. Oh well, this site's stats are always one Firefox tab away from my current + main browsing tab, so you can bet I'll be tracking that.</p> <p><em>The contract and the salary</em><br /> - <em>Classified</em>. They didn&#8217;t say anything, as usual, but presumably it should be a permanent (or + <em>Classified</em>. They didn't say anything, as usual, but presumably it should be a permanent (or semi-permanent) contract with all the contributions, health insurance, taxes etc. paid. And free cookies. Yum!<br /> - Salary&#8230; well, it shouldn&#8217;t be too bad, anyway. + Salary&#8230; well, it shouldn't be too bad, anyway. </p> <p><em>PROs</em></p> <ul> - <li>I&#8217;ll be doing something I really enjoy: writing in English</li> + <li>I'll be doing something I really enjoy: writing in English</li> <li>Steady job, steady contract, more security</li> <li>Corporare Environment</li> - <li>I can show off with my friends who are still studying pointless stuff and tell them I&#8217;m working for + <li>I can show off with my friends who are still studying pointless stuff and tell them I'm working for <company name removed> </li> </ul> <p><em>CONs</em></p> <ul> - <li>There&#8217;s a risk I&#8217;ll lose my individuality</li> + <li>There's a risk I'll lose my individuality</li> <li>The salary could be lower than expected &#8211; at least initially</li> - <li>They&#8217;ll get back to me at the end of this month, and I have to give an answer to someone else before that + <li>They'll get back to me at the end of this month, and I have to give an answer to someone else before that </li> - <li>My friends and fiance&eacute; will probably hassle me to give them free goodies they think I&#8217;ll get from + <li>My friends and fiance&eacute; 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 &#8216;cool place&#8217;, and fly high</strong></em> <br /> +<p><em><strong>Working in a &#8216;cool place', and fly high</strong></em> <br /> <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 - involved are Italy&#8217;s national channels, good ol&#8217; pal Berlusconi&#8217;s channels, Sky Italy and (drums) + involved are Italy's national channels, good ol' pal Berlusconi's channels, Sky Italy and (drums) <span class="caps">MTV</span>.<br /> Cool, innit? What do they do? Well, interaction between mobile phones and TV through software and networks. Polls, <span class="caps">SMS</span> chat services, <span class="caps">WAP</span> application downloads, &#8220;take matey - out of Big Brother&#8217;s house&#8221;, <span class="caps">SMS</span>/<span class="caps">MMS</span> blind dates + out of Big Brother's house&#8221;, <span class="caps">SMS</span>/<span class="caps">MMS</span> blind dates related to some well known TV programs, tele-voting at Sanremo Festival etc. etc. </p> <p><em>Preliminaries</em> <br /> - Their first interview was the most unusual I&#8217;ve ever had, and I <a href="/articles/9/">already wrote</a> + Their first interview was the most unusual I've ever had, and I <a href="/articles/9/">already wrote</a> about it: they even asked me to solve a riddle. Then they wanted to meet me again and showed me how they work in two different areas (see next section). They are really chilled out, friendly, they seem alright, even the main boss who - deals with the company&#8217;s financial side, which is always a plus. <br /> - By the way, they already offered me the job, and I&#8217;ll have to give an answer next Tuesday &#8211; that&#8217;s + deals with the company's financial side, which is always a plus. <br /> + By the way, they already offered me the job, and I'll have to give an answer next Tuesday &#8211; that's the bad part.</p> <p><em>The Job</em><br /> The Lead Developer of the company apparently seemed satisfied enough with my knowledge and Java skills. A first

@@ -107,28 +107,28 @@ The other possibility which they suggested after noticing my ability to write and research would be 2nd Level Help

Desk. Get dozens of technical emails every day, file reports, notify developers when something goes wrong, propose solutions, implement solutions, monitor the systems and even execute queries on the production server on the fly, in real time (eeek!). <br /> - This could sound boring/annoying/scary but since I&#8217;m a freak I think it&#8217;s an interesting prospective. + This could sound boring/annoying/scary but since I'm a freak I think it's an interesting prospective. Perhaps not as qualifying as being a Java Developer, perhaps not.</p> <p><em>The contract and the salary</em><br /> 1200-1250 (or more) &euro;/month, after tax. Which in my country is considered a more-than-reasonable pay, especially for a first job. Differnt form of contract, from consultant-with-<span class="caps">VAT</span> to - renewable yearly projects, which is probably what I&#8217;d go for. Contributions/taxes paid, kind of, holidays and + renewable yearly projects, which is probably what I'd go for. Contributions/taxes paid, kind of, holidays and other vacancies included, kind of.</p> <p><em>PROs</em></p> <ul> <li>Perhaps better salary</li> <li>I know exactly what they offer, they told me their offer in detail</li> <li>Chilled out environment</li> - <li>Perhaps I can sneak and read my desperate friends&#8217; <span class="caps">SMS</span> when they try to pull + <li>Perhaps I can sneak and read my desperate friends' <span class="caps">SMS</span> when they try to pull birds</li> </ul> <p><em>CONs</em></p> <ul> <li>Less steady contract, less security</li> - <li>I&#8217;ll hardly ever use my English skills, perhaps</li> + <li>I'll hardly ever use my English skills, perhaps</li> <li>They <span class="caps">NEED</span> a yes or no by next tuesday</li> - <li>My friends will probably hassle me to spy on other people&#8217;s <span class="caps">SMS</span> traffic and/or + <li>My friends will probably hassle me to spy on other people's <span class="caps">SMS</span> traffic and/or make them win TV contests</li> </ul> -<p>Here&#8217;s where I stand. I can&#8217;t complain, alright, but I must choose and act carefully. I&#8217;ll sleep on +<p>Here's where I stand. I can't complain, alright, but I must choose and act carefully. I'll sleep on it.</p>
M contents/articles/13.htmlcontents/articles/13.html

@@ -4,24 +4,24 @@ content-type: article

timestamp: 1144938060 tags: "cakephp|writing" ----- -<p>Too right. Enough being a lazy writer, it&#8217;s time to seriously produce something. I could sit here and pretend - that long blog posts can make up for the lack of new articles, but I&#8217;d like to write something <em>proper</em> +<p>Too right. Enough being a lazy writer, it's time to seriously produce something. I could sit here and pretend + that long blog posts can make up for the lack of new articles, but I'd like to write something <em>proper</em> and new. Judging by the latest stats people come here hoping to find either a blog <em>entirely</em> devoted to CakePHP or some CakePHP related content. Well, actually they can find quite a bit, but - I&#8217;d like to be able to sport more Cake-related articles, bookmarks, and posts. My main problem is that I could + I'd like to be able to sport more Cake-related articles, bookmarks, and posts. My main problem is that I could 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="/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&#8217;d like to write something technical about CakePHP&#8217;s advanced features, because that&#8217;s where the + 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&#8230; they are topics which seem to interest those bakers who already baked their first cake and are now looking for some more icing.</p> -<p>Interested? Good! Sadly, that&#8217;s not what I&#8217;m going to write now, at least not the first article - I&#8217;ll be releasing. Please stop calling me names, there&#8217;s no need to say that I&#8217;m just a lazy - coward who doesn&#8217;t want to get his hands dirty and write some tough stuff. And stop pulling those sad faces! +<p>Interested? Good! Sadly, that's not what I'm going to write now, at least not the first article + I'll be releasing. Please stop calling me names, there's no need to say that I'm just a lazy + coward who doesn't want to get his hands dirty and write some tough stuff. And stop pulling those sad faces! Think about&#8230; new bakers. There are new people learning about Cake and I know there are, I just discovered <a href="http://www.480x.com/2006/04/12/eureka/">one</a> yesterday almost by chance: he seems to be really enthusiastic about Cake, judging by his <a href="http://www.480x.com/2006/04/13/eureka-part-deux/">latest post</a>

@@ -32,11 +32,11 @@ save us all and bestow powerful blessings of Good <span class="caps">PHP</span> Design and Well-structured

Programming upon our messy spaghetti code!</p> <p>I almost considered writing a humorous article about Cake, but luckily I changed my mind. My old <a href="/articles/cakephp/">CakePHP article</a> is already a few months old and was written when Cake was in - pre-beta. I feel it&#8217;s time for a more up-to-date howto and introduction to our framework, something maybe not + pre-beta. I feel it's time for a more up-to-date howto and introduction to our framework, something maybe not as lenghty but easily readable by almost anyone interested in starting to learn about Cake.</p> -<p>Baking lessons. Yes, that&#8217;s it. I&#8217;m currently writing an article divided in ten lessons which could +<p>Baking lessons. Yes, that's it. I'm currently writing an article divided in ten lessons which could potentially turn casual cowboy coders into (apprentice) bakers. That could be easy for those already enlightened by <acronym title="Object Oriented Programming"><span class="caps">OOP</span></acronym> and <acronym title="Model-View-Controller"><span class="caps">MVC</span></acronym>, and perhaps more difficult for others: at - any rate, I&#8217;ll try my best. + any rate, I'll try my best. </p>
M contents/articles/14.htmlcontents/articles/14.html

@@ -4,36 +4,36 @@ content-type: article

timestamp: 1145001300 tags: "cakephp|webdevelopment|php" ----- -<p>When I first talked to gwoo, CakePHP&#8217;s project manager, I asked him if Cake had any potential +<p>When I first talked to gwoo, CakePHP's project manager, I asked him if Cake had any potential <em>limitations</em>. I asked him &#8211; I was kidding actually &#8211; wether it would be possible to build an application like Gmail using the framework and he &#8211; very seriously &#8211; simply said <em>&#8220;yes, why not?&#8221;</em>. <br /> I repeat myself when I say that CakePHP leaves plenty of freedom to developers within the bounds of its <span class="caps">MVC</span> structure: once you grasp the basic logic behind it, your possibilities are endless. I - don&#8217;t want to act as a Ruby on Rails fanatic and boast that <em>you can do anything with CakePHP</em> and + 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&#8217;t want to force + 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> <p>What I keep finding online is other open source projects adopting CakePHP as <em>backend</em> and <em>structure</em>. - I&#8217;m sure there are many examples which could be mentioned here, but I chose two in particular: one has been + 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="/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>&#8220;[it] is an open-source Flash Remoting gateway. It&#8217;s fast, reliable, 100% free and open-source. Flash + <p>&#8220;[it] is an open-source Flash Remoting gateway. It's fast, reliable, 100% free and open-source. Flash Remoting is a technology built into the Flash player core that enables sending data between the server and the client seemlessly.&#8221;</p> </blockquote> -<p>In other words, it makes lifes much easier for developers who&#8217;d like to integrate their flash animations and +<p>In other words, it makes lifes much easier for developers who'd like to integrate their flash animations and script more tightly into their <span class="caps">PHP</span> application. If you are curious to see some results, head off to <span class="caps">AMFPHP</span> <a href="http://amfphp.org/showcase.html">showcase</a>.<br /> Cool, but what has this project to do with CakePHP? Well, gwoo recently created <a href="http://cakeforge.org/projects/cakeamfphp/">CakeAMFPHP</a>, a CakeForge project which just yesterday - reached its <a href="http://rd11.com/posts/view/21">0.4.0 release</a>, and it&#8217;s fully compatible with <span + reached its <a href="http://rd11.com/posts/view/21">0.4.0 release</a>, and it's fully compatible with <span class="caps">AMFPHP</span> 1.2.3 and CakePHP 0.10 final.<br /> - Here&#8217;s an excerpt taken from CakeAMFPHP <span class="caps">README</span>.txt file:</p> + Here's an excerpt taken from CakeAMFPHP <span class="caps">README</span>.txt file:</p> <blockquote> <p>&#8220;[&#8230;] <br /> 1) get CakePHP 0.10 final (http://cakephp.org)<br />

@@ -44,11 +44,11 @@ 5) put cakeamfphp into vendors<br />

6) put the cake_gateway.php in /app/webroot<br /> 7) put the cakeamfphp.php in /app/views/helpers<br /> 8) put CakeMySqlAdpater.php in /app/vendors/amfphp-core/adapters<br /> - 9) Voila: NetServices.setDefaultGatewayUrl( &#8216;http://localhost/cake_install/cake_gateway.php&#8217;);<br /> + 9) Voila: NetServices.setDefaultGatewayUrl( &#8216;http://localhost/cake_install/cake_gateway.php');<br /> Access the service browser through<br /> http://localhost/cake_install/vendors/cakeamfphp/cakebrowser/&#8221;</p> </blockquote> -<p>The installation doesn&#8217;t seem too painful at all. And &#8211; guess what &#8211; gwoo recently updated a very +<p>The installation doesn't seem too painful at all. And &#8211; guess what &#8211; gwoo recently updated a very informative tutorial showing how to create a simple &#8211; but still impressive &#8211; bullettin board with CakeAMFPHP.</p> <p><em>&#8220;Cool, but I never liked flash, what about <span class="caps">AJAX</span>?&#8221;</em></p>

@@ -70,5 +70,5 @@ class="caps">MVC</span> frameworks, and Cake was obviously listed together with two other Rails clones for <span

class="caps">PHP</span>. The good news is that <a href="http://cakeforge.org/users/a100rk/">100rk</a> just started a new project called <a href="http://cakeforge.org/projects/cqx"><span class="caps">CQX</span></a>, which &#8211; although still in pre-alpha a development demo is already available, and it <em>shows off</em> most of - qooxdoo&#8217;s features&#8230; <a href="http://cqx.100rk.org/trunk/">Take a look</a></p> + qooxdoo's features&#8230; <a href="http://cqx.100rk.org/trunk/">Take a look</a></p> <p>Best of luck to 100rk and his brand new project, I really hope to see more of it soon!</p>
M contents/articles/15.htmlcontents/articles/15.html

@@ -5,27 +5,27 @@ timestamp: 1145106900

tags: "cakephp|webdevelopment" ----- <p><em>&#8220;CakePHP will officially support Internationalization (i18n) from version 2.0&#8221;</em>. That is to say: - not right now. That doesn&#8217;t mean we have to wait, no chance! I&#8217;m Italian and there are plenty of bakers + not right now. That doesn't mean we have to wait, no chance! I'm Italian and there are plenty of bakers speaking a language other than English who might want to develop a multi-lingual website.</p> -<p>I did, <a href="http://v60.h3rald.com/">once</a>, and the final result wasn&#8217;t too bad in the end: every page of +<p>I did, <a href="http://v60.h3rald.com/">once</a>, and the final result wasn't too bad in the end: every page of the site (except the articles) could be translated into Italian. Before examining my solution (which is far from - optimal) I&#8217;d like to mention an excellent CakePHP package which allows basic (mostly statuc) i18n.<br /> + optimal) I'd like to mention an excellent CakePHP package which allows basic (mostly statuc) i18n.<br /> It looks like I missed an important baker in my recent <a href="/articles/11">blog post</a>: <a href="http://www.noswad.me.uk/">Andy Dawson</a>, creator &#8211; among other things &#8211; of the <a href="http://cakeforge.org/snippet/detail.php?type=package&amp;id=2">Locale Package</a>, available at CakeForge. - His solution actually came out after H3RALD.com v60 was already developed so I didn&#8217;t use it for my own + His solution actually came out after H3RALD.com v60 was already developed so I didn't use it for my own site.<br /> - At a first glance Andy&#8217;s solution truly solves basic l18n problems in an elegant way: the most important code + At a first glance Andy's solution truly solves basic l18n problems in an elegant way: the most important code snippet is the <a href="http://cakeforge.org/snippet/download.php?type=snippet&amp;id=74">Locale Component</a> which provides the following functionalities:</p> <ul> - <li>automatic language detection based on browser&#8217;s UserAgent string</li> + <li>automatic language detection based on browser's UserAgent string</li> <li>loading of locale files</li> <li>setting of customizeable (translated) messages</li> </ul> <p>The getString() method provided in the locale component is actually used through the double underscore function, which is already defined (but not yet implemented) in the standard CakePHP file <code>cake/basics.php</code> (yes, - this is a small core hack). Andy&#8217;s double underscore function can take five parameters:</p> + this is a small core hack). Andy's double underscore function can take five parameters:</p> <pre><code>function __($msgId, $MessageArgs=NULL, $capitalize=1, $punctuate=0,$Code=NULL) { require_once(COMPONENTS.'locale.php');

@@ -36,14 +36,14 @@ <p>These parameters are:</p>

<ul> <li>a &#8220;message id&#8221; or the message itself</li> <li>some parameters which can be passed to the message</li> - <li>the message&#8217;s capitalization: + <li>the message's capitalization: <ul> <li>0 = no change</li> <li>1 = first letter of first word</li> <li>2 = fist character of all words</li> </ul> </li> - <li>the message&#8217;s punctuation: + <li>the message's punctuation: <ul> <li>0 = &quot;&quot;</li> <li>1 = .</li>

@@ -51,7 +51,7 @@ <li>2 = !</li>

<li>3 = ?</li> </ul> </li> - <li>the language code, if you need to override your page&#8217;s language</li> + <li>the language code, if you need to override your page's language</li> </ul> <p>This is a convenient method which can be used everywhere, both in your controllers and in your views, to translate simple pre-stored messages. Where are those messages stored? In various locale files which must be placed in

@@ -69,10 +69,10 @@ useful rewrite of the <em>Time Helper_. Andy recently updated his <a

href="http://wiki.cakephp.org/tutorials:i18n">i18n tutorial</a> available on CakePHP Wiki, a very interesting read on how to quickly add i18n support to yout first Cake blog (yes, the one described in the <a href="http://wiki.cakephp.org/tutorials:blog_tutorial">Blog Tutorial</a>_-</em>1).</p> -<p>So far so good. The Locale Package provide some basic multi-lingual support in an efficient way, and I&#8217;d +<p>So far so good. The Locale Package provide some basic multi-lingual support in an efficient way, and I'd certainly use it if I decide to (re-)develop a multi-lingual site, but unfortunately this does not fully solve the problem.<br /> - If you want <strong>full</strong> i18n, for sure you&#8217;d like to have all the contents of your website + If you want <strong>full</strong> i18n, for sure you'd like to have all the contents of your website translated, which is &#8211; normally &#8211; dynamic and maybe stored in a database. That was the case of my old website: all the pages are dynamic, not static, so I had to think about something else. <br /> Since I only had plans to develop a <em>dual</em> language site, I opted for a very lazy (but yet effective)

@@ -86,7 +86,7 @@ <li>text_it</li>

<li>created</li> <li>modified</li> </ul> -<p>I basically defined a global $lang variable set to &#8220;en&#8221; by default and then I accessed the record&#8217;s +<p>I basically defined a global $lang variable set to &#8220;en&#8221; by default and then I accessed the record's fields (for example in views) like this:</p> <p><code>echo $data['Project']['text_'.$lang]</code></p> <p>Ugly, perhaps, but did the job. The good (or bad) thing about this technique was that I could modify the contents of
M contents/articles/16.htmlcontents/articles/16.html

@@ -13,39 +13,39 @@ href="http://adodb.sourceforge.net/">ADOdb</a> or <a href="http://pear.php.net/package/DB"><span

class="caps">PEAR</span>::DB</a>.</p> <p>CakePHP seems to use a <em>multiple level</em> database abstraction: in other words, popular abstraction layers like ADOdb or <span class="caps">PEAR</span>::DB have been wrapped in a &#8220;driver&#8221; which basically extends the - DboSource class (which is the most high level database abstraction). Some people don&#8217;t like the idea, because + DboSource class (which is the most high level database abstraction). Some people don't like the idea, because 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&#8217;m not an expert on this matter), this solution focus on achieving good database compatibility leaving the + (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="/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&#8217;t and is not going to + 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 to do so.</p> -<p>Let&#8217;s now have a look at what is <em>known to work</em> with Cake:</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&#8217;s a (PHP5 only!) <a + <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> -*PostgreSQL*&#8217;s support is continuously improving. Something may work, something may not: the good news is that the +*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&amp;rnum=1#8eecea26ba53e1fd">sharing their thoughts</a> with the rest of us. <p style="float:right;"><img src="/images/pictures/sqlite.gif" alt="" /></p> <p><strong>SQLite</strong> is supported natively, or so it seems&#8230; what about the newest SQLite3? Yes, probably: - there&#8217;s a quick <a href="http://www.thompsonlife.net/index.php?section=9">howto</a> on ThompsonLife.net to + 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> <p><strong>Access</strong> works through the ADOdb driver, as reported in CakePHP <a 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&#8217;t that easy, but bdb is doing +<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&amp;rnum=2#dca851c795247c0b">all 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&#8217;s <a href="http://phplens.com/adodb/supported.databases.html">list of +<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.
M contents/articles/17.htmlcontents/articles/17.html

@@ -4,13 +4,19 @@ content-type: article

timestamp: 1145342820 tags: "cakephp" ----- -<p>Gustavo Carreno just <a href="http://groups.google.com/group/cake-php/browse_thread/thread/4e13231cc383b9bb/6414184c1058fadb#6414184c1058fadb">announced</a> a new release of the <a href="http://cakeforge.org/frs/?group_id=53&amp;release_id=82">CakePHP Offline Manual</a>. Personally I was extremely happy to download this new release because it finally contains documentation and howtos related to CakePHP&#8217;s Model Associations, which is perhaps one of the most used <em>advanced</em> CakePHP features.<br /> -So I&#8217;ll have no excuses not to learn how to use them, great&#8230;</p> +<p>Gustavo Carreno just <a + href="http://groups.google.com/group/cake-php/browse_thread/thread/4e13231cc383b9bb/6414184c1058fadb#6414184c1058fadb">announced</a> + a new release of the <a href="http://cakeforge.org/frs/?group_id=53&amp;release_id=82">CakePHP Offline Manual</a>. + Personally I was extremely happy to download this new release because it finally contains documentation and howtos + related to CakePHP's Model Associations, which is perhaps one of the most used <em>advanced</em> CakePHP + features.<br /> + So I'll have no excuses not to learn how to use them, great&#8230;</p> <p>The manual is available in the following formats:</p> <ul> <li>Windows compressed <span class="caps">HTML</span> (.chm)</li> <li><span class="caps">PDF</span></li> <li><span class="caps">HTML</span> (multiple pages or single page)</li> </ul> -<p>Furthermore, the CakePHP <span class="caps">API</span> is also available for download in .chm format, thanks to Mladen Mihajlovic.</p> +<p>Furthermore, the CakePHP <span class="caps">API</span> is also available for download in .chm format, thanks to + Mladen Mihajlovic.</p> <p>Well done guys. Really useful for people like me who are on dialup sometimes :)</p>
M contents/articles/18.htmlcontents/articles/18.html

@@ -8,39 +8,39 @@ <p>Once upon a time I used <a href="http://en.wikipedia.org/wiki/BBCode">BBcode</a>. CyberArmy and all its affiliated

sites adopted it as <em>de-facto</em> 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&#8230; well, tough luck: today I&#8217;d like to talk about Textile instead, which now I consider + for some people&#8230; 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> -<p>If what I wrote up to here doesn&#8217;t make sense to you, I&#8217;m rambling about the apparent necessity and the +<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&#8217;s wrong with <span - class="caps">HTML</span>? Nothing, it&#8217;s just too &#8220;tiresome&#8221; to use: you have to remember to + class="caps">HTML</span> for adding style and formatting text. What's wrong with <span class="caps">HTML</span>? + Nothing, it's just too &#8220;tiresome&#8221; to use: you have to remember to close all tags, break lines, use the <code>&lt;strong&gt;</code> tag every time you want <strong>bold text</strong>, etc. etc.<br /> Some people even freak out when you tell them that they have to use <span class="caps">HTML</span> in their text: - &#8220;it&#8217;s just <em>waaaaaay too difficult</em> to learn and use&#8221; &#8230;things like that.</p> -<p>Whether you are scared to learn <span class="caps">HTML</span>, you don&#8217;t want to, or you know it but - you&#8217;re too lazy to seriously thinking about manually use a markup language to write your article, I can say - that you&#8217;ll definitely become addicted to Textile. What? <em>&#8220;<acronym + &#8220;it's just <em>waaaaaay too difficult</em> to learn and use&#8221; &#8230;things like that.</p> +<p>Whether you are scared to learn <span class="caps">HTML</span>, you don't want to, or you know it but + you're too lazy to seriously thinking about manually use a markup language to write your article, I can say + that you'll definitely become addicted to Textile. What? <em>&#8220;<acronym title="What You See is What You Get"><span class="caps">WYSIWYG</span></acronym> <span - class="caps">HTML</span> editors?&#8221;</em> &#8211; C&#8217;mon, let&#8217;s at least <em>try</em> to be + class="caps">HTML</span> editors?&#8221;</em> &#8211; C'mon, let's at least <em>try</em> to be serious :)<br /> - Why BBcode doesn&#8217;t help enough? Well, simply because I don&#8217;t see why <code>[i]this[/i]</code> is easier + Why BBcode doesn't help enough? Well, simply because I don't see why <code>[i]this[/i]</code> is easier than <code>&lt;i&gt;this&lt;/i&gt;</code>: unless you have a particular phobia for angular brackets, it seems quite 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&#8217;t imagine myself using more than - two extra characters. It&#8217;s natural. It&#8217;s human.</p> + 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="/images/pictures/pear2.gif" alt="" /></p> -Precisely. Textile is a <em>&#8220;Humane web text generator&#8482;&#8221;</em>, it&#8217;s simple, elegant and produces +Precisely. Textile is a <em>&#8220;Humane web text generator&#8482;&#8221;</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 the same time. Maybe not worshipped, but for sure respected. -<p>I won&#8217;t copy and paste the extremely useful <a - href="http://cakeforge.org/projects/textilehelper/">TextileHelper</a> for CakePHP either, simply because - it&#8217;s 4085 lines long and it would be pointless: you can just get it and use it.</p> -<p>I&#8217;ll just include some examples of textile formatting&#8230;</p> +<p>I won't copy and paste the extremely useful <a href="http://cakeforge.org/projects/textilehelper/">TextileHelper</a> + for CakePHP either, simply because + it's 4085 lines long and it would be pointless: you can just get it and use it.</p> +<p>I'll just include some examples of textile formatting&#8230;</p> <table> <tr> <td> <strong>Textile Code</strong> </td>

@@ -83,9 +83,9 @@ <p>Regardless, Textile is not perfect and may have some quirks, at least the CakePHP helper: the_undefined pointed out

in a <a href="http://www.thinkingphp.org/2006/03/22/textile-a-personal-love-of-mine/">blog post</a> that external links are opened in the same window, so he provided a patch to the textile helper to handle this situation.<br /> I also noticed that sometimes empty <code>style=""</code> and <code>class=""</code> attributed are generated, which - don&#8217;t do any particular harm, but they are not needed either&#8230; so here&#8217;s a quick fix to improve + don't do any particular harm, but they are not needed either&#8230; so here's a quick fix to improve your Textile experience in CakePHP: You can use this function ideally in your customized textile helper, - <code>$data</code> should be the return value of TextileHelper&#8217;s <code>process()</code> method. + <code>$data</code> should be the return value of TextileHelper's <code>process()</code> method. </p> <pre><code> function _fixTextile($data)
M contents/articles/20.htmlcontents/articles/20.html

@@ -8,15 +8,15 @@ <p>Yesterday my grandpa passed away, due to an aggravation of his health condition, breathing problems and various other

complications. He died in hospital, on Liberation Day, the Italian national holiday celebrating the liberation of our country from the nazi-fascist regime by the Allied troops and partisans on April 25th 1945. He died exactly 61 years after that day.</p> -<p>I&#8217;d like to remember my grandpa today, because he most certainly deserves it, as he was a really extraordinary +<p>I'd like to remember my grandpa today, because he most certainly deserves it, as he was a really extraordinary person.</p> -<p><em>&#8220;Yes, I&#8217;m sure he was, isn&#8217;t everybody extraordinary in some way?&#8221;</em></p> +<p><em>&#8220;Yes, I'm sure he was, isn't everybody extraordinary in some way?&#8221;</em></p> <p>Definitely: everybody is special, and people tend to say that especially when someone passes away. In my - grandpa&#8217;s case, actually I can say that in a slightly more absolute sense: his life was truly uncommon and + 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="/images/pictures/grandpa.jpg" alt="" /></p> -<p>Vittorio Cevasco, my grandfather, was certainly the most active member of my family. We&#8217;re talking about a man +<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 Italian-Austrian-Swiss border for over fifty years. He never had particular troubles to walk, and just in the past

@@ -32,7 +32,7 @@ exercise. His other exercise was cultivating our land in Sessarego, near Bogliasco (Genoa, Italy), as a hobby more

than anything, providing us with fresh <em>biological</em> products like that extraordinary basil essential to make our very tasty local <a href="http://www.pesto.net/eng/index.php">pesto sauce</a>.<br /> He always tried to convince me to do some work there, and he actually taught me various tips and secrets which will - hopefully be useful in near future. Sadly, when he was alive I wasn&#8217;t too keen on the idea of cultivating and + hopefully be useful in near future. Sadly, when he was alive I wasn't too keen on the idea of cultivating and maintain our land from time to time&#8230; but I kind of changed my mind recently, and I know he realized that just a few days before he died.</p> <p>After <span class="caps">WWII</span> he did various things, he even was erhm&#8230; somehow active in <em>certain

@@ -50,21 +50,21 @@ <p><strong>The Aviator</strong></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&#39;s">Giuseppe Garibaldi</a> - expedition at Marsala (1860) fighting for the Italian independence (he&#8217;s listed among <a + expedition at Marsala (1860) fighting for the Italian independence (he's listed among <a href="http://www.italian-american.com/garibal.htm">the ones</a> who actually landed there).<br /> There his parents used to have a few cows and produce milk, and one of his tasks was milking delivery&#8230; no scooters or cars, at the time, of course, and certainly not for a teenager like him: he often had to carry the milk - barrels up and down the hill <em>on foot</em>, and I&#8217;m talking about 1-2 Km with at least 30-40 kilos on your + barrels up and down the hill <em>on foot</em>, and I'm talking about 1-2 Km with at least 30-40 kilos on your shoulders!</p> -<p>But my grandpa&#8217;s plans were much different: he wanted to fly away, and high &#8211; literally. You can imagine +<p>But my grandpa's plans were much different: he wanted to fly away, and high &#8211; literally. You can imagine the face of my grand-grandfather when he expressed his wish to become a pilot! Nobody ever did that, in the area, and becoming a pilot was, at the time, like becoming an astronaut in the seventies.<br /> The price of the license was really high at the time, 1,200 Lire. That would be like at least 30,000 Euro now, - especially considering that his parents weren&#8217;t exactly rich. In the very end, my father supported him and + especially considering that his parents weren't exactly rich. In the very end, my father supported him and provided as much money as he could afford: 1000 Lire.<br /> But he still needed 200 Lire, so after hassling the flying instructors he signed an agreement stating that if they - anticipated him the money he&#8217;d have paid them back once he started working: it was clear in fact that - he&#8217;d have became a military pilot, as the Regime needed people for their brand new aircrafts, and the was felt + anticipated him the money he'd have paid them back once he started working: it was clear in fact that + 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,

@@ -73,32 +73,32 @@ </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>&#8220;Yes&#8230; well, he was talking a few hours ago, but I don&#8217;t know if he was raving or what&#8230; + <em>&#8220;Yes&#8230; well, he was talking a few hours ago, but I don't know if he was raving or what&#8230; he said he was a pilot, and that he used to fly at 350Km/h&#8230;&#8221;</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&#8217;d tell you all the stats, the mechanics, the technical + forgot that, even a few days before he passed away. He'd tell you all the stats, the mechanics, the technical details and all the tricks to perform acrobatic maneuvers if you asked him&#8230; Not that actually anybody ever - did, because <em>every</em> time something reminded him of that, even slightly, he&#8217;d start talking about the + did, because <em>every</em> time something reminded him of that, even slightly, he'd start talking about the old days when he was commanding his squad patrolling the Italian borders.</p> -<p>Last year, after my grandma died and he didn&#8217;t feel like driving 500Km to go to the mountains (for the first +<p>Last year, after my grandma died and he didn't feel like driving 500Km to go to the mountains (for the first time in his life), I had to drive his <em>Fiesta</em> myself in my first long driving journey. At first I - wasn&#8217;t too sure I&#8217;d have enjoyed the drive, partly because of the long distance and partly because I was + wasn't too sure I'd have enjoyed the drive, partly because of the long distance and partly because I was going to be alone with my grandpa for about six hours, and I was afraid of not be able to find enough topics of conversation&#8230;</p> <p>That fear went away almost instantly right a few minutes after we started the journey.<br /> When we got on the motorway, I started complaining that my dad was going slightly over the limit with his brand new - Peugeot 307: <em>&#8220;Look, he&#8217;s already going at 140km/h and we just started the journey!&#8221;</em></p> -<p><em>&#8220;Cent&ucirc;c&auml;ranta chilumetri l&#8217;&ucirc;a&#8230; &ucirc; m&euml; aeruplannu p&ucirc;eiv&auml; + Peugeot 307: <em>&#8220;Look, he's already going at 140km/h and we just started the journey!&#8221;</em></p> +<p><em>&#8220;Cent&ucirc;c&auml;ranta chilumetri l'&ucirc;a&#8230; &ucirc; m&euml; aeruplannu p&ucirc;eiv&auml; f&acirc; &iuml; trex&euml;ntusinc&ucirc;anta c&ucirc;mme ninte!&#8221;</em><br /> [140 kilometers per hour&#8230; my plane could easily do 350!]</p> -<p>He normally used to speak in <em>zeneise</em> (&#8220;Genovese&#8221;), Genoa&#8217;s dialect, mixed with some +<p>He normally used to speak in <em>zeneise</em> (&#8220;Genovese&#8221;), Genoa's dialect, mixed with some Italian <em>if he really had to</em>. That was it: if you started talking about speed, technology, engines, history or any other topic which was <em>slightly</em> related to his plane, the war, the regime etc. he always started off talking about his past and his plane, ignoring everything else. <br /> - My grandma used to get kinda annoyed about it&#8230; on every occasion, if he had a chance, he&#8217;d start talking + My grandma used to get kinda annoyed about it&#8230; on every occasion, if he had a chance, he'd start talking 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

@@ -106,9 +106,9 @@ when he went in jail for it, even when his plane was taken down&#8230;</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>&#8220;&euml; s&ouml;lite c&ouml;se che s&euml; d&ucirc;vi&euml;iva f&auml; in - t&#8217;&euml; l&#8217;avi&auml;si&ucirc;n&#8221;</em> [the usual things you had to do in the airforce].<br /> + t'&euml; l'avi&auml;si&ucirc;n&#8221;</em> [the usual things you had to do in the airforce].<br /> He was just starting practicing the Re 2002 at the time, but he quickly found out that it was <em>extremely</em> - maneuvrable, at least to the standards of the time: the equivalent of a top range today&#8217;s fighter.<br /> + maneuvrable, at least to the standards of the time: the equivalent of a top range today's fighter.<br /> He started off with some usual things, performing various twists in the air, loops, etc. etc. until he had to end his exhibition with a dive from an altitude of 10,000m down at maximum speed to a limit of 1500m&#8230; On that particular day a colonel from another base and some other high-ranking officer were down on the ground near the

@@ -116,37 +116,37 @@ aircraft to enjoy the show, and check that everything was performed correctly. My grandpa was aware of that, so he

decided to perform a great show especially for them that day: he went up to 10,000m, and then dove down accelerating, helped by gravity&#8230; he went down and down, faster and faster, people down on the ground were staring at him waiting for him to pull up the plane, but nothing, he still went down and down so that quickly the - small crowd of captains and colonels got scared and run away in every direction: <em>&#8220;He&#8217;ll crash, - he&#8217;ll crash!&#8221;</em> <br /> + small crowd of captains and colonels got scared and run away in every direction: <em>&#8220;He'll crash, + he'll crash!&#8221;</em> <br /> He did not crash, not that day&#8230; he went down up to slightly less than 100m and <em>then</em> pulled up the plane: ar real wonderful <em>extreme</em> performance. Now imagine this beast of a plane coming down at 300Km/h and accelerating, making a terrible noise typical of the engines of the time and then <em>pull up suddenly</em> right - above your head: one more second and he wouldn&#8217;t have been able to tell that story.<br /> - He was called by the commander of the base who told him: <em>&#8220;Cevasco, you&#8217;re hell of a skilled pilot, + above your head: one more second and he wouldn't have been able to tell that story.<br /> + He was called by the commander of the base who told him: <em>&#8220;Cevasco, you're hell of a skilled pilot, but now I have to put you in jail for a day for not obeying your orders of staying above 1500m&#8221;</em> - &#8211; That, I reckon, was one of the best days of my grandpa&#8217;s life.</p> + &#8211; That, I reckon, was one of the best days of my grandpa's life.</p> <p>He was never captured, but his plane was taken down by an English <em>Spitfire</em> in the South of Italy. The war was nearly finished, and there were just those little air fights from time to time. He really risked a lot that day, and managed to attempt an emergency &#8220;landing&#8221; completely destroying his plane along as part of his jaw, which was alright after a few months. <br /> Since then he never flew again, and managed to escape to be re-called in duty. But he did like flying back with his memories to those glorious days.</p> -<p>A few years ago my dad showed him Microsoft&#8217;s <em>&#8220;Flight Simulator 98&#8221;</em>, and some other flying +<p>A few years ago my dad showed him Microsoft's <em>&#8220;Flight Simulator 98&#8221;</em>, and some other flying games. He was amazed at the graphic, but not so satisfied with the whole <em>simulation</em> thing: not even close to reality, too damn easy.</p> <p><em>&#8220;C&auml;u m&euml;, te v&ucirc;eive vedde t&iuml;e a f&auml; v&ucirc;l&aacute; &ucirc; m&euml; aeruplannu&#8221;</em><br /> - [My dear, I&#8217;d have liked to see you trying to fly <em>my</em> plane]</p> + [My dear, I'd have liked to see you trying to fly <em>my</em> plane]</p> <p>&#8230;and that was it: the beginning of another journey back in time.</p> -<p>He always had a very practical view of life and especially of technology. He wouldn&#8217;t take you seriously and +<p>He always had a very practical view of life and especially of technology. He wouldn't take you seriously and would not be interested in knowing about programming and the Internet, unless it could produce some concrete result: </p> <p><em>&#8220;Ti che ti st&ucirc;ddi da insegn&euml; e che ti st&euml; sempre davanti a-&ucirc; cumputer, nun te - puri&euml;sci truv&auml; &ucirc;n sistemm&auml; de an&auml; in t&#8217;&euml; a banca e piggi&euml; qualche + puri&euml;sci truv&auml; &ucirc;n sistemm&auml; de an&auml; in t'&euml; a banca e piggi&euml; qualche mili&ucirc;n the Euro?&#8221;</em><br /> - [You that you&#8217;re studying to become an engineer and that spend so long in front of the computer, - couldn&#8217;t you find a way to get into a bank and get out some million of Euro?]</p> -<p>He&#8217;d have loved me to become a [rich] hacker, probably&#8230; But the last time I saw him, last Friday, he + [You that you're studying to become an engineer and that spend so long in front of the computer, + couldn't you find a way to get into a bank and get out some million of Euro?]</p> +<p>He'd have loved me to become a [rich] hacker, probably&#8230; But the last time I saw him, last Friday, he seemed happy enough to hear that I was just about to start working.</p> <p>He realized that I finally found a good job after my studies, and then my dad told him Roxanne and I would have moved to the countryside, in Sessarego&#8230; He made a big effort to move the muscles of his mouth in a large smile: he
M contents/articles/21.htmlcontents/articles/21.html

@@ -6,16 +6,16 @@ tags: "website|review"

----- <p>Today is my birthday! <a href="/articles/20/">Not too happy</a>, but still my birthday after all. What presents did I get from my relatives and friends? Well, various things, but I told my parents and uncles I actually needed some - web space&#8230; <em>&#8220;What? Didn&#8217;t you have the hosting sorted out?&#8221;</em><br /> + web space&#8230; <em>&#8220;What? Didn't you have the hosting sorted out?&#8221;</em><br /> Well, I had, up to a few days ago when my friends and hosting provider, DeWayne Lehman, decided to close down his <a - href="http://www.block-house.com">company</a>. The reason being, to cut a long story short, that he can&#8217;t - keep up with competition: he doesn&#8217;t have enough customers, and he can&#8217;t afford server upgrades, while + href="http://www.block-house.com">company</a>. The reason being, to cut a long story short, that he can't + keep up with competition: he doesn't have enough customers, and he can't afford server upgrades, while other companies are literally giving space away.<br /> That was a pity, not only because Block House used to host various non-profit orgs and initiatives, but also because the guy who run it was an excellent admin, always offering excellent support.</p> -<p>Anyhow, in the end I&#8217;ll have to transfer all five of my sites to a new host, so here we go again: - <em>what&#8217;s the best hosting company?</em><br /> - Obviously it depends a lot on what you&#8217;re looking for, and here&#8217;s what I need: +<p>Anyhow, in the end I'll have to transfer all five of my sites to a new host, so here we go again: + <em>what's the best hosting company?</em><br /> + Obviously it depends a lot on what you're looking for, and here's what I need: </p> <ul> <li>At least 4GB of space</li>

@@ -28,8 +28,8 @@ <li>Subdomains allowed (10 in total?)</li>

<li><span class="caps">FTP</span> <em>and <span class="caps">SSH</span></em> access</li> <li>Subversion, if possible</li> </ul> -<p>All this for less than 10$/month, ideally 5$, on shared hosting. I already made my choice and if you&#8217;re reading - this post it means everything worked fine, but anyway, let&#8217;s have a look at what the market can offer for my +<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="/images/pictures/dreamhost.gif" alt="" /></p>

@@ -47,17 +47,17 @@ <li>Subversion and <span class="caps">CVS</span></li>

<li>&#8230;and more</li> </ul> <p>For 7.95 if you pay two years in advance. And the first time you can get up to 97$ off by using one of the thousands - referrer&#8217;s coupons available on the net. OK, where&#8217;s the catch? Well, there&#8217;s a <a + referrer's coupons available on the net. OK, where's the catch? Well, there's a <a href="http://futurosity.com/231/why-dreamhost-sucks">bad review</a> about them which points out that their reliability is not too great, for example, and that the seem to be rather dodgy in general. &#8220;They are - overselling, they&#8217;ll soon enforce <span class="caps">CPU</span> restrictions&#8221; etc. etc. <br /> - <em>&#8230;let&#8217;s move along</em> + overselling, they'll soon enforce <span class="caps">CPU</span> restrictions&#8221; etc. etc. <br /> + <em>&#8230;let's move along</em> </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 - hosting plans. They are not bad, and I&#8217;d have probably gone with them if I had only one site to manage: for + hosting plans. They are not bad, and I'd have probably gone with them if I had only one site to manage: for 60$ a year you get:</p> <ul> <li>3GB of space</li>

@@ -70,18 +70,18 @@ <li><span class="caps">FTP</span> and <span class="caps">SSH</span> access</li>

<li>Subversion and <span class="caps">CVS</span></li> <li>&#8230;and more</li> </ul> -<p>Well, the only reason why I didn&#8217;t go with them was that I did slightly more space, only that. The plan for 5GB +<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="/images/pictures/textdrive.gif" alt="" /></p> -<p>Since we&#8217;re talking about Rails, why not <a href="http://www.textdrive.com">Textdrive</a>? Founded by 200 IT - professional, hosts high quality sites, it&#8217;s the official Rails host&#8230; An &#8220;elite&#8221; solution, - here&#8217;s what you get:</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&#8230; An &#8220;elite&#8221; solution, + here's what you get:</p> <ul> <li>Use Apache and Lighttpd web servers side-by-side</li> <li>Host PHP4 and PHP5 web pages and applications</li> <li>Host a weblog using Textpattern, Wordpress, MovableType, Typo, etc</li> <li>Host Ruby and Ruby on Rails applications (including <span class="caps">FCGI</span> and hundreds of gems)</li> - <li>Host Perl applications (including 100&#8217;s of Perl modules)</li> + <li>Host Perl applications (including 100's of Perl modules)</li> <li>Host Python applications like Django</li> <li>Manage your code base with version control (Subversion, <span class="caps">SVK</span>, Darcs, Monotone &amp; Arch)</li>

@@ -97,10 +97,10 @@ <li>Host Mailman mailing lists complete with archives</li>

<li>Use MySQL (default), PostgreSQL, SQLite and Berkeley databases</li> </ul> <p>Plans start at 12$/month for 1GB of space and one website&#8230; The 3GB one is 40$/month, for 20 sites in total. Too - bad it&#8217;s too expensive for me as they are truly the top for shared hosting &#8211; I think.</p> + bad it's too expensive for me as they are truly the top for shared hosting &#8211; I think.</p> <p><a href="http://www.hostgator.com/">Host Gator</a>, which seems to be one of the most frequently recommended at SitePoint.com forums, is not bad either. They have a &#8220;hatchling&#8221; plan for 3,5GB at 6.95, which - wasn&#8217;t bad, but it only allows one domain to be hosted. The &#8220;Baby&#8221; plan allows unlimited domains + wasn't bad, but it only allows one domain to be hosted. The &#8220;Baby&#8221; plan allows unlimited domains and is 9.95$/month, which is kinda dear. You get:</p> <ul> <li>5GB of space</li>

@@ -113,7 +113,7 @@ <li><span class="caps">FTP</span> access</li>

<li>&#8230;and more</li> </ul> <p>No <span class="caps">SSH</span>, no <span class="caps">SVN</span> and no Rails: out.</p> -<p><a href="http://www.site5.com/">Site5</a> is also one of SitePoint&#8217;s favourite, but still has limitations on +<p><a href="http://www.site5.com/">Site5</a> is also one of SitePoint's favourite, but still has limitations on the number of sites. I would have got the SuperHosting <span class="caps">XTREME</span>, for 7,77$/month:</p> <ul> <li>11GB of space</li>

@@ -130,12 +130,12 @@ <div style="float:right; padding:3px;">

<script src="http://www.bluehost.com/src/js/h3rald/CODE2/488x160/1.jpg"></script> </div> <p>This site is currently hosted on <a href="http://www.bluehost.com">BlueHost</a>, a hosting company established in - 1996, which seems to be reliable enough (not many complaints on the net) and seems serious enough. They don&#8217;t + 1996, which seems to be reliable enough (not many complaints on the net) and seems serious enough. They don't offer subversion and WebDAV for &#8220;security reasons&#8221; and in order to get a shell account you have to send - them a copy of an ID card. Annoying? Well, perhaps for some: this made me understand that they don&#8217;t allow - just anybody to get <span class="caps">SSH</span> access unconditionally, and I didn&#8217;t mind. I sent them a + them a copy of an ID card. Annoying? Well, perhaps for some: this made me understand that they don't allow + just anybody to get <span class="caps">SSH</span> access unconditionally, and I didn't mind. I sent them a scansion of my ID card and I got a friendly support email after a few minutes, confirming that it was activated. - Here&#8217;s what I got:</p> + Here's what I got:</p> <ul> <li>15GB of space</li> <li>400GB bandwidth</li>

@@ -147,4 +147,4 @@ <li><span class="caps">FTP</span> and <span class="caps">SSH</span> access</li>

<li>&#8230;and more</li> </ul> <p>For 6,65$/month, 2 years pre-payment. One of the good things is that they are not fussy about giving the money back - if you cancel. Anyhow&#8230; let&#8217;s hope for the best, so far, so good.</p> + if you cancel. Anyhow&#8230; let's hope for the best, so far, so good.</p>
M contents/articles/22.htmlcontents/articles/22.html

@@ -4,16 +4,16 @@ content-type: article

timestamp: 1146317340 tags: "cakephp|rails|webdevelopment" ----- -<p>Today I decided to do something different, something I&#8217;ve been dying to do since before coming across CakePHP: +<p>Today I decided to do something different, something I've been dying to do since before coming across CakePHP: give Rails a <em>proper</em> try. Like many other <span class="caps">PHP</span> developers out there, when <a 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="/images/pictures/rails.gif" alt="" /></p> -<p>One of the main problems which made me &#8211; sadly &#8211; abandon Rails was Ruby itself: personally I&#8217;ve +<p>One of the main problems which made me &#8211; sadly &#8211; abandon Rails was Ruby itself: personally I've never seen a programming language with a cleaner and more elegant syntax, but also &#8211; at least at the time - &#8211; there weren&#8217;t many hosts supporting it. LuckilyI found CakePHP quickly after that&#8230;<br /> + &#8211; there weren't many hosts supporting it. LuckilyI found CakePHP quickly after that&#8230;<br /> Now however, more and more hosting companies boast full Rails support, and so when recently I <a href="/articles/21/">had to move</a> to a new host, I made sure it was Rails-friendly, <em>just in case I wanted to give Rails another try, someday</em>.<br />

@@ -40,9 +40,9 @@ structure.txt<br />

test/<br /> tmp/<br /> vendor/</p> -<p>That&#8217;s familiar: it&#8217;s very similar to what CakePHP&#8217;s directory structure used to look like. Now +<p>That's familiar: it's very similar to what CakePHP's directory structure used to look like. Now Cake <em>evolved</em> and adopted its own schema, which &#8211; I must say &#8211; seems more functional than - RoR&#8217;s, at least at a first glance:</p> + RoR's, at least at a first glance:</p> <ul> <li>app/ <ul>

@@ -67,11 +67,11 @@ <li>vendors/</li>

</ul> <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&#8217;d better not touch (<code>cake/</code>). Rails just left everything on the same level.</p> + 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 - corresponds to Cake&#8217;s <code>app/config/database.php</code>. Then things start to become a bit different from + corresponds to Cake's <code>app/config/database.php</code>. Then things start to become a bit different from Cake, as Rails offers some very handy built in scripts which can be used to automatically create your - application&#8217;s files, i.e. executing <code>ruby script/generate controller Recipe</code> creates the controller + application's files, i.e. executing <code>ruby script/generate controller Recipe</code> creates the controller and other bits:</p> <pre><code>exists app/controllers/ exists app/helpers/

@@ -81,7 +81,7 @@ create app/controllers/recipe_controller.rb

create test/functional/recipe_controller_test.rb create app/helpers/recipe_helper.rb</code></pre> <p>And so on. Anyhow&#8230; I followed the tutorial and yes, it was a nice read. CakePHP borrowed a lot from Rails but - not everything. Inevitably Ruby&#8217;s syntax is less verbose and looks very very clean:</p> + not everything. Inevitably Ruby's syntax is less verbose and looks very very clean:</p> <p>&lt;% highlight :ruby do %&gt;<br /> class RecipeController &lt; ApplicationController<br /> scaffold :recipe</p>

@@ -95,41 +95,41 @@ end<br />

end<br /> &lt;% end %&gt; </p> -<p>While CakePHP&#8217;s, simply because it uses <span class="caps">PHP</span> and not Ruby, looks less pretty:</p> +<p>While CakePHP's, simply because it uses <span class="caps">PHP</span> and not Ruby, looks less pretty:</p> <p>&lt;% highlight :php do %&gt;<br /> class RecipesController extends AppController<br /> {<br /> var $scaffold;</p> <p>function list()<br /> {<br /> - $this&#8594;set(&#8216;recipes&#8217;, $this&#8594;Recipe&#8594;findAll());<br /> + $this&#8594;set(&#8216;recipes', $this&#8594;Recipe&#8594;findAll());<br /> }</p> <p>function edit($id)<br /> {<br /> - $this&#8594;set(&#8216;recipe&#8217;, $this&#8594;Recipe&#8594;find(&#8220;id = $id&#8221;));<br /> - $this&#8594;set(&#8216;categories&#8217;, $this&#8594;Category&#8594;findAll());<br /> + $this&#8594;set(&#8216;recipe', $this&#8594;Recipe&#8594;find(&#8220;id = $id&#8221;));<br /> + $this&#8594;set(&#8216;categories', $this&#8594;Category&#8594;findAll());<br /> }</p> <p>}<br /> &lt;% end %&gt;</p> <p>CakePHP Development Team did a great job translating some of Rails functionalities into <span - class="caps">PHP</span>, and the while CakePHP&#8217;s syntax is <strong>much</strong> cleaner if compared to - PHP&#8217;s standard spaghetti-code approach, Ruby just looks much more clear, sorry. <em>Imagine a world without - funny unnecessary brackets, pointless semicolons and where everything just looks better</em>: that&#8217;s Ruby. + class="caps">PHP</span>, and the while CakePHP's syntax is <strong>much</strong> cleaner if compared to + PHP's standard spaghetti-code approach, Ruby just looks much more clear, sorry. <em>Imagine a world without + funny unnecessary brackets, pointless semicolons and where everything just looks better</em>: that's Ruby. </p> <p>Sigh. Now I do understand why Rails was built in Ruby and not in <span class="caps">PHP</span>: simply because a - PHP&#8217;s Rails would have been outscored by its &#8220;Ruby port&#8221;!</p> + PHP's Rails would have been outscored by its &#8220;Ruby port&#8221;!</p> <p>One thing I liked about Rails which has not been ported in Cake (yet) is a somehow smarter way of scaffolding. While - the Ruby code above actually works, the CakePHP&#8217;s edit method doesn&#8217;t, or better, it does but not as + the Ruby code above actually works, the CakePHP's edit method doesn't, or better, it does but not as expected: when you remove <code>var $scaffold</code> the scaffold is just plain gone, and you have to code everything yourself, while in Ruby you can leave the scaffold and then develop methods one by one, and still be able - to use scaffolded methods if you didn&#8217;t define the custom ones.</p> + to use scaffolded methods if you didn't define the custom ones.</p> <p>The other thing I noticed about RoR is that it definitely handles errors better! This is probably another language issue. I basically forgot to set a category for the recipes, and when executing my custom list of recipes I got a very, very well structured error page showing something like:</p> <p>&lt;% highlight :ruby do %&gt;<br /> NoMethodError in Recipe#index</p> <p>Showing app/views/recipe/index.rhtml where line #18 raised:</p> -<p>You have a nil object when you didn&#8217;t expect it!<br /> +<p>You have a nil object when you didn't expect it!<br /> The error occured while evaluating nil.name</p> <p>Extracted source (around line #18):</p> <p>15: &lt;% @recipes.each do |recipe| <span>&gt;<br />

@@ -143,6 +143,6 @@ 21: &lt;</span> end <span>&gt;<br />

&lt;</span> end %&gt;</p> <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&#8217;s wrong, and even prints the lines of code around the error! It also + 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&#8230; 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>
M contents/articles/23.htmlcontents/articles/23.html

@@ -4,80 +4,80 @@ content-type: article

timestamp: 1146483766 tags: "" ----- -<p>CakePHP is <span class="caps">THE</span> perfect <span class="caps">PHP</span> framework, so <em>we</em> don&#8217;t +<p>CakePHP is <span class="caps">THE</span> perfect <span class="caps">PHP</span> framework, so <em>we</em> don't need anything else. Oh well, no. I personally love CakePHP, but I do believe other <span class="caps">PHP</span> - frameworks can be interesting and maybe even useful, so today I thought I&#8217;d have a look at the Simfony Project. + frameworks can be interesting and maybe even useful, so today I thought I'd have a look at the Simfony Project. This framework seems to be mentioned here and there on the Net - in many different ways, someone said it can do wonders, some said it&#8217;s more advanced, others said something like + in many different ways, someone said it can do wonders, some said it's more advanced, others said something like <em>&#8220;qcodo sucks.. cake stinks.. symfony rocks!!!!!&#8221;</em>, so it <span class="caps">OUGHT</span> TO be pretty cool, definitely. </p> <p style="float:left;"><img src="/images/pictures/symfony.gif" alt="" /> <em>Know thy enemy</em> someone said (OK, bad - joke), so let&#8217;s have a look at this interesting alternative to CakePHP. <em>No dude, not another <span + 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 features and for the strong <span class="caps">MVC</span> architecture, Symfony chose another road. Yes, <span class="caps">MVC</span> is still there, but the first thing I noticed after reading their <a - href="http://www.symfony-project.com/tutorial/my_first_project.html">beginners&#8217; tutorial</a> was that one of - the things which Symfony seems to use quite regularly (and Cake doesn&#8217;t)is code generators. Things like + href="http://www.symfony-project.com/tutorial/my_first_project.html">beginners' tutorial</a> was that one of + the things which Symfony seems to use quite regularly (and Cake doesn't)is code generators. Things like executing <code>symfony propel-build-sql</code> or even <code>symfony propel-generate-crud frontend post Post</code> from command line to generate your code automagically, which CakePHP &#8211; except for our little <em>bake</em> - script &#8211; doesn&#8217;t use. <br /> + script &#8211; doesn't use. <br /> <em>See? Simfony is <span class="caps">MUCH</span> better and <span class="caps">MUCH</span> more advanced than Cake!</em> No, hang on a minute&#8230; I just listed one thing which Symfony has more than Cake, is there any more? Yes, there is, for now: i18n &#8211; internationalization. Symfony comes with native multi-lingual support and Cake - doesn&#8217;t &#8211; yet &#8211; although there are rumors that i18n for Cake 2.0 is <em>almost done</em>. This is - not speculation, re-read the sentence: First off I&#8217;m referring to Cake <em>2.0</em> (which means it will take a + doesn't &#8211; yet &#8211; although there are rumors that i18n for Cake 2.0 is <em>almost done</em>. This is + not speculation, re-read the sentence: First off I'm referring to Cake <em>2.0</em> (which means it will take a while) and also I read it in the <a href="https://trac.cakephp.org/wiki/Proposals/2.0ToDoList">Cake 2.0 ToDo List</a>. </p> <p>One of the most recurring and yet pointless critiques to CakePHP from Symfony enthusiasts is that the sites developed with CakePHP look terrible. I perfectly agree, look at <a href="/">this</a> and tell me if the - developer is not a complete and hopeless idiot when it comes to design and look &#8216;n&#8217; feel!<br /> - I do agree that some CakePHP sites (mine, mainly) don&#8217;t look too good, and probably the Cake Software Foundation + developer is not a complete and hopeless idiot when it comes to design and look &#8216;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&#8217;s, but I do hope that the old &#8220;design contest&#8221; doesn&#8217;t get forgotten&#8230;</p> + CakePHP's, but I do hope that the old &#8220;design contest&#8221; doesn't get forgotten&#8230;</p> <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&#8217;m referring to Askeet, a Symfony-powered + 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 framework and its development is well documented in <a href="http://www.symfony-project.com/askeet">twenty-four tutorials</a>. In one move these guys made an interesting website, some useful documentation and self - promotion&#8230; what can I say: for next Christmas we&#8217;d better chain PHPnut, gwoo, nate &amp; the others to + promotion&#8230; what can I say: for next Christmas we'd better chain PHPnut, gwoo, nate &amp; the others to their chairs, close them in a small room and force them to code something like that in twenty-four days.<br /> - If I were to mention something which Symfony did well I&#8217;d certainly say the <a + If I were to mention something which Symfony did well I'd certainly say the <a href="http://www.symfony-project.com/content/documentation.html">documentation</a>. Screencasts, tutorials, advent calendars, a book, a wiki, <span class="caps">API</span> etc. etc. All done, and all good, I must admit that. The good news is that CakePHP is slowly catching up, and now the <a href="http://manual.cakephp.org">manual</a> looks pretty decent.</p> -<p>OK, enough flattering and let&#8217;s talk about something I didn&#8217;t like about Symfony. I downloaded the thing - and it turns out it&#8217;s 1.2MB in size, <em>a hell of a framework!</em> After extracting the beast I had a look +<p>OK, enough flattering and let's talk about something I didn't like about Symfony. I downloaded the thing + and it turns out it's 1.2MB in size, <em>a hell of a framework!</em> After extracting the beast I had a look inside and found three directories: <code>data</code>, <code>lib</code> and <code>bin</code>. Not bad. I opened <code>bin</code> and found the three magic symfony scripts, alright; I opened <code>data</code> and found nine directories, I opened <code>lib</code> (the real deal) and found 25 directories! These guys maybe never heard of - something called <em>&#8220;an organized directory structure&#8221;</em>, or perhaps I&#8217;m just too used to - Cake&#8217;s logic and essentiality.<br /> + something called <em>&#8220;an organized directory structure&#8221;</em>, or perhaps I'm just too used to + Cake's logic and essentiality.<br /> Browsing around I found something like 247 .dat files defining country names and currencies in all the languages of the world, script.aculo.us and prototype libraries, javascript calendars and other wonders&#8230; Weeeeheee! <br /> - The good thing is that Symfony seems to include pretty much everything you&#8217;d ever need, the bad thing is that + The good thing is that Symfony seems to include pretty much everything you'd ever need, the bad thing is that <em>personally</em> I will never use any of the thirteen Chinese-related .dat files in th i18n directory. This - philosophy is exactly the opposite to Cake: at first i got pissed off when I noticed that CakePHP doesn&#8217;t + philosophy is exactly the opposite to Cake: at first i got pissed off when I noticed that CakePHP doesn't include prototype by default, but then I realized that if they started include <em>everything</em> you <em>might</em> - need <em>someday</em> we&#8217;d end up like&#8230; like Symfony, with 1.2MB of stuff 500KB of which &#8211; at least + need <em>someday</em> we'd end up like&#8230; like Symfony, with 1.2MB of stuff 500KB of which &#8211; at least &#8211; will most likely not be of any use for the average developers. </p> <p>The other dangerous consequence of including more and more stuff is the so called <em>widget-temptation</em>: If you include script.aculo.us you <span class="caps">MUST</span> show off and offer some weird toy someone <em>may</em> use&#8230; well, Symfony seems to go in that direction, and someone compared it to component-driven frameworks like eZ - Publish rather than more general-purposes projects. I&#8217;m sure the <a + Publish rather than more general-purposes projects. I'm sure the <a href="http://www.symfony-project.com/content/book/page/generator.html">admin generator</a> can be damn handy, but - what happens if I&#8217;m a terribly annoying guy who&#8217;d like to tweak it and change it so that it fits - <em>my</em> needs? In Cake&#8230; well, there&#8217;s nothing &#8220;official&#8221; included in the core, and when + what happens if I'm a terribly annoying guy who'd like to tweak it and change it so that it fits + <em>my</em> needs? In Cake&#8230; well, there's nothing &#8220;official&#8221; included in the core, and when you find a third-party helper or component you feel you can take a look and poke around, extend it, or change it - totally. It&#8217;s all up to the developers and their needs: personally think that widgets are useful, but some times + totally. It's all up to the developers and their needs: personally think that widgets are useful, but some times people like a bit more flexibility. </p> <p>So the overall impression of Symfony is that &#8211; regardless its arguable, self-proclaimed, - <em>enterprise-ready</em> status &#8211; it is rather complex, with a steep(er) learning scheme which doesn&#8217;t + <em>enterprise-ready</em> status &#8211; it is rather complex, with a steep(er) learning scheme which doesn't justify the extra features. </p> <p>From the <a href="http://www.symfony-project.com/tutorial/my_first_project.html">My first Symfony project</a>

@@ -114,12 +114,12 @@ <p></code></pre><br />

</small><br /> This code is longer to read than to explain: It describes two tables Post and Comment. </p> - <p>NO! Sorry, no. This is <span class="caps">NOT</span> simple. It is logic, clear and makes perfect sense, it&#8217;s - not that I&#8217;m retarded and I can&#8217;t write or read <span class="caps">XML</span> files, it&#8217;s just + <p>NO! Sorry, no. This is <span class="caps">NOT</span> simple. It is logic, clear and makes perfect sense, it's + not that I'm retarded and I can't write or read <span class="caps">XML</span> files, it's just unnecessary. You create this and then call the slave-script to create the model and the corresponding database table&#8230; This is exactly the <em>enterprise</em> way of doing things CakePHP made me forget. <em>Convention over configuration</em>. Not hundreds of configuration files.</p> - <p>But there&#8217;s more: you can even configure your views with some simple <code>.yml</code> (!) file:<br /> + <p>But there's more: you can even configure your views with some simple <code>.yml</code> (!) file:<br /> <pre><code> default: http_metas:

@@ -132,13 +132,13 @@ keywords: symfony, project

language: en </code></pre> </p> - <p>Sure, it&#8217;s good. It helps, and it&#8217;s certainly useful, but I&#8217;d rather code a custom component to + <p>Sure, it's good. It helps, and it's certainly useful, but I'd rather code a custom component to do the same thing with a few arrays. Again, this is arguable.<br /> Validation is done through .yml files, and you can configure your administrator backend through a .yml file too! - Cake has .ini-based <span class="caps">ACL</span>, and that&#8217;s about it: if I don&#8217;t want to use them I - don&#8217;t use them. <br /> - Clearly you probably don&#8217;t have to edit all settings in the configuration files, but I just don&#8217;t like + Cake has .ini-based <span class="caps">ACL</span>, and that's about it: if I don't want to use them I + don't use them. <br /> + Clearly you probably don't have to edit all settings in the configuration files, but I just don't like the approach, personally.</p> - <p>Oddly enough, Symfony&#8217;s slogan seems to be &#8220;professional web tools for lazy folks&#8221;&#8230;</p> + <p>Oddly enough, Symfony's slogan seems to be &#8220;professional web tools for lazy folks&#8221;&#8230;</p> <p>It all depends on what you need. For <em>my</em> needs I chose CakePHP, and <a - href="https://trac.cakephp.org/wiki/Cake/About">here&#8217;s why</a>.</p> + href="https://trac.cakephp.org/wiki/Cake/About">here's why</a>.</p>
M contents/articles/24.htmlcontents/articles/24.html

@@ -6,18 +6,18 @@ tags: "cakephp|webdevelopment"

----- <p>As <a href="http://digg.com/programming/CakePHP_1.0_has_been_released">Digg</a>_ points out, the first <em>stable</em> version of CakePHP was released, yesterday. I should have posted yesterday about it, and no, I - didn&#8217;t forget: I was just busy downloading the new version, have a look at the new site, talk to people etc. + didn't forget: I was just busy downloading the new version, have a look at the new site, talk to people etc. </p> -<p>Anyhow, it&#8217;s ready, just baked and smells damn good. Go get it if you didn&#8217;t already, it&#8217;s - available at <a href="http://cakeforge.org/frs/?group_id=23">the usual place</a>, even this time you won&#8217;t be +<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="/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&#8230; 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&#8217;s reliability.<br /> + built on alpha, beta and RC version, I think people can get an idea of Cake's reliability.<br /> Nothing (too) new came out the oven this time: CakePHP 1.0 is mainly a bugfix release, with all the features - we&#8217;ve learnt to love. It&#8217;s just <em>better_: a lot of things have been fixed, model associations work + we've learnt to love. It's just <em>better_: a lot of things have been fixed, model associations work better, etc. etc. You can read the <a href="http://cakeforge.org/frs/shownotes.php?group_id=23&amp;release">changelog/announcement</a></em>id=85 or have a look below for a quick summary of the new features and most interesting fixes:</p>

@@ -55,13 +55,13 @@ Added check for AppController::appError(); will be called if this method

is in AppController. </code></pre> <p style="float:right;"><img src="/images/pictures/cakesite.png" alt="" /></p> -<p>If you&#8217;re not too excited about this new release, maybe you should have a look at <a +<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 - Sosa</a>, the winner of CakePHP&#8217;s design contest. He&#8217;s a latin-american web designer who had the + Sosa</a>, the winner of CakePHP's design contest. He's a latin-american web designer who had the <span class="caps">GREAT</span> idea of thinking about an <em>innovative</em> design for the Cake site&#8230; - Actually my dad didn&#8217;t think that way: <em>&#8220;That&#8217;s not new, that way of advertising was all over - the place when I was a kid!&#8221;</em> And he&#8217;s right, Armando thought that a fifties-like template would + Actually my dad didn't think that way: <em>&#8220;That's not new, that way of advertising was all over + the place when I was a kid!&#8221;</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 &#8220;official&#8221; Web 2.0 designs (beta), the new Cake site needs to stand out of the crowd&#8230; </p>
M contents/articles/25.htmlcontents/articles/25.html

@@ -6,17 +6,17 @@ tags: "web20|webdevelopment|internet"

----- <p>&#8230;So it turns out that my <a href="/articles/rails-inspired-php-frameworks/">last article</a> appeared on <a href="http://www.digg.com">Digg</a> homepage. <br /> - This was quite a pleasant surprise: I didn&#8217;t expect that an article submitted to <em>my own site</em> could - make it that far! I thought you&#8217;d need a relatively well-known website, mafia&#8217;s support, some divine + This was quite a pleasant surprise: I didn't expect that an article submitted to <em>my own site</em> could + make it that far! I thought you'd need a relatively well-known website, mafia's support, some divine intervention and a terrific amount of luck, but it seems that sometimes an interesting article about an interesting - subject can be enough. I&#8217;ll probably write a more detailed report of what happened soon, in another article + subject can be enough. I'll probably write a more detailed report of what happened soon, in another article rather than a blog post, but for now I just wanted to post a short summary here.</p> <p>Two days ago I decided to write a roundup of the six Rails-inspired <span class="caps">PHP</span> frameworks, CakePHP, Symfony, <span class="caps">PHP</span> on Trax, Code Igniter, Biscuit and Pipeline. The reason for this was - that I couldn&#8217;t find anything comparing all of them and such comparison could have been useful for some new - <em>bakers_. OK, I confess, when I started writing the article I thought I&#8217;d submit it to Digg and see what + that I couldn't find anything comparing all of them and such comparison could have been useful for some new + <em>bakers_. OK, I confess, when I started writing the article I thought I'd submit it to Digg and see what happens: I saw that another <a href="http://www.phpit.net/article/ten-different-php-frameworks/">roundup</a> - made it to the first page and people were quoting it everywhere on the net. It&#8217;s a nice article, but + made it to the first page and people were quoting it everywhere on the net. It's a nice article, but &#8211; in my humble opinion &#8211; not too exhaustive. <br /> Then I read a comment by someone to the <a href="http://digg.com/programming/CakePHP_1.0_has_been_released">digg</a></em> of the latest Cake release

@@ -24,31 +24,31 @@ stating:

</p> <blockquote> <p>Yes, they are similar &#8211; both were inspired by Rails, but Cake has gone further to differentiate themselves. - Here&#8217;s a decent (but not great) overview of some frameworks: + Here's a decent (but not great) overview of some frameworks: http://www.phpit.net/article/ten-different-php-frameworks/</p> </blockquote> <p>At that point, I thought that another round up, perhaps more Cake-centric, was in order. The other reason was that in one of my recent <a href="/articles/23/">blog posts</a> I tried to compare CakePHP and Symfony, but obviously my emotions got in the way and in the end I noticed I was kinda <em>attacking</em> Symfony. - That was a blog post though, and that&#8217;s half-allowed, but I felt that I should have written a slightly more + That was a blog post though, and that's half-allowed, but I felt that I should have written a slightly more objective <em>article</em> mentioning also all the other competitors.</p> <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&#8217;s homepage. That was an annoying cohincidence, but in the end things didn&#8217;t go too bad: his roundup + 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="/images/pictures/dugg_detail.png" alt="" /></p> -<p>After submitting my article the reaction wasn&#8217;t instantaneous&#8230; 5, 7, 10, 13 diggs in the first two hours. +<p>After submitting my article the reaction wasn't instantaneous&#8230; 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 &#8220;oh look, over 400 visitors&#8230; not too bad&#8221;. Then I refreshed the page and it said <em>539</em>, I refreshed again and said 600-something&#8230; eeep&#8230; Digg effect!</p> <p>A special praise goes to my new hosting company, <a href="http://www.bluehost.com/track/h3rald/CODE5">BlueHost</a>: - the server didn&#8217;t go down and it managed the extra traffic fine! A good test for CakePHP as well, since I + the server didn't go down and it managed the extra traffic fine! A good test for CakePHP as well, since I built this site with it.</p> <p>So here I am&#8230; over 5000 visitors read my article, about 600 people dugg it, nearly 40 people commented it on digg.com and 20 directly on my site. And &#8211; except for the usual <em>Rails-is-better-than-anything-else</em> comments &#8211; they were generally positive. Over 250 people bookmarked on del.icio.us and many blogs mentioned it in many different countries.</p> -<p>Money? Didn&#8217;t make much with adsense at all: programmers <em>don&#8217;t</em> click on ads!<br /> +<p>Money? Didn't make much with adsense at all: programmers <em>don't</em> click on ads!<br /> Bandwidth? About 1GB was gone in the first five hours, now is obviously slowing down: oh well, I still have another 398GB available till the end of the month :P</p>
M contents/articles/26.htmlcontents/articles/26.html

@@ -14,35 +14,35 @@ already tried to port this functionalities, with mixed results. What about Cake? Oh well, yes, we do have something

like that&#8230; 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 &#8211; hear, hear &#8211; 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&#8217;s not its primary purpose.</p> + class="caps">PHP</span> from command line, although it's not its primary purpose.</p> <p><img src="/images/pictures/bake.jpg" alt="" /></p> -<p>Cool then, let&#8217;s open a *nix shell, Windows command prompt, etc. etc., go into the <code>cake/scripts/</code> +<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> <p>Assuming that the php executable is in your <em><span class="caps">PATH</span></em> environment variable &#8211; if - not, either you add it or you&#8217;ll have to type something like:</p> + not, either you add it or you'll have to type something like:</p> <p><code>D:SERVERphpphp.exe bake.php</code></p> -<p>depending on where your php executable is. You&#8217;ll be be greeted by a &#8220;<span class="caps">CAKEPHP</span> - <span class="caps">BAKE</span>&#8221; text, and then you&#8217;ll be asked a few questions. One thing to realize +<p>depending on where your php executable is. You'll be be greeted by a &#8220;<span class="caps">CAKEPHP</span> + <span class="caps">BAKE</span>&#8221; text, and then you'll be asked a few questions. One thing to realize before proceeding any further: bake.php is <em>not</em> a generator, not in the traditional &#8220;Rails&#8221; - sense, anyway. It&#8217;s rather a handy but more verbose dialogue-based configuration script &#8211; which will + sense, anyway. It's rather a handy but more verbose dialogue-based configuration script &#8211; which will 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&#8217;s see what bake.php can do, for + href="https://trac.cakephp.org/ticket/768">ticket</a> about it, but let's see what bake.php can do, for now. </p> <p>The answer is&#8230; nearly anything. It annoying enough to please, but if you follow its directions it can do a - prettu decent job in the end, it&#8217;s far from being sentient, but let&#8217;s say it&#8217;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&#8217;t configured your + 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> -<p>Once that&#8217;s done &#8211; and it won&#8217;t go on unless you configure a (MySQL only?) database &#8211; you can +<p>Once that's done &#8211; and it won't go on unless you configure a (MySQL only?) database &#8211; 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> <ul> - <li>The controller&#8217;s name</li> + <li>The controller's name</li> <li>Whether it will use other models besides posts</li> <li>Whether you want to include any helper</li> <li>Whether you want to include any component</li>

@@ -58,19 +58,19 @@ //var $scaffold;

var $name = 'Posts';</p> <p>function index()<br /> {<br /> - $this&#8594;set(&#8216;data&#8217;, $this&#8594;Post&#8594;findAll());<br /> + $this&#8594;set(&#8216;data', $this&#8594;Post&#8594;findAll());<br /> }</p> <p>function add()<br /> {<br /> - if(empty($this&#8594;params[&#8216;data&#8217;]))<br /> + if(empty($this&#8594;params[&#8216;data']))<br /> {<br /> $this&#8594;render();<br /> }<br /> else<br /> {<br /> - if($this&#8594;Post&#8594;save($this&#8594;params[&#8216;data&#8217;]))<br /> + if($this&#8594;Post&#8594;save($this&#8594;params[&#8216;data']))<br /> {<br /> - $this&#8594;flash(&#8216;Post saved.&#8217;, &#8216;/posts/index&#8217;);<br /> + $this&#8594;flash(&#8216;Post saved.', &#8216;/posts/index');<br /> }<br /> else<br /> {<br />

@@ -80,19 +80,19 @@ }<br />

}</p> <p>function edit($id)<br /> {<br /> - if(empty($this&#8594;params[&#8216;data&#8217;]))<br /> + if(empty($this&#8594;params[&#8216;data']))<br /> {<br /> - $this&#8594;set(&#8216;data&#8217;, $this&#8594;Post&#8594;find(&#8216;Post.id = &#8217; . $id));<br /> + $this&#8594;set(&#8216;data', $this&#8594;Post&#8594;find(&#8216;Post.id = ' . $id));<br /> }<br /> else<br /> {<br /> - if($this&#8594;Post&#8594;save($this&#8594;params[&#8217;data&#8217;]))<br /> + if($this&#8594;Post&#8594;save($this&#8594;params['data']))<br /> {<br /> - $this&#8594;flash(&#8216;Post saved.&#8217;, &#8216;/posts/index&#8217;);<br /> + $this&#8594;flash(&#8216;Post saved.', &#8216;/posts/index');<br /> }<br /> else<br /> {<br /> - $this&#8594;set(&#8216;data&#8217;, $this&#8594;params[&#8216;data&#8217;]);<br /> + $this&#8594;set(&#8216;data', $this&#8594;params[&#8216;data']);<br /> $this&#8594;validateErrors($this&#8594;Post);<br /> $this&#8594;render();<br /> }<br />

@@ -100,19 +100,19 @@ }<br />

}</p> <p>function view($id)<br /> {<br /> - $this&#8594;set(&#8216;data&#8217;, $this&#8594;Post&#8594;find(&#8217;Post.id = &#8217; . $id));<br /> + $this&#8594;set(&#8216;data', $this&#8594;Post&#8594;find('Post.id = ' . $id));<br /> }</p> <p>function delete($id)<br /> {<br /> $this&#8594;Post&#8594;del($id);<br /> - $this&#8594;redirect(&#8216;/posts/index&#8217;);<br /> + $this&#8594;redirect(&#8216;/posts/index');<br /> }</p> <p>function postList()<br /> {<br /> $vars = $this&#8594;Post&#8594;findAll();<br /> foreach($vars as $var)<br /> {<br /> - $list[$var[&#8216;Post&#8217;][&#8216;id&#8217;]] = $var[&#8216;Post&#8217;][&#8216;name&#8217;];<br /> + $list[$var[&#8216;Post'][&#8216;id']] = $var[&#8216;Post'][&#8216;name'];<br /> }</p> <p>return $list;<br /> }<br />

@@ -120,11 +120,11 @@ }<br />

?&gt;<br /> </code></pre><br /> </small></p> -<p>It&#8217;s more or less the same with models and views: it will still ask a lot of questions and in the end generate +<p>It's more or less the same with models and views: it will still ask a lot of questions and in the end generate the thing. <br /> This behaviour is more advanced than a standard generator, you can include helpers and components already, if you want, but do you <em>really</em> want that? For models it even asks if you want to include particular associations - and validation rules! Personally, I&#8217;d rather a generator script which generates something <em>immediately</em> + and validation rules! Personally, I'd rather a generator script which generates something <em>immediately</em> and accepts maybe some parameters to further customization, like:</p> <p><code>php bake.php scaffold Posts</code><br /> <code>php bake.php controller Posts</code><br />
M contents/articles/27.htmlcontents/articles/27.html

@@ -5,16 +5,16 @@ timestamp: 1147081800

tags: "cakephp" ----- <p>Right after my <a href="/articles/26">last blog post</a> I decided to log on #cakephp on irc.freenode.org as usual, - and gwoo pops in and says &#8220;h3raLd, you didn&#8217;t review rdBaker yet!&#8221;<br /> - That&#8217;s right, I didn&#8217;t yet, so I may as well do it today.</p> + and gwoo pops in and says &#8220;h3raLd, you didn't review rdBaker yet!&#8221;<br /> + That's right, I didn't yet, so I may as well do it today.</p> <p>I remember hearing about rdBaker months ago, waaay before CakePHP 1.0, way before the RCs, I remember someone mentioning it on CakePHP user group in right after the bake.php script was created. <em>&#8220;How about having an - online baking utility?&#8221;</em> &#8211; and that&#8217;s precisely what rdBaker is, a more <span + online baking utility?&#8221;</em> &#8211; and that's precisely what rdBaker is, a more <span class="caps">PHP</span>-ish version of bake.php, which runs like any other <span class="caps">PHP</span> scripts: in your browser.</p> <p>This cute little thing is obviously available for free on <a href="http://cakeforge.org/frs/?group_id=13&amp;release_id=74">CakeForge</a> and is part of <a - href="http://www.rd11.com">gwoo</a> &#8217;s <a href="http://cakeforge.org/projects/rdos/">rdOpenSource</a> project + href="http://www.rd11.com">gwoo</a> 's <a href="http://cakeforge.org/projects/rdos/">rdOpenSource</a> project which includes various other Cake-powered applications.<br /> I personally recommend new (and old) bakers to download them and play with them, try to understand how they were coded, because they can really teach you <em>a lot</em> on how to code a CakePHP application or website properly.</p>

@@ -28,16 +28,16 @@ </quote>

<p>Not too hard, innit?</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&#8217;s on my own local <span class="caps">WAMP</span> server) and you&#8217;ll get a nice page asking you to + (that's on my own local <span class="caps">WAMP</span> server) and you'll get a nice page asking you to &#8220;supply your ingredients&#8221; via a simple form. <br /> - Unlike its command line cousin, rdBaker doesn&#8217;t require you to fill in <em>all</em> the fields, but just the + Unlike its command line cousin, rdBaker doesn't require you to fill in <em>all</em> the fields, but just the full path to the save directory (which is normally already filled in) and of course the name of the model (Post, User, Comment).<br /> Then you can select the type of output and choose whether you want to generate an empty controller, a scaffolded one or the <em>full</em> option including all the most common <acronym title="Create, Retrieve, Update, Delete"><span class="caps">CRUD</span></acronym> methods.<br /> Finally &#8211; if you like &#8211; you can enter any association or valitation rules for your model, then press the - <em>Bake it!</em> button and voil&aacute;, in you&#8217;ll find three directories (controllers, models and views) in + <em>Bake it!</em> button and voil&aacute;, in you'll find three directories (controllers, models and views) in your save directory containing all the <acronym title="Model View Controller"><span class="caps">MVC</span></acronym> entities you need regarding a particular model: </p>

@@ -52,14 +52,14 @@ [4] =&gt; edit.thtml created and written. Look in D:SERVERwwwphptestcakephpcake_testtmpviews/notes

[5] =&gt; view.thtml created and written. Look in D:SERVERwwwphptestcakephpcake_testtmpviews/notes ) </code></pre> -<p>But there&#8217;s more! By checking the appropriate checkbox, you can get all the stuff packed in a zip file!</p> +<p>But there's more! By checking the appropriate checkbox, you can get all the stuff packed in a zip file!</p> <p>Not bad at all, and fast as well.</p> <p>Now the bad things&#8230;<br /> - The script works fine, but there&#8217;s something which could be improved, perhaps:</p> + The script works fine, but there's something which could be improved, perhaps:</p> <ul> <li>If you choose to put everything in a zip file, the file will be named &#8220;baked_by_rdBaker.zip&#8221; &#8211; not a big deal, but maybe it could be personalized according to the model name entered.</li> - <li>Regardless you want to add validation rules to your model or not, you&#8217;ll <em>always</em> find some + <li>Regardless you want to add validation rules to your model or not, you'll <em>always</em> find some validation rules for a <em>title</em> and <em>body</em> field. I checked and they are hardcoded in the template file (rdBaker/views/helpers/templates/full/model.txt):<br /> <pre><code>
M contents/articles/29.htmlcontents/articles/29.html

@@ -4,27 +4,27 @@ content-type: article

timestamp: 1147580760 tags: "website|writing" ----- -<p>Yes, I know, I&#8217;ve been slaking a little bit, and haven&#8217;t posted on my blog in a while. Well, I actually - <em>didn&#8217;t</em> slack at all in these days getting ready to start my job, looking for a damn fitted kitchen +<p>Yes, I know, I've been slaking a little bit, and haven't posted on my blog in a while. Well, I actually + <em>didn't</em> slack at all in these days getting ready to start my job, looking for a damn fitted kitchen for my house and&#8230; writing more articles. </p> <p>Nothing special, and nothing too technical, to be honest, but equally interesting. First of all I updated my <a - href="/articles/ie-lovers-guide-to-firefox/">An IE Lover&#8217;s Guide to Firefox</a> a little bit and + href="/articles/ie-lovers-guide-to-firefox/">An IE Lover's Guide to Firefox</a> a little bit and people at SpreadFirefox.com and <a href="http://www.firefoxfacts.com/">FirefoxFacts</a> liked it. Glad to hear that, unfortunately some guy who wrote about <a href="http://mywebpages.comcast.net/SupportCD/FirefoxMyths.html">Firefox - Myths</a> wasn&#8217;t too impressed, but at any rate he read it anyway.</p> -<p>OK, this wasn&#8217;t a new article at all, but <a href="/articles/the-internet-philosopher/">this one</a> is - fresh, at least. It&#8217;s about a Swedish guy who decided to emigrate to India pursuing an ideal: writing for his + Myths</a> wasn't too impressed, but at any rate he read it anyway.</p> +<p>OK, this wasn't a new article at all, but <a href="/articles/the-internet-philosopher/">this one</a> is + fresh, at least. It's about a Swedish guy who decided to emigrate to India pursuing an ideal: writing for his own opinions and ideas. And he gets paid for that too! After reading more about him on his website I decided to write something about him. An interesting and rather unusual read. Pity that some sections of his homepage are in Swedish only.</p> <p>Finally, yesterday I felt inspired and decided to write <a href="/articles/social-bookmarking-services">another roundup</a> featuring ten popular social bookmarking websites. Trying all those services was fun, with a few exceptions of course. The bad news is that there are already various reviews about social bookmarking sites and thus - the Digg folk doesn&#8217;t seem to be particularly interested in <a + the Digg folk doesn't seem to be particularly interested in <a href="http://digg.com/software/Ten_popular_social_bookmarking_services_reviewed">reading another one</a>, but - hey! After all I can&#8217;t expect of getting dugg for every roundup I write, can&#8217;t I?</p> -<p>That&#8217;s about it. And what about the CakePHP article I promised <a href="/articles/13/">long ago</a> to CakePHP - beginners? It&#8217;s done, written and ready to be published! Unfortunately the magazine I submitted it to is - taking quite a bit to review it and &#8211; most important &#8211; to tell me whether they&#8217;ll publish it or - not. Let&#8217;s hope for the best.</p> + hey! After all I can't expect of getting dugg for every roundup I write, can't I?</p> +<p>That's about it. And what about the CakePHP article I promised <a href="/articles/13/">long ago</a> to CakePHP + beginners? It's done, written and ready to be published! Unfortunately the magazine I submitted it to is + taking quite a bit to review it and &#8211; most important &#8211; to tell me whether they'll publish it or + not. Let's hope for the best.</p>
M contents/articles/31.htmlcontents/articles/31.html

@@ -5,25 +5,25 @@ timestamp: 1148132820

tags: "cakephp|tutorial" ----- <p>Tutorials are great, articles are helpful, manuals are essential and the <span class="caps">API</span> is your best - friend, but there&#8217;s still something missing there&#8230; Unfortunately podcasts are not yet available, but the + friend, but there's still something missing there&#8230; Unfortunately podcasts are not yet available, but the CakePHP team is proud to announce the creation of two <a href="http://cakephp.org/pages/screencasts">screencasts</a> - in an effort to help new bakers familiarizing with CakePHP&#8217;s concepts. <br /> + in an effort to help new bakers familiarizing with CakePHP's concepts. <br /> 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&#8217;s a - spoil&#8230; erhm, a <em>detailed</em> description of John Anderson&#8217;s screencast about the <a + 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&#8230; 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="/images/pictures/CakePHP_1.0.png" alt="" /></p> -<p>There&#8217;s something I&#8217;ll never do: a screencast. Recording every mouse movement, every word or piece of +<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>&lt;/h2&gt;</code> to close a <code>&lt;/h1&gt;</code> tag, or that I waited an - eternity like five full seconds before deciding what to do. I guess I&#8217;m quite paranoid&#8230; John did it, and + eternity like five full seconds before deciding what to do. I guess I'm quite paranoid&#8230; John did it, and he did it well. Using just bash, vim and Safari he was able to record an excellent 30-minutes screencast featuring the blog tutorial. <br /> Before people start complaining that the blog tutorial should be completed in fifteen minutes, keep in mind that - John&#8217;s screencast is meant to show everything clearly to new users, via a trial and error approach if + John's screencast is meant to show everything clearly to new users, via a trial and error approach if necessary.</p> -<p>Here&#8217;s what happens in the screencast, nothing new if your read the blog tutorial, but still interesting, - especially if you&#8217;re new to Cake. Unfortunately there&#8217;s no audio, but the video talks by itself and John +<p>Here's what happens in the screencast, nothing new if your read the blog tutorial, but still interesting, + especially if you're new to Cake. Unfortunately there's no audio, but the video talks by itself and John will occasionally write some comments here and there.</p> <p><em><strong>0:01 &#8211; 5:00</strong></em></p> <ul>

@@ -95,5 +95,5 @@ <li>edit config/routes.php</li>

<li>set default route to posts/index</li> <li>refresh &#8211; all done!</li> </ul> -<p>That&#8217;s it. All in a 40MB .mov file. Download it from <a +<p>That's it. All in a 40MB .mov file. Download it from <a href="http://www.archive.org/download/CakePHP_BlogTutorialJohn/BlogTutorial.mov">here</a>.</p>
M contents/articles/32.htmlcontents/articles/32.html

@@ -4,43 +4,43 @@ content-type: article

timestamp: 1148561820 tags: "writing|tools" ----- -<p>Since in these days (and even more in near future) I&#8217;m really writing a lot I thought it would be good to share +<p>Since in these days (and even more in near future) I'm really writing a lot I thought it would be good to share my thoughts on some writing programs and tools I started using for writing these blog posts, articles, and more.</p> -<p>I&#8217;m going to examine a few applications which I find useful for different tasks, since I recently came to the +<p>I'm going to examine a few applications which I find useful for different tasks, since I recently came to the conclusion that I cannot use the same editor for everything I write: some magazines require a .doc document, others want just plain text, my site uses the truly excellent <a href="http://http://www.textism.com/">textile</a> markup, zZine Magazine used BBcode, other site use their own &#8220;proprietary&#8221; styles and so on. One could just give up and use Notepad &#8211; or better, <a href="http://notepad-plus.sourceforge.net/uk/site.htm">Notepad++</a> &#8211; for everything, while someone else like me might opt for various applications according to the task.</p> <p>One of the few essential requirements for a <em>writer</em> is some spell checking functionality. Sad but true, this - is enough to leave the most popular multi-purpose programming editor out: programmers don&#8217;t need a spell + 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&#8217;ll just focus on the + 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="/images/pictures/wp/bill.jpg" alt="" /></p> <p><a href="http://www.microsoft.com/office/preview/default.mspx">Word 2007 Beta 2</a> &#8211; Yes, I know that - OpenOffice is free and OO Writer works great, but perhaps at work you&#8217;ll be asked to use MS Word. Some editors + 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 - you&#8217;ll still have to use Redmond&#8217;s most popular Word Processor &#8211; <em>if you have it</em>. If you - got it with your laptop (I didn&#8217;t) or your auntie gave you 300$ to buy it you&#8217;re all set, but if you - don&#8217;t? <br /> + you'll still have to use Redmond's most popular Word Processor &#8211; <em>if you have it</em>. If you + got it with your laptop (I didn't) or your auntie gave you 300$ to buy it you're all set, but if you + don't? <br /> Oh well, yes, OpenOffice is the right choice perhaps, but at least until February 2007 uncle Bill lets you try the bleeding (quite literally) edge of all the commercial word processors: Word 2007 beta 2. You can download the whole Office Suite (and more) for free, <a href="http://www.microsoft.com/office/preview/beta/overview.mspx">run</a>. I - did it yesterday and well, it&#8217;s nice to try this brand-new piece of eye candy. the interface is completely - new, you won&#8217;t find the usual drop down menu but with some imagination you&#8217;ll manage to save/create/open + did it yesterday and well, it's nice to try this brand-new piece of eye candy. the interface is completely + new, you won't find the usual drop down menu but with some imagination you'll manage to save/create/open a new document by clicking on the big roundy Office logo on the top left corner. More user friendly? Perhaps, once - you get used to it. It <span class="caps">STILL</span> doesn&#8217;t have a tabbed interface, so you <span + you get used to it. It <span class="caps">STILL</span> doesn't have a tabbed interface, so you <span 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&#8217;t need to be formatted with a particular + 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="/images/pictures/wp/writely.gif" alt="" /></p> <p>Writely &#8211; Now this is much more fun. A <em>online</em>, <span class="caps">AJAX</span>-powered word processor - recently acquired by Google. IT&#8217;s currently in closed + 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 it.<br /> - It&#8217;s nice. It&#8217;s nice if you have to work with MS Word documents or create <span class="caps">PDF</span> + It's nice. It's nice if you have to work with MS Word documents or create <span class="caps">PDF</span> files, and it supports the most essential features offered by desktop word processors, plus some more, really convenient functionalities. <br /> It can import MS Word documents pretty well and also any kind of text file, so that you can edit it online anytime

@@ -56,16 +56,16 @@ 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="/images/pictures/wp/cream.png" alt="" /></p> -<p>Cream &#8211; I discovered this a while ago, and it&#8217;s perhaps the - most multi-purpose editor out there. It&#8217;s built on top of Vim (respect+) but it has a friendlier interface by - default, and that&#8217;s exactly what I&#8217;m using right now for typing this post. The reasons are simple: it - supports <span class="caps">ANY</span> kind of file format and any character encoding. There&#8217;s an highlighter +<p>Cream &#8211; 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 + supports <span class="caps">ANY</span> kind of file format and any character encoding. There's an highlighter for everything, including BBcode and textile, and of course you can make your own. It also includes spell checking on-the-fly which is missing in many simple editors. <br /> Whenever I have to write something which requires some particular formatting or markup I use Cream, it does the job pretty well, and whenever I feel brave I can always switch to &#8220;expert&#8221; view and challenge my vi skills ;)</p> -<p>That&#8217;s pretty much what I use for writing articles, posts, and other documents&#8230; I tried other - alternatives like RoughDraft or similar programs but I&#8217;m now really happy with these three applications. - Commercial &#8220;writer&#8217;s programs&#8221;? There are some out there, but who wants to spend 40$ or more for +<p>That's pretty much what I use for writing articles, posts, and other documents&#8230; I tried other + alternatives like RoughDraft or similar programs but I'm now really happy with these three applications. + Commercial &#8220;writer's programs&#8221;? There are some out there, but who wants to spend 40$ or more for something which offer less than MS Word when you can use OpenOffice and Writely for free?</p>
M contents/articles/33.htmlcontents/articles/33.html

@@ -4,101 +4,128 @@ content-type: article

timestamp: 1149221400 tags: "productivity|writing" ----- -<p>As I thought, my job also represents a great opportunity to learn new things. I don&#8217;t mean only new technical stuff, but also a great deal of tips, best practices and methods to efficiently write documentation material in proper English. Some theory about <a href="http://www.infomap.com/">Information Mapping</a> was by far the most interesting topic I learnt about this week.</p> +<p>As I thought, my job also represents a great opportunity to learn new things. I don't mean only new technical stuff, + but also a great deal of tips, best practices and methods to efficiently write documentation material in proper + English. Some theory about <a href="http://www.infomap.com/">Information Mapping</a> was by far the most interesting + topic I learnt about this week.</p> <h3>What is Information Mapping?</h3> <p><strong>Definition<sup class="footnote" id="fnr1"><a href="#fn1">1</a></sup></strong> <br /> -<blockquote>The Information Mapping method is a research-based approach to the analysis, organization, and visual presentation of information.</blockquote></p> +<blockquote>The Information Mapping method is a research-based approach to the analysis, organization, and visual + presentation of information.</blockquote> +</p> <p><strong>Information Mapping is media independent</strong><br /> -<blockquote>The method is both subject matter and media independent; that is, it can be applied to the subject matter of any industry, and it can be presented on paper, on a computer screen, verbally, or in a multimedia presentation. </blockquote></p> +<blockquote>The method is both subject matter and media independent; that is, it can be applied to the subject matter of + any industry, and it can be presented on paper, on a computer screen, verbally, or in a multimedia presentation. +</blockquote> +</p> <p><strong>Key Concepts</strong><br /> -<blockquote>Information Mapping is an integrated set of easy-to-learn principles, techniques, and standards. It enables authors to break complex information into its most basic elements and then present those elements optimally for readers. The result is a set of precisely defined information modules that are consistent from author to author and document to document.</blockquote></p> +<blockquote>Information Mapping is an integrated set of easy-to-learn principles, techniques, and standards. It enables + authors to break complex information into its most basic elements and then present those elements optimally for + readers. The result is a set of precisely defined information modules that are consistent from author to author and + document to document.</blockquote> +</p> <p><strong>Purpose</strong><br /> <blockquote><br /> -The method helps writers analyze, organize, and present information with clarity focus and impact. Information That Works. The goal of the analysis component is to determine the</p> -<ul> - <li>purpose</li> - <li>audience needs, and</li> - <li>information types.</li> -</ul> -<p>The goal of the organization is to create an overall structure for the information, based on the results of your analysis. Finally, the goal of the presentation component is to format the information to make it clear and accessible to your audience.</p> + The method helps writers analyze, organize, and present information with clarity focus and impact. Information That + Works. The goal of the analysis component is to determine the</p> + <ul> + <li>purpose</li> + <li>audience needs, and</li> + <li>information types.</li> + </ul> + <p>The goal of the organization is to create an overall structure for the information, based on the results of your + analysis. Finally, the goal of the presentation component is to format the information to make it clear and + accessible to your audience.</p> </blockquote> -<p class="footnote" id="fn1"><a href="#fnr1"><sup>1</sup></a> Contents were taken from <a href="http://www.infomap.com/index.cfm/TheMethod/">InfoMap.com</a> and were re-formatted and re-organized into an information map.</p> +<p class="footnote" id="fn1"><a href="#fnr1"><sup>1</sup></a> Contents were taken from <a + href="http://www.infomap.com/index.cfm/TheMethod/">InfoMap.com</a> and were re-formatted and re-organized into + an information map.</p> <h3>Key Concepts</h3> <p><strong>Introduction</strong><br /> -<blockquote>The Information Mapping method relies on some important principles according to which information should be organized. This method also defines new units of information to replace paragraphs, sections and chapters and tries to divide information into a few main set types, each with its own rules and structures.</blockquote></p> +<blockquote>The Information Mapping method relies on some important principles according to which information should be + organized. This method also defines new units of information to replace paragraphs, sections and chapters and tries + to divide information into a few main set types, each with its own rules and structures.</blockquote> +</p> <p><strong>Principles</strong><br /> -<blockquote></p> -<table> - <tr> - <td> <strong>Name</strong> </td> - <td> <strong>Explanation</strong> </td> - </tr> - <tr> - <td> Chuncking </td> - <td> Writers should group information into small, manageable units. </td> - </tr> - <tr> - <td> Relevance </td> - <td> Writers should make sure that al information in a chunck relates to one main point (function or purpose). </td> - </tr> - <tr> - <td> Labeling </td> - <td> Writers should provide a label for every unit of information. </td> - </tr> - <tr> - <td> Consistency </td> - <td> Writers should use similar labels, word, formats for similar subject matters. </td> - </tr> - <tr> - <td> Integrated Graphics </td> - <td> The use of tables, images, diagrams and lists is encouraged. </td> - </tr> - <tr> - <td> Accessible Detail </td> - <td> Documents should provide sufficient details where necessary, to make the information more accessible for the readers. </td> - </tr> - <tr> - <td> Hierarchy </td> - <td> Small, relevant units of information should be organized into a hierarchy. </td> - </tr> -</table> +<blockquote> + </p> + <table> + <tr> + <td> <strong>Name</strong> </td> + <td> <strong>Explanation</strong> </td> + </tr> + <tr> + <td> Chuncking </td> + <td> Writers should group information into small, manageable units. </td> + </tr> + <tr> + <td> Relevance </td> + <td> Writers should make sure that al information in a chunck relates to one main point (function or + purpose). </td> + </tr> + <tr> + <td> Labeling </td> + <td> Writers should provide a label for every unit of information. </td> + </tr> + <tr> + <td> Consistency </td> + <td> Writers should use similar labels, word, formats for similar subject matters. </td> + </tr> + <tr> + <td> Integrated Graphics </td> + <td> The use of tables, images, diagrams and lists is encouraged. </td> + </tr> + <tr> + <td> Accessible Detail </td> + <td> Documents should provide sufficient details where necessary, to make the information more accessible + for the readers. </td> + </tr> + <tr> + <td> Hierarchy </td> + <td> Small, relevant units of information should be organized into a hierarchy. </td> + </tr> + </table> </blockquote> <p><strong>Information Types</strong><br /> -<blockquote></p> -<table> - <tr> - <td> <strong>Name</strong> </td> - <td> <strong>Definition</strong> </td> - </tr> - <tr> - <td> Procedure </td> - <td> Set of steps to obtain a specified outcome </td> - </tr> - <tr> - <td> Process </td> - <td> A series of changes through the time for some purpose </td> - </tr> - <tr> - <td> Structure </td> - <td> Something which can be defined into multiple parts </td> - </tr> - <tr> - <td> Concept </td> - <td> Group of physical objects, conditions, relations, &#8230; </td> - </tr> - <tr> - <td> Principle </td> - <td> Statement of what should be done, assumptions </td> - </tr> - <tr> - <td> Fact </td> - <td> Statement presented with no supporting evidence </td> - </tr> - <tr> - <td> Classification </td> - <td> The sorting of a group of specimen into classes </td> - </tr> -</table> +<blockquote> + </p> + <table> + <tr> + <td> <strong>Name</strong> </td> + <td> <strong>Definition</strong> </td> + </tr> + <tr> + <td> Procedure </td> + <td> Set of steps to obtain a specified outcome </td> + </tr> + <tr> + <td> Process </td> + <td> A series of changes through the time for some purpose </td> + </tr> + <tr> + <td> Structure </td> + <td> Something which can be defined into multiple parts </td> + </tr> + <tr> + <td> Concept </td> + <td> Group of physical objects, conditions, relations, &#8230; </td> + </tr> + <tr> + <td> Principle </td> + <td> Statement of what should be done, assumptions </td> + </tr> + <tr> + <td> Fact </td> + <td> Statement presented with no supporting evidence </td> + </tr> + <tr> + <td> Classification </td> + <td> The sorting of a group of specimen into classes </td> + </tr> + </table> </blockquote> <p><strong>Conclusion</strong><br /> -<blockquote>Although it may initially seem too schematic, Information Mapping is a valid method to organize and present information to those readers who just need &#8220;facts&#8221; without any unnecessary distraction. This method it is used with some modifications in many technical manuals and documentation written by many companies.</blockquote></p> +<blockquote>Although it may initially seem too schematic, Information Mapping is a valid method to organize and present + information to those readers who just need &#8220;facts&#8221; without any unnecessary distraction. This method it + is used with some modifications in many technical manuals and documentation written by many companies.</blockquote> +</p>
M contents/articles/34.htmlcontents/articles/34.html

@@ -7,14 +7,14 @@ -----

<p>Someone recently added a comment to my article about <a href="/articles/rails-inspired-php-frameworks/">Rails-inspired <span class="caps">PHP</span> frameworks</a> 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&#8217;d like to thank this guy for letting + 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="/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&#8217;s not available yet. OR - at least it doesn&#8217;t seem to be: the author is planning to release his work to the Open Source community - but&#8230; well, he&#8217;s a bit concerned about the current &#8220;<span class="caps">PHP</span> Framework - War&#8221;: he wouldn&#8217;t like to end up like <a href="http://subway.python-hosting.com/">Subway</a> or just be +<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&#8230; well, he's a bit concerned about the current &#8220;<span class="caps">PHP</span> Framework + War&#8221;: he wouldn't like to end up like <a href="http://subway.python-hosting.com/">Subway</a> or just be slagged off by those merciless reviewers who enjoy write round-ups and comparisons about frameworks. <a href="http://www.bermi.org/page/about_me">Bermi Ferrer</a> is &#8220;just&#8221; a talented <span class="caps">PHP</span> developer who decided to create his own framework and he really enjoyed doing so,

@@ -23,12 +23,12 @@ <p><em>&#8220;I considered other <span class="caps">PHP</span> ports of Ruby on Rails, but we could not find all we

needed on them. One feature that I needed on the core was internationalization and Unicode support, so I decided to roll my own framework trying to keep most of the original rails interface so most of its documentation could work for it.&#8221;</em></p> -<p>Where did I hear that? Nothing new: it&#8217;s always the same story of frameworks not being as we want them to be - etc., it&#8217;s human. And yes, it&#8217;s <em><strong>another</strong></em> attempt to port Ruby on Rails to <span +<p>Where did I hear that? Nothing new: it's always the same story of frameworks not being as we want them to be + etc., it's human. And yes, it's <em><strong>another</strong></em> attempt to port Ruby on Rails to <span class="caps">PHP</span>, and a damn good one &#8212; or so it seems.</p> -<p><small>Before proceeding any further, I&#8217;d like to write a short warning for a few people who may or may not +<p><small>Before proceeding any further, I'd like to write a short warning for a few people who may or may not want to pop in and start commenting about the Rails-is-better-than-any-<span class="caps">PHP</span>-clone - issue: <strong>If I see a single comment slagging off this framework (or any other) only because it&#8217;s a + issue: <strong>If I see a single comment slagging off this framework (or any other) only because it's a port of Rails to <span class="caps">PHP</span>, it will be deleted, may it be David Heinemeier Hansson himself</strong>. Stop it, no seriously, I think it will be counter productive for Rails in the end: I really like RoR and I love the way it works, and yes, I think Ruby is definitely the best language to do that

@@ -38,7 +38,7 @@ preaching.</small></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&#8230; ooops!</p> -<p>Let&#8217;s just quote the most juicy ones, shall we?</p> +<p>Let's just quote the most juicy ones, shall we?</p> <p>Active Record [&#8220;Model&#8221;]</p> <ul> <li>Associations</li>

@@ -90,15 +90,15 @@ <li>File handling using <span class="caps">SFTP</span> for shared host running Apache as user nobody (as most CPanel

server do)</li> <li><strong>Distributed sessions using databases</strong></li> </ul> -<p>Impressed? I was, honest. And I&#8217;m talking as a CakePHP fanatic here, and I must say that if this framework can +<p>Impressed? I was, honest. And I'm talking as a CakePHP fanatic here, and I must say that if this framework can really offer all this <em>and</em> &#8212; and this is what really matters &#8212; is also as simple as Cake to learn and well performing&#8230; well, this is definitely going to be quite a promising player in the &#8220;<span class="caps">PHP</span> Framework War&#8221; (but is not a real war, is it?), although the author is quite worried about that:</p> -<p><em>&#8220;I&#8217;m also concerned about the <span class="caps">PHP</span> Framework war, I don&#8217;t want to play +<p><em>&#8220;I'm also concerned about the <span class="caps">PHP</span> Framework war, I don't want to play that game. Building this Framework was a great experience, it works great for me and it has helped me to become - a better programmer so I don&#8217;t want to spend my time discussing about if this is better or not than other - solutions. That&#8217;s the reason I&#8217;ll first look for great developers interested in the Framework to + a better programmer so I don't want to spend my time discussing about if this is better or not than other + solutions. That's the reason I'll first look for great developers interested in the Framework to help me releasing it.&#8221;</em></p> <p>Really, this will be an interesting project to check out, once it goes open source, and yes, I really wish Bermi all the best. Good luck, <a href="http://www.bermi.org/projects/akelos_framework">Akelos Framework</a>.</p>
M contents/articles/36.htmlcontents/articles/36.html

@@ -5,7 +5,7 @@ timestamp: 1152688740

tags: "italy" ----- <p><em><strong>Italy has won the World Cup!</strong></em></p> -<p>It doesn&#8217;t matter if Zidane first scored on a totally unfair penalty kick at the 7th minute and then, totally +<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&#8230; 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>

@@ -18,8 +18,8 @@ <p style="float:left;"><img src="/images/italy/grosso.jpg" alt="" /></p>

<p>&#8220;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="/images/italy/italy1.jpg" alt="" /></p> - <p>Fabio Grosso scored the winning goal after France&#8217;s David Trezeguet missed.</p> - <p>Playing his last game before retiring, Zinedine Zidane&#8217;s career ended in disgrace after he was sent off for + <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> <p>Zidane had put France ahead early on with a coolly-taken chipped penalty, before Materazzi levelled with a header from an Andrea Pirlo corner.<br />
M contents/articles/37.htmlcontents/articles/37.html

@@ -4,8 +4,8 @@ content-type: article

timestamp: 1153789620 tags: "website|cakephp" ----- -<p>Quite a bit of time passed since the last blog post, and I&#8217;m actually sorry about that, but as I thought, I - don&#8217;t have as much free time as I used to be. Work is work, after all!<br /> +<p>Quite a bit of time passed since the last blog post, and I'm actually sorry about that, but as I thought, I + don't have as much free time as I used to be. Work is work, after all!<br /> This post will be multipurpose as actually I bluid up a few things to write about in the last few days&#8230; erhm, ok, <em>weeks</em>.</p> <h3>New Website Design</h3>

@@ -15,7 +15,7 @@ guru could provide a new template for this website, and actually in the end I decided to accept the work of

<em><strong>Bartus F. Teipel</strong></em> a Brazilian CakePHP enthusiast.<br /> Bartus is obviously (<span class="caps">MUCH</span>) more talented than me when it comes to design, and I was amazed at the quality of the template he provided, in a really short time. <br /> - Unfortunately he didn&#8217;t yet provide a link to his main website/portfolio, but for now all I can show you is + Unfortunately he didn't yet provide a link to his main website/portfolio, but for now all I can show you is his website for party pics, <a href="http://www.circuscircus.com.br/">CircusCircus</a>. </p> <p>The new template sports a more contemporary Web2.0-ish look which I like a lot, and Bartus used libraries like <a

@@ -31,7 +31,7 @@ have written anything (yet) about some more advanced topic about CakePHP. This was mostly due to &#8211; again

&#8211; lack of time to focus on advanced topic and produce some quality examples.</p> <p>However, judging by the positive feedback I received about the articles, I am really happy of the final result: even more people discovered the power of CakePHP and became <em>bakers</em>. Happy baking to all of you!</p> -<p><em>So&#8230; no more articles about Cake?</em> Maybe not for a while, I think I&#8217;ll be rather busy in the +<p><em>So&#8230; no more articles about Cake?</em> Maybe not for a while, I think I'll be rather busy in the following months. Curious? Read on :-)</p> <h3>My biggest and most important project</h3> <p>I actually got really pissed off with Larry, Garret &amp; the other Master Bakers because of what they wrote on the

@@ -45,6 +45,6 @@ href="#fn5">5</a></sup> is the man behind these articles. Together with Fabio, we will be writing a book

that will be published [&#8230;]&#8221;</p> </blockquote> <p>After all this time I spent <em>trying desperately not to say a word about it</em> they came out and heralded it out - of nowhere. Sigh&#8230; they ruined the surprise effect! Oh well, it&#8217;s too late now, isn&#8217;t it?</p> -<p>So yes, when I say that I&#8217;m spending at least 60% of my time (at work and at home) writing I really mean it. + of nowhere. Sigh&#8230; they ruined the surprise effect! Oh well, it's too late now, isn't it?</p> +<p>So yes, when I say that I'm spending at least 60% of my time (at work and at home) writing I really mean it. The rest? Well, I do have a lovely girlfriend after all!!!</p>
M contents/articles/38.htmlcontents/articles/38.html

@@ -8,7 +8,7 @@ <p>Bermi Ferrer kept his promise, and even if a few were skeptic on the <a href="/articles/34/">pre-announced</a>

features of his upcoming Akelos framework, last week he sent me a &#8220;development preview&#8221; and a few days ago he opened the development <span class="caps">SVN</span> repository to the public:</p> <p><a href="svn://akelos.org/trunk" target="_blank">svn://akelos.org/trunk</a></p> -<p>Go, get it: it&#8217;s worthwhile (see below).</p> +<p>Go, get it: it's worthwhile (see below).</p> <p>&#8220;[&#8230;] The Akelos Framework is an open-source port of Ruby on Rails to the <span class="caps">PHP</span> programming language.<br /> The main goal of the Akelos Framework is to help programmers to build multilingual database-backed web applications

@@ -26,15 +26,15 @@ there are honestly too many for one single language. Look at

Python, <a href="http://www.djangoproject.com/">Django</a> seems to be the only &#8220;Rails-inspired&#8221; framework available and everyone is happy with it, while as a general rule <span class="caps">PHP</span> folks are never happy with what they already got.</p> -<p>Bermi is undoubtedly one of them, and that&#8217;s the reason he decided to code his very own Rails-inspired +<p>Bermi is undoubtedly one of them, and that's the reason he decided to code his very own Rails-inspired framework for <span class="caps">PHP</span>, which is, to date, the most remarkable of the ones I left out (it - wasn&#8217;t available at the time) in my <a href="/articles/rails-inspired-php-frameworks/">article</a>.</p> + wasn't available at the time) in my <a href="/articles/rails-inspired-php-frameworks/">article</a>.</p> <h3>Confirmed Features &amp; Contents</h3> -<p>So well, although I didn&#8217;t really have a proper chance to play with Akelos I can certainly herald some of its +<p>So well, although I didn't really have a proper chance to play with Akelos I can certainly herald some of its &#8211; verified, this time &#8211; features.</p> -<p>For one, it&#8217;s huge. Take Cake, add <em>every excellent, useful third party library or class you can possibly - thing of</em> and you&#8217;ll get Akelos. No kidding. The unzipped source of the whole framework is a massive - 16MB, 8.5 of which constitute the <code>vendors</code> folder. What&#8217;s in it? Well, all this:</p> +<p>For one, it's huge. Take Cake, add <em>every excellent, useful third party library or class you can possibly + thing of</em> and you'll get Akelos. No kidding. The unzipped source of the whole framework is a massive + 16MB, 8.5 of which constitute the <code>vendors</code> folder. What's in it? Well, all this:</p> <ul> <li>ADOdb</li> <li>Domit</li>

@@ -62,11 +62,11 @@ <li>Window</li>

<li>EventSelectors</li> </ul> <p style="float:left;"><img src="/images/pictures/frameworks/akelos_framework_logo.gif" alt="" /></p> -<p>Good, well, kind of: that&#8217;s just what <em>others</em> did, but it&#8217;s worth noting that it&#8217;s all +<p>Good, well, kind of: that's just what <em>others</em> did, but it's worth noting that it's all there and &#8211; apparently &#8211; 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 hearing about <em>code generators</em>&#8230; Aye, there are in Akelos as well, of course!</p> -<p>Coming to the more juicy stuff, <em>lo&#8217; and behold, ye contents of /lib folder (with comments):</em></p> +<p>Coming to the more juicy stuff, <em>lo' and behold, ye contents of /lib folder (with comments):</em></p> <ul> <li>AkActionController (controller)</li> <li>AkActionView (view)</li>

@@ -98,20 +98,20 @@ <li>AkRouter</li>

<li>AkZip</li> <li>&#8230;</li> </ul> -<p>Well, it&#8217;s all there, at any rate. The best way to know if it all works, and <em>how</em> it works, is simply +<p>Well, it's all there, at any rate. The best way to know if it all works, and <em>how</em> it works, is simply to try it out: <a href="http://www.akelos.org/">www.akelos.org</a>.</p> <h3>Remarks</h3> <p>As I said earlier, Akelos looks like <em>CakePHP on steroids</em>: agreed, the Cake philosophy of &#8220;no we-may-use-it code in the trunk&#8221; has been <em>completely</em> (and intentionally) ignored, but this is our - chance to peek at what CakePHP could have become if such philosophy didn&#8217;t become a lifestyle for the Cake Dev + chance to peek at what CakePHP could have become if such philosophy didn't become a lifestyle for the Cake Dev Team. <br /> - Akelos code is Rails-inspired, so yes, it&#8217;s <em>very</em> similar to Cake, although with some rough edges and - some re-used parts, but it&#8217;s the work of <span class="caps">ONE</span> person with no community support (yet), - don&#8217;t forget. Remarkable.</p> -<p>And he needs co-developers, by the looks of it, so there you are then: there&#8217;s <em>your</em> chance!</p> + Akelos code is Rails-inspired, so yes, it's <em>very</em> similar to Cake, although with some rough edges and + some re-used parts, but it's the work of <span class="caps">ONE</span> person with no community support (yet), + don't forget. Remarkable.</p> +<p>And he needs co-developers, by the looks of it, so there you are then: there's <em>your</em> chance!</p> <p>My personal opinion about it? Well, I think Akelos can learn from CakePHP and vice-versa: a merge? Well, at least it would reduce the number of Rails-inspired framework for <span class="caps">PHP</span> and <em>possibly</em> meet the needs of more people: those who want just the essentials, as a framework, and those who like to be <em>virtually almighty</em> and be able to do anything, <em>if they wanted to</em>.</p> -<p>Two flavours of the same framework? <em>CakePHP</em> and <em>cAkePHP</em> (note the case)? Bah, let&#8217;s stop +<p>Two flavours of the same framework? <em>CakePHP</em> and <em>cAkePHP</em> (note the case)? Bah, let's stop raving now, shall we?</p>
M contents/articles/39.htmlcontents/articles/39.html

@@ -6,42 +6,42 @@ tags: "web20|ajax|review"

----- <p>The so-called &#8220;<span class="caps">AJAX</span> Start Pages&#8221; are not a new concept anymore, and like for almost any other offspring of Web 2.0 there is more than one to chose from. Hence the increasing number of - comparative reviews on the Web nowadays (Yes, I&#8217;m guilty of that too). I soon learnt that for any &#8220;good + comparative reviews on the Web nowadays (Yes, I'm guilty of that too). I soon learnt that for any &#8220;good and useful thing&#8221; on the web there are at least <em>n</em> clones: consider for example social bookmarking, community-powered news sites, php frameworks&#8230;<br /> - And no, you can&#8217;t use the word clone because it has a strong negative connotation nowadays so let&#8217;s just + And no, you can't use the word clone because it has a strong negative connotation nowadays so let's just say that whenever someone comes up with a new idea, others examine it, process it and in a few weeks (days?) some - <em>very, very similar application</em> comes out, and it&#8217;s <em>better</em> than the previous one. <br /> - Now, I don&#8217;t know exactly whether <a href="http://www.netvibes.com/">NetVibes</a> was one of the first <span + <em>very, very similar application</em> comes out, and it's <em>better</em> than the previous one. <br /> + Now, I don't know exactly whether <a href="http://www.netvibes.com/">NetVibes</a> was one of the first <span class="caps">AJAX</span> Start Pages created or not, but at any rate &#8211; 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&#8217;s going on without having to visit dozen of websites + 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="/images/pictures/netvibes.jpg" alt="" /></p> <p>I can see people jumping up and down shouting &#8220;Pageflakes is better&#8221;, &#8220;Protopage kicks a$$&#8221; 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&#8217;s really a lot to choose from: 3spots has an excellent (and + class="caps">AJAX</span> Start Pages there's really a lot to choose from: 3spots has an excellent (and complete, I believe) <a href="http://3spots.blogspot.com/2006/03/ajax-or-flash-startpages-or-homepages.html">list</a> of all the start pages currently available on the Net, so yes, you can try them out yourself and make out your mind :)</p> -<p>I made up my mind long ago after experimenting a few of those. Why Netvibes? OK, let&#8217;s see:</p> +<p>I made up my mind long ago after experimenting a few of those. Why Netvibes? OK, let's see:</p> <ol> <li><strong>Fast to load</strong>: Netvibes is fast. Relatively fast, of course, for sure is not as fast as a plain, - old-style html page, but I think it&#8217;s perhaps one of the fastest <span class="caps">AJAX</span> start + old-style html page, but I think it's perhaps one of the fastest <span class="caps">AJAX</span> start pages ever created. As they <a href="http://blog.netvibes.com/?2006/08/17/75-the-future-of-netvibes">pointed out</a>, with a 15 million investment performance can only get better&#8230;</li> <li><strong>Tabbed pages</strong>: After tabbed browsing, tabs within a single page seem to gain popularity. Netvibes allows you to create more than one page to prevent cluttering and general chaos: you can create a tab - for CakePHP feeds, one for some cute <span class="caps">AJAX</span> widgets you&#8217;ll never use, another for - al that Web 2.0 rubbish you&#8217;ll never read &#8212; that&#8217;s what I do at least.</li> + for CakePHP feeds, one for some cute <span class="caps">AJAX</span> widgets you'll never use, another for + al that Web 2.0 rubbish you'll never read &#8212; that's what I do at least.</li> <li><strong>Smart Google Module</strong>: Finally Netvibes has a <em>proper</em> Google search module, which enable users to search with Google and view results <em>on Netvibes</em> instead of opening up a browser tab.</li> <li><strong><span class="caps">RSS</span> done right</strong>: Their <span class="caps">RSS</span> reader is nice: by clicking on a feed title it opens up a <em>virtual window</em> inside the page with the whole story and a menu with links to the other stories included in the feed. This is the most convenient way to read whole - articles like TechCrunch&#8217;s ones without leaving the page (and without loading the heavy TechCrunch UI). + articles like TechCrunch's ones without leaving the page (and without loading the heavy TechCrunch UI). </li> <li><strong>Public <span class="caps">API</span> for modules</strong>: For those who &#8211; unlike me &#8211; has some proper free time and would like to develop their own module, the <a
M contents/articles/40.htmlcontents/articles/40.html

@@ -9,10 +9,10 @@ &#8220;CakePHP Recipes&#8221; in Google and discovered &#8211; to my astonishment &#8211; that my new book about the

CakePHP framework is already for (pre)sale in many popular online bookstores.</p> <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&#8217;t - phisically get it simply because it&#8217;s still in progress (miracles of the modern publishing industry!).</p> + 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="/images/cakephp-recipes/cover.jpg" alt="" /></p> -<p>I&#8217;d like to point out that I&#8217;m not the <em>only</em> author of the book: all the code examples and +<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 with other trusthworthy CakePHP core developers.<br />
M contents/articles/41.htmlcontents/articles/41.html

@@ -4,5 +4,7 @@ content-type: article

timestamp: 1168149180 tags: "website" ----- -<p>As a few of you might have noticed, I decided to disable comments on all the sections of this site, as a temporary measure against spam.</p> -<p>Hopefully I&#8217;ll try implementing something more effective and less drastic soon, but meanwhile this seems the quickest way to get rid of approx 600-800 spam comments per week.</p> +<p>As a few of you might have noticed, I decided to disable comments on all the sections of this site, as a temporary + measure against spam.</p> +<p>Hopefully I'll try implementing something more effective and less drastic soon, but meanwhile this seems the quickest + way to get rid of approx 600-800 spam comments per week.</p>
M contents/articles/42.htmlcontents/articles/42.html

@@ -4,10 +4,23 @@ content-type: article

timestamp: 1173231900 tags: "cakephp|writing" ----- -<p>I am sorry to announce that my upcoming book, CakePHP Recipes, will not be published anymore. As a matter of fact, it wasn&#8217;t finished because some of the people involved failed to comply with the terms of their contract in delivering material which was suitable for publication.</p> +<p>I am sorry to announce that my upcoming book, CakePHP Recipes, will not be published anymore. As a matter of fact, it + wasn't finished because some of the people involved failed to comply with the terms of their contract in delivering + material which was suitable for publication.</p> <p>To quote an email I received from my publisher a few days ago,</p> -<p><em>&#8220;[&#8230;] The Cake Software Foundation has informed us they are withdrawing from the CakePHP Recipes project, and returning the advances they&#8217;ve received. This means we can no longer count on them for support, nor can we package the book as an official title.</em></p> -<p><em>After careful consideration, we have determined that this renders the book no longer viable for us. So, regrettably we must cancel your contract as well. Please understand that we have no quarrel with your performance; you have been responsive and communicative for the entire time. [&#8230;]&quot;</em></p> -<p>This is a huge disappointment to me, in particular because I am not responsible for the cancellation. It was going to be my very first book to be published, and due to someone else&#8217;s misjudgement and lack of motivation it will never be available to the readers.<br /> -I do not want to put the blame the whole Cake Software Foundation for this: nearly every person involved in the project did his best in reviewing parts of the book or offering me support. Regrettably this wasn&#8217;t enough: unfortunately it seems that someone didn&#8217;t like the idea of me writing the book and kept doubting not only my coding skills but also my ability as a writer all along.</p> -<p>It is sad to see how certain individuals fail to understand the importance of marketing and public relations not only when working on a team project but also in ordinary life, but it is truly disappointing to see how the thoughts and opinions of a single individual affect the work of a whole team.</p> +<p><em>&#8220;[&#8230;] The Cake Software Foundation has informed us they are withdrawing from the CakePHP Recipes + project, and returning the advances they've received. This means we can no longer count on them for support, nor + can we package the book as an official title.</em></p> +<p><em>After careful consideration, we have determined that this renders the book no longer viable for us. So, + regrettably we must cancel your contract as well. Please understand that we have no quarrel with your + performance; you have been responsive and communicative for the entire time. [&#8230;]&quot;</em></p> +<p>This is a huge disappointment to me, in particular because I am not responsible for the cancellation. It was going to + be my very first book to be published, and due to someone else's misjudgement and lack of motivation it will never + be available to the readers.<br /> + I do not want to put the blame the whole Cake Software Foundation for this: nearly every person involved in the + project did his best in reviewing parts of the book or offering me support. Regrettably this wasn't enough: + unfortunately it seems that someone didn't like the idea of me writing the book and kept doubting not only my coding + skills but also my ability as a writer all along.</p> +<p>It is sad to see how certain individuals fail to understand the importance of marketing and public relations not only + when working on a team project but also in ordinary life, but it is truly disappointing to see how the thoughts and + opinions of a single individual affect the work of a whole team.</p>
M contents/articles/43.htmlcontents/articles/43.html

@@ -19,13 +19,13 @@ mention instead.</p>

<p>Oddly enough, I took a screenshot of the CakePHP website just yesterday <em>&#8220;by chance&#8221;</em> and my articles were still there:</p> <p><img src="/images/pictures/cake-promo/cakephp-08032007.png" alt="" /></p> -<p>&#8230;while this morning they weren&#8217;t anymore:</p> +<p>&#8230;while this morning they weren't anymore:</p> <p><img src="/images/pictures/cake-promo/cakephp-09032007.png" alt="" /></p> -<p>Of course I can&#8217;t provide any proof that I took the screenshot yesterday, and of course I don&#8217;t have any +<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&#8217;t deserve to be publicized anymore. I am confident + href="/articles/42/">bad behavior</a> my articles didn't deserve to be publicized anymore. I am confident that the Cake Software Foundation always does its best in keeping its site up-to-date, and I am glad that - yesterday&#8217;s accident reminded them that there were far better articles which needed to be featured on their + yesterday's accident reminded them that there were far better articles which needed to be featured on their site. At least I <em>finally</em> did something good for the community!</p> <p>Sarcasm apart, I feel I owe an apology for blowing this whole thing out of proportions: I disclosed embarassing details about our past project which &#8211; for the sake of the framework &#8211; should have never been made

@@ -34,9 +34,9 @@ I want all of you to know that I still think that CakePHP is the best <span class="caps">PHP</span> framework ever

made and I genuinely think that Larry E. Master did outstanding work in all this time, along with the rest of <span class="caps">CSF</span> members and contributors. Best of luck for your future editorial and development projects.</p> -<p>Since now my contributions are no longer &#8220;officially recognized&#8221;, I think I&#8217;d better to move on +<p>Since now my contributions are no longer &#8220;officially recognized&#8221;, I think I'd better to move on devoting my attention to something else.</p> <p class="footnote" id="fn1"><a href="#fnr1"><sup>1</sup></a> &#8220;CakePHP&#8221; and &#8220;Cake&#8221; - <em>seems</em> to be registered trademarks of the Cake Software Foundation Inc. I&#8217;m not sure if I&#8217;m + <em>seems</em> to be registered trademarks of the Cake Software Foundation Inc. I'm not sure if I'm allowed to use them in this blog &#8212; If anyone has any problem with it, please let me know. </p>
M contents/articles/8.htmlcontents/articles/8.html

@@ -4,6 +4,13 @@ content-type: article

timestamp: 1144335420 tags: "website|webdevelopment|cakephp" ----- -<p>Yes, it works. Perhaps it&#8217;s a tiny bit slower than expected but the new h3raLd.com seems to work.<br /> -I&#8217;ll probably find some new exciting bugs to fix in the next few hours, as usual &#8211; that will be annoying but perfectly normal.</p> -<p><del>The good thing is that the new template seems to load faster, mostly due to the fact that I hardly used images</del> &lt;- [not true, te new site appears to be slower, maybe not due to the images], at any rate, let&#8217;s see how it goes. I can imagine I&#8217;ll have to implement some sort of caching system for the tagging system in particular, but fortunately <a href="http://www.cakephp.org/">CakePHP</a> apparently comes with a built-in caching mechanism for views, models etc. etc. although the documentation available seems to be <a href="http://groups.google.com/group/cake-php/browse_thread/thread/f0f96751bb61bc7b/bcb43c97e91923c7?q=caching&amp;rnum=1#bcb43c97e91923c7">scarce</a> at the moment, and I&#8217;ve been to lazy to investigate any further.</p> +<p>Yes, it works. Perhaps it's a tiny bit slower than expected but the new h3raLd.com seems to work.<br /> + I'll probably find some new exciting bugs to fix in the next few hours, as usual &#8211; that will be annoying + but perfectly normal.</p> +<p><del>The good thing is that the new template seems to load faster, mostly due to the fact that I hardly used + images</del> &larr; [not true, te new site appears to be slower, maybe not due to the images], at any rate, + let's see how it goes. I can imagine I'll have to implement some sort of caching system for the tagging + system in particular, but fortunately <a href="http://www.cakephp.org/">CakePHP</a> apparently comes with a built-in + caching mechanism for views, models etc. etc. although the documentation available seems to be <a + href="http://groups.google.com/group/cake-php/browse_thread/thread/f0f96751bb61bc7b/bcb43c97e91923c7?q=caching&rnum=1#bcb43c97e91923c7">scarce</a> + at the moment, and I've been to lazy to investigate any further.</p>
M contents/articles/9.htmlcontents/articles/9.html

@@ -4,12 +4,22 @@ content-type: article

timestamp: 1144419238 tags: "" ----- -<p>Today I had my <em>n^th^</em> job interview. Yes, I&#8217;m getting used to them by now, and it&#8217;s becoming quite entertaining: if they <em>paid</em> me for just take interviews I&#8217;d do that for all my life quite happily! <br /> -But since that&#8217;s not going to happen I&#8217;d better get a move on and find a so called <em>real job</em>. Actually this time it wasn&#8217;t the usual complete waste of time and this company <em>nearly</em> made me a proper offer: they&#8217;re gonna see me again next week, so let&#8217;s hope for the best.</p> -<p>The interview was one of the best ever, no doubts. They were friendly enough, they seemed to like me enough and they were even entertaining enough&#8230; one thing which actually <em>never</em> happened to me before: they asked me to solve a sort of pseudo-IQ-test(an annoying semi-pointless riddle, in other words), and here&#8217;s a rough translation from Italian, the comments within square brackets are mine:</p> +<p>Today I had my <em>n<sup>th</sup></em> job interview. Yes, I'm getting used to them by now, and it's becoming quite + entertaining: if they <em>paid</em> me for just take interviews I'd do that for all my life quite happily! <br /> + But since that's not going to happen I'd better get a move on and find a so called <em>real job</em>. Actually this + time it wasn't the usual complete waste of time and this company <em>nearly</em> made me a proper offer: they're + gonna see me again next week, so let's hope for the best.</p> +<p>The interview was one of the best ever, no doubts. They were friendly enough, they seemed to like me enough and they + were even entertaining enough&#8230; one thing which actually <em>never</em> happened to me before: they asked me to + solve a sort of pseudo-IQ-test(an annoying semi-pointless riddle, in other words), and here's a rough translation + from Italian, the comments within square brackets are mine:</p> <blockquote> -<p><em>You&#8217;re alone in a pitch black room [&#8230;nice intro, eh?] and the only thing you have are two fuses of different length and a lighter [thank God for that, now it&#8217;s all much better]. You know that both the fuses can burn in exactly one hour each, although there&#8217;s no proportional law which bonds the lenght of the fuses to the time necessary to burn them; how can you measure 45 minutes, exactly?</em></p> + <p><em>You're alone in a pitch black room [&#8230;nice intro, eh?] and the only thing you have are two fuses of + different length and a lighter [thank God for that, now it's all much better]. You know that both the fuses + can burn in exactly one hour each, although there's no proportional law which bonds the lenght of the fuses + to the time necessary to burn them; how can you measure 45 minutes, exactly?</em></p> </blockquote> <p>I solved that, eventually, and I got the job! Weheee!</p> -<p>No, more or less, but not quite&#8230; I&#8217;m gonna see them again, and evaluate their offer along with the other(s).</p> -<p>The solution of the riddle? NO <span class="caps">CHANCE</span>! Go and figure it out, it&#8217;s not hard.</p> +<p>No, more or less, but not quite&#8230; I'm gonna see them again, and evaluate their offer along with the other(s). +</p> +<p>The solution of the riddle? NO CHANCE! Go and figure it out, it's not hard.</p>
M contents/articles/academic.htmlcontents/articles/academic.html

@@ -6,106 +6,273 @@ tags: "italy|personal|rant"

pdf: true ----- - <section class="section"> -<p>I found this article today, buried in my mailbox. I wrote it just over five years ago, the evening after failing the last, insignificant exam necessary to get my degree in IT Engineering.</p> -<p>I eventually passed the damn thing, got my B.Sc., and found a great job right afterwards, while all my former fellow students were still studying pointless crap. Maybe some of them are still studying pointless crap right now, and they&#8217;re still living with their parents.</p> -<p>I was very lucky. If I didn&#8217;t fail that exam perhaps I would have kept studying for my master&#8217;s degree for years, and maybe today I wouldn&#8217;t even have a job, or be married!</p> -<p>I decided to re-publish this article because it&#8217;s part of what I am, and I&#8217;m not ashamed of it. I corrected a few of the most obvious spelling and grammar mistakes, but I didn&#8217;t edit it or censor it otherwise.</p> -<p>It may be a senseless rant, but my opinion of the Italian Education System is still the same: If I&#8217;ll have a child who wants to study anything technical someday, I&#8217;ll tell him/her to get the hell out of Italy and go abroad to study in a <em>real</em> university.</p> -<p style="padding-left:15em;"><strong>Fabio Cevasco</strong> &#8212; <em>Saturday, July 31st 2010</em></p> <section class="section"> -<header><h1 id="h_1" class="toc">The Pre-computer Age</h1></header> -<p>Who am I? I&#8217;m just an Italian student taking the last exams to obtain my B.Sc. in IT Engineering. Obviously I&#8217;m quite interested in Information Technology and everything concerning computers or the Internet, and &#8211; believe it or not &#8211; this probably came from my parents&#8217; original dislike of computers themselves.</p> -<p>in Italy, unlike in most of the other capitalistic countries of the world, kids tends to listen to their parents until they reach their &#8220;full maturity&#8221;, i.e. 25 years of age at least (by the way, I&#8217;m 22), so, to cut a long story short, I was allowed to have a computer at home when I was 16 years old. I couldn&#8217;t believe it when the technician brought it at home: sure I&#8217;d seen a computer before in my life, but that was mine, and I could use it to do something amazing, as I dreamt many times.</p> -<p>The point is, from another point of view, that I felt behind already compared to my friends who were already boasting their records at various computer games. Fools.<br /> -On another note, I was a bit different from other Italian kids: I always liked writing and reading in English since I was 6, because I found the language to be quite amazing or even magic for the way it sounded, as I used to say to my friends. Friends &#8211; the Italian ones, that is &#8211; who never really understood me totally, and in particular my<br /> -passion for the Anglo-Saxon cultures: for them, writing and reading in English were just boring and difficult things you had to do at school, while I enjoyed reading The Tempest by Shakespeare when my English teacher didn&#8217;t even teach me the past tense, yet. A fool?</p> -<p>My passion for the English language was soon noticed by my parents, who let me go to England a few times, to college: basically a fashonable way for english schools and travel agencies to rob honest families, promising them that their kids would have learnt a new language enjoying themselves. Result: the kids enjoyed their holiday a lot, but basically always spoke Italian to each other (and even to English people over there) and the families were happy when they came back because after spending so much money they must have learnt something&#8230;</p> + <p>I found this article today, buried in my mailbox. I wrote it just over five years ago, the evening after failing + the last, insignificant exam necessary to get my degree in IT Engineering.</p> + <p>I eventually passed the damn thing, got my B.Sc., and found a great job right afterwards, while all my former + fellow students were still studying pointless crap. Maybe some of them are still studying pointless crap right + now, and they're still living with their parents.</p> + <p>I was very lucky. If I didn't fail that exam perhaps I would have kept studying for my master's + degree for years, and maybe today I wouldn't even have a job, or be married!</p> + <p>I decided to re-publish this article because it's part of what I am, and I'm not ashamed of it. I + corrected a few of the most obvious spelling and grammar mistakes, but I didn't edit it or censor it + otherwise.</p> + <p>It may be a senseless rant, but my opinion of the Italian Education System is still the same: If I'll have + a child who wants to study anything technical someday, I'll tell him/her to get the hell out of Italy and + go abroad to study in a <em>real</em> university.</p> + <p style="padding-left:2rem;"><strong>Fabio Cevasco</strong> &#8212; <em>Saturday, July 31st 2010</em></p> + <section class="section"> + <header> + <h1 id="h_1" class="toc">The Pre-computer Age</h1> + </header> + <p>Who am I? I'm just an Italian student taking the last exams to obtain my B.Sc. in IT Engineering. + Obviously I'm quite interested in Information Technology and everything concerning computers or the + Internet, and &#8211; believe it or not &#8211; this probably came from my parents' original dislike + of computers themselves.</p> + <p>in Italy, unlike in most of the other capitalistic countries of the world, kids tends to listen to their + parents until they reach their &#8220;full maturity&#8221;, i.e. 25 years of age at least (by the way, + I'm 22), so, to cut a long story short, I was allowed to have a computer at home when I was 16 years + old. I couldn't believe it when the technician brought it at home: sure I'd seen a computer + before in my life, but that was mine, and I could use it to do something amazing, as I dreamt many times. + </p> + <p>The point is, from another point of view, that I felt behind already compared to my friends who were already + boasting their records at various computer games. Fools.<br /> + On another note, I was a bit different from other Italian kids: I always liked writing and reading in + English since I was 6, because I found the language to be quite amazing or even magic for the way it + sounded, as I used to say to my friends. Friends &#8211; the Italian ones, that is &#8211; who never really + understood me totally, and in particular my<br /> + passion for the Anglo-Saxon cultures: for them, writing and reading in English were just boring and + difficult things you had to do at school, while I enjoyed reading The Tempest by Shakespeare when my English + teacher didn't even teach me the past tense, yet. A fool?</p> + <p>My passion for the English language was soon noticed by my parents, who let me go to England a few times, to + college: basically a fashonable way for english schools and travel agencies to rob honest families, + promising them that their kids would have learnt a new language enjoying themselves. Result: the kids + enjoyed their holiday a lot, but basically always spoke Italian to each other (and even to English people + over there) and the families were happy when they came back because after spending so much money they must + have learnt something&#8230;</p> -</section> -<section class="section"> -<header><h1 id="h_2" class="toc">Using the Computer and the Internet</h1></header> -<p>Back to that amazing and weird magic box called computer: I immediately enjoyed experimenting new stuff, playing with Windows (for me the word &#8220;Linux&#8221; at the time would have sounded not too different from some names of medicines my grandparents were taking), and even playing games, why not, but in English of course, because I never<br /> -really liked Italian translations (yes, we even dub video games!).<br /> -I remember my biggest fear was not being able to catch up with my friends who had a computer for years: I was so obsessed with that that I often stayed on the PC more than the 2-3 hours allowed by my parents, when they were away. Some time later, and relatively recently, I discovered that I catched up relatively soon, without even noticing it.</p> -<p>I&#8217;ve been allowed to access the Internet when I turned 18, because my parents were scared it could be just another bad thing, and still I found myself behind if compared to my friends, who&#8217;ve been surfing the web long before.</p> -<p>Only now I notice that perhaps my parents made me discover new things about PCs which my friends never bother learning, even now that they&#8217;re graduating. I remember my mum calling me for a silly pseudo-scientific divulgative program where they were describing this new, totally free operating system different from Windows who was supposed to work much better. &#8220;It said the name before&#8230; it&#8217;s Luxi&#8230; lixi&#8230; lunis&#8230;&#8221; &#8211; Linux.</p> -<p>When I had access to the Internet my life really changed. I do believe that unlike my friends I used the Internet for its very purpose: sharing knowledge, or, in my case, just learning. I also made a vow to myself: to surf <span class="caps">ONLY</span> (unless I had to) English/International websites; a vow which I&#8217;m keeping still nowadays, which seemed utterly illogic<br /> -to my friends and Italians in general.</p> -<p>Immediately a whole new universe opened to my eyes: I quickly learnt how to keep up-to-date on the recent events regarding computers, I learnt some rudiments of Internet and Hacking Culture (thanks <span class="caps">ESR</span> for all your papers) and the Open Source movement, and linux, etc. and I noticed two things:</p> -<ul> - <li>I was definetely catching up with my friends&#8217; &#8220;knowledge&#8221; in computing</li> - <li>I would have <span class="caps">NEVER</span> ever managed to learn even 1/10 of all you need to know about computers: the same as in life, and I was happy with it.</li> -</ul> + </section> + <section class="section"> + <header> + <h1 id="h_2" class="toc">Using the Computer and the Internet</h1> + </header> + <p>Back to that amazing and weird magic box called computer: I immediately enjoyed experimenting new stuff, + playing with Windows (for me the word &#8220;Linux&#8221; at the time would have sounded not too different + from some names of medicines my grandparents were taking), and even playing games, why not, but in English + of course, because I never<br /> + really liked Italian translations (yes, we even dub video games!).<br /> + I remember my biggest fear was not being able to catch up with my friends who had a computer for years: I + was so obsessed with that that I often stayed on the PC more than the 2-3 hours allowed by my parents, when + they were away. Some time later, and relatively recently, I discovered that I catched up relatively soon, + without even noticing it.</p> + <p>I've been allowed to access the Internet when I turned 18, because my parents were scared it could be + just another bad thing, and still I found myself behind if compared to my friends, who've been surfing + the web long before.</p> + <p>Only now I notice that perhaps my parents made me discover new things about PCs which my friends never bother + learning, even now that they're graduating. I remember my mum calling me for a silly pseudo-scientific + divulgative program where they were describing this new, totally free operating system different from + Windows who was supposed to work much better. &#8220;It said the name before&#8230; it's Luxi&#8230; + lixi&#8230; lunis&#8230;&#8221; &#8211; Linux.</p> + <p>When I had access to the Internet my life really changed. I do believe that unlike my friends I used the + Internet for its very purpose: sharing knowledge, or, in my case, just learning. I also made a vow to + myself: to surf <span class="caps">ONLY</span> (unless I had to) English/International websites; a vow which + I'm keeping still nowadays, which seemed utterly illogic<br /> + to my friends and Italians in general.</p> + <p>Immediately a whole new universe opened to my eyes: I quickly learnt how to keep up-to-date on the recent + events regarding computers, I learnt some rudiments of Internet and Hacking Culture (thanks <span + class="caps">ESR</span> for all your papers) and the Open Source movement, and linux, etc. and I noticed + two things:</p> + <ul> + <li>I was definetely catching up with my friends' &#8220;knowledge&#8221; in computing</li> + <li>I would have <span class="caps">NEVER</span> ever managed to learn even 1/10 of all you need to know + about computers: the same as in life, and I was happy with it.</li> + </ul> -</section> -<section class="section"> -<header><h1 id="h_3" class="toc">The Pre-academic Period</h1></header> -<p>In the meantime I was studying in a Liceo Scientifico, a kind of scientific high school where basically they make you study all sort of subjects (from geography, to maths to phylosopy, to Latin) mainly focusing &#8211; they say &#8211; on Science-related disciplines. For those who don&#8217;t know, in Italy you don&#8217;t get to choose what you want to study: in<br /> -High School and University they let you choose basically a type of school, but subjects and courses cannot be changed, apart from a few exceptions.<br /> -I &#8220;chose&#8221; a particular type of scientific school (&#8230;the exception!) where basically I agreed to study an additional subject &#8211; Computer Science &#8211; in addition to all the rest, for a total of more than 30 hours per week. I studied a lot then, because my parents taught me that Culture was important, and that &#8220;if you&#8217;re ignorant you can&#8217;t do anything nowadays&#8221;. No, my parents weren&#8217;t ignorant themselves, my dad is a Mechanical Engineer and my mum a Latin/History/Italian professor &#8230;and yes, that helped my forma mentis a lot.</p> -<p>I studied a wide range of subjects, including something totally irrelevant with my favourite ones: English and Computing (note: I say &#8220;Computing&#8221;, not Maths), and I did quite well in the end, graduating from High School with a mark of 100/100. While I was studying Latin, Phylosophy and alikes I was thinking that at least at University I&#8217;d have studied something really more specific.<br /> -Until the end I was undecided on which faculty to choose, whether IT Engineering or Foreign Languages. I was very fond of English and languages in general, but I primarly liked computers, so I thought that if I studied IT Engineering I&#8217;d have learnt more about computers and my already half-decent knowledge of the English language would<br /> -have helped me in my studies (&#8220;Now they <span class="caps">REQUIRE</span> a good knowledge of English, at university&#8221;) and in my future, when I&#8217;d have started working. <span class="caps">FOOL</span>.</p> + </section> + <section class="section"> + <header> + <h1 id="h_3" class="toc">The Pre-academic Period</h1> + </header> + <p>In the meantime I was studying in a Liceo Scientifico, a kind of scientific high school where basically they + make you study all sort of subjects (from geography, to maths to phylosopy, to Latin) mainly focusing + &#8211; they say &#8211; on Science-related disciplines. For those who don't know, in Italy you + don't get to choose what you want to study: in<br /> + High School and University they let you choose basically a type of school, but subjects and courses cannot + be changed, apart from a few exceptions.<br /> + I &#8220;chose&#8221; a particular type of scientific school (&#8230;the exception!) where basically I + agreed to study an additional subject &#8211; Computer Science &#8211; in addition to all the rest, for a + total of more than 30 hours per week. I studied a lot then, because my parents taught me that Culture was + important, and that &#8220;if you're ignorant you can't do anything nowadays&#8221;. No, my + parents weren't ignorant themselves, my dad is a Mechanical Engineer and my mum a + Latin/History/Italian professor &#8230;and yes, that helped my forma mentis a lot.</p> + <p>I studied a wide range of subjects, including something totally irrelevant with my favourite ones: English + and Computing (note: I say &#8220;Computing&#8221;, not Maths), and I did quite well in the end, graduating + from High School with a mark of 100/100. While I was studying Latin, Phylosophy and alikes I was thinking + that at least at University I'd have studied something really more specific.<br /> + Until the end I was undecided on which faculty to choose, whether IT Engineering or Foreign Languages. I was + very fond of English and languages in general, but I primarly liked computers, so I thought that if I + studied IT Engineering I'd have learnt more about computers and my already half-decent knowledge of + the English language would<br /> + have helped me in my studies (&#8220;Now they <span class="caps">REQUIRE</span> a good knowledge of English, + at university&#8221;) and in my future, when I'd have started working. <span class="caps">FOOL</span>. + </p> -</section> -<section class="section"> -<header><h1 id="h_4" class="toc">Alice in Wonderland</h1></header> -<p>That was it, I remember exactly when I went to sign my pre-enrollment papers: IT Engineering. I was so happy to have made it! Now finally I would have studied what I was meant to.</p> -<p>On a side note, I was never too good at Maths, I don&#8217;t know why. I just didn&#8217;t like it because it felt too theorethical for me, and not as useful as I thought,<br /> -especially for programming. In High School I was taught a bit of the Pascal 3 programming language, and that turned out to be perhaps one of the most useful things I&#8217;ve ever studied.</p> -<p>The first disappointment came from the courses that they setup for the first year: two <span class="caps">BIG</span> Maths-oriented exams in particular, and Chemistry(!). What Chemistry has to do with Computer Science remained a mystery to me, people claimed that we might be asked in the future to do some programs to help studying the structure of matter and doing<br /> -chemical analysis&#8230; yes, and following the same logic I should have been studying the structure of languages, because AI programs and translators would certainly become key applications in the future.</p> -<p>Oddly enough, they made us just study Chemistry.</p> -<p>&#8220;But next year will be better&#8221; &#8212; I was thinking, after getting fairly poor results in the Maths exams &#8212; &#8220;next year we&#8217;ll study something more exciting&#8221;.</p> -<p>Economics.</p> -<p>They made us study Economics because they think that it&#8217;s useful to know something about finance and salaries, especially when you start working. That makes sense, to an extent, of course, and it was kind of interesting even. But still I didn&#8217;t study anything really useful.</p> -<p>This is a little lie, actually, because we actually had two programming exams (out of 17) in which they taught us a bit of C++, and <span class="caps">THAT</span> was interesting, and I even managed to get 30/30 out of the last one: I liked it.</p> -<p>I actually remember when the teacher came in, and insisted for us to use a unix emulator (Cygwin) to compile our C++ programs: people thought that &#8220;emulators&#8221; were used for running games released for a gaming console on the PC, and what the hell was unix? It looks like &#8211; they said &#8211; a bad copy of <span class="caps">DOS</span> with more difficult commands. (No comment)</p> -<p>I lived my years at University (three, counting this one which will be the last one) feeling superior to my friends for knowing more about computers but at the same time inferior to them when it came to exams: I didn&#8217;t really like most of the subjects, especially some rather abstract mathematical models which <span class="caps">COULD</span> BE useful, but &#8211; let&#8217;s<br /> -say it all &#8211; most people outside Italy don&#8217;t really give a sh&#8230;illing about. What&#8217;s the point in learning the demonstration of Cauchy theorem? Just use it maybe, and it would have a sense&#8230; No, they wanted you to study the demonstration and tell them about it, without missing a passage, which normally &#8211; for 2/3 of people at least &#8211; meant<br /> -&#8220;learn it by heart&#8221;.</p> -<p>Also, unlike in other countries, professors are more similar to Gods than clever people, apart from a few exceptions. Every professor decides how the students have to take the exams, some of them opt for having some <em>compitini</em> (little tests) during the semester and then the average mark on all of them (normally two or three) represents the<br /> -exam&#8217;s final mark: that&#8217;s the best, probably, but it could also mean that people can cheat trying to copy from their collegues, etc.</p> -<p>Normal, get on, it&#8217;s Italy!</p> -<p>Some professors might allow you to use the notes you took during classes, but that&#8217;s often considered a bad thing because people can potentially copy from one another (&#8220;What&#8217;s that piece of paper, is it your friend&#8217;s?&#8221; &#8211; &#8220;No, it&#8217;s part of my notes&#8221;), and they often do. On the other hand, if a professor doesn&#8217;t allow notes to be used, students<br /> -normally do their best to sneak and use them anyway.</p> -<p>This is Italy, after all, the place where everything can be sorted out if you&#8217;re cunning enough.</p> -<p>But why do some people cheat? Oh well, simply because either you devote 3 full years of your life to studying pointless crap and forgetting that you&#8217;re wasting the best years of your existence, or you have to do something to pass 10 exams a year. Because we <span class="caps">REALLY</span> do take 10 exams a year.</p> -<p>My girlfriend (who&#8217;s English and living in Italy, by the way) told me that her brother wanted to study Computing at University but switched to Politics &amp; Journalism because they wanted him to learn Java on the very first year. I&#8217;ve never been taught Java &#8212; I had to learn it all by myself for my final thesis (see below) &#8212; but instead I learnt a ton of demonstrations of theorems and mathematical models. Great, isn&#8217;t it?</p> -<p><em>&#8220;But you knew you were going to take those exams, because they are publicly available before enrolling&#8221;.</em></p> -<p>That&#8217;s true and it makes sense, and I probably should have chosen Computer Science instead of IT Engineering if only it was considered equally important. In Italy if you study Engineering you can (after taking yet another exam) become an Engineer, which &#8212; unlike other countries &#8212; is not a competent person who knows how to fix stuff and can solve problems. Rather, he&#8217;s someone who got an important academic title who is treated like a demi-god because he knows (or should know) what&#8217;s a differential system and how can be solved but &#8212; sometimes &#8212; doesn&#8217;t know how to use it.</p> -<p>But he&#8217;s an Engineer, and he can find work when others can&#8217;t.</p> -<p>To explain this concept to non-Italian, I can summarize all this with the following:</p> -<p>In Italy Academic (Skool) Titles rulez &#8211; You ain&#8217;t got none? You ain&#8217;t nothin&#8217; coz I got one and I own you.</p> -<p>And that&#8217;s that. In Italy knowledge is dead. (This is an exaggeration, but please try to get my point).</p> -<p>If you need to be competent in something, when you&#8217;re working you&#8217;ll have to do a practical course (even paying for it yourself) if some &#8220;knowledge&#8221; is needed. If there&#8217;s no risk that things can blow up, you can remain ignorant.</p> + </section> + <section class="section"> + <header> + <h1 id="h_4" class="toc">Alice in Wonderland</h1> + </header> + <p>That was it, I remember exactly when I went to sign my pre-enrollment papers: IT Engineering. I was so happy + to have made it! Now finally I would have studied what I was meant to.</p> + <p>On a side note, I was never too good at Maths, I don't know why. I just didn't like it because it + felt too theorethical for me, and not as useful as I thought,<br /> + especially for programming. In High School I was taught a bit of the Pascal 3 programming language, and that + turned out to be perhaps one of the most useful things I've ever studied.</p> + <p>The first disappointment came from the courses that they setup for the first year: two <span + class="caps">BIG</span> Maths-oriented exams in particular, and Chemistry(!). What Chemistry has to do + with Computer Science remained a mystery to me, people claimed that we might be asked in the future to do + some programs to help studying the structure of matter and doing<br /> + chemical analysis&#8230; yes, and following the same logic I should have been studying the structure of + languages, because AI programs and translators would certainly become key applications in the future.</p> + <p>Oddly enough, they made us just study Chemistry.</p> + <p>&#8220;But next year will be better&#8221; &#8212; I was thinking, after getting fairly poor results in the + Maths exams &#8212; &#8220;next year we'll study something more exciting&#8221;.</p> + <p>Economics.</p> + <p>They made us study Economics because they think that it's useful to know something about finance and + salaries, especially when you start working. That makes sense, to an extent, of course, and it was kind of + interesting even. But still I didn't study anything really useful.</p> + <p>This is a little lie, actually, because we actually had two programming exams (out of 17) in which they + taught us a bit of C++, and <span class="caps">THAT</span> was interesting, and I even managed to get 30/30 + out of the last one: I liked it.</p> + <p>I actually remember when the teacher came in, and insisted for us to use a unix emulator (Cygwin) to compile + our C++ programs: people thought that &#8220;emulators&#8221; were used for running games released for a + gaming console on the PC, and what the hell was unix? It looks like &#8211; they said &#8211; a bad copy of + <span class="caps">DOS</span> with more difficult commands. (No comment) + </p> + <p>I lived my years at University (three, counting this one which will be the last one) feeling superior to my + friends for knowing more about computers but at the same time inferior to them when it came to exams: I + didn't really like most of the subjects, especially some rather abstract mathematical models which + <span class="caps">COULD</span> BE useful, but &#8211; let's<br /> + say it all &#8211; most people outside Italy don't really give a sh&#8230;illing about. What's + the point in learning the demonstration of Cauchy theorem? Just use it maybe, and it would have a + sense&#8230; No, they wanted you to study the demonstration and tell them about it, without missing a + passage, which normally &#8211; for 2/3 of people at least &#8211; meant<br /> + &#8220;learn it by heart&#8221;. + </p> + <p>Also, unlike in other countries, professors are more similar to Gods than clever people, apart from a few + exceptions. Every professor decides how the students have to take the exams, some of them opt for having + some <em>compitini</em> (little tests) during the semester and then the average mark on all of them + (normally two or three) represents the<br /> + exam's final mark: that's the best, probably, but it could also mean that people can cheat + trying to copy from their collegues, etc.</p> + <p>Normal, get on, it's Italy!</p> + <p>Some professors might allow you to use the notes you took during classes, but that's often considered a + bad thing because people can potentially copy from one another (&#8220;What's that piece of paper, is + it your friend's?&#8221; &#8211; &#8220;No, it's part of my notes&#8221;), and they often do. On + the other hand, if a professor doesn't allow notes to be used, students<br /> + normally do their best to sneak and use them anyway.</p> + <p>This is Italy, after all, the place where everything can be sorted out if you're cunning enough.</p> + <p>But why do some people cheat? Oh well, simply because either you devote 3 full years of your life to studying + pointless crap and forgetting that you're wasting the best years of your existence, or you have to do + something to pass 10 exams a year. Because we <span class="caps">REALLY</span> do take 10 exams a year.</p> + <p>My girlfriend (who's English and living in Italy, by the way) told me that her brother wanted to study + Computing at University but switched to Politics &amp; Journalism because they wanted him to learn Java on + the very first year. I've never been taught Java &#8212; I had to learn it all by myself for my final + thesis (see below) &#8212; but instead I learnt a ton of demonstrations of theorems and mathematical models. + Great, isn't it?</p> + <p><em>&#8220;But you knew you were going to take those exams, because they are publicly available before + enrolling&#8221;.</em></p> + <p>That's true and it makes sense, and I probably should have chosen Computer Science instead of IT + Engineering if only it was considered equally important. In Italy if you study Engineering you can (after + taking yet another exam) become an Engineer, which &#8212; unlike other countries &#8212; is not a competent + person who knows how to fix stuff and can solve problems. Rather, he's someone who got an important + academic title who is treated like a demi-god because he knows (or should know) what's a differential + system and how can be solved but &#8212; sometimes &#8212; doesn't know how to use it.</p> + <p>But he's an Engineer, and he can find work when others can't.</p> + <p>To explain this concept to non-Italian, I can summarize all this with the following:</p> + <p>In Italy Academic (Skool) Titles rulez &#8211; You ain't got none? You ain't nothin' coz I + got one and I own you.</p> + <p>And that's that. In Italy knowledge is dead. (This is an exaggeration, but please try to get my point). + </p> + <p>If you need to be competent in something, when you're working you'll have to do a practical + course (even paying for it yourself) if some &#8220;knowledge&#8221; is needed. If there's no risk + that things can blow up, you can remain ignorant.</p> -</section> -<section class="section"> -<header><h1 id="h_5" class="toc">The Vanishing Cheshire Cat</h1></header> -<p>Up to today I could leave with it, I knew that abroad the situation was hopefully different, but I started to cope with the fact that I would have got my B. Sc. and in addition I knew more stuff than some of the others who got the degree at the same time. A few months ago I had just a few exams left and I started going to the lab for my thesis project, with a friend of mine.</p> -<p>At that point &#8212; oddly enough &#8212; I was told to develop an application in Java, using some libraries, and actually make something fully functional and (somewhat) useful. I couldn&#8217;t believe it! I was happy on one side, and angry on the other, because <span class="caps">NOBODY</span> ever taught us about Java or about creating an useful application.</p> -<p>The Ph.D. Student who was appointed to help us with the project told us: &#8220;That&#8217;s the way it works, it&#8217;s normal that you don&#8217;t know Java, but you know a bit of C++, and now it&#8217;s time to research&#8221;. That was again very shocking: it was the first time that someone ever told me something like this, and in the end we agreed on the project.</p> -<p>Despite the fact we had to implement some new features and test them relatively at the last minute, we succeeded in developing the program. In particular, I actually played an important part being the one who actually researched something on Java already, and knew more about programming.</p> -<p>Oddly enough, my collegue would have graduated with a higher mark than me, even if he originally thought that &#8220;<span class="caps">SSH</span>&#8221; was nothing but a sound used to shut people up and that <span class="caps">HTML</span> was a proprietary standard introduced by Microsoft having something to do with web pages. If you&#8217;re reading all this mate, don&#8217;t get angry at me: I have nothing against you, I just hate the System, as usual.</p> -<p>He still probabally thinks that POP3 is something like the name of a band and that a shell can be found only at the sea. Mate, it&#8217;s not your fault, don&#8217;t blame me if I say this, blame the System!</p> -<p>I mean, I don&#8217;t consider myself an expert, but at least I&#8217;m better than that. I met students, at uni, who haven&#8217;t the faintest idea of what a sever was. And that&#8217;s pretty sad, if you ask me.</p> -<p>Let&#8217;s now come to the end of this apparently endless flow of thoughts: I still had an exam to pass in order to get the degree. Such exam counts 3/180 of the whole stuff we had to study in these three years (it is literally quantified like this on paper), and it&#8217;s about Digital Controls. Cool, you may think, but it actually means <span class="caps">MORE</span> mathematical models to solve complex(?) situations, more theorems and other crap, even if &#8212; I admit &#8212; I had to take exams worse than this one.</p> -<p>I admit I constantly underestimated the exam and took it various times without passing it: &#8220;it&#8217;s so small, I&#8217;ll have to pass it eventually&#8221;.</p> -<p>This was just the way of thinking they made us adopt, nothing more, nothing less.</p> -<p>I was quite busy testing my program and writing the thesis in this period, although we were literally told not to worry too much about it: &#8220;just google a bit on the net, copy and paste, and change some words if you feel guilty&#8230;&#8221;</p> -<p>To the guy who told me to do so: it&#8217;s just an example that is bad to read, but it&#8217;s true, you can&#8217;t deny it. I don&#8217;t blame you, because you&#8217;ve really taught me a lot about working on &#8220;proper&#8221; projects (and this is <span class="caps">NOT</span> sarcastic, really), I blame the System.</p> -<p>In the meantime I spent days running around here and there trying to sort out all the bureaucracy necessary to have all the papers ready for my degree, and I also talked to the professor who commissioned the project: he&#8217;s by far the most helpful and altruistic professor I&#8217;ve ever met, and obviously offered his complete availability for helping<br /> -us for the preparation of the degree.</p> -<p>I just needed to pass my last exam. It was the last one, not as complex as others I took, and this time I studied more than the previous times&#8230;</p> -<p>I didn&#8217;t pass it.</p> -<p>I don&#8217;t blame the professor, because probably he&#8217;s the only one who&#8217;s normal in the whole lot: he&#8217;s like me, I think, because I suspect he&#8217;s aware that abroad students don&#8217;t cheat and professors are not &#8220;flexible&#8221; on marks. I got 12/30, and I didn&#8217;t pass, that was it, I didn&#8217;t know his subject enough and he didn&#8217;t feel he had to help me to get the degree at all. And he&#8217;s right. I can&#8217;t blame him, but I DO blame such a &#8220;flexible&#8221; system which in the end is totally absurd. I learnt the hard way that I shouldn&#8217;t have &#8220;trusted&#8221; the Italian Way, because it has flaws.</p> -<p>Oddly enough, people who can&#8217;t even connect a network cable get their B.Sc., and all I get after spending months learning useful things and developing is just a load of B.S.</p> -<p>I learnt my lesson and I&#8217;ll probably re-take the exam, pass it, and maybe get the degree: my collegue and friend just emailed me telling me that I <span class="caps">HAVE</span> to help him doing the missing chapters of the thesis because he can&#8217;t write them, he&#8217;s not good at writing stuff, and doesn&#8217;t know what to write either. He&#8217;ll get his B.Sc. on September 23rd, provided that I actually decide to help him.</p> -<p>I hope people who read this can understand my frustration apart from blaming me for being &#8220;lazy&#8221; when it came to exams and expecting help when technically I didn&#8217;t deserve it. I probably won&#8217;t win the nobel prize or get rich like those two american students who own the most profitable Internet business ever conceivable. I&#8217;m not as special, and I don&#8217;t deserve anything special, and I never dreamt about it.</p> -<p>All I dreamt was being able to learn, and do something useful. It looks like it will remain just a dream, here in Italy.</p> + </section> + <section class="section"> + <header> + <h1 id="h_5" class="toc">The Vanishing Cheshire Cat</h1> + </header> + <p>Up to today I could leave with it, I knew that abroad the situation was hopefully different, but I started to + cope with the fact that I would have got my B. Sc. and in addition I knew more stuff than some of the others + who got the degree at the same time. A few months ago I had just a few exams left and I started going to the + lab for my thesis project, with a friend of mine.</p> + <p>At that point &#8212; oddly enough &#8212; I was told to develop an application in Java, using some + libraries, and actually make something fully functional and (somewhat) useful. I couldn't believe it! + I was happy on one side, and angry on the other, because <span class="caps">NOBODY</span> ever taught us + about Java or about creating an useful application.</p> + <p>The Ph.D. Student who was appointed to help us with the project told us: &#8220;That's the way it + works, it's normal that you don't know Java, but you know a bit of C++, and now it's time + to research&#8221;. That was again very shocking: it was the first time that someone ever told me something + like this, and in the end we agreed on the project.</p> + <p>Despite the fact we had to implement some new features and test them relatively at the last minute, we + succeeded in developing the program. In particular, I actually played an important part being the one who + actually researched something on Java already, and knew more about programming.</p> + <p>Oddly enough, my collegue would have graduated with a higher mark than me, even if he originally thought that + &#8220;<span class="caps">SSH</span>&#8221; was nothing but a sound used to shut people up and that <span + class="caps">HTML</span> was a proprietary standard introduced by Microsoft having something to do with + web pages. If you're reading all this mate, don't get angry at me: I have nothing against you, I + just hate the System, as usual.</p> + <p>He still probabally thinks that POP3 is something like the name of a band and that a shell can be found only + at the sea. Mate, it's not your fault, don't blame me if I say this, blame the System!</p> + <p>I mean, I don't consider myself an expert, but at least I'm better than that. I met students, at + uni, who haven't the faintest idea of what a sever was. And that's pretty sad, if you ask me. + </p> + <p>Let's now come to the end of this apparently endless flow of thoughts: I still had an exam to pass in + order to get the degree. Such exam counts 3/180 of the whole stuff we had to study in these three years (it + is literally quantified like this on paper), and it's about Digital Controls. Cool, you may think, but + it actually means <span class="caps">MORE</span> mathematical models to solve complex(?) situations, more + theorems and other crap, even if &#8212; I admit &#8212; I had to take exams worse than this one.</p> + <p>I admit I constantly underestimated the exam and took it various times without passing it: &#8220;it's + so small, I'll have to pass it eventually&#8221;.</p> + <p>This was just the way of thinking they made us adopt, nothing more, nothing less.</p> + <p>I was quite busy testing my program and writing the thesis in this period, although we were literally told + not to worry too much about it: &#8220;just google a bit on the net, copy and paste, and change some words + if you feel guilty&#8230;&#8221;</p> + <p>To the guy who told me to do so: it's just an example that is bad to read, but it's true, you + can't deny it. I don't blame you, because you've really taught me a lot about working on + &#8220;proper&#8221; projects (and this is <span class="caps">NOT</span> sarcastic, really), I blame the + System.</p> + <p>In the meantime I spent days running around here and there trying to sort out all the bureaucracy necessary + to have all the papers ready for my degree, and I also talked to the professor who commissioned the project: + he's by far the most helpful and altruistic professor I've ever met, and obviously offered his + complete availability for helping<br /> + us for the preparation of the degree.</p> + <p>I just needed to pass my last exam. It was the last one, not as complex as others I took, and this time I + studied more than the previous times&#8230;</p> + <p>I didn't pass it.</p> + <p>I don't blame the professor, because probably he's the only one who's normal in the whole + lot: he's like me, I think, because I suspect he's aware that abroad students don't cheat + and professors are not &#8220;flexible&#8221; on marks. I got 12/30, and I didn't pass, that was it, I + didn't know his subject enough and he didn't feel he had to help me to get the degree at all. + And he's right. I can't blame him, but I DO blame such a &#8220;flexible&#8221; system which in + the end is totally absurd. I learnt the hard way that I shouldn't have &#8220;trusted&#8221; the + Italian Way, because it has flaws.</p> + <p>Oddly enough, people who can't even connect a network cable get their B.Sc., and all I get after + spending months learning useful things and developing is just a load of B.S.</p> + <p>I learnt my lesson and I'll probably re-take the exam, pass it, and maybe get the degree: my collegue + and friend just emailed me telling me that I <span class="caps">HAVE</span> to help him doing the missing + chapters of the thesis because he can't write them, he's not good at writing stuff, and + doesn't know what to write either. He'll get his B.Sc. on September 23rd, provided that I + actually decide to help him.</p> + <p>I hope people who read this can understand my frustration apart from blaming me for being &#8220;lazy&#8221; + when it came to exams and expecting help when technically I didn't deserve it. I probably won't + win the nobel prize or get rich like those two american students who own the most profitable Internet + business ever conceivable. I'm not as special, and I don't deserve anything special, and I never + dreamt about it.</p> + <p>All I dreamt was being able to learn, and do something useful. It looks like it will remain just a dream, + here in Italy.</p> -</section> + </section> </section>
M contents/articles/akelos-interview.htmlcontents/articles/akelos-interview.html

@@ -6,7 +6,7 @@ tags: "php|rails|cakephp|frameworks"

----- <p>I <a href=/articles/34">already</a> <a href=/articles/38">covered</a> the Akelos <span class="caps">PHP</span> framework in - the past, but for those who don&#8217;t know it, Akelos seems to be one of the few <a + the past, but for those who don't know it, Akelos seems to be one of the few <a href="/articles/rails-inspired-php-frameworks">Rails-inspired <span class="caps">PHP</span> frameworks</a> still worth mentioning, besides CakePHP and Symphony of course.</p> <p>I recently has a look at their recently-relaunched <a href="http://www.akelos.org/">community website</a> and I

@@ -46,7 +46,7 @@ <p>After that point, whenever I had a problem to solve while coding my customers applications I turned to Rails and they

usually had the most elegant solution available. So I did like the idea of digging into Rails code to learn more Ruby and bringing Rails magic to the <span class="caps">PHP</span> world. It also helped the fact that Rails inline documentation is excellent so it could be easily adapted for Akelos.</p> -<h4><em>What&#8217;s new since last time I posted about Akelos?</em></h4> +<h4><em>What's new since last time I posted about Akelos?</em></h4> <p>The biggest change is the direction that the project has taken. Until now we have not dedicated time to promote Akelos, we just used it for our internal projects and we have been adding features as needed without a fixed roadmap or advocacy.</p>

@@ -87,13 +87,13 @@ <p>A standalone webserver like WebBrick, <span class="caps">RJS</span>, has and belongs to many through associations,

string/number/date extensions and Active Resource.</p> <p>Ruby-powered features like modules, runtime class overriding and blocks will never be available in Akelos.</p> <p>Scaffolds in Akelos work by generating code, I found quite useless to enable $scaffold = true; and have magic - functionality that you can&#8217;t modify, so I decided not to invest my time on that one.</p> + functionality that you can't modify, so I decided not to invest my time on that one.</p> <h4><em>I noticed quite a few generators available for Akelos, do they work as a Rails developer may expect them to work?</em></h4> <p>The ones that are available do pretty much the same as in RoR.</p> <h4><em>How does Akelos compare to other similar <span class="caps">PHP</span> frameworks like, say, CakePHP? What - features does Akelos offer which Cake doesn&#8217;t offer and vice-versa?</em></h4> -<p>I&#8217;m not aware of Cake&#8217;s functionalities. At the time I started porting Rails my feelings about CakePHP + features does Akelos offer which Cake doesn't offer and vice-versa?</em></h4> +<p>I'm not aware of Cake's functionalities. At the time I started porting Rails my feelings about CakePHP were that they missed the simplicity point in favor of architectural discussions that lead to confusing code, but that was long ago.</p> <p>Akelos (and Rails) do not implement <span class="caps">ACL</span> like Cake does, as that is a business logic

@@ -106,7 +106,7 @@ href="http://en.wikipedia.org/wiki/Optimistic_concurrency_control">optimistic locking</a>, <a

href="http://www.martinfowler.com/eaaCatalog/lazyLoad.html">lazy loading</a>, <a href="http://www.martinfowler.com/eaaCatalog/singleTableInheritance.html">table inheritance</a>, counters, automatic transactions, really powerful validations, calculations&#8230;, and I think most of these advanced - features are still missing on Cake, but maybe I&#8217;m wrong.</p> + features are still missing on Cake, but maybe I'm wrong.</p> <h4><em>Did you include unit tests for all the framework classes?</em></h4> <p>The main components are fully unit tested, and no new code or patch gets into the trunk without unit tests.</p> <h4><em>Did you or someone do any performance test or benchmarks on Akelos already?</em></h4>

@@ -114,7 +114,7 @@ <p>During the last month a lot of code was refactored to improve performance with the help of <a

href="http://xdebug.org/">Xdebug</a>, <a href="http://kcachegrind.sourceforge.net/">Kcachegrind</a> and <a href="http://httpd.apache.org/docs/2.0/programs/ab.html">ab</a>. We significantly improved the performance in one of our most complex intranet applications, a <a href="http://www.basecamphq.com/">basecamp</a>-like system.</p> -<p>Akelos also implements caching at many levels, so it&#8217;s very easy to increase performance as we did with a new +<p>Akelos also implements caching at many levels, so it's very easy to increase performance as we did with a new <span class="caps">CMS</span> that can handle +200 requests per second using <a href="http://www.apache.org/">Apache</a> in a cheap shared server environment. </p>

@@ -123,7 +123,7 @@ framework?</em></h4>

<p><a href="http://www.akelos.org/docs/tutorials/booklink#mvc">Akelos <span class="caps">MVC</span> implementation</a> and <a href="http://www.akelos.org/docs/tutorials/booklink#workflow">workflow</a> are really easy to understand.</p> <p>In Akelos all the methods and interfaces are thoroughly selected, so whenever you need to do something you just need - to type what you think. Default options are selected with care so you don&#8217;t need to set any configuration + to type what you think. Default options are selected with care so you don't need to set any configuration unless you want to modify the default behavior.</p> <p>Coding multilingual applications, building complex relationships within models, distributing databases changes within your development team, building Ajax interfaces, unit testing your code and many other common tasks for <span

@@ -142,7 +142,7 @@ href="http://www.3ev.com/">3rd Eye Vision (3ev)</a> is using Akelos. </p>

<p>The <a href="http://www.akelos.org/">Akelos.org</a> site is running a <span class="caps">CMS</span> named Editam which we will release as Open Source in a near future.</p> <p>Some small websites like <a href="http://www.fundaciocaixacarlet.com/">Fundacio Caixa Carlet</a> and many - intranet/extranet sites that we&#8217;ve been coding during the last 2 years.</p> + intranet/extranet sites that we've been coding during the last 2 years.</p> <h4><em>What are your future plans for Akelos? Anything new on the way?</em></h4> <p>A new manual, and a better <span class="caps">API</span> interface are the main priorities right now.</p> <p>Continuing bringing Rails functionality as needed.</p>
M contents/articles/apache2-upgrade.htmlcontents/articles/apache2-upgrade.html

@@ -4,22 +4,39 @@ content-type: article

timestamp: 1198132860 tags: "website|rails" ----- -<p>Yesterday I got a rather annoying early Christmas present: when visiting my site, I noticed that the raw source code of my dispatch.fcgi file (yes, I&#8217;m on shared hosting with FastCGI, for now) was displayed &#8220;as it is&#8221; instead of being interpreted.</p> -<p>After the initial moment of anger and stress (I immediately realized it was BlueHost&#8217;s fault, not mine), I opened two tickets and went to bed, hoping to see everything solved in the morning.</p> -<p>Unluckily it wasn&#8217;t the case, so I posted on BlueHost forum trying to be as polite as possible complaining because the issue wasn&#8217;t being dealt with. It turns out that for such issues you&#8217;re supposed to use the &#8220;Live Chat&#8221; feature instead of the tickets, so that&#8217;s what I did.</p> -<p>After a quick chat with &#8220;Christian&#8221;, it turns out that BlueHost decided to perform a server upgrade &#8220;silently&#8221; upgrading to Apache2, PHP5, MySQL4.1, etc. etc.<br /> -Cool, pity that nobody told me that!</p> -<p>I was expecting some sort of <span class="caps">PHP</span> upgrade (not that I care like that), which was supposed to happen according to the last BlueHost newsletter:</p> +<p>Yesterday I got a rather annoying early Christmas present: when visiting my site, I noticed that the raw source code + of my dispatch.fcgi file (yes, I'm on shared hosting with FastCGI, for now) was displayed &#8220;as it is&#8221; + instead of being interpreted.</p> +<p>After the initial moment of anger and stress (I immediately realized it was BlueHost's fault, not mine), I opened two + tickets and went to bed, hoping to see everything solved in the morning.</p> +<p>Unluckily it wasn't the case, so I posted on BlueHost forum trying to be as polite as possible complaining because + the issue wasn't being dealt with. It turns out that for such issues you're supposed to use the &#8220;Live + Chat&#8221; feature instead of the tickets, so that's what I did.</p> +<p>After a quick chat with &#8220;Christian&#8221;, it turns out that BlueHost decided to perform a server upgrade + &#8220;silently&#8221; upgrading to Apache2, PHP5, MySQL4.1, etc. etc.<br /> + Cool, pity that nobody told me that!</p> +<p>I was expecting some sort of <span class="caps">PHP</span> upgrade (not that I care like that), which was supposed to + happen according to the last BlueHost newsletter:</p> <blockquote> -<p><em>&#8220;To alleviate any issues in the future with certain scripts that only run on one<br /> -version of <span class="caps">PHP</span> we have developed the ability to run PHP4 and PHP5 on the same server<br /> -simultaneously. This will be rolled out to all users in the next couple of weeks. Some<br /> -servers already have this ability while most will see it in the next two weeks.&#8221;</em></p> + <p><em>&#8220;To alleviate any issues in the future with certain scripts that only run on one<br /> + version of <span class="caps">PHP</span> we have developed the ability to run PHP4 and PHP5 on the same + server<br /> + simultaneously. This will be rolled out to all users in the next couple of weeks. Some<br /> + servers already have this ability while most will see it in the next two weeks.&#8221;</em></p> </blockquote> -<p>But&#8230; hang on? Does it say anything about migrating to Apache2? I don&#8217;t think so! What&#8217;s worse, is that quite a few things changed with Apache2, in particular the way FastCGI handlers are declared:</p> -<div class='text'><pre><code># Apache 1.3: +<p>But&#8230; hang on? Does it say anything about migrating to Apache2? I don't think so! What's worse, is that quite a + few things changed with Apache2, in particular the way FastCGI handlers are declared:</p> +<div class='text'> + <pre><code># Apache 1.3: AddHandler fastcgi-script .fcgi # Apache 2: -AddHandler fcgid-script .fcgi</code></pre></div><p>See? Different. This is due to the fact that <a href="http://wiki.rubyonrails.org/rails/pages/Debian+mod_fastcgi+Notes"><code>mod_fcgid</code> is used instead of <code>mod_fastcgi</code> on Apache 2</a>.</p> -<p>The fix was easy, of course, and now my site is up and running again (and actually running faster)&#8230; but, I wonder, why the hell wasn&#8217;t I informed? Is it acceptable? It sounds like I might end up on a <span class="caps">VPS</span> sooner than expected, unless BlueHost doesn&#8217;t roll out some new exciting feature soon, as I think it might&#8230;</p> +AddHandler fcgid-script .fcgi</code></pre> +</div> +<p>See? Different. This is due to the fact that <a + href="http://wiki.rubyonrails.org/rails/pages/Debian+mod_fastcgi+Notes"><code>mod_fcgid</code> is used instead + of <code>mod_fastcgi</code> on Apache 2</a>.</p> +<p>The fix was easy, of course, and now my site is up and running again (and actually running faster)&#8230; but, I + wonder, why the hell wasn't I informed? Is it acceptable? It sounds like I might end up on a <span + class="caps">VPS</span> sooner than expected, unless BlueHost doesn't roll out some new exciting feature soon, + as I think it might&#8230;</p>
M contents/articles/back-from-holiday.htmlcontents/articles/back-from-holiday.html

@@ -4,17 +4,17 @@ content-type: article

timestamp: 1188442740 tags: "personal|website|writing" ----- -<p>I&#8217;m back. I was so eager to go on holiday that I didn&#8217;t even bother writing a post about it, too bad. I - actually when on holiday for a week but I thought I&#8217;d take three weeks off from my blog duties in favor of - laziness and relax, but unfortunately my laptop decided to go wrong as well, so I didn&#8217;t actually manage to +<p>I'm back. I was so eager to go on holiday that I didn't even bother writing a post about it, too bad. I + actually when on holiday for a week but I thought I'd take three weeks off from my blog duties in favor of + laziness and relax, but unfortunately my laptop decided to go wrong as well, so I didn't actually manage to relax that much.</p> -<p>Now everything is fine. I still have to send in my laptop for assistance but it&#8217;s usable at least, and I +<p>Now everything is fine. I still have to send in my laptop for assistance but it's usable at least, and I finally found the time (and the money) to buy a desktop PC. I always wanted to build my own, actually, but in the - end I decided to opt for a pre-made Fujitsu Siemens, mainly for economic reasons and time constraints. I won&#8217;t - publish the specs, but it&#8217;s alright for me and my fianc&eacute;e.</p> + end I decided to opt for a pre-made Fujitsu Siemens, mainly for economic reasons and time constraints. I won't + publish the specs, but it's alright for me and my fianc&eacute;e.</p> <p>So what now? Well&#8230; the usual: more posts will soon be added to the Simply On Rails series, a Ruby-related article is on the way (it will be edited by the excellent <a href="http://www.cyberarmy.net">CyberArmy</a> Publication Editing Staff this time), I may venture in a site upgrade whenever they decide to release version 4.2 of - Typo which is supposed to be imminent and I&#8217;ll eventually complete another pet project of mine, but that will + Typo which is supposed to be imminent and I'll eventually complete another pet project of mine, but that will take more time&#8230;</p> <p>Stay tuned.</p>
M contents/articles/cakephp-overview.htmlcontents/articles/cakephp-overview.html

@@ -4,5 +4,11 @@ content-type: article

timestamp: 1148997020 tags: "cakephp|review|tutorial" ----- -<p><em>&#8220;There are many frameworks available for the <span class="caps">PHP</span> programming language nowadays, and especially a lot of <span class="caps">RAD</span> (Rapid Application Development) frameworks which aim to make web development faster, less tedious and more organized. CakePHP was one of the first frameworks to port the <span class="caps">RAD</span> philosophy &#8211; which became so popular after Ruby on Rails &#8211; to the <span class="caps">PHP</span> programming language. CakePHP v1.0 is now one of the most popular and intuitive solutions for <span class="caps">PHP</span> programming, let&#8217;s discover why&#8230;&#8221;</em></p> -<p><a href="http://hades.phparch.com/ceres/public/article/index.php/art::cakephp::overview">Read the full article</a> on <a href="http://hades.phparch.com/artemis/main/">php|architect article repository</a></p> +<p><em>&#8220;There are many frameworks available for the <span class="caps">PHP</span> programming language nowadays, + and especially a lot of <span class="caps">RAD</span> (Rapid Application Development) frameworks which aim to + make web development faster, less tedious and more organized. CakePHP was one of the first frameworks to port + the <span class="caps">RAD</span> philosophy &#8211; which became so popular after Ruby on Rails &#8211; to the + <span class="caps">PHP</span> programming language. CakePHP v1.0 is now one of the most popular and intuitive + solutions for <span class="caps">PHP</span> programming, let's discover why&#8230;&#8221;</em></p> +<p><a href="http://hades.phparch.com/ceres/public/article/index.php/art::cakephp::overview">Read the full article</a> on + <a href="http://hades.phparch.com/artemis/main/">php|architect article repository</a></p>
M contents/articles/concatenative-020.htmlcontents/articles/concatenative-020.html

@@ -4,28 +4,47 @@ content-type: article

timestamp: 1240126920 tags: "ruby|concatenative" ----- -<p>Version 0.2.0. of the <a href="/concatenative">Concatenative</a> <span class="caps">DSL</span> has been <a href="http://rubyforge.org/frs/?group_id=8068&amp;release_id=33575">released</a>.</p> +<p>Version 0.2.0. of the <a href="/concatenative">Concatenative</a> <span class="caps">DSL</span> has been <a + href="http://rubyforge.org/frs/?group_id=8068&amp;release_id=33575">released</a>.</p> <p>Here are some highlights from the changelog:</p> <ul> <li>Implemented new combinators: - <ul> - <li>binrec</li> - <li>split</li> - <li>twodip</li> - <li>threedip</li> - </ul></li> + <ul> + <li>binrec</li> + <li>split</li> + <li>twodip</li> + <li>threedip</li> + </ul> + </li> <li>Performance improvements: - <ul> - <li>Stack is never copied.</li> - <li>No symbol/string conversion when processing words.</li> - </ul></li> + <ul> + <li>Stack is never copied.</li> + <li>No symbol/string conversion when processing words.</li> + </ul> + </li> <li>Pseudo-namespace support (e.g. :kernel/:while and :math/:factorial)</li> <li>~ and &lt;= operators to unquote and define words, respectively.</li> <li>No more uppercase words!</li> </ul> -<p>Oddly enough, I realized that it is possible to defined methods named after reserved words like &#8220;while&#8221; or &#8220;if&#8221;, so now all the concatenative words (combinators) in <code>kernel.rb</code> are now defined <em>without</em> a leading undersore. Similarly, there&#8217;s no real need to use <span class="caps">UPPERCASE</span> symbols, so as a result, method lookup is significantly faster and will use less resources.</p> -<p>Here&#8217;s how the lookup works. Say you have the following program:</p> -<div class='ruby'><pre><code>[[1,2,3], [4.5.6], :concat]</code></pre></div><p>If <code>:concat</code> has been defined by the user (<code>:concat &lt;= [...]</code>), that definition will be used, otherwise the <code>Concatenative::Kernel</code> combinator <code>concat</code> will be called. If you want to use the corresponding Ruby method, all you have to do is specifying the arity explicitly using the <code>|</code> operator.</p> -<p>To remove any ambiguity, it is now possible to specify the <em>namespace</em> of a word explicitly, e.g. :kernel/:concat or :ruby/concat. The <code>/</code> operator simply concatenates the two symbols together (<code>:"kernel/concat"</code>) and sets the namespace (<code>:kernel</code>) and name (<code>:concat</code>) of the new symbol. <code>:kernel</code> and <code>:ruby</code> are not meant to be used when defining new words, but you can use anything else you like, for example :math/:factorial or :local/:a, etc.</p> -<p>As I pointed out in the <a href="/articles/concatenative-programming-in-ruby">first article</a> about concatenative, even with the new performance improvement a concatenative program still runs slower than a standard Ruby program, but at least now you won&#8217;t run out of stack space (the <em>Ruby</em> stack, in this case) too soon.</p> -<p>If you have any issues to report, feature requests, etc., feel free to use <a href="http://github.com/h3rald/concatenative/issues">GitHub</a> to do so.</p> +<p>Oddly enough, I realized that it is possible to defined methods named after reserved words like &#8220;while&#8221; + or &#8220;if&#8221;, so now all the concatenative words (combinators) in <code>kernel.rb</code> are now defined + <em>without</em> a leading undersore. Similarly, there's no real need to use <span class="caps">UPPERCASE</span> + symbols, so as a result, method lookup is significantly faster and will use less resources.</p> +<p>Here's how the lookup works. Say you have the following program:</p> +<div class='ruby'> + <pre><code>[[1,2,3], [4.5.6], :concat]</code></pre> +</div> +<p>If <code>:concat</code> has been defined by the user (<code>:concat &lt;= [...]</code>), that definition will be + used, otherwise the <code>Concatenative::Kernel</code> combinator <code>concat</code> will be called. If you want to + use the corresponding Ruby method, all you have to do is specifying the arity explicitly using the <code>|</code> + operator.</p> +<p>To remove any ambiguity, it is now possible to specify the <em>namespace</em> of a word explicitly, e.g. + :kernel/:concat or :ruby/concat. The <code>/</code> operator simply concatenates the two symbols together + (<code>:"kernel/concat"</code>) and sets the namespace (<code>:kernel</code>) and name (<code>:concat</code>) of the + new symbol. <code>:kernel</code> and <code>:ruby</code> are not meant to be used when defining new words, but you + can use anything else you like, for example :math/:factorial or :local/:a, etc.</p> +<p>As I pointed out in the <a href="/articles/concatenative-programming-in-ruby">first article</a> about concatenative, + even with the new performance improvement a concatenative program still runs slower than a standard Ruby program, + but at least now you won't run out of stack space (the <em>Ruby</em> stack, in this case) too soon.</p> +<p>If you have any issues to report, feature requests, etc., feel free to use <a + href="http://github.com/h3rald/concatenative/issues">GitHub</a> to do so.</p>
M contents/articles/concatenative-programming-in-ruby.htmlcontents/articles/concatenative-programming-in-ruby.html

@@ -6,23 +6,24 @@ tags: "ruby|concatenative|programming"

----- <p>A while ago, I sat down examining a few <a href="/articles/10-programming-languages">alternative programming languages</a> I might decide to learn someday. Each of those languages has its own peculiarities, and I - didn&#8217;t choose them randomly, I chose them based on their popularity, power, paradigm and how actively they are + didn't choose them randomly, I chose them based on their popularity, power, paradigm and how actively they are developed.</p> <p>I included <a href="http://factorcode.org/">Factor</a> as the only representative for <em>concatenative programming</em>, an interesting way to write programs, but seldom used in &#8220;recent&#8221; languages (except for Factor and a few others).</p> <h3>The Joy of concatenative programming</h3> -<p>If you have absolutely no clue on what I&#8217;m talking about, you should consider looking at the home page for the +<p>If you have absolutely no clue on what I'm talking about, you should consider looking at the home page for the <a href="http://www.latrobe.edu.au/philosophy/phimvt/joy.html">Joy Programming Language</a>, or maybe just the <a href="http://www.latrobe.edu.au/philosophy/phimvt/joy/j00ovr.html">overview</a>: it should be enough to tikle - your curiosity.</p> + your curiosity. +</p> <p>Joy is often considered the <em>canonical</em> concatenative programming language: a basic &mdash;but working&mdash; implementation of a simple programming language to illustrate the fundamentals of concatenative programming. Joy looks like this:</p> <p><code>2 3 + dup *</code></p> <p>This simple programs computes the sum of 2 and 3, pushes it on the stack, duplicates it (using the <code>dup</code> combinator) and then multiplies the two values, obtaining 25 as a result.</p> -<p>Let&#8217;s slow down a second. Here&#8217;s what happens, exactly:</p> +<p>Let's slow down a second. Here's what happens, exactly:</p> <table> <tr> <th>Element entered </th>

@@ -49,7 +50,7 @@ <td> * </td>

<td> <sup class="footnote" id="fnr25"><a href="#fn25">25</a></sup> </td> </tr> </table> -<p>Got it? Let&#8217;s take it one step further. When you enter <code>dup</code> and then <code>*</code>, you are +<p>Got it? Let's take it one step further. When you enter <code>dup</code> and then <code>*</code>, you are effectively computing the square of a number, so we can define the function <code>square</code> simply as:</p> <p><code>square == dup *</code></p> <p>In Ruby, this would be:</p>

@@ -58,9 +59,9 @@ <pre><code>def square(x)

x*x end</code></pre> </div> -<p>What&#8217;s unusual here? &mdash; Simple, there are no <em>variables</em> involved. Joy doesn&#8217;t need any +<p>What's unusual here? &mdash; Simple, there are no <em>variables</em> involved. Joy doesn't need any explicit variable or <em>formal parameters</em> of any sort.</p> -<p>There&#8217;s more. Take the following code:</p> +<p>There's more. Take the following code:</p> <p><code>[1 2 3 4] [dup *] map</code></p> <p>The <code>map</code> combinator expects a list and a <em>quoted program</em> (the same one used to compute the square) and produces a new list containing the result of that program applied to each element of the original list.

@@ -68,9 +69,9 @@ Basically the equivalent of:</p>

<div class='ruby'> <pre><code>[1,2,3,4].map { |e| e*e }</code></pre> </div> -<p>Do you notice anything different? &mdash; Yes, Joy doesn&#8217;t need blocks or lambdas either, it uses <em>quoted +<p>Do you notice anything different? &mdash; Yes, Joy doesn't need blocks or lambdas either, it uses <em>quoted programs</em> instead, which are nothing but slightly fancier lists (or arrays, as you like).</p> -<p>Let&#8217;s recap then, Joy doesn&#8217;t need of:</p> +<p>Let's recap then, Joy doesn't need of:</p> <ul> <li>lambda functions or blocks (quotation does the trick)</li> <li>explicit parameters (everything you need is on the stack)</li>

@@ -81,18 +82,18 @@ <p>I would consider this one of the best examples of <em>programming minimalism</em>: an incredibly simple syntax, a

very small set of rules, but a good deal of power.</p> <h3>Ruby objects on the stack</h3> <p>After reading about Joy, I realized that implementing something similar in Ruby would be an interesting mini-project - (let&#8217;s say a week of lunch breaks) to understand more about concatenative programming. It would also be + (let's say a week of lunch breaks) to understand more about concatenative programming. It would also be pointless, too: a stack-based programming language implemented on top of one of the most high-level programming - languages you can find isn&#8217;t going to be fast, is it? Nevertheless, it would still be interesting.</p> + languages you can find isn't going to be fast, is it? Nevertheless, it would still be interesting.</p> <p>Ruby offers everything you need to build a Joy-like <span class="caps">DSL</span>:</p> <ul> <li>You can use arrays as &#8230;arrays, but also as quoted programs, and to model the stack itself.</li> <li>You can use integers, strings, etc. as themselves</li> - <li>You can use Symbols as functions (we&#8217;ll get to this in a minute)</li> + <li>You can use Symbols as functions (we'll get to this in a minute)</li> </ul> <p>If you think about the following expression in postfix notation:</p> <p><code>2 2 +</code></p> -<p>We <em>could</em> translate it into infix notation (<code>2 + 2</code>), because Ruby supports it, but it&#8217;s not +<p>We <em>could</em> translate it into infix notation (<code>2 + 2</code>), because Ruby supports it, but it's not general enough. What you could do is this though:</p> <div class='ruby'> <pre><code>2.send(:+, 2)</code></pre>

@@ -108,13 +109,13 @@ and may have 0 or more parameters. Take the following then:</p>

<div class='ruby'> <pre><code>[2, 2, :+]</code></pre> </div> -<p>It&#8217;s not too different from Joy, and it&#8217;s still Ruby code. All you have to do is use something to do the +<p>It's not too different from Joy, and it's still Ruby code. All you have to do is use something to do the following:</p> <ul> <li>Take an array, and examine each item: <ul> - <li>If it&#8217;s an object (non-Symbol), then push it on top of the stack.</li> - <li>If it&#8217;s a Symbol, then do something different, i.e.: + <li>If it's an object (non-Symbol), then push it on top of the stack.</li> + <li>If it's a Symbol, then do something different, i.e.: <ul> <li>Find its receiver and its parameters and call a method.</li> <li>Manipulate something on the stack.</li>

@@ -123,20 +124,22 @@ </li>

</ul> </li> </ul> -<p>In this case, we have to find :+&#8217;s receiver and its parameter and we&#8217;re sorted.</p> -<p>Unfortunately Ruby&#8217;s <code>arity</code> method isn&#8217;t that reliable. For example: +<p>In this case, we have to find :+'s receiver and its parameter and we're sorted.</p> +<p>Unfortunately Ruby's <code>arity</code> method isn't that reliable. For example: <code>"test".instance_method(:sub).arity</code> returns -1, while it should return &#8220;2&#8221; to be useful. So - we have no choice but find a way to pass the method&#8217;s arity explicitly, in some cases.</p> + we have no choice but find a way to pass the method's arity explicitly, in some cases. +</p> <p>For example like this:</p> <div class='ruby'> <pre><code>["Ciao, Fabio", /Ciao/, "Hello", :sub|2]</code></pre> </div> -<p>If we define a | operator for the Symbol class, it&#8217;s not too bad after all. It&#8217;s heavy, but in this way +<p>If we define a | operator for the Symbol class, it's not too bad after all. It's heavy, but in this way we can use <em>any</em> Ruby method in postfix notation.</p> <h3>Introducing the Concatenative Ruby <span class="caps">DSL</span></h3> <p><a href="/concatenative">Concatenative</a> is a simple Ruby <span class="caps">DSL</span> for concatenative programming. You can write concatenative programs inside ordinary Ruby arrays and execute them by calling either - <code>Array#execute</code> or <code>Kernel#concatenate</code>, like this:</p> + <code>Array#execute</code> or <code>Kernel#concatenate</code>, like this: +</p> <div class='ruby'> <pre><code>require 'concatenative'

@@ -154,14 +157,15 @@ perfectly valid Ruby code and it is equivalent to the following Joy code:</p>

<p><code> 10 [0 =] [1 +] [dup 1 -] [*] linrec </code></p> -<p>Granted, Joy looks better, but that&#8217;s the tradeoff for not writing a parser for Joy syntax, after all. <br /> +<p>Granted, Joy looks better, but that's the tradeoff for not writing a parser for Joy syntax, after all. <br /> Looking at the code above, there are a few things to keep in mind when programming with Concatenative:</p> <ul> <li>You are using Ruby arrays, so you have to use commas, at least</li> - <li>functions, operators and combinators (let&#8217;s just call them <em>words</em>) are available as Ruby symbols + <li>functions, operators and combinators (let's just call them <em>words</em>) are available as Ruby symbols </li> <li>The arity of all Ruby infix operators has been already set to &#8220;1&#8221; by concatenative using the - <code>set_arity</code> method (which simply stores the arity of a particular symbol in a constant hash)</li> + <code>set_arity</code> method (which simply stores the arity of a particular symbol in a constant hash) + </li> <li>You can specify explicit arities using the | operator (<code>:gsub|2</code>, or <code>:join|1</code>)</li> <li>Unless the arity has been specified, an arity of 0 is assumed.</li> <li>You can define your own concatenative functions using the <code>Symbol#&lt;=</code> method, which expects a

@@ -171,7 +175,7 @@ <h3>Performance issues</h3>

<p>In its current form, Concatenative can be very slow, as show the &#8220;benchmarks&#8221; provided in the /examples folder, especially if you use recursive combinators. This is understandable because everything is implemented in pure Ruby, which is totally unsuitable for low level stuff.</p> -<p>If you are interested, you are more than welcome to submit patches and suggestions to improve Concatenative&#8217;s +<p>If you are interested, you are more than welcome to submit patches and suggestions to improve Concatenative's performance, or, if you feel brave enough, you could help me create a C extension instead: things would become much faster then.</p> <p>At any rate, feel free to play with it. You can get the source from <a
M contents/articles/design-patterns-in-ruby-review.htmlcontents/articles/design-patterns-in-ruby-review.html

@@ -8,21 +8,21 @@ <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&#8217;s also smaller and + 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&#8217;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&#8217;ll soon find out.</p> -<p>What is it about? &mdash; well, design patters in the Ruby language of course. But it&#8217;s not the usual brainwash + 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? &mdash; 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&#8217;t mean the usual Dog/Cat/Horse/&lt;insert animal here&gt; classes or - juke-box simulations which don&#8217;t work at all etc. etc., I mean actual snippets from well known Ruby + code. When I say <em>real code</em> I don't mean the usual Dog/Cat/Horse/&lt;insert animal here&gt; 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&#8217;s an exception perhaps: Russ <em>did</em> include a few wild life simulations (ponds with frogs - and similar), but it&#8217;s only for your own good, and for the sake of tradition.</p> -<p>Anyhow, let&#8217;s start from the beginning&#8230;</p> + 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&#8230;</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&#8217;t find anything of overwhelming interest here. + 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, &#8220;Building better Programs with Patterns&#8221;, in which Russ does a great job in summarizing the original GoF book<sup class="footnote" id="fnr3"><a

@@ -35,12 +35,13 @@ <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&#8217;t Gonna Need It) principle<sup class="footnote" id="fnr4"><a + <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 &#8220;Ruby-only&#8221; patterns will be - examined in Part <span class="caps">III</span>, as a special treat.</p> + 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

@@ -54,16 +55,17 @@ 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.&#8221;</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&#8217;s quite a nice introduction aimed at + 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 &mdash; and I mean <em>everything</em> &mdash; is an object.</p> </blockquote> -<p>Of course Chapter 2 won&#8217;t turn you into a Ruby guru, but it definitely fulfills one of the author&#8217;s +<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> + <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>

@@ -120,31 +122,33 @@ <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&#8217;s what I&#8217;ll be reading and re-reading - every time I&#8217;m thinking about using a particular pattern in my code. As a matter of fact, these sections make + 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&#8217;re <em>supposed</em> to use a pattern to accomplish something, be aware that - <em>something nasty</em> can happen unless you&#8217;re extra careful: this, perhaps, is the true Golden Rule - conveyed throughout the whole book.</p> + 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>&lt;Pattern&gt;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&#8217;ll finally find some interesting examples taken from real world + <em>should</em> be used, you'll finally find some interesting examples taken from real world applications.<br /> By &#8220;real world application&#8221; I mean something like ActiveRecord<sup class="footnote" id="fnr7"><a href="#fn7">7</a></sup> (Observer, Command, Adapter, &#8230;), 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> + something more practical and useful than pure software architecture theories. +</p> <h4>Wrapping it Up</h4> <p>&#8220;Wrapping it Up&#8221; is the title of the last section of each chapter of Part II and <span - class="caps">III</span>. It&#8217;s basically a summary of the whole chapter and thus a useful way to recap the + 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 &#8212; - and the most important DOs and DON&#8217;Ts, too.</p> + 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&#8217;ll definitely feel that Ruby can do <em>more_. +<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 />

@@ -167,25 +171,25 @@ 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&#8217;s because I built up +<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 &#8212; I think &#8212; Russ didn&#8217;t do it in his book was length/balance constraint: a <em>properly + reason why &#8212; I think &#8212; 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&#8217;s why, as a matter of fact, you can actually read this book all + 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&#8217;m +<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&#8217;ve been making when coding in Ruby, so I&#8217;ll now feel compelled to fix at least + naive design mistakes I've been making when coding in Ruby, so I'll now feel compelled to fix at least some of them&#8230;</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>

@@ -193,15 +197,16 @@ <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&#8217;s Guide, 2nd Ed.</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> + <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&#8217;re <span class="caps">NOT</span> gonna + 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
M contents/articles/distributed-programming-with-ruby-review.htmlcontents/articles/distributed-programming-with-ruby-review.html

@@ -11,10 +11,11 @@ <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> + <strong>R</strong>u<strong>b</strong>y library included in the Standard Library. + </p> <p><em>&#8220;Cool!&#8221;</em> &#8212; I thought</p> <p>&#8230;and that was pretty much it. The documentation for DRb was pretty much nonexistent (at the time), I - didn&#8217;t need it, so I pretty much forgot about it altogether until this book came out.</p> + 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>

@@ -24,10 +25,10 @@ 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;">&#8212; Mark Bates, <em><a + <p style="padding-left:2rem;">&#8212; Mark Bates, <em><a href="http://www.informit.com/store/product.aspx?isbn=0321638360">Distributed Programming with Ruby</a></em></p> - <p>But there&#8217;s more. This book gives the reader a complete overview of what&#8217;s out there, in the Ruby + <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">

@@ -38,7 +39,7 @@ <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&#8217;ll get accustomed to a <em>Logger</em> class 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 &#8220;reverse preference&#8221; in each part of the book, so normally the libraries described later on in a part fix some of the shortcomings of the

@@ -63,7 +64,7 @@ <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&#8217;re probably a bit disappointed by DRb and Rinda and the amount of code you + <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>

@@ -87,7 +88,8 @@ <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> + system. + </li> </ul> </section>

@@ -112,20 +114,22 @@ </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 &#8220;cons&#8221; are solved in the following chapter by another library, and so on&#8230;</p> - <p>The book is not meant to contain a full technical reference of each library, and it&#8217;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&#8217;t + <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&#8217;re not talking about + <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&#8217;t remember any other Ruby book doing - this in the same way, and I was quite happy about it.</p> + 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> + <em>quirks</em> of these gems documented in the book: + </p> <p><strong>p91</strong>: <em>&#8220;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.&#8221;</em></p> - <p>Really? Hasn&#8217;t it be fixed now? Apparently not, that&#8217;s the way it works, so no, you can&#8217;t + <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">

@@ -133,17 +137,17 @@ <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&#8217;t get bored. Chapters and sections are quite short and there&#8217;s a good - text/code ratio: the examples are short and clear, and you don&#8217;t have to try them out yourself, - because most of the time the author does it for you. It&#8217;s not infrequent for the author to tell - you to run &#8220;wrong&#8221; code, but that&#8217;s a great way to show you how to do the right thing + 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 &#8220;wrong&#8221; 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&#8217;t stand were the <em>endnotes</em>. I must say I don&#8217;t like endnotes at the - best of times, but when they are pointless I just can&#8217;t suffer them. Each chapter has its own fair + 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&#8217;s just me. + projects: I would have preferred the URLs inline with the rest of the text, but that's just me. </p> </section>

@@ -155,14 +159,14 @@ <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>&#8220;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&#8217;t make any grand promises about what the library can and cannot do in regards to + so I won't make any grand promises about what the library can and cannot do in regards to expiring/renewing registrations.&#8221;</em></p> - <p>Although this is not something you&#8217;d see in a professional book everyday, it definitely helps to + <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&#8217;s neither one of those rockstar developers nor one of those - famous authors who just writes books for a living: he&#8217;s a competent programmer who knows quite a + 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>

@@ -173,15 +177,16 @@ <section class="section">

<header> <h1 id="h_9" class="toc">Final Thoughts</h1> </header> - <p>This is one of those books I&#8217;d like to see a second edition of. Partly because there are some + <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&#8217;d really like to see more - authors doing that, but with extra care. From reading this book, you understand that there&#8217;s no + <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&#8217;re left with two chapter about + 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 &#8220;summing up&#8221; end chapter (re-)highlighting the pros and cons of each library and a sort of feature matrix.</p>
M contents/articles/efficient-ruby-code-shortcut-review.htmlcontents/articles/efficient-ruby-code-shortcut-review.html

@@ -5,7 +5,7 @@ timestamp: 1200890820

tags: "ruby|review|books" ----- <p style="float:right;"><img src="/images/efficient_ruby_shortcut.jpeg" alt="" /></p> -<p>The second shortcut from Addison-Wesley Professional series I&#8217;m going to review is called <a +<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

@@ -13,7 +13,7 @@ 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&#8217; performance by refactoring portions of its core and try to &#8220;get maximum speed out of + Rails' performance by refactoring portions of its core and try to &#8220;get maximum speed out of performance-critical sections of code&#8221;. This short but interesting shortcut groups together a lot of performance tweaks, tips and tricks but also some &#8220;anti-patterns&#8221; Kaes was able to identify through his career as programming teacher Ruby software consultant and key Rails contributor.</p>

@@ -21,8 +21,8 @@ <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&#8217;s usability - in commercial projects. What you may not know is why that is so, and that&#8217;s where the first part of this book + 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>&#8220;Ruby is a highly dynamic language: Almost all language entities are first-class citizens in that they

@@ -42,27 +42,29 @@ 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&#8217;s also no performance difference if + <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> + <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> + <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&#8217;ll give a big +<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&#8217;t, <em>Writing Efficient Ruby Code</em> can be a short but very interesting read. + 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 &#8220;coding patterns&#8221; (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&#8217;s the case it is + 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 &#8220;specialized&#8221; patterns.
M contents/articles/firefox-lovers-guide-to-opera.htmlcontents/articles/firefox-lovers-guide-to-opera.html

@@ -8,33 +8,33 @@ tags: "browsers|review|opera|firefox"

----- <blockquote> <p><strong>Note:</strong> This article can be considered a sequel for <a - href="/articles/ie-lovers-guide-to-firefox">An IE Lover&#8217;s Guide to Firefox</a>, + href="/articles/ie-lovers-guide-to-firefox">An IE Lover's Guide to Firefox</a>, which described Firefox through the eyes of an Internet Explorer fan. Similarly, this article describes - Opera&#8217;s features from the point of view of a user &ndash; myself &ndash; who has been using Firefox for + Opera's features from the point of view of a user &ndash; myself &ndash; who has been using Firefox for years and is now considering another browser switch.</p> </blockquote> -<p>I am a Firefox fan. I&#8217;ve been using Firefox since it was named &#8220;Firebird&#8221; and calling it +<p>I am a Firefox fan. I've been using Firefox since it was named &#8220;Firebird&#8221; and calling it &#8220;stable&#8221; was a big overstatement. Firefox dragged me out of Internet Explorer, and that was definitely one of its biggest achievements.</p> -<p>Because I&#8217;m addicted to trying out new tools, however, I always kept testing new browsers I discovered here and +<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&#8230; When Safari came out for Windows I immediately installed it and used it for - about 2 hours, only to realize that it wasn&#8217;t &ndash; and it still isn&#8217;t &ndash; usable at all, mainly + about 2 hours, only to realize that it wasn't &ndash; and it still isn't &ndash; usable at all, mainly due to sporadic crashes.</p> <p style="float:right;"><img src="/images/opera/fast.jpg" alt="" /></p> -<p>Similarly, I&#8217;ve been trying out <a href="http://www.opera.com/">Opera</a> periodically, as new releases came - out, but again it didn&#8217;t seem to work for me. The biggest complaint I had was its inability to render +<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 improve the browser, and I was pleased to notice that <a href="http://www.opera.com/products/desktop/next/">Opera - 9.5b</a> (&#8220;Kestrel&#8221;) doesn&#8217;t seem to have this sort of problems at all.h3. Planning the Switch + 9.5b</a> (&#8220;Kestrel&#8221;) doesn't seem to have this sort of problems at all.h3. Planning the Switch </p> <p>Firefox has extensions. Plenty of them actually. Some are useful, like the newish Del.icio.us one made by Yahoo, and - also crappy ones you&#8217;ll never use unless you want to have a fancy button on one of your over-cluttered + also crappy ones you'll never use unless you want to have a fancy button on one of your over-cluttered toolbars which enables you to interface more easily with X or Y web services you hardly ever use.</p> <p>By contrast, Opera never attempted to add full-blown extension support to its venerable and yet very powerful browser. Instead, they kept building more and more features right into its core, being careful not to undermine the - browser&#8217;s two proverbial qualities: <em>speed</em> and <em>stability</em>. What seemed a doomed philosophy at + browser's two proverbial qualities: <em>speed</em> and <em>stability</em>. What seemed a doomed philosophy at first turned out to be a good thingin the long run. More and more people are getting more and more worried about - Firefox&#8217;s memory issues and begin to <em>wander off</em> to explore new things, exactly like I did.</p> + Firefox's memory issues and begin to <em>wander off</em> to explore new things, exactly like I did.</p> <p>The first step to switch from Firefox to Opera is to reduce the number of Firefox extensions to the bare minimum you need:</p> <ul>

@@ -46,35 +46,35 @@ <li>Gmail Manager</li>

<li>Secure Login</li> <li>Del.icio.us</li> </ul> -How many extensions do you <em>actually</em> use? Here&#8217;s a short analysis for the ones above: +How many extensions do you <em>actually</em> use? Here's a short analysis for the ones above: <ul> - <li>The first three are related to Web Development only, which means that I don&#8217;t need them unless I&#8217;m - doing some web-development tests during which I&#8217;m always going to have more than one browser open anyway. + <li>The first three are related to Web Development only, which means that I don't need them unless I'm + doing some web-development tests during which I'm always going to have more than one browser open anyway. <strong><span class="caps">UPDATE</span>:</strong> there are a few <a href="http://widgets.opera.com/search/?order=name&amp;q=ruler">Ruler</a> widget which can be used instead of MeasureIt <em>(thanks <strong>Ameer</strong>)</em>. </li> <li>SearchStatus gives me Alexa Rank and Google Pagerank: I think I can survive without those for a while. - <strong><span class="caps">UPDATE</span>:</strong> if not, there&#8217;s always <a + <strong><span class="caps">UPDATE</span>:</strong> if not, there's always <a href="http://www.puzzleclub.ru/files/seobar/">SEObar</a> <em>(thanks <strong>Ameer</strong>)</em>. </li> - <li>I use Gmail Manager because my girlfriend uses Gmail on the same computer. I&#8217;m switching to Opera and - she&#8217;ll stick with Firefox, so no problem there&#8230;</li> - <li>Secure Login? It&#8217;s called <em>Wand</em> and it has been built-in into Opera for the last decade or so. + <li>I use Gmail Manager because my girlfriend uses Gmail on the same computer. I'm switching to Opera and + she'll stick with Firefox, so no problem there&#8230;</li> + <li>Secure Login? It's called <em>Wand</em> and it has been built-in into Opera for the last decade or so. </li> - <li>Del.icio.us &ndash; OK, I won&#8217;t be able to access my favorite tags as quickly, but <a + <li>Del.icio.us &ndash; OK, I won't be able to access my favorite tags as quickly, but <a href="http://erlang.no/2005/10/06/delicious-opera-buttons-2/">someone</a> already came out with a few handy buttons for a better integration with the popular social bookmarking service.</li> </ul> <blockquote> <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&#8217;s <a href="http://files.myopera.com/Rijk/blog/extensions.html">Top + 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="/images/opera/opera_navigation.png" alt="" /></p> -<p>Because I&#8217;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&#8217;s default theme, so I started looking around for <strong><a +<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 href="http://my.opera.com/community/customize/skins/">new skins</a></strong> (yes, eye-candy matters sometimes) and came across the Ximple series by <a href="http://my.opera.com/community/customize/skins/author/?id=serafins">serafins</a>. In particular, <a

@@ -96,14 +96,14 @@ <li>History</li>

<li>Page Links</li> </ul> <p>I think this is a great feature and Firefox should definitely consider it: v3.0 comes with new download and bookmark - managers, but they&#8217;re still dialogs. Yes, I know, there&#8217;s probably some extension which allows you to - display them in the sidebar, but that&#8217;s not the point: Opera brings more consistency to the overall browsing + managers, but they're still dialogs. Yes, I know, there's probably some extension which allows you to + display them in the sidebar, but that's not the point: Opera brings more consistency to the overall browsing experience by using tabs wherever they should be used.</p> <p>Additionally, Opera tabs&#8230;</p> <ul> <li>Can be rearranged, exactly like Firefox tabs</li> <li>Can be restored, if closed accidently, by re-opening them from the Trash can</li> - <li>Can be locked, meaning that they can&#8217;t be closed accidently</li> + <li>Can be locked, meaning that they can't be closed accidently</li> <li>Can be duplicated</li> <li>Can be saved in groups (sessions) and re-opened later on</li> <li>Can be restored if Opera crashes</li>

@@ -120,12 +120,12 @@ <li>Display preview of each slot (which is cached and can be updated by refreshing the page)</li>

<li>Allow users to quickly access pages saved in the Speed Dial via CTRL+1 .. CTRL+9 or simply by clicking them. </li> </ul> -<p>Simple and effective. Once you get going with it, you&#8217;ll overcome the initial feeling of imposition and - you&#8217;ll use it more and more: I literally can&#8217;t live without it now!</p> +<p>Simple and effective. Once you get going with it, you'll overcome the initial feeling of imposition and + you'll use it more and more: I literally can't live without it now!</p> <h3>Right-click goodies</h3> <p>While I was testing Opera, my girlfriend came along and asked me to look something up on <a href="http://www.imdb.com/"><span class="caps">IMDB</span></a>. I normally had <span class="caps">IMDB</span> as - custom search engine in Firefox, but unfortunately Opera didn&#8217;t seem to allow users to customize their search + custom search engine in Firefox, but unfortunately Opera didn't seem to allow users to customize their search engines&#8230;</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>

@@ -136,7 +136,7 @@ <li>Right click the search field</li>

<li>Click <strong>Create Search&#8230;</strong></li> <li>Specify a name and a keyword for your search engine</li> </ol> -<p>Done. You&#8217;ll now be able to search that particular site directly from the search bar. As you can see, I added +<p>Done. You'll now be able to search that particular site directly from the search bar. As you can see, I added Wikipedia, <span class="caps">IMDB</span> and even the <a href="http://www.uesp.net/wiki/Main_Page">Unofficial Elder Scrolls Pages</a> in this way.</p> <p>Besides creating searches, Opera lets you do a lot by right-clicking anywhere on a page:</p>

@@ -152,10 +152,10 @@ the <em>current web site only</em>.</li>

<li>View source, reload page every X seconds/minutes, send by email, etc.</li> </ul> <h3>Widgets</h3> -<p><a href="http://widgets.opera.com/">Opera Widgets</a> must not be considered as Opera&#8217;s counterpart to Firefox - extensions. Instead, Opera Widgets can be used as <em>poor man&#8217;s Vista Gadgets</em> on Windows XP, and they do +<p><a href="http://widgets.opera.com/">Opera Widgets</a> must not be considered as Opera's counterpart to Firefox + extensions. Instead, Opera Widgets can be used as <em>poor man's Vista Gadgets</em> on Windows XP, and they do their job most remarkably.</p> -<p>I&#8217;m personally very fond of these ones:</p> +<p>I'm personally very fond of these ones:</p> <ul> <li><a href="http://widgets.opera.com/widget/3683/">The Free Dictionary</a></li> <li><a href="http://widgets.opera.com/widget/8461/">Wikipedia</a></li>

@@ -168,7 +168,7 @@ </ul>

<p>They all have a common trait: they all behave as standalone programs, as they should be. The Wikipedia one, for example, can display Wikipedia entries directly inside the widget, unlike some others which just take you to Wikipedia, which is rather pointless.</p> -<p>Although widgets live within Opera, they can be displayed &#8220;always behind&#8221;, which means they&#8217;ll be +<p>Although widgets live within Opera, they can be displayed &#8220;always behind&#8221;, which means they'll be glued to your desktop and therefore will be visible whenever Opera and other applications are minimized.</p> <p>Needless to say that anyone brave enough can make widgets for Opera by following a simple <a href="http://dev.opera.com/articles/opera-widgets-specification-1-0/">Widget Specification</a>.</p>

@@ -177,16 +177,16 @@ <p>The term <em>browser</em> applied to Opera is somehow misleading. Personally I would have called it something like

&#8220;Internet Suite&#8221;, because that would be a better choice due to the features it offers and the things it 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&#8217;s what Opera can handle: + <span class="caps">FTP</span> directories. Here's what Opera can handle: </p> <p style="float:right;"><img src="/images/opera/files.png" alt="" /></p> <ul> <li>Web Pages &ndash; No need of explanations here.</li> <li><span class="caps">FTP</span> &ndash; <span class="caps">FTP</span> directories are listed very clearly, - overriding server&#8217;s settings with a more user-friendly layout.</li> + overriding server's settings with a more user-friendly layout.</li> <li>Local Files &ndash; This was a surprise for me. Typing <code>file://</code> will automatically load a list of the drives currently available on your machine. Similarly, auto-completion for directory and file names is - supported! I almost started using Opera as my everyday&#8217;s file manager (almost).</li> + supported! I almost started using Opera as my everyday's file manager (almost).</li> <li>Feeds &ndash; An embedded feed reader can be used to subscribe to <span class="caps">RSS</span>/Atom feeds and view them&#8230; in a tab, of course.</li> <li>E-mails &ndash; Opera <em>is</em> also a pretty decent email client. As of version 9.5 full <span

@@ -203,26 +203,26 @@ href="http://www.opera.com/support/search/view/840/">disable it</a> and still use your favorite BitTorrent

client.</li> </ul> <h3>Portability and Synchronization</h3> -<p>Let&#8217;s spend some words about <em>portability</em>. Sure, there are two &#8220;Portable Opera&#8221; apps out - there, and they work well enough, but one thing I&#8217;d like about a web browser is the ability to synchronize my +<p>Let's spend some words about <em>portability</em>. Sure, there are two &#8220;Portable Opera&#8221; apps out + there, and they work well enough, but one thing I'd like about a web browser is the ability to synchronize my preferences, customizations, themes, passwords etc. etc. across multiple computers. <br /> Firefox is <a href="http://labs.mozilla.com/2007/12/introducing-weave/">getting there</a>, although the technology is still at a very early stage.<br /> Opera is doing something similar through <a href="http://link.opera.com/">Opera Link</a>, which allows you to synchronize automatically your Bookmarks, your Personal Bar and your Speed Dial. All you need is to get a (free) Opera account, login to Opera Link and enable the synchronization feature from the <em>File</em> menu. From now on - every time you&#8217;ll modify your Speed Dial or Bookmarks, the changes will be sent to your Opera Link page. + every time you'll modify your Speed Dial or Bookmarks, the changes will be sent to your Opera Link page. Similarly, whenever you start using opera somewhere else, if you login to your Opera Account you should be able to synchronize your Bookmarks and Speed Dial.</p> <p>Here are some thoughts on this type of technology:</p> <ul> - <li>It&#8217;s not totally private yet. While it&#8217;s great to be able to sync bookmarks and speed dial, the - problems arise when you finish using your friend&#8217;s computer for example&#8230; what happens to the - bookmarks you just sync&#8217;ed? The only way to delete them would be to have your friend to log in to his + <li>It's not totally private yet. While it's great to be able to sync bookmarks and speed dial, the + problems arise when you finish using your friend's computer for example&#8230; what happens to the + bookmarks you just sync'ed? The only way to delete them would be to have your friend to log in to his Opera account and re-sync them. Not enough privacy for my liking.</li> <li>Your passwords, notes, widgets, etc. etc. cannot be synchronized yet, but that will hopefully be possible in near future.</li> - <li>Sync&#8217;ing bookmarks is pointless for me. Although Opera still hopes to compete with Del.icio.us &amp; Co., + <li>Sync'ing bookmarks is pointless for me. Although Opera still hopes to compete with Del.icio.us &amp; Co., that will be very hard to achieve. I stopped using in-browser bookmarks long ago.</li> <li>Link seems and interesting feature considering that Opera is available on virtually <em>any operating system</em> and a lot of different devices (mobile phones, Nintendo DS &amp; Wii, &#8230;).</li>

@@ -241,20 +241,20 @@ <ol>

<li>Go to the <a href="http://my.opera.com/community/customize/skins/">Skins Directory</a></li> <li>Download a skin you like</li> <li>Opera will download and apply the skin immediately, <strong>and it will ask you whether you want to keep it or - not</strong>. If you choose not to, it won&#8217;t save it in your profile (very useful for quick previews). + not</strong>. If you choose not to, it won't save it in your profile (very useful for quick previews). Neat.</li> </ol> <p>Another quality opera always excelled to is accessibility. Besides using the interface in the traditional way, it is also possible to:</p> <ul> <li><strong>Use <a href="http://www.opera.com/products/desktop/mouse">mouse gestures</a></strong> &ndash; I - wasn&#8217;t a big fan of this until I bothered reading the excellent documentation Opera provided for them - (which is significantly better than <a href="http://www.mousegestures.org/">the Firefox&#8217;s equivalent</a>). + wasn't a big fan of this until I bothered reading the excellent documentation Opera provided for them + (which is significantly better than <a href="http://www.mousegestures.org/">the Firefox's equivalent</a>). It can be quite useful at times.</li> <li><strong>Use <a href="http://www.opera.com/products/desktop/keyboard/">keyboard shortcuts</a></strong> &ndash; Believe it or not, you can literally <a href="http://www.opera.com/support/tutorials/nomouse/">use Opera without a mouse</a>.</li> - <li><strong><a href="http://www.opera.com/products/desktop/voice/">Speak</a> to it</strong> &ndash; Opera&#8217;s + <li><strong><a href="http://www.opera.com/products/desktop/voice/">Speak</a> to it</strong> &ndash; Opera's voice integration is getting better and better. Not only you can effectively <a href="http://www.opera.com/support/tutorials/voice/">tell your browser what to do</a>, you can also use the built-in text-to-speech function (Windows only) to have it read entire pages for you. It actually works quite

@@ -271,53 +271,53 @@ every image/object cached!), plug-ins, Wand passwords, etc.</li>

<li>Use <strong>Tools &gt; Appearence&#8230;</strong> to access and manage appearance-related settings, like skins, toolbars, buttons and panels</li> <li>Use <strong>Tools &gt; Preferences&#8230;</strong> to access general preferences (all the rest)</li> - <li>Type in <strong>opera:config</strong> to view and tweak Opera&#8217;s internal settings, somehow like - Firefox&#8217;s about:config, but much cleaner and easier to use.</li> + <li>Type in <strong>opera:config</strong> to view and tweak Opera's internal settings, somehow like + Firefox's about:config, but much cleaner and easier to use.</li> <li>Download the <strong><a href="http://dev.opera.com/tools/">Developer Console</a></strong> to have a simpler - alternative to Firefox&#8217;s Web Developer Toolbar extension, to view <span class="caps">DOM</span> elements, + alternative to Firefox's Web Developer Toolbar extension, to view <span class="caps">DOM</span> elements, <span class="caps">CSS</span> and Javascript information. </li> </ul> <h3>Annoyances</h3> -<p>After using as main browser for a few weeks now, I can say that it&#8217;s great but not perfect yet. It&#8217;s very +<p>After using as main browser for a few weeks now, I can say that it's great but not perfect yet. It's very advanced, faster and more mature than any other browser, of course,but there are a few things which should be fixed or improved.</p> <p>In particular:</p> <ul> - <li><strong>It&#8217;s not open source</strong> &ndash; This may not matter to someone, but some people consider - this an essential requirement for their browser, and that&#8217;s why Firefox is their most obvious choice. + <li><strong>It's not open source</strong> &ndash; This may not matter to someone, but some people consider + this an essential requirement for their browser, and that's why Firefox is their most obvious choice. Although Opera is free, it is proprietary software after all, which means is definitely not as open as you may - want it to be. Personally I&#8217;m not too bothered, as I&#8217;m starting to think that too much openness may + want it to be. Personally I'm not too bothered, as I'm starting to think that too much openness may lead to too many unuseful and bloated extensions and make the program somehow &#8220;unpredictable&#8221; and heavy.</li> <li><del><strong>No address bar search</strong> &ndash; Amazingly, only Firefox seems to have this feature built-in. - I&#8217;m referring to the ability to type whatever in the address bar to be redirected to the site returned - by a Google&#8217;s <em>I&#8217;m feeling lucky</em> search. It is possible to emulate this feature in Opera - by creating a custom search for <em>I&#8217;m Feeling Lucky</em> and assign it a short keyword like + I'm referring to the ability to type whatever in the address bar to be redirected to the site returned + by a Google's <em>I'm feeling lucky</em> search. It is possible to emulate this feature in Opera + by creating a custom search for <em>I'm Feeling Lucky</em> and assign it a short keyword like &#8220;l&#8221;. In this way, for example, typing in <code>l h3rald</code> should lead you to this website. Not quite as immediate as in Firefox though.</del></li> <li><del><strong>No find as you type</strong> &ndash; Another big disappointment for who comes from Firefox or Safari: Opera still uses a dialog box to perform page searches.</del></li> <li><del><strong>No spell clecking</strong> &ndash; Again, both Firefox and Safari now offer text fields spell - checking. Opera doesn&#8217;t yet.</del></li> - <li><del><strong>No <span class="caps">HTML</span> mail composer</strong> &ndash; Opera&#8217;s built-in mail client - can display <span class="caps">HTML</span> emails but doesn&#8217;t yet allow users to create them.</del> + checking. Opera doesn't yet.</del></li> + <li><del><strong>No <span class="caps">HTML</span> mail composer</strong> &ndash; Opera's built-in mail client + can display <span class="caps">HTML</span> emails but doesn't yet allow users to create them.</del> </li> <li><del><strong>Auto-start widgets?</strong> &ndash; This is a feature enhancement Opera Dev Team should consider: allow users to configure certain widgets to start automatically when Opera starts.</del></li> <li><del><strong>Google Reader + Flash problems</strong> &ndash; Sometimes I experiences some scrolling problems when reading news which contain embedded flash movies on Google Reader.</del></li> <li><strong>Corporate Sites</strong> &ndash; Unfortunately some corporate web site do not support Opera or are not - displayed correctly in Opera. Unfortunately there&#8217;s nothing much we can do about it but trying to + displayed correctly in Opera. Unfortunately there's nothing much we can do about it but trying to &#8220;mask&#8221; Opera as another browser (via <strong>right-click &gt; Edit Site Preferences&#8230;</strong>) </li> - <li><del><strong>Default Browser Problems</strong> &ndash; Setting Opera as default browser on Windows doesn&#8217;t + <li><del><strong>Default Browser Problems</strong> &ndash; Setting Opera as default browser on Windows doesn't seem to set the file icons accordingly (or worse, it resets them to the default file icon).</del></li> </ul> <p><strong><span class="caps">ERRATA</span>:</strong></p> <ul> <li>It is possible to have Opera to redirect you to the right after typing a few words in thr address bar by setting - Google&#8217;s &#8220;I&#8217;m feeling lucky&#8221; as default search engine <em>(thanks + Google's &#8220;I'm feeling lucky&#8221; as default search engine <em>(thanks <strong>EJ902</strong>)</em>.</li> <li>Spell Checking is <a href="http://www.opera.com/support/tutorials/opera/spellcheck/">supported</a> via <span class="caps">GNU</span> Aspell <em>(thanks <strong>cvm</strong>)</em> or by using <a

@@ -329,19 +329,19 @@ <li>It is possible to auto-start widgets by saving a session with all your widget open and reloading it at every

startup [CTRL+F12 &gt; General &gt; Startup &gt; Continue saved sessions] <em>(thanks <strong>Tamil</strong> &amp; <strong>Ameer</strong>)</em>.</li> <li>As of the <a href="http://my.opera.com/desktopteam/blog/">latest snapshot</a>, setting Opera as default browser - and handler for <span class="caps">HTML</span> files doesn&#8217;t cause any problems <em>thanks + and handler for <span class="caps">HTML</span> files doesn't cause any problems <em>thanks <strong>Ayush</strong>)</em>.</li> </ul> <h3>Conclusion</h3> <p>Despite the few annoyances listed in the previous section, Opera 9.5 beta 1 truly impressed me. I was waiting for - Opera to get better before switching and now I&#8217;ve not been using Firefox for a few weeks.<br /> - Although Opera offers a lot of features, there&#8217;s still room for improvements, especially for what concerns + Opera to get better before switching and now I've not been using Firefox for a few weeks.<br /> + Although Opera offers a lot of features, there's still room for improvements, especially for what concerns integration with third party services: I would really like to see some sort of integration with del.icio.us, and that could be possible via widgets at least. <br /> Regarding the new Opera Link feature, it looks very promising and a potential competitor for Mozilla Weave even though it will be used mainly to get more and more users to register to the Opera community (I did, at least), which is indeed very active any way.</p> -<p>To conclude this article, which still barely scratches the surface of this very powerful application, I&#8217;d like +<p>To conclude this article, which still barely scratches the surface of this very powerful application, I'd like to praise two more things about Opera:</p> <p><span style="float:right; margin:3px;"><br /> <script type="text/javascript">

@@ -352,10 +352,10 @@ </span></p>

<ul> <li>Their website network, and in particular their truly excellent documentation knowledge base, which is very comprehensive of references, tutorials and interesting articles. I am a full time technical writer myself, and - I&#8217;ve hardly ever come across better documentation.</li> + I've hardly ever come across better documentation.</li> <li>Their extensive <a href="http://www.opera.com/docs/specs/">support and compliance to web standards</a>, which makes Opera the most advanced browser ever made.</li> </ul> -<p>If you&#8217;ve not tried Opera before, or if you&#8217;ve always dismissed it because &#8220;X browser is +<p>If you've not tried Opera before, or if you've always dismissed it because &#8220;X browser is better&#8221;, you may want to <a href="http://www.opera.com/products/desktop/">give it another shot</a>: for me it was definitely worthwhile!</p>
M contents/articles/firefox3-revealed.htmlcontents/articles/firefox3-revealed.html

@@ -6,13 +6,13 @@ 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&#8217;s web + 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 &#8220;complained&#8221; that 8,300+ words was about 3 times over the minimum requirements for a feature article! <br /> - <em>&#8220;I don&#8217;t really think that people can read the whole thing online&#8221;</em> &mdash;, he said, and + <em>&#8220;I don't really think that people can read the whole thing online&#8221;</em> &mdash;, he said, and I somehow agreed. </p> <p>In the end, they decided to pack my &#8220;article&#8221; into a 30-pages <span class="caps">PDF</span> eBook which

@@ -31,7 +31,8 @@ <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> + 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>
M contents/articles/getting-started-with-lithium.htmlcontents/articles/getting-started-with-lithium.html

@@ -16,7 +16,7 @@ <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> <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&#8217;t install anything!):</p> +<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>

@@ -26,14 +26,14 @@ <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&#8217;t have git installed or you don&#8217;t want to read <a + 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&#8217;ll save you the hassle and let you download the plugin from <a href="/files/li3_docs.zip">here</a>, + 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&#8217;s call it <b>D:\lithium_test</b> from now on). We&#8217;ll do everything +<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>

@@ -41,7 +41,7 @@ <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&#8217;t actually be used in this tutorial)</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>

@@ -76,7 +76,7 @@ <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&#8217;s see if we can get the li3_docs plugin running as well:</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>

@@ -89,13 +89,13 @@ <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&#8217;re now running your first Lithium application!</p> +<p>Congratulation, you're now running your first Lithium application!</p> <h3>Fixing URLs</h3> -<p>Once the initial excitement wears off you&#8217;ll notice that none of the links on the docs page works.</p> -<p>That&#8217;s because the mongoose web server does not support <span class="caps">URL</span> rewriting (and Lithium +<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&#8217;s very + 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>

@@ -113,17 +113,17 @@ }

} ?&gt;</code></pre> </div> -<p>We&#8217;re basically extending the <code>\lithium\action\Request</code> with a custom class, telling Lithium how to +<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&#8217;re instructing the dispatcher to use our custom Request class instead of the default one.</p> +<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&#8217;t work out, - there&#8217;s always <a href="http://li3.rad-dev.org/docs">http://li3.rad-dev.org/docs</a>).</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>
M contents/articles/git-for-the-locals.htmlcontents/articles/git-for-the-locals.html

@@ -4,48 +4,95 @@ content-type: article

timestamp: 1216095480 tags: "programming" ----- -<p><em>&#8220;This is a <strong>local</strong> shop for <strong>local</strong> people, we want no trouble here!&#8221;</em></p> +<p><em>&#8220;This is a <strong>local</strong> shop for <strong>local</strong> people, we want no trouble + here!&#8221;</em></p> <p>&mdash; Edward, <a href="http://en.wikipedia.org/wiki/League_of_gentlemen">The League of Gentlemen</a></p> -<p>I&#8217;m normally quite cautious when it comes to IT novelties like new frameworks, new methodologies and similar, especially when it feels like they&#8217;re over-hyped. Especially nowadays, it is sometimes very hard to tell whether something new is over-hyped or really a Good Thing&#8482; without spending some time looking into it. And especially nowadays, finding the time to look into something new can be a real challange.</p> -<p>I deliberately didn&#8217;t look into Git properly since it went &#8220;mainstream&#8221; (maybe I shouldn&#8217;t use this word), but when <a href="http://www.spheredev.org/wiki/Git_for_the_lazy">this tutorial</a> came out I couldn&#8217;t resist. Sure, I knew Git was an amazingly fast distributed version control system, that <a href="http://github.com/">GitHub</a> offered free accounts, that all the cool guys were slowly starting to use it in place of Subversion, etc. etc.</p> -<p>What I didn&#8217;t realize though, that the most obvious advantage of this <span class="caps">DVCS</span> was the fact that it was <strong>distributed</strong>, i.e., it <em>didn&#8217;t need</em> a centralized server.</p> -<p>Let me repeat this: <strong>Git <em>doesn&#8217;t need</em> a centralized server.</strong></p> -<p>Really.h3. &#8230;But it&#8217;s not user-friendly!</p> -<p>If you&#8217;re a Windows user and you used Subversion before, chances are that you got accustomed to <a href="http://tortoisesvn.tigris.org/">TortoiseSVN</a>, too. TortoiseSVN is &mdash; in a way &mdash; a nice graphical fron-end to <span class="caps">SVN</span> which provides seamless Windows Explorer integration. <br /> -Git doesn&#8217;t have anything like that yet. There&#8217;s something in the works, sure, but nothing really comparable to TortoiseSVN. Therefore, you are <em>kindly suggested</em> to get on and use the command line for all your git stuff.</p> -<p>Oh well, I personally love using command line interfaces for certain tasks, event if I spend more time on Windows than on any other OS and well, the <span class="caps">DOS</span> prompt is no way near to bash &amp; Co.</p> -<p>For the <del>lazy gits</del> Windows users, <a href="http://code.google.com/p/msysgit/">MSysGit</a> is the answer to all your problems. <em>Officially</em> you have to install Cygwin and all its crap to be able to use Git on Windows. Not that Cygwin is bad, but I personally don&#8217;t like the extra layer it creates between you and an OS symulation which is not really what&#8217;s on your machine.It would be great if you could get all the Bash goodies natively, without the hassle.</p> -<p>that&#8217;s basically what you get for free when you install MSysGit: the best (to date) version of Bash you could possibly dream of for Windows, along with a few handy Gnu tools and of course all git commands.<br /> -In a few click, you&#8217;ll be able to use Git (and Bash!) right away: no tricks, no hassle, no kidding.</p> -<p>And stop moaning about the command line not being user friendly. You want a new repository <em>anywhere</em>? Just type in the following:</p> -<div class='text'><pre><code>git init +<p>I'm normally quite cautious when it comes to IT novelties like new frameworks, new methodologies and similar, + especially when it feels like they're over-hyped. Especially nowadays, it is sometimes very hard to tell whether + something new is over-hyped or really a Good Thing&#8482; without spending some time looking into it. And especially + nowadays, finding the time to look into something new can be a real challange.</p> +<p>I deliberately didn't look into Git properly since it went &#8220;mainstream&#8221; (maybe I shouldn't use this + word), but when <a href="http://www.spheredev.org/wiki/Git_for_the_lazy">this tutorial</a> came out I couldn't + resist. Sure, I knew Git was an amazingly fast distributed version control system, that <a + href="http://github.com/">GitHub</a> offered free accounts, that all the cool guys were slowly starting to use + it in place of Subversion, etc. etc.</p> +<p>What I didn't realize though, that the most obvious advantage of this <span class="caps">DVCS</span> was the fact + that it was <strong>distributed</strong>, i.e., it <em>didn't need</em> a centralized server.</p> +<p>Let me repeat this: <strong>Git <em>doesn't need</em> a centralized server.</strong></p> +<p>Really.h3. &#8230;But it's not user-friendly!</p> +<p>If you're a Windows user and you used Subversion before, chances are that you got accustomed to <a + href="http://tortoisesvn.tigris.org/">TortoiseSVN</a>, too. TortoiseSVN is &mdash; in a way &mdash; a nice + graphical fron-end to <span class="caps">SVN</span> which provides seamless Windows Explorer integration. <br /> + Git doesn't have anything like that yet. There's something in the works, sure, but nothing really comparable to + TortoiseSVN. Therefore, you are <em>kindly suggested</em> to get on and use the command line for all your git stuff. +</p> +<p>Oh well, I personally love using command line interfaces for certain tasks, event if I spend more time on Windows + than on any other OS and well, the <span class="caps">DOS</span> prompt is no way near to bash &amp; Co.</p> +<p>For the <del>lazy gits</del> Windows users, <a href="http://code.google.com/p/msysgit/">MSysGit</a> is the answer to + all your problems. <em>Officially</em> you have to install Cygwin and all its crap to be able to use Git on Windows. + Not that Cygwin is bad, but I personally don't like the extra layer it creates between you and an OS symulation + which is not really what's on your machine.It would be great if you could get all the Bash goodies natively, without + the hassle.</p> +<p>that's basically what you get for free when you install MSysGit: the best (to date) version of Bash you could + possibly dream of for Windows, along with a few handy Gnu tools and of course all git commands.<br /> + In a few click, you'll be able to use Git (and Bash!) right away: no tricks, no hassle, no kidding.</p> +<p>And stop moaning about the command line not being user friendly. You want a new repository <em>anywhere</em>? Just + type in the following:</p> +<div class='text'> + <pre><code>git init git add . -git commit</code></pre></div><p>This will create your new repository in the current directory, add all your files and filders recursively, and perform the initial commit. What&#8217;s so hard in this? Nothing. And it&#8217;s faster than <span class="caps">SVN</span>, for sure.</p> +git commit</code></pre> +</div> +<p>This will create your new repository in the current directory, add all your files and filders recursively, and + perform the initial commit. What's so hard in this? Nothing. And it's faster than <span class="caps">SVN</span>, for + sure.</p> <h3>Are you local?</h3> -<p>&#8220;Being local&#8221; has its own advantages: you know where you stand, you know what to expect, you don&#8217;t depend on other people. What I didn&#8217;t fully realize about Git is that it can be a 100% <em>local</em> repository.</p> -<p>The three Git commands I mentioned earlier can be used to create a repository <em>there</em>, exactly where you are: not on a server far, far away.<br /> -Let&#8217;s see what this means:</p> +<p>&#8220;Being local&#8221; has its own advantages: you know where you stand, you know what to expect, you don't depend + on other people. What I didn't fully realize about Git is that it can be a 100% <em>local</em> repository.</p> +<p>The three Git commands I mentioned earlier can be used to create a repository <em>there</em>, exactly where you are: + not on a server far, far away.<br /> + Let's see what this means:</p> <ol> - <li>You don&#8217;t need an Internet connection anymore to use a <span class="caps">VCS</span></li> - <li>You don&#8217;t get a .svn folder in <em>every</em> damn directory of your project, with a load of crappy files in it.</li> - <li>You get only a .git folder <em>at top level</em>, and that&#8217;s where your repository actually is. Granted, there are going to be quite a few files in there, but they&#8217;re not going to be scattered all over the place</li> + <li>You don't need an Internet connection anymore to use a <span class="caps">VCS</span></li> + <li>You don't get a .svn folder in <em>every</em> damn directory of your project, with a load of crappy files in it. + </li> + <li>You get only a .git folder <em>at top level</em>, and that's where your repository actually is. Granted, there + are going to be quite a few files in there, but they're not going to be scattered all over the place</li> <li>You can physically copy your repository anywhere and still use it</li> - <li>You don&#8217;t need to signup to GitHub for an account, if you only want your own <span class="caps">VCS</span></li> + <li>You don't need to signup to GitHub for an account, if you only want your own <span class="caps">VCS</span></li> </ol> -<p>OK, this is an extreme scenario, but sometimes you may want your <em>own</em> local repository for your stuff. You may want a place to version your documents, or a place to version your own little pet programming project nobody knows about.<br /> -With Git, you can get all the advantages of a <span class="caps">VCS</span> (and an <em>incredibly fast</em> <span class="caps">VCS</span>) without having to setup any server infrastructure: just install Git on your machine, and you&#8217;re done. No server processes, no hassle.</p> -<h3>Don&#8217;t connect, synchronize</h3> -<p>All the information your repository needs is stored in that little .git folder, nowhere else. You can copy your files and that folder, and you&#8217;ll still get your repository back wherever you are. Maybe you can zip it before copying it, and then unzip it where you need a <span class="caps">VCS</span>, event.</p> -<p>I tried using some synchronization utilities like SyncToy or RoboCopy on Windows to keep my files synchronized on multiple computers: it all started off from the fact that I can&#8217;t use <span class="caps">SSH</span> at work, so I wouldn&#8217;t be able to push my commits back to a central repository online like GitHub.</p> -<p>So here&#8217;s what I did:</p> +<p>OK, this is an extreme scenario, but sometimes you may want your <em>own</em> local repository for your stuff. You + may want a place to version your documents, or a place to version your own little pet programming project nobody + knows about.<br /> + With Git, you can get all the advantages of a <span class="caps">VCS</span> (and an <em>incredibly fast</em> <span + class="caps">VCS</span>) without having to setup any server infrastructure: just install Git on your machine, + and you're done. No server processes, no hassle.</p> +<h3>Don't connect, synchronize</h3> +<p>All the information your repository needs is stored in that little .git folder, nowhere else. You can copy your files + and that folder, and you'll still get your repository back wherever you are. Maybe you can zip it before copying it, + and then unzip it where you need a <span class="caps">VCS</span>, event.</p> +<p>I tried using some synchronization utilities like SyncToy or RoboCopy on Windows to keep my files synchronized on + multiple computers: it all started off from the fact that I can't use <span class="caps">SSH</span> at work, so I + wouldn't be able to push my commits back to a central repository online like GitHub.</p> +<p>So here's what I did:</p> <ol> <li>I setup a local repository for my project on a local folder at work.</li> <li>I started working on my project, did a few commits.</li> - <li>After performing the last commit for the day (you are encouraged to commit often by Git, really), I synchronized that folder with my <span class="caps">USB</span> key, via SyncToy.</li> - <li>Back at home, I used SyncToy again to synchronize my files (including the repository) between the <span class="caps">USB</span> key and my home computer.</li> - <li>Performing a <code>git status</code> showed that some files have been modified (all of them, actually): that&#8217;s because Git detected that they weren&#8217;t the same files which were committed, presumably because of different timestamps etc.</li> - <li>All I did was a <code>git reset --hard</code> to get <em>exactly</em> the same files I committed at work, with absolutely no information loss.</li> + <li>After performing the last commit for the day (you are encouraged to commit often by Git, really), I synchronized + that folder with my <span class="caps">USB</span> key, via SyncToy.</li> + <li>Back at home, I used SyncToy again to synchronize my files (including the repository) between the <span + class="caps">USB</span> key and my home computer.</li> + <li>Performing a <code>git status</code> showed that some files have been modified (all of them, actually): that's + because Git detected that they weren't the same files which were committed, presumably because of different + timestamps etc.</li> + <li>All I did was a <code>git reset --hard</code> to get <em>exactly</em> the same files I committed at work, with + absolutely no information loss.</li> </ol> -<p>Isn&#8217;t it a bad thing to move your git folder back and forth and let another program to synchronize files within it? Maybe, but it seems to work so far. A safer option, in this case, may be zipping the folder before synchronizing it, just to be sure.</p> +<p>Isn't it a bad thing to move your git folder back and forth and let another program to synchronize files within it? + Maybe, but it seems to work so far. A safer option, in this case, may be zipping the folder before synchronizing it, + just to be sure.</p> <h3>Conclusion</h3> -<p>Git can do much more than this. Git offers some really interesting branching features, for example, which I didn&#8217;t mention in this article, of course, like several dozens of other commands. What I tried to point out was that Git can be used by <em>anyone</em>, as a fast, simple and very effective private <em>local</em> repository. In case you need one, that is (if you are really <em>local</em>).</p> +<p>Git can do much more than this. Git offers some really interesting branching features, for example, which I didn't + mention in this article, of course, like several dozens of other commands. What I tried to point out was that Git + can be used by <em>anyone</em>, as a fast, simple and very effective private <em>local</em> repository. In case you + need one, that is (if you are really <em>local</em>).</p>
M contents/articles/glyph-020-released.htmlcontents/articles/glyph-020-released.html

@@ -8,11 +8,11 @@ -----

<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&#8217;t know, Glyph is a pure-Ruby, extensible solution to author documents like books or + 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&#8217;s a brief + 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>

@@ -20,12 +20,13 @@ <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&#8217;ve been using it for a while, and all I can say is that it really helps! Here&#8217;s what it looks - like:</p> + 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&#8217;m sorry for the Emacs and TextMate folks, but I only use Vim, so I only made a Vim syntax file. + <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&#8217;t be too hard.</p> + shouldn't be too hard.</p> </section> <section class="section"> <header>

@@ -47,21 +48,22 @@ <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&#8217;d + <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&#8217;t believe me? Feel free to click the <em>Download <span + 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&#8230;</p> <p>For those of you using the awesome <a href="http://nanoc.stoneship.org">nanoc</a> static site generator, - here&#8217;s a few source files you may want to take a look at:</p> + 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> &#8212; 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> &#8212; a simple Glyph filter.</li> <li><a href="http://github.com/h3rald/h3rald/blob/master/Rules">Rules</a> &#8212; a rule using the - <code>Glyph#compile</code> method to generate <span class="caps">PDF</span> files.</li> + <code>Glyph#compile</code> method to generate <span class="caps">PDF</span> files. + </li> </ul> </section> <section class="section">

@@ -69,8 +71,8 @@ <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&#8217;re away. - I&#8217;d like to thank <a href="http://koraktor.github.com">Sebastian Staudt</a> for proposing, + 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">

@@ -93,10 +95,10 @@ </section>

</section> <section class="section"> <header> - <h1 id="h_7" class="toc">What&#8217;s next?</h1> + <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&#8217;d like to thank the + 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

@@ -111,21 +113,22 @@ <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&#8217;s a bit quiet of there for now&#8230;)</li> + group</a> (it's a bit quiet of there for now&#8230;)</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&#8217;s just a - <code>gem install glyph</code> away!).</li> - <li>By actually contributing to its development (it&#8217;s <a + <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&#8217;t like coding:</p> + <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&#8217;m looking for some nice new <span + <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&#8217;re good with graphics, Glyph needs a good-looking logo&#8230;</li> + <li>if you're good with graphics, Glyph needs a good-looking logo&#8230;</li> </ul> <p>Any form of contribution will be credited in some way, e.g. by links and tweets.</p> </section>
M contents/articles/glyph-040-released.htmlcontents/articles/glyph-040-released.html

@@ -6,17 +6,27 @@ timestamp: 1283535900

tags: "glyph|ruby|opensource" ----- - <section class="section"> -<p>This new release of Glyph introduces an unusually large number of features, improvements and bugfixes. Not so much in terms of new macros maybe (no index or bibliography support for now, but it will come, don&#8217;t worry!), but rather&#8230; pretty much everything else!</p> +<section class="section"> + <p>This new release of Glyph introduces an unusually large number of features, improvements and bugfixes. Not so + much in terms of new macros maybe (no index or bibliography support for now, but it will come, don't worry!), + but rather&#8230; pretty much everything else!</p> -<section class="section"> -<header><h1 id="h_1" class="toc">Web Output</h1></header> -<p>By far the biggest feature of this release is support for multi-file output, i.e. the possibility to transform your book into a web site. You&#8217;ve asked for it, I needed it too, and now it&#8217;s finally here.</p> -<p>An example? Sure. Take the <a href="http://github.com/downloads/h3rald/glyph/glyph.pdf">Glyph Book</a> (now a 98-page <span class="caps">PDF</span> file) for instance. My only regret was that a long <span class="caps">PDF</span> is quite heavy to digest and peruse, especially if you&#8217;re in a hurry. It would be so much nice to have it available online, in chunks of more manageable size.</p> -<p>Well, <a href="/glyph/book/">here it is</a>. That&#8217;s the very same document, split in several <span class="caps">HTML</span> files with a custom layout that matches this site&#8217;s. The good news is that you can do it too:</p> - -<div class="code"> -<pre> + <section class="section"> + <header> + <h1 id="h_1" class="toc">Web Output</h1> + </header> + <p>By far the biggest feature of this release is support for multi-file output, i.e. the possibility to + transform your book into a web site. You've asked for it, I needed it too, and now it's finally here.</p> + <p>An example? Sure. Take the <a href="http://github.com/downloads/h3rald/glyph/glyph.pdf">Glyph Book</a> (now a + 98-page <span class="caps">PDF</span> file) for instance. My only regret was that a long <span + class="caps">PDF</span> is quite heavy to digest and peruse, especially if you're in a hurry. It would + be so much nice to have it available online, in chunks of more manageable size.</p> + <p>Well, <a href="/glyph/book/">here it is</a>. That's the very same document, split in several <span + class="caps">HTML</span> files with a custom layout that matches this site's. The good news is that you + can do it too:</p> + + <div class="code"> + <pre> <code> section[ @title[This title is compulsory]

@@ -25,45 +35,81 @@ @src[topic_file.glyph]

] </code> </pre> -</div> - <p>Note the <code>@src</code> attribute? It basically includes the specified topic file. So by creating a <code>document.glyph</code> file like <a href="http://github.com/h3rald/glyph/blob/master/book/document.glyph">this</a>, you can create a tidy table of contents (not a single <code>include</code> macro) <em>and</em> get a website for free. Glyph, as usual, takes care of anything for you, especially links between topics. Just link away like you did so far, nothing changes from previous versions, it will just work as expected (<a href="/glyph/book/compiling/compiling.html#web_output">read more</a>).</p> + </div> + <p>Note the <code>@src</code> attribute? It basically includes the specified topic file. So by creating a + <code>document.glyph</code> file like <a + href="http://github.com/h3rald/glyph/blob/master/book/document.glyph">this</a>, you can create a tidy + table of contents (not a single <code>include</code> macro) <em>and</em> get a website for free. Glyph, as + usual, takes care of anything for you, especially links between topics. Just link away like you did so far, + nothing changes from previous versions, it will just work as expected (<a + href="/glyph/book/compiling/compiling.html#web_output">read more</a>).</p> -</section> -<section class="section"> -<header><h1 id="h_2" class="toc">HTML5 Output</h1></header> -<p>Compared to Web output, HTML5 support was trivial and only took a few hours to implement and test. You can now produce single-file HTML5-compliant documents (<code>html5</code> output format) or even HTML5-compliant web sites (<code>web5</code> output). Just using <code>section</code> tags instead of <code>div</code> tags made it worth it.</p> -<p>Of course, the default <span class="caps">CSS</span> files have been updated to be compatible with HTML5 output too.</p> + </section> + <section class="section"> + <header> + <h1 id="h_2" class="toc">HTML5 Output</h1> + </header> + <p>Compared to Web output, HTML5 support was trivial and only took a few hours to implement and test. You can + now produce single-file HTML5-compliant documents (<code>html5</code> output format) or even HTML5-compliant + web sites (<code>web5</code> output). Just using <code>section</code> tags instead of <code>div</code> tags + made it worth it.</p> + <p>Of course, the default <span class="caps">CSS</span> files have been updated to be compatible with HTML5 + output too.</p> -</section> -<section class="section"> -<header><h1 id="h_3" class="toc">Project Statistics</h1></header> -<p>Anoher big thing was a shiny new command, <code>glyph stats</code>, which brings &#8212; guess &#8212; stats. No more chasing after bookmark references, just type <code>glyph stats --bookmark=#web_output</code> and you&#8217;ll know where the <code>#web_output</code> bookmark was defined <em>and</em> what links to it. Similar stats are available for:</p> -<ul> - <li>macros</li> - <li>links</li> - <li>files</li> - <li>snippets</li> -</ul> -<p><code>glyph stats -m</code> tells me that I used 3236 macro instances throughout the Glyph book. Just so you know.</p> + </section> + <section class="section"> + <header> + <h1 id="h_3" class="toc">Project Statistics</h1> + </header> + <p>Anoher big thing was a shiny new command, <code>glyph stats</code>, which brings &#8212; guess &#8212; stats. + No more chasing after bookmark references, just type <code>glyph stats --bookmark=#web_output</code> and + you'll know where the <code>#web_output</code> bookmark was defined <em>and</em> what links to it. Similar + stats are available for:</p> + <ul> + <li>macros</li> + <li>links</li> + <li>files</li> + <li>snippets</li> + </ul> + <p><code>glyph stats -m</code> tells me that I used 3236 macro instances throughout the Glyph book. Just so you + know.</p> -</section> -<section class="section"> -<header><h1 id="h_4" class="toc">Custom tasks and commands</h1></header> -<p>&#8220;Glyph is extensible&#8221;, &#8220;Glyph lets you create your own macros&#8221;, &#8230;great, but kinda limited right? No more. Glyph now lets you create <em>custom Rake tasks</em> and even <em>custom commands</em>.</p> -<p>Have a look at <a href="/glyph/book/extending/commands_tasks.html">this page</a> for more information on what you can do and how. You can now extend Glyph in any way you like (including adding custom output formats) without having to touch its core, just do it <em>within your own project</em>.</p> + </section> + <section class="section"> + <header> + <h1 id="h_4" class="toc">Custom tasks and commands</h1> + </header> + <p>&#8220;Glyph is extensible&#8221;, &#8220;Glyph lets you create your own macros&#8221;, &#8230;great, but + kinda limited right? No more. Glyph now lets you create <em>custom Rake tasks</em> and even <em>custom + commands</em>.</p> + <p>Have a look at <a href="/glyph/book/extending/commands_tasks.html">this page</a> for more information on what + you can do and how. You can now extend Glyph in any way you like (including adding custom output formats) + without having to touch its core, just do it <em>within your own project</em>.</p> -</section> -<section class="section"> -<header><h1 id="h_5" class="toc">wkhtmltopdf</h1></header> -<p>Last but not least, you no longer need Prince <span class="caps">XML</span> to produce <span class="caps">PDF</span> file. Granted, Prince is awesome and the <span class="caps">PDF</span> it produces are very, very nice&#8230; but if you want to produce PDFs commercially and want to same some money, you can now use <a href="http://code.google.com/p/wkhtmltopdf/">wkhtmltopdf</a>: it&#8217;s <em>free</em> and <em>open source</em>, and it keeps getting better and better.</p> + </section> + <section class="section"> + <header> + <h1 id="h_5" class="toc">wkhtmltopdf</h1> + </header> + <p>Last but not least, you no longer need Prince <span class="caps">XML</span> to produce <span + class="caps">PDF</span> file. Granted, Prince is awesome and the <span class="caps">PDF</span> it + produces are very, very nice&#8230; but if you want to produce PDFs commercially and want to same some + money, you can now use <a href="http://code.google.com/p/wkhtmltopdf/">wkhtmltopdf</a>: it's <em>free</em> + and <em>open source</em>, and it keeps getting better and better.</p> -</section> -<section class="section"> -<header><h1 id="h_6" class="toc">...and more to come!</h1></header> -<p>After this release I&#8217;m going to take a small break from Glyph. Nothing major, I just want to redesign my site (again) and find the time to write a proper Glyph tutorial. This doesn&#8217;t mean that development will be halted or anything, just that it will take a few months for Glyph 0.5.0 to come out.</p> -<p>Meanwhile, there may be bugfix releases (depends how many bugs turn up). It would be a good time to come out of the closet and propose/vote on new <a href="http://github.com/h3rald/glyph/issues">features</a>!</p> -<p>Hope you enjoy using Glyph 0.4.0, and if you need anything or feel social, remember that the doors of the <a href="http://groups.google.com/group/glyph-framework">Glyph User Group</a> are always open!</p> + </section> + <section class="section"> + <header> + <h1 id="h_6" class="toc">...and more to come!</h1> + </header> + <p>After this release I'm going to take a small break from Glyph. Nothing major, I just want to redesign my site + (again) and find the time to write a proper Glyph tutorial. This doesn't mean that development will be + halted or anything, just that it will take a few months for Glyph 0.5.0 to come out.</p> + <p>Meanwhile, there may be bugfix releases (depends how many bugs turn up). It would be a good time to come out + of the closet and propose/vote on new <a href="http://github.com/h3rald/glyph/issues">features</a>!</p> + <p>Hope you enjoy using Glyph 0.4.0, and if you need anything or feel social, remember that the doors of the <a + href="http://groups.google.com/group/glyph-framework">Glyph User Group</a> are always open!</p> -</section> + </section> </section>
M contents/articles/glyph-050-released.htmlcontents/articles/glyph-050-released.html

@@ -22,7 +22,7 @@ <h1 id="h_1" class="toc">Calibre Integration</h1>

</header> <p><a href="https://github.com/tammycravit">Tammy Cravit</a> proposed (and more or less implemented) an interesting new feature: integrate <a href="http://calibre-ebook.com/">Calibre</a> to generate ebooks in <span - class="caps">EPUB</span> and <span class="caps">MOBI</span> format from Glyph&#8217;s native standalone <span + class="caps">EPUB</span> and <span class="caps">MOBI</span> format from Glyph's native standalone <span class="caps">HTML</span> output format.</p> <p>Although the support is still somewhat rough, you can, as a matter of fact, generate ebooks with Glyph, using Calibre.</p>

@@ -61,7 +61,8 @@ level of nesting.</p>

<p>Additionally, I used this features to create an <code>xml</code> macro dispatcher that can be used to render raw <span class="caps">XML</span> tags, and an <code>s</code> macro dispatcher that basically is able to call nearly all the instance methods of the Ruby String class. So you can write things like - <code>s/sub[This feature makes my life easier|/my/|your]</code> and similar.</p> + <code>s/sub[This feature makes my life easier|/my/|your]</code> and similar. + </p> </section> <section class="section">

@@ -95,7 +96,8 @@ </div>

</div> <p>Not that you <em>need</em> to be able to calculate factorials in your documents, but know that now you - <em>can</em>. An you can also define lexically scoped variables, err&#8230; <em>attributes</em>, like this:</p> + <em>can</em>. An you can also define lexically scoped variables, err&#8230; <em>attributes</em>, like this: + </p> <div class="CodeRay"> <div class="code"> <pre><span class="line-numbers"><a href="#n1" name="n1">1</a></span>let[

@@ -117,7 +119,8 @@ <header>

<h1 id="h_4" class="toc">Embeddable fragments</h1> </header> <p>Too lazy to create snippets? Feel the urge to re-use something you already wrote somewhere? Use a - <em>fragment</em> and embed it, as follows:</p> + <em>fragment</em> and embed it, as follows: + </p> <div class="CodeRay"> <div class="code"> <pre><span class="line-numbers"><a href="#n1" name="n1">1</a></span>Snippets and fragments ##[good_way|are a good way to reuse] small chunks of content,

@@ -136,17 +139,18 @@ </header>

<p>To sum up:</p> <ul> <li><code>snippets.yml</code> is no more, define all your snippets inside your document instead.</li> - <li>New &#8220;invisible space separator&#8221;: <code>\/</code> instead of <code>\.</code>. Because it&#8217;s + <li>New &#8220;invisible space separator&#8221;: <code>\/</code> instead of <code>\.</code>. Because it's slightly prettier, nothing else.</li> <li>The <code>rewrite:</code> macro has been replaced by the <code>define:</code> macro, which also allows recursion, so be careful!</li> <li>If you want to render raw <span class="caps">XML</span> tags, use <code>xml/tag_name</code> instead of - <code>=tag_name</code>.</li> + <code>=tag_name</code>. + </li> <li>No more <code>match</code> macro, use <code>s/match</code> instead.</li> </ul> <p>For the full list of the issues fixed in this release, see the <a href="/glyph/book/changelog.html">Changelog</a>.</p> - <p>Hope you&#8217;ll enjoy this new release of Glyph. If you want to contribute, go ahead and <a + <p>Hope you'll enjoy this new release of Glyph. If you want to contribute, go ahead and <a href="https://github.com/h3rald/glyph">fork the repo</a>!</p> </section>
M contents/articles/google-apps-for-your-domain.htmlcontents/articles/google-apps-for-your-domain.html

@@ -8,11 +8,12 @@ <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 &#8220;unique&#8221;: your email address is always gonna be <something><code>gmail.com or &lt;something&gt;</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> + really depends on the people using the service and how fussy they are: +</p> <ul> - <li>small/medium business wouldn&#8217;t like this: @gmail.com gives farless credibility than @domain.com</li> + <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 &#8220;on behalf of&#8221;, and this can - potentially mess things up as some spam filters don&#8217;t like it.</li> + 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

@@ -21,7 +22,7 @@ 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&#8230;</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&#8217;s +<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> &#8211; You know what it offers: a state-of-the art <span

@@ -30,34 +31,34 @@ (labels) stars and all the rest.</li>

<li><a href="http://www.google.com/calendar/">Google Calendar</a> &#8211; 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> &#8211; Google&#8217;s instant messenger, available through <a + <li><em>Google Chat</em> &#8211; 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> &#8211; aka Google&#8217;s page creator, easily create - webpages using Google&#8217;s <span class="caps">WYSIWYG</span> online editor.</li> + <li><a href="http://pages.google.com/">Google Web Pages</a> &#8211; 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&#8230; 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&#8217;s MX entry to &#8220;<span class="caps">ASPMX</span>.L.<span class="caps">GOOGLE</span>.<span + domain's MX entry to &#8220;<span class="caps">ASPMX</span>.L.<span class="caps">GOOGLE</span>.<span class="caps">COM</span>&#8221;, and follow the instructions to create an administration account for your Google - applications, and after a while every email sent to your domain&#8217;s accounts will be routed to your new - Google-powered inbox. Similarly, in order to use Google Page Creator on your domain, you&#8217;re required to change + 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 &#8220;ghs.google.com&#8221;. </p> <blockquote> - <p>Note: in order to avoid inconveniences especially if a lot of users use your domain&#8217;s email, it is - recommended that you pay attention on Google&#8217;s instructions on how to set the whole thing up. For further + <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 &#8220;www.yourdomain.com&#8221; or any subdomain currently in use or your visitors will access the pages you created with Google Page Creator. </p> </blockquote> -<p>Here&#8217;s what you get:<br /> +<p>Here's what you get:<br /> <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&#8217;s now have a + 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 />

@@ -66,30 +67,30 @@ </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&#215;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&#8217;s</strong></em></u><br /> +<p><u><em><strong>Use your company name instead of Google's</strong></em></u><br /> <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 &#8220;Google&#8221; or - &#8220;Gmail&#8221; in page titles and links. I chose &#8220;H3RALD.com Mail&#8221; and that&#8217;s displayed + &#8220;Gmail&#8221; in page titles and links. I chose &#8220;H3RALD.com Mail&#8221; 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="/images/pictures/gmail-hosted/options_panel.png" alt="" /></p> -<p>It&#8217;s really easy to use and has wizards to setup all the included services and options like setting up user +<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&#8217;s pretty generous considering that it seems that you&#8217;re + 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&#8217;re like to import? Just save them in <span class="caps">CSV</span> format and +<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&#8217;s more. We all know Google Talk: yes it&#8217;s nice, but probably <span class="caps">MSN</span> has + 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

@@ -97,15 +98,15 @@ 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&#8217;s appointments, reminder, project deadlines by creating + 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&#8217;t develop web application themselves. So the most obvious solution is to hire some professional + but they can't develop web application themselves. So the most obvious solution is to hire some professional web developer to rip them off&#8230; 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&#8217;t set it up on my own domain, but a preview of what you can do with Google Page Creator is available <a + 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

@@ -122,8 +123,8 @@ <li>Your own &#8220;corporate instant messenger&#8221;</li>

<li>Your own calendar to manage appointments, meetings etc.</li> <li>An intuitive and advanced web page creator &#8211; not like Geocities</li> </ul> -<p>All this for free. Yes, with ads (I&#8217;m not here to discuss <a href="http://www.gmail-is-too-creepy.com/">privacy - concerns</a>), but after all they&#8217;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 &#8220;Google Web Widgets&#8221; at some point. &#8220;Create your <em>interactive and dinamic</em> website within minutes, no programming knowledge
M contents/articles/google-chrome.htmlcontents/articles/google-chrome.html

@@ -5,38 +5,39 @@ timestamp: 1220401860

tags: "browsers|review|google" ----- <p style="float:left;"><img src="/images/google-chrome/chrome-logo.jpg" alt="" /></p> -<p>It looks like there&#8217;s a <a href="http://www.google.com/chrome">new open source browser</a> in town. As usual, +<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&#8217;t hear anything about it, you&#8217;d better take a look yourself. Don&#8217;t be fooled by the usual <a + 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&#8217;s not - the end of Windows, it&#8217;s not the end of the Internet, it&#8217;s not the end of the world as we know it. - It&#8217;s just a new player in the Browser Wars.</p> + 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&amp;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&#8217;s a nice 40-page comic + 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&#8230; I found it quite amusing and an interesting way to - <del>leak</del> distribute info on a new project.</p> + <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&#8217;ll get a tiny +<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&#8217;t ask <em>anything</em>: it will just install it in Program Files by itself. Idiot proof. + 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&#8217;t. The damn installer is supposed to pick up the proxy + 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&#8217;t work. As far as I know, there&#8217;s <a + 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&#8217;t have any chrome screenshots&#8230; to protest against Google&#8217;s +<p>This is the reason why this article won't have any chrome screenshots&#8230; to protest against Google's stupid way of doing things &#8220;too user-friendly&#8221;.</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&#8217;t be - able to browser web sites using Chrome. If that&#8217;s your case, make sure you change IE&#8217;s proxy settings by +<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 &#8220;re-invented&#8221; the browser</h3> <p>Why did Google bother? Officially because&#8230;</p>

@@ -56,92 +57,92 @@ <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&#8217;s mistakes, and try to fix them</li> + <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&#8217;t have extremely high expectations, and they&#8217;ll be prepared for a relatively unstable + <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> <h3>An &#8220;old&#8221; Rendering Engine</h3> -<p>Let&#8217;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&#8217;s Epiphany, Adobe <span +<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&#8217;s engine) is proprietary</li> - <li>Trident (IE&#8217;s engine) is proprietary, and it sucks</li> - <li>Gecko (Mozilla&#8217;s engine) is open source, but a bit bulky</li> + <li>Presto (Opera's engine) is proprietary</li> + <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&#8217;s +<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 &#8220;embeddable&#8221; and lightweight engine available, and it is also used on the Android platform for this very reason.</p> <h3>A &#8220;new&#8221; 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&#8217;t forget. So why - Google didn&#8217;t just use that?</p> + 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>&#8230;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&#8217;s very own Javascript Virtual Machine. When reading the Chrome Comic, I was +<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&#8217;t re-interpret the whole + 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&#8217;s incremental garbage collection looks like a much better alternative to the current conservative - garbage collection methods used for Javascript. Because of V8&#8217;s new concept of Hidden Class Transitions, + <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&#8217;t believe it you can <a - href="http://code.google.com/apis/v8/intro.html">download</a> V8&#8217;s C++ code and try it out yourself.</p> + 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&#8217;t do +<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&#8217;t that what IE 5 did? A new instance of the browser for each window? No, not quite: there&#8217;s +<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&#8217;s just a tab, at the end of the day.</p> + 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&#8217;s planned for Internet Explorer 8</a>, as <a + 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&#8217;s truly remarkable about this is that each tab seems to have an initial overhead of 1-2KB, which of course +<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&#8217;s also remarkable about Chrome&#8217;s tabs is the way you can interact with them:</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> <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&#8217;s AwesomeBar? Well, I personally did, others didn&#8217;t so much. Meet OmniBox&#8482; - Google&#8217;s very own, semi-sentient address bar which really understands you.</p> -<p>Here&#8217;s what you can do with it:</p> +<p>Did you like Mozilla's AwesomeBar? Well, I personally did, others didn't so much. Meet OmniBox&#8482; + 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&#8217;t do that)</li> + <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>

@@ -153,51 +154,51 @@ <li>Custom searches: search <span class="caps">IMDB</span>, Wikipedia, Amazon and google itself with a few clicks

</li> </ul> <p><img src="/images/google-chrome/chrome-bar.gif" alt="" /></p> -<p>Unlike Firefox&#8217;s AwesomeBar, Google&#8217;s OmniBox seems more &#8220;evolved&#8221;: it doesn&#8217;t get too - much in your way, it lets you go where you want to go, and it&#8217;s smart about searching. Apparently Mozilla is +<p>Unlike Firefox's AwesomeBar, Google's OmniBox seems more &#8220;evolved&#8221;: 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&#8230; 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&#8217;s Speed Dial, but with two interesting things:</p> + Opera's Speed Dial, but with two interesting things:</p> <ul> - <li>It displays the nine <em>most visited</em> pages: you don&#8217;t have to configure it!</li> + <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&#8217;ll miss this too: the pages I have in my speed dial are <span + 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&#8217;ll get used to it, though&#8230;</p> -<h3>Relax, it&#8217;s Google!</h3> +<p>I guess I'll get used to it, though&#8230;</p> +<h3>Relax, it's Google!</h3> <p>Google is not Evil&#8482;. 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&#8217;s why:</p> + 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&#8217;t apply.</li> - <li>Chrome continuously downloads lists of malicious sites, so that you&#8217;re protected against phishing in real + 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="/images/google-chrome/chrome-blame.gif" alt="" /></p> -<p>Now, if everything goes wrong, you know it&#8217;s definitely <em>someone else who did it</em>. If you read the comic - book between the lines, you&#8217;ll notice a not-so-subtle message to the end users:</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&#8217;s fault.</li> + 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> <h3>How it feels</h3> -<p>Google Chrome is clearly a very nice product to use. It&#8217;s as intuitive as IE for the average Windows user, it - has the best of Firefox and Opera features and it&#8217;s even more sleek than Safari. The UI, in my opinion, is a +<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 &#8220;download bucket&#8221; at the bottom

@@ -214,9 +215,9 @@ <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&#8217;s marketing strategy is quite clear, and it doesn&#8217;t seem to be failing on any point:</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&#8217;s what the bulk of IE aficionados uses.</li> + <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

@@ -224,25 +225,25 @@ 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 - &#8220;computer fiddlers&#8221; couldn&#8217;t resist.</li> + &#8220;computer fiddlers&#8221; 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> <h3>Open Source, testing and quality</h3> -<p>Google is well known for its massive infrastructure. Moreover, Google is the only &#8220;entity&#8221; (let&#8217;s +<p>Google is well known for its massive infrastructure. Moreover, Google is the only &#8220;entity&#8221; (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 &#8220;on Google&#8221;, it may well not exist at all: this is not strictly true, but it&#8217;s - the user perspective and ad the end of the day that&#8217;s all that matters.<br /> + something is not &#8220;on Google&#8221;, 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>&#8220;Within 20-30 minutres of each new browser build, we can teswt it on tens of thousands of different web pages&#8221;</em></p> -<p>&#8230;and that&#8217;s certainly not an understatemend: you can believe that.</p> +<p>&#8230;and that's certainly not an understatemend: you can believe that.</p> <p><img src="/images/google-chrome/chrome-tests.gif" alt="" /></p> <p>Google seems very concerned of building a &#8220;rock-solid&#8221; browser rather than being the coolest guy in town, - and that&#8217;s a good sign. Google is <em>smart</em>, remember?</p> -<p>As if it weren&#8217;t enough, the entire thing (the rendering engine, the javascript implementation and the whole + 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>

@@ -250,44 +251,44 @@ <li>Free developers</li>

<li>Good publicity</li> </ul> <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&#8217;s just +<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&#8217;t it just a browser, at the end of the day? Well, yes, but:</p> + Isn't it just a browser, at the end of the day? Well, yes, but:</p> <ul> - <li>It&#8217;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&#8217;s new <span - class="caps">API</span> will flock to the &#8217;fox like crazy.</li> - <li>It&#8217;s small, fast and very promising. Sure, it&#8217;s not perfect, but <span class="caps">YOU</span> can + <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&#8217;s on Windows, so it will reach the majority of Internet users&#8230; in theory.</li> + <li>It's on Windows, so it will reach the majority of Internet users&#8230; 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&#8217;s perhaps the only &#8220;subliminal&#8221; message they are trying to send to their + you to use for RIAs. That's perhaps the only &#8220;subliminal&#8221; 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&#8217;s just smarter than others.</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 &#8220;innovation&#8221; can be summarized with the following:</p> <p><em><strong>&#8220;Do not invent new things, just make them better&#8221;</strong></em></p> -<p>They didn&#8217;t invent Internet search: they just made it better and smarted. The same philosophy applies to +<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&#8217;t create a new rendering engine, they used an existing one</li> - <li>They analyzed Safari&#8217;s neat <span class="caps">GUI</span> tricks and implemented something even better. + <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 added an IE8-like domain highlight in the <span class="caps">URL</span>.</li> - <li>They got the Firefox&#8217;s AwesomeBar and improved it.</li> - <li>They got Opera&#8217;s Speed Dial and improved it.</li> - <li>They got IE8&#8217;s one-process-per-tab architecture and improved it.</li> - <li>They didn&#8217;t think of a Javascript <span class="caps">JIT</span> first, they just made it widely-available + <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&#8217;t think about merging the address bar with the search bar, Mozilla announced it first, but + <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&#8217;s only out for + <li>Safari 4 allows users to create shortcuts for their favorite web apps, but unfortunately it's only out for developers&#8230;</li> </ul> <p>Google did it, again. Exactly as planned.</p>
M contents/articles/h3rald-71.htmlcontents/articles/h3rald-71.html

@@ -13,10 +13,10 @@ simple:</p>

<ul> <li>No more sidebars &ndash; Who needs them anyway? Who wants to see my <a href="http://www.delicious.com/h3rald">delicious bookmarks</a> on <em>every single page</em>? Who wants to - see that annoying Web 2.0-ish tag cloud listing all the tags I&#8217;ve ever used from 2006 onwards? I suddently + see that annoying Web 2.0-ish tag cloud listing all the tags I've ever used from 2006 onwards? I suddently realized that the right column was nothing more than wasted space, so I removed it altogether.</li> - <li>No more differentiation between <em>articles</em> and <em>blog posts</em> &ndash; As a matter of fact, I&#8217;m - not posting little pointless tidbits everyday, it&#8217;s more likely just once a week or even once a month. + <li>No more differentiation between <em>articles</em> and <em>blog posts</em> &ndash; As a matter of fact, I'm + not posting little pointless tidbits everyday, it's more likely just once a week or even once a month. When I post though, I tend to make it worthwhile both for me and the readers by writing about something which may interest people, for a change. In short: this may not be a &#8220;traditional blog&#8221; anymore, just a publishing platform for my articles.</li>

@@ -25,12 +25,12 @@ page, in the archives and even when searching. If you want to read an article, all you have to do is click on

its title. No more &#8220;Read More&#8221; links.</li> <li>Just three main pages: <a href="">Home</a>, Archives, and <a href="/about">About</a>. Although there may be some more for special projects, at some point.</li> - <li>Use the Archives to find my articles. There you&#8217;ll find a list of the 20 most used tags, a search form, + <li>Use the Archives to find my articles. There you'll find a list of the 20 most used tags, a search form, and a timeline listing <em>all</em> my articles from 2006 onwards.</li> <li>Use the tiny palette on the left side of each page to perform common actions like bookmarking, scroll up and down, etc. You can read more about it on the <a href="/about">About</a> page.</li> </ul> -<p>I hope you like the new design, or at least I hope it makes my articles more readable. However, I&#8217;m open to +<p>I hope you like the new design, or at least I hope it makes my articles more readable. However, I'm open to suggestions, as usual.</p> <p>P.S.: I dropped with Internet Explorer 6 compatibility According to my stats, less than 5% of my visitors use it, so - it&#8217;s not worth the extra hassle.</p> + it's not worth the extra hassle.</p>
M contents/articles/h3rald-81.htmlcontents/articles/h3rald-81.html

@@ -12,8 +12,8 @@ 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&#8217;s no need for another major release. - Nonetheless, I decided to improve the site&#8217;s overall design and image, making it (hopefully) easier to use + <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

@@ -26,7 +26,7 @@ <section class="section">

<header> <h1 id="h_1" class="toc">Browser Compatibility</h1> </header> - <p>Although I shouldn&#8217;t really say this, the site is meant to be viewed with a WebKit-based browser, + <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>

@@ -37,14 +37,14 @@ <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&#8217;re using you can still read it.</p> + 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&#8217;t wait to try out CSS3 columns so I kinda went crazy on the home page, + <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
M contents/articles/h3rald-83.htmlcontents/articles/h3rald-83.html

@@ -7,7 +7,7 @@ tags: "website|webdevelopment"

----- <section class="section"> - <p>One of the many things that really bothered me about my web site was the fact that it didn&#8217;t look good on + <p>One of the many things that really bothered me about my web site was the fact that it didn't look good on my iPhone, or any small screen for that matter.</p> <p>Years ago I <a href="http://www.alistapart.com/articles/responsive-web-design/">read about</a> responsive web design, media queries, etc., but I never had the will or the time to dive into the subject. Then <a

@@ -56,7 +56,7 @@ <td><button class="btn">Click Me!</button></td>

</p> </tr> </table> - <p>That&#8217;s grey with black text. Boring. Want it red? Sure, add the <code>.btn-danger</code> class:</p> + <p>That's grey with black text. Boring. Want it red? Sure, add the <code>.btn-danger</code> class:</p> <table> <tr> <td>

@@ -90,7 +90,7 @@ <td><button class="btn btn-danger btn-small">Click Me!</button></td>

</p> </tr> </table> - <p>Wouldn&#8217;t it be nice to have a nice icon in it? Add an empty <code>&lt;i&gt;</code> element with a + <p>Wouldn't it be nice to have a nice icon in it? Add an empty <code>&lt;i&gt;</code> element with a suitable class and there you have a nice <a href="http://twitter.github.com/bootstrap/base-css.html#icons">Glyphicon</a> before the button text (or you can use other icon fonts, like <a href="http://fontawesome.io/">FontAwesome</a>).</p>

@@ -113,24 +113,24 @@ </table>

<p>&#8230;You get the picture. And it works surprisingly well &#8212; if you embrace its philosophy, that is. Just like Rails &amp; Co.: an <em>opinionated</em> framework.</p> <p>The only thing that bugged me about all this was that by adding smart <span class="caps">CSS</span> classes - to elements you&#8217;re actually specifying how something looks like by polluting <span - class="caps">HTML</span> code. Granted, if your stylesheet doesn&#8217;t include a - <code>.btn-inverse</code> your buttons won&#8217;t automagically become black, but you know what I mean. - Although in a very nice way, by following Bootstrap&#8217;s way of doing things you are no longer separating - content from presentation. And in the next six months, when I&#8217;ll ditch Bootstrap for something better, - all the previews of the code snippets above won&#8217;t work unless I keep using the Bootstrap stylesheet or + to elements you're actually specifying how something looks like by polluting <span class="caps">HTML</span> + code. Granted, if your stylesheet doesn't include a + <code>.btn-inverse</code> your buttons won't automagically become black, but you know what I mean. + Although in a very nice way, by following Bootstrap's way of doing things you are no longer separating + content from presentation. And in the next six months, when I'll ditch Bootstrap for something better, + all the previews of the code snippets above won't work unless I keep using the Bootstrap stylesheet or at least some of its button classes. </p> <p>The real problems arise for the stylesheets provided for general elements. By default, Bootstrap styles tables with no borders or colors. What if I wanted just ordinary tables to be striped and bordered? Sure, I can add the <code>.table-striped</code> and <code>.table-bordered</code> classes to all tables, and - that&#8217;s it. In <span class="caps">EVERY</span> table. Or of course undo bootstrap&#8217;s magic by + that's it. In <span class="caps">EVERY</span> table. Or of course undo bootstrap's magic by overriding the <span class="caps">CSS</span> rules for ordinary tables, to include the rules specified for - <code>.table-striped</code> and <code>.table-bordered</code>. Copy &amp; paste someone else&#8217;s code? + <code>.table-striped</code> and <code>.table-bordered</code>. Copy &amp; paste someone else's code? Not nice. </p> <p>Luckily, using <a href="http://sass-lang.com/"><span class="caps">SASS</span></a> finally paid off, and - here&#8217;s how to do it in a nice and tidy way:</p> + here's how to do it in a nice and tidy way:</p> <div class="code"> <pre>

@@ -163,17 +163,17 @@ <li>The search input box (powered by <a href="http://www.google.com/cse/">Google Custom Search Engine</a>

</li> <li>A <em>responsive</em> navigation bar with links to all the main sections of the site</li> </ul> - <p>As far as the navigation bar goes, that&#8217;s pure Bootstrap goodness, nothing new there (except the serif + <p>As far as the navigation bar goes, that's pure Bootstrap goodness, nothing new there (except the serif font), <a href="http://twitter.github.com/bootstrap/components.html#navbar">look it up</a>.</p> <p>For the logo&#8230; Well, I had this nice plan of using just plain <span class="caps">CSS</span> and web - fonts to make it (hell, it&#8217;s basically the word &#8220;H3RALD&#8221;, with the 3 slightly bigger and - moved a bit). It worked mostly fine (in webkit browser and in Opera), but Firefox didn&#8217;t like it much, - and IE&#8230; well, some old versions of IE don&#8217;t play nice with web fonts, so I decided to make a + fonts to make it (hell, it's basically the word &#8220;H3RALD&#8221;, with the 3 slightly bigger and + moved a bit). It worked mostly fine (in webkit browser and in Opera), but Firefox didn't like it much, + and IE&#8230; well, some old versions of IE don't play nice with web fonts, so I decided to make a nice <span class="caps">PNG</span> image and stick it there instead. Less hassle, it works everywhere, job done.</p> <p>The search input box was a bit more of a challenge. I read up on the new <a href="https://developers.google.com/custom-search/docs/element">Custom Search Element Control <span - class="caps">API</span></a>, discovered that Google decided that web designers don&#8217;t know + class="caps">API</span></a>, discovered that Google decided that web designers don't know Javascript or <span class="caps">CSS</span> nowadays and proposed a new <span class="caps">API</span> that has numerous advantages like:</p> <blockquote>

@@ -181,14 +181,14 @@ <ul>

<li>Easy to use syntax—no JavaScript knowledge required.</li> <li>Custom Search elements (search boxes and results pages) are rendered based on settings stored on the <span class="caps">CSE</span> servers (along with any client-side customization). Server-side - changes don&#8217;t require you to copy and paste any new code into your site<br /> + changes don't require you to copy and paste any new code into your site<br /> </blockquote> </li> </ul> <p>Thanks Google. Now every time I change my stylesheet I have to remember to go back to your page and change the link colors etc. And if I decide to hide the page <span class="caps">URL</span> underneath the link in - the results? I can&#8217;t. And that&#8217;s why I decided to reverse engineer their <span - class="caps">CSS</span> and provide my overrides. Nasty, but at least I have some control! They&#8217;re + the results? I can't. And that's why I decided to reverse engineer their <span class="caps">CSS</span> and + provide my overrides. Nasty, but at least I have some control! They're all <a href="https://github.com/h3rald/h3rald/blob/master/content/styles/_vendor.scss">here</a>, if you are curious.</p>

@@ -211,9 +211,9 @@ already know how to share items using bookmarklets or browser extensions. No need to plague my web site

with their nasty buttons, badges, ribbons &amp; alike.</li> <li>No ads! I have a full-time job, my site uses free and open source technologies, and I write because I like to do so, not to make money. And I can afford the few bucks necessary to pay the hosting provider. - That&#8217;s why there are NO <span class="caps">ADS</span> on H3RALD.com anymore <sup>(*)</sup>.</li> + That's why there are NO <span class="caps">ADS</span> on H3RALD.com anymore <sup>(*)</sup>.</li> </ul> - <p><sup>(*)</sup>: For now, that is. Then I&#8217;ll probably change my mind, but until then enjoy the true + <p><sup>(*)</sup>: For now, that is. Then I'll probably change my mind, but until then enjoy the true no-ads experience!</p> </section>
M contents/articles/h3rald-v7-overview.htmlcontents/articles/h3rald-v7-overview.html

@@ -5,25 +5,42 @@ timestamp: 1182515880

tags: "website|rails" ----- <p>&#8230;or better, on <a href="http://www.rubyonrails.org">Rails</a>_. <br /> -Yep, this 7th (!) version of the H3RALD website is powered by the overly-popular Ruby web framework <em>and</em> by the <a href="http://www.typosphere.org">Typo</a> blogging platform.</p> -<p>Nope, I decided not to re-develop my website entirely from scratch this time, although I was tempted to, for three simple reasons:</p> + Yep, this 7th (!) version of the H3RALD website is powered by the overly-popular Ruby web framework <em>and</em> by + the <a href="http://www.typosphere.org">Typo</a> blogging platform.</p> +<p>Nope, I decided not to re-develop my website entirely from scratch this time, although I was tempted to, for three + simple reasons:</p> <ol> - <li>My &#8220;coding time&#8221; is close to non-existent nowadays, and even with a framework like Rails re-developing a site from scratch would have taken at least <em>some</em> time, which at the moment I don&#8217;t have.</li> - <li>Typo is a fairly robust and feature-rich blogging platform, and after learning a little bit of Rails I could customize it to my needs straight away. URLs didn&#8217;t break thanks to Rails&#8217; routing system, migration was easy enough, and developing the missing bits (like a rudimentary BBCode parser and a TextLinkAds sidebar) wasn&#8217;t hard at all.</li> + <li>My &#8220;coding time&#8221; is close to non-existent nowadays, and even with a framework like Rails + re-developing a site from scratch would have taken at least <em>some</em> time, which at the moment I don't + have.</li> + <li>Typo is a fairly robust and feature-rich blogging platform, and after learning a little bit of Rails I could + customize it to my needs straight away. URLs didn't break thanks to Rails' routing system, migration was easy + enough, and developing the missing bits (like a rudimentary BBCode parser and a TextLinkAds sidebar) wasn't hard + at all.</li> <li>I wanted to take a break from my site, not code it again.<br /> -<em>Fair enough, but why the new site anyway?</em></li> + <em>Fair enough, but why the new site anyway?</em> + </li> </ol> -<p>Again, there&#8217;s more than one answer:</p> +<p>Again, there's more than one answer:</p> <ul> - <li>Lately I didn&#8217;t feel comfortable sporting a Cake-powered website \- that makes sense, to an extent, right? Good.</li> - <li>I got fed up with spam. I wanted to re-open comments but I didn&#8217;t want to implement spam protection for the old site.</li> - <li>To be totally honest, I got fed up with <span class="caps">PHP</span> itself as well, after trying out Ruby for a few days and ordering and reading the 2nd edition of the <a href="http://www.pragmaticprogrammer.com/titles/ruby/">PickAxe</a>, which I <em>highly</em> recommend.</li> + <li>Lately I didn't feel comfortable sporting a Cake-powered website \- that makes sense, to an extent, right? Good. + </li> + <li>I got fed up with spam. I wanted to re-open comments but I didn't want to implement spam protection for the old + site.</li> + <li>To be totally honest, I got fed up with <span class="caps">PHP</span> itself as well, after trying out Ruby for + a few days and ordering and reading the 2nd edition of the <a + href="http://www.pragmaticprogrammer.com/titles/ruby/">PickAxe</a>, which I <em>highly</em> recommend.</li> </ul> -<p>&#8230;But let&#8217;s say something about what&#8217;s new in this new release, shall we?</p> +<p>&#8230;But let's say something about what's new in this new release, shall we?</p> <ul> - <li>A new, black (and red) theme. Something completely different. Probably not that good, but quite useful: Every day I check my site from my laptop at work, and if it looks like a big black blob I know that I have to regulate my monitor. I showed it to my parents on their old monitor, and they realized that perhaps it&#8217;s time to buy an <span class="caps">LCD</span> one&#8230;</li> - <li>Comments, trackbacks, desktop client support, theme support, a cool admin area and everything else Typo offers.</li> - <li>Full <span class="caps">RSS</span> feeds. With no ads. So you don&#8217;t need to see this black blob anymore, if you really don&#8217;t like it.</li> - <li>No projects or bookmarks, just my blog and my articles. Let&#8217;s keep it simple.</li> + <li>A new, black (and red) theme. Something completely different. Probably not that good, but quite useful: Every + day I check my site from my laptop at work, and if it looks like a big black blob I know that I have to regulate + my monitor. I showed it to my parents on their old monitor, and they realized that perhaps it's time to buy an + <span class="caps">LCD</span> one&#8230;</li> + <li>Comments, trackbacks, desktop client support, theme support, a cool admin area and everything else Typo offers. + </li> + <li>Full <span class="caps">RSS</span> feeds. With no ads. So you don't need to see this black blob anymore, if you + really don't like it.</li> + <li>No projects or bookmarks, just my blog and my articles. Let's keep it simple.</li> </ul> <p>More to come&#8230;</p>
M contents/articles/herald-vim-021.htmlcontents/articles/herald-vim-021.html

@@ -5,11 +5,16 @@ timestamp: 1258029269

tags: "programming|vim" ----- <p style="float:right;"><img src="/images/herald.vim/0.2.1_release.png" alt="" /></p> -<p><span class="dropcap">I</span> just updated the <a href="/herald-vim-color-scheme/">Herald Vim color scheme</a> to improve the readability of delimiters and search results.</p> -<p>Delimiters are now red (the same color as operators) instead of yellow, so that you can tell the start and end of a string or regular expression more easily. Additionally, search results are no longer highlighted with black text on an orange background for two reasons:</p> +<p><span class="dropcap">I</span> just updated the <a href="/herald-vim-color-scheme/">Herald Vim color scheme</a> to + improve the readability of delimiters and search results.</p> +<p>Delimiters are now red (the same color as operators) instead of yellow, so that you can tell the start and end of a + string or regular expression more easily. Additionally, search results are no longer highlighted with black text on + an orange background for two reasons:</p> <ul> <li>the orange background is a bit too strong</li> - <li>the black foreground causes letters to become <em>completely hidden</em> by the <em>cursorline</em> and <em>cursorcolumn</em></li> + <li>the black foreground causes letters to become <em>completely hidden</em> by the <em>cursorline</em> and + <em>cursorcolumn</em></li> </ul> <p>Search results now have a gray background and a yellow background, as shown in the screenshot on the right.</p> -<p>If you have any constructive suggestion on how to improve this color scheme, don&#8217;t hesitate to add a comment to this post!</p> +<p>If you have any constructive suggestion on how to improve this color scheme, don't hesitate to add a comment to this + post!</p>
M contents/articles/herald-vim-color-scheme.htmlcontents/articles/herald-vim-color-scheme.html

@@ -6,33 +6,33 @@ popular: true

timestamp: 1245211860 tags: "programming|vim" ----- -<p>I use <a href="http://www.vim.org">Vim</a> a lot. It&#8217;s my editor of choice when I code (mainly in Ruby), and +<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&#8217;s probably a syntax highlighting +<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&#8217;s surprisingly easy to do. Everything you need to +<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 &#8212; that&#8217;s what I did.h3. InfiniteRed Black</p> -<p>I&#8217;ve been using the <a href="http://blog.infinitered.com/entries/show/8">ir_black</a> color scheme for near - enough a year. It&#8217;s an excellent color scheme, recommended especially for writing Ruby code:</p> + can just start by editing an existing one &#8212; 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&#8230;</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&#8217;s a matter of taste, of course:</p> + 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&#8217;s not completely black. Still, I didn&#8217;t quite like the colors, so I +<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&#8230;</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><img src="/images/herald.vim/herald_vim_example.png" alt="" /></p> -<p>To sum up, here&#8217;s the <em>features</em> offered by this new color scheme:</p> +<p>To sum up, here's the <em>features</em> offered by this new color scheme:</p> <ul> - <li>It&#8217;s easier to differentiate syntax elements; in particular reserved words like <code>if</code> or + <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>
M contents/articles/hlrb-review.htmlcontents/articles/hlrb-review.html

@@ -4,22 +4,22 @@ content-type: article

timestamp: 1191383580 tags: "ruby|review|books" ----- -<p>After reading the very first paragraph of Mr. Neighborly&#8217;s <a - href="http://www.humblelittlerubybook.com/">Humble Little Ruby Book</a> (<span class="caps">HLRB</span> for +<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>&#8220;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&#8217;t want to get psyched about a new gadget, get it home, <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?&#8221;</p> </blockquote> -<p>That reminded me immediately of <a href="http://poignantguide.net/ruby/">Why&#8217;s Poignant Guide to Ruby</a>. - without a doubt. I don&#8217;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&#8217;t find any foxes or chunky bacon +<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&#8217;s move on&#8230;h3. Chapter 0: What&#8217;chu talkin&#8217; &#8217;bout, mister?</p> +<p>Got the picture? Good. Let's move on&#8230;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> <ul>

@@ -34,34 +34,35 @@ <blockquote>

<p>&#8220;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.&#8221;</p> </blockquote> -<p>As the first two lines of this chapter say, it&#8217;s time to learn the basics of Ruby. You&#8217;ll be quickly +<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&#8217;t find a full list of all the 876 methods of the String class, but you&#8217;ll certainly - learn the 10 most common ones at least (numbers are random, so no, don&#8217;t count them). <br /> + 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&#8230; <em>if you really want</em> you can skip this chapter too, but if you are already - a Ruby Guru there&#8217;s probably no need for you to read books about Ruby, right? Beginners need to read this - chapter. It&#8217;s compulsory, really, and pretty enjoyable, too.</p> + 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 &#8220;learn how to segment your code&#8221; using methods, and&#8230; blocks &amp; <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&#8217;ll have to face your fears and dive into it. You&#8217;ll survive, anyway.</p> + 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>&#8220;Think of Proc objects as blocks that are pushed into variables.&#8221;</em> than anything else, - guaranteed.</p> -<p>After this section you&#8217;ll finally be introduced to Ruby classes. Now, this can piss someone off, no doubt. Ruby + 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&#8217;ll + 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&#8217;ll briefly look into modules as well.</p> + 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&#8217;ll also learn how exceptions work: a clever way to tell people &#8220;you + Towards the end of the chapter, you'll also learn how exceptions work: a clever way to tell people &#8220;you have to learn how to use exceptions from the very beginning&#8221;. Really nicely done.</p> <h3>Chapter 4: The system beneath&#8230;</h3> <p>Here comes the juicy stuff. Up to now you learnt the usual boring things you need to know when learning a new

@@ -80,11 +81,11 @@ <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&#8217;s still not enough, you&#8217;ll also have a chance to explore the wonderful world of distributed Ruby - and of databases. Granted, this chapter won&#8217;t tell you about the 1567 methods available in ActiveRecord (buy a + 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&#8217;s a Library!</h3> +<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> <li>Strings</li>

@@ -98,18 +99,19 @@ <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&#8230; 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&#8217;s better to make - this clear otherwise I&#8217;ll be hunted forever by Dave Thomas, Chad Fowler, <span class="caps">DHH</span> and all +<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&#8217;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> + 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&#8217;d say some parts should be expanded and more info on other libraries should + (but only if you force me to), I'd say some parts should be expanded and more info on other libraries should be provided&#8230; but you never know what the future will bring us!</p> <p>Well done, <a href="http://www.jeremymcanally.com/">Mr. Neighborly</a>!</p>
M contents/articles/holiday-house-for-rent.htmlcontents/articles/holiday-house-for-rent.html

@@ -5,10 +5,10 @@ timestamp: 1240530840

tags: "personal" ----- <p><img src="/images/sessarego/outside.jpg" style="float:left; border: 1px solid #B80000; margin-right: 10px;" /></p> -<p>Part of my family house in the countryside is now available for rent! It&#8217;s located in the small village of <a +<p>Part of my family house in the countryside is now available for rent! It's located in the small village of <a href="http://italia.indettaglio.it/eng/liguria/genova_bogliasco_sessarego.html">Sessarego</a>, a few minutes away from the coast, on the Italian Riviera.<br /> - We&#8217;ve been living there recently for 6 months when I started working and then moved to the city in order to be + We've been living there recently for 6 months when I started working and then moved to the city in order to be nearer to my workplace, but we still go there on holidays or on the odd week end, sometimes.</p> <p>The house is fully furnished, it has been recently renovated, and offers all major comforts and services (utilities, TV, internet, phone, etc.). It can be ideal as a holiday house for writers, programmers, or anyone who would like to
M contents/articles/im-on-twitter-anyway.htmlcontents/articles/im-on-twitter-anyway.html

@@ -4,12 +4,17 @@ content-type: article

timestamp: 1211101440 tags: "personal|review|programming" ----- -<p>I&#8217;ve been neglecting my blog, I know. The truth is that I&#8217;m quite busy in this period: I have more responsibilities in my daily full-time jobs, my lunch breaks are getting shorter and I don&#8217;t have much free time. At any rate, here&#8217;s what&#8217;s going on:</p> +<p>I've been neglecting my blog, I know. The truth is that I'm quite busy in this period: I have more responsibilities + in my daily full-time jobs, my lunch breaks are getting shorter and I don't have much free time. At any rate, here's + what's going on:</p> <ul> - <li>I&#8217;m writing a new article for an online magazine (assuming I&#8217;m gonna finish it)</li> + <li>I'm writing a new article for an online magazine (assuming I'm gonna finish it)</li> <li>I signed up for a freelance technical reviewing job, for a new Ruby book which will come out soon-ish</li> - <li>I&#8217;m getting ready to finally visit Rome (again), this time with my fiancée, for our fifth anniversary.</li> - <li>I&#8217;m slowly preparing a version 1.0 of <a href="http://code.google.com/p/redbook/">RedBook</a>, which involves quite a lot of refactoring (and hopefully better documentation and tests).</li> - <li>I&#8217;m trying to learn a little bit of Haskell: it seems to be one of the few non .<span class="caps">NET</span> languages able to produce standalone .exe files, nowadays&#8230;</li> + <li>I'm getting ready to finally visit Rome (again), this time with my fiancée, for our fifth anniversary.</li> + <li>I'm slowly preparing a version 1.0 of <a href="http://code.google.com/p/redbook/">RedBook</a>, which involves + quite a lot of refactoring (and hopefully better documentation and tests).</li> + <li>I'm trying to learn a little bit of Haskell: it seems to be one of the few non .<span class="caps">NET</span> + languages able to produce standalone .exe files, nowadays&#8230;</li> </ul> -<p>Last but not least, I now decided to use <a href="http://twitter.com">Twitter</a> regularly, so you can follow me <a href="http://twitter.com/h3rald/">there</a>, if you wish!</p> +<p>Last but not least, I now decided to use <a href="http://twitter.com">Twitter</a> regularly, so you can follow me <a + href="http://twitter.com/h3rald/">there</a>, if you wish!</p>
M contents/articles/incomplete-guide-to-london.htmlcontents/articles/incomplete-guide-to-london.html

@@ -7,7 +7,7 @@ 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)&#8217;s brother + 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>

@@ -38,18 +38,18 @@ </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)&#8217;s brother + 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&#8217;t have to pay for +<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 &#8211; unless of course you get to stay at - Caspar&#8217;s place.</p> + 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&#8217;s a quick answer to the universal - traveller&#8217;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>&#8220;Is there any cheap, reliable and on-time airline?&#8221;</em></p> <p><a name="planes"></a> <a href="#top">[Back to Top]</a></p> <h4>Planes</h4>

@@ -57,14 +57,15 @@ <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&#8217;t provide full meals aboard, they don&#8217;t have any cutlery on board for you to steal, unlike <a + 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&#8217;m happily engaged and Roxanne doesn&#8217;t fancy me stealing BA cutlery it&#8217;s better this way indeed. + 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> + 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>

@@ -72,12 +73,12 @@ <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="/images/pictures/london/cab.jpg" alt="" /></p> <p>The next question of the London newbie arriving in Stansted airport is:</p> -<p><em>&#8220;Cool, now I&#8217;m in the middle of nowhere in England, where&#8217;s London then?&#8221;</em></p> +<p><em>&#8220;Cool, now I'm in the middle of nowhere in England, where's London then?&#8221;</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 &#8211; apparently &#8211; 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&#8217;s an alternative in the form of an endless amount coaches going from Stansted to London and + 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

@@ -99,15 +100,15 @@ the night should not cost more than 6 pounds&#8230;</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&#8217;t use the Tube for some particular reason (e.g. you need to go to Zone 3 or + 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&#8217;re going to Covent Garden: it&#8217;s just 300 metres away and Covent + 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&#8217;re catching is marked with &#8220;Good Service&#8221;, try another route + 4. Always check whether the line you're catching is marked with &#8220;Good Service&#8221;, try another route if there delays are expected<br /> - 5. Keep right on escalators &#8211; there&#8217;s always some lunatic running up/down on the left side, from time to + 5. Keep right on escalators &#8211; 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

@@ -118,21 +119,21 @@ <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 &#8211; and also if you feel brave enough to try at random &#8211; the areas surrounding the city centre are probably cheaper than the 4-million different food chains providing any kind of meal near Oxford Street &amp; Co. and possibly &#8211; arguably &#8211; more tasty.</p> -<p>If you dare to venture in the land of the Turkish/Bangladesh/Indian food shops you&#8217;re more than welcome to do - so, but be prepared to a potentially long trial-and-error process: in the end you&#8217;ll eventually find the right +<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&#8217;s vegetarian anyway) so she didn&#8217;t + 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&#8217;s</a>, <a href="http://www.starbucks.com/">Starbucks</a> + Yes, <a href="http://www.mcdonalds.com/">McDonald's</a>, <a href="http://www.starbucks.com/">Starbucks</a> &amp; 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>&#8230;) 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&#8217;t so packed. I was pleased to notice that a load + 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>

@@ -146,12 +147,12 @@ believe</a> in the importance of healthy food and fight a silent &#8211; but effective &#8211; quest against

aforementioned Rubbish Food Giants.</p> <p>bq.<br /> &#8220;Pret operates a bit like a restaurant. Every Pret has its own kitchen (except for one or two of the tiny - ones). You won&#8217;t find &#8216;sell by&#8217; dates on our fresh sandwiches and salads. We don&#8217;t sell - &#8216;factory&#8217; stuff. We offer our food to charity at the end of each day rather than keep it over.&#8221; + ones). You won't find &#8216;sell by' dates on our fresh sandwiches and salads. We don't sell + &#8216;factory' stuff. We offer our food to charity at the end of each day rather than keep it over.&#8221; </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&#8217;s hope for the best.<br /> + (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

@@ -165,12 +166,12 @@ <p><a name="brick"></a> <a href="#top">[Back to Top]</a></p>

<h4>Brick Lane</h4> <p><em>&#8220;Come in my restaurant&#8230; good food, cheap&#8230;&#8221;</em><br /> &#8220;No.&#8221;<br /> - <em>&#8220;C&#8217;mon, I make a discount for you&#8221;</em><br /> + <em>&#8220;C'mon, I make a discount for you&#8221;</em><br /> &#8220;How much?&#8221;<br /> <em>&#8220;15% off&#8221;</em><br /> &#8220;No way mate, last time it was 25% with a free round of drinks!&#8221;<br /> - <em>&#8220;You came here before? Impossible, we don&#8217;t do 25% off, we do 20% off maximum&#8221;</em><br /> - &#8220;No, 25% off, it was 25% off, but doesn&#8217;t matter, I&#8217;ll go somewhere else&#8230;&#8221;<br /> + <em>&#8220;You came here before? Impossible, we don't do 25% off, we do 20% off maximum&#8221;</em><br /> + &#8220;No, 25% off, it was 25% off, but doesn't matter, I'll go somewhere else&#8230;&#8221;<br /> <em>&#8220;No wait, 20% off and free drinks, ok?&#8221;</em><br /> &#8220;25%&#8221;<br /> <em>&#8220;OK, 25% and free drinks, but you come in OK? Good food!&#8221;</em>

@@ -185,17 +186,18 @@ 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&#8217;s loads to do for every taste. This is an - <em>incomplete</em> guide, so I&#8217;ll just mention a few possibilities, but be aware that there&#8217;s much, - much more than this.</p> + 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&#8217;s basically what the traditional Londoners (or maybe we shall generalise to all of England&#8230;) do - every saturday night: they get trashed. Why? It&#8217;s not clever, it&#8217;s not good&#8230; but it&#8217;s bloody +<p>That's basically what the traditional Londoners (or maybe we shall generalise to all of England&#8230;) do + every saturday night: they get trashed. Why? It's not clever, it's not good&#8230; but it's bloody good fun!<br /> - Clubs, pubs and bars are the best place for this kind of activity: they are comfortable, there&#8217;s normally cool + 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>

@@ -208,60 +210,60 @@ <li>A competent bouncer who kindly reminded us to &#8220;watch over&#8221; one of our friends, after she suddenly

ordered four Vodka-RedBull at once&#8230;</li> </ul> <p>No wonders why Caspar &amp; his friends carefully picked this place as their ideal candidate for their own upcoming - DJ mini-event in November: it&#8217;s an ideal place to spend your night.</p> + 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&#8217;d have pulled almost all the (decent-looking) - girls available by the end of the night. I&#8217;ll definetely recommend some of my <em>free</em> (not as in + 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&#8217;s focus on culture, at once!<br /> +<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&#8217;t go to the <a href="http://www.thebritishmuseum.ac.uk/">National + (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&#8217;m not +<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 (&amp; 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&#8217;S <span class="caps">PARTHENON</span>!</em> That was shocking really, but after all it was Napoleon + 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&#8217;s and - Kandinski&#8217;s paintings etc. etc., but I don&#8217;t think it can ever be as breath-taking as the other ones. I - certainly don&#8217;t understand certain kinds of modern art, but I can&#8217;t understand how a random guy could +<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&#8217;s most remarkable museums, let&#8217;s say something about +<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&#8217;s masterpieces, but alas, nothing like this at all. Yes, sure, there were a few stuffed + 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 &#8211; in my very, very humble opinion &#8211; was a real insult to Science and to the dignity of the visitors over five years old.<br /> They insisted in &#8220;renovating&#8221; 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&#8217;t it? I really don&#8217;t understand who + 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 - &#8220;interactivity&#8221;, and that&#8217;s understandable &#8211; in theory. In practice though, there are a few - elements which weren&#8217;t obviously considered when developing such a subtly cunning marketing strategy:</p> + &#8220;interactivity&#8221;, and that's understandable &#8211; 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&#8217;t really + (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&#8217;t be bothered to push button, move levers, etc. etc. only to highlight some text. Wake + 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&#8217;s managers, not the kids of course)!</li> + 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 &#8220;interactive&#8221; toys.</li> </ul>

@@ -270,41 +272,42 @@ <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 &#8220;at least&#8221; three quid for their wonders, - same as for the British Museum and the National Gallery. You know what? I&#8217;d rather give <em>thirty</em> quid + 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 &#8220;museum&#8221;&#8230;</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&#8217;t have a chance to go to a musical this time, but - I&#8217;ll definitely try to make it for one during my next visit. Adverts for the shows are all over the place, +<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&#8217;t seem to be possible&#8230;<br /> - Anyhow, not only we didn&#8217;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&#8217;t know, happens to - be one of the best Shakespearean actors alive&#8230; when he doesn&#8217;t <a + discounted price while apparently buying full price tickets doesn't seem to be possible&#8230;<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&#8230; 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&#8217;s Antony and Cleopatra at the <a +<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&#8217;s plays used to be acted. Like in + 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="/images/pictures/london/globe.jpg" alt="" /></p> -<p>We obviously went for option b, of course, since we didn&#8217;t fancy the idea of paying that much &#8211; although - it can be worthwhile. Only one thing to keep in mind: <em>always check the duration of the play you&#8217;re going - to see beforehand</em> &#8211; if you don&#8217;t like standing up for a long time, you have to go for option a. +<p>We obviously went for option b, of course, since we didn't fancy the idea of paying that much &#8211; 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> &#8211; if you don't like standing up for a long time, you have to go for option a. <br /> - We obviously <em>didn&#8217;t</em> check how long the play was going to be &#8211; although we could have imagined + We obviously <em>didn't</em> check how long the play was going to be &#8211; although we could have imagined it &#8211; 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&#8217;t sit on the stairs and neither on the floor, and the staff is ready to enforce this rule at + 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&#8217;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&#8217;ve ever been to so far, - although I must also say that most of the ones I&#8217;ve been to before were acted in (yikes!) Italian (yes, we do + 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&#8217;t be denied of the pleasure of watching Shakespeare&#8217;s masterpieces at the theatre. Please, keep - it up.</p> + 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

@@ -320,11 +323,11 @@ 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>? &#8211; it&#8217;s not far from + <a href="http://www.harrods.com/Cultures/en-GB/homepageindex.htm">Harrods</a>? &#8211; 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&#8217;s call it a day for this article, but be aware that there&#8217;s much, <span - class="caps">MUCH</span> more to see and do in London than you can ever imagine. Unless you&#8217;re from the +<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>
M contents/articles/inline-introduction.htmlcontents/articles/inline-introduction.html

@@ -4,22 +4,38 @@ content-type: article

timestamp: 1205128740 tags: "ruby|programming|opensource|rawline" ----- -<p>One of the many things I like about Ruby is its cross-platform nature: as a general rule, Ruby code runs on everything which supports Ruby, regardless of its architecture and platform (yes, there are quite a few exceptions, but let&#8217;s accept this generalization for now).</p> -<p>More specifically, I liked the fact that I could use the <a href="http://tiswww.case.edu/php/chet/readline/rltop.html"><span class="caps">GNU</span> Readline library</a> with Ruby seamlessly on both Windows and Linux.<br /> -Readline offers quite a lot of features which are useful for those people like me who enjoy creating command-line scripts, in a nutshell, it provides:</p> +<p>One of the many things I like about Ruby is its cross-platform nature: as a general rule, Ruby code runs on + everything which supports Ruby, regardless of its architecture and platform (yes, there are quite a few exceptions, + but let's accept this generalization for now).</p> +<p>More specifically, I liked the fact that I could use the <a + href="http://tiswww.case.edu/php/chet/readline/rltop.html"><span class="caps">GNU</span> Readline library</a> + with Ruby seamlessly on both Windows and Linux.<br /> + Readline offers quite a lot of features which are useful for those people like me who enjoy creating command-line + scripts, in a nutshell, it provides:</p> <ul> <li>File/Word completion</li> <li>History support</li> <li>Custom key bindings which can be modified via .inputrc</li> <li>Emacs and Vi edit modes</li> </ul> -<p>Basically it makes your command-line interface fast and powerful, and that&#8217;s not an overstatement. Ruby&#8217;s own <span class="caps">IRB</span> can be enhanced by enabling readline and completion, and it works great &#8212; at least on *nix systems.</p> -<p>For some weird reason, some people had problems with Readline on Windows: in particular, things get nasty when you start editing long lines. Text gets garbled, the cursor goes up one or two lines and doesn&#8217;t come back, and other similar leprechaun&#8217;s tricks, which are not that funny after a while.</p> -<p>Apparently there&#8217;s no alternative to Readline in the Ruby world. If you wan&#8217;t tab completion that&#8217;s it, you&#8217;re stuck. Would it be difficult to implement <em>some</em> of Readline functionality natively in Ruby? Maybe, but the problem is that for some reason the Ruby Standard Library doesn&#8217;t have low level methods to operate on keystrokes&#8230;</p> -<p>&#8230;but luckily, the <a href="http://highline.rubyforge.org/">HighLine</a> gem does! James Edward Gray II keeps pointing out here and here that HighLine&#8217;s own <code>get_character</code> method does just that: it returns the corresponding character code(s) right when a key is pressed, unlike <code>IO#gets()</code> which waits for the user to press <span class="caps">ENTER</span>.</p> +<p>Basically it makes your command-line interface fast and powerful, and that's not an overstatement. Ruby's own <span + class="caps">IRB</span> can be enhanced by enabling readline and completion, and it works great &#8212; at least + on *nix systems.</p> +<p>For some weird reason, some people had problems with Readline on Windows: in particular, things get nasty when you + start editing long lines. Text gets garbled, the cursor goes up one or two lines and doesn't come back, and other + similar leprechaun's tricks, which are not that funny after a while.</p> +<p>Apparently there's no alternative to Readline in the Ruby world. If you wan't tab completion that's it, you're stuck. + Would it be difficult to implement <em>some</em> of Readline functionality natively in Ruby? Maybe, but the problem + is that for some reason the Ruby Standard Library doesn't have low level methods to operate on keystrokes&#8230;</p> +<p>&#8230;but luckily, the <a href="http://highline.rubyforge.org/">HighLine</a> gem does! James Edward Gray II keeps + pointing out here and here that HighLine's own <code>get_character</code> method does just that: it returns the + corresponding character code(s) right when a key is pressed, unlike <code>IO#gets()</code> which waits for the user + to press <span class="caps">ENTER</span>.</p> <p>Believe it or not, that tiny method can do wonders&#8230;h2. Reverse-engineering escape codes</p> -<p>So here&#8217;s a little script which uses <code>get_character()</code> in an endless loop, diligently printing the character codes corresponding to a keystroke:</p> -<div class='ruby'><pre><code>#!/usr/local/bin/ruby -w +<p>So here's a little script which uses <code>get_character()</code> in an endless loop, diligently printing the + character codes corresponding to a keystroke:</p> +<div class='ruby'> + <pre><code>#!/usr/local/bin/ruby -w require 'rubygems' require 'highline/system_extensions'

@@ -37,56 +53,87 @@ when ?\C-x: print "Exiting..."; exit;

else puts "#{char.chr} [#{char}] (hex: #{char.to_s(16)})"; end -end</code></pre></div><p>A pretty harmless little thing. Try to run it and press some keys, and see what you get:</p> +end</code></pre> +</div> +<p>A pretty harmless little thing. Try to run it and press some keys, and see what you get:</p> <div style="font-family: Monospace"> -<p>Press a key to view the corresponding <span class="caps">ASCII</span> code(s) (or <span class="caps">CTRL</span>-X to exit).</p> -<p>=&gt; a <sup class="footnote" id="fnr96"><a href="#fn96">96</a></sup> (hex: 61)</p> -<p>=&gt; 1 <sup class="footnote" id="fnr49"><a href="#fn49">49</a></sup> (hex: 31)</p> -<p>=&gt; Q <sup class="footnote" id="fnr81"><a href="#fn81">81</a></sup> (hex: 51)</p> -<p>=&gt; &alpha; <sup class="footnote" id="fnr224"><a href="#fn224">224</a></sup> (hex: e0)</p> -<p>=&gt; K <sup class="footnote" id="fnr75"><a href="#fn75">75</a></sup> (hex: 4b)</p> + <p>Press a key to view the corresponding <span class="caps">ASCII</span> code(s) (or <span + class="caps">CTRL</span>-X to exit).</p> + <p>=&gt; a <sup class="footnote" id="fnr96"><a href="#fn96">96</a></sup> (hex: 61)</p> + <p>=&gt; 1 <sup class="footnote" id="fnr49"><a href="#fn49">49</a></sup> (hex: 31)</p> + <p>=&gt; Q <sup class="footnote" id="fnr81"><a href="#fn81">81</a></sup> (hex: 51)</p> + <p>=&gt; &alpha; <sup class="footnote" id="fnr224"><a href="#fn224">224</a></sup> (hex: e0)</p> + <p>=&gt; K <sup class="footnote" id="fnr75"><a href="#fn75">75</a></sup> (hex: 4b)</p> </div> <p>Hang on, what are the last two codes? <em>A left arrow key on Windows</em>, apparently.</p> <p><strong>Welcome to the wonderful world of input escape sequences!</strong></p> -<p>To cut a long story short, both Windows and *nix system &#8220;terminals&#8221; translate special keystrokes into sequences of two or more codes. This applies to things like <span class="caps">DEL</span>, <span class="caps">INSERT</span>, arrows, etc. etc.<br /> -For some ideas, check out:</p> +<p>To cut a long story short, both Windows and *nix system &#8220;terminals&#8221; translate special keystrokes into + sequences of two or more codes. This applies to things like <span class="caps">DEL</span>, <span + class="caps">INSERT</span>, arrows, etc. etc.<br /> + For some ideas, check out:</p> <ul> - <li><a href="http://www.microsoft.com/whdc/device/input/Scancode.mspx">Windows Scancodes</a> (Thanks <a href="http://64.223.189.234/node/92">Huff</a>)</li> - <li><a href="http://www.connectrf.com/Documents/vt220.html">VT220 Terminal Input Sequences</a> (Thanks <a href="http://www.grayproductions.net/">James</a>)</li> + <li><a href="http://www.microsoft.com/whdc/device/input/Scancode.mspx">Windows Scancodes</a> (Thanks <a + href="http://64.223.189.234/node/92">Huff</a>)</li> + <li><a href="http://www.connectrf.com/Documents/vt220.html">VT220 Terminal Input Sequences</a> (Thanks <a + href="http://www.grayproductions.net/">James</a>)</li> </ul> -<p>Let&#8217;s now assume that we&#8217;re smart and we can write a program which can parse keystroke properly, including handling different input escape sequences according to the OS, what can it be used for?<br /> -Well:</p> +<p>Let's now assume that we're smart and we can write a program which can parse keystroke properly, including handling + different input escape sequences according to the OS, what can it be used for?<br /> + Well:</p> <ul> - <li>For normal characters, just print them back to the screen (<code>get_character</code> doesn&#8217;t print anything, it &#8220;steals&#8221; the keystroke)</li> + <li>For normal characters, just print them back to the screen (<code>get_character</code> doesn't print anything, it + &#8220;steals&#8221; the keystroke)</li> <li>For special characters, do something nice!</li> </ul> -<p>We could setup <span class="caps">TAB</span> to auto-complete the current word according to an array of matches, or bind the up arrow to load the last line typed in by the user, for example, that&#8217;s basically something Readline does, right?</p> +<p>We could setup <span class="caps">TAB</span> to auto-complete the current word according to an array of matches, or + bind the up arrow to load the last line typed in by the user, for example, that's basically something Readline does, + right?</p> <h2>RawLine: how it works and what it does</h2> -<p>I created a small project on RubyForge called <a href="http://rubyforge.org/projects/rawline/">RawLine</a> (not to be confused with RubyInline, a completely different thing altogether, sorry about that) to play around with the possibilities offered by the <code>get_character</code> method. The library is just a preview of things which can be done, but it&#8217;s already usable, provided that you&#8217;re brave enough to try it out, that is.</p> -<p>The basic idea behind RawLine is to be able to parse keystrokes properly on different platforms and re-bind them to a set of predefined, cross-platform actions or a user-defined code block.</p> +<p>I created a small project on RubyForge called <a href="http://rubyforge.org/projects/rawline/">RawLine</a> (not to be + confused with RubyInline, a completely different thing altogether, sorry about that) to play around with the + possibilities offered by the <code>get_character</code> method. The library is just a preview of things which can be + done, but it's already usable, provided that you're brave enough to try it out, that is.</p> +<p>The basic idea behind RawLine is to be able to parse keystrokes properly on different platforms and re-bind them to a + set of predefined, cross-platform actions or a user-defined code block.</p> <h3>Basic line-editing operations</h3> -<p>The first challenge was to re-invent the wheel, i.e. re-bind keystrokes to their typical actions: a left arrow moves the cursor left, a backspace deletes the character at the left of the cursor and so on. Yes, because <code>get_characters</code> gives you the right character codes at the price of <em>cancelling their normal effects</em>, which is a great thing, as you&#8217;ll soon find out.</p> -<p>Printing a character on the screen was one of the easiest tasks (at first). <code>IO#putc</code> does the job pretty well: it prints a character out.<br /> -What about moving left? Easy: print a non-descructive backspace (\b) and hope it is really not destructive. I did some tests and it seems to do as it&#8217;s told and move the cursor back by one position.</p> -<p>Moving right was a little trickier: the easiest thing I found was to re-print the character under the cursor, which will then move the cursor forward (as naive as it may seem, it does the job!). If there&#8217;s nothing under the cursor, then we must be at the end of the line and it shouldn&#8217;t move anywhere, so there we go.</p> -<p>What if I move left a bit and then start typing normal characters? Well, everything is rewritten of course: this will be our &#8220;character replace mode&#8221;. Unfortunately users don&#8217;t like this behavior that much, so what I did was this:</p> +<p>The first challenge was to re-invent the wheel, i.e. re-bind keystrokes to their typical actions: a left arrow moves + the cursor left, a backspace deletes the character at the left of the cursor and so on. Yes, because + <code>get_characters</code> gives you the right character codes at the price of <em>cancelling their normal + effects</em>, which is a great thing, as you'll soon find out.</p> +<p>Printing a character on the screen was one of the easiest tasks (at first). <code>IO#putc</code> does the job pretty + well: it prints a character out.<br /> + What about moving left? Easy: print a non-descructive backspace (\b) and hope it is really not destructive. I did + some tests and it seems to do as it's told and move the cursor back by one position.</p> +<p>Moving right was a little trickier: the easiest thing I found was to re-print the character under the cursor, which + will then move the cursor forward (as naive as it may seem, it does the job!). If there's nothing under the cursor, + then we must be at the end of the line and it shouldn't move anywhere, so there we go.</p> +<p>What if I move left a bit and then start typing normal characters? Well, everything is rewritten of course: this will + be our &#8220;character replace mode&#8221;. Unfortunately users don't like this behavior that much, so what I did + was this:</p> <ol> <li>Copy all characters from the one at the left of the cursor till the end of the line</li> <li>Print the character to be inserted</li> <li>Re-print the previously-copied characters</li> <li>Move the cursor back at the right place</li> </ol> -<p>Again, a primitive solution which works seamlessly on all platforms, and yes, it&#8217;s fast enough that you don&#8217;t notice the difference.</p> +<p>Again, a primitive solution which works seamlessly on all platforms, and yes, it's fast enough that you don't notice + the difference.</p> <p>As you may have guessed, this of course means that I always had to keep track of:</p> <ul> <li>The cursor position within the line</li> <li>The text currently printed to the screen</li> </ul> -<p>Backspace and delete were implemented in a similar way, you can figure it out yourself or look at the source code: I won&#8217;t bore you any further!</p> +<p>Backspace and delete were implemented in a similar way, you can figure it out yourself or look at the source code: I + won't bore you any further!</p> <h3>History management</h3> -<p>The next step was to implement a history for both the characters inputted by the user (to allow undoing and redoing operations) and for the whole lines. This was just an ordinary programming exercise: a simple buffer with some extra controls here and there, nothing too scary.</p> -<p>So every &#8220;modification&#8221; to the current line being typed is saved in a line history buffer and all the lines entered are saved in another history buffer. All is left is to allow users to navigate through these buffers back and forth. <br /> -Nothing impossible: all I had to do was keeping track of the current element of the history being retrieved and then overwrite the current line with a new line stored in the buffer? How&#8217;s this line overwriting done? Same old:</p> +<p>The next step was to implement a history for both the characters inputted by the user (to allow undoing and redoing + operations) and for the whole lines. This was just an ordinary programming exercise: a simple buffer with some extra + controls here and there, nothing too scary.</p> +<p>So every &#8220;modification&#8221; to the current line being typed is saved in a line history buffer and all the + lines entered are saved in another history buffer. All is left is to allow users to navigate through these buffers + back and forth. <br /> + Nothing impossible: all I had to do was keeping track of the current element of the history being retrieved and then + overwrite the current line with a new line stored in the buffer? How's this line overwriting done? Same old:</p> <ol> <li>Move the cursor to the beginnig of the line</li> <li>Print X spaces, where X is the line length, so that the characters are no longer displayed in the console</li>

@@ -97,22 +144,35 @@ <p>Easy and naive, as usual. But again, it works well enough.</p>

<h3>Word completion</h3> <p>The other challange was word completion. The current implementation can be summarized as follows:</p> <ul> - <li>If <span class="caps">TAB</span> (or another character, if you wish) is pressed, call a user-defined <code>completion_proc</code> method which returns an array and show the first element of the array (in this case I actually used a cyclic RawLine::HistoryBuffer, not an array)</li> - <li>If the user presses <span class="caps">TAB</span> again, show another match, and so <em>ad infinitum</em> if the user keeps pressing <span class="caps">TAB</span>.</li> + <li>If <span class="caps">TAB</span> (or another character, if you wish) is pressed, call a user-defined + <code>completion_proc</code> method which returns an array and show the first element of the array (in this case + I actually used a cyclic RawLine::HistoryBuffer, not an array)</li> + <li>If the user presses <span class="caps">TAB</span> again, show another match, and so <em>ad infinitum</em> if the + user keeps pressing <span class="caps">TAB</span>.</li> <li>If the user presses another key, accept the default completion and move on.</li> </ul> <p>Obviously this means that:</p> <ul> - <li>RawLine has to keep track of the current &#8220;word&#8221;. A word is everything separated by a user defined <code>word_separator</code>, which can obviously modified at runtime, with care.</li> - <li>Regarding the <code>completion_proc</code>, typically you may want to return only the elements matching the word which is currently being written, so that&#8217;s given as default parameter for your proc. Exactly like with ReadLine, the only difference is that you can access other things like <em>the whole line</em> and <em>the whole history</em> in real time, which can be really handy at times!</li> + <li>RawLine has to keep track of the current &#8220;word&#8221;. A word is everything separated by a user defined + <code>word_separator</code>, which can obviously modified at runtime, with care.</li> + <li>Regarding the <code>completion_proc</code>, typically you may want to return only the elements matching the word + which is currently being written, so that's given as default parameter for your proc. Exactly like with + ReadLine, the only difference is that you can access other things like <em>the whole line</em> and <em>the whole + history</em> in real time, which can be really handy at times!</li> </ul> -<p>Here&#8217;s a simple example:</p> -<div class='ruby'><pre><code>editor.completion_proc = lambda do |word| +<p>Here's a simple example:</p> +<div class='ruby'> + <pre><code>editor.completion_proc = lambda do |word| if word ['select', 'update', 'delete', 'debug', 'destroy'].find_all { |e| e.match(/^#{Regexp.escape(word)}/) } end -end</code></pre></div><h3>Custom key bindings</h3> -<p>All these pretty things are obviously bound to some keystrokes. If the key corresponds to only one code, everything is fine, but because special keys typically aren&#8217;t so it was necessary to implement a mechanism to track an escape key (e.g. 0xE0 and 0 on Windows and \e on Linux) and listen to further characters, in case a known sequence is found. Anyhow, the final result of the method used for character binding is the following:</p> +end</code></pre> +</div> +<h3>Custom key bindings</h3> +<p>All these pretty things are obviously bound to some keystrokes. If the key corresponds to only one code, everything + is fine, but because special keys typically aren't so it was necessary to implement a mechanism to track an escape + key (e.g. 0xE0 and 0 on Windows and \e on Linux) and listen to further characters, in case a known sequence is + found. Anyhow, the final result of the method used for character binding is the following:</p> <p><code>bind(key, &amp;block)</code></p> <p>Where key can be:</p> <ul>

@@ -123,13 +183,17 @@ <li>A <code>Symbol</code> corresponding to a known escape sequence or key</li>

<li>A <code>Hash</code> to define a new key or escape sequences</li> </ul> <p>So, in the end you can do things like this:</p> -<div class='ruby'><pre><code>editor.bind(:left_arrow) { editor.move_left } +<div class='ruby'> + <pre><code>editor.bind(:left_arrow) { editor.move_left } editor.bind("\etest") { editor.overwrite_line("Test!!") } editor.bind(?\C-z) { editor.undo } -editor.bind([24]) { exit }</code></pre></div><p>Which, for Rubyists, it&#8217;s far sexier and more flexible than editing an .inputrc file.</p> +editor.bind([24]) { exit }</code></pre> +</div> +<p>Which, for Rubyists, it's far sexier and more flexible than editing an .inputrc file.</p> <h3>How do I use it, anyway?</h3> <p>A code example is better than a thousand words, right? So here you are:</p> -<div class='ruby'><pre><code>#!/usr/local/bin/ruby -w +<div class='ruby'> + <pre><code>#!/usr/local/bin/ruby -w require 'rubygems' require 'rawline'

@@ -155,19 +219,31 @@ end

loop do puts "You typed: [#{editor.read("=&gt; ").chomp!}]" -end</code></pre></div><p>This example can be found in examples/rawline_shell.rb within the RawLine source code or gem package.</p> +end</code></pre> +</div> +<p>This example can be found in examples/rawline_shell.rb within the RawLine source code or gem package.</p> <h2>Current status and availability</h2> -<p>I currently <a href="http://rubyforge.org/forum/forum.php?forum_id=22543">released</a> RawLine 0.1.0 on <a href="http://rubyforge.org/projects/rawline">SourceForge</a>, and it can be installed via:</p> +<p>I currently <a href="http://rubyforge.org/forum/forum.php?forum_id=22543">released</a> RawLine 0.1.0 on <a + href="http://rubyforge.org/projects/rawline">SourceForge</a>, and it can be installed via:</p> <p><code>gem install -r rawline</code></p> <p>The RDoc documentation is available <a href="http://rawline.rubyforge.org/">here</a>.</p> -<p>Feel free to try it out. First of all try the <code>rawline_shell.rb</code> example, and see if it works on your machine. If it doesn&#8217;t than maybe you try re-binding some keys (use <code>key_tester.rb</code> to &#8220;reverse-engineer&#8221; your terminal&#8217;s input escape sequences), and let me know!</p> +<p>Feel free to try it out. First of all try the <code>rawline_shell.rb</code> example, and see if it works on your + machine. If it doesn't than maybe you try re-binding some keys (use <code>key_tester.rb</code> to + &#8220;reverse-engineer&#8221; your terminal's input escape sequences), and let me know!</p> <p>Status information and limitations:</p> <ul> - <li>It has been tested on Windows (XP, using the usual command prompt) and on Linux (ZenWalk, using <span class="caps">XFCE</span> Terminal).</li> - <li>It can handle lines no longer than the maximum terminal width &#8211; 2. This is to ensure that the cursor never &#8220;falls down&#8221; to the next line.</li> - <li>On Windows, the cursor doesn&#8217;t blink immedialy when moving left, but it moves, don&#8217;t worry.</li> - <li>On Linux, you should really consider installing the <a href="http://raa.ruby-lang.org/project/ruby-termios/">Termios</a> library for a faster experience (otherwise <code>get_character</code> won&#8217;t parse characters correctly if you press and hold a key, and that, trust me, is a real mess!).</li> - <li>RawLine is very far from being a complete replacement for the ReadLine library, and it is currently in alpha stage.</li> + <li>It has been tested on Windows (XP, using the usual command prompt) and on Linux (ZenWalk, using <span + class="caps">XFCE</span> Terminal).</li> + <li>It can handle lines no longer than the maximum terminal width &#8211; 2. This is to ensure that the cursor never + &#8220;falls down&#8221; to the next line.</li> + <li>On Windows, the cursor doesn't blink immedialy when moving left, but it moves, don't worry.</li> + <li>On Linux, you should really consider installing the <a + href="http://raa.ruby-lang.org/project/ruby-termios/">Termios</a> library for a faster experience (otherwise + <code>get_character</code> won't parse characters correctly if you press and hold a key, and that, trust me, is + a real mess!).</li> + <li>RawLine is very far from being a complete replacement for the ReadLine library, and it is currently in alpha + stage.</li> <li>Release 0.1.0 has been created after 2 weeks of sporadic coding during lunch breaks and week-ends.</li> </ul> -<p>For any ideas on where to go from here, comments and feedback, just reply below or send an email to my usual email address.</p> +<p>For any ideas on where to go from here, comments and feedback, just reply below or send an email to my usual email + address.</p>
M contents/articles/inline-name-change.htmlcontents/articles/inline-name-change.html

@@ -4,8 +4,11 @@ content-type: article

timestamp: 1206595800 tags: "ruby|programming|opensource|rawline" ----- -<p>I&#8217;ve been kindly asked by the lead developer of <a href="http://www.zenspider.com/ZSS/Products/RubyInline/">RubyInLine</a> to change the name of my <a href="http://rubyforge.org/projects/inline/">InLine</a> project, due to potential confusion and conflicts.</p> -<p>This makes sense, and I&#8217;m ready to change the name of my project, although I&#8217;m not that good at choosing original and <em>smart</em> names, so well, any suggestion is more than welcome!</p> +<p>I've been kindly asked by the lead developer of <a + href="http://www.zenspider.com/ZSS/Products/RubyInline/">RubyInLine</a> to change the name of my <a + href="http://rubyforge.org/projects/inline/">InLine</a> project, due to potential confusion and conflicts.</p> +<p>This makes sense, and I'm ready to change the name of my project, although I'm not that good at choosing original and + <em>smart</em> names, so well, any suggestion is more than welcome!</p> <p>I was thinking of something like:</p> <ul> <li>RawLine</li>

@@ -14,5 +17,7 @@ <li>RawInput</li>

<li>RubyInput</li> <li>RubyLine</li> </ul> -<p>I personally think that <strong>RawLine</strong> is probably the best option, but please, if have any better idea just speak up!</p> -<p>P.S.: &#8220;RedLine&#8221; is taken, unfortunately, otherwise it would have been my first choice since the beginning.</p> +<p>I personally think that <strong>RawLine</strong> is probably the best option, but please, if have any better idea + just speak up!</p> +<p>P.S.: &#8220;RedLine&#8221; is taken, unfortunately, otherwise it would have been my first choice since the + beginning.</p>
M contents/articles/introducing-glyph.htmlcontents/articles/introducing-glyph.html

@@ -4,48 +4,49 @@ content-type: article

timestamp: 1270834239 tags: "glyph|ruby|frameworks|writing" ----- -<p>I&#8217;ve been writing technical documents for a living for the past four years, and I can tell you: there is no +<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 &#8212; 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&#8217;t believe GUIs are suitable for doing this at a professional level.</li> + 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&#8217;s tools</strong>, if you have them. That&#8217;s great if they are usable enough and + <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&#8217;s probably your best option, if you know what you&#8217;re doing.</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> &#8212; that&#8217;s - great if you know <span class="caps">HTML</span> and <span class="caps">CSS</span>, and you don&#8217;t mind + renderer like <a href="http://www.princexml.com/">Prince <span class="caps">XML</span></a> &#8212; 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&#8217;t looking, I even use them at work to generate <span - class="caps">HTML</span> code, because it&#8217;s just so much faster. Textile in particular can be used as a +<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> + <span class="caps">HTML</span> tags effortlessly and some block-level tags, too. +</p> <p>For things like <code>&lt;div&gt;</code> tags and <code>&lt;tables&gt;</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 &#8220;problem&#8221; 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&#8217;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&#8217;s job.</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="/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&#8230; but again, it&#8217;s not extensible + using Textile and Prince for <span class="caps">PDF</span> rendering&#8230; 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 &#8212; most importantly &#8212; very easy to extend.</p> -<p>Here&#8217;s an example:</p> +<p>Here's an example:</p> <div class='text'> <pre><code>section[header[Something about Glyph] You can use Glyph macros in conjunction

@@ -78,7 +79,8 @@ </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> + <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>

@@ -94,7 +96,7 @@ <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&#8217;s own guide (<a +<p>An example Glyph project? Sure, Glyph's own guide (<a href="https://github.com/h3rald/glyph/tree/master/book/">source</a> &#8212; <a href="http://cloud.github.com/downloads/h3rald/glyph/glyph.pdf"><span class="caps">PDF</span> output</a>).</p> <h3>Technical Details</h3>

@@ -105,11 +107,12 @@ <li><a href="http://rake.rubyforge.org/">rake</a> &#8212; For the mid-level interdependent task layer.</li>

<li><a href="http://treetop.rubyforge.org/">treetop</a> &#8212; 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> &#8212; Because I can&#8217;t leave without it.</li> + <li><a href="http://rubyforge.org/projects/extlib/">extlib</a> &#8212; 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) &#8212; 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&#8217;s User Group</a>.</p> + <a href="http://groups.google.com/group/glyph-framework">Glyph's User Group</a>. +</p> <h3>For more information&#8230;</h3> -<p>&#8230;head over to <a href="/glyph/">Glyph&#8217;s homepage</a>.</p> +<p>&#8230;head over to <a href="/glyph/">Glyph's homepage</a>.</p>
M contents/articles/introducing-redbook.htmlcontents/articles/introducing-redbook.html

@@ -4,12 +4,12 @@ content-type: article

timestamp: 1191024720 tags: "ruby|productivity|software|tools|redbook" ----- -<p>I&#8217;m somehow pleased to announce the opening of a new section on this site. Nothing too big actually, it&#8217;s +<p>I'm somehow pleased to announce the opening of a new section on this site. Nothing too big actually, it's just a <a href="/projects/">page</a> with a few (one for now) brief descriptions of open source programs and scripts I - made and I&#8217;d like to share with my readers.</p> -<p>Don&#8217;t expect fancy stuff: (luckily) I don&#8217;t code for a living, I code for pleasure and I code small - things. Lately I&#8217;ve been trying to write a small Ruby program able to log my daily activities and also display + made and I'd like to share with my readers.</p> +<p>Don't expect fancy stuff: (luckily) I don't code for a living, I code for pleasure and I code small + things. Lately I've been trying to write a small Ruby program able to log my daily activities and also display them in a pleasant enough way, so I started using my lunch breaks at work more constructively and I came up with <a href="/projects/redbook">RedBook</a> an interactive command-line program written in Ruby.</p> <p>Main features:</p>

@@ -28,11 +28,11 @@ <p><strong>&#58;save</strong> test.txt</p>

<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 &#8220;8 in the morning&#8221;, &#8220;this tuesday&#8221;, &#8220;last month&#8221; and so on&#8230;</p> -<p>Here&#8217;s a screenshot showing RedBook in action:</p> +<p>Here's a screenshot showing RedBook in action:</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&#8217;s also an <span class="caps">EXE</span> - version for the lazy windows folks who don&#8217;t want to install Ruby, packed with <a + 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 href="http://www.erikveenstra.nl/rubyscript2exe/index.html">RubyScript2Exe</a>. A more in-depth article explaining how RedBook works <del>will hopefully be completed soon</del> is available <a href="/articles/redbook">:here</a></p>
M contents/articles/introducing-ruby-compendium.htmlcontents/articles/introducing-ruby-compendium.html

@@ -9,12 +9,13 @@

<section class="section"> <p>Learning a programming language can be hard and time consuming. You normally have to go through a bunch of tutorials, ask questions, read books&#8230; Ruby is no exception: there are plenty of resources out there about - it, but it is often hard to find what you&#8217;re looking for. So, as a weekend project, I decided to create a - <em>Ruby Compendium</em>, a short book about the Ruby Ecosystem.</p> + it, but it is often hard to find what you're looking for. So, as a weekend project, I decided to create a + <em>Ruby Compendium</em>, a short book about the Ruby Ecosystem. + </p> <p>I guarantee that you <em>will not</em> be able to code in Ruby after reading this book. Yes, you read it right, - this book is not about coding, it&#8217;s about learning what&#8217;s out there for you that can help you to + this book is not about coding, it's about learning what's out there for you that can help you to learn how to program in Ruby. Information on Ruby implementations, versions, web sites, books, podcasts, a - handful of Ruby gems to solve common problems&#8230; it&#8217;s all in there.</p> + handful of Ruby gems to solve common problems&#8230; it's all in there.</p> <p>The <em>Ruby Compendium</em> is available free of charge, under the terms of the <a href="http://creativecommons.org/licenses/by-sa/3.0/">Creative Commons Attribution-ShareAlike 3.0 Unported
M contents/articles/journotwit-review.htmlcontents/articles/journotwit-review.html

@@ -9,10 +9,12 @@ 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&#8217;t fancy the idea of keeping the - <em>same</em> client up-to-date everywhere &#8212; even if such client existed.</p> + 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 &#8212; 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> + <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 (&agrave; la TweetDeck).</li>

@@ -28,25 +30,26 @@ <h3>Introducing JournoTwit</h3>

<p>JournoTwit was born &ndash; as many software projects &ndash; to scratch an itch:</p> <blockquote> <p>Probably the last thing anyone was expecting me to do &mdash; even myself, was to create my own twitter client. - However, I&#8217;ve been a little fed up with not having the features I wanted and running 5 or 6 accounts, I + 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. [&#8230;] 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&#8217;s +<p style="padding-left:2rem;"><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 &ndash; 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> + <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 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&#8217;s not only +<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>

@@ -63,7 +66,7 @@ <li>Quick search</li>

<li>Edit settings</li> <li>Logout</li> </ul> -<p>Next to this global toolbar, there&#8217;s a list of links, each corresponding to a column. Clicking a link toggles +<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>

@@ -82,7 +85,7 @@ <li>Translate</li>

</ul> <p>Pretty intuitive and easy to use, so far.</p> <h3>Default columns</h3> -<p>When you login, you&#8217;ll notice that all your tweets are <em>not</em> presented in the traditional, disorganized +<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>

@@ -111,16 +114,16 @@ <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&#8217;re obviously not perfect: some images are not resolved automatically, for + 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&#8217;s nothing you <em>need</em> to modify it, if you think about it. But + 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&#8217;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&#8217;ll be prompted to further clarify +<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&#8230;</p> <ul> <li>Set of Columns: i.e. the default columns provided by journotwit <em>or</em> a single column containing all the

@@ -129,11 +132,11 @@ <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&#8217;ll just describe how to create a custom +<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="/images/pictures/journotwit/custom_column.png" alt="" /></p> -<p>The creation of a custom column doesn&#8217;t take long, but there are quite a few things you can configure. First +<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

@@ -151,8 +154,8 @@ <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&#8217;s all. Simple enough. As a side note, the &#8220;No-Mention&#8221; column is nothing but a custom column - in disguise: if you try to edit it, you&#8217;ll see it&#8217;s nothing but a search for &#8220;<em>username</em> +<p>That's all. Simple enough. As a side note, the &#8220;No-Mention&#8221; 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 &#8220;<em>username</em> -<em>@username</em> -from:<em>username</em>&#8221;.</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

@@ -172,7 +175,7 @@ <li>Show &#8220;Did You Know?&#8221; 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&#8217;s default look and feel, you can change the fond size, the color theme +<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>

@@ -182,19 +185,19 @@ 7&#8221;. Remember to separate them with a space and that you can block on a per column basis too.&quot;</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&#8217;s just me being a geek, but I think JournoTwit nailed it when it comes to making Twitter more +<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&#8217;ve never missed a single tweet since (unless <em>I explicitly + 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&#8217;d like to see:</p> +<p>That being said, there are a few small features I'd like to see:</p> <ul> - <li>I&#8217;d like to be able to mark <em>single tweets</em>, not entire columns, as read. In this way, when I go on + <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&#8217;d like to use shortcut keys to navigate the interface, like with Google Reader.</li> - <li>I&#8217;d like to configure tweets so that they only show up in one column, not in more than one (for example in + <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>Support for Twitter Lists&#8230;</li> </ul> -<p>I already told <a href="http://twitter.com/spode">@spode</a> about some of these, and he said he&#8217;ll look into - it, we&#8217;ll see what happens. Anyhow, just <a href="http://www.journotwit.com">give it a try</a>, and see if you +<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>
M contents/articles/komodo-edit-review.htmlcontents/articles/komodo-edit-review.html

@@ -8,21 +8,21 @@ -----

<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> -<p><em>What&#8217;s your favorite code editor?</em></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&#8217;s not only one program but several, depending on the language and on the features needed at the + 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&#8217;s what I&#8217;ve been doing since I started programming. Lately - I&#8217;ve become fond of <a href="http://www.vim.org">Vim</a> (or better, gVim), although I have a few other + 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> &#8220;what&#8217;s your favorite editor&#8221; thread and someone +<p>Recently, however, I came across my <em>n^th^</em> &#8220;what's your favorite editor&#8221; 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>

@@ -34,39 +34,39 @@ </ul>

<p>The problems of Komodo <span class="caps">IDE</span> are foundamentally two:</p> <ul> <li>It costs money &#8211; this is not great in a world where Eclipse and Netbeans are free</li> - <li>It is an <span class="caps">IDE</span> &#8211; which normally means <em>&#8216;heavy as hell&#8217;</em>.</li> + <li>It is an <span class="caps">IDE</span> &#8211; which normally means <em>&#8216;heavy as hell'</em>.</li> </ul> -<p>It&#8217;s a matter of taste and needs: some people feel more confortable with using an editor for certain tasks, +<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&#8217;s free</li> - <li>It&#8217;s an editor</li> + <li>It's free</li> + <li>It's an editor</li> </ul> -<p>Actually I wouldn&#8217;t call it an editor, because it offers quite a lot of features which are normally absent in - editors &#8212; it&#8217;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 &#8212; it's something in-between, which definitely deserves a try.</p> <h2>User interface</h2> -<p>Komodo Edit&#8217;s interface is one of the most clear I&#8217;ve ever come across. It is organized in four main +<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++&#8217;s 31-button-bar).</p> + 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&#8217;s up to you really.</p> + 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&#8217;s an <em>editor</em>, + 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>) &#8212; 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&#8217;t looking, of course&#8230;)</p> + became my editor/<span class="caps">IDE</span> of choice (when gVim isn't looking, of course&#8230;)</p> <p>Lets find out why&#8230;</p> <h2>Editing features</h2> <p>Komodo Edit comes with all the editing features of ever average editor, so <em>&#8220;[&#8230;] Code commenting,

@@ -75,10 +75,10 @@ as raw literal, repeat next keystroke and clean line endings on &#8220;save&#8221;.&quot;</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 &#8211; I have to say this &#8211; not - as good as Vim when it comes to syntax highlighting (nothing is as good as Vim though, so I can&#8217;t really + 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&#8217;t mean I have to manually re-set the 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 &amp; Syntax Highlighting</h3> <p>Komodo Edit supports quite a few programming languages, which means it can recognize the most common ones (C, C++,

@@ -86,8 +86,9 @@ 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&#8217;t want to do that, but it&#8217;s a good thing to - have.</p> + <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>

@@ -102,10 +103,10 @@ </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&#8217;m actually really impressed.</p> + 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&#8217;re writing, be it a + 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 &#8220;soft characters support&#8221;, which means it will try to match ( [ { when possible, allowing you to <em>write over</em> the completed character if you want to.</p>

@@ -114,16 +115,16 @@ <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 &#8220;vi emulation&#8221;, which is constantly improving through every release &#8211; so you - won&#8217;t forget Vim&#8217;s keys when I don&#8217;t use it: very nice, and again, hard to find in other editors, + 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="/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 - &#8220;projects&#8221;, but most of the others don&#8217;t. A <em>project</em> in Komodo Edit is normally composed + &#8220;projects&#8221;, 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&#8217;re developing</li> + <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> </ul>

@@ -133,7 +134,8 @@ 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 &gt; Preferences &gt; 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> + <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>

@@ -161,7 +163,7 @@ 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&#8217;s possible: all you need to do is + 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:

@@ -178,18 +180,19 @@ <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&#8217;s still room for improvement, if you&#8217;re really fussy.</p> + 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&#8217;d like a <a + <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&#8217;s - no trace of it in Komodo Edit.</p> + <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&#8217;t that many extensions available for Komodo Edit, yet, but the <a +<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 &#8220;[&#8230;] create an open source platform for building developer environments. ActiveState has
M contents/articles/leading-lean-software-development.htmlcontents/articles/leading-lean-software-development.html

@@ -9,7 +9,7 @@ -----

<section class="section"> <p>If you already heard the names Mary and Tom Poppendieck, chances are that you already know what <em>Lean Software - Development</em> is. If you don&#8217;t, start from <a + Development</em> is. If you don't, start from <a href="http://en.wikipedia.org/wiki/Lean_software_development">this Wikipedia page</a>. Mary and Tom coined this term with their first book on the subject <a href="http://www.amazon.com/exec/obidos/ASIN/0321150783/poppendieckco-20">Lean Software Development: An

@@ -20,7 +20,7 @@ href="http://www.informit.com/store/product.aspx?isbn=0321620704">Leading Lean Software Development: Results

Are not the Point</a>.</p> <p>Unlike the two other books, this one is focused about making lean software practices succeed. In some way, it can be compared to <a href="/articles/succeeding-with-agile-review/">Succeeding with Agile</a>, but while Mike - Cohn&#8217;s book focuses entirely on Scrum, this book has a much broader scope. Moreover, the book contains a + Cohn's book focuses entirely on Scrum, this book has a much broader scope. Moreover, the book contains a lot of digressions and stories &mdash;even not directly related to software development&mdash; aimed at understanding particular aspects of Lean Software Development and the Lean movement in general.</p> <p>The focus is, as the title suggests, on leadership: how can you be a good leader in these difficult,

@@ -33,20 +33,20 @@ <header>

<h1 id="h_1" class="toc">Structure and Organization</h1> </header> <p>This book is extremely well-structured. Its Table of Contents follows some very rigid rules which make this - book one of the most organized texts I&#8217;ve ever come across. It is divided into six chapters, each + book one of the most organized texts I've ever come across. It is divided into six chapters, each organized as follows:</p> <ul> - <li>A <em>snapshot</em> or an introductory story for the chapter&#8217;s main topic</li> + <li>A <em>snapshot</em> or an introductory story for the chapter's main topic</li> <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="/images/pictures/books/leadingleanswdev.jpg" style="float:right" /></p> <p>In total, the book contains 24 frames constituting the &#8220;Big Picture&#8221;, which is actually a very - powerful framework for lean software leadership. You can read the book&#8217;s <span class="caps">TOC</span> + 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&#8217;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 + 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> <p>When I started my career as a technical writer I used to love carefully-structured, simmetrical manuals.

@@ -69,7 +69,7 @@ href="http://www.cps.gov.uk/publications/finance/process_mapping.html">process maps</a> to analyze an

existing process and find bottlenecks or leaks (in terms of time). I was instantly sold on this practice after reading the success story of how a company manage to reduce the overall time to process and solve customer issues simply by connecting customers directly to developers instead of tech support engineers. - This is something you can&#8217;t apply everywhere, but after creating a process map for that specific case, + This is something you can't apply everywhere, but after creating a process map for that specific case, the solution was evident.</p> <p>More generally speaking, this chapter provides a recipe/checklist outlining the sequence of the phases of process improvement and problem solving:</p>

@@ -88,7 +88,7 @@ <h1 id="h_3" class="toc">Chapter 2: Technical Excellence</h1>

</header> <p>This is the only chapter focusing primarily on technical topics and knowledge. It starts with a very lengthy digression on the history of programming methodologies, aimed at understanding <em>what works and what - doesn&#8217;t</em>. Some examples of IT stuff that worked include the Internet, PCs and &#8230;Open + doesn't</em>. Some examples of IT stuff that worked include the Internet, PCs and &#8230;Open Source Software.</p> <p>This chapter provides a general overview on Software Development as a whole. It contains some interesting information on software complexity and dealing with architectural dependencies, comprehensive sections on

@@ -147,14 +147,14 @@ </ul>

<p>Turns out that individualism is abundant in the Western world but not so much in the Far East (who would have thought!), but the opposite applies to power distance. A bit stereotypical, if I may, but not too much: the results are not surprising, especially when it comes to considering different cultures as a whole. Once - more, the focus is again on Toyota&#8217;s Kaizen and their culture of <em>respect for the people</em>.</p> + more, the focus is again on Toyota's Kaizen and their culture of <em>respect for the people</em>.</p> <p>On page 198, the meaning of the subtitle of the book (Results Are not the Point) is revealed: <q>developing the people and the system so that together they are capable to achieve successful results is the point</q>. Agile is precisely about this: focusing on the people.</p> <p>But what about leaders? This is an aspect of the whole Agile philosophy that I keep stumbling upon: if you want <em>The Team</em> to be in charge, what happens to leadership? As I found out myself working in and - with Agile Teams, often there&#8217;s a serious lack of strong leaders. <q>Leadership needs to be gently - refactored into Agile</q>, that&#8217;s what Mary and Tom recommend. How? It depends on each specific + with Agile Teams, often there's a serious lack of strong leaders. <q>Leadership needs to be gently + refactored into Agile</q>, that's what Mary and Tom recommend. How? It depends on each specific case, but it must always be done <em>gently</em>.</p> </section>

@@ -163,8 +163,8 @@ <header>

<h1 id="h_7" class="toc">Chapter 6: Aligned Leaders</h1> </header> <p>The final chapter begins with the history of <em>Agile@IBM</em>, or how to turn the biggest software company - in the world into a massive agile machine. It wasn&#8217;t a top-down decision, the <span - class="caps">CEO</span> didn&#8217;t just wake up one morning and decided that everyone should go Agile. + in the world into a massive agile machine. It wasn't a top-down decision, the <span class="caps">CEO</span> + didn't just wake up one morning and decided that everyone should go Agile. Quite the opposite: it was something that was <em>pulled</em> by developers rather than <em>pushed</em> at them.</p> <p>In cases like this, companies should be focusing on developing people, including good leaders, instead of

@@ -181,9 +181,9 @@ <section class="section">

<header> <h1 id="h_8" class="toc">Final Thoughts</h1> </header> - <p>If you&#8217;re looking for a manual on implementing Lean Software Development in detail, this is probably - not the best book on the subject. If you&#8217;re a developer at the start of your career, with no - management responsibilities, you&#8217;d want more technical juice, so probably you should read the other + <p>If you're looking for a manual on implementing Lean Software Development in detail, this is probably + not the best book on the subject. If you're a developer at the start of your career, with no + management responsibilities, you'd want more technical juice, so probably you should read the other two books by the Poppendiecks on the subject first.</p> <p>On the other hand, if you have been working in IT for a few years, and maybe you already started to climb up the corporate ladder, reading this book could make the difference between being successful leader or not.
M contents/articles/log-apr-2009.htmlcontents/articles/log-apr-2009.html

@@ -5,13 +5,13 @@ timestamp: 1240891860

tags: "personal_log|ruby|books|wedding" ----- <p>April is tratidionally a rather busy month: Easter, public holidays, and &mdash; always &mdash; some deadline to meet - at work. Moreover, my birthday is also in April which makes it even more busy! Let&#8217;s see what happened this + at work. Moreover, my birthday is also in April which makes it even more busy! Let's see what happened this year&#8230;h3. Using Ruby in a corporate environment</p> -<p>I&#8217;ve been using Ruby at work for a while now. I started off writing some automation script for my own needs, +<p>I've been using Ruby at work for a while now. I started off writing some automation script for my own needs, then someone noticed it and asked me if by chance I could develop some scripts for them, for automating part of their own job, and so on. My boss ultimately noticed it, and she liked the idea of me investing a small portion of my time to make other people save huge amount of <em>their</em> time, so now I am <em>officially</em> in charge of - workflow improvements and automation (it&#8217;s even in my job description!).</p> + workflow improvements and automation (it's even in my job description!).</p> <p>This month a colleague of mine and I had to figure out a way to write some documents <strong>once</strong> in <span class="caps">XML</span> format and then produce different kind of outputs (other <span class="caps">XML</span> files, PDFs, etc.) using the <a href="http://dita-ot.sourceforge.net/"><span class="caps">DITA</span> Open

@@ -30,19 +30,21 @@ class="caps">PDF</span> from the <span class="caps">XSL</span>-FO file&#8230;</li>

</ul> <p>The thing seems to work fine (after a lot of tweaking), and I really enjoyed creating the Ruby program to <em>glue</em> everything together. I even got a chance to introduce my colleagues to the wonderful world of <a - href="http://hobix.com/textile/">Textile</a> (they are so happy that they don&#8217;t want to use <span - class="caps">WYSIWYG</span> editors anymore!).</p> + href="http://hobix.com/textile/">Textile</a> (they are so happy that they don't want to use <span + class="caps">WYSIWYG</span> editors anymore!). +</p> <h3>Easter in London</h3> -<p>As usual, Roxanne and I spent our Easter holidays in London, at her brother&#8217;s place. This year we actually had +<p>As usual, Roxanne and I spent our Easter holidays in London, at her brother's place. This year we actually had 9 days to go around <del>squandering money</del> spending <em>wisely</em> in food, books, clothes and entertainment. </p> <p>Most notably, I managed to drag Roxanne to <a href="http://www.foyles.co.uk/">Foyles</a> and I got myself a copy of - <a href="http://www.pragprog.com/the-pragmatic-programmer">The Pragmatic Programmer</a>, which I&#8217;m reading + <a href="http://www.pragprog.com/the-pragmatic-programmer">The Pragmatic Programmer</a>, which I'm reading avidly. If it was up to me I was going to buy half of the computing section, but Roxanne <em>kindly pointed out</em> that I could get all of them from Amazon for half the price. <br /> And she was right: for my birthday I preordered a copy of <a href="http://www.amazon.com/Programming-Language-Pragmatics-Third-Michael/dp/0123745144">Programming Language - Pragmatics, 3rd Ed.</a>, which should be shipped soon.</p> + Pragmatics, 3rd Ed.</a>, which should be shipped soon. +</p> <h3>Wedding planning</h3> <p>My spreadsheets for the wedding guests, wedding expenses (!) and &#8230;suit sizes are getting bigger and bigger. We managed to book a lot of flights to Ireland to my parents, us, relatives etc., but there are still quite a few

@@ -52,24 +54,25 @@ weeks at most.</p>

<p>The other thing which must be sorted soon are the suits. According to English (and Irish) tradition, the groom, the bestman, the father of the groom, the father of the bride and the ushers have to wear the same type of suit, with minor differences (the color of the waistcoats?). In my case, this means getting 7 (<span class="caps">SEVEN</span>) - <em>morning suits</em> off eBay, in the right sizes! Hopefully I&#8217;ll be able to get them by the end of next - week (if my bestman manages to let me know his sizes).</p> + <em>morning suits</em> off eBay, in the right sizes! Hopefully I'll be able to get them by the end of next + week (if my bestman manages to let me know his sizes). +</p> <h3>XBox 360 Gaming</h3> <p>Now that our new XBox 360 finally came through, Roxanne and I have a lot of hours of hard core week end gaming ahead of us! This, added to the physiological increase of stress due to the wedding, may result in a temporary slowdown of my coding and writing activities.<br /> - Right now we&#8217;re playing <a href="http://xbox360.ign.com/objects/949/949455.html">Mirror&#8217;s Edge</a>, <a + Right now we're playing <a href="http://xbox360.ign.com/objects/949/949455.html">Mirror's Edge</a>, <a href="http://xbox360.ign.com/objects/718/718963.html">Mass Effect</a>, and <a href="http://xbox360.ign.com/objects/746/746631.html">Unreal Tournment <span class="caps">III</span></a>. The last one was a special surprise present from Roxanne (<em>&#8220;&#8230;so we can kill each other!&#8221;</em> - &mdash; she&#8217;s really lovely at times!).</p> + &mdash; she's really lovely at times!).</p> <h3>Other tech-related tidbits</h3> <ul> - <li>I can&#8217;t wait to go to the cinema to watch <a href="http://www.imdb.com/title/tt0796366/">Star Trek XI</a> + <li>I can't wait to go to the cinema to watch <a href="http://www.imdb.com/title/tt0796366/">Star Trek XI</a> </li> <li>I started using <a href="http://www.shelfari.com/">Shelfari</a></li> <li>I started using <a href="http://start.io">Star.io</a> as my personal, bare-bones start page.</li> <li>I recently <a href="/articles/concatenative-020">released Concatenative 0.2.0</a>.</li> - <li>I&#8217;m currently evaluating the possibility to create a Ruby-based <em>Document Authoring Framework</em>. + <li>I'm currently evaluating the possibility to create a Ruby-based <em>Document Authoring Framework</em>. Stay tuned.</li> </ul>
M contents/articles/log-feb-2009.htmlcontents/articles/log-feb-2009.html

@@ -8,12 +8,12 @@ <p>This has been a rather busy month, hence the lack of general Internet activity. I really wanted to post some more

articles to my site, but for one reason or another I had to procrastinate more and more, and here we are at the end of the month again.</p> <h3>Recession time!</h3> -<p>I&#8217;ve always considered the current economic downturn as something happening <em>somewhere else</em>: <span +<p>I've always considered the current economic downturn as something happening <em>somewhere else</em>: <span class="caps">USA</span>, England, Ireland&#8230; but not in Italy, really: our country never boomed, we - don&#8217;t go mental with loans and mortgages (or at least we didn&#8217;t use to), so there&#8217;s no real reason + don't go mental with loans and mortgages (or at least we didn't use to), so there's no real reason for a full-on recession period.</p> <p>It turns out I was wrong. Other than the fact that our industries are more or less non-existant or already in debt, I - didn&#8217;t consider that:</p> + didn't consider that:</p> <ul> <li>Italians tend to panic a lot.</li> <li>We have an awful lot of foreign business going on, a lot of multi-national companies opened up through the years

@@ -22,21 +22,21 @@ <li>Our government already <del>wastes</del> invests a lot of money regularly, every year, to fuel a colossal, <a

href="http://dictionary.reference.com/browse/nepotistic">nepotistic</a>, pointless bureaucratic machine they insist on calling &#8220;State&#8221;.</li> </ul> -<p>Result: the recession is starting to hit properly over here too. People are saving money, they don&#8217;t go out +<p>Result: the recession is starting to hit properly over here too. People are saving money, they don't go out buying pointless crap, they are scared to ask for a raise at work&#8230; the usual. I work for a foreign company - which has been, as were most, forced to save some money to compensate some not-so-good First Quarter&#8217;s + which has been, as were most, forced to save some money to compensate some not-so-good First Quarter's revenues. This means less unnecessary expenses, less training, less travelling and less outsourcing, which - didn&#8217;t help improving the daily work experiece. Personally, I&#8217;m not that affected by all this, - nevertheless it made me bless the day my fiancée persuaded me to stop uni after my Bachelor&#8217;s Degree to get a + didn't help improving the daily work experiece. Personally, I'm not that affected by all this, + nevertheless it made me bless the day my fiancée persuaded me to stop uni after my Bachelor's Degree to get a very rewarding, not-so-stressful job.</p> -<h3>No &#8217;Net @ Home</h3> -<p>The most annoying thing of the month was (and still is) the lack of Internet access at our house. Let&#8217;s do a +<h3>No 'Net @ Home</h3> +<p>The most annoying thing of the month was (and still is) the lack of Internet access at our house. Let's do a quick recap:</p> <ol> <li>After spending one year with Telecom Italia, Roxanne and I decided to change provider to save a bit of money and get more speed.</li> <li>On <em>December 24th</em> we requested a contract with <a href="http://www.wind.it">Wind</a>, after they assured - that we&#8217;d have the Internet back on in <em>just a few days, tops</em>.</li> + that we'd have the Internet back on in <em>just a few days, tops</em>.</li> <li>On <em>January 5th</em> Telecom disconnected us.</li> <li>On <em>January 12th</em> Wind sent me a mail telling me that there was going to be a <em>15-day delay</em> in the activation &mdash; well, at least they told us so! We waited.</li>

@@ -44,12 +44,12 @@ <li>On <em>February 2nd</em> I call Wind Customer Care hassling them to get a move on &mdash; just some minor

delays, <em>it will only take a few days, tops</em>. We waited.</li> </ol> <p>Our new Internet line has been <em>in the process of being activated</em> ever since January 5th. Why? Because being - a customer sucks, in Italy, and you can&#8217;t do much about it.<br /> + a customer sucks, in Italy, and you can't do much about it.<br /> Let me quote one of the 13 phone calls I made:</p> <ul> <li>&#8230; 5 minutes on hold, stupid music in the background &#8230;</li> - <li>[Operator]: Good Evening Sir, I&#8217;m <random name>, how can I help you?</li> - <li>[Me]: Hello, I&#8217;m enquiring about the status of my Internet connection: I&#8217;ve been disconnected since + <li>[Operator]: Good Evening Sir, I'm <random name>, how can I help you?</li> + <li>[Me]: Hello, I'm enquiring about the status of my Internet connection: I've been disconnected since the 5th of January&#8230;</li> <li>[Operator]: Phone Number please?</li> <li>[Me]: *** ******</li>

@@ -68,39 +68,39 @@ <li>[Operator]: Let me check&#8230;</li>

<li>&#8230; 3 minutes on hold, stupid music in the background &#8230;</li> <li>[Operator]: There are some technical difficulties.</li> <li>[Me]: What kind of technical difficulties?</li> - <li>[Operator]: I&#8230; I don&#8217;t think you can understand Sir, it&#8217;s technical&#8230;</li> + <li>[Operator]: I&#8230; I don't think you can understand Sir, it's technical&#8230;</li> <li>[Me]: (!!!) I have a degree in IT Engineering, so yes, I think I can understand enough.</li> - <li>[Operator]: &#8230;well, there&#8217;s nothing I can do&#8230; it says we&#8217;re in the process of connecting + <li>[Operator]: &#8230;well, there's nothing I can do&#8230; it says we're in the process of connecting you, it should be just&#8230;</li> <li>[Me]: &#8230;a matter of a couple of days, yes, I know: it has been over a month though!</li> - <li>[Operator]: Sir, really, I can&#8217;t really do much about it, you&#8217;ll just have to wait</li> + <li>[Operator]: Sir, really, I can't really do much about it, you'll just have to wait</li> <li>[Me]: Can you let me speak with the Technical Department?</li> - <li>[Operator]: No, sir, I can&#8217;t: you see, your <span class="caps">ADSL</span> line is not yet activated, they - can&#8217;t do anything about it.</li> - <li>[Me]: Excuse me, but I&#8217;d like to know what the problem is, and how long it will take to activate the line. + <li>[Operator]: No, sir, I can't: you see, your <span class="caps">ADSL</span> line is not yet activated, they + can't do anything about it.</li> + <li>[Me]: Excuse me, but I'd like to know what the problem is, and how long it will take to activate the line. </li> - <li>[Operator]: Sorry sir, we don&#8217;t have this information, and we can&#8217;t commit to a specific date.</li> + <li>[Operator]: Sorry sir, we don't have this information, and we can't commit to a specific date.</li> <li>[Me]: (!!!) May I speak to someone who knows this? May I speak to your superior?</li> - <li>[Operator] No, you can&#8217;t speak to my superior. You&#8217;ll just have to wait, I&#8217;m sorry.</li> - <li>[Me]: Well, it has been over a month, and I don&#8217;t know if you realize that you were supposed to connect me + <li>[Operator] No, you can't speak to my superior. You'll just have to wait, I'm sorry.</li> + <li>[Me]: Well, it has been over a month, and I don't know if you realize that you were supposed to connect me in just a few days and&#8230;</li> <li>[Operator]: Thank you for calling sir, have a good day.</li> </ul> -<p>That barely conveys the frustration I felt and I&#8217;m still feeling now. I can&#8217;t even sue them: I could get +<p>That barely conveys the frustration I felt and I'm still feeling now. I can't even sue them: I could get 100 Euro at most after spending at least a couple of thousands in lawyer. So much for the land of sunshine huh?</p> <h3>Programming in Ruby, again</h3> -<p>Some of you may be pleased to know I&#8217;m back coding in Ruby after slacking for months. It&#8217;s just the time +<p>Some of you may be pleased to know I'm back coding in Ruby after slacking for months. It's just the time of the year, I guess. <br /> - I&#8217;m also evangelizing the language quite a bit at work: after I wrote a few scripts on demand, I slowly lured - one of my colleagues to Vim, the Texile markup and then finally the Ruby language. He&#8217;s going through the <a - href="/articles/hlrb-review">Humble Little Ruby Book</a> and he&#8217;s loving it, so far. He&#8217;ll hopefully + I'm also evangelizing the language quite a bit at work: after I wrote a few scripts on demand, I slowly lured + one of my colleagues to Vim, the Texile markup and then finally the Ruby language. He's going through the <a + href="/articles/hlrb-review">Humble Little Ruby Book</a> and he's loving it, so far. He'll hopefully be fully assimilated in a few weeks at most, and after that there will be no going back!</p> <p>This inspired me to start a full rewrite of RedBook, my little Ruby daily logger. It - will feature a SQLite backend and Merb&#8217;s Datamapper to take care of the dirty work.<br /> + will feature a SQLite backend and Merb's Datamapper to take care of the dirty work.<br /> Unfortunately, even if the new sources are already available on <a href="http://github.com/h3rald/redbook/tree/master">GitHub</a>, it will take me approximately a few more weeks to complete all the plugins and more to finish the RDoc documentation and &mdash; hopefully &mdash; a fully-fledged - user manual. It&#8217;s <strong>the</strong> pet project, after all&#8230;</p> + user manual. It's <strong>the</strong> pet project, after all&#8230;</p> <p>On the other hand, it will take me considerably less time (a few days?) to release the next version of my RawLine library, featuring:</p> <ul>

@@ -109,7 +109,7 @@ <li>A handy little function for filename completion</li>

<li>Readline emulation, i.e. just <code>include Rawline</code> and use it as if it was <span class="caps">GNU</span> Readline</li> </ul> -<p>Of course this doesn&#8217;t mean RawLine is a complete, 100% Ruby port of the <span class="caps">GNU</span> Readline +<p>Of course this doesn't mean RawLine is a complete, 100% Ruby port of the <span class="caps">GNU</span> Readline library, but it is definitely more Ruby-ish, more cross platform (try using Readline with Ruby on Windows&#8230;), and usable enough for most of the normal things, like:</p> <ul>

@@ -118,7 +118,7 @@ <li>line editing (but no vi or emacs mode yet, sorry)</li>

<li>history</li> <li>quick and easy key bindings</li> </ul> -<p>Once this comes out, I&#8217;ll be implementing features on-demand, as <span class="caps">GNU</span> Readline is huge +<p>Once this comes out, I'll be implementing features on-demand, as <span class="caps">GNU</span> Readline is huge and offers way too many things anyone would ever need. Patches and contributions are of course more than welcome, though.</p> <p>For all my open source Ruby projects, after <a href="/articles/where-does-your-ruby-code-live">pondering the
M contents/articles/log-jun-2009.htmlcontents/articles/log-jun-2009.html

@@ -4,22 +4,22 @@ content-type: article

timestamp: 1246235040 tags: "personal_log|vim|ruby|wedding" ----- -<p>Welcome to yet another of my extremely boring, excessively fragmented personal log posts. I&#8217;m seriously +<p>Welcome to yet another of my extremely boring, excessively fragmented personal log posts. I'm seriously thinking of dropping the whole series in favor of more frequent (and shorter) blog posts, starting from next year. - This means you&#8217;ll probably have to read <em>another six</em> of these priceless gems, until december + This means you'll probably have to read <em>another six</em> of these priceless gems, until december 2009.<br /> As usual, feel free to skim through as each of the following <em>sections</em> is almost completely unrelated to the others.</p> <h3>H3RALD Web Site v8.0</h3> -<p>It&#8217;s the time of the year, again. It doesn&#8217;t happen <em>every</em> year but it&#8217;s definitely a trend - (hence the high version number): I&#8217;m going to redesign &amp; redevelop my web site.</p> -<p>This time is not the usual &#8220;Let&#8217;s pick another language and another framework and start from +<p>It's the time of the year, again. It doesn't happen <em>every</em> year but it's definitely a trend + (hence the high version number): I'm going to redesign &amp; redevelop my web site.</p> +<p>This time is not the usual &#8220;Let's pick another language and another framework and start from scratch&#8221;, but a rather more radical shift, and yet at the same time less painful. The idea is to transform H3RALD.com into a 100% static web site, without losing anything in functionality (gaining, if anything!).</p> <p><a href="http://tom.preston-werner.com/">Tom Preston-Werner</a> is definitely <em>not</em> the first person to <a href="http://tom.preston-werner.com/2008/11/17/blogging-like-a-hacker.html">blog like a hacker</a>, and his very own <a href="http://www.jekyllrb.com/">Jekyll</a> is definitely not the first static web site generator our there, - nevertheless, he inspired me to embrace what seems to be one of the latest trend in developer&#8217;s blogs.</p> + nevertheless, he inspired me to embrace what seems to be one of the latest trend in developer's blogs.</p> <p>The idea is simple: turn all the blog posts and pages into static content, and rely on third party web services for things like comments, search etc. For a rather extreme by very interesting example, see <a href="http://tagaholic.me/">Tagaholic</a>.</p>

@@ -30,12 +30,12 @@ <li>Free yourself from a resource-hungry, server-side app (<a href="http://wiki.github.com/fdv/typo/">Typo</a>, in

this case).</li> <li>Increase speed and reliability, without using caching or similar artifacts.</li> <li>Keep everything under version control.</li> - <li>Don&#8217;t worry about breaking things when upgrading (even if the static content generator changes, it - shouldn&#8217;t really break things).</li> + <li>Don't worry about breaking things when upgrading (even if the static content generator changes, it + shouldn't really break things).</li> <li>Unleash the power of client-side scripting (namely, JQuery).</li> </ul> -<p>For now, I&#8217;m just brainstorming a little bit on <a - href="http://github.com/h3rald/h3rald-website/issues">GitHub</a>, feel free to participate. The first step is +<p>For now, I'm just brainstorming a little bit on <a href="http://github.com/h3rald/h3rald-website/issues">GitHub</a>, + feel free to participate. The first step is obviously choosing a static content generator, and atm Jekyll seems to be slightly ahead of Webby. Opinions?</p> <h3>Glyph</h3> <p>Did you ever want to write a short manual or a book, or even a long article? If so, chances are you gave LaTeX a shot

@@ -43,7 +43,7 @@ and either fully embraced its philosophy or totally refused it. Sadly, I belong to the second category: I believe

sequential documents like manuals or books should be easier to create simply by using <span class="caps">HTML</span>.</p> <p>Whever I have a chance to actually start working on it, Glyph will become a <em>document authoring framework</em>, - i.e. a way to create visually appealing documents in a simple way. All the ingredients are there, it&#8217;s only + i.e. a way to create visually appealing documents in a simple way. All the ingredients are there, it's only necessary to glue them together in a pretty form:</p> <ul> <li>Textile (and <a href="http://redcloth.org/">RedCloth</a>) to produce clean <span class="caps">HTML</span> code

@@ -60,35 +60,35 @@ <p>This project is still in planning stage, feel free to have a look at the <a

href="http://github.com/h3rald/glyph/issues">issues/features page</a> on GitHub. Feedback is appreciated, as usual.</p> <h3>Vim files &amp; <em>the Stash</em></h3> -<p>If you read the previous two sections of this post, you may have noticed that I&#8217;m growing more and more fond of +<p>If you read the previous two sections of this post, you may have noticed that I'm growing more and more fond of git (and GitHub). Besides the repositories I already mentioned earlier on, I also created a personal <a - href="http://github.com/h3rald/stash">stash</a>, which I&#8217;m using mainly to store some of my Linux + href="http://github.com/h3rald/stash">stash</a>, which I'm using mainly to store some of my Linux dotfiles, article drafts and &#8230;Vim customizations.</p> -<p>If you&#8217;re looking for a color scheme for Vim, check out my very own <a +<p>If you're looking for a color scheme for Vim, check out my very own <a href="/herald-vim-color-scheme">herald.vim</a>, and tell me what you think.</p> <h3>Getting ready for the Big Step</h3> -<p>This will probably be my last post as a free man, as I&#8217;m getting married (civilly) on July 2nd and +<p>This will probably be my last post as a free man, as I'm getting married (civilly) on July 2nd and (religiously) on July 11th. <br /> Luckily the photographer agreed to give us a CD with all the pictures taken on the big day, with no copyright - restrictions attached to it (believe it or not, some photographers don&#8217;t allow you to republish <em>your - own</em> photos unless you ask them first), so I&#8217;ll probably write a long post with pictures when we come + restrictions attached to it (believe it or not, some photographers don't allow you to republish <em>your + own</em> photos unless you ask them first), so I'll probably write a long post with pictures when we come back from our (half) honeymoon.</p> <p>Everything is pretty much organized. We had troubles with the waistcoats we got from eBay: they were cut almost - randomly to <em>resamble</em> waistcoats, but they weren&#8217;t so we had to re-order another lot of 7 sets + randomly to <em>resamble</em> waistcoats, but they weren't so we had to re-order another lot of 7 sets (waistcoat, cravat <em>and</em> shirt this time) from another seller, this time UK-based. I seriously hope to get them in time.</p> -<p>On the 24th we&#8217;re having a party at our house. If you were invited, feel free to drop by, otherwise be prepared - to be thrown out of the window (4th floor) by one of our ushers (Roxanne&#8217;s <em>big</em> brother). It&#8217;s - probalby going to be about 30-40 people in the end, mainly because most of my office can&#8217;t come due to +<p>On the 24th we're having a party at our house. If you were invited, feel free to drop by, otherwise be prepared + to be thrown out of the window (4th floor) by one of our ushers (Roxanne's <em>big</em> brother). It's + probalby going to be about 30-40 people in the end, mainly because most of my office can't come due to holidays they booked in advance.</p> -<p>What&#8217;s left to do now? Well:</p> +<p>What's left to do now? Well:</p> <ul> <li>Send the bomboniere over to Ireland</li> <li>Make sure my dad actually ships the 96 specially-bottled bottles of our own wine to uncle John, in Ireland.</li> - <li>Make sure uncle John doesn&#8217;t drink all the 96 bottles of wine before the wedding reception.</li> + <li>Make sure uncle John doesn't drink all the 96 bottles of wine before the wedding reception.</li> <li>Make sure my best man understood that the speech he has do make <em>must</em> be in English, at least 3 minutes long and not too offensive to the groom.</li> - <li>Pay a huge, colossal heap of money for the whole thing. It&#8217;s going to cost us (and my dad) quite a bit, in - the end. But it&#8217;s a once-in-a-lifetime experience, after all (getting totally trashed in a fancy hotel + <li>Pay a huge, colossal heap of money for the whole thing. It's going to cost us (and my dad) quite a bit, in + the end. But it's a once-in-a-lifetime experience, after all (getting totally trashed in a fancy hotel with all your family, including 2nd and 3rd grade cousins).</li> </ul>
M contents/articles/log-mar-2009.htmlcontents/articles/log-mar-2009.html

@@ -4,25 +4,57 @@ content-type: article

timestamp: 1238385840 tags: "personal_log|wedding|ruby" ----- -<p>Another month <em>without</em> the Internet at home. This is getting really annoying, and I decided to change provider, <strong>again</strong>, hoping that I&#8217;ll eventually get my broadband back, someday. Luckily I can still go online at work, but of course it&#8217;s not the same thing: my time on Twitter and Facebook is now basically limited to weekends only, when Roxanne and I go down to Tuscany to stay with her parents.</p> +<p>Another month <em>without</em> the Internet at home. This is getting really annoying, and I decided to change + provider, <strong>again</strong>, hoping that I'll eventually get my broadband back, someday. Luckily I can still go + online at work, but of course it's not the same thing: my time on Twitter and Facebook is now basically limited to + weekends only, when Roxanne and I go down to Tuscany to stay with her parents.</p> <h3>Concatenative programming</h3> -<p>For some weird reason I became fond of the <a href="http://en.wikipedia.org/wiki/Concatenative_programming_language">Concatenative programming paradigm</a>. I started reading about <a href="http://www.latrobe.edu.au/philosophy/phimvt/joy/j00rat.html">Joy</a> and then started to work on a Ruby <span class="caps">DSL</span> able to do the similar things: <a href="/concatenative/">Concatenative</a>. Another pet project &mdash; as if I didn&#8217;t have enough things to do already!</p> -<p>Some people seemed pleased about it, especially on <a href="http://www.reddit.com/r/ruby/comments/887kn/concatenative_programming_in_ruby">Reddit</a> and <a href="http://dzone.com/links/concatenative_programming_in_ruby.html">dzone</a>. The downside of it is that it&#8217;s still fairly slow if compared to Ruby code (which is not exactly fast, either!), so if I had some spare time I should really try to implement it as a C extension, maybe.</p> +<p>For some weird reason I became fond of the <a + href="http://en.wikipedia.org/wiki/Concatenative_programming_language">Concatenative programming paradigm</a>. I + started reading about <a href="http://www.latrobe.edu.au/philosophy/phimvt/joy/j00rat.html">Joy</a> and then started + to work on a Ruby <span class="caps">DSL</span> able to do the similar things: <a + href="/concatenative/">Concatenative</a>. Another pet project &mdash; as if I didn't have enough things to do + already!</p> +<p>Some people seemed pleased about it, especially on <a + href="http://www.reddit.com/r/ruby/comments/887kn/concatenative_programming_in_ruby">Reddit</a> and <a + href="http://dzone.com/links/concatenative_programming_in_ruby.html">dzone</a>. The downside of it is that it's + still fairly slow if compared to Ruby code (which is not exactly fast, either!), so if I had some spare time I + should really try to implement it as a C extension, maybe.</p> <h3>Learning new programming languages?</h3> -<p>Incidentally, I&#8217;m still fighting with myself on whether to learn another programming language or not. At this point, learning <a href="http://www.factorcode.org">Factor</a> could turn out to be more natural than months ago. However, I would only learn new programming languages as a hobby, as I don&#8217;t need to do so for profit: luckily I&#8217;m still a happy technical writer and I enjoy my job.</p> -<p>I admit, I&#8217;m still looking for <em>the</em> perfect programming language which is fun to learn (not easy: fun), elegant, minimalist, fast, general purpose and cross platform (meaning Linux, Windows, and Windows Mobile as well). Of course there is no such thing out there and there will never be, so I&#8217;m still evaluating the current alternatives. Possible candidates are Haskell, Factor, some dialect of Lisp or C. <br /> -Why C? Well, because I didn&#8217;t do much with it since my first year at uni, and it could still be useful to write Ruby extensions or implement something at a lower level. After so much time getting spoiled by high level languages, I kinda miss the low level stuff. Ahhh where are all the pointers gone?!</p> -<p>On the other hand, I&#8217;m getting married soon, and I should use these months to help my wife-to-be a bit more with wedding planning (see next section). After all, I can always learn a new programming language <em>after</em> getting married, right? &#8230;<em>right?!</em></p> +<p>Incidentally, I'm still fighting with myself on whether to learn another programming language or not. At this point, + learning <a href="http://www.factorcode.org">Factor</a> could turn out to be more natural than months ago. However, + I would only learn new programming languages as a hobby, as I don't need to do so for profit: luckily I'm still a + happy technical writer and I enjoy my job.</p> +<p>I admit, I'm still looking for <em>the</em> perfect programming language which is fun to learn (not easy: fun), + elegant, minimalist, fast, general purpose and cross platform (meaning Linux, Windows, and Windows Mobile as well). + Of course there is no such thing out there and there will never be, so I'm still evaluating the current + alternatives. Possible candidates are Haskell, Factor, some dialect of Lisp or C. <br /> + Why C? Well, because I didn't do much with it since my first year at uni, and it could still be useful to write Ruby + extensions or implement something at a lower level. After so much time getting spoiled by high level languages, I + kinda miss the low level stuff. Ahhh where are all the pointers gone?!</p> +<p>On the other hand, I'm getting married soon, and I should use these months to help my wife-to-be a bit more with + wedding planning (see next section). After all, I can always learn a new programming language <em>after</em> getting + married, right? &#8230;<em>right?!</em></p> <h3>Wedding planning</h3> -<p>Roxanne and I are slowly getting more and more things done for the wedding. Every attempt I made to introduce her to <a href="http://en.wikipedia.org/wiki/Getting_things_done"><span class="caps">GTD</span></a> failed miserably so far, or better, it worked too well: she is now getting used to make lists and deciding on our <em>next actions</em> for the weekend. <br /> -This weekend we booked our flights to Ireland, looked at cottages and hotels for the three days after the wedding (not the honeymoon yet, we&#8217;ll have a late honeymoon in autumn), chose the waistcoats for me, my bestman and the ushers, and &#8230;booked the wedding car!<br /> -Now, this turned out to be good fun! Take a look at <a href="http://www.alleventslimos.com/Wedding/rolls_silver_cloud.html">Ruby</a> (yes, yes, I know&#8230; ), a Silver Cloud II 1961 Rolls Royce which will be ours for (less than) one day!</p> +<p>Roxanne and I are slowly getting more and more things done for the wedding. Every attempt I made to introduce her to + <a href="http://en.wikipedia.org/wiki/Getting_things_done"><span class="caps">GTD</span></a> failed miserably so + far, or better, it worked too well: she is now getting used to make lists and deciding on our <em>next actions</em> + for the weekend. <br /> + This weekend we booked our flights to Ireland, looked at cottages and hotels for the three days after the wedding + (not the honeymoon yet, we'll have a late honeymoon in autumn), chose the waistcoats for me, my bestman and the + ushers, and &#8230;booked the wedding car!<br /> + Now, this turned out to be good fun! Take a look at <a + href="http://www.alleventslimos.com/Wedding/rolls_silver_cloud.html">Ruby</a> (yes, yes, I know&#8230; ), a + Silver Cloud II 1961 Rolls Royce which will be ours for (less than) one day!</p> <h3>Other tech-related tidbits</h3> <ul> <li>I successfully migrated to Ubuntu 9.0.4 Jaunty. Everything works, except the flash plugin for Firefox.</li> - <li>I&#8217;m now using TweetDeck as my main Twitter client on both Windows and Linux.</li> - <li>I&#8217;m thinking of buying (after the wedding) an Eee PC (no Macs: Ubuntu is sleek and powerful enough &emdash;and free, too).</li> + <li>I'm now using TweetDeck as my main Twitter client on both Windows and Linux.</li> + <li>I'm thinking of buying (after the wedding) an Eee PC (no Macs: Ubuntu is sleek and powerful enough &emdash;and + free, too).</li> <li>We finally got an XBox 360 from eBay, this time it came through the post.</li> - <li>Roxanne is thinking of buying a big <span class="caps">LCD</span> TV to go with it &emdash; I&#8217;m politely (and sadly) postponing till after the wedding.</li> - <li>After listening a <span class="caps">FLOSS</span> Weekly episode featuring it, I think I&#8217;ll get myself an <a href="http://arduino.cc/">Arduino Board</a> for my birthday.</li> + <li>Roxanne is thinking of buying a big <span class="caps">LCD</span> TV to go with it &emdash; I'm politely (and + sadly) postponing till after the wedding.</li> + <li>After listening a <span class="caps">FLOSS</span> Weekly episode featuring it, I think I'll get myself an <a + href="http://arduino.cc/">Arduino Board</a> for my birthday.</li> </ul>
M contents/articles/log-may-2009.htmlcontents/articles/log-may-2009.html

@@ -4,23 +4,53 @@ content-type: article

timestamp: 1243744500 tags: "personal_log|programming|wedding" ----- -<p>Yet another extremely busy month, as you can see from the total absence of blog posts and lack of tweets even. Things are getting pretty hectic at work now I guess: less people, more work, more responsibility, same money. They call it <cite>contingency</cite>; it&#8217;s the latest trend in the Western World, didn&#8217;t you know? I&#8217;m really not impressed. I can&#8217;t complain though I guess: I still enjoy my job very much and I know it could be much worse, so it&#8217;s just a matter of enduring until autumn &#8212; or so they say.</p> +<p>Yet another extremely busy month, as you can see from the total absence of blog posts and lack of tweets even. Things + are getting pretty hectic at work now I guess: less people, more work, more responsibility, same money. They call it + <cite>contingency</cite>; it's the latest trend in the Western World, didn't you know? I'm really not impressed. I + can't complain though I guess: I still enjoy my job very much and I know it could be much worse, so it's just a + matter of enduring until autumn &#8212; or so they say.</p> <h3>Star Trek Premiere</h3> -<p>The month started with an event I&#8217;d been looking for for months: the <em>premiere</em> of Star Trek XI, aka &#8220;Star Trek&#8221;. It&#8217;s not that J.J. Abrahms couldn&#8217;t come up with a more original name (<em>Star Trek: Academy</em> used to be the working title, at one point), he simply wanted to tell the world that this movie was a new beginning, an elaborate way to start from scratch, to reboot what was more than once dubbed <em>a dying franchise</em>.</p> -<p>The movie was enjoyable &#8211; daring and a bit flamboyant &#8211; but still enjoyable nonetheless. I consider myself a Star Trek fan, and although it was <em>not</em> the usual Star Trek movie, I somehow liked Abrahms&#8217; bold revisitation of Roddenberry&#8217;s universe. Take a bunch of unknowns (Chris Pine) or semi-unknowns (Zachary Quinto), then add some spicy British humor (Simon Pegg) and some old friend (Leonard Nimoy) and throw in an awful lot of <span class="caps">XXI</span> century special effects: what you get is not the usual, let&#8217;s-all-rock-because-we&#8217;re-hit traditional Star Trek, of course, it&#8217;s an <em>alternate</em> version of it.</p> -<p>That&#8217;s precisely what the movie is meant to be: what Star Trek would have look like if it had been created in the <span class="caps">XXI</span> century. The timeline feels disrupted since the very first minute (nevermind the end!), with a Jim Kirk stealing his stepfather&#8217;s car. Chris Pine is an <a href="http://memory-alpha.org/en/wiki/James_T._Kirk_(alternate_reality)">alternate</a> Kirk, quite different from the original one, but not that bad. Zachary Quinto, on the other hand, is a true revelation: he definitely is the new Spock, and he couldn&#8217;t have been cast better. So is Simon Pegg as Scotty, but unfortunately he&#8217;s not involved enough.</p> -<p>The baddies were a bit of a letdown. Nero is a bit too flat, and his ship is way too fancy, no matter where it comes from. Clearly some Hollywood junkie wanted a big, invulnerable dark ship to bring havoc in the galaxy, but that is <span class="caps">NOT</span> a Romulan ship, period.</p> -<p>At any rate, I enjoyed the movie and I&#8217;m looking forward to the second one, which I hope it will be followed by many others.</p> -<p>Unfortunately in Italy Star Trek is not worshiped in Italy as in it is the US, which is very unfortunate&#8230; Roxanne and I decided to play along and go to the cinema half-dressed-up, but our friends Elora and Michelle came with a full-blown Uhura uniform! The whole cinema kept staring at us. It was a bit freaky, but fun (check out the pics on Facebook &#8212; if you can, that is, I won&#8217;t post them here!).</p> +<p>The month started with an event I'd been looking for for months: the <em>premiere</em> of Star Trek XI, aka + &#8220;Star Trek&#8221;. It's not that J.J. Abrahms couldn't come up with a more original name (<em>Star Trek: + Academy</em> used to be the working title, at one point), he simply wanted to tell the world that this movie was + a new beginning, an elaborate way to start from scratch, to reboot what was more than once dubbed <em>a dying + franchise</em>.</p> +<p>The movie was enjoyable &#8211; daring and a bit flamboyant &#8211; but still enjoyable nonetheless. I consider + myself a Star Trek fan, and although it was <em>not</em> the usual Star Trek movie, I somehow liked Abrahms' bold + revisitation of Roddenberry's universe. Take a bunch of unknowns (Chris Pine) or semi-unknowns (Zachary Quinto), + then add some spicy British humor (Simon Pegg) and some old friend (Leonard Nimoy) and throw in an awful lot of + <span class="caps">XXI</span> century special effects: what you get is not the usual, + let's-all-rock-because-we're-hit traditional Star Trek, of course, it's an <em>alternate</em> version of it.</p> +<p>That's precisely what the movie is meant to be: what Star Trek would have look like if it had been created in the + <span class="caps">XXI</span> century. The timeline feels disrupted since the very first minute (nevermind the + end!), with a Jim Kirk stealing his stepfather's car. Chris Pine is an <a + href="http://memory-alpha.org/en/wiki/James_T._Kirk_(alternate_reality)">alternate</a> Kirk, quite different + from the original one, but not that bad. Zachary Quinto, on the other hand, is a true revelation: he definitely is + the new Spock, and he couldn't have been cast better. So is Simon Pegg as Scotty, but unfortunately he's not + involved enough.</p> +<p>The baddies were a bit of a letdown. Nero is a bit too flat, and his ship is way too fancy, no matter where it comes + from. Clearly some Hollywood junkie wanted a big, invulnerable dark ship to bring havoc in the galaxy, but that is + <span class="caps">NOT</span> a Romulan ship, period.</p> +<p>At any rate, I enjoyed the movie and I'm looking forward to the second one, which I hope it will be followed by many + others.</p> +<p>Unfortunately in Italy Star Trek is not worshiped in Italy as in it is the US, which is very unfortunate&#8230; + Roxanne and I decided to play along and go to the cinema half-dressed-up, but our friends Elora and Michelle came + with a full-blown Uhura uniform! The whole cinema kept staring at us. It was a bit freaky, but fun (check out the + pics on Facebook &#8212; if you can, that is, I won't post them here!).</p> <h3>Wedding Planning</h3> -<p>Just over a month to my wedding. Scared? You bet. Stressed out? Indeed. Roxanne and I managed to get most of the things organized in the end, luckily. In particular, this month:</p> +<p>Just over a month to my wedding. Scared? You bet. Stressed out? Indeed. Roxanne and I managed to get most of the + things organized in the end, luckily. In particular, this month:</p> <ul> - <li>We went to the British Consulate in Milan, and applied to get Roxanne&#8217;s legal documents.</li> - <li>I bought and had the 7 vest sets delivered to Roxanne&#8217;s brother&#8217;s (Caspar) place, in London.</li> - <li>I ended up buying 8 (buy three, get one free) morning suits from <a href="http://www.marksandspencer.com/gp/product/B000N65ELG?extid=pg_msf&amp;247SEM">Marks and Spencer</a>, and had them delivered to Caspar&#8217;s place. He&#8217;ll be sending all the stuff over soon, hopefully.</li> + <li>We went to the British Consulate in Milan, and applied to get Roxanne's legal documents.</li> + <li>I bought and had the 7 vest sets delivered to Roxanne's brother's (Caspar) place, in London.</li> + <li>I ended up buying 8 (buy three, get one free) morning suits from <a + href="http://www.marksandspencer.com/gp/product/B000N65ELG?extid=pg_msf&amp;247SEM">Marks and Spencer</a>, + and had them delivered to Caspar's place. He'll be sending all the stuff over soon, hopefully.</li> <li>Roxanne got the dresses for the maids of honor, and apparently we have to collect them on monday.</li> - <li>We sent all the invites we needed to send, but we&#8217;re still waiting for confirmations. It looks like it won&#8217;t be a big wedding, probably around to 60-70 people mark.</li> - <li>We ordered the <a href="http://weddings.about.com/cs/glossary/g/Bomboniere.htm">bomboniere</a>, they should come through soon.</li> + <li>We sent all the invites we needed to send, but we're still waiting for confirmations. It looks like it won't be + a big wedding, probably around to 60-70 people mark.</li> + <li>We ordered the <a href="http://weddings.about.com/cs/glossary/g/Bomboniere.htm">bomboniere</a>, they should come + through soon.</li> <li>Uncle John told us he had the music for the church and the reception sorted out.</li> <li>We got the rings!</li> </ul>

@@ -30,44 +60,76 @@ <li>Write and print the prayer books</li>

<li>Book the flight for one of my ushers</li> <li>Get some fancy gifts for the bestman and the rest of the people involved in the ceremony</li> <li>Get married civilly here in Genoa</li> - <li>Organize a party at our place for the people who can&#8217;t come to the wedding</li> - <li>Do something else I can&#8217;t remember right now</li> + <li>Organize a party at our place for the people who can't come to the wedding</li> + <li>Do something else I can't remember right now</li> </ul> -<p>Yes, we are still busy as hell. I&#8217;m looking forward to it all, but I&#8217;ll definitely be much more relaxed when it&#8217;s all over!</p> +<p>Yes, we are still busy as hell. I'm looking forward to it all, but I'll definitely be much more relaxed when it's all + over!</p> <h3>Home Internet: Epilogue?</h3> -<p>I got broadband at home, finally, after five months. Let&#8217;s do a quick recap:</p> +<p>I got broadband at home, finally, after five months. Let's do a quick recap:</p> <ol> <li>Last December I signed up to Libero Infostrada, and told them I wanted to disconnect from Telecom</li> - <li>In January I actually got disconnected from Telecom, got a new phone line contract, but the Internet was never activated.</li> + <li>In January I actually got disconnected from Telecom, got a new phone line contract, but the Internet was never + activated.</li> <li>I kept calling clueless operators on both ends pointlessly for 2-3 months.</li> - <li>I got pissed off with Libero, so in April I signed up to Tele2, telling them to disconnect me from Libero. They told me it would take at least 4 weeks.</li> - <li>Meanwhile, I signed up to 3g, and got an Internet <span class="caps">USB</span> key. At least I can go online, even if with a crappy <span class="caps">UMTS</span> connection.</li> - <li>After a month, Telecom rings me asking if I want to come back to them, promising I&#8217;ll have the Internet back on <em>soon enough</em>. Out of desperation, I accept and tell them to disconnect me from Tele2.</li> + <li>I got pissed off with Libero, so in April I signed up to Tele2, telling them to disconnect me from Libero. They + told me it would take at least 4 weeks.</li> + <li>Meanwhile, I signed up to 3g, and got an Internet <span class="caps">USB</span> key. At least I can go online, + even if with a crappy <span class="caps">UMTS</span> connection.</li> + <li>After a month, Telecom rings me asking if I want to come back to them, promising I'll have the Internet back on + <em>soon enough</em>. Out of desperation, I accept and tell them to disconnect me from Tele2.</li> </ol> -<p>Just when I was about to write a long post cursing Telecom and their perverted schemes to force their customers to stay with them, I receive a call from Libero and they tell me that the Internet is now activated! Unbelievable. Now all I have to do is send letters to all the other ISPs (they don&#8217;t do these things on the phone &#8212; clueless operators, remember?) telling them I don&#8217;t want anything to do with them anymore.</p> +<p>Just when I was about to write a long post cursing Telecom and their perverted schemes to force their customers to + stay with them, I receive a call from Libero and they tell me that the Internet is now activated! Unbelievable. Now + all I have to do is send letters to all the other ISPs (they don't do these things on the phone &#8212; clueless + operators, remember?) telling them I don't want anything to do with them anymore.</p> <p>This is how broadband Internet works in Italy. Jealous?</p> <h3>Nimrod</h3> -<p>Last month I decided I would stop programming until after the wedding and so I did (at least at home). Nevertheless, I still keep strive to keep up-to-date with everything concerning technology and in particular programming.</p> -<p>Out of all the tech news I came across throughout this month, the <a href="http://force7.de/nimrod/">Nimrod</a> programming language definitely struck me the most. A German guy came up with a new language &#8212; that&#8217;s not a big news, new programming languages are born every week, if not every day.</p> -<p>I believe Nimrod is different though. Basically, here&#8217;s why:</p> +<p>Last month I decided I would stop programming until after the wedding and so I did (at least at home). Nevertheless, + I still keep strive to keep up-to-date with everything concerning technology and in particular programming.</p> +<p>Out of all the tech news I came across throughout this month, the <a href="http://force7.de/nimrod/">Nimrod</a> + programming language definitely struck me the most. A German guy came up with a new language &#8212; that's not a + big news, new programming languages are born every week, if not every day.</p> +<p>I believe Nimrod is different though. Basically, here's why:</p> <ul> - <li>It&#8217;s a mixture of Lisp, Python and C. It looks a bit like Python and it behaves like it (indentation matters), it allows the creation of macros, like in Lisp, and &#8211; this is what <em>really</em> matters to me &#8211; it compiles to plain C (which can then be compiled using <span class="caps">GCC</span> or whatever).</li> + <li>It's a mixture of Lisp, Python and C. It looks a bit like Python and it behaves like it (indentation matters), + it allows the creation of macros, like in Lisp, and &#8211; this is what <em>really</em> matters to me &#8211; + it compiles to plain C (which can then be compiled using <span class="caps">GCC</span> or whatever).</li> <li>It is open source and can be used to produce commercially distributed executables.</li> - <li>The <a href="http://force7.de/nimrod/manual.html">manual</a> is simple to read (but with a few rough edges), and the language looks simple to learn.</li> - <li>The language is not yet complete, but it&#8217;s getting close to a 1.0 release. It works as advertised, nonetheless.</li> - <li>It offers a comprehensive standard library, and a <em>huge</em> amount of libraries and wrappers from everything from Windows <span class="caps">API</span> to <span class="caps">GTK</span> and Cairo.</li> + <li>The <a href="http://force7.de/nimrod/manual.html">manual</a> is simple to read (but with a few rough edges), and + the language looks simple to learn.</li> + <li>The language is not yet complete, but it's getting close to a 1.0 release. It works as advertised, nonetheless. + </li> + <li>It offers a comprehensive standard library, and a <em>huge</em> amount of libraries and wrappers from everything + from Windows <span class="caps">API</span> to <span class="caps">GTK</span> and Cairo.</li> <li>It is cross platform, the Windows version even comes with a one-click installer.</li> <li>It has garbage collection <em>and</em> it supports manual memory management, if you need it.</li> - <li>It&#8217;s statically typed, with type inference</li> + <li>It's statically typed, with type inference</li> <li>It can generate standalone executables, with very little overhead (90KB for an hello world program).</li> </ul> -<p>A language like this has been my secret dream for a long time. I thought no one would ever come up like this. I am really looking forward to give it a proper try someday. What&#8217;s wrong with it? For now, a few bits are missing (like native serialization), other than that someone pointed out the weird, rather extreme case insensitiveness of the language. Basically, case <em>and underscores</em> are ignored to <cite>allow programmers to use their own programming conventions</cite>. <br /> -Personally I don&#8217;t think this is that bad. After all, if you name your variables &#8220;a_thing&#8221; and &#8220;aThing&#8221; and you want them to mean different things, that&#8217;s bad programming style anyway. Nevertheless, as far as I know it&#8217;s the only language I know which offers such an extreme degree of flexibility in this sense.</p> +<p>A language like this has been my secret dream for a long time. I thought no one would ever come up like this. I am + really looking forward to give it a proper try someday. What's wrong with it? For now, a few bits are missing (like + native serialization), other than that someone pointed out the weird, rather extreme case insensitiveness of the + language. Basically, case <em>and underscores</em> are ignored to <cite>allow programmers to use their own + programming conventions</cite>. <br /> + Personally I don't think this is that bad. After all, if you name your variables &#8220;a_thing&#8221; and + &#8220;aThing&#8221; and you want them to mean different things, that's bad programming style anyway. Nevertheless, + as far as I know it's the only language I know which offers such an extreme degree of flexibility in this sense.</p> <h3>Learning new things</h3> -<p>This month I also found myself to be extremely eager to learn about new things. I&#8217;m still faithful to Ruby and all that, but I&#8217;m opening up to new possibility, for different things:</p> +<p>This month I also found myself to be extremely eager to learn about new things. I'm still faithful to Ruby and all + that, but I'm opening up to new possibility, for different things:</p> <ul> - <li>I decided to start listening to slightly more technical podcasts, which are _not_related to tech news. In this way, I don&#8217;t have the pressure of having to listen to them on a regular basis. Other than <a href="http://twit.tv/FLOSS"><span class="caps">FLOSS</span> Weekly</a>, which is probably the best show about Open Source Software out there, I&#8217;m going to try out <a href="http://www.se-radio.net/">Software Engineering Radio</a> and <a href="http://thecommandline.net/">The Command Line</a>, both slightly more technical.</li> - <li>Because I decided to put my personal programming projects on hold, I&#8217;m having all sort of new ideas about even <em>more</em> projects I could start as soon as I can. No anticipations until after my wedding, of course.</li> - <li>I&#8217;m using Vim all the time now, both at work and at home. I feel confident with it, but I feel I still have a lot to learn, especially when it comes to marks, registers, etc. And I&#8217;m not yet ready to write an article about it &#8212; not the kind of article I&#8217;d like to write, anyway.</li> - <li>I&#8217;d like to learn more about Javascript and JQuery. I played around with it and <em>loved it</em>, but I really never used it for anything serious yet. This, however, may change in the future.</li> + <li>I decided to start listening to slightly more technical podcasts, which are _not_related to tech news. In this + way, I don't have the pressure of having to listen to them on a regular basis. Other than <a + href="http://twit.tv/FLOSS"><span class="caps">FLOSS</span> Weekly</a>, which is probably the best show + about Open Source Software out there, I'm going to try out <a href="http://www.se-radio.net/">Software + Engineering Radio</a> and <a href="http://thecommandline.net/">The Command Line</a>, both slightly more + technical.</li> + <li>Because I decided to put my personal programming projects on hold, I'm having all sort of new ideas about even + <em>more</em> projects I could start as soon as I can. No anticipations until after my wedding, of course.</li> + <li>I'm using Vim all the time now, both at work and at home. I feel confident with it, but I feel I still have a + lot to learn, especially when it comes to marks, registers, etc. And I'm not yet ready to write an article about + it &#8212; not the kind of article I'd like to write, anyway.</li> + <li>I'd like to learn more about Javascript and JQuery. I played around with it and <em>loved it</em>, but I really + never used it for anything serious yet. This, however, may change in the future.</li> </ul>
M contents/articles/making-it-big-in-software.htmlcontents/articles/making-it-big-in-software.html

@@ -9,26 +9,27 @@ -----

<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&#8230; what&#8217;s that word again? + instantly, a lot of people blogged about it, it was surrended by a lot of&#8230; 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&#8217;s bio on the second-last page of the book: Sam Lightstone + <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> + author and co-author of 30+ patents. + </p> <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&#8217;s advice: if you don&#8217;t believe him, you will believe - those who <em>made it</em>. Anyhow, let&#8217;s say something about the book itself, shall we?</p> + 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> &#8212; all you need to know to get hired. Finish school, learn new

@@ -54,8 +55,8 @@ 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&#8217;s understandable: after years of striving to be the - best, to do things for yourself, you&#8217;re suddenly asked to work for and with others.</p> + 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&eacute;sum&eacute;, how to survive interviews, the usual. Hell I wish I had this book when I started!</p>

@@ -80,7 +81,7 @@ </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&#8217;t substitute a time management course or + 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:

@@ -112,8 +113,9 @@ <td>Chores &amp; 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&#8217;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> + <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>

@@ -121,8 +123,8 @@ <p>&#8220;Leadership is communicating to people their worth and potential so clearly that they come to see

it in themselves.&#8221;</p> </blockquote> <p style="margin-left: 4em">&ndash; Stephen Covey</p> - <p>Again, this chapter teaches you the basics on leadership and management. If you didn&#8217;t take a course on - the subject yet, it&#8217;s definitely worth a read.</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>

@@ -132,15 +134,17 @@ <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&#8217;t teach you to become a genius or an inventor, but they do provide help on the + 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> + 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&#8230; 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&#8217;s + 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>

@@ -161,7 +165,7 @@ to the local <span class="caps">IBM</span> office, literally knocked on their door, and said, &#8220;I

will do anything for the summer-empty trash cans, you name it.&#8221; They said, &#8220;Go away kid.&#8221; 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&#8217;d probably read it and get bored and never come back. But much to his surprise, I came back the + 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, &#8220;Hey, this is cool! I just wrote a program and I want to run it.&#8221; 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>

@@ -179,7 +183,7 @@ <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&#8217;re + <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

@@ -187,9 +191,9 @@ 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&eacute;sum&eacute; 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&#8217;re motivated enough and - interested in your work, it is definitely within your grasp. <em>Be goal oriented</em>. It&#8217;s not - enough, but it&#8217;s a good start.</p> + 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>
M contents/articles/mongrel-shortcut-review.htmlcontents/articles/mongrel-shortcut-review.html

@@ -5,54 +5,55 @@ 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&#8217;t, I&#8217;d recommend + 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> + <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&#8217;s also an interesting <a + 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&amp;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>&#8220;Mongrel: Serving, Deploying, and Extending Your Ruby Applications&#8221; &ndash; that&#8217;s the title of the +<p>&#8220;Mongrel: Serving, Deploying, and Extending Your Ruby Applications&#8221; &ndash; 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&#8217;s format is, as a matter of fact, <em>optimized for web developers</em>, - especially those who can&#8217;t afford to read a 500-pages book covering everything about a subject just to find - that one thing they don&#8217;t know about.<br /> + 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&#8217;s have a closer look at it.</p> +<p>Let's have a closer look at it.</p> <h3>Overview, Introduction &amp; 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&#8217;s contributions are definitely one of the book&#8217;s best selling points. <br /> - Zed&#8217;s thoughts are scattered here and there in many <em>sidebars</em> throughout the book (there&#8217;s at - least one in each section): you&#8217;ll see an odd-looking face (Zed&#8217;s self-caricature) with some text next - to it; when you read it, you&#8217;ll notice that they are <em>actually</em> Zed&#8217;s own thoughts, straight from + 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&#8217;s - precisely what Zed <em>feels</em> to say about something, and he&#8217;ll just say it: just the plain, simple + 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>&#8220;[&#8230;] You may not agree with everything he says, but you probably should.&#8221;</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&#8217;s nothing new to learn if you already used - Mongrel before, probably, but it&#8217;s definitely the first thing to show to someone who&#8217;s new to Mongrel + 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>&#8220;What can Mongrel do for me&#8221;</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>&#8220;Mongrel is pretty damned secure.&#8221;</em> and <em>&#8220;Mongrel&#8217;s license is + assertions like <em>&#8220;Mongrel is pretty damned secure.&#8221;</em> and <em>&#8220;Mongrel's license is capitalist-friendly.&#8221;</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&#8217;s what everyone who ever used it already knows, but it&#8217;s still necessary for the - book&#8217;s consistency, after all. After reading this section, you&#8217;ll probably have your first Mongrel up - and running and serving your little Rails application&#8217;s pages, and you&#8217;ll begin to wonder why the hell + 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&#8230;</p> <h3>Section 4: Configurations</h3> -<p>&#8230;aka &#8220;a truly useful Mongrel cheatsheet&#8221;. This section dives deep(er) into Mongrel&#8217;s +<p>&#8230;aka &#8220;a truly useful Mongrel cheatsheet&#8221;. 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>

@@ -64,7 +65,7 @@ handle more traffic.</li>

<li><strong>Behind a static web server</strong> &ndash; 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&#8217;s delight, the author will discuss two common, useful +<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&#95;cluster</strong></li>

@@ -87,8 +88,8 @@ <p>Sounds terribly true. Especially for larger projects demanding good performance under heavy traffic. Scared?

Probably, if you never deployed a Rails application &#8220;properly&#8221; 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 &#8220;Best Practices Rubric&#8221; is also provided for the developer&#8217;s own private - enjoyement. It&#8217;s written as a list of questions like:</p> +<p>Not only this, but also a &#8220;Best Practices Rubric&#8221; 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>

@@ -96,7 +97,7 @@ </p>

<p>After these 13 questions, the author provides the key to give a meaning to your answers:</p> <blockquote> <p><em>&quot;For each question you answer with &#8220;NO&#8221;, add 10 hours to your time estimate for completion. - This may seem unrealistic, since saying &#8220;NO&#8221; to everything means it&#8217;ll take 190 hours + This may seem unrealistic, since saying &#8220;NO&#8221; to everything means it'll take 190 hours (about one<br /> month), but this estimate is actually low according to most first deployment experiences.&quot;</em></p> </blockquote>

@@ -110,29 +111,30 @@ <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&#8217;ll never do if you just want to run your grandma&#8217;s site on Rails, but certainly +<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&#8217;s just meant to point you + 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>Before you begin, though, don&#8217;t forget what Zed himself has to say about Mongrel&#8217;s simplicity:</p> +<p>Before you begin, though, don't forget what Zed himself has to say about Mongrel's simplicity:</p> <blockquote> - <p><em>&#8220;I&#8217;ve always had a different aesthetic sense when I write my software. I value simplicity and + <p><em>&#8220;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.&#8221;</em></p> </blockquote> -<p>Mongrel&#8217;s architecture is not that complex, and this section is sufficient to get you started by providing an +<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&#8217;t describe anything about the APIs of these classes. but after all, the project&#8217;s + 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> + 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>

@@ -142,7 +144,7 @@ </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 &#8220;duck&#8221; plugin, to make Mongrel quack like a duck when it&#8217;s started (not the most + <li>An example &#8220;duck&#8221; 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 &amp; Security</h3>

@@ -155,45 +157,45 @@ <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>Again, Zed&#8217;s wisdom and wit are remarkable:</p> +<p>Again, Zed's wisdom and wit are remarkable:</p> <blockquote> - <p><em>&#8220;These people&#8217;s problem is they suffer from Potpourri Turd Syndrome—a belief that their - you-know-what don&#8217;t stink and smells like fine dew on freshly cut grass. Whenever there&#8217;s a bug, + <p><em>&#8220;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&#8217;s code trying to find fault and just assume that - it&#8217;s nothing they wrote.<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 /> [&#8230;]<br /> - When you run into a problem with your application, always assume it&#8217;s your fault first. - Mongrel&#8217;s not perfect, but its code is minuscule compared to the size of Rails and most likely even + 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&#8217;s an error, the evidence already says it&#8217;s in your code, so bite the bullet and start - investigating it as if it&#8217;s your problem.&#8221;</em></p> + 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.&#8221;</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 &#8220;tuning process&#8221;, 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 &#8220;Mongrel strictly does this&#8221; or &#8220;Mongrel doesn&#8217;t support this + them. The answer is normally &#8220;Mongrel strictly does this&#8221; or &#8220;Mongrel doesn't support this feature&#8221;. 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&#8217;d expect by a server like Apache:</p> + deliberately does not aim to offer all the feature you'd expect by a server like Apache:</p> <blockquote> <p><em>&quot;As you probably see, Mongrel say, &#8220;No&#8221; in many places where most Web servers say, &#8220;Yes, OK.&#8221; Sometimes this is because no one using Mongrel has needed it yet, sometimes - it&#8217;s because there&#8217;s a<br /> + 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.&quot;</em></p> </blockquote> <h3>Conclusion</h3> -<p>If Mongrel is opinionated software, this is definitely an opinionated book which fully embraces the project&#8217;s - philosopy of simplicity above everything else. It&#8217;s an interesting read and it won&#8217;t bore you to death +<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&#8217;s assertions.</p> + 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&#8217;t make sense to even attempt to discuss them in this shortcut.</p> -<p>Similarly, you won&#8217;t find complex examples either, but that&#8217;s acceptable because simple examples are + 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 &#8220;scaffold&#8221; for your own code.</p> <p>Globally, the book is well balanced and <em>optimized</em> for its size: lightweight introductory sections at first,
M contents/articles/obama-may-come-to-genoa.htmlcontents/articles/obama-may-come-to-genoa.html

@@ -4,18 +4,36 @@ content-type: article

timestamp: 1218420540 tags: "politics" ----- -<p>Barack Obama may visit Columbus&#8217; birthplace on October 12th 2008, and take part in the city&#8217;s celebration of the discovery of America, which is held in the city every year. As reported by <strong>Il Secolo <span class="caps">XIX</span></strong>, Genova&#8217;s local newspaper.</p> -<p>Although the invitation has not been officially accepted by the American Presidential Candidate, Genoa&#8217;s mayor <strong>Marta Vincenzi</strong> is working very hard to make it happen.</p> -<p><strong>Kerry Kennedy</strong> (Bob Kennedy&#8217;s daughter), is said to be in charge of liaising with Obama on the US side.</p> +<p>Barack Obama may visit Columbus' birthplace on October 12th 2008, and take part in the city's celebration of the + discovery of America, which is held in the city every year. As reported by <strong>Il Secolo <span + class="caps">XIX</span></strong>, Genova's local newspaper.</p> +<p>Although the invitation has not been officially accepted by the American Presidential Candidate, Genoa's mayor + <strong>Marta Vincenzi</strong> is working very hard to make it happen.</p> +<p><strong>Kerry Kennedy</strong> (Bob Kennedy's daughter), is said to be in charge of liaising with Obama on the US + side.</p> <blockquote> -<p>&#8220;[&#8230;] Kerry Kennedy and her family &ndash; among the first and most unexpected of Obama&#8217;s supporters in his challange against Hillary Clinton &ndash; are said to be organising his visit to Genoa. It all started when Kerry came to the city at the beginning of July, for the Week of Human Rights initiative promoted by the city&#8217;s council. Kerry was introduced to Nando Dalla Chiesa&#8217;s &#8216;Columbus Day&#8217; program plan by Vincenzi .<br /> -<br /><br /> -The proposal of inviting Obama to Christopher Columbus&#8217; birthplace was immediate, and a significant move. <br /> -That could have important consequences, because Genoa has been involved in battles for civil rights in the last few months while also trying to restore its relationship with the United States, which have often been identified as a symbol of evil globalization since the G8 summit [held in the city in 2001].&#8221;<br /> -<br /><br /> -After Bush &ndash; the &#8220;king&#8221; president among the other 8 powers protected by the Red Zone [the restricted area of the city where the G8 summit was held] &ndash; a black presidential candidate who speaks of dialog and integration to the people of Genova (and obviously also tens of thousands of Italians), from De Ferrari Square [the city&#8217;s main square]. [&#8230;]&quot;</p> + <p>&#8220;[&#8230;] Kerry Kennedy and her family &ndash; among the first and most unexpected of Obama's supporters + in his challange against Hillary Clinton &ndash; are said to be organising his visit to Genoa. It all started + when Kerry came to the city at the beginning of July, for the Week of Human Rights initiative promoted by the + city's council. Kerry was introduced to Nando Dalla Chiesa's &#8216;Columbus Day' program plan by Vincenzi + .<br /> + <br /><br /> + The proposal of inviting Obama to Christopher Columbus' birthplace was immediate, and a significant move. <br /> + That could have important consequences, because Genoa has been involved in battles for civil rights in the last + few months while also trying to restore its relationship with the United States, which have often been + identified as a symbol of evil globalization since the G8 summit [held in the city in 2001].&#8221;<br /> + <br /><br /> + After Bush &ndash; the &#8220;king&#8221; president among the other 8 powers protected by the Red Zone [the + restricted area of the city where the G8 summit was held] &ndash; a black presidential candidate who speaks of + dialog and integration to the people of Genova (and obviously also tens of thousands of Italians), from De + Ferrari Square [the city's main square]. [&#8230;]&quot; + </p> </blockquote> -<p><em>&ndash; Translated from <a href="http://ilsecoloxix.ilsole24ore.com/genova/2008/08/11/1101689125257-indovina-chi-viene-genova.shtm">Indovina chi viene a Genova</a>, Giovanna Mari, August 11th 2008.</em></p> -<p>This could be a truly important occasion for Genova (and Italy) to re-establish dialog with the United States after the G8 summit (which cost the city a death and millions of Euro of damage caused by vandalism).<br /> -However, there is still no official confirmation that the event will take place at all, especially due to the upcoming Presidential Elections in the same period.</p> -<p>If he comes, I&#8217;ll definitely be there!</p> +<p><em>&ndash; Translated from <a + href="http://ilsecoloxix.ilsole24ore.com/genova/2008/08/11/1101689125257-indovina-chi-viene-genova.shtm">Indovina + chi viene a Genova</a>, Giovanna Mari, August 11th 2008.</em></p> +<p>This could be a truly important occasion for Genova (and Italy) to re-establish dialog with the United States after + the G8 summit (which cost the city a death and millions of Euro of damage caused by vandalism).<br /> + However, there is still no official confirmation that the event will take place at all, especially due to the + upcoming Presidential Elections in the same period.</p> +<p>If he comes, I'll definitely be there!</p>
M contents/articles/pre-review-of-ie7.htmlcontents/articles/pre-review-of-ie7.html

@@ -4,4 +4,106 @@ content-type: article

timestamp: 1132939006 tags: "browsers|microsoft|ie" ----- -Internet Explorer 6.0 was officially released on August 27th 2001, and it still runs on millions of computers across the world: it's probably the browser release which has lasted the longest in the entire history of the Internet! While I'm not sure if this is an "achievement" so much as it is an "imposition", Uncle Bill admitted that his latest baby, Internet Explorer 7, is due soon...<strong>In the Beginning</strong><br />Recently (5 months ago, that is) the aforementioned <em>"Microsoft Chairman and Chief Software Architect Bill Gates announced Internet Explorer 7.0, designed to add new levels of security to Windows XP Service Pack 2"</em>. This happened at the RSA Conference in San Francisco, and although I wasn't there, I can imagine that amongst the oohs and ahhs of the crowd, someone must have whispered "It's about time". <br /><br />Firefox, on the other hand, keeps its fans alive with pseudo-releases every so often, 1.0.4, 1.0.5 and so forth, which at least makes you <em>feel</em> like some progress is going on, be it a security fix or a new feature. Firefox will hopefully release version 1.1 <em>at any time</em> now, with various new <a href="http://www.zzine.org/read.php?op=view&item=1321">features</a> that Microsoft can only dream about. I think that when Bill created Internet Explorer 6, he probably commanded that it should be called "version 6.0" for ever and ever: fixes, service packs, and new features (popup blocking, etc.) have been added, but after 4 years I'm <em>still</em> running "Internet Explorer version 6.0".<br /><br />Version 7.0 is supposedly due soon, and - guess what - not only for Longhorn users (but where's Longhorn anyway?), but also for Windows XP SP2 users, there's great news: beta testing! If you run Windows 2000 it looks like you'll have to keep using IE6 until you get a "more advanced" version of your OS, but<a href="http://www.microsoft.com/windows/IE/ie7/default.mspx">Internet Explorer 7</a> is supposed to be "<em>freely downloadable, as always</em>" this summer. <br /><br />So what's new in IE7?<br /><br /><br /><strong>Discovering (and guessing) further details</strong><br />Although nothing was supposed to be known until the first beta release, according to what seems to be Microsoft's official procedure in these cases, after Bill's announcement, speculations on IE7's new features and improvements (and quirks?) began to spread across the Internet in various forms. <a href="http://blogs.msdn.com/ie/default.aspx">IEBlog</a> seems to be the most authoritative (and biased?) source to get information, simply because the folks there are those who ( supposedly) are planning and developing IE7. <br /><br />When the announcement was made, those guys wrote something like:<br /><fieldset><blockquote><br /><em><br />First, some basics: we?re committing to deliver a new version of Internet Explorer for Windows XP customers. Betas of IE7 will be available this summer. This new release will build on the work we did in Windows XP SP2 and (among other things) go further to defend users from phishing as well as deceptive or malicious software.<br /><br />Why? Because we listened to customers, analysts, and business partners. We heard a clear message: ?Yes, XP SP2 makes the situation better. We want more, sooner. We want security on top of the compatibility and extensibility IE gives us, and we want it on XP. Microsoft, show us your commitment.?<br /></em><br /></blockquote></fieldset><br /><br />That's so sweet! They are doing this for us, and they are listening to us...<br /> <br />Sarcasm aside, it was clear from the beginning that Microsoft wanted to focus more on security: maybe because of the stereotype of IE which has emerged through the years (IE = An easy way for bad people to do bad things to you), maybe because it was time to do it, or maybe because they got bored. The most likely reason, though, is commercial: Firefox's popularity has surged recently, and Microsoft felt an urge to open (Fire)fox-hunting season as soon as possible.<br /><br />Back in March, more details about this new amazing product began to <a href="http://www.microsoft-watch.com/article2/0,1995,1776290,00.asp">leak</a>, inevitably, and here are the new features that IE7 is supposed to have:<br /><ul><br /><li>Tabs</li><br /><li>International domain name </li>(IDN) support<br /><li>Transparent Portable Network Graphics </li>(PNG) support (finally!)<br /><li>Simplified printing from inside IE 7.0</li><br /><li>A built-in news aggregator. </li><br /><li>Somewhat extended support to CSS2 </li>(but not the whole standard)<br /></ul> <br /><br />Wonderful and incredible at the same time: is IE7 trying to emulate Firefox?<br /><br /><em>So, what will this wonder look like?</em> - Someone might wonder... And here are some leaked <a href="http://neowin.net/comments.php?id=29131&category=main">screenshots</a> that could be real enough. Impressive.<br /><br /><br /><strong>New support for old stuff</strong><br />Any Firefox user reading the features list above probably wasn't terribly impressed: everything mentioned there has been supported in Firefox for ages, but personally, I'm truly pleased to see that Microsoft finally decided to try to catch up with more advanced browsers (not just Firefox, but Opera as well) and web developers can relax a bit (maybe).<br /><br />There's a nice post on IEBlog regarding <a href="http://blogs.msdn.com/ie/archive/2005/04/26/412263.aspx">PNG Support</a>, where the guy who made the thing possible, Sam Fortiner, explains what he had to do and why.<br />It's widely known that PNG images currently aren't handled correctly in Internet Explorer: if they are transparent, in particular, they will show a grey-ish background instead of being transparent. I guess that's not a good thing to see, after trying to overlay PNG images, for example. As a result, web developers currently don't use the PNG format, nor its transparency support. With IE7's transparent PNG support, sites which seemed to only display properly in Firefox will appear equally beautiful in the new Internet Explorer. <br /><br />Tony Schreiner, on the same blog, provides a detailed explanation on his work concerning <a href="http://blogs.msdn.com/ie/archive/2005/05/26/422103.aspx">Tab Support</a>: tabs are a new thing for Microsoft, and for long it was feared that they could cause "confusion" among end users accustomed to the tabless policy of IE6 and of the whole Windows interface. Regarding this, I think that people at Redmond should thank firefox a million times for "pioneering" into the unexplored land of Tabbed Browsing: firefox has been using tabs since the very first release, and it was highly acclaimed for this. Eventually then, Microsoft folks released that people are not as stupid as they hoped they'd be, and <em>aren't</em> confused by tabs at all, so they decided to implement them in IE7.<br /><br />Tony gives away some technical details regarding IE7's implementation of tabs, which essentially consists of <em>"pushing a large part of what you see in IE6 into a tab"</em>, and let's hope it works. IE was born and evolved as a single-window browser, so this addition represents quite a challenge to Microsoft's way of thinking about User Interfaces... what's next then? Maybe Tabs in Windows Explorer as well? Maybe...<br /><br />Little is known about the other "new features", apart from CSS2 support, which will be described in the next paragraph. A built-in RSS aggregator? It's now acknowledged that Longhorn will have an extensive <a href="http://msdn.microsoft.com/longhorn/understanding/rss/default.aspx?pull=/library/en-us/dnlong/html/rsssupportinlonghorn.asp">RSS support</a> itself, so this seemed a logical addition to IE7.<br /><br /> <br /><br /><strong>The fear of uncertainty</strong><br />IE support for web standards, in particular CSS, has always been a hot topic for developers. <br /><br /><fieldset><blockquote><em>When we shipped IE 6.0, we finally fully supported CSS 1, and had some pieces of CSS2 implemented as well.</em></blockquote></fieldset><br /><br />That's honest, at least. Microsoft - so far - does not support CSS2, but at least offers full CSS1 support. As a personal note, I'd reword the previous as <em>"Microsoft does not want to fully support web standards because 90% of Internet users use IE, hence, they can make the laws"</em>. Cruel, but basically true: Microsoft does not care about web standards, and IE's lack of support can be used as a way to force developers to create websites which are IE-compatible rather than standards compatible. There's more information <a href="http://www.alttags.org/archives/2004/04/29/33/">here</a>.<br /><br />Words in an official <a href="http://blogs.msdn.com/ie/archive/2005/03/09/391362.aspx">post</a> don't bode well for the future either:<br /><fieldset><blockquote><em><br />Given the strong usage of IE in the corporate space as well as embedded in applications, we have a strong requirement for backwards compatibility with our previous behavior, compliant or not; that requirement does not mean ?don?t touch anything?, it is just a recognition that keeping our engine in sync across strict and quirks modes is challenging when quirks mode has to work nearly exactly the same as it always has. We will continue to improve our compliance under strict mode even when it breaks compatibility, and under quirks mode when it?s not damaging to our backwards compatibility.<br /></em></blockquote></fieldset><br /><br />Basically, this provides an excuse to not fully adopt web standards, which can be seen as legitimate or not, according to your browser preferences, so I'm not going to comment on that...<br /><br />In another article, <a href="http://www.microsoft-watch.com/article2/0,2180,1776935,00.asp">MicrosoftWatch</a>, reports that <em>"One partner said that Microsoft considers CSS2 to be a "flawed" standard and that the company is waiting for a later point release, such as CSS2.1 or CSS3, before throwing its complete support behind it".</em><br />Although this cannot be regarded as a 100% authoritative source, people started <a href="http://dean.edwards.name/weblog/2005/03/the-reason/">speculating</a> that IE7 could potentially become a dictator for other browsers (like its predecessor), because so many people still use the MS browser. It could help Microsoft, as it did in the past, so why shouldn't Bill take advantage of it?<br /> +Internet Explorer 6.0 was officially released on August 27th 2001, and it still runs on millions of computers across the +world: it's probably the browser release which has lasted the longest in the entire history of the Internet! While I'm +not sure if this is an "achievement" so much as it is an "imposition", Uncle Bill admitted that his latest baby, +Internet Explorer 7, is due soon...<strong>In the Beginning</strong><br />Recently (5 months ago, that is) the +aforementioned <em>"Microsoft Chairman and Chief Software Architect Bill Gates announced Internet Explorer 7.0, designed + to add new levels of security to Windows XP Service Pack 2"</em>. This happened at the RSA Conference in San +Francisco, and although I wasn't there, I can imagine that amongst the oohs and ahhs of the crowd, someone must have +whispered "It's about time". <br /><br />Firefox, on the other hand, keeps its fans alive with pseudo-releases every so +often, 1.0.4, 1.0.5 and so forth, which at least makes you <em>feel</em> like some progress is going on, be it a +security fix or a new feature. Firefox will hopefully release version 1.1 <em>at any time</em> now, with various new <a + href="http://www.zzine.org/read.php?op=view&item=1321">features</a> that Microsoft can only dream about. I think +that when Bill created Internet Explorer 6, he probably commanded that it should be called "version 6.0" for ever and +ever: fixes, service packs, and new features (popup blocking, etc.) have been added, but after 4 years I'm +<em>still</em> running "Internet Explorer version 6.0".<br /><br />Version 7.0 is supposedly due soon, and - guess what +- not only for Longhorn users (but where's Longhorn anyway?), but also for Windows XP SP2 users, there's great news: +beta testing! If you run Windows 2000 it looks like you'll have to keep using IE6 until you get a "more advanced" +version of your OS, but<a href="http://www.microsoft.com/windows/IE/ie7/default.mspx">Internet Explorer 7</a> is +supposed to be "<em>freely downloadable, as always</em>" this summer. <br /><br />So what's new in +IE7?<br /><br /><br /><strong>Discovering (and guessing) further details</strong><br />Although nothing was supposed to +be known until the first beta release, according to what seems to be Microsoft's official procedure in these cases, +after Bill's announcement, speculations on IE7's new features and improvements (and quirks?) began to spread across the +Internet in various forms. <a href="http://blogs.msdn.com/ie/default.aspx">IEBlog</a> seems to be the most authoritative +(and biased?) source to get information, simply because the folks there are those who ( supposedly) are planning and +developing IE7. <br /><br />When the announcement was made, those guys wrote something like:<br /> +<fieldset> + <blockquote><br /><em><br />First, some basics: we're committing to deliver a new version of Internet Explorer for + Windows XP customers. Betas of IE7 will be available this summer. This new release will build on the work we + did in Windows XP SP2 and (among other things) go further to defend users from phishing as well as deceptive + or malicious software.<br /><br />Why? Because we listened to customers, analysts, and business partners. We + heard a clear message: ?Yes, XP SP2 makes the situation better. We want more, sooner. We want security on + top of the compatibility and extensibility IE gives us, and we want it on XP. Microsoft, show us your + commitment.?<br /></em><br /></blockquote> +</fieldset><br /><br />That's so sweet! They are doing this for us, and they are listening to us...<br /> <br />Sarcasm +aside, it was clear from the beginning that Microsoft wanted to focus more on security: maybe because of the stereotype +of IE which has emerged through the years (IE = An easy way for bad people to do bad things to you), maybe because it +was time to do it, or maybe because they got bored. The most likely reason, though, is commercial: Firefox's popularity +has surged recently, and Microsoft felt an urge to open (Fire)fox-hunting season as soon as possible.<br /><br />Back in +March, more details about this new amazing product began to <a + href="http://www.microsoft-watch.com/article2/0,1995,1776290,00.asp">leak</a>, inevitably, and here are the new +features that IE7 is supposed to have:<br /> +<ul> + <li>Tabs</li> + <li>International domain name (IDN) support</li> + <li>Transparent Portable Network Graphics (PNG) support (finally!)</li> + <li>Simplified printing from inside IE 7.0</li> + <li>A built-in news aggregator. </li> + <li>Somewhat extended support to CSS2 (but not the whole standard)</li> +</ul> <br /><br />Wonderful and incredible at the same time: is IE7 trying to emulate Firefox?<br /><br /><em>So, what + will this wonder look like?</em> - Someone might wonder... And here are some leaked <a + href="http://neowin.net/comments.php?id=29131&category=main">screenshots</a> that could be real enough. +Impressive.<br /><br /><br /><strong>New support for old stuff</strong><br />Any Firefox user reading the features list +above probably wasn't terribly impressed: everything mentioned there has been supported in Firefox for ages, but +personally, I'm truly pleased to see that Microsoft finally decided to try to catch up with more advanced browsers (not +just Firefox, but Opera as well) and web developers can relax a bit (maybe).<br /><br />There's a nice post on IEBlog +regarding <a href="http://blogs.msdn.com/ie/archive/2005/04/26/412263.aspx">PNG Support</a>, where the guy who made the +thing possible, Sam Fortiner, explains what he had to do and why.<br />It's widely known that PNG images currently +aren't handled correctly in Internet Explorer: if they are transparent, in particular, they will show a grey-ish +background instead of being transparent. I guess that's not a good thing to see, after trying to overlay PNG images, for +example. As a result, web developers currently don't use the PNG format, nor its transparency support. With IE7's +transparent PNG support, sites which seemed to only display properly in Firefox will appear equally beautiful in the new +Internet Explorer. <br /><br />Tony Schreiner, on the same blog, provides a detailed explanation on his work concerning +<a href="http://blogs.msdn.com/ie/archive/2005/05/26/422103.aspx">Tab Support</a>: tabs are a new thing for Microsoft, +and for long it was feared that they could cause "confusion" among end users accustomed to the tabless policy of IE6 and +of the whole Windows interface. Regarding this, I think that people at Redmond should thank firefox a million times for +"pioneering" into the unexplored land of Tabbed Browsing: firefox has been using tabs since the very first release, and +it was highly acclaimed for this. Eventually then, Microsoft folks released that people are not as stupid as they hoped +they'd be, and <em>aren't</em> confused by tabs at all, so they decided to implement them in IE7.<br /><br />Tony gives +away some technical details regarding IE7's implementation of tabs, which essentially consists of <em>"pushing a large + part of what you see in IE6 into a tab"</em>, and let's hope it works. IE was born and evolved as a single-window +browser, so this addition represents quite a challenge to Microsoft's way of thinking about User Interfaces... what's +next then? Maybe Tabs in Windows Explorer as well? Maybe...<br /><br />Little is known about the other "new features", +apart from CSS2 support, which will be described in the next paragraph. A built-in RSS aggregator? It's now acknowledged +that Longhorn will have an extensive <a + href="http://msdn.microsoft.com/longhorn/understanding/rss/default.aspx?pull=/library/en-us/dnlong/html/rsssupportinlonghorn.asp">RSS + support</a> itself, so this seemed a logical addition to IE7.<br /><br /> <br /><br /><strong>The fear of + uncertainty</strong><br />IE support for web standards, in particular CSS, has always been a hot topic for +developers. <br /><br /> +<fieldset> + <blockquote><em>When we shipped IE 6.0, we finally fully supported CSS 1, and had some pieces of CSS2 implemented as + well.</em></blockquote> +</fieldset><br /><br />That's honest, at least. Microsoft - so far - does not support CSS2, but at least offers full +CSS1 support. As a personal note, I'd reword the previous as <em>"Microsoft does not want to fully support web standards + because 90% of Internet users use IE, hence, they can make the laws"</em>. Cruel, but basically true: Microsoft does +not care about web standards, and IE's lack of support can be used as a way to force developers to create websites which +are IE-compatible rather than standards compatible. There's more information <a + href="http://www.alttags.org/archives/2004/04/29/33/">here</a>.<br /><br />Words in an official <a + href="http://blogs.msdn.com/ie/archive/2005/03/09/391362.aspx">post</a> don't bode well for the future either:<br /> +<fieldset> + <blockquote><em><br />Given the strong usage of IE in the corporate space as well as embedded in applications, we + have a strong requirement for backwards compatibility with our previous behavior, compliant or not; that + requirement does not mean ?don?t touch anything?, it is just a recognition that keeping our engine in sync + across strict and quirks modes is challenging when quirks mode has to work nearly exactly the same as it + always has. We will continue to improve our compliance under strict mode even when it breaks compatibility, + and under quirks mode when it?s not damaging to our backwards compatibility.<br /></em></blockquote> +</fieldset><br /><br />Basically, this provides an excuse to not fully adopt web standards, which can be seen as +legitimate or not, according to your browser preferences, so I'm not going to comment on that...<br /><br />In another +article, <a href="http://www.microsoft-watch.com/article2/0,2180,1776935,00.asp">MicrosoftWatch</a>, reports that +<em>"One partner said that Microsoft considers CSS2 to be a "flawed" standard and that the company is waiting for a + later point release, such as CSS2.1 or CSS3, before throwing its complete support behind it".</em><br />Although +this cannot be regarded as a 100% authoritative source, people started <a + href="http://dean.edwards.name/weblog/2005/03/the-reason/">speculating</a> that IE7 could potentially become a +dictator for other browsers (like its predecessor), because so many people still use the MS browser. It could help +Microsoft, as it did in the past, so why shouldn't Bill take advantage of it?<br />
M contents/articles/rails-doc-first-look.htmlcontents/articles/rails-doc-first-look.html

@@ -6,21 +6,21 @@ 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&#8217;s that? Well, +<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&#8217;s always plenty of comments by experienced developers to save + <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&#8217;t find <a href="http://api.rubyonrails.org/">Rails - documentation</a> useful enough simply because it didn&#8217;t have these two simple but very powerful features. + 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&#8217;s the <a href="http://www.railsdocumentation.org/">Rails Documentation Project</a> which provides +<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&#8230; but still is not quite enough: you&#8217;d expect something much better than that for something like + feature&#8230; 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

@@ -29,7 +29,7 @@ <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&#8217;s free of course) and started playing with it&#8230;</p> +<p>When the app went live, I immediately registered (it's free of course) and started playing with it&#8230;</p> <h4>Search as you type&#8230;</h4> <p>The first thing I did was trying the search features, of course. I started typing &#8220;rout&#8221; for Routing, and I was immediately shown a list of matches:</p>

@@ -44,33 +44,33 @@ taste, really.</p>

<h4>&#8230;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&#8217;s more: a little roundy icon precedes each class name, to indicate whether the + 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&#8217;s more needed.</p> -<p>Each reference page is very neatly re-formatted: you can hardly imagine it&#8217;s actually the same content included - in Rails&#8217; RDoc pages!</p> + 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&#8217;t you? Yes. If you register, you can post notes to any document. Simple +<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&#8217;ll notice that a preview of the note is displayed instantly: as you can use +<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&#8217;s no documentation for a particular class or method? You&#8217;ll get a warning like this one: +<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&#8217;ll eventually end up in Rails core +<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&#8217;s the full interview&#8230;</p> + Here's the full interview&#8230;</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 />

@@ -89,21 +89,21 @@ Did I read the word &#8220;Scrum&#8221; 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&#8217;s me!).</p> + 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&#8230;?</h4> -<p>The first release was developed in three <span class="caps">SPRINTS</span>, not months &#8211; so what I&#8217;m +<p>The first release was developed in three <span class="caps">SPRINTS</span>, not months &#8211; 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&#8217;a all about &#8220;Ship, ship, ship!&#8221;.</p> + very agile way, it'a all about &#8220;Ship, ship, ship!&#8221;.</p> <h4>What is <a href="http://www.nodeta.fi">Nodeta</a>, exactly? My Finnish is a bit rusty nowadays&#8230;</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>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&#8217;t be open source, but rather it would optimally be offered as a service, which after all is what<br /> + it won't be open source, but rather it would optimally be offered as a service, which after all is what<br /> the word &#8220;app&#8221; 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>

@@ -111,7 +111,7 @@ <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&#8217;re hoping people will contribute with notes, which will then be +<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

@@ -120,23 +120,23 @@ <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&#8217;t want to fail: sounds a good plan! How is Rails-Docs +<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&#8217;s seal of approval? Will you? Is there any copyright issue with your domain name?</h4> +<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> <h4>What about doing something similar for the whole Ruby language? Ruby docs may also be easier, in a way&#8230;</h4> -<p>It is possible that we might do just that but right now it&#8217;s all about Rails.</p> +<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&#8217;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&#8217;t they?</p> + 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&#8217;ll be watching this project closely and I&#8217;ll pay particular attention on what happens to the - community&#8217;s contributions: will it really be useful? Will it really help creating documentation patches to +<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>
M contents/articles/rails-inspired-php-frameworks.htmlcontents/articles/rails-inspired-php-frameworks.html

@@ -17,8 +17,8 @@ <span class="caps">PHP</span> and any <span class="caps">PHP</span> framework. If you are looking for a decent

web framework, try <a href="http://www.rubyonrails.org">Ruby on Rails</a> (for Ruby), <a href="http://www.djangoproject.com/">Django</a> (for Python) or <a href="http://catalyst.perl.org/">Catalyst</a> (for Perl).<br /> - I&#8217;m talking about those <span class="caps">PHP</span> frameworks who give at least part of their success - to Ruby on Rails<sup class="footnote" id="fnr2"><a href="#fn2">2</a></sup>, but don&#8217;t call them + I'm talking about those <span class="caps">PHP</span> frameworks who give at least part of their success + 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>

@@ -26,24 +26,24 @@ <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 - with the traditional <span class="caps">PHP</span> spaghetti code: you can&#8217;t, it&#8217;s too much, it will be - too tangled up and in the end you&#8217;ll lose your mind trying to find that <em>small insignificant bug</em> which + with the traditional <span class="caps">PHP</span> spaghetti code: you can't, it's too much, it will be + too tangled up and in the end you'll lose your mind trying to find that <em>small insignificant bug</em> which makes your web application completely useless.</p> -<p>Yes, you could use Rails, but maybe you don&#8217;t know or don&#8217;t want to learn Ruby, your host doesn&#8217;t - support it, your boss loves <span class="caps">PHP</span> etc. etc. If you&#8217;re in this situation or you simply - would like to know what&#8217;s going on at the <span class="caps">PHP</span> front of the Rails Clone War, you +<p>Yes, you could use Rails, but maybe you don't know or don't want to learn Ruby, your host doesn't + support it, your boss loves <span class="caps">PHP</span> etc. etc. If you're in this situation or you simply + would like to know what's going on at the <span class="caps">PHP</span> front of the Rails Clone War, you should keep reading this article.</p> -<p>I&#8217;d like to introduce &#8211; briefly &#8211; six Rails-inspired <span class="caps">PHP</span> frameworks and +<p>I'd like to introduce &#8211; briefly &#8211; six Rails-inspired <span class="caps">PHP</span> frameworks and compare them with each other, to point out their features, their pros and cons.</p> <blockquote> - <p><em><strong>Disclaimer:</strong> I&#8217;m a CakePHP<sup class="footnote" id="fnr3"><a href="#fn3">3</a></sup> + <p><em><strong>Disclaimer:</strong> I'm a CakePHP<sup class="footnote" id="fnr3"><a href="#fn3">3</a></sup> fan, this site has been built with CakePHP and I even wrote something<sup class="footnote" id="fnr4"><a href="#fn4">4</a></sup> about it in the past. This makes me inevitably partial and more familiar - with this particular framework, but I&#8217;ll try my very best to provide a relatively objective analysis. + with this particular framework, but I'll try my very best to provide a relatively objective analysis. Obviously frameworks which are not based on the <span class="caps">MVC</span> architechture and that - weren&#8217;t inspired by Ruby on Rails have not been included, so forget things like <span - class="caps">PRADO</span>, Qcodo, eZComponents, or even Mojavi: it&#8217;s not that they are - &#8220;bad&#8221;, they&#8217;ve just been left out because they are not pertinent to this article</em></p> + weren't inspired by Ruby on Rails have not been included, so forget things like <span + class="caps">PRADO</span>, Qcodo, eZComponents, or even Mojavi: it's not that they are + &#8220;bad&#8221;, 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="/images/pictures/CakePHP_1.0.png" alt="" /></p>

@@ -54,7 +54,7 @@ href="#fn5">5</a></sup><br />

<strong>Download size (.tar.gz):</strong> 184KB<br /> <strong>Supported Databases:</strong> MySQL, PostgreSQL, SQlite, MS <span class="caps">SQL</span> + any other supported by ADOdb or <span class="caps">PEAR</span>::DB database abstraction layers<br /> - <strong>Beginner&#8217;s Tutorial</strong>: <a href="http://wiki.cakephp.org/tutorials:blog_tutorial_-_1">Blog + <strong>Beginner's Tutorial</strong>: <a href="http://wiki.cakephp.org/tutorials:blog_tutorial_-_1">Blog Tutorial</a> </p> <p><strong>Official Description:</strong><br />

@@ -86,12 +86,12 @@ <li>Official documentation still needs some some improvement, although now it seems pretty complete and exhaustive.

</li> </ul> <p><strong>Comments:</strong><br /> - CakePHP is my personal favorite: easy to learn, easy to use,multi-purpose and not bloated. Cake&#8217;s philosophy - is not to include unnecessary code in the framework unless it&#8217;s absolutely necessary for the framework itself, + CakePHP is my personal favorite: easy to learn, easy to use,multi-purpose and not bloated. Cake's philosophy + is not to include unnecessary code in the framework unless it's absolutely necessary for the framework itself, as a result, 3rd-party libraries are not included in the official releases, but may be seamlessly integrated with the framework <em>if developers need them</em>. <br /> - Cake&#8217;s success is partly determined &#8211; at least initially &#8211; by the fact that it can run fine with - no limitations on PHP4, while other similar frameworks don&#8217;t. Although this may still be one of its most + Cake's success is partly determined &#8211; at least initially &#8211; by the fact that it can run fine with + no limitations on PHP4, while other similar frameworks don't. Although this may still be one of its most obvious strengths, it must be said that Cake seems to go in the right direction, taking only the best from Rails, 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>.

@@ -104,8 +104,8 @@ <strong>License:</strong> Symfony<sup class="footnote" id="fnr6"><a href="#fn6">6</a></sup><br />

<strong>Download size (.tgz):</strong> 1255KB<br /> <strong>Supported Databases:</strong> MySQL, PostgreSQL, SQLite, Oracle, MS <span class="caps">SQL</span> + any other supported by Creole database abstraction layer<br /> - <strong>Beginner&#8217;s Tutorial</strong>: <a - href="http://www.symfony-project.com/tutorial/my_first_project.html">My first project</a> + <strong>Beginner's Tutorial</strong>: <a href="http://www.symfony-project.com/tutorial/my_first_project.html">My + first project</a> </p> <p><strong>Official Description:</strong><br /> <em>&#8220;Based on the best practices of web development, thoroughly tried on several active websites, symfony aims

@@ -136,7 +136,7 @@ <li>Uses too many configuration files, not suitable for <em>simple</em> projects</li>

<li>Steep learning curve</li> </ul> <p><strong>Comments:</strong><br /> - Symfony is really an interesting framework: it&#8217;s perhaps the most <em>complete</em> in terms for features and + Symfony is really an interesting framework: it's perhaps the most <em>complete</em> in terms for features and documentation. The only problem I have with it is that it just seems too complex and rather difficult to learn if compared to the others, which can do <em>almost</em> the same things (or will soon be able to) in a <em><span class="caps">MUCH</span></em> simpler way. A nice blend of <span class="caps">MVC</span>, pre-built

@@ -150,7 +150,7 @@ <strong><span class="caps">PHP</span> version:</strong> PHP5<br />

<strong>License:</strong> <span class="caps">MIT</span><br /> <strong>Download size (.tgz):</strong> 843KB<br /> <strong>Supported Databases:</strong> Any database supported by <span class="caps">PEAR</span>::DB<br /> - <strong>Beginner&#8217;s Tutorial</strong>: <a href="http://svn.phpontrax.com/wiki/HowToCreateATraxApplication">How + <strong>Beginner's Tutorial</strong>: <a href="http://svn.phpontrax.com/wiki/HowToCreateATraxApplication">How to create a Trax application</a> </p> <p><strong>Official Description:</strong><br />

@@ -194,7 +194,7 @@ <strong>License:</strong> CodeIgniter<sup class="footnote" id="fnr8"><a href="#fn8">8</a></sup><br />

<strong>Download size (.zip):</strong> 609KB<br /> <strong>Supported Databases:</strong> MySQL, PostgreSQL, SQLite, MySQLi, MS <span class="caps">SQL</span> + <span class="caps">ODBC</span><br /> - <strong>Beginner&#8217;s Tutorial</strong>: <a href="http://www.codeigniter.com/videos/ci_intro.mov">Hello World! + <strong>Beginner's Tutorial</strong>: <a href="http://www.codeigniter.com/videos/ci_intro.mov">Hello World! Introduction to Code Igniter</a> [video] </p> <p><strong>Official Description:</strong><br />

@@ -203,8 +203,8 @@ class="caps">PHP</span> programs simple as apple pie. [&#8230;] Designed to enable, not overwhelm, Code

Igniter is a powerful <span class="caps">PHP</span> framework with a very small footprint, built for <span class="caps">PHP</span> coders who need a simple and elegant toolkit to create full-featured web applications.</em><br /> - <em>If you&#8217;re a developer who lives in the real world of shared hosting accounts and clients with deadlines, - and if you&#8217;re tired of ponderously large and thoroughly undocumented frameworks that require rocket + <em>If you're a developer who lives in the real world of shared hosting accounts and clients with deadlines, + and if you're tired of ponderously large and thoroughly undocumented frameworks that require rocket science to understand, Code Igniter might just be the right tool for you.&quot;</em> </p> <p><strong>PROs:</strong></p>

@@ -224,9 +224,9 @@ <li>Relatively new to the scene, but growing</li>

<li>Does not seem to support table associations.</li> </ul> <p><strong>Comments:</strong><br /> - People on the Net seem to be rather enthusiastic about this framework: where there&#8217;s a thread about the - <em>big ones</em> (Cake and Symfony), there&#8217;s always, someone who pops in suggesting to try out Code Igniter. - I personally think this can be a true bless for small/medium sized projects, however, I&#8217;d opt for CakePHP or + People on the Net seem to be rather enthusiastic about this framework: where there's a thread about the + <em>big ones</em> (Cake and Symfony), there's always, someone who pops in suggesting to try out Code Igniter. + 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>

@@ -237,7 +237,7 @@ <strong>License:</strong> <span class="caps">MIT</span><sup class="footnote" id="fnr5"><a href="#fn5">5</a></sup>

<br /> <strong>Download size (.zip):</strong> 240KB<br /> <strong>Supported Databases:</strong> Any database supported by <span class="caps">PEAR</span>::DB<br /> - <strong>Beginner&#8217;s Tutorial</strong>: <a href="http://bennolan.com/biscuit/tutorial.html">Creating a simple + <strong>Beginner's Tutorial</strong>: <a href="http://bennolan.com/biscuit/tutorial.html">Creating a simple application using the Biscuit <span class="caps">MVC</span> framework</a> </p> <p><strong>Official Description:</strong><br />

@@ -258,8 +258,8 @@ <li><em>&#8220;Documentation coming soon&#8221;</em></li>

<li>Almost non-existent community</li> </ul> <p><strong>Comments:</strong><br /> - This project started as an attempt to create something simpler than CakePHP and more similar to Rails. I&#8217;m not - sure whether the project is still active or not, since the last &#8220;release&#8221; on the former&#8217;s + 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 &#8220;release&#8221; on the former's developer site is dated August 2005. Still in early stage &#8211; or dead.</p> <h3>Pipeline</h3> <p style="float:right;"><img src="/images/pictures/livepipe.jpg" alt="" /></p>

@@ -268,7 +268,7 @@ <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 /> <strong>Download size (.zip):</strong> 288KB<br /> <strong>Supported Databases:</strong> SQLite<br /> - <strong>Beginner&#8217;s Tutorial</strong>: none + <strong>Beginner's Tutorial</strong>: none </p> <p><strong>PROs:</strong></p> <ul>

@@ -290,21 +290,21 @@ <p><strong>Comments:</strong><br />

This project mainly borrowed the <span class="caps">MVC</span> architecture and some basic concepts from Rails, creating a simple PHP5 framework with personal/small websites in mind: it offers various built-in components which can be handy to most of us, supports <em>only</em> SQLite, and basically tells developers what to do. In my opinion - it&#8217;s not flexible enough to be compared to the others, and it&#8217;s simply not suitable for anything other + it's not flexible enough to be compared to the others, and it's simply not suitable for anything other than small websites.</p> <h3>Conclusions</h3> -<p>My favorite framework still remains CakePHP, it&#8217;s simple and yet powerful, easy to learn and use, mature, well +<p>My favorite framework still remains CakePHP, it's simple and yet powerful, easy to learn and use, mature, well supported and continuously improving. Symfony &#8211; at the moment &#8211; seems to be the one with most features and the best documentation, and it is an excellent and well supported project. The only problem I have with it is - the scary amount of configuration files necessary to create an application: CakePHP doesn&#8217;t need any and can + the scary amount of configuration files necessary to create an application: CakePHP doesn't need any and can be used for (almost?) equally complex projects.<br /> - Although I didn&#8217;t have a chance to try them out, <span class="caps">PHP</span> on Trax is certainly the most + Although I didn't have a chance to try them out, <span class="caps">PHP</span> on Trax is certainly the most faithful port of Ruby on Rails to <span class="caps">PHP</span>, but it lacks some of the features CakePHP and Symfony offer. Code Igniter may not be as advanced as the others, but its community seems to grow and its simplicity may appeal more users in the future&#8230;</p> <p>At any rate, developers should <em>always</em> choose the best framework for their needs: I tried to write a quick - comparative analysis of these six Rails&#8217; &#8220;<span class="caps">PHP</span> children&#8221;, now it&#8217;s - <em>your</em> turn, try out some of them, if you choose wisely you won&#8217;t be disappointed. + comparative analysis of these six Rails' &#8220;<span class="caps">PHP</span> children&#8221;, now it's + <em>your</em> turn, try out some of them, if you choose wisely you won't be disappointed. </p> <h3>Notes</h3> <p class="footnote" id="fn1"><a href="#fnr1"><sup>1</sup></a> They are all distributed according to various Open Source

@@ -314,7 +314,7 @@ &#8211; Ruby framework for web development</p>

<p class="footnote" id="fn3"><a href="#fnr3"><sup>3</sup></a> <a href="http://www.cakephp.org">CakePHP</a> &#8211; Rapid [<span class="caps">PHP</span>] Development Framework</p> <p class="footnote" id="fn4"><a href="#fnr4"><sup>4</sup></a> <a href="/articles/cakephp">CakePHP &#8211; A - &#8216;tasty&#8217; solution for <span class="caps">PHP</span> programming</a>, originally published on <a + &#8216;tasty' solution for <span class="caps">PHP</span> programming</a>, originally published on <a href="http://www.zzine.org/articles/cakephp">zZine Magazine</a></p> <p class="footnote" id="fn5"><a href="#fnr5"><sup>5</sup></a> Open Source <a href="http://www.opensource.org/licenses/mit-license.php"><span class="caps">MIT</span> License</a>.</p>
M contents/articles/rails-os-killer-apps.htmlcontents/articles/rails-os-killer-apps.html

@@ -4,18 +4,27 @@ content-type: article

timestamp: 1225618860 tags: "rails|ruby|writing|rant" ----- -<p>Lately I&#8217;ve been meandering around the web to find a good <span class="caps">CMS</span> for a family site I&#8217;d like to set up. <br /> -Why a <span class="caps">CMS</span>? Well, for a few simple reasons:</p> +<p>Lately I've been meandering around the web to find a good <span class="caps">CMS</span> for a family site I'd like to + set up. <br /> + Why a <span class="caps">CMS</span>? Well, for a few simple reasons:</p> <ol> - <li>I don&#8217;t have enough free time to fiddle with Rails and make my own (I&#8217;m an <em>Hobbyist Programmer&#8482;</em>: I code for fun and enlightment, not for money)</li> - <li>Even if I had the time, I&#8217;m <em>sure</em> there are plenty of CMSes out there which suits my needs.</li> + <li>I don't have enough free time to fiddle with Rails and make my own (I'm an <em>Hobbyist Programmer&#8482;</em>: + I code for fun and enlightment, not for money)</li> + <li>Even if I had the time, I'm <em>sure</em> there are plenty of CMSes out there which suits my needs.</li> </ol> -<p>It turns out that reason #2 is not really applicable in this case, especially if we restrict the field to Ruby + Rails/Merb/&lt;insert cool <span class="caps">DRY</span> framework here&gt;.h3. Rails-powered CMSes</p> +<p>It turns out that reason #2 is not really applicable in this case, especially if we restrict the field to Ruby + + Rails/Merb/&lt;insert cool <span class="caps">DRY</span> framework here&gt;.h3. Rails-powered CMSes</p> <p><em>Name a Rails-powered <span class="caps">CMS</span>, quick!</em></p> <p>Easy: <a href="http://radiantcms.org/">Radiant</a>.</p> -<p>Hmm, no. As much as I do like Radiant, it really cannot be considered a general-purpose <span class="caps">CMS</span>, can it? When it comes to build nearly-static sites in a clean and neat way I&#8217;d pick it any day, but it lacks quite a lot of community features like comments, ability to create forums, etc. etc. It does, however, support multilingual content in a rudimentary, yet effective way: create each translated page manually and use consistent <span class="caps">URL</span> conventions (/en/about, /it/about, etc.).</p> -<p>I&#8217;m not saying that there aren&#8217;t enough CMSes built on Rails, just that there&#8217;s no &#8220;killer app&#8221; in the pack. A &#8220;killer&#8221; <span class="caps">CMS</span> would be something as powerful as Drupal, but easier to use and more modular.</p> -<p>Here&#8217;s an incomplete list of the Rails CMSes I&#8217;m currently aware of:</p> +<p>Hmm, no. As much as I do like Radiant, it really cannot be considered a general-purpose <span + class="caps">CMS</span>, can it? When it comes to build nearly-static sites in a clean and neat way I'd pick it + any day, but it lacks quite a lot of community features like comments, ability to create forums, etc. etc. It does, + however, support multilingual content in a rudimentary, yet effective way: create each translated page manually and + use consistent <span class="caps">URL</span> conventions (/en/about, /it/about, etc.).</p> +<p>I'm not saying that there aren't enough CMSes built on Rails, just that there's no &#8220;killer app&#8221; in the + pack. A &#8220;killer&#8221; <span class="caps">CMS</span> would be something as powerful as Drupal, but easier to + use and more modular.</p> +<p>Here's an incomplete list of the Rails CMSes I'm currently aware of:</p> <table> <tr> <th>Name </th>

@@ -47,11 +56,11 @@ <td> Forum engine, extremely ligtweight </td>

</tr> <tr> <td> <a href="http://www.railfrog.com/">RailFrog</a> </td> - <td> Not sure if it&#8217;s still being updated, not so many features </td> + <td> Not sure if it's still being updated, not so many features </td> </tr> <tr> <td> <a href="http://zenadmin.org/en">Zena</a> </td> - <td> Alpha, looks promising although it doesn&#8217;t offer many features </td> + <td> Alpha, looks promising although it doesn't offer many features </td> </tr> <tr> <td> <a href="http://simplelog.net/">simplelog</a> </td>

@@ -65,33 +74,74 @@ <tr>

<td> <a href="http://www.geegocms.com/">Geego</a> </td> <td> Multilingual, not so many out-of-the-box features </td> </table> -<p><em>[Psst, if you know any other Rails <span class="caps">CMS</span> I missed out, mention it in a comment and I&#8217;ll update this table!]</em></p> +<p><em>[Psst, if you know any other Rails <span class="caps">CMS</span> I missed out, mention it in a comment and I'll + update this table!]</em></p> <h3>Developing Proprietary Web Applications with Rails</h3> -<p>What&#8217;s wrong with all of these? Normally one of three things: either they are mature, production-ready but focused on only one particular function (blog, forum, etc.), or they are still too new to be used seriously or they are slowly heading towards oblivion.</p> -<p>What&#8217;s going on here? Rails is a damn fine framework which offers all the modularity and power you need to build sites! Why isn&#8217;t there a fully fledged <span class="caps">CMS</span> to rival Drupal? <br /> -I think that part of the problem is that Rails is <em>too</em> good. <strong>Why build a <span class="caps">CMS</span> from scratch when you can develop a web site from scratch much more easily, tailored to your customer?</strong></p> -<p>Rails has been used to build a few &#8220;mainstream&#8221; sites like Twitter (no bashing please!), Basecamp, GitHub and many more. What do these sites have in common? <em>They are not open source</em>. You cannot deploy your own Twitter on your server (You can with <a href="http://laconi.ca/trac/">Laconica</a>, though), you cannot deploy your own Basecamp to your server (you can with <a href="http://www.projectpier.org/">ProjectPier</a>, an open source fork of <a href="http://www.activecollab.com/">ActiveCollab</a>).</p> -<p>It feels like that even though Rails itself is open source, <strong>there aren&#8217;t that many open source Rails-powered projects after all</strong>. Maybe there are, but they do not really compare with similar alternatives offered in other languages. This is the reason why, despite its utter ugliness, <span class="caps">PHP</span> is still the <em>Open Source King of the Web</em>, and that&#8217;s very, very sad in my opinion.</p> +<p>What's wrong with all of these? Normally one of three things: either they are mature, production-ready but focused on + only one particular function (blog, forum, etc.), or they are still too new to be used seriously or they are slowly + heading towards oblivion.</p> +<p>What's going on here? Rails is a damn fine framework which offers all the modularity and power you need to build + sites! Why isn't there a fully fledged <span class="caps">CMS</span> to rival Drupal? <br /> + I think that part of the problem is that Rails is <em>too</em> good. <strong>Why build a <span + class="caps">CMS</span> from scratch when you can develop a web site from scratch much more easily, tailored + to your customer?</strong></p> +<p>Rails has been used to build a few &#8220;mainstream&#8221; sites like Twitter (no bashing please!), Basecamp, GitHub + and many more. What do these sites have in common? <em>They are not open source</em>. You cannot deploy your own + Twitter on your server (You can with <a href="http://laconi.ca/trac/">Laconica</a>, though), you cannot deploy your + own Basecamp to your server (you can with <a href="http://www.projectpier.org/">ProjectPier</a>, an open source fork + of <a href="http://www.activecollab.com/">ActiveCollab</a>).</p> +<p>It feels like that even though Rails itself is open source, <strong>there aren't that many open source Rails-powered + projects after all</strong>. Maybe there are, but they do not really compare with similar alternatives offered + in other languages. This is the reason why, despite its utter ugliness, <span class="caps">PHP</span> is still the + <em>Open Source King of the Web</em>, and that's very, very sad in my opinion.</p> <h3>Dreams on Rails</h3> -<p>The annoying thing is that Rails <em>is suitable</em> to build CMSes, and good ones, too! Take Radiant and Typo, for example: they both excel in their own ways, <em>in their own worlds</em>.<br /> -Theorethically speaking, <strong>there&#8217;s no reason why someone couldn&#8217;t develop a modular system to glue different components together</strong>: you&#8217;d need common user administration and common workflow, a few hooks, and a solid set of conventions on how to build third-party components.<br /> -Hell guys, the folks at Drupal developed a huge (and successful) product with a million different ways to extend it <em>in <span class="caps">PHP</span></em>. Even without using <span class="caps">OOP</span>! Every damn hook in the core is a <em>function</em>.</p> -<p>What does it take to do something like this using Rails, o Merb, or whatever else you like? You already have a very solid and consistent framework to build on (Rails), a way to automate tasks (Rake) and a language which lets you do everything you want, in a very elegant and organized way.</p> -<p><strong>Rails lacks successful open source projects, in particular CMSes</strong>. I wish someone could fix this: not by coding the <em>n^th^</em> <span class="caps">CMS</span> with the only two or three features you need, but by developing an <em>high level application framework</em> to build complex, dynamic and interactive web sites. Don&#8217;t even develop the whole damn thing: just come up with a set of conventions on how to extend a very basic core, and tell people how they can contribute, or even integrate existing applications into it.</p> -<p>The community will do the rest, hopefully&#8230; Or maybe are you too busy trying to roll out your newest, closed source startup?</p> -<p><strong>If someone decides to develop such a powerful, high-level framework and is determined to keep it user-friendly and open source, I hereby promise to write the documentation for it</strong>, articles, and books. And I&#8217;m not kidding.</p> +<p>The annoying thing is that Rails <em>is suitable</em> to build CMSes, and good ones, too! Take Radiant and Typo, for + example: they both excel in their own ways, <em>in their own worlds</em>.<br /> + Theorethically speaking, <strong>there's no reason why someone couldn't develop a modular system to glue different + components together</strong>: you'd need common user administration and common workflow, a few hooks, and a + solid set of conventions on how to build third-party components.<br /> + Hell guys, the folks at Drupal developed a huge (and successful) product with a million different ways to extend it + <em>in <span class="caps">PHP</span></em>. Even without using <span class="caps">OOP</span>! Every damn hook in the + core is a <em>function</em>.</p> +<p>What does it take to do something like this using Rails, o Merb, or whatever else you like? You already have a very + solid and consistent framework to build on (Rails), a way to automate tasks (Rake) and a language which lets you do + everything you want, in a very elegant and organized way.</p> +<p><strong>Rails lacks successful open source projects, in particular CMSes</strong>. I wish someone could fix this: not + by coding the <em>n^th^</em> <span class="caps">CMS</span> with the only two or three features you need, but by + developing an <em>high level application framework</em> to build complex, dynamic and interactive web sites. Don't + even develop the whole damn thing: just come up with a set of conventions on how to extend a very basic core, and + tell people how they can contribute, or even integrate existing applications into it.</p> +<p>The community will do the rest, hopefully&#8230; Or maybe are you too busy trying to roll out your newest, closed + source startup?</p> +<p><strong>If someone decides to develop such a powerful, high-level framework and is determined to keep it + user-friendly and open source, I hereby promise to write the documentation for it</strong>, articles, and books. + And I'm not kidding.</p> <h3>[<span class="caps">UPDATED</span>] A Glimpse of Hope</h3> -<p>A few of the commenters of this article brought up a few interesting points and actually gave me a little bit of hope. <a href="http://salesforceonrails.com/">Luigi Montanez</a> pointed out that Rails was built to help developers build web sites. For now, Rails deployment isn&#8217;t as seamless as end users would like it, so there&#8217;s no point creating a killer app for such users if they can&#8217;t even get it to run on their $2/month shared hosting environment.<br /> -Nevertheless, there seems to be at least <em>three</em> different open source &#8220;social network engines&#8221; powered by Rails:</p> +<p>A few of the commenters of this article brought up a few interesting points and actually gave me a little bit of + hope. <a href="http://salesforceonrails.com/">Luigi Montanez</a> pointed out that Rails was built to help developers + build web sites. For now, Rails deployment isn't as seamless as end users would like it, so there's no point + creating a killer app for such users if they can't even get it to run on their $2/month shared hosting + environment.<br /> + Nevertheless, there seems to be at least <em>three</em> different open source &#8220;social network engines&#8221; + powered by Rails:</p> <ul> <li><a href="http://portal.insoshi.com/">Insoshi</a></li> <li><a href="http://www.communityengine.org/">Community Engine</a></li> <li><a href="http://lovdbyless.com/">Lovd By Less</a></li> </ul> -<p>These are not CMSes <em>in the early 2000&#8217;s sense</em>, obviously, but they do provide the basis to effectively build a late Web 2.0-ish community web site. Each one of these project seems stable and mature enough to be used in production, but surely not as well-known as many other <span class="caps">PHP</span>-based solutions.</p> -<p>On the other hand, <a href="http://priit.mx.ee/">Priit Tamboom</a> mentioned <a href="http://adva-cms.org/">adva cms</a>, a project still in alpha stage which aims to be more traditional and site-agnostic:</p> +<p>These are not CMSes <em>in the early 2000's sense</em>, obviously, but they do provide the basis to effectively build + a late Web 2.0-ish community web site. Each one of these project seems stable and mature enough to be used in + production, but surely not as well-known as many other <span class="caps">PHP</span>-based solutions.</p> +<p>On the other hand, <a href="http://priit.mx.ee/">Priit Tamboom</a> mentioned <a href="http://adva-cms.org/">adva + cms</a>, a project still in alpha stage which aims to be more traditional and site-agnostic:</p> <blockquote> -<p>&#8220;[&#8230;] Different from other Rails applications the all-engines approach of adva cms allows you to build your own applications on top of it. It also makes it very flexible and extensible: our plan is to make it possible to only pick those engines/features that you really need for your application and omit the rest. As they are still all designed to work together seemlessly and reuse each others functionality the whole plattform feels much more consistent to a collection of similar but separate Rails applications. [&#8230;]&#8221;</p> + <p>&#8220;[&#8230;] Different from other Rails applications the all-engines approach of adva cms allows you to build + your own applications on top of it. It also makes it very flexible and extensible: our plan is to make it + possible to only pick those engines/features that you really need for your application and omit the rest. As + they are still all designed to work together seemlessly and reuse each others functionality the whole plattform + feels much more consistent to a collection of similar but separate Rails applications. [&#8230;]&#8221;</p> </blockquote> -<p>This sounds <em>exactly</em> like what I was hoping would come out from the Rails community: something in between a web development framework and an high-level <span class="caps">CMS</span>. <br /> -I&#8217;m definitely going to try it out (it&#8217;s an ideal weekend project) and I&#8217;ll report back once I know more about it.</p> +<p>This sounds <em>exactly</em> like what I was hoping would come out from the Rails community: something in between a + web development framework and an high-level <span class="caps">CMS</span>. <br /> + I'm definitely going to try it out (it's an ideal weekend project) and I'll report back once I know more about it. +</p>
M contents/articles/rails-to-italy.htmlcontents/articles/rails-to-italy.html

@@ -4,8 +4,12 @@ content-type: article

timestamp: 1183806900 tags: "rails|italy" ----- -<p>So it looks like there will be a &#8220;Rails conference in Italy&#8221;, after all. In Pisa as well, and that&#8217;s maybe even less than 2 hours drive from where I live (Genoa)!</p> +<p>So it looks like there will be a &#8220;Rails conference in Italy&#8221;, after all. In Pisa as well, and that's + maybe even less than 2 hours drive from where I live (Genoa)!</p> <p><em>Sounds cool!</em></p> -<p>Well, the entrance fee put me off a bit, I daresay (€89 if you book before August 1st, more otherwise), but it would be great to go there.<br /> -They are actually looking for speakers too, pity that at the moment I don&#8217;t have anything prepared, but who knows&#8230; There&#8217;s free entrance (and beer) for speakers, apparently, which it wouldn&#8217;t be bad, but unfortunately my girlfriend would have to pay though, of course.</p> -<p>We&#8217;ll see what happens, for now I&#8217;m just going to promote the thing on my site (see the banner on the side).</p> +<p>Well, the entrance fee put me off a bit, I daresay (€89 if you book before August 1st, more otherwise), but it would + be great to go there.<br /> + They are actually looking for speakers too, pity that at the moment I don't have anything prepared, but who + knows&#8230; There's free entrance (and beer) for speakers, apparently, which it wouldn't be bad, but unfortunately + my girlfriend would have to pay though, of course.</p> +<p>We'll see what happens, for now I'm just going to promote the thing on my site (see the banner on the side).</p>
M contents/articles/randal-schwartz.htmlcontents/articles/randal-schwartz.html

@@ -10,25 +10,26 @@ -----

<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&#8217; show is by far my + 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> + <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&#8217;s back in Genoa on one of his Agile/Lean gigs. He said he didn&#8217;t know much about Perl, but - he&#8217;d have liked to come as well. So there I was lining up a dinner out with two IT gurus at the same time. + 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&#8217;t know much about + 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&#8217;s always a - chance that they are not nice at all, but luckily this wasn&#8217;t the case: within minutes Randal was telling + 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>

@@ -55,15 +56,16 @@ <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>&#8220;writing books doesn&#8217;t pay&#8221;</q>). His day job + <a href="http://www.stonehenge.com/merlyn/columns.html">column writer</a>. + </p> + <p>Randal is not a full-time writer though (<q>&#8220;writing books doesn't pay&#8221;</q>). His day job consists in being a &#8220;guru on-demand&#8221;: 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&#8217;t do it for - the money of course, but for passion: <q>&#8220;I&#8217;m trying my best to do one show per week, even when + 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>&#8220;I'm trying my best to do one show per week, even when I am away&#8221;</q>, he said, and he does go off traveling around the world a lot!</p> <p><q>&#8220;Once I was at home for 8 weeks and it felt really strange. I kept thinking I had to pack to go - somewhere else&#8221;</q>. He&#8217;s been on nearly every Geek/Insight Cruises (51, if I remember + somewhere else&#8221;</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

@@ -76,7 +78,7 @@ <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&#8217;s easy to make people realize that Free, Libre, Open Source Software + 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

@@ -87,35 +89,36 @@ <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>&#8220;why are people concerned about paying for support for open - source software? Don&#8217;t they pay it already for proprietary applications?&#8221;</q>, also + source software? Don't they pay it already for proprietary applications?&#8221;</q>, also <q>&#8220;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&#8221;</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> + 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&#8217;t seem to get the whole idea + 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&#8217;s about the people and + <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>&#8220;You should [re-]listen to one of my very first podcasts, the one with &#8221;http://www.webmink.net/&#8220;&gt;Simon Phipps</a>, the former Chief Open Source Officer at - Sun&#8221;</q>, Randal told me in the end, and he&#8217;s right: <a href="http://twit.tv/floss39"><span + Sun&#8221;</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>&#8220;OS X&#8221;</q>, admitted Randal, <q>&#8220;I use what gets the job done&#8221;</q>. In all things, - there&#8217;s no point in being an extremist for the sake of argument, and being an open source advocate + 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 &#8212;but he wasn&#8217;t).</p> + would have thrown up his pizza, had he been there &#8212;but he wasn't).</p> <p><q>&#8220;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. [&#8230;]Ubuntu is getting there, but not quite yet.&#8221;</q></p> - <p>Randal also pointed out the importance of contributing to open source projects: <q>&#8220;you don&#8217;t + <p>Randal also pointed out the importance of contributing to open source projects: <q>&#8220;you don't have to code, you can just provide feedback, submit bug reports, write documentation, or test&#8230; I am the one who checks if git builds on a Mac, for example&#8221;</q>.</p>

@@ -126,7 +129,7 @@ <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&#8217;t know much about Perl, and + 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&#8212;although I am slightly favorable towards Ruby&#8212;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

@@ -136,7 +139,7 @@ altogether). <br />

<q>&#8220;We [Perl programmers] say that Ruby is an alpha version of Perl 6&#8221;</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&#8217;s going to write a book about it. + 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.

@@ -146,29 +149,29 @@ itself&#8230;&#8221;</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>&#8220;It&#8217;s only a matter of getting used to it&#8221;</q>, said Randal + Smalltalk is far from dead. <q>&#8220;It's only a matter of getting used to it&#8221;</q>, said Randal when I asked him how to work with a Smalltalk image and how to distribute it, <q>&#8220;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&#8217;t get in most other languages, is the ability to inspect and work with the + 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&#8221;</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>&#8220;I have tried <em>ten</em> times to learn it myself, with no luck&#8221;</q>, he said. - At least I&#8217;m not alone!</p> + 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>&#8220;That&#8217;s fine. You <span + am a Vim guy. Randal looked at me smiling, and said: <q>&#8220;That's fine. You <span class="caps">WILL</span> join us. Sooner or later you will join us&#8230; join us&#8230;&#8221;</q>. </p> - <p>Randal&#8217;s involvement in Emacs dates way back to the end of the 80s, and he has been using it ever + <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>&#8220;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&#8217;m there as well&#8221;</q>, + could include my code in Emacs. If you read Emacs acknowledgements, I'm there as well&#8221;</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>&#8220;Just try out Org mode. I didn&#8217;t know it very well myself until I had a show about it, but now + <p><q>&#8220;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.&#8221;</q>, said Randal again, talking about yet another <a href="http://twit.tv/floss136">recent show</a>.</p>

@@ -179,15 +182,15 @@ <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&#8217;s very own home-made wine that - Randal looks at me and says: <q>&#8220;You know that I started off as a Technical Writer myself, don&#8217;t + 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>&#8220;You know that I started off as a Technical Writer myself, don't you?&#8221;</q></p> - <p>I was baffled. I did brush up on Randal&#8217;s life on his web site, Wikipedia and similar, like any good + <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>&#8220;When I joined, I had a boss called Lyle. He used to say that the manual itself is <em>the</em> - product. If it&#8217;s not in the manual, it simply doesn&#8217;t exist for the customer.&#8221;</q> A + product. If it's not in the manual, it simply doesn't exist for the customer.&#8221;</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>

@@ -195,10 +198,10 @@ <p>I really enjoyed when Randal told us about his first encounter with his editor, Jack:</p>

<blockquote>&#8220;He was a big guy. 6 ft tall, with huge hands. He used to hold his pencil like this&#8230; [shows a fist grabbing a pencil] &#8230;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: &#8216;OK, what did you <em>really</em> - want to say here?&#8217;<br /> + want to say here?'<br /> <br /> - I said &#8216;Well, that you set option -s to enable <span class="caps">XYZ</span>&#8217;, and he starts - writing down on my document &#8216;Set option -s to enable <span class="caps">XYZ</span>&#8230;&#8217;, and + I said &#8216;Well, that you set option -s to enable <span class="caps">XYZ</span>', and he starts + writing down on my document &#8216;Set option -s to enable <span class="caps">XYZ</span>&#8230;', and so on.&quot; </blockquote> <p>When you start as a Technical Writer, you often end up writing a lot trying to be thorough, making even

@@ -218,19 +221,20 @@ 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: &#8220;To Fabio, without whom this note will make no sense&#8221;.</p> <p><img src="/images/pictures/rls/rls1_small.png" style="float:right;" /></p> - <p>There&#8217;s obviously a lot of stuff we talked about that I didn&#8217;t write about, mainly because I was + <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&#8217;s day job, then about his company <a + <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&#8217;t have gone better. Especially considering Randal and I don&#8217;t agree on some + <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> + 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&#8230;</p>
M contents/articles/rawline-020.htmlcontents/articles/rawline-020.html

@@ -5,23 +5,34 @@ timestamp: 1207107180

tags: "ruby|programming|opensource|rawline" ----- <p><del>InLine</del> RawLine 0.2.0 is out!</p> -<p>*Raw*Line is the new name for InLine, in case you didn&#8217;t guess. The name was changed to avoid name collision problems with the RubyInline project.</p> -<p>Here&#8217;s what&#8217;s new:</p> +<p>*Raw*Line is the new name for InLine, in case you didn't guess. The name was changed to avoid name collision problems + with the RubyInline project.</p> +<p>Here's what's new:</p> <ul> <li>Added /examples and /test directory to gem.</li> <li>Escape codes can now be used in prompt.</li> - <li>It is now possible to use bind(key, &amp;block) with a String as key, even if the corresponding escape sequence is not defined.</li> + <li>It is now possible to use bind(key, &amp;block) with a String as key, even if the corresponding escape sequence + is not defined.</li> <li>Added Editor#write_line(string) to print a any string (and &#8220;hit return&#8221;).</li> - <li>Library name changed to &#8220;RawLine&#8221; to avoid name collision issues (Bug <a href="http://rubyforge.org/tracker/?func=detail&amp;aid=18879&amp;group_id=5622&amp;atid=21788">18879</a>).</li> + <li>Library name changed to &#8220;RawLine&#8221; to avoid name collision issues (Bug <a + href="http://rubyforge.org/tracker/?func=detail&amp;aid=18879&amp;group_id=5622&amp;atid=21788">18879</a>). + </li> <li>Provided alternative implementation for left and right arrows if terminal<br /> -supports escape sequences (on Windows, it requires the Win32Console gem).</li> + supports escape sequences (on Windows, it requires the Win32Console gem).</li> </ul> -<p>In particular, I decided to provide an &#8220;optimized implementation&#8221; for the left and right arrows using escape sequences rather than shameful hacks. This is now possible because the Win32Console gem now enables <span class="caps">ANSI</span> escape sequences on Windows as well (weehee!).</p> +<p>In particular, I decided to provide an &#8220;optimized implementation&#8221; for the left and right arrows using + escape sequences rather than shameful hacks. This is now possible because the Win32Console gem now enables <span + class="caps">ANSI</span> escape sequences on Windows as well (weehee!).</p> <p>So:</p> <ul> - <li>If you&#8217;re on *nix all good, your terminal is smart and can understand escape sequences =&gt; the new implementation will be used.</li> - <li>If you&#8217;re on Windows and you installed Win32Console, your termnal is smart and can understand escape sequences =&gt; the new implementation will be used.</li> - <li>If you&#8217;re on Windows and you didn&#8217;t install Win32Console, then your terminal is stupid and it doesn&#8217;t understand escape sequences, so the old implementation will be used.</li> + <li>If you're on *nix all good, your terminal is smart and can understand escape sequences =&gt; the new + implementation will be used.</li> + <li>If you're on Windows and you installed Win32Console, your termnal is smart and can understand escape sequences + =&gt; the new implementation will be used.</li> + <li>If you're on Windows and you didn't install Win32Console, then your terminal is stupid and it doesn't understand + escape sequences, so the old implementation will be used.</li> </ul> -<p>The new implementation is significantly faster than the old one, on Windows at least, and the cursor now blinks properly when left or right arrows are pressed.</p> -<p>I re-emplemented only cursor movement because I&#8217;m still having some problems in getting the delete/insert escapes to work properly (or better: how I want them to work!).</p> +<p>The new implementation is significantly faster than the old one, on Windows at least, and the cursor now blinks + properly when left or right arrows are pressed.</p> +<p>I re-emplemented only cursor movement because I'm still having some problems in getting the delete/insert escapes to + work properly (or better: how I want them to work!).</p>
M contents/articles/rawline-030.htmlcontents/articles/rawline-030.html

@@ -4,15 +4,21 @@ content-type: article

timestamp: 1235890020 tags: "ruby|opensource|rawline" ----- -<p><a href="/rawline">RawLine</a> 0.3.0 has been <a href="http://rubyforge.org/projects/rawline">released</a>. This new milestones fixes some minor bugs and adds some new functionalities, must notably:</p> +<p><a href="/rawline">RawLine</a> 0.3.0 has been <a href="http://rubyforge.org/projects/rawline">released</a>. This new + milestones fixes some minor bugs and adds some new functionalities, must notably:</p> <ul> <li>Ruby 1.9 support</li> <li>A filename completion function</li> - <li>A new <span class="caps">API</span> very similar to the one exposed by the Ruby wrapper for <span class="caps">GNU</span> Readline</li> + <li>A new <span class="caps">API</span> very similar to the one exposed by the Ruby wrapper for <span + class="caps">GNU</span> Readline</li> </ul> -<p>Some of you asked for Readline compatibility/emulation and that was actually not too difficult to implement: all the bricks were already there, I just had to put them together in the right place.</p> -<p>The <code>RawLine</code> module (you can spell it &#8220;Rawline&#8221; as well, if you wish) now behaves like <code>Readline</code>. This means that you can now use RawLine like this (taken from examples/readline_emulation.rb):</p> -<div class='ruby'><pre><code>include Rawline +<p>Some of you asked for Readline compatibility/emulation and that was actually not too difficult to implement: all the + bricks were already there, I just had to put them together in the right place.</p> +<p>The <code>RawLine</code> module (you can spell it &#8220;Rawline&#8221; as well, if you wish) now behaves like + <code>Readline</code>. This means that you can now use RawLine like this (taken from + examples/readline_emulation.rb):</p> +<div class='ruby'> + <pre><code>include Rawline puts "*** Readline Emulation Test Shell ***" puts " * Press CTRL+X to exit"

@@ -24,8 +30,13 @@ Dir.chdir '..'

loop do puts "You typed: [#{readline("=&gt; ", true).chomp!}]" -end</code></pre></div><p>Basically you get a <code>readline</code> method, a <code>HISTORY</code> constant like the one exposed by Readline (Rawline&#8217;s is a RawLine::HistoryBuffer object though &mdash; much more manageable), and a <code>FILENAME_COMPLETION_PROC</code> constant, which provides basic filename completion. Here it is:</p> -<div class='ruby'><pre><code>def filename_completion_proc +end</code></pre> +</div> +<p>Basically you get a <code>readline</code> method, a <code>HISTORY</code> constant like the one exposed by Readline + (Rawline's is a RawLine::HistoryBuffer object though &mdash; much more manageable), and a + <code>FILENAME_COMPLETION_PROC</code> constant, which provides basic filename completion. Here it is:</p> +<div class='ruby'> + <pre><code>def filename_completion_proc lambda do |word| dirs = @line.text.split('/') path = @line.text.match(/^\/|[a-zA-Z]:\//) ? "/" : Dir.pwd+"/"

@@ -37,28 +48,53 @@ dir = path+dirs.join('/')

end Dir.entries(dir).select { |e| (e =~ /^\./ && @match_hidden_files && word == '') || (e =~ /^#{word}/ && e !~ /^\./) } end - end</code></pre></div><p>You can find this function as part of the <code>RawLine::Editor</code> class. The result is not exactly the same Readline, because completion matches are not displayed underneath the line but inline and can be cycled through &mdash; which is one of Readline&#8217;s completion modes anyway.</p> -<p>A few methods of the <code>RawLine::Editor</code> class can now be accessed directly from the <code>RawLine</code> module, like with Readline:</p> + end</code></pre> +</div> +<p>You can find this function as part of the <code>RawLine::Editor</code> class. The result is not exactly the same + Readline, because completion matches are not displayed underneath the line but inline and can be cycled through + &mdash; which is one of Readline's completion modes anyway.</p> +<p>A few methods of the <code>RawLine::Editor</code> class can now be accessed directly from the <code>RawLine</code> + module, like with Readline:</p> <ul> - <li><code>Rawline.completion_proc</code> &mdash; the Proc object used for <span class="caps">TAB</span> completion (defaults to FILENAME_COMPLETION_PROC).</li> + <li><code>Rawline.completion_proc</code> &mdash; the Proc object used for <span class="caps">TAB</span> completion + (defaults to FILENAME_COMPLETION_PROC).</li> <li><code>Rawline.completion_matches</code> &mdash; an array of completion matches.</li> <li><code>Rawline.completion_append_char</code> &mdash; a character to append after a successful completion.</li> - <li><code>Rawline.basic_word_break_characters</code> &mdash; a String listing all the characters used as word separators.</li> + <li><code>Rawline.basic_word_break_characters</code> &mdash; a String listing all the characters used as word + separators.</li> <li><code>Rawline.completer_word_break_characters</code> &mdash; same as above.</li> <li><code>Rawline.library_version</code> &mdash; the current version of the Rawline library.</li> <li><code>Rawline.clear_history</code> &mdash; to clear the current history.</li> - <li><code>Rawline.match_hidden_files</code> &mdash; whether FILENAME_COMPLETION_PROC matches hidden files and folders or not.</li> + <li><code>Rawline.match_hidden_files</code> &mdash; whether FILENAME_COMPLETION_PROC matches hidden files and + folders or not.</li> </ul> -<p>I bet you didn&#8217;t know these methods were even in the Readline wrapper, did you? Probably because of lack of documentation.<br /> -Anyhow, another very important difference beween Rawline and Readline is <code>Rawline.editor</code>, i.e. the default instance of RawLine::Editor used by the Rawline module itself.</p> -<p>This makes things easier if you want more control over the line which is being edited and the previously-edited lines. Sure, <code>Readline#completion_proc</code> exposes the current <em>word</em> being typed before hitting tab, and so does <code>Rawline#completion_proc</code> the difference is that if you access <code>Rawline.editor.line</code> you get a <code>RawLine::Line</code> object with all the information you could possibly need about the current line: the position of the cursor, the text, the order the characters were entered, etc. etc. <br /> -Now you can imagine why it took me a few minutes to write the <code>filename_completion_proc</code> method (and why it will take you even less time to write your own similar method if you wanna do something different): you can access not only the last word being typed but also the current <em>and previous</em> lines (through <code>Rawline.editor.history</code> or just <code>Rawline::HISTORY</code>)!</p> -<p>It must be said, as usual, that Rawline is <em>not</em> a complete replacement for the Readline library yet (and it will probably never be, as Readline is huge!), but it&#8217;s a good cross-platform, more Ruby-esque alternative to what&#8217;s currently available by the Readline wrapper for Ruby.</p> -<p>It&#8217;s not as fast, of course, especially when completing long words, but it&#8217;s quite usable. The following libraries are not required but recommended:</p> +<p>I bet you didn't know these methods were even in the Readline wrapper, did you? Probably because of lack of + documentation.<br /> + Anyhow, another very important difference beween Rawline and Readline is <code>Rawline.editor</code>, i.e. the + default instance of RawLine::Editor used by the Rawline module itself.</p> +<p>This makes things easier if you want more control over the line which is being edited and the previously-edited + lines. Sure, <code>Readline#completion_proc</code> exposes the current <em>word</em> being typed before hitting tab, + and so does <code>Rawline#completion_proc</code> the difference is that if you access + <code>Rawline.editor.line</code> you get a <code>RawLine::Line</code> object with all the information you could + possibly need about the current line: the position of the cursor, the text, the order the characters were entered, + etc. etc. <br /> + Now you can imagine why it took me a few minutes to write the <code>filename_completion_proc</code> method (and why + it will take you even less time to write your own similar method if you wanna do something different): you can + access not only the last word being typed but also the current <em>and previous</em> lines (through + <code>Rawline.editor.history</code> or just <code>Rawline::HISTORY</code>)!</p> +<p>It must be said, as usual, that Rawline is <em>not</em> a complete replacement for the Readline library yet (and it + will probably never be, as Readline is huge!), but it's a good cross-platform, more Ruby-esque alternative to what's + currently available by the Readline wrapper for Ruby.</p> +<p>It's not as fast, of course, especially when completing long words, but it's quite usable. The following libraries + are not required but recommended:</p> <ul> <li><code>win32console</code> (on Windows)</li> <li><code>termios</code> (on *nix)</li> </ul> -<p>They basically make Rawline faster. If you don&#8217;t use them, Rawline will fall back on its pure-Ruby implementation to move left and right (i.e. printing backspaces and spaces character codes instead of <span class="caps">ASCII</span> escape codes).</p> -<p>Unfortunately, there&#8217;s no <code>vi_editing_mode</code> or <code>emacs_editing_mode</code> yet (for time constraints: they <em>can</em> be implemented!) but patches are very welcome. Also, if you need more features, all you have to do is ask :-)</p> +<p>They basically make Rawline faster. If you don't use them, Rawline will fall back on its pure-Ruby implementation to + move left and right (i.e. printing backspaces and spaces character codes instead of <span class="caps">ASCII</span> + escape codes).</p> +<p>Unfortunately, there's no <code>vi_editing_mode</code> or <code>emacs_editing_mode</code> yet (for time constraints: + they <em>can</em> be implemented!) but patches are very welcome. Also, if you need more features, all you have to do + is ask :-)</p> <p>P.S.: Check out the new <a href="/rawline">Project Page</a> and especially its Resources section!</p>
M contents/articles/real-world-rawline-usage.htmlcontents/articles/real-world-rawline-usage.html

@@ -4,18 +4,26 @@ content-type: article

timestamp: 1236398040 tags: "ruby|rawline" ----- -<p>So I finally decided to update <a href="/rawline">RawLine</a> last week, and I added a more Readline-like <span class="caps">API</span>. When I first started the project, I was determined <em>not</em> to do that, because the current Readline wrapper shipped with Ruby is not very Ruby-ish: it&#8217;s a wrapper, after all!</p> -<p>The good thing of having a new <span class="caps">API</span> compatible with Readline is that now people can use RawLine in their Readline-powered scripts, with very minor modifications.</p> -<p>Let&#8217;s have a look at some examples (they are also shipped with <a href="http://rubyforge.org/projects/rawline">Rawline v0.3.1</a>):<br /> -h3. Rush</p> -<p><a href="http://rush.heroku.com">Rush</a> is an excellent gem which provides a cross-platform shell environment, entirely written in Ruby.<br /> -Being a shell, it obviously uses Readline for tab completion, and that does the job on Linux. On Windows though, things aren&#8217;t that easy:</p> +<p>So I finally decided to update <a href="/rawline">RawLine</a> last week, and I added a more Readline-like <span + class="caps">API</span>. When I first started the project, I was determined <em>not</em> to do that, because the + current Readline wrapper shipped with Ruby is not very Ruby-ish: it's a wrapper, after all!</p> +<p>The good thing of having a new <span class="caps">API</span> compatible with Readline is that now people can use + RawLine in their Readline-powered scripts, with very minor modifications.</p> +<p>Let's have a look at some examples (they are also shipped with <a + href="http://rubyforge.org/projects/rawline">Rawline v0.3.1</a>):<br /> + h3. Rush</p> +<p><a href="http://rush.heroku.com">Rush</a> is an excellent gem which provides a cross-platform shell environment, + entirely written in Ruby.<br /> + Being a shell, it obviously uses Readline for tab completion, and that does the job on Linux. On Windows though, + things aren't that easy:</p> <ul> <li>text gets garbled if you write long lines</li> - <li>you can&#8217;t type certain characters if they use some key modifiers like <RIGHT-ALT>, etc.</li> + <li>you can't type certain characters if they use some key modifiers like <RIGHT-ALT>, etc.</li> </ul> -<p>RawLine doesn&#8217;t have these problems (that&#8217;s the very reason why I created it), so here&#8217;s a simple script which launches a Rawline-enabled Rush shell:</p> -<div class='ruby'><pre><code>require 'rubygems' +<p>RawLine doesn't have these problems (that's the very reason why I created it), so here's a simple script which + launches a Rawline-enabled Rush shell:</p> +<div class='ruby'> + <pre><code>require 'rubygems' require 'rush' require 'rawline'

@@ -38,19 +46,26 @@ end

end end -shell = RawlineRush.new.run</code></pre></div><p>What happens here? Nothing much really, all I had to do was:</p> +shell = RawlineRush.new.run</code></pre> +</div> +<p>What happens here? Nothing much really, all I had to do was:</p> <ol> <li>Derive a new class from Rush::Shell</li> <li>Set <code>Rawline.basic_word_break_characters</code> to the same value used in the original Rush code</li> - <li>Set <code>Rawline.completion_proc</code> to <em>the same</em> completion Proc used in the original Rush code</li> + <li>Set <code>Rawline.completion_proc</code> to <em>the same</em> completion Proc used in the original Rush code + </li> <li>Rewrite the original <code>run</code> replacing <code>Readline</code> with <code>Rawline</code></li> </ol> -<p>And it works as it was intended to, i.e. typing <code>root['b&lt;TAB&gt;</code> will expand to <code>root['bin/</code>, etc.<br /> -Note that I didn&#8217;t write the completion Proc from scratch: it was already there.</p> +<p>And it works as it was intended to, i.e. typing <code>root['b&lt;TAB&gt;</code> will expand to + <code>root['bin/</code>, etc.<br /> + Note that I didn't write the completion Proc from scratch: it was already there.</p> <h3><span class="caps">IRB</span></h3> -<p>After trying out Rush, the next logical step was trying <span class="caps">IRB</span> itself: I could never use it properly on Windows, and that was really frustrating.<br /> -After a few minutes trying to figure out how to start <span class="caps">IRB</span> programmatically, I quickly came up with a similar example:</p> -<div class='ruby'><pre><code>require 'irb' +<p>After trying out Rush, the next logical step was trying <span class="caps">IRB</span> itself: I could never use it + properly on Windows, and that was really frustrating.<br /> + After a few minutes trying to figure out how to start <span class="caps">IRB</span> programmatically, I quickly came + up with a similar example:</p> +<div class='ruby'> + <pre><code>require 'irb' require 'irb/completion' require 'rubygems' require 'rawline'

@@ -75,7 +90,15 @@

module IRB @CONF[:SCRIPT] = RawlineInputMethod.new end -IRB.start</code></pre></div><p>In this case, Rawline is included in the <code>RawlineInputMethod</code> class, derived from the original <code>ReadlineInputMethod</code> class, i.e. the class <span class="caps">IRB</span> uses to define (guess&#8230;) how to input characters.<br /> -Again, all I had to do was set a few Rawline variables to match the ones used in Readline, and then redefine the function used to get characters. All done.</p> -<p>It works as expected (only with inline completion, of course): typing <code>"test".ma&lt;TAB&gt;</code> will give you <code>"test".map</code>, <code>"test".match</code>, etc.</p> -<p>You also get all Rawline key mappings for free (<span class="caps">CTRL</span>-K to clear the line, <span class="caps">CTRL</span>-U and <span class="caps">CTRL</span>-R to undo and redo, etc.), and you can define your own.</p> +IRB.start</code></pre> +</div> +<p>In this case, Rawline is included in the <code>RawlineInputMethod</code> class, derived from the original + <code>ReadlineInputMethod</code> class, i.e. the class <span class="caps">IRB</span> uses to define (guess&#8230;) + how to input characters.<br /> + Again, all I had to do was set a few Rawline variables to match the ones used in Readline, and then redefine the + function used to get characters. All done.</p> +<p>It works as expected (only with inline completion, of course): typing <code>"test".ma&lt;TAB&gt;</code> will give you + <code>"test".map</code>, <code>"test".match</code>, etc.</p> +<p>You also get all Rawline key mappings for free (<span class="caps">CTRL</span>-K to clear the line, <span + class="caps">CTRL</span>-U and <span class="caps">CTRL</span>-R to undo and redo, etc.), and you can define your + own.</p>
M contents/articles/redbook-020-released.htmlcontents/articles/redbook-020-released.html

@@ -5,46 +5,70 @@ timestamp: 1191812700

tags: "redbook|ruby|productivity|opensource" ----- <blockquote> -<p><em>&#8220;Release Early, Release Often&#8221;</em></p> -<p>&#8212; Eric S. Raymond, <a href="http://www.catb.org/~esr/writings/cathedral-bazaar/cathedral-bazaar/ar01s04.html">The Cathedral and the Bazaar</a></p> + <p><em>&#8220;Release Early, Release Often&#8221;</em></p> + <p>&#8212; Eric S. Raymond, <a + href="http://www.catb.org/~esr/writings/cathedral-bazaar/cathedral-bazaar/ar01s04.html">The Cathedral and + the Bazaar</a></p> </blockquote> -<p>In other words, time for another (early) release of <a href="http://www.assembla.com/space/redbook">RedBook</a>. There are quite a few new features which are worth examining, in particular:</p> +<p>In other words, time for another (early) release of <a href="http://www.assembla.com/space/redbook">RedBook</a>. + There are quite a few new features which are worth examining, in particular:</p> <h3>Regexp search for messages</h3> -<p>This was actually already available before, just if you inputted a search string which was not a regexp, you&#8217;d get an unhandled exception (more or less). This exception is now handled propertly so you get a pretty message instead, if an error occurs when parsing the search string.</p> +<p>This was actually already available before, just if you inputted a search string which was not a regexp, you'd get an + unhandled exception (more or less). This exception is now handled propertly so you get a pretty message instead, if + an error occurs when parsing the search string.</p> <h3>Log Backup</h3> -<p>A new <strong>&#58;backup</strong> keyword is available to quickly backup your log file. Here&#8217;s what it does:</p> +<p>A new <strong>&#58;backup</strong> keyword is available to quickly backup your log file. Here's what it does:</p> <ul> <li>Loads all messages silently</li> <li>Writes them to a file in the same directory as the original log file named &lt;log-alias&gt;.bkp.yml.</li> </ul> -<p>Handy, especially if there was a similar keyword to restore the last backup, which is planned for <a href="http://www.assembla.com/spaces/milestones/index/bWE7NkzCqr3k25abIlDkbG?spaces_tool_id=ceS8UazCqr3k25abIlDkbG">later on</a>.</p> +<p>Handy, especially if there was a similar keyword to restore the last backup, which is planned for <a + href="http://www.assembla.com/spaces/milestones/index/bWE7NkzCqr3k25abIlDkbG?spaces_tool_id=ceS8UazCqr3k25abIlDkbG">later + on</a>.</p> <h3>Support for multiple log files</h3> -<p>This is perhaps the most important feature introduced by this release. It is now possible to configure more than one log file by adding any number of <strong>&#58;data_&lt;alias&gt;&#58;</strong> settings inside your config.yml file, where alias is the name of your log file. So, for example, if your config.yml file contains the following:</p> +<p>This is perhaps the most important feature introduced by this release. It is now possible to configure more than one + log file by adding any number of <strong>&#58;data_&lt;alias&gt;&#58;</strong> settings inside your config.yml file, + where alias is the name of your log file. So, for example, if your config.yml file contains the following:</p> <p><strong>&#58;data_test&#58; &#8220;testlog.yml&#8221;</strong></p> <p>You can load the &#8220;test&#8221; log by typing</p> <p><strong>&#58;use test</strong></p> -<p>(&#58;use is a shorthand for &#58;load_log). Similarly, another new keyword <strong>&#58;dest</strong> has been introduced to be able to log a message to a different log file without loading it into memory, like this:</p> +<p>(&#58;use is a shorthand for &#58;load_log). Similarly, another new keyword <strong>&#58;dest</strong> has been + introduced to be able to log a message to a different log file without loading it into memory, like this:</p> <p><strong>&#58;log This message will be saved to testlog.yml &#58;dest test</strong></p> <p>Finally, a <strong>&#58;refresh</strong> keyword has been introduced as an alias to reloading the current log.</p> <h3>(Almost) automatic log of completed activities</h3> -<p>Right when I was coding the <strong>&#58;timecalc</strong> operation, I thought it would be nice to be able to log the start and end of a task without having to type it twice. Now this is possible using the <strong>&#58;complete</strong> keyword:</p> +<p>Right when I was coding the <strong>&#58;timecalc</strong> operation, I thought it would be nice to be able to log + the start and end of a task without having to type it twice. Now this is possible using the + <strong>&#58;complete</strong> keyword:</p> <p>&#58;log Testing feature X in product Y</p> <p>&#58;complete</p> <p><strong>&#58;complete</strong> will re-log the last message prepended with [<span class="caps">COMPLETED</span>]:</p> 4 Mon Oct 08 2007 &#8211; 10:47:45 AM Testing feature X in product Y 5 Mon Oct 08 2007 &#8211; 10:54:31 AM [<span class="caps">COMPLETED</span>] Testing feature X in product Y -<p>What if I start another task before completing the first one? No problem, it is sufficient to load the last activities using a <strong>&#58;load</strong> command and then issuing <strong>&#58;complete &lt;number&gt;</strong> where &lt;number&gt; is the index of the loaded activity. <br /> -This nifty little feature will become more and more important when (starting from release 0.4) I&#8217;ll implement more time tracking functions, and it will be possible to track completed tasks in a specific timeframe and/or marked with a specific tag.</p> +<p>What if I start another task before completing the first one? No problem, it is sufficient to load the last + activities using a <strong>&#58;load</strong> command and then issuing <strong>&#58;complete &lt;number&gt;</strong> + where &lt;number&gt; is the index of the loaded activity. <br /> + This nifty little feature will become more and more important when (starting from release 0.4) I'll implement more + time tracking functions, and it will be possible to track completed tasks in a specific timeframe and/or marked with + a specific tag.</p> <h3>Easy integration with launchers like Launchy and QuickSilver</h3> -<p>To conclude, as someone pointed out that it would be cool to use RedBook from launchers like Launchy or Quicksilver, I made another standalone script (redbooklet.rb or redbooklet.exe) which is just able to parse a log command and write a message to the specified log file.<br /> -To use it with Launchy, for example, all you have to do is the following:</p> +<p>To conclude, as someone pointed out that it would be cool to use RedBook from launchers like Launchy or Quicksilver, + I made another standalone script (redbooklet.rb or redbooklet.exe) which is just able to parse a log command and + write a message to the specified log file.<br /> + To use it with Launchy, for example, all you have to do is the following:</p> <ol> - <li>Create a shortcut to redbooklet.exe (or to a way to execute the corresponding ruby script) named &#8220;log&#8221;.</li> + <li>Create a shortcut to redbooklet.exe (or to a way to execute the corresponding ruby script) named + &#8220;log&#8221;.</li> <li>Copy the &#8220;log&#8221; shortcut anywhere in your start menu</li> <li>Bring up launchy (ALT+SPACE) and type in &#8220;log&#8221;</li> <li>Hit tab</li> <li>Type in your log message, optionally with the any &#58;tags or &#58;dest keywords.</li> - <li>The message will be logged to your default log file or to the log you specified using the &#58;dest keyword. If an error occurs, it will appear in a command line window for 15 seconds before the program is closed.</li> + <li>The message will be logged to your default log file or to the log you specified using the &#58;dest keyword. If + an error occurs, it will appear in a command line window for 15 seconds before the program is closed.</li> </ol> -<p>That&#8217;s all folks! As usual, if you have any comment or suggestion feel free to reply to this post or email me. For a list of the planned features and releases, check out the <a href="http://www.assembla.com/spaces/milestones/index/bWE7NkzCqr3k25abIlDkbG?spaces_tool_id=ceS8UazCqr3k25abIlDkbG">Milestones</a> page.</p> -<p style="text-align:center;"><strong><a href="http://www.assembla.com/spaces/files/bWE7NkzCqr3k25abIlDkbG"><span class="caps">DOWNLOAD</span> <span class="caps">HERE</span></a></strong></p> +<p>That's all folks! As usual, if you have any comment or suggestion feel free to reply to this post or email me. For a + list of the planned features and releases, check out the <a + href="http://www.assembla.com/spaces/milestones/index/bWE7NkzCqr3k25abIlDkbG?spaces_tool_id=ceS8UazCqr3k25abIlDkbG">Milestones</a> + page.</p> +<p style="text-align:center;"><strong><a href="http://www.assembla.com/spaces/files/bWE7NkzCqr3k25abIlDkbG"><span + class="caps">DOWNLOAD</span> <span class="caps">HERE</span></a></strong></p>
M contents/articles/redbook-030-released.htmlcontents/articles/redbook-030-released.html

@@ -4,9 +4,13 @@ content-type: article

timestamp: 1193289480 tags: "redbook|ruby|productivity|opensource" ----- -<p>It&#8217;s time for a new beta release of RedBook. This was actually going to be a fairly modest release in terms of features, but I actually ended up implementing a lot more than expected, even things which were planned for the first production release 1.0. So, let&#8217;s see what&#8217;s new</p> +<p>It's time for a new beta release of RedBook. This was actually going to be a fairly modest release in terms of + features, but I actually ended up implementing a lot more than expected, even things which were planned for the + first production release 1.0. So, let's see what's new</p> <h3>New operation names <em>(which break compatibility with previous versions)</em></h3> -<p>I had a look at the names I choose for the operations and I noticed that they were either not intuitive enough or too verbose. So I decided to change a fair few of them (thus breaking compatibility with previous versions, but after all that&#8217;s what beta releases are for, right?):</p> +<p>I had a look at the names I choose for the operations and I noticed that they were either not intuitive enough or too + verbose. So I decided to change a fair few of them (thus breaking compatibility with previous versions, but after + all that's what beta releases are for, right?):</p> <table> <tr> <th><span class="caps">OLD</span> </th>

@@ -38,29 +42,52 @@ <td> :quit </td>

</tr> </table> <h3>New Manual/Home Page</h3> -<p>A while ago I discovered <a href="http://www.tiddlywiki.com/">TiddlyWiki</a>, but as a matter of fact I never used it for anything practical. From last week though, I started using it a work for taking notes and create short memos, and then I thought of using it to replace RedBook&#8217;s standard <span class="caps">README</span> file (which was made in a hurry and was kinda cryptical). Now a brand new &#8220;manual.html&#8221; ships with RedBook &#8212; 308 KB (30 of actual docs and 278 of Javascript/<span class="caps">HTML</span>/<span class="caps">CSS</span> magic) with everything you need to know about it. Additionally, an online version is available at the following address:</p> +<p>A while ago I discovered <a href="http://www.tiddlywiki.com/">TiddlyWiki</a>, but as a matter of fact I never used it + for anything practical. From last week though, I started using it a work for taking notes and create short memos, + and then I thought of using it to replace RedBook's standard <span class="caps">README</span> file (which was made + in a hurry and was kinda cryptical). Now a brand new &#8220;manual.html&#8221; ships with RedBook &#8212; 308 KB (30 + of actual docs and 278 of Javascript/<span class="caps">HTML</span>/<span class="caps">CSS</span> magic) with + everything you need to know about it. Additionally, an online version is available at the following address:</p> <p style="text-align:center;"><strong><a href="http://redbook.h3rald.com">redbook.h3rald.com</a></strong></p> <h3>Removed Win32::Console Library</h3> -<p>OK this is not good news for people (like me) who use RedBook on Windows, but I promise you&#8217;ll forgive me when you read about the other new features below. I discovered by chance that the Win32::Console library (which was used to get colors working on Windows) seems not to handle international characters properly and also seems to be conflicting in some way with the Readline library I decided to include (see below). I don&#8217;t know whether this is a problem of the actual library or just of the gem used to pack it.</p> +<p>OK this is not good news for people (like me) who use RedBook on Windows, but I promise you'll forgive me when you + read about the other new features below. I discovered by chance that the Win32::Console library (which was used to + get colors working on Windows) seems not to handle international characters properly and also seems to be + conflicting in some way with the Readline library I decided to include (see below). I don't know whether this is a + problem of the actual library or just of the gem used to pack it.</p> <h3>rbconfig.yml</h3> -<p>The <code>config.yml</code> file has been renamed to <code>rbconfig.yml</code>. Additionally, if you place a file with this name in your $<span class="caps">HOME</span> directory it will override the one in your RedBook folder (This was done in preparation for the RedBook RubyGem).</p> +<p>The <code>config.yml</code> file has been renamed to <code>rbconfig.yml</code>. Additionally, if you place a file + with this name in your $<span class="caps">HOME</span> directory it will override the one in your RedBook folder + (This was done in preparation for the RedBook RubyGem).</p> <h3>New operations</h3> <p>The following new operations are available:</p> <ul> - <li><a href="http://redbook.h3rald.com/#%3Arelog">:relog</a> &#8212; Re-logs a previously-logged message (keeping the same tags and updating the timestamp)</li> + <li><a href="http://redbook.h3rald.com/#%3Arelog">:relog</a> &#8212; Re-logs a previously-logged message (keeping + the same tags and updating the timestamp)</li> <li><a href="http://redbook.h3rald.com/#%3Aclear">:clear</a> &#8212; Clears the screen.</li> - <li><a href="http://redbook.h3rald.com/#%3Aruby">:ruby</a> &#8212; Evaluates arbitrary Ruby code outputting the result (use with care&#8230;)</li> + <li><a href="http://redbook.h3rald.com/#%3Aruby">:ruby</a> &#8212; Evaluates arbitrary Ruby code outputting the + result (use with care&#8230;)</li> </ul> <h3>Auto-completion</h3> -<p>Some Mac users originally complained that the backspace key wasn&#8217;t working in RedBook (and it didn&#8217;t in Linux either). Fortunately the solution to this was easy enough: include the <span class="caps">GNU</span> <a href="http://tiswww.case.edu/php/chet/readline/rltop.html">Readline</a> library. <br /> -Readline is now being used in RedBook to:</p> +<p>Some Mac users originally complained that the backspace key wasn't working in RedBook (and it didn't in Linux + either). Fortunately the solution to this was easy enough: include the <span class="caps">GNU</span> <a + href="http://tiswww.case.edu/php/chet/readline/rltop.html">Readline</a> library. <br /> + Readline is now being used in RedBook to:</p> <ul> <li>Provide basic (Emacs-style) bindings</li> <li><strong>Auto-completion</strong> for keywords <em>and tags</em></li> - <li>Allow the user to automatically customize key bindings via an <a href="http://redbook.h3rald.com/#.inputrc">.inputrc</a> file placed in their $<span class="caps">HOME</span> directory (on Windows you&#8217;ll have to define a <span><span class="caps">HOME</span></span> environment variable pointing to a directory of your choice). An example .inputrc file is distributed with RedBook with some specific key bindings.</li> + <li>Allow the user to automatically customize key bindings via an <a + href="http://redbook.h3rald.com/#.inputrc">.inputrc</a> file placed in their $<span class="caps">HOME</span> + directory (on Windows you'll have to define a <span><span class="caps">HOME</span></span> environment variable + pointing to a directory of your choice). An example .inputrc file is distributed with RedBook with some specific + key bindings.</li> </ul> <h3>Support for international characters</h3> -<p>Finally, I decided to implement another feature which was originally planned for the 1.0 release: international characters support. This is possible using the Iconv Ruby extension (requires <a href="http://www.gnu.org/software/libiconv/"><span class="caps">GNU</span> libiconv</a>) which can convert strings between different character sets. The character sets needs to be configured via the <a href="http://redbook.h3rald.com/#rbconfig.yml">rbconfig.yml</a> file.</p> +<p>Finally, I decided to implement another feature which was originally planned for the 1.0 release: international + characters support. This is possible using the Iconv Ruby extension (requires <a + href="http://www.gnu.org/software/libiconv/"><span class="caps">GNU</span> libiconv</a>) which can convert + strings between different character sets. The character sets needs to be configured via the <a + href="http://redbook.h3rald.com/#rbconfig.yml">rbconfig.yml</a> file.</p> <p>For more information, check out the <a href="http://redbook.h3rald.com/#ChangeLog">ChangeLog</a></p> -<p style="text-align:center;"><strong><a href="http://www.assembla.com/spaces/files/bWE7NkzCqr3k25abIlDkbG">Download RedBook</a></strong></p> - +<p style="text-align:center;"><strong><a href="http://www.assembla.com/spaces/files/bWE7NkzCqr3k25abIlDkbG">Download + RedBook</a></strong></p>
M contents/articles/redbook-040-released.htmlcontents/articles/redbook-040-released.html

@@ -4,20 +4,27 @@ content-type: article

timestamp: 1196235240 tags: "opensource|productivity|redbook|ruby" ----- -<p>I&#8217;m pleased to announce a new release of the RedBook daily logging and time tracking script. This release introduces two new operations, four stats-related directives and a brand new Windows Installer able to setup RedBook in a blink, with (almost) no configuration at all.</p> -<p>Let&#8217;s have a closer look&#8230;h2. New Operations</p> +<p>I'm pleased to announce a new release of the RedBook daily logging and time tracking script. This release introduces + two new operations, four stats-related directives and a brand new Windows Installer able to setup RedBook in a + blink, with (almost) no configuration at all.</p> +<p>Let's have a closer look&#8230;h2. New Operations</p> <p>Suppose that you just logged a message and you noticed one of these two things happened:</p> <ul> - <li>You didn&#8217;t really wanted to log it</li> + <li>You didn't really wanted to log it</li> <li>You made a silly typo in the message or in the tags</li> </ul> -<p>What can you do about it? Up to RedBook 0.3, the only solution was to open the <span class="caps">YAML</span> file and correct the mistake manually. From now on there&#8217;s also another simpler way to operate in such situations: using the :update and :delete operations!</p> +<p>What can you do about it? Up to RedBook 0.3, the only solution was to open the <span class="caps">YAML</span> file + and correct the mistake manually. From now on there's also another simpler way to operate in such situations: using + the :update and :delete operations!</p> <h3>:update</h3> -<p>This operation can be used to update the message and or the tags of a previously-logged activity. The usage is simple: load a dataset first, and then execute an <code>:update</code> command like:</p> +<p>This operation can be used to update the message and or the tags of a previously-logged activity. The usage is + simple: load a dataset first, and then execute an <code>:update</code> command like:</p> <p><code>:update 4 :message My updated message :with new_tag1 new_tag2</code></p> -<p>This will update the 4th message of the dataset modifying its message and tags. Of course you can update either of the two things or both; the timestamp of the activity will not be changed.</p> +<p>This will update the 4th message of the dataset modifying its message and tags. Of course you can update either of + the two things or both; the timestamp of the activity will not be changed.</p> <h3>:delete</h3> -<p>The delete operation can be used to completely delete a message from the log. Just load a dataset using a <code>:select</code> operation and then execute a <code>:delete</code> command, e.g.:</p> +<p>The delete operation can be used to completely delete a message from the log. Just load a dataset using a + <code>:select</code> operation and then execute a <code>:delete</code> command, e.g.:</p> <ul> <li><code>:delete 1</code> <em>(will delete the first activity)</em></li> <li><code>:delete 4 2 7 9</code> <em>(will delete activity #2, #4, #7 and #9)</em></li>

@@ -25,52 +32,88 @@ <li><code>:delete</code> <em>(will delete the entire dataset)</em></li>

</ul> <p>A confirmation message will appear before deleting the message(s).</p> <p><strong><span class="caps">IMPORTANT</span></strong><br /> -<em>Due to the architecture of the application, whenever an <code>:update</code> or <code>:delete</code> occurs the log file will be reloaded in memory and completely overwritten. This doesn&#8217;t cause problems, although for big log files (10,000+ activities) this may take a few seconds.</em></p> + <em>Due to the architecture of the application, whenever an <code>:update</code> or <code>:delete</code> occurs the + log file will be reloaded in memory and completely overwritten. This doesn't cause problems, although for big + log files (10,000+ activities) this may take a few seconds.</em> +</p> <h2>Statistics</h2> -<p>Another important new feature introduced by this release is <em>time tracking</em>. It was actually already there, kind of: the <code>:calc</code> operation was already able to calculate the time elapsed between two activities&#8230; however, this is not really practical.</p> -<p>Since last release, it is possible to log the completion of an activity using the <code>:finish</code> command. This will basically re-log the same activity prepending <em>[<span class="caps">COMPLETED</span>]</em> to its message.<br /> -If you started using the <code>:finish</code> command to complete your activities, RedBook can now calculate the following stats for you:</p> +<p>Another important new feature introduced by this release is <em>time tracking</em>. It was actually already there, + kind of: the <code>:calc</code> operation was already able to calculate the time elapsed between two + activities&#8230; however, this is not really practical.</p> +<p>Since last release, it is possible to log the completion of an activity using the <code>:finish</code> command. This + will basically re-log the same activity prepending <em>[<span class="caps">COMPLETED</span>]</em> to its + message.<br /> + If you started using the <code>:finish</code> command to complete your activities, RedBook can now calculate the + following stats for you:</p> <ul> <li>Count the number of messages in a dataset</li> <li>Calculate the average time spent for the completed activities in a dataset</li> <li>Calculate the total time spent for the completed activities in a dataset</li> <li>Calculate the duration of each completed activity in a dataset</li> </ul> -<p>Each of these calculations is performed by adding special directive to a <code>:select</code> command, as explained in the following sections.</p> +<p>Each of these calculations is performed by adding special directive to a <code>:select</code> command, as explained + in the following sections.</p> <h3>:count</h3> -<p>This directive can be added to a <code>:select</code> command to return just the number of message of the loaded dataset. <br /> -In other words, executing the following:</p> +<p>This directive can be added to a <code>:select</code> command to return just the number of message of the loaded + dataset. <br /> + In other words, executing the following:</p> <p><code>:select :count :with mail !work</code></p> -<p>&#8230;will return the number of activities tagged with <em>mail</em> but not with <em>personal</em>, without listing all the activities.</p> +<p>&#8230;will return the number of activities tagged with <em>mail</em> but not with <em>personal</em>, without listing + all the activities.</p> <h3>:avg</h3> -<p>The <code>:avg</code> directive can be used to calculate the average time spent on activities matching certain criteria, for example:</p> +<p>The <code>:avg</code> directive can be used to calculate the average time spent on activities matching certain + criteria, for example:</p> <p><code>:select Status Meeting :avg :with meeting</code></p> -<p>&#8230;will return the average time spent on activities whose messages matches <em>/Status Meeting/</em> and are tagged with <em>meeting</em>.</p> +<p>&#8230;will return the average time spent on activities whose messages matches <em>/Status Meeting/</em> and are + tagged with <em>meeting</em>.</p> <h3>:total</h3> -<p>Similarly, <code>:total</code> can be used to return the total time spent on activities matching certain criteria, e.g.:</p> +<p>Similarly, <code>:total</code> can be used to return the total time spent on activities matching certain criteria, + e.g.:</p> <p><code>:select :total :with mail work</code></p> <p>&#8230;will return the total time spent on activities tagged with <em>mail</em> and <em>work</em>.</p> <h3>:duration</h3> -<p>Lastly, <code>:duration</code> will print each completed task along with its duration. The syntax is similar to the others:</p> +<p>Lastly, <code>:duration</code> will print each completed task along with its duration. The syntax is similar to the + others:</p> <p><code>:select :duration :with break</code></p> <p>This will print each completed activity tagged with <em>break</em> along with its duration.</p> <h3>:nodiff and _concurrent</h3> -<p>The logic behind the above-mentioned directives may seem trivial to implement, but it is not. The fun part was telling RedBook to subtract the duration of each sub-activity contained in another activity&#8230; a feature I considered necessary for time tracking purpose. However, if you start your work day with a <em>Working Day</em> activity and you complete that activity using the <code>:finish</code> command, when calculating the duration of the working day RedBook will subtract the duration of <em>all the completed sub-activities</em> from the duration of <em>Working Day</em>. This is not OK, so I added the directive <code>:nodiff</code> which can be used to prevent RedBook from calculating the difference between the parent activity&#8217;s duration and the duration of each of its child activity.</p> -<p>What if you&#8217;re doing two things at once? use the special <code>_concurrent</code> tag, and that activity will be considered symultaneous to its parent activity for time tracking purposes.</p> +<p>The logic behind the above-mentioned directives may seem trivial to implement, but it is not. The fun part was + telling RedBook to subtract the duration of each sub-activity contained in another activity&#8230; a feature I + considered necessary for time tracking purpose. However, if you start your work day with a <em>Working Day</em> + activity and you complete that activity using the <code>:finish</code> command, when calculating the duration of the + working day RedBook will subtract the duration of <em>all the completed sub-activities</em> from the duration of + <em>Working Day</em>. This is not OK, so I added the directive <code>:nodiff</code> which can be used to prevent + RedBook from calculating the difference between the parent activity's duration and the duration of each of its child + activity.</p> +<p>What if you're doing two things at once? use the special <code>_concurrent</code> tag, and that activity will be + considered symultaneous to its parent activity for time tracking purposes.</p> <h2>Activity Status Filters</h2> -<p>RedBook is now fully aware of the &#8220;status&#8221; of each activity, so it is possible to display only activities in a certain status using the following directives:</p> +<p>RedBook is now fully aware of the &#8220;status&#8221; of each activity, so it is possible to display only activities + in a certain status using the following directives:</p> <h3>:plain</h3> -<p>Executing <code>:select :plain :from today</code> will return all the activities logged today, omitting their completions (if any), i.e. any activity beginning with <em>[<span class="caps">COMPLETED</span>]</em>.</p> +<p>Executing <code>:select :plain :from today</code> will return all the activities logged today, omitting their + completions (if any), i.e. any activity beginning with <em>[<span class="caps">COMPLETED</span>]</em>.</p> <h3>:pending</h3> -<p>Executing <code>:select :pending :from today</code> will return all the activities logged today which have not been completed yet. Again, this was not too trivial to implement, but it seems to work (it also smart enough to detect if the same activity has been relogged etc. etc.).</p> +<p>Executing <code>:select :pending :from today</code> will return all the activities logged today which have not been + completed yet. Again, this was not too trivial to implement, but it seems to work (it also smart enough to detect if + the same activity has been relogged etc. etc.).</p> <p><strong><span class="caps">WARNING</span>:</strong> <br /> -<em>Using this directive with a large dataset may cause RedBook to take some time before delivering the result, due to the amount of iterations to perform. Use with care.</em></p> + <em>Using this directive with a large dataset may cause RedBook to take some time before delivering the result, due + to the amount of iterations to perform. Use with care.</em> +</p> <h3>:completed</h3> -<p>Executing <code>:select :completed :from today</code> will return all the activities logged today which have been completed.</p> +<p>Executing <code>:select :completed :from today</code> will return all the activities logged today which have been + completed.</p> <h2>Windows Installer</h2> -<p>I decided to spend some time (half an hour) and create a proper setup file for Windows using InnoSetup. The setup will take care of almost everything for you, so you have no excuse not to try RedBook because it&#8217;s not user-friendly to install!</p> +<p>I decided to spend some time (half an hour) and create a proper setup file for Windows using InnoSetup. The setup + will take care of almost everything for you, so you have no excuse not to try RedBook because it's not user-friendly + to install!</p> <p>Check out the <a href="http://redbook.h3rald.com">manual</a> for more details.</p> <h2>RubyForge Project</h2> -<p>Finally, I registered a new <a href="http://rubyforge.org/projects/redbook/">RubyForge Project</a> for RedBook, which include a public <span class="caps">SVN</span> repository updated every week (Assembla doesn&#8217;t allow anonymous checkouts, unfortunately).<br /> -This project will also host the official RedBook Gem, scheduled for the 1.0 release.</p> -<p style="text-align:center;"><strong><a href="http://www.assembla.com/spaces/files/redbook"><span class="caps">DOWNLOAD</span></a> | <a href="http://redbook.h3rald.com/"><span class="caps">MANUAL</span></a></strong></p> +<p>Finally, I registered a new <a href="http://rubyforge.org/projects/redbook/">RubyForge Project</a> for RedBook, which + include a public <span class="caps">SVN</span> repository updated every week (Assembla doesn't allow anonymous + checkouts, unfortunately).<br /> + This project will also host the official RedBook Gem, scheduled for the 1.0 release.</p> +<p style="text-align:center;"><strong><a href="http://www.assembla.com/spaces/files/redbook"><span + class="caps">DOWNLOAD</span></a> | <a href="http://redbook.h3rald.com/"><span + class="caps">MANUAL</span></a></strong></p>
M contents/articles/redbook-050-released.htmlcontents/articles/redbook-050-released.html

@@ -4,43 +4,66 @@ content-type: article

timestamp: 1197788820 tags: "opensource|productivity|redbook|ruby" ----- -<p>This new beta release of RedBook introduces quite a few changes when it comes to configuration and setup. Here&#8217;s some highlights&#8230;h3. Regexp changes</p> -<p>It is now necessary to enter &#8220;proper&#8221; regular expressions for <code>:select</code>. Proper means between slashes, like the following:</p> +<p>This new beta release of RedBook introduces quite a few changes when it comes to configuration and setup. Here's some + highlights&#8230;h3. Regexp changes</p> +<p>It is now necessary to enter &#8220;proper&#8221; regular expressions for <code>:select</code>. Proper means between + slashes, like the following:</p> <ul> <li>/Work Day/</li> <li>/mail/i</li> </ul> -<p>I changed this in order to support case-insensitive searches using the <code>i</code> switch. This makes queries much more powerful.</p> +<p>I changed this in order to support case-insensitive searches using the <code>i</code> switch. This makes queries much + more powerful.</p> <h3>Variables</h3> -<p>A new, interesting feature I decided to introduce in this release is <em>variables</em>. For now you define them inside your rbconfig.yml file, like this:</p> -<div class='text'><pre><code>:var_monday_morning: "monday at 8 am" +<p>A new, interesting feature I decided to introduce in this release is <em>variables</em>. For now you define them + inside your rbconfig.yml file, like this:</p> +<div class='text'> + <pre><code>:var_monday_morning: "monday at 8 am" :var_friday_evening: "friday at 8 pm" -:var_week_report: ":select :duration :from :%monday_morning :to :%friday_evening"</code></pre></div><p>In this way, every time you type in :%week_report in RedBook, it will expand to: <code>:select :duration :from monday at 8 am :to friday at 8 pm</code>. By the way, completion is supported, so you&#8217;ll only have to type in something like <code>:%we</code> and hit <tab>.</p> -<p>It is possible to define variables as <code>:var_&lt;something&gt;</code> in the rbconfig.yml file and then used them inside RedBook as <code>:%&lt;something&gt;</code>.</p> +:var_week_report: ":select :duration :from :%monday_morning :to :%friday_evening"</code></pre> +</div> +<p>In this way, every time you type in :%week_report in RedBook, it will expand to: + <code>:select :duration :from monday at 8 am :to friday at 8 pm</code>. By the way, completion is supported, so + you'll only have to type in something like <code>:%we</code> and hit <tab>.</p> +<p>It is possible to define variables as <code>:var_&lt;something&gt;</code> in the rbconfig.yml file and then used them + inside RedBook as <code>:%&lt;something&gt;</code>.</p> <h3>New Operations</h3> <p>Five new operations have been added:</p> <h4>:blank</h4> <p>This will blank your current log after asking you if you really want to do so.</p> <h4>:restore</h4> -<p>This operation will overwrite your current log with the last saved backup. Like with the <code>:blank</code> operation, you&#8217;re asked if you really want to proceed or not.</p> +<p>This operation will overwrite your current log with the last saved backup. Like with the <code>:blank</code> + operation, you're asked if you really want to proceed or not.</p> <h4>:archive</h4> -<p>By typing <code>:archive</code>, the current log file will be archived to your <code>:archives_folder:</code> directory specified in the rbconfig.yml file (similarly, it is now possible to specify a :backups_folder: for your logs&#8217; backup files).</p> +<p>By typing <code>:archive</code>, the current log file will be archived to your <code>:archives_folder:</code> + directory specified in the rbconfig.yml file (similarly, it is now possible to specify a :backups_folder: for your + logs' backup files).</p> <h4>:dataset</h4> <p>A simple operation to display the messages inthe current dataset.</p> <h4>:dump</h4> -<p>This operation will dump the output of the last <code>:select</code> operation to a text file. Useful for saving the average, total time and duration of a set of activities.</p> +<p>This operation will dump the output of the last <code>:select</code> operation to a text file. Useful for saving the + average, total time and duration of a set of activities.</p> <h3>Portable edition</h3> -<p>Some Windows users will definitely love this. I finally found an easy way to run RedBook confined within the current directory, by using a simple <code>start.bat</code> batch file to set the <span><span class="caps">INPUTRC</span></span> and <span><span class="caps">HOME</span></span> variables temporarily to the path to the .inputrc file and the directory of RedBook executable. This makes RedBook 100% portable and suitable to be used on <span class="caps">USB</span> sticks &amp;similar.</p> -<p style="text-align:center;"><strong><a href="http://redbook.googlecode.com/files/RedBook-0.5_Win32-portable.zip">Get RedBook Portable</a></strong></p> +<p>Some Windows users will definitely love this. I finally found an easy way to run RedBook confined within the current + directory, by using a simple <code>start.bat</code> batch file to set the <span><span + class="caps">INPUTRC</span></span> and <span><span class="caps">HOME</span></span> variables temporarily to + the path to the .inputrc file and the directory of RedBook executable. This makes RedBook 100% portable and suitable + to be used on <span class="caps">USB</span> sticks &amp;similar.</p> +<p style="text-align:center;"><strong><a href="http://redbook.googlecode.com/files/RedBook-0.5_Win32-portable.zip">Get + RedBook Portable</a></strong></p> <h3>New Development Page</h3> -<p>I decided to move the primary RedBook repository from <a href="http://www.assembla.org">Assembla</a> to Google Code. Why? Well, nothing wrong with Assembla per se, I still think it&#8217;s an excellent free service to host your public <em>and private</em> projects, but Google Code is faster and offers only the features I need:</p> +<p>I decided to move the primary RedBook repository from <a href="http://www.assembla.org">Assembla</a> to Google Code. + Why? Well, nothing wrong with Assembla per se, I still think it's an excellent free service to host your public + <em>and private</em> projects, but Google Code is faster and offers only the features I need:</p> <ul> <li>Public <span class="caps">SVN</span> repository access</li> <li>Simple-to-use issue tracker</li> <li>Very nicely developed downloads section, with download counts, and &#8220;normal&#8221; filenames.</li> </ul> -<p>So here&#8217;s the new RedBook Development Home:</p> -<p style="text-align:center;"><strong><a href="http://code.google.com/p/redbook/">http://code.google.com/p/redbook/</a></strong></p> -<p>Additionally I also setup a <a href="http://groups.google.com/group/redbook-support/">RedBook Support Google Group</a>, so if you have any question concerning the program, you know where to go!</p> +<p>So here's the new RedBook Development Home:</p> +<p style="text-align:center;"><strong><a + href="http://code.google.com/p/redbook/">http://code.google.com/p/redbook/</a></strong></p> +<p>Additionally I also setup a <a href="http://groups.google.com/group/redbook-support/">RedBook Support Google + Group</a>, so if you have any question concerning the program, you know where to go!</p>
M contents/articles/redbook.htmlcontents/articles/redbook.html

@@ -4,82 +4,128 @@ content-type: article

timestamp: 1191067500 tags: "ruby|productivity|software|tools|redbook" ----- -<p>Logging your daily activities is important. If you don&#8217;t believe me you&#8217;d better check at least these three posts on LifeHacker, which feature different scripts and applications:</p> +<p>Logging your daily activities is important. If you don't believe me you'd better check at least these three posts on + LifeHacker, which feature different scripts and applications:</p> <ul> - <li><a href="http://lifehacker.com/software/top/geek-to-live--quick+log-your-work-day-189772.php">QuickLogger</a></li> - <li><a href="http://lifehacker.com/software/windows/log-your-workday-from-the-system-tray-with-life-logger-285602.php">Life Logger</a></li> - <li><a href="http://lifehacker.com/software/featured-windows-download/log-your-workday-with-quicklogger-2-302932.php">QuickLogger 2</a></li> + <li><a href="http://lifehacker.com/software/top/geek-to-live--quick+log-your-work-day-189772.php">QuickLogger</a> + </li> + <li><a + href="http://lifehacker.com/software/windows/log-your-workday-from-the-system-tray-with-life-logger-285602.php">Life + Logger</a></li> + <li><a + href="http://lifehacker.com/software/featured-windows-download/log-your-workday-with-quicklogger-2-302932.php">QuickLogger + 2</a></li> </ul> -<p>I had a look at each one of them, and I believe they are quite useful, although I didn&#8217;t really find what I was looking for. Why? Well, for example:</p> +<p>I had a look at each one of them, and I believe they are quite useful, although I didn't really find what I was + looking for. Why? Well, for example:</p> <ul> - <li>I don&#8217;t believe a <span class="caps">GUI</span> is necessary &#8212; you&#8217;d better off with just a shortcut key or command to run from Launchy or QuickSilver, that&#8217;s much faster.</li> - <li>They just log timestamped messages on a file, there&#8217;s no real way to search through them and display them except by using a test editor</li> + <li>I don't believe a <span class="caps">GUI</span> is necessary &#8212; you'd better off with just a shortcut key + or command to run from Launchy or QuickSilver, that's much faster.</li> + <li>They just log timestamped messages on a file, there's no real way to search through them and display them except + by using a test editor</li> <li>They are Windows only &#8212; not that it matters for me, but others may not be happy about it.</li> </ul> -<p>That&#8217;s why I thought I&#8217;d roll out my own: meet <a href="http://www.assembla.com/space/redbook">RedBook</a>.<br /> -Let me say it&#8217;s nothing fancy: I&#8217;m not a full-time programmer but I do like playing with Ruby during my lunch breaks at work, so that&#8217;s why RedBook is just a humble, tiny Ruby script. This automatically makes it cross-platform: you can install Ruby very easily on Linux &amp; alikes, Mac OS X and Windows. Furthermore, if you are on Windows and for some weird reason you don&#8217;t want to install Ruby, you can just try out the packed <span class="caps">EXE</span> file (made with RubyScript2Exe) &#8212; it&#8217;s about 2MB, but you won&#8217;t need anything else.</p> +<p>That's why I thought I'd roll out my own: meet <a href="http://www.assembla.com/space/redbook">RedBook</a>.<br /> + Let me say it's nothing fancy: I'm not a full-time programmer but I do like playing with Ruby during my lunch breaks + at work, so that's why RedBook is just a humble, tiny Ruby script. This automatically makes it cross-platform: you + can install Ruby very easily on Linux &amp; alikes, Mac OS X and Windows. Furthermore, if you are on Windows and for + some weird reason you don't want to install Ruby, you can just try out the packed <span class="caps">EXE</span> file + (made with RubyScript2Exe) &#8212; it's about 2MB, but you won't need anything else.</p> <h3>How It Works</h3> -<p>The program uses two <span class="caps">YAML</span> files, one for configuration, which must reside in the same directory as redbook.rb (or redboo.exe) and one for the log itself, which you can place anywhere, provided that you edit the configuration file accordingly. For information on how to install RedBook and how to configure it, you can check the manual.html (powered by <a href="http://www.tiddlywiki.com">TiddlyWiki</a>) file provided with the program or <a href="http://redbook.h3rald.com">browse it online</a>.</p> -<p>When started, RedBook will load both the configuration file (config.yml) and <em>the whole log file</em> into memory &#8212; it&#8217;s not a big deal, considering that they are only text files after all. I did a test with a log of quite a few MBs, and it was fine.</p> -<p>You can then start input commands right away, following a few sample rules. RedBook has a (very) rudimentary parser which is able to detect keywords, i.e. alphabetic strings prepended with a colon. RedBook commands look like this:</p> +<p>The program uses two <span class="caps">YAML</span> files, one for configuration, which must reside in the same + directory as redbook.rb (or redboo.exe) and one for the log itself, which you can place anywhere, provided that you + edit the configuration file accordingly. For information on how to install RedBook and how to configure it, you can + check the manual.html (powered by <a href="http://www.tiddlywiki.com">TiddlyWiki</a>) file provided with the program + or <a href="http://redbook.h3rald.com">browse it online</a>.</p> +<p>When started, RedBook will load both the configuration file (config.yml) and <em>the whole log file</em> into memory + &#8212; it's not a big deal, considering that they are only text files after all. I did a test with a log of quite a + few MBs, and it was fine.</p> +<p>You can then start input commands right away, following a few sample rules. RedBook has a (very) rudimentary parser + which is able to detect keywords, i.e. alphabetic strings prepended with a colon. RedBook commands look like this: +</p> <ul> <li><strong>&#58;log</strong> This message will be logger <strong>&#58;tags</strong> tag1 tag2</li> <li><strong>&#58;select</strong> <strong>&#58;last</strong> 15 <strong>&#58;since</strong> January</li> <li><strong>&#58;save</strong> /home/h3rald/backup.yml</li> </ul> -<p>If everything goes OK, RedBook will reply with some sort of response, an acknowledgement, a list of messages, etc.</p> +<p>If everything goes OK, RedBook will reply with some sort of response, an acknowledgement, a list of messages, etc. +</p> <p>Simple.</p> -<p>Here&#8217;s basically what the program can do:</p> +<p>Here's basically what the program can do:</p> <ul> - <li>Log any message to the main log file. Messages can be tagged with one or more tags and will be automatically timestamped.</li> - <li>Load/display a list of logged messages on the screen. It is possible to filter messages by specifying a time span, a string to search in the message text, or a list of tags.</li> - <li>Dump loaded messages to a <span class="caps">TXT</span>, <span class="caps">CSV</span> or <span class="caps">YAML</span> file (you can even backup your log saving it to another <span class="caps">YAML</span> file in this way).</li> - <li>Calculate the time elapsed between two or more tasks. Time will be displayed in years, months, weeks, days, hours, minutes and/or seconds as necessary.</li> + <li>Log any message to the main log file. Messages can be tagged with one or more tags and will be automatically + timestamped.</li> + <li>Load/display a list of logged messages on the screen. It is possible to filter messages by specifying a time + span, a string to search in the message text, or a list of tags.</li> + <li>Dump loaded messages to a <span class="caps">TXT</span>, <span class="caps">CSV</span> or <span + class="caps">YAML</span> file (you can even backup your log saving it to another <span + class="caps">YAML</span> file in this way).</li> + <li>Calculate the time elapsed between two or more tasks. Time will be displayed in years, months, weeks, days, + hours, minutes and/or seconds as necessary.</li> </ul> -<p>How? Here&#8217;s a short tutorial&#8230;</p> +<p>How? Here's a short tutorial&#8230;</p> <h3>A Quick RedBook Tutorial</h3> -<p>Let&#8217;s assume you are able to run RedBook on your system by now (if you can&#8217;t find some of the gems which are required for it, you can download them packed in a <span class="caps">ZIP</span> file from <a href="http://www.assembla.com/spaces/files/redbook">here</a>).</p> -<p>Here&#8217;s what happens when you start the program:</p> +<p>Let's assume you are able to run RedBook on your system by now (if you can't find some of the gems which are required + for it, you can download them packed in a <span class="caps">ZIP</span> file from <a + href="http://www.assembla.com/spaces/files/redbook">here</a>).</p> +<p>Here's what happens when you start the program:</p> <p><span style="font-family: 'Bitstream Vera Sans Mono', Monaco, 'Courier New'; font-size: 10px"><br /> -<del>-</del><br /> -RedBook v0.1 &#8211; Copyright &#169; 2007, Fabio Cevasco<br /> -<del>-</del><br /> - <span style="color:blue">&gt;&gt;</span> Loading config file&#8230;<br /> - <span style="color:green">&gt;&gt;</span> Config file loaded.<br /> - <span style="color:blue">&gt;&gt;</span> Loading log file&#8230;<br /> - <span style="color:green">&gt;&gt;</span> Log file loaded.<br /> - <span style="color:blue">&gt;&gt;</span> Ready.<br /> -<span style="color:red">Red</span>Book &gt;&gt;<br /> -</code><br /> -</span></p> -<p>Good. Let&#8217;s start logging something then. Just use the <strong>&#58;log</strong> keyword, followed by a message, and then you can also add the <strong>&#58;tags</strong> keyword followed by space-separated tags, like this:</p> + <del>-</del><br /> + RedBook v0.1 &#8211; Copyright &#169; 2007, Fabio Cevasco<br /> + <del>-</del><br /> + <span style="color:blue">&gt;&gt;</span> Loading config file&#8230;<br /> + <span style="color:green">&gt;&gt;</span> Config file loaded.<br /> + <span style="color:blue">&gt;&gt;</span> Loading log file&#8230;<br /> + <span style="color:green">&gt;&gt;</span> Log file loaded.<br /> + <span style="color:blue">&gt;&gt;</span> Ready.<br /> + <span style="color:red">Red</span>Book &gt;&gt;<br /> + </code><br /> + </span></p> +<p>Good. Let's start logging something then. Just use the <strong>&#58;log</strong> keyword, followed by a message, and + then you can also add the <strong>&#58;tags</strong> keyword followed by space-separated tags, like this:</p> <p><span style="font-family: 'Bitstream Vera Sans Mono', Monaco, 'Courier New'; font-size: 10px"><br /> -<span style="color:red">Red</span>Book &gt;&gt; &#58;log My first message &#58;tags test<br /> - <span style="color:green">&gt;&gt;</span> Logged.<br /> -<span style="color:red">Red</span>Book &gt;&gt; &#58;log This is another message<br /> - <span style="color:green">&gt;&gt;</span> Logged.<br /> -<span style="color:red">Red</span>Book &gt;&gt; &#58;log This is another message &#58;tags test another_test<br /> - <span style="color:green">&gt;&gt;</span> Logged.<br /> -</span></p> -<p>Try waiting a few seconds between each message. These three messages will be appended to the log file. You could open it in an editor, but it&#8217;s normally easier to display them directly inside RedBook, like this:</p> + <span style="color:red">Red</span>Book &gt;&gt; &#58;log My first message &#58;tags test<br /> + <span style="color:green">&gt;&gt;</span> Logged.<br /> + <span style="color:red">Red</span>Book &gt;&gt; &#58;log This is another message<br /> + <span style="color:green">&gt;&gt;</span> Logged.<br /> + <span style="color:red">Red</span>Book &gt;&gt; &#58;log This is another message &#58;tags test + another_test<br /> + <span style="color:green">&gt;&gt;</span> Logged.<br /> + </span></p> +<p>Try waiting a few seconds between each message. These three messages will be appended to the log file. You could open + it in an editor, but it's normally easier to display them directly inside RedBook, like this:</p> <p><span style="font-family: 'Bitstream Vera Sans Mono', Monaco, 'Courier New'; font-size: 10px"><br /> -<span style="color:red">Red</span>Book &gt;&gt; &#58;select<br /> - <span style="color:yellow">1</span> <span style="color:blue">Sat Sep 29 2007 &#8211; 09:09:32 PM</span> My first message <span style="color:cyan">[</span><span style="color:yellow">test</span><span style="color:cyan">]</span><br /> - <span style="color:yellow">2</span> <span style="color:blue">Sat Sep 29 2007 &#8211; 09:10:51 PM</span> This is another message<br /> - <span style="color:yellow">3</span> <span style="color:blue">Sat Sep 29 2007 &#8211; 09:11:45 PM</span> This is another message <span style="color:cyan">[</span><span style="color:yellow">test</span><span style="color:cyan">]</span><span style="color:cyan">[</span><span style="color:yellow">another_test</span><span style="color:cyan">]</span><br /> - <span style="color:green">&gt;&gt;</span> 3 messages loaded.<br /> -</span></p> -<p>Easy. What if you have hundreds of messages? Well, the &#58;select operation can take an optional search string, or you can tell RedBook to load only those messages tagged with one or more specific tags, like this:</p> + <span style="color:red">Red</span>Book &gt;&gt; &#58;select<br /> + <span style="color:yellow">1</span> <span style="color:blue">Sat Sep 29 2007 &#8211; 09:09:32 PM</span> My first + message <span style="color:cyan">[</span><span style="color:yellow">test</span><span + style="color:cyan">]</span><br /> + <span style="color:yellow">2</span> <span style="color:blue">Sat Sep 29 2007 &#8211; 09:10:51 PM</span> This is + another message<br /> + <span style="color:yellow">3</span> <span style="color:blue">Sat Sep 29 2007 &#8211; 09:11:45 PM</span> This is + another message <span style="color:cyan">[</span><span style="color:yellow">test</span><span + style="color:cyan">]</span><span style="color:cyan">[</span><span + style="color:yellow">another_test</span><span style="color:cyan">]</span><br /> + <span style="color:green">&gt;&gt;</span> 3 messages loaded.<br /> + </span></p> +<p>Easy. What if you have hundreds of messages? Well, the &#58;select operation can take an optional search string, or + you can tell RedBook to load only those messages tagged with one or more specific tags, like this:</p> <p><span style="font-family: 'Bitstream Vera Sans Mono', Monaco, 'Courier New'; font-size: 10px"><br /> -<span style="color:red">Red</span>Book &gt;&gt; &#58;select &#58;tags test<br /> - <span style="color:yellow">1</span> <span style="color:blue">Sat Sep 29 2007 &#8211; 09:09:32 PM</span> My first message <span style="color:cyan">[</span><span style="color:yellow">test</span><span style="color:cyan">]</span><br /> - <span style="color:yellow">3</span> <span style="color:blue">Sat Sep 29 2007 &#8211; 09:11:45 PM</span> This is another message <span style="color:cyan">[</span><span style="color:yellow">test</span><span style="color:cyan">]</span><span style="color:cyan">[</span><span style="color:yellow">another_test</span><span style="color:cyan">]</span><br /> - <span style="color:green">&gt;&gt;</span> 2 messages loaded.<br /> -</span></p> + <span style="color:red">Red</span>Book &gt;&gt; &#58;select &#58;tags test<br /> + <span style="color:yellow">1</span> <span style="color:blue">Sat Sep 29 2007 &#8211; 09:09:32 PM</span> My first + message <span style="color:cyan">[</span><span style="color:yellow">test</span><span + style="color:cyan">]</span><br /> + <span style="color:yellow">3</span> <span style="color:blue">Sat Sep 29 2007 &#8211; 09:11:45 PM</span> This is + another message <span style="color:cyan">[</span><span style="color:yellow">test</span><span + style="color:cyan">]</span><span style="color:cyan">[</span><span + style="color:yellow">another_test</span><span style="color:cyan">]</span><br /> + <span style="color:green">&gt;&gt;</span> 2 messages loaded.<br /> + </span></p> <p>Or you can use the &#58;from and/or &#58;to keywords to specify a certain time frame, like this:</p> <p>&#58;select &#58;tags test <strong>&#58;from ten minutes ago</strong></p> <p>&#58;select <strong>&#58;from last week &#58;to 2 days ago</strong></p> -<p>RedBook includes a very nice &#8220;natural language date/time parser&#8221;, <a href="http://chronic.rubyforge.org/">Chronic</a> which is able to convert sentences like the following into Ruby Time objects:</p> +<p>RedBook includes a very nice &#8220;natural language date/time parser&#8221;, <a + href="http://chronic.rubyforge.org/">Chronic</a> which is able to convert sentences like the following into Ruby + Time objects:</p> <ul> <li>6 in the morning</li> <li>friday 1pm</li>

@@ -87,32 +133,54 @@ <li>sat 7 in the evening</li>

<li>today</li> <li>yesterday at 4:00</li> </ul> -<p>It&#8217;s not perfect (and it&#8217;s in pre-alpha as well), but it does the job, for what I can see, and it makes it very easy and fast to specify timeframes.</p> -<p>After executing a &#58;select command, two other operations can be performed on the loaded messages: <strong>&#58;calc</strong> and <strong>&#58;save</strong>.</p> -<p>&#58;calc calculates the exact amount of time elapsed between two or more tasks. Do you remember the numbers on the far left of each message? Think them as temporary IDs for the actual messages, and you can use them to select specific tasks when executing the &#58;calc operation:</p> +<p>It's not perfect (and it's in pre-alpha as well), but it does the job, for what I can see, and it makes it very easy + and fast to specify timeframes.</p> +<p>After executing a &#58;select command, two other operations can be performed on the loaded messages: + <strong>&#58;calc</strong> and <strong>&#58;save</strong>.</p> +<p>&#58;calc calculates the exact amount of time elapsed between two or more tasks. Do you remember the numbers on the + far left of each message? Think them as temporary IDs for the actual messages, and you can use them to select + specific tasks when executing the &#58;calc operation:</p> <p><span style="font-family: 'Bitstream Vera Sans Mono', Monaco, 'Courier New'; font-size: 10px"><br /> -<span style="color:red">Red</span>Book &gt;&gt; &#58;calc 1 3<br /> - <span style="color:yellow">1</span> <span style="color:blue">Sat Sep 29 2007 &#8211; 09:09:32 PM</span> My first message <span style="color:cyan">[</span><span style="color:yellow">test</span><span style="color:cyan">]</span><br /> - <del>-</del> 2 minutes and 13 seconds.<br /> - <span style="color:yellow">3</span> <span style="color:blue">Sat Sep 29 2007 &#8211; 09:11:45 PM</span> This is another message <span style="color:cyan">[</span><span style="color:yellow">test</span><span style="color:cyan">]</span><span style="color:cyan">[</span><span style="color:yellow">another_test</span><span style="color:cyan">]</span><br /> -</span></p> -<p>Similarly, if no IDs are specified, &#58;calc calculates the time difference between each message and the previous:</p> + <span style="color:red">Red</span>Book &gt;&gt; &#58;calc 1 3<br /> + <span style="color:yellow">1</span> <span style="color:blue">Sat Sep 29 2007 &#8211; 09:09:32 PM</span> My first + message <span style="color:cyan">[</span><span style="color:yellow">test</span><span + style="color:cyan">]</span><br /> + <del>-</del> 2 minutes and 13 seconds.<br /> + <span style="color:yellow">3</span> <span style="color:blue">Sat Sep 29 2007 &#8211; 09:11:45 PM</span> This is + another message <span style="color:cyan">[</span><span style="color:yellow">test</span><span + style="color:cyan">]</span><span style="color:cyan">[</span><span + style="color:yellow">another_test</span><span style="color:cyan">]</span><br /> + </span></p> +<p>Similarly, if no IDs are specified, &#58;calc calculates the time difference between each message and the previous: +</p> <p><span style="font-family: 'Bitstream Vera Sans Mono', Monaco, 'Courier New'; font-size: 10px"><br /> -<span style="color:red">Red</span>Book &gt;&gt; &#58;calc<br /> - <span style="color:yellow">1</span> <span style="color:blue">Sat Sep 29 2007 &#8211; 09:09:32 PM</span> My first message <span style="color:cyan">[</span><span style="color:yellow">test</span><span style="color:cyan">]</span><br /> <br /> - <del>-</del> 1 minute and 19 seconds.<br /> <br /> - <span style="color:yellow">2</span> <span style="color:blue">Sat Sep 29 2007 &#8211; 09:10:51 PM</span> This is another message<br /> <br /> - <del>-</del> 54 seconds.<br /> <br /> - <span style="color:yellow">3</span> <span style="color:blue">Sat Sep 29 2007 &#8211; 09:11:45 PM</span> This is another message <span style="color:cyan">[</span><span style="color:yellow">test</span><span style="color:cyan">]</span><span style="color:cyan">[</span><span style="color:yellow">another_test</span><span style="color:cyan">]</span><br /> - </span></p> -<p>Finally, you can save loaded messages to a <span class="caps">TXT</span>, <span class="caps">YAML</span> or <span class="caps">CSV</span> file, as follows:</p> + <span style="color:red">Red</span>Book &gt;&gt; &#58;calc<br /> + <span style="color:yellow">1</span> <span style="color:blue">Sat Sep 29 2007 &#8211; 09:09:32 PM</span> My first + message <span style="color:cyan">[</span><span style="color:yellow">test</span><span + style="color:cyan">]</span><br /> <br /> + <del>-</del> 1 minute and 19 seconds.<br /> <br /> + <span style="color:yellow">2</span> <span style="color:blue">Sat Sep 29 2007 &#8211; 09:10:51 PM</span> This is + another message<br /> <br /> + <del>-</del> 54 seconds.<br /> <br /> + <span style="color:yellow">3</span> <span style="color:blue">Sat Sep 29 2007 &#8211; 09:11:45 PM</span> This is + another message <span style="color:cyan">[</span><span style="color:yellow">test</span><span + style="color:cyan">]</span><span style="color:cyan">[</span><span + style="color:yellow">another_test</span><span style="color:cyan">]</span><br /> + </span></p> +<p>Finally, you can save loaded messages to a <span class="caps">TXT</span>, <span class="caps">YAML</span> or <span + class="caps">CSV</span> file, as follows:</p> <p><span style="font-family: 'Bitstream Vera Sans Mono', Monaco, 'Courier New'; font-size: 10px"><br /> -<span style="color:red">Red</span>Book &gt;&gt; &#58;save log.txt<br /> - <span style="color:blue">&gt;&gt;</span> Saving&#8230;<br /> - <span style="color:green">&gt;&gt;</span> Saved dataset to &#8220;log.txt&#8221;<br /> -</span><br /> -h<br /> -If you want to backup your log, you can load all messages and then save them to a <span class="caps">YAML</span> file. Maybe in this case you want to append the <strong>&#58;silent</strong> keyword to the &#58;select command, so that messages won&#8217;t be displayed on the screen.</p> + <span style="color:red">Red</span>Book &gt;&gt; &#58;save log.txt<br /> + <span style="color:blue">&gt;&gt;</span> Saving&#8230;<br /> + <span style="color:green">&gt;&gt;</span> Saved dataset to &#8220;log.txt&#8221;<br /> + </span><br /> + h<br /> + If you want to backup your log, you can load all messages and then save them to a <span class="caps">YAML</span> + file. Maybe in this case you want to append the <strong>&#58;silent</strong> keyword to the &#58;select command, so + that messages won't be displayed on the screen.</p> <h3>Conclusion</h3> -<p>RedBook is just a simple program: it suits my needs for now, but of course there&#8217;s roo for improvement. If you have some useful suggestions, or you want to contribute in some way, feel free to contact me!</p> -<p style="text-align:center;"><a href="http://redbook.h3rald.com">Home Page</a> | <a href="http://code.google.com/p/redbook/">Development</a> | <a href="http://code.google.com/p/redbook/downloads/list">Download</a></p> +<p>RedBook is just a simple program: it suits my needs for now, but of course there's roo for improvement. If you have + some useful suggestions, or you want to contribute in some way, feel free to contact me!</p> +<p style="text-align:center;"><a href="http://redbook.h3rald.com">Home Page</a> | <a + href="http://code.google.com/p/redbook/">Development</a> | <a + href="http://code.google.com/p/redbook/downloads/list">Download</a></p>
M contents/articles/refactoring-ruby-edition-review.htmlcontents/articles/refactoring-ruby-edition-review.html

@@ -5,23 +5,23 @@ timestamp: 1264171236

tags: "ruby|books|review" ----- <p>Refactoring, like testing, is an activity that should be very familiar to all programmers, especially Rubyists. - Actually, programs written in Ruby don&#8217;t need as many refactorings as, say, Java programs. However Rubyists + Actually, programs written in Ruby don't need as many refactorings as, say, Java programs. However Rubyists are traditionally more <span class="caps">TDD</span> oriented and they like writing clear and elegant code.</p> <p><a href="http://www.informit.com/store/product.aspx?isbn=0321603508">Refactoring: Ruby Edition</a> is actually a rewrite of the more revolutionary &#8212; at the time &#8212; <a href="http://www.informit.com/store/product.aspx?isbn=0201485672">Refactoring: Improving the Design of Existing Code</a>, written by Martin Fowler &amp; others to teach Java programmers about refactoring. Jay Fields and others decided to <em>port</em> this historical title to Ruby to fill a gap: there was no authoritative book about - refactoring for this language, so what&#8217;s better than translating the Bible on the subject?</p> -<p>If you already own the Java book you shouldn&#8217;t buy this one. This is not my personal opinion (I never read the - original), it&#8217;s actually written in the Preface of the book itself. I really like honest authors, and luckily - this seems to have become a trend, lately: programmers don&#8217;t like reading bullshit after all. By the - authors&#8217; own admission, this book contains roughly the same material and the same examples of the original + refactoring for this language, so what's better than translating the Bible on the subject?</p> +<p>If you already own the Java book you shouldn't buy this one. This is not my personal opinion (I never read the + original), it's actually written in the Preface of the book itself. I really like honest authors, and luckily + 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="/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&#8217;t look like one: no theory, no padding, you&#8217;re immediately thrown in the middle of the battle, + 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 program is rewritten over and over with changes in bold to teach you what refactoring means. The most intimidating thing is reading names of refactoring techniques capitalized and used in a natural way, like if the reader was

@@ -29,29 +29,29 @@ supposed to know them already. In all fairness though, they are self-explanatory most of the time, e.g. <em>Replace

Array with Object</em>.</p> <p>What makes this chapter even more unusual is the clever usage of white space: <em>before</em> and <em>after</em> code snippets are shown on separate page, which makes it much more immediate to see the changes in code (but it - won&#8217;t work very well if you bought the ebook instead of the hardback).</p> + won't work very well if you bought the ebook instead of the hardback).</p> <p>By contrast, the second chapter <em>Principles in Refactoring</em> is all about theory: it should have been the first - chapter, but it&#8217;s better this way. Here you&#8217;ll learn the basics: a bit of history, when to refactor and + chapter, but it's better this way. Here you'll learn the basics: a bit of history, when to refactor and when not to, and so on. I bet it was taken almost verbatim from the Java book; see for example: <em>&#8220;[&#8230;] If your building APIs for outsid consumption, as <strong>Sun</strong> does [&#8230;]&#8221;</em>.</p> <p>Chapter 3, <em>Bad Smells in Code</em>, is probably the most important and useful chapter in the entire book. - It&#8217;s somethig you should read over and over until you can spot a code smell right after coding.</p> + It's somethig you should read over and over until you can spot a code smell right after coding.</p> <blockquote> <p>&#8220;You should use this chapter and the table on the inside back cover as a way to give you inspiration whn - you&#8217;re not sure what refactorings to do.&#8221;</p> + you're not sure what refactorings to do.&#8221;</p> </blockquote> <p>Precisely what you have to do. Except that there is no table on the inside back cover, so I guess <a href="http://docs.google.com/viewer?url=http://www.industriallogic.com/papers/smellstorefactorings.pdf">this one</a> will have to do. Pity.</p> <p>Chapter 4, <em>Building Tests</em>, is the usual, compulsory chapter about unit testing, i.e. the usual intro to - Test::Unit. As I said, it&#8217;s essential for the book to make sense, but you can safely skip it if you know how + Test::Unit. As I said, it's essential for the book to make sense, but you can safely skip it if you know how to test already.</p> <p>Finally, chapter 5 (<em>Toward a Catalog of Refactoring</em>) is a 2.5 page intro to the bulk of the book, nothing - more than glue to ease the transition. I would have removed it completely, but that&#8217;s because I&#8217;m a + more than glue to ease the transition. I would have removed it completely, but that's because I'm a merciless technical writer I guess.</p> <h3>Diving in</h3> <p>From chapter 6 onwards, specific refactoring techniques are described. Each chapter starts with a brief overview of - the following sections (which should have been a list, but I&#8217;m just being pedantic now), so you know what to + 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

@@ -60,10 +60,10 @@ </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 - easier to understand, but only when it&#8217;s strictly necessary.</p> + easier to understand, but only when it's strictly necessary.</p> <p>Even if the original techniques were though for Java, the authors (in particlar Jay Fields, I guess) do a great job - making sure that the Ruby code doensn&#8217;t look like Java code in disguise: the result of the refactoring always - follows Ruby&#8217;s philosophy and idioms. I particularly liked the following:</p> + making sure that the Ruby code doensn't look like Java code in disguise: the result of the refactoring always + follows Ruby's philosophy and idioms. I particularly liked the following:</p> <ul> <li>Replace Dynamic Receptor with Dynamic Method Definition (Chapter 6), a nice example of metaprogramming.</li> <li>Decompose Conditional/Recompose Conditional (Chapter 9), very useful and very common</li>

@@ -71,18 +71,18 @@ <li>Replace Nested Conditional with Guard Clause (Chapter 9), another way to deal with a very common problem with

conditionals</li> <li>Extract Module (Chapter 11), very Rubyesque way to tidy up busy classes</li> </ul> -<p>This doesn&#8217;t mean that <em>every</em> refactoring described in the book is a programmer&#8217;s epiphany, some +<p>This doesn't mean that <em>every</em> refactoring described in the book is a programmer's epiphany, some of the techniques are indeed pretty obvious and some portion of code in need of refactoring indeed smell very, very bad! E.g.:</p> <ul> <li>Inline Class (Chapter 7): Who on Earth would ever create a class containing a single method returning a telephone number?</li> - <li>Replace Magic Number with Symbolic Constant (Chapter 8): Why would you use integers for constants? Didn&#8217;t + <li>Replace Magic Number with Symbolic Constant (Chapter 8): Why would you use integers for constants? Didn't Matz give us Symbols to avoid just that?</li> </ul> <h3>The big picture</h3> <p>By the end of chapter 11 you should be familiar with nearly all the best possible way to get rid of code smells. - That&#8217;s all good, but what happens if <em>the entire program</em> stinks? Chapter 12 (<em>Big + That's all good, but what happens if <em>the entire program</em> stinks? Chapter 12 (<em>Big Refactorings</em>) claims to have some answers to some common pitfalls. The techniques defined in this chapter are by no means sufficient to solve all problems caused by bad design, but they can help especially to rewrite legacy code, or programs developed by Ruby newbies:</p>

@@ -93,7 +93,7 @@ <li>Separate domain from presentation</li>

<li>Extract hierarchy</li> </ul> <p>They are basically all about reducing bloat and unnecessary complexity, and &#8212; to me, that is &#8212; they all - sounded pretty obvious. <em>Of course</em> I&#8217;m going to separate domain from presentation! Didn&#8217;t Rails + 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.

@@ -102,12 +102,12 @@ <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> <p>This and <a href="/articles/design-patterns-in-ruby-review/">Design Patterns in Ruby</a> are now my favorite Ruby - books. I believe they complete each other: Russ Olsen&#8217;s book is more about designing your programs properly + books. I believe they complete each other: Russ Olsen's book is more about designing your programs properly from the start, while <em>Refactoring: Ruby Edition</em> can help to make things better at a lower level. <br /> - Ruby developers don&#8217;t need to refactor as much as Java developers, mainly because of Ruby itself, + Ruby developers don't need to refactor as much as Java developers, mainly because of Ruby itself, nevertheless, this is an excellent read for anyone who wants to get serious about programming in Ruby, and is determined to do so by following the Ruby Way.</p> -<p>I&#8217;ll definitely keep this book near me when I&#8217;m coding: I do believe it is much more helpful when you +<p>I'll definitely keep this book near me when I'm coding: I do believe it is much more helpful when you start using it as a reference, when you already read about all the refactoring techniques and want to put them in - practice. Also, I&#8217;ll probably re-read chapter 3 on a regular basis, to get accustomed to recognize code + practice. Also, I'll probably re-read chapter 3 on a regular basis, to get accustomed to recognize code smells, and deal with them accordingly.</p>
M contents/articles/reflections-on-management.htmlcontents/articles/reflections-on-management.html

@@ -10,17 +10,17 @@

<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&#8217;t technically <em>manage</em> a whole team yet (damn economic crisis!), someday I + 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&#8217;s short, after all, I&#8217;ll probably read it in a couple of weeks and move on</em> &mdash; I + <p><em>It's short, after all, I'll probably read it in a couple of weeks and move on</em> &mdash; 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&#8217;s a short but very dense + 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 &mdash; of <em>anything</em>: <q>Your - Software Projects, Your Teams, Your Boss, and Yourself</q>, as the book subtitle says. It doesn&#8217;t + Software Projects, Your Teams, Your Boss, and Yourself</q>, as the book subtitle says. It doesn't &#8220;just&#8221; 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&#8230;</p>

@@ -31,23 +31,25 @@ <section class="section">

<header> <h1 id="h_1" class="toc">About Watts S. Humphrey</h1> </header> - <p>Generally, I don&#8217;t bother writing anything about the authors in my reviews: you can easily find this - kind of information online if you want to. I&#8217;ll make an exception in this case, you&#8217;ll + <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&#8217;s often referred to as <em>The Father of Software Quality</em>. He worked at + 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> + 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 &mdash; 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> + posthumously. + </p> <p>Watts S. Humphrey <a href="http://www.sei.cmu.edu/newsitems/Humphrey_obituary.cfm">died</a> on October 28, 2010.</p>

@@ -56,13 +58,13 @@ <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&#8217;s work + <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&#8217;s Technical Publications Team.</p> + 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&#8217;s touch simply by flicking through the pages of the book when I first got it: + <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

@@ -115,14 +117,15 @@ <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&#8217;t</em> be), this is probably one of the best and to-the-point overviews you&#8217;ll - ever find, written by the man who almost came up with the concept.</p> + <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&#8217;re working in an <em>agile</em> team, you shouldn&#8217;t spend a + <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&#8217;t + 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>

@@ -133,24 +136,24 @@ <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&#8217;s concept of <em>Jelled + 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&#8217;s amazing how a lifetime of experience is + <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&#8217;s high school wrestling coach Umbach is a classic example of a truly + <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>&#8220;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&#8217;s dedication, commitment and energy were amazing, but what I found most inspiring was + 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.&quot;

@@ -163,16 +166,16 @@ <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&#8217;t matter if you want to pretend otherwise: as soon as you become a team leader and you - have to deal with management, you&#8217;ll have to deal with complex internal politics.</p> - <p>This chapter is about learing to be pragmatically diplomatic and deal with management. It&#8217;s about + 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&#8217;s no silver bullet: I appreciated the honesty of the author when providing solutions. Section + <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&#8217;re on a project and it&#8217;s headeing south. While everubody is trying their hardest, and - you&#8217;re doing your level best to help, you can feel it in your bones: the project is doomed to + <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>

@@ -180,7 +183,7 @@ <li>Look for another job.</li>

<li>Try to fix the problems.</li> </ol> </blockquote> - <p>That&#8217;s right. Look for another job. That almost made me laugh, but it made me understand that in + <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>
M contents/articles/review-services.htmlcontents/articles/review-services.html

@@ -4,11 +4,25 @@ content-type: article

timestamp: 1197631440 tags: "review|website|personal|tools|books" ----- -<p>When it comes to software, I definitely like to try out new things. My collegues takes the piss out of me because every <del>week</del> day I come up with &#8220;some new tool they <em>have</em> to start using&#8221; and so on.<br /> -As a matter of fact, I like reviewing software as well. I enjoy writing and analyzing new things, evaluating all the new possibilities they may offer, and I also tend to have a rather critical eye for what doesn&#8217;t <em>feel</em> right. I&#8217;ll use a tool for months but still try out new ones which claim to do the same thing — but better — as they come out.<br /> -Unfortunately — or fortunately, depends how you look at it — when it comes to software, there are very few <em>silver bullets</em>, and things keep changing: that&#8217;s the way it is and the way it will be.</p> -<p>I must try to write up a page (and ideally update it regularly, that&#8217;s the hard part) listing all the tools I use, at some point&#8230; but at any rate, if you coded some new app you think kicks ass or you found a hidden jewel in the labyrinth of freeware, just let me know: I&#8217;ll definitely try it out, and if it&#8217;s worth a post I&#8217;ll blog about it.</p> -<p><strong>The same applies to books</strong>, actually, as I like reading, especially those which are related to Ruby or programming, nowadays.</p> -<p>The cost of such reviews and articles? Depends! Certainly I wouldn&#8217;t mind donations or some compensation of some form, especially from publishers or software companies. It may be money, books, software or even nothing: it really depends on what I have to review.<br /> -Please be aware that I am <strong>not</strong> doing this full time, and I already have a job and a fiancée to look after, but I&#8217;ll do my best to publish as much as I can on my site or even elsewhere elsewhere [Note: on e-zines, magazines &amp; similar, not on your brother&#8217;s friend&#8217;s mother-in-law&#8217;s crappy blog!].</p> +<p>When it comes to software, I definitely like to try out new things. My collegues takes the piss out of me because + every <del>week</del> day I come up with &#8220;some new tool they <em>have</em> to start using&#8221; and so + on.<br /> + As a matter of fact, I like reviewing software as well. I enjoy writing and analyzing new things, evaluating all the + new possibilities they may offer, and I also tend to have a rather critical eye for what doesn't <em>feel</em> + right. I'll use a tool for months but still try out new ones which claim to do the same thing — but better — as they + come out.<br /> + Unfortunately — or fortunately, depends how you look at it — when it comes to software, there are very few + <em>silver bullets</em>, and things keep changing: that's the way it is and the way it will be.</p> +<p>I must try to write up a page (and ideally update it regularly, that's the hard part) listing all the tools I use, at + some point&#8230; but at any rate, if you coded some new app you think kicks ass or you found a hidden jewel in the + labyrinth of freeware, just let me know: I'll definitely try it out, and if it's worth a post I'll blog about it. +</p> +<p><strong>The same applies to books</strong>, actually, as I like reading, especially those which are related to Ruby + or programming, nowadays.</p> +<p>The cost of such reviews and articles? Depends! Certainly I wouldn't mind donations or some compensation of some + form, especially from publishers or software companies. It may be money, books, software or even nothing: it really + depends on what I have to review.<br /> + Please be aware that I am <strong>not</strong> doing this full time, and I already have a job and a fiancée to look + after, but I'll do my best to publish as much as I can on my site or even elsewhere elsewhere [Note: on e-zines, + magazines &amp; similar, not on your brother's friend's mother-in-law's crappy blog!].</p> <p>For any inquiries, contact me (<strong>h3rald [—at—] h3rald.com</strong>).</p>
M contents/articles/ror-and-cakephp.htmlcontents/articles/ror-and-cakephp.html

@@ -5,9 +5,9 @@ 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&#8217; + <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&#8217;s syntax and way of doing things is known to be much more + 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 />
M contents/articles/ruby-lang-italian.htmlcontents/articles/ruby-lang-italian.html

@@ -5,62 +5,142 @@ timestamp: 1226756880

tags: "ruby" ----- <p><a href="#italian-version">[Vai alla versione italiana]</a></p> -<p>I am very pleased to announce that the official site of the Ruby programming language is now available in Italian:</p> +<p>I am very pleased to announce that the official site of the Ruby programming language is now available in Italian: +</p> <p><strong><a href="www.ruby-lang.org/it/">www.ruby-lang.org/it/</a></strong></p> <h3>In the beginning&#8230;</h3> -<p>It all started in July 2007, when after a closer look at the site I discovered that apparently it was not available in Italian! How could it be? There were a lot of translations available, such as French, Spanish, Japanese, Korean&#8230; but no Italian. <br /> -I immediately emailed the webmaster and within a few hours <a href="http://curthibbs.wordpress.com/">Curt Hibbs</a> (hell yes, <a href="http://www.onlamp.com/pub/a/onlamp/2005/01/20/rails.html">that</a> Curt Hibbs!) mailed me the instructions to get me started:</p> +<p>It all started in July 2007, when after a closer look at the site I discovered that apparently it was not available + in Italian! How could it be? There were a lot of translations available, such as French, Spanish, Japanese, + Korean&#8230; but no Italian. <br /> + I immediately emailed the webmaster and within a few hours <a href="http://curthibbs.wordpress.com/">Curt Hibbs</a> + (hell yes, <a href="http://www.onlamp.com/pub/a/onlamp/2005/01/20/rails.html">that</a> Curt Hibbs!) mailed me the + instructions to get me started:</p> <blockquote> -<p>&#8220;[&#8230;] Providing a translation of the Ruby web site would have two parts: 1) the initial translation of the current content, and 2) the ongoing maintenance of the Italian version as new content and news items are added.</p> -<p>This effort will be much more sustainable over the long term if you put together a team of at least three people who would commit to translating and maintaining the site. [&#8230;]&quot;</p> + <p>&#8220;[&#8230;] Providing a translation of the Ruby web site would have two parts: 1) the initial translation of + the current content, and 2) the ongoing maintenance of the Italian version as new content and news items are + added.</p> + <p>This effort will be much more sustainable over the long term if you put together a team of at least three people + who would commit to translating and maintaining the site. [&#8230;]&quot;</p> </blockquote> -<p>&#8230;Why <em>three</em> people to translate &#8220;a few pages&#8221;? That&#8217;s what bugged me at the time: it honestly seemed just a few days work for one person at most. Later on I understood why.<br /> -I wasn&#8217;t the first to volunteer for the Italian translation, actually: <strong><a href="http://www.raulparolari.com">Raul Parolari</a></strong> was indeed the first, but he was waiting for another two team members to start, of course.</p> -<p>We eventually persuaded Curt that <em>we could handle it</em> even without a third team member, so we started right away. As a matter of fact, we did manage to translate a lot of stuff within the first week.</p> +<p>&#8230;Why <em>three</em> people to translate &#8220;a few pages&#8221;? That's what bugged me at the time: it + honestly seemed just a few days work for one person at most. Later on I understood why.<br /> + I wasn't the first to volunteer for the Italian translation, actually: <strong><a + href="http://www.raulparolari.com">Raul Parolari</a></strong> was indeed the first, but he was waiting for + another two team members to start, of course.</p> +<p>We eventually persuaded Curt that <em>we could handle it</em> even without a third team member, so we started right + away. As a matter of fact, we did manage to translate a lot of stuff within the first week.</p> <h3>Translating is easy, right?</h3> -<p>Translating feels easy when you are mother tongue in the language you&#8217;re translating into (Italian), and you know fairly well the language you&#8217;re translating from (English): it can&#8217;t possibly hard, right? Nah, a piece of cake. <br /> -Most of the time it&#8217;s fairly easy and fast, too, but things can get a bit more complicated when you stumble upon idioms and tech jargon.</p> -<p>Personlly, I never surf the web in Italian. That&#8217;s a personal choice (I love the English language to an extreme extent), and I&#8217;ve learnt to live with it no matter what people think. I admit that it was hard for me to translate some of the things on the Ruby web site: not because they were hard for me to understand, but because in some cases a translation would simply not do justice to the original text.</p> -<p>Some of the text may sound weird in Italian, especially in the code examples. In the end we choose to translate every bit of code, e.g. <code>puts sentence</code> became <code>puts frase</code> and other equally horrid things. Sometimes I wonder whether we should have just left the original code as it was, but we wanted to make things easier for people who don&#8217;t speak much English at all.</p> +<p>Translating feels easy when you are mother tongue in the language you're translating into (Italian), and you know + fairly well the language you're translating from (English): it can't possibly hard, right? Nah, a piece of cake. + <br /> + Most of the time it's fairly easy and fast, too, but things can get a bit more complicated when you stumble upon + idioms and tech jargon.</p> +<p>Personlly, I never surf the web in Italian. That's a personal choice (I love the English language to an extreme + extent), and I've learnt to live with it no matter what people think. I admit that it was hard for me to translate + some of the things on the Ruby web site: not because they were hard for me to understand, but because in some cases + a translation would simply not do justice to the original text.</p> +<p>Some of the text may sound weird in Italian, especially in the code examples. In the end we choose to translate every + bit of code, e.g. <code>puts sentence</code> became <code>puts frase</code> and other equally horrid things. + Sometimes I wonder whether we should have just left the original code as it was, but we wanted to make things easier + for people who don't speak much English at all.</p> <h3>Stagnation</h3> -<p>Things went quite after the initial excitement, I admit. Both Raul and me more or less stopped translating as time went on, and I am truly and deeply sorry for that. You know how it is: you start off really enthusiastic and then you lose interest, you get involved in other projects, work, family, etc. etc.</p> -<p><strong><a href="http://www.lipsiasoft.com/">Davide D&#8217;Agostino</a></strong> came to our rescue in December 2007. He&#8217;s arguably the &#8220;most Italian&#8221; of the group and he came out with some interesting solutions for some particularly difficult bits of the translation. <br /> -Believe it or not, the 80% of the site was translated by the beginning of 2008: only a few bits were left, but then&#8230; erhm, things went quiet again. I put the translation of the site on my todo list, and I knew it was there all along: &#8220;Oh, yes, I should have a look at Ruby-Lang.org again&#8221; I repeated to myself from time to time.</p> -<p>About two weeks ago I got so pissed off with myself about this that I decided to finally &#8220;get things done&#8221; and translate the few remaining bits, reviewed the lot, got rid of some rough edges, did some minor proofreading and here it is, ready to be browsed by Italians, finally.</p> -<p>The most ironic thing? It took literally a few hours of &#8220;work&#8221; to sort things out&#8230; but nearly a year to finally find the will to do it.</p> +<p>Things went quite after the initial excitement, I admit. Both Raul and me more or less stopped translating as time + went on, and I am truly and deeply sorry for that. You know how it is: you start off really enthusiastic and then + you lose interest, you get involved in other projects, work, family, etc. etc.</p> +<p><strong><a href="http://www.lipsiasoft.com/">Davide D'Agostino</a></strong> came to our rescue in December 2007. He's + arguably the &#8220;most Italian&#8221; of the group and he came out with some interesting solutions for some + particularly difficult bits of the translation. <br /> + Believe it or not, the 80% of the site was translated by the beginning of 2008: only a few bits were left, but + then&#8230; erhm, things went quiet again. I put the translation of the site on my todo list, and I knew it was + there all along: &#8220;Oh, yes, I should have a look at Ruby-Lang.org again&#8221; I repeated to myself from time + to time.</p> +<p>About two weeks ago I got so pissed off with myself about this that I decided to finally &#8220;get things + done&#8221; and translate the few remaining bits, reviewed the lot, got rid of some rough edges, did some minor + proofreading and here it is, ready to be browsed by Italians, finally.</p> +<p>The most ironic thing? It took literally a few hours of &#8220;work&#8221; to sort things out&#8230; but nearly a + year to finally find the will to do it.</p> <h3>What now?</h3> -<p>Now the site is live and we&#8217;ll keep it up-to-date from now on. I sincerely hope it will help bringing more and more Italians closer to the Ruby world. I&#8217;m sure there are plenty of people out there who would have done a much better job than we did, and definitely in a much shorter timeframe&#8230; but hey, we finally did it, after all!</p> -<p>I would like to thank again <strong><a href="http://www.raulparolari.com">Raul Parolari</a></strong> and <strong><a href="http://www.lipsiasoft.com/">Davide D&#8217;Agostino</a></strong> for helping translating the site: I now finally understand why Curt wanted three people on the translation team!</p> -<p>One last thing: if you find any mistake (and there are plenty, I&#8217;m sure) or if you have any suggestion to improve the current translation, don&#8217;t hesitate to <a href="/about/">contact me</a>: I&#8217;ll try to fix things as soon as possible.</p> +<p>Now the site is live and we'll keep it up-to-date from now on. I sincerely hope it will help bringing more and more + Italians closer to the Ruby world. I'm sure there are plenty of people out there who would have done a much better + job than we did, and definitely in a much shorter timeframe&#8230; but hey, we finally did it, after all!</p> +<p>I would like to thank again <strong><a href="http://www.raulparolari.com">Raul Parolari</a></strong> and <strong><a + href="http://www.lipsiasoft.com/">Davide D'Agostino</a></strong> for helping translating the site: I now + finally understand why Curt wanted three people on the translation team!</p> +<p>One last thing: if you find any mistake (and there are plenty, I'm sure) or if you have any suggestion to improve the + current translation, don't hesitate to <a href="/about/">contact me</a>: I'll try to fix things as soon as possible. +</p> <p>Enjoy Ruby, now finally <a href="http://www.ruby-lang.org/it/">in Italian</a> too!</p> <hr /> <p><a name="italian-version"></a></p> <h2>&Egrave; finalmente disponibile la traduzione italiana di Ruby-Lang.org</h2> -<p>Sono veramente contento di annunciare che il sito ufficiale del linguaggio di programmazione Ruby è ora disponibile anche in Italiano:</p> +<p>Sono veramente contento di annunciare che il sito ufficiale del linguaggio di programmazione Ruby è ora disponibile + anche in Italiano:</p> <p><strong><a href="www.ruby-lang.org/it/">www.ruby-lang.org/it/</a></strong></p> <h3>In principio&#8230;</h3> -<p>Tutto incominciò nel luglio del 2007, quando dopo un&#8217;occhiata più da vicino al sito mi accorsi che apparentemente non era disponibile in italiano! Com&#8217;era possibile? Era già tradotto in molte lingue tra cui francese, spagnolo, giapponese, coreano&#8230; ma niente italiano.</p> -<p>Mandai immediatamente un&#8217;email al webmaster, e in poche ore <a href="http://curthibbs.wordpress.com/">Curt Hibbs</a> (già, proprio <a href="http://www.onlamp.com/pub/a/onlamp/2005/01/20/rails.html">quel</a> Curt Hibbs!) mi inviò le istruzioni su come iniziare a tradurre:</p> +<p>Tutto incominciò nel luglio del 2007, quando dopo un'occhiata più da vicino al sito mi accorsi che apparentemente non + era disponibile in italiano! Com'era possibile? Era già tradotto in molte lingue tra cui francese, spagnolo, + giapponese, coreano&#8230; ma niente italiano.</p> +<p>Mandai immediatamente un'email al webmaster, e in poche ore <a href="http://curthibbs.wordpress.com/">Curt Hibbs</a> + (già, proprio <a href="http://www.onlamp.com/pub/a/onlamp/2005/01/20/rails.html">quel</a> Curt Hibbs!) mi inviò le + istruzioni su come iniziare a tradurre:</p> <blockquote> -<p>&#8220;[&#8230;] La traduzione del sito di Ruby è articolata in due parti: 1) la traduzione iniziale degli attuali contenuti e 2) il continuo aggiornamento della versione italiana ogniqualvolta vengono create nuove pagine.</p> -<p>Questo sforzo è molto più sostenibile nel lungo termine se riesci a mettere insieme una squadra di almeno tre persone dedite a tradurre e ad aggiornare il sito. [&#8230;]&quot;</p> + <p>&#8220;[&#8230;] La traduzione del sito di Ruby è articolata in due parti: 1) la traduzione iniziale degli + attuali contenuti e 2) il continuo aggiornamento della versione italiana ogniqualvolta vengono create nuove + pagine.</p> + <p>Questo sforzo è molto più sostenibile nel lungo termine se riesci a mettere insieme una squadra di almeno tre + persone dedite a tradurre e ad aggiornare il sito. [&#8230;]&quot;</p> </blockquote> -<p>&#8230;Perchè <em>tre</em> persone per tradurre &#8220;solo poche pagine&#8221;? Questo quello che mi chiesi in quel momento: sembrava veramente essere una questione di pochi giorni, e sicuramente una persona sarebbe stata più che sufficiente. Successivamente capii perchè tre persone erano necessarie.</p> -<p>Comunque, non ero il primo ad offrirmi volontario per la traduzione italiana: <strong><a href="http://www.raulparolari.com">Raul Parolari</a></strong> si era già fatto avanti, ma stava ancora aspettando altre due persone per poter iniziare, ovviamente.</p> -<p>Alla fine, riuscimmo comunque a persuadere Curt che <em>ce la potevamo fare</em>, anche senza una tersa persona ad aiutarci. Incominciammo a tradurre quindi di buona lena, e di fatto riuscimmo a tradurre molto durante la prima settimana.</p> +<p>&#8230;Perchè <em>tre</em> persone per tradurre &#8220;solo poche pagine&#8221;? Questo quello che mi chiesi in quel + momento: sembrava veramente essere una questione di pochi giorni, e sicuramente una persona sarebbe stata più che + sufficiente. Successivamente capii perchè tre persone erano necessarie.</p> +<p>Comunque, non ero il primo ad offrirmi volontario per la traduzione italiana: <strong><a + href="http://www.raulparolari.com">Raul Parolari</a></strong> si era già fatto avanti, ma stava ancora + aspettando altre due persone per poter iniziare, ovviamente.</p> +<p>Alla fine, riuscimmo comunque a persuadere Curt che <em>ce la potevamo fare</em>, anche senza una tersa persona ad + aiutarci. Incominciammo a tradurre quindi di buona lena, e di fatto riuscimmo a tradurre molto durante la prima + settimana.</p> <h3>Tradurre è facile, non è così?</h3> -<p>Tradurre dall&#8217;inglese all&#8217;italiano sembra facile se sei madrelingua e conosci bene l&#8217;inglese: non può essere difficile, giusto? Facilissimo, ovvio. <br /> -Per la maggior parte è così, di fatto: facile e veloce. Ma le cose tendono a complicarsi un pochettino quando hai a che fare con modi di dire e linguaggio un po&#8217; più tecnico.</p> -<p>Personalmente, non vado mai su siti italiani. &Egrave; una mia scelta personale (mi piace tantissimo la lingua inglese), e ho imparato a non fare caso a quello che gli altri pensano di questa scelta. Devo ammettere che è stato difficile per me tradurre alcune parti del sito di Ruby: non perchè fossero difficili da capire, ma perchè in qualche caso una traduzione non è semplicemente in grado di rendere giustizia al testo originale.</p> -<p>Alcuni pezzi della traduzione, per questa ragione, potrebbero suonare un po&#8217; strani alle orecchie di Italiani d.o.c., specialmente per quanto riguarda gli esempi di codice. Alla fine abbiamo deciso di tradurre la maggior parte del codice (ove possibile, ovviamente): <code>puts sentence</code> è quindi diventato <code>puts frase</code>, e altri simili orrori. Qualche volta mi chiedo se non avessimo fatto meglio a lasciare il codice originale così com&#8217;era, ma d&#8217;altra parta abbiamo cercato di fare il possibile per rendere le cose più semplici anche per persone che non sanno una parola di inglese.</p> +<p>Tradurre dall'inglese all'italiano sembra facile se sei madrelingua e conosci bene l'inglese: non può essere + difficile, giusto? Facilissimo, ovvio. <br /> + Per la maggior parte è così, di fatto: facile e veloce. Ma le cose tendono a complicarsi un pochettino quando hai a + che fare con modi di dire e linguaggio un po' più tecnico.</p> +<p>Personalmente, non vado mai su siti italiani. &Egrave; una mia scelta personale (mi piace tantissimo la lingua + inglese), e ho imparato a non fare caso a quello che gli altri pensano di questa scelta. Devo ammettere che è stato + difficile per me tradurre alcune parti del sito di Ruby: non perchè fossero difficili da capire, ma perchè in + qualche caso una traduzione non è semplicemente in grado di rendere giustizia al testo originale.</p> +<p>Alcuni pezzi della traduzione, per questa ragione, potrebbero suonare un po' strani alle orecchie di Italiani d.o.c., + specialmente per quanto riguarda gli esempi di codice. Alla fine abbiamo deciso di tradurre la maggior parte del + codice (ove possibile, ovviamente): <code>puts sentence</code> è quindi diventato <code>puts frase</code>, e altri + simili orrori. Qualche volta mi chiedo se non avessimo fatto meglio a lasciare il codice originale così com'era, ma + d'altra parta abbiamo cercato di fare il possibile per rendere le cose più semplici anche per persone che non sanno + una parola di inglese.</p> <h3>Stagnazione</h3> -<p>Col tempo, l&#8217;iniziale interesse nella traduzione è andato affievolendosi, lo ammetto. Sia io che Raul abbiamo praticamente interrotto la traduzione ad un certo punto, e mi dispiace veramente tanto. Sapete com&#8217;è: incominci entusiasta e poi piano piano inizi a perdere interesse, ti dedichi ad altri progetti, il lavoro, la famiglia, eccetera.</p> -<p><strong><a href="http://www.lipsiasoft.com/">Davide D&#8217;Agostino</a></strong> venne in nostro aiuto nel Dicembre 2007. Penso che sia quello &#8220;più italiano&#8221; del gruppo, tanto da essere in grado di proporre soluzioni interessanti per alcuni pezzi particolarmente difficili da tradurre. Che ci crediate oppure no, l&#8217;80% del sito era pronto e tradotto all&#8217;inizio del 2008: rimanevano solamente alcune piccole parti ancora da tradurre, e poi&#8230; beh, abbiamo un po&#8217; lasciato perdere, di nuovo. La traduzione del sito era tra le mie cose da fare, c&#8217;è sempre stata: &#8220;Sì, certo, <em>dovrei</em> dare un&#8217;occhiata a Ruby-Lang.org&#8221;&#8230; mi sono ripetuto questa frase periodicamente, senza di fatto fare nulla.</p> -<p>Poi, finalmente, due settimane fa mi sono deciso a finire il lavoro traducendo le poche pagine rimaste, revisionando il tutto, facendo un po&#8217; di pulizie qua e là, ed ecco qui: il sito può ora essere visitato da tutti gli italiani che lo desiderano.</p> -<p>La cosa più ironica? Sono bastate solo poche oro di &#8220;lavoro&#8221; per mettere le cose a posto, ma quasi un anno per trovare finalmente la forza di volontà per farlo&#8230;</p> +<p>Col tempo, l'iniziale interesse nella traduzione è andato affievolendosi, lo ammetto. Sia io che Raul abbiamo + praticamente interrotto la traduzione ad un certo punto, e mi dispiace veramente tanto. Sapete com'è: incominci + entusiasta e poi piano piano inizi a perdere interesse, ti dedichi ad altri progetti, il lavoro, la famiglia, + eccetera.</p> +<p><strong><a href="http://www.lipsiasoft.com/">Davide D'Agostino</a></strong> venne in nostro aiuto nel Dicembre 2007. + Penso che sia quello &#8220;più italiano&#8221; del gruppo, tanto da essere in grado di proporre soluzioni + interessanti per alcuni pezzi particolarmente difficili da tradurre. Che ci crediate oppure no, l'80% del sito era + pronto e tradotto all'inizio del 2008: rimanevano solamente alcune piccole parti ancora da tradurre, e poi&#8230; + beh, abbiamo un po' lasciato perdere, di nuovo. La traduzione del sito era tra le mie cose da fare, c'è sempre + stata: &#8220;Sì, certo, <em>dovrei</em> dare un'occhiata a Ruby-Lang.org&#8221;&#8230; mi sono ripetuto questa + frase periodicamente, senza di fatto fare nulla.</p> +<p>Poi, finalmente, due settimane fa mi sono deciso a finire il lavoro traducendo le poche pagine rimaste, revisionando + il tutto, facendo un po' di pulizie qua e là, ed ecco qui: il sito può ora essere visitato da tutti gli italiani che + lo desiderano.</p> +<p>La cosa più ironica? Sono bastate solo poche oro di &#8220;lavoro&#8221; per mettere le cose a posto, ma quasi un + anno per trovare finalmente la forza di volontà per farlo&#8230;</p> <h3>E adesso?</h3> -<p>Ora il sito è accessibile e lo terremo aggiornato d&#8217;ora in avanti. <br /> -Spero sinceramente che possa contribuire ad avvicinare sempre più italiani al mondo di Ruby, anche se sono sicuro che ci sono moltissime altre persone là fuori che avrebbero fatto un lavoro più ben fatto del nostro, e sicuramente in tempi molto più brevi&#8230; ma dopotutto, alla fine ce l&#8217;abbiamo fatta, no?</p> -<p>Vorrei spendere ancora due parole per ringraziare nuovamente <strong><a href="http://www.raulparolari.com">Raul Parolari</a></strong> e <strong><a href="http://www.lipsiasoft.com/">Davide D&#8217;Agostino</a></strong> per avermi aiutato a tradurre questo sito. Finalmente ora capisco perchè Curt voleva tre persone nel gruppo di traduzione!</p> -<p>Un&#8217;ultima cosa: se qualcuno di voi trova un errore (e ce ne saranno molti, ne sono sicuro), o se ha un suggerimento per migliorare l&#8217;attuale traduzione, può <a href="/about/">contattarmi</a>: cercherò di correggere il sito quanto prima possibile.</p> +<p>Ora il sito è accessibile e lo terremo aggiornato d'ora in avanti. <br /> + Spero sinceramente che possa contribuire ad avvicinare sempre più italiani al mondo di Ruby, anche se sono sicuro + che ci sono moltissime altre persone là fuori che avrebbero fatto un lavoro più ben fatto del nostro, e sicuramente + in tempi molto più brevi&#8230; ma dopotutto, alla fine ce l'abbiamo fatta, no?</p> +<p>Vorrei spendere ancora due parole per ringraziare nuovamente <strong><a href="http://www.raulparolari.com">Raul + Parolari</a></strong> e <strong><a href="http://www.lipsiasoft.com/">Davide D'Agostino</a></strong> per + avermi aiutato a tradurre questo sito. Finalmente ora capisco perchè Curt voleva tre persone nel gruppo di + traduzione!</p> +<p>Un'ultima cosa: se qualcuno di voi trova un errore (e ce ne saranno molti, ne sono sicuro), o se ha un suggerimento + per migliorare l'attuale traduzione, può <a href="/about/">contattarmi</a>: cercherò di correggere il sito quanto + prima possibile.</p> <p>E ora, divertitevi con Ruby, ora anche <a href="http://www.ruby-lang.org/it/">in italiano</a>!</p>
M contents/articles/simply-on-rails-1-concepts-map.htmlcontents/articles/simply-on-rails-1-concepts-map.html

@@ -7,13 +7,13 @@ -----

<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&#8217;ve never been a fan of <a href="http://en.wikipedia.org/wiki/Mind_Mapping">Mind Mapping</a>. I&#8217;ve been +<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&#8217;t really work for me. I found the concept-idea-concept-idea sequences a bit too restrictive for my + 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&#8217;s absolutely fun to use. I created two bubble + 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"

@@ -64,7 +64,7 @@ <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&#8217;ll be moderated, of course).</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 &#8220;House Preferences&#8221; form or a more generic contact form.</li> </ul>

@@ -73,9 +73,9 @@ 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&#8217;s free for non-commercial use: <a + 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&#8217;s not web based, and it&#8217;s a 59MB Java desktop application which can be used to create <a + 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="/images/ItalySimply-v3_domain-model.jpg" alt="" /></p>
M contents/articles/simply-on-rails-2-database-design.htmlcontents/articles/simply-on-rails-2-database-design.html

@@ -5,36 +5,36 @@ timestamp: 1184405220

tags: "rails|databases" ----- <p>This week I attended a course for work on how to <em>Implement Databases with Microsoft <span class="caps">SQL</span> - Server 2005</em>. An interesting course indeed, which made me realize how feature-rich Bill&#8217;s product is, + Server 2005</em>. An interesting course indeed, which made me realize how feature-rich Bill's product is, compared to the Open Source alternatives like MySQL. It also made me realize how nice it is to implement database-related logic (read: Models) using a <em>proper</em> programming language rather than using triggers, stored procedures, functions and other goodies offered by Transact-<span class="caps">SQL</span>.</p> -<p>It&#8217;s all a matter of taste and of necessities: using MS <span class="caps">SQL</span> Server for one of my - website is simply not going to happen anytime soon, and I&#8217;m more than happy to have a database which can be +<p>It's all a matter of taste and of necessities: using MS <span class="caps">SQL</span> Server for one of my + website is simply not going to happen anytime soon, and I'm more than happy to have a database which can be used <em>just</em> as a database and a programming language (Ruby, in this case) which can do wonders, rather than a procedural-only surrogate.</p> <p>Anyhow, back to our weekly series. After creating a <a href=/articles/simply-on-rails-1-concepts-map">concept - map</a>, it&#8217;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&#8217;s - free, it&#8217;s easy to use, and the results are pretty enough. There:</p> + 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="/images/italysimply_database-architecture.png"><img src="/images/italysimply_database-architecture_thumb.png" alt="" /></a></p> -<p>It&#8217;s amazing how a relatively simple concept map can lead to such a complex database architecture, isn&#8217;t +<p>It's amazing how a relatively simple concept map can lead to such a complex database architecture, isn't it?<br /> - Well, it&#8217;s normal. One of the reasons of this is that I totally forgot about geographical information about + Well, it's normal. One of the reasons of this is that I totally forgot about geographical information about the houses which will be featured on the site, or better, I thought about it as a <em>strings</em> typed in by the administrators, whereas it would be much better having dropdown boxes.</p> <p>Countries, regions, privinces, areas and cities will be added to the database only once, rather than having to type them in every time a house is added. Obvious, but this lead to five tables more and nine (!) relationships more.</p> <p>The other reason of why the number of tables is higher than the number of entities in the domain model is that I decided <em>not</em> to use the <span class="caps">ENUM</span> type. Firstly because <a - href="http://wiki.rubyonrails.org/rails/pages/HowtoUseSetAndEnumColumns">it&#8217;s not handled very well by + href="http://wiki.rubyonrails.org/rails/pages/HowtoUseSetAndEnumColumns">it's not handled very well by Rails</a><br /> - and also because there&#8217;s <a href="http://blog.arabx.com.au/?p=87">a number of reasons</a> why ENUMs should not + and also because there's <a href="http://blog.arabx.com.au/?p=87">a number of reasons</a> why ENUMs should not be used.</p> -<p>The only problem now is that whenever I load a house, I&#8217;ll have to get data from a lot of tables at once (and +<p>The only problem now is that whenever I load a house, I'll have to get data from a lot of tables at once (and this means a lot of joins underneath the model layer) or &#8211; worse &#8211; a lot of queries in case I decide to - load related data &#8220;on the fly&#8221;. It looks like I&#8217;ll have to do a bit of <a + load related data &#8220;on the fly&#8221;. It looks like I'll have to do a bit of <a href="http://railsexpress.de/blog/articles/2005/11/06/the-case-for-piggy-backed-attributes">piggy-backing</a> here and there. <a href="http://railsexpress.de/blog/articles/2006/05/29/simpler-piggy-backing">Someone</a> already - thought about a way of doing this in a more &#8220;Model-friendly&#8221; way. Perhaps I&#8217;ll give it a shot.</p> + thought about a way of doing this in a more &#8220;Model-friendly&#8221; way. Perhaps I'll give it a shot.</p>
M contents/articles/simply-on-rails-3-shared-controller.htmlcontents/articles/simply-on-rails-3-shared-controller.html

@@ -4,7 +4,7 @@ content-type: article

timestamp: 1185076980 tags: "rails" ----- -<p>Enough with concepts, ideas and diagrams: it&#8217;s time to start coding something. Everyone knows what&#8217;s the +<p>Enough with concepts, ideas and diagrams: it's time to start coding something. Everyone knows what's the first step when creating a Rails applications, but anyhow, here it is:</p> <div class='ruby'> <pre><code>rails italysimply</code></pre>

@@ -12,7 +12,8 @@ </div>

<p>Then I create a new development database, load it up with the schema I <a href=/articles/simply-on-rails-2-database-design">previously</a> prepared and modify the <code>config/database.yml</code> to be able to connect to it. Nothing new here.<br /> - I actually had to modify the schema a little bit:</p> + I actually had to modify the schema a little bit: +</p> <ul> <li>I changed all the names for the foreign keys to something more evocative than &#8220;has_many&#8221; or &#8220;has_one&#8221;</li>

@@ -31,25 +32,25 @@ <li>conditions</li>

<li>availabilities</li> <li>categories</li> </ul> -<p>They all have a name column, some of them have a name column as well, they&#8217;ll hold only a relative small number +<p>They all have a name column, some of them have a name column as well, they'll hold only a relative small number of records which will hardly ever be deleted. In fact, I was tempted to use Enums for some of those things&#8230;<br /> - Anyhow, I&#8217;ll still have to add and modify data in those tables, so it looks like I kinda need to create 8 + Anyhow, I'll still have to add and modify data in those tables, so it looks like I kinda need to create 8 controllers, 8 models and about four views for each one of them. No way. Fair enough for the controllers and models, - but I&#8217;m not going to create 32 views which all look exactly the same. Rails should be smarter than that!And it + but I'm not going to create 32 views which all look exactly the same. Rails should be smarter than that!And it is, luckily. Derek Sivers &amp; C. came out with an interesting <a href="http://dereksivers.com/rails-shared-controller.html">Shared Controller</a> concept, which could be just - what I&#8217;m looking for in this case. Actually I need something really simple in this case:</p> + what I'm looking for in this case. Actually I need something really simple in this case:</p> <ul> <li>Put all the <span class="caps">CRUD</span> logic into one controller</li> <li>Create only one set of views</li> </ul> -<p>Here&#8217;s the controller:</p> +<p>Here's the controller:</p> <p><span style="color:red;"><strong>app/controllers/admin/lite_controller.rb</strong></span><br /> <div class='ruby'> <pre><br /> <div class='ruby'><pre><code>class Admin::LiteController &amp;lt; ApplicationController</p> -layout &#8216;admin&#8217; +layout &#8216;admin' before_filter :prepare def prepare

@@ -62,38 +63,38 @@ end

verify :method =&gt; :post, :only =&gt; [ :destroy, :create, :update ], :redirect_to =&gt; { :action =&gt; :list } def list -ordering = model.column_names.include?(&#8216;level&#8217;) ? &#8216;level <span class="caps">ASC</span>&#8217; : &#8216;name <span class="caps">ASC</span>&#8217; +ordering = model.column_names.include?(&#8216;level') ? &#8216;level <span class="caps">ASC</span>' : &#8216;name <span class="caps">ASC</span>' @items = model.find(:all, :order =&gt; ordering) -render(&#8216;lite/list&#8217;) +render(&#8216;lite/list') end def show @item = model.find(params[:id]) -render(&#8216;lite/show&#8217;) +render(&#8216;lite/show') end def new @item = model.new -render(&#8216;lite/new&#8217;) +render(&#8216;lite/new') end def create <code>item = model.new(params[:"#{</code>item_name.downcase}&quot;]) if @item.save -flash[:notice] = @item_name+&#8217; was successfully created.&#8217; -redirect_to :action =&gt; &#8216;list&#8217; +flash[:notice] = @item_name+' was successfully created.' +redirect_to :action =&gt; &#8216;list' else -render(&#8216;lite/new&#8217;) +render(&#8216;lite/new') end end def edit @item = model.find(params[:id]) -render(&#8216;lite/edit&#8217;) +render(&#8216;lite/edit') end def update @item = model.find(params[:id]) if <code>item.update_attributes(params[:"#{</code>item_name.downcase}&quot;]) -flash[:notice] = @item_name+&#8217; was successfully updated.&#8217; -redirect_to :action =&gt; &#8216;list&#8217; +flash[:notice] = @item_name+' was successfully updated.' +redirect_to :action =&gt; &#8216;list' else -render(&#8216;lite/edit&#8217;) +render(&#8216;lite/edit') end end <p>end</code></pre>

@@ -110,7 +111,7 @@ end

end</code></pre> </div> </p> -<p>Basically, I just need to specify which model the specific controller takes care of, Ruby&#8217;s inheritance does +<p>Basically, I just need to specify which model the specific controller takes care of, Ruby's inheritance does the rest. The model name will be passed to the views like this:</p> <p><span style="color:red;"><strong>app/controllers/admin/lite_controller.rb</strong></span><br /> <div class='ruby'>

@@ -138,18 +139,19 @@ <div class='ruby'>

<pre><code>@item = model.new(params[:"#{@item_name.downcase}"])</code></pre> </div> <p><code>params[:"#{</code>item_name.downcase}&quot;]@ at runtime becomes <code>params[:status]</code> or - <code>params[:role]</code> etc. etc., depending on which controller is called. Sweet.</p> + <code>params[:role]</code> etc. etc., depending on which controller is called. Sweet. +</p> <p>The views? Modified accordingly:</p> <p><span style="color:red;"><strong>app/views/lite/edit.rb</strong></span><br /> <div class='ruby'> <pre><code>&lt;h1&gt;Editing <br /> <div class='ruby'><pre><code>&amp;lt;h1&amp;gt;Editing &lt;%= @item_name %&gt;&amp;lt;/h1&amp;gt;</p> -<p>&lt;% form_tag :action =&gt; &#8216;update&#8217;, :id =&gt; @item do <span>&gt;<br /> - &lt;</span>= render :partial =&gt; &#8216;lite/form&#8217; <span>&gt;<br /> - &lt;</span>= submit_tag &#8216;Edit&#8217; <span>&gt;<br /> +<p>&lt;% form_tag :action =&gt; &#8216;update', :id =&gt; @item do <span>&gt;<br /> + &lt;</span>= render :partial =&gt; &#8216;lite/form' <span>&gt;<br /> + &lt;</span>= submit_tag &#8216;Edit' <span>&gt;<br /> &lt;</span> end %&gt;</p> -<p>&lt;%= link_to &#8216;Show&#8217;, :action =&gt; &#8216;show&#8217;, :id =&gt; @item <span>&gt; |<br /> -&lt;</span>= link_to &#8216;Back&#8217;, :action =&gt; &#8216;list&#8217; %&gt;</code></pre> +<p>&lt;%= link_to &#8216;Show', :action =&gt; &#8216;show', :id =&gt; @item <span>&gt; |<br /> +&lt;</span>= link_to &#8216;Back', :action =&gt; &#8216;list' %&gt;</code></pre> </div> </notextile> </p>
M contents/articles/simply-on-rails-4-default-data-migrations.htmlcontents/articles/simply-on-rails-4-default-data-migrations.html

@@ -10,19 +10,19 @@ &#8220;ancillary&#8221; data, i.e. names of user roles, predefined categories, page state names and other similar

things.<br /> I personally chose to put this kind of data to make my application more dynamic, although I could have decided to use ENUMs or simply ordinary varchar fields &#8212; that would have been easier, but less flexible. For now, - I&#8217;m sticking with my original choice.</p> + I'm sticking with my original choice.</p> <p>The data in these tables is kind of a prerequisite for the application to run: I must be able to have a status to assign to a user when creating it, and the same applies to roles. Sure, I could spend 20 minutes populating these - tables manually, but it would be nice if there was a less tedious way, wouldn&#8217;t it?</p> + tables manually, but it would be nice if there was a less tedious way, wouldn't it?</p> <p>There is indeed. The inspiration came from a technique described in the book (which I highly recommend) <em>Agile Web - Development With Rails</em>, in which the author outlines how it would be possible to use Rails&#8217; fixtures + Development With Rails</em>, in which the author outlines how it would be possible to use Rails' fixtures and migrations to load data in the database automatically from <span class="caps">YAML</span> files. <br /> - All you have to do is create a migration to load the specified <span class="caps">YAML</span> files and you&#8217;re + All you have to do is create a migration to load the specified <span class="caps">YAML</span> files and you're all set.</p> <p>I wanted to take a little step further, allowing the migration to load data from <em>all <span - class="caps">YAML</span> files in a specific directory</em>, automatically.Let&#8217;s start creating the + class="caps">YAML</span> files in a specific directory</em>, automatically.Let's start creating the <span class="caps">YAML</span> files then and place them all in one directory of the application like - <code>/db/migrate/defaults</code>. Here&#8217;s the one I used for user roles, for example: + <code>/db/migrate/defaults</code>. Here's the one I used for user roles, for example: </p> <div class='yaml'> <pre><code>visitor:

@@ -61,8 +61,8 @@ name: Webmaster

level: 1000</code></pre> </div> <p>The important thing to remember is to provide a unique string to identify each record, before specifying each fiels. - The other files look similar, so I won&#8217;t bother listing them here.</p> -<p>And here&#8217;s the simple code for the migration:</p> + The other files look similar, so I won't bother listing them here.</p> +<p>And here's the simple code for the migration:</p> <div class='ruby'> <pre><code>require 'active_record/fixtures'
M contents/articles/simply-on-rails-intro.htmlcontents/articles/simply-on-rails-intro.html

@@ -4,19 +4,39 @@ content-type: article

timestamp: 1183176000 tags: "rails|web20" ----- -<p>So finally my site is back up, I don&#8217;t have to worry about coding anymore: just writing about whatever I like, no more Cake, no more <span class="caps">MVC</span>, no more frameworks&#8230;</p> -<p><em>What do you mean no coding anymore? You&#8217;ve been bragging about how this Rails thing is fast, how you can develop things easily, and this, and that&#8230; You <strong>know</strong> what you have to do now</em></p> -<p><sup>^</sup> That was my fianc&eacute;e, actually, and she&#8217;s right: my web development days are far from being over, actually. I admit I tried to get away from it, but she kindly reminded me (and she can be <em>very</em> persuasive) that now I have to fix <a href="http://www.italysimply.com/">ItalySimply</a>, the site I created a while a go (4 years?) with a mixture of Mambo (the <span class="caps">CMS</span>, now Joomla) and spaghetti <span class="caps">PHP</span>.</p> -<p>A sort-of-real-estate thingie visited by people who want to move to Italy or simply buy a house here. And it&#8217;s due a makeover, to be honest.</p> -<p>How am I gonna manage this? Let&#8217;s see&#8230;</p> +<p>So finally my site is back up, I don't have to worry about coding anymore: just writing about whatever I like, no + more Cake, no more <span class="caps">MVC</span>, no more frameworks&#8230;</p> +<p><em>What do you mean no coding anymore? You've been bragging about how this Rails thing is fast, how you can develop + things easily, and this, and that&#8230; You <strong>know</strong> what you have to do now</em></p> +<p><sup>^</sup> That was my fianc&eacute;e, actually, and she's right: my web development days are far from being over, + actually. I admit I tried to get away from it, but she kindly reminded me (and she can be <em>very</em> persuasive) + that now I have to fix <a href="http://www.italysimply.com/">ItalySimply</a>, the site I created a while a go (4 + years?) with a mixture of Mambo (the <span class="caps">CMS</span>, now Joomla) and spaghetti <span + class="caps">PHP</span>.</p> +<p>A sort-of-real-estate thingie visited by people who want to move to Italy or simply buy a house here. And it's due a + makeover, to be honest.</p> +<p>How am I gonna manage this? Let's see&#8230;</p> <h3><span class="caps">COW</span></h3> -<p><span class="caps">COW</span> \- Code On Week-ends. my web development methodology: simple, effective, basically my only choice. Actually the full name is <span class="caps">COW</span> (<span class="caps">IYL</span>): Code On Week-ends <em>If You&#8217;re Lucky</em>, i.e.: if we&#8217;re not going out, if there&#8217;s nothing better to do, if I feel like it. No deadlines (almost), no plans to follow, nothing.</p> -<p>No, I&#8217;m not terribly motivated to take on this project, but I already thought about two things to get me going:</p> +<p><span class="caps">COW</span> \- Code On Week-ends. my web development methodology: simple, effective, basically my + only choice. Actually the full name is <span class="caps">COW</span> (<span class="caps">IYL</span>): Code On + Week-ends <em>If You're Lucky</em>, i.e.: if we're not going out, if there's nothing better to do, if I feel like + it. No deadlines (almost), no plans to follow, nothing.</p> +<p>No, I'm not terribly motivated to take on this project, but I already thought about two things to get me going:</p> <ul> - <li><strong>Get <a href="http://www.pragmaticprogrammer.com/titles/rails/">Agile Web Development with Rails</a></strong> \- I read bits of the first edition, and that&#8217;s what got me started with Rails, now it&#8217;s time to buy the real thing.</li> - <li><strong>Blog about it</strong> \- I&#8217;ll <em>try</em> to keep a diary of my coding efforts and share the most juicy bits with the rest of the world. In this way I&#8217;ll also have content for my site and the three people who read this blog will have something (hopefully) interested to read.</li> + <li><strong>Get <a href="http://www.pragmaticprogrammer.com/titles/rails/">Agile Web Development with + Rails</a></strong> \- I read bits of the first edition, and that's what got me started with Rails, now + it's time to buy the real thing.</li> + <li><strong>Blog about it</strong> \- I'll <em>try</em> to keep a diary of my coding efforts and share the most + juicy bits with the rest of the world. In this way I'll also have content for my site and the three people who + read this blog will have something (hopefully) interested to read.</li> </ul> <h3>The Cunning Plan</h3> -<p>Instead of getting out of troubles by simply tidying up some <span class="caps">PHP</span> code or migrate the site to Joomla, I&#8217;d like to re-code the whole thing from scratch using Rails. Ideally I&#8217;d like to migrate quite a bit of the content (including the hundreds of houses with pictures which were published over the years), but at the moment I&#8217;m not thinking about it: after all, in the end the site will be so addictive and easy to use that adding hundreds of houses back on will be just so much fun! Right? Yeah, right&#8230;</p> -<p>First of all I&#8217;ll spend quite a bit of time planning the application and what has to be done, then I&#8217;ll have to practice a little bit with Rails, and then, eventually, I&#8217;ll end up writing some code. Of course, suggestions and ideas will be more than welcome throughout all the process.</p> -<p>Let&#8217;s see how it goes&#8230;</p> +<p>Instead of getting out of troubles by simply tidying up some <span class="caps">PHP</span> code or migrate the site + to Joomla, I'd like to re-code the whole thing from scratch using Rails. Ideally I'd like to migrate quite a bit of + the content (including the hundreds of houses with pictures which were published over the years), but at the moment + I'm not thinking about it: after all, in the end the site will be so addictive and easy to use that adding hundreds + of houses back on will be just so much fun! Right? Yeah, right&#8230;</p> +<p>First of all I'll spend quite a bit of time planning the application and what has to be done, then I'll have to + practice a little bit with Rails, and then, eventually, I'll end up writing some code. Of course, suggestions and + ideas will be more than welcome throughout all the process.</p> +<p>Let's see how it goes&#8230;</p>
M contents/articles/social-bookmarking-services.htmlcontents/articles/social-bookmarking-services.html

@@ -18,15 +18,15 @@ bookmark/digg like service appears one daily basis [&#8230;]&#8221;</em><sup class="footnote" id="fnr4"><a

href="#fn4">4</a></sup>. </p> <p>Nice, and there are also many reviews of each one as well<sup class="footnote" id="fnr5"><a href="#fn5">5</a></sup>! - Here&#8217;s another one&#8230;</p> + Here's another one&#8230;</p> <blockquote> <p><strong>Preliminary Notes</strong>: This round-up does <em>not</em> include <em>all</em> social bookmarking sites and yes, there are a lot missing. I decided to pick 10 services out of the dozens available for one simple - reason: make this article more readable. I&#8217;m really sorry if your favourite social bookmarking site is not + reason: make this article more readable. I'm really sorry if your favourite social bookmarking site is not listed: if you feel creative you can add your (short!) review as a comment to this article.<br /> Although I recently wrote a very positive review of Ma.gnolia<sup class="footnote" id="fnr6"><a href="#fn6">6</a></sup> and I know its lead developer, I do <em>not</em> consider myself partial towards - Ma.gnolia, you&#8217;ll notice when I review it.</p> + Ma.gnolia, you'll notice when I review it.</p> </blockquote> <h3>Common features and concepts</h3> <p>The social bookmarking sites reviewed in this article are: del.icio.us<sup class="footnote" id="fnr2"><a

@@ -53,7 +53,7 @@ <h3>Review parameters</h3>

<p>Besides an overview for each service and some notes regarding their intended <em>audience</em>, some other parameters will be considered and rated from 0 to 10 (the higher, the better):</p> <p><em>Speed</em><br /> - I&#8217;m currently on dialup, and so I&#8217;ll be able to effectively test the speed and rendering time of each + I'm currently on dialup, and so I'll be able to effectively test the speed and rendering time of each site. The higher the mark, the faster the site is.</p> <p><em>Features</em><br /> Notes concerning added/missing features, and overall features rating.</p>

@@ -61,7 +61,7 @@ <p><em>Simplicity</em><br />

Do you need to be a certified geek&#8482; in order to use the service or even your dog can learn how to use it, if he tries hard?</p> <p><em>Interface/Design</em><br /> - This parameter concerns the visual appearance of a website. Note: it can be particularly subjective, I&#8217;ll try + This parameter concerns the visual appearance of a website. Note: it can be particularly subjective, I'll try my best to be objective.</p> <p><em>Userbase</em><br /> Basically the amount of people which use a determined service.</p>

@@ -70,15 +70,15 @@ <h3><a href="http://del.icio.us/">del.icio.us</a><br />

<img src="/images/pictures/socbook/delicious.gif" alt="" /> </h3> <ul> - <li><strong>Speed:</strong> 10 &#8211; This is by far the fastest site to load, perhaps because it doesn&#8217;t + <li><strong>Speed:</strong> 10 &#8211; This is by far the fastest site to load, perhaps because it doesn't have any fancy eye-candy at all</li> <li><strong>Features:</strong> 6 &#8211; del.icio.us offers only the most essential features, nothing too fancy, but nothing too bad either</li> - <li><strong>Simplicity:</strong> 6 &#8211; You need some time to get used to it, but it&#8217;s not confusing like - some others. Hardly any documentation or tutorial provided, but hey, this is the geek&#8217;s choice after all + <li><strong>Simplicity:</strong> 6 &#8211; You need some time to get used to it, but it's not confusing like + some others. Hardly any documentation or tutorial provided, but hey, this is the geek's choice after all </li> <li><strong>Interface/Design:</strong> 6 &#8211; Personally I like it, but I know I have no taste for design and - interfaces. An average user would say that it&#8217;s too plain and no, nothing fancy at all</li> + interfaces. An average user would say that it's too plain and no, nothing fancy at all</li> <li><strong>Userbase:</strong> 10 &#8211; Judging by the amount of people coming to my site after one of my article made it to digg, compared to other social bookmarking services, this is BY <span class="caps">FAR</span> the most used one. Everyone has a del.icio.us account, then, maybe, something else</li>

@@ -97,31 +97,31 @@ <li>Ratings are supported</li>

<li>More <span class="caps">AJAX</span> and effects</li> <li>Other sites cache bookmarks internally or may offer thumbnails</li> </ul> -<p>Nevertheless, del.icio.us still remains the geek&#8217;s choice, the numbers speak by themselves. It is also my +<p>Nevertheless, del.icio.us still remains the geek's choice, the numbers speak by themselves. It is also my choice at the moment, because of its simplicity (in the sense of &#8220;no useless things are included&#8221;) and speed.</p> <p><strong>Suitable for:</strong> IT professionals, computer enthusiasts, tech-savvy people in general. Your old auntie - probably won&#8217;t like it, but at least she&#8217;ll keep away from it and leave you in peace.</p> + probably won't like it, but at least she'll keep away from it and leave you in peace.</p> <h3><a href="http://ma.gnolia.com/">Ma.gnolia</a><br /> <img src="/images/pictures/socbook/magnolia.gif" alt="" /> </h3> <ul> - <li><strong>Speed:</strong> 5 &#8211; It&#8217;s a bit slow if compared to competitors. Maybe it&#8217;s just me, - maybe it&#8217;s the server, maybe it&#8217;s Ruby on Rails.</li> + <li><strong>Speed:</strong> 5 &#8211; It's a bit slow if compared to competitors. Maybe it's just me, + maybe it's the server, maybe it's Ruby on Rails.</li> <li><strong>Features:</strong> 7 &#8211; Saved copies, <span class="caps">AJAX</span> 5-star ratings, <span class="caps">AJAX</span> private/public lock, groups &amp; messages</li> <li><strong>Simplicity:</strong> 8 &#8211; Fairly simple to learn and use, excellent documentation online</li> - <li><strong>Interface/Design:</strong> 10 &#8211; I really like Ma.gnolia&#8217;s website design over all the + <li><strong>Interface/Design:</strong> 10 &#8211; I really like Ma.gnolia's website design over all the others: clean, simple and professional with <span class="caps">AJAX</span> features in the right place.</li> - <li><strong>Userbase:</strong> 6 &#8211; It&#8217;s fairly new so not many people are using it. It&#8217;s being - pushed by Zeldman &amp; ALA&#8217;s crew though</li> + <li><strong>Userbase:</strong> 6 &#8211; It's fairly new so not many people are using it. It's being + pushed by Zeldman &amp; ALA's crew though</li> <li><em><strong>Overall Rating: 7.2</strong></em></li> </ul> <p><strong>Overview</strong><br /> This <em>was</em> my first choice and the first social bookmarking site I reviewed<sup class="footnote" id="fnr6"><a href="#fn6">6</a></sup> and tried properly. It is developed in Ruby on Rails and it excels in simplicity and - visual appearance, but it has some rather annoying CONs. First of all it&#8217;s a bit slow for my liking, - especially now that I&#8217;m on dialup. Second, the search is currently limited to tags only: it&#8217;s obviously + visual appearance, but it has some rather annoying CONs. First of all it's a bit slow for my liking, + especially now that I'm on dialup. Second, the search is currently limited to tags only: it's obviously a temporary thing and it will be back soon though, but I gave it a 7 instead of a 8 for features for this reason.<br /> Ads are visible on the top of every page &#8211; subscribe (soon) to remove them&#8230; oh well.</p>

@@ -138,17 +138,17 @@ <li><strong>Simplicity:</strong> 7 &#8211; Simple, organized, essential. Documentation available.</li>

<li><strong>Interface/Design:</strong> 5 &#8211; This is nothing fancy at all compared to the others, a fairly <em>traditional</em> web interface. <em>Web 2.0?</em> &#8230;Pardon? </li> - <li><strong>Userbase:</strong> 8 &#8211; This is one of the oldest social bookmarking services and it&#8217;s easier - than del.icio.us, that&#8217;s why the fairly large userbase.</li> + <li><strong>Userbase:</strong> 8 &#8211; This is one of the oldest social bookmarking services and it's easier + than del.icio.us, that's why the fairly large userbase.</li> <li><em><strong>Overall Rating: 6.6</strong></em></li> </ul> <p><strong>Overview</strong><br /> - When I tried this service after trying the others I wasn&#8217;t impressed at all. The interface is fairly standard, + When I tried this service after trying the others I wasn't impressed at all. The interface is fairly standard, all done in a traditional way, no <span class="caps">AJAX</span> at all: if you absolutely hate Web 2.0 hype, even - when it&#8217;s actually useful, go for this. To rate a bookmark I must click on edit and select the rating from a - select menu: our children wouldn&#8217;t believe it.<br /> + when it's actually useful, go for this. To rate a bookmark I must click on edit and select the rating from a + select menu: our children wouldn't believe it.<br /> The good thing about Furl, and what made it popular, presumably, is its simplicity over other similar services like - del.icio.us, that&#8217;s the most logical reason I could find to explain its popularity.</p> + del.icio.us, that's the most logical reason I could find to explain its popularity.</p> <p><strong>Suitable for:</strong> Anyone, users against or not yet accustomed to Web 2.0 interactivity</p> <h3><a href="http://www.spurl.net/">Spurl</a><br /> <img src="/images/pictures/socbook/spurl.jpg" alt="" />

@@ -170,10 +170,10 @@ integration: not excellent because it seems to take quite a bit to import my del.icio.us bookmarks, but everything

you bookmark with Spurl can be send to del.icio.us at the same time and vice versa! They also offer interesting stats regarding your bookmarks, report broken links, cache webpages, etc. <br /> Some annoying things must be noted though (hence the 7 in features): the bookmarklet will popup a window &#8211; not - great; it doesn&#8217;t support ratings and the tag management could be improved: del.icio.us and ma.gnolia can - <em>suggest</em> tags when saving a bookmarks, while Spurl unfortunately doesn&#8217;t. It also seems to be less + great; it doesn't support ratings and the tag management could be improved: del.icio.us and ma.gnolia can + <em>suggest</em> tags when saving a bookmarks, while Spurl unfortunately doesn't. It also seems to be less tag-centric than the others (except for Furl of course). It is multi-language and offers a 18+ filter &#8211; but if - you forget to mark a bookmark as &#8220;explicit&#8221; it won&#8217;t work, and as result you can get porn links on + you forget to mark a bookmark as &#8220;explicit&#8221; it won't work, and as result you can get porn links on the homepage&#8230; </p> <p><strong>Suitable for:</strong> Anyone, del.icio.us users who would like to try something new without losing sync with

@@ -184,10 +184,10 @@ </h3>

<ul> <li><strong>Speed:</strong> 6 &#8211; Not too fast, like other sites in the Yahoo network.</li> <li><strong>Features:</strong> 5 &#8211; &#8220;Web 2.0&#8221;? Well, yes, it has tag clouds and allows bookmark - sharing, but that&#8217;s about it.</li> + sharing, but that's about it.</li> <li><strong>Simplicity:</strong> 7 &#8211; Integrated with Yahoo services (and toolbar), fairly easy to use, if you - don&#8217;t know something the FAQs are handy.</li> - <li><strong>Interface/Design:</strong> 6 &#8211; Clean, simple and a bit boring &#8211; perhaps I&#8217;m just to + don't know something the FAQs are handy.</li> + <li><strong>Interface/Design:</strong> 6 &#8211; Clean, simple and a bit boring &#8211; perhaps I'm just to used to the rest of the sites in the Yahoo network</li> <li><strong>Userbase:</strong> 8 &#8211; Grab some random users and a big chunk of Yahoo enthusiasts: not bad!</li> <li><em><strong>Overall Rating: 6.4</strong></em></li>

@@ -210,26 +210,26 @@ <li><strong>Speed:</strong> 7 &#8211; Fast, especially considering the type of interface</li>

<li><strong>Features:</strong> 10 &#8211; The service which offers more features than anyone else, simply that. Ratings, quit bookmarks, video tutorials, <span class="caps">AJAX</span> where needed, tabs, starred links, message board etc. etc.</li> - <li><strong>Simplicity:</strong> 7 &#8211; Considering the amount of features it offers, it&#8217;s simple enough to + <li><strong>Simplicity:</strong> 7 &#8211; Considering the amount of features it offers, it's simple enough to use. Impressive Help section.</li> <li><strong>Interface/Design:</strong> 9 &#8211; I really like its interface, the scary amount of <span class="caps">AJAX</span> code it uses et al. Not a 10 because the five icons at the top (Gnome-like?) - don&#8217;t go well with the rest of the design, only that.</li> + don't go well with the rest of the design, only that.</li> <li><strong>Userbase:</strong> 7 &#8211; Not too popular, and new to the scene</li> <li><em><strong>Overall Rating: 8</strong></em></li> </ul> <p><strong>Overview</strong><br /> This should technically be the winner. These guys truly did their best trying to build perhaps the most &#8220;Web 2.0 compliant&#8221; social bookmarking service ever. The downside of it is just the huge amount of <span - class="caps">AJAX</span> involved in all this, but if you&#8217;re fine with that, Blinklist is truly amazing. + class="caps">AJAX</span> involved in all this, but if you're fine with that, Blinklist is truly amazing. It uses a digg-like approach to <em>blink</em> the urls which appear on the site instantly: an <span - class="caps">AJAX</span> div fades in allowing you to fill in the bookmark&#8217;s details and then it fades + class="caps">AJAX</span> div fades in allowing you to fill in the bookmark's details and then it fades away incrementing the <em>blink</em> count and adding it to your collection. The private area has a quadri-tabbed sidebar with: 1) real-time chat, 2) popular tags view, 3) recent tags used, 4) cloud view. It supports site thumbnails but not saved copies unfortunately, advanced profiles, avatars, ratings&#8230; <br /> Advanced, &#8220;cool&#8221; and (perhaps too much) on the edge. In Italian we have a word for things like this, but - I won&#8217;t mention it here. Just think about <em>Fast and Furious</em>, the feeling when browsing this site can - be similar to driving an heavily modded car: if you like the way it works, it&#8217;s the best thing ever &#8211; if + I won't mention it here. Just think about <em>Fast and Furious</em>, the feeling when browsing this site can + be similar to driving an heavily modded car: if you like the way it works, it's the best thing ever &#8211; if not, well, del.icio.us does the job alright.</p> <p><strong>Suitable for</strong>: Web 2.0 lovers, geeks, anyone brave enough to try it without getting too shocked</p> <h3><a href="http://smarking.com/">Smarking</a><br />

@@ -246,26 +246,26 @@ <li><strong>Userbase:</strong> 4 &#8211; About 300 users</li>

<li><em><strong>Overall Rating: 6.8</strong></em></li> </ul> <p><strong>Overview</strong><br /> - Don&#8217;t expect anything too fancy from Smarking, but a few features caught my attention. For one, it supports a + Don't expect anything too fancy from Smarking, but a few features caught my attention. For one, it supports a proper messaging system: other services allow you to send notes and a link to other users, while this one has a proper, built-in private messaging system&#8230; OK, not a big thing but nice to have. The design is not too great: - it does the job but there&#8217;s hardly any image, nevermind <span class="caps">AJAX</span> effects or + it does the job but there's hardly any image, nevermind <span class="caps">AJAX</span> effects or similar.<br /> What really impressed me (hence the 8 in features), are the detailed stats that this service makes available - publicly: detailed domain stats, tag stats, user stats and more while others simply don&#8217;t bother.<br /> + publicly: detailed domain stats, tag stats, user stats and more while others simply don't bother.<br /> It was developed using Python and PostgreSQL by an Italian student of Computer Science &#8211; apparently - there&#8217;s someone who is able to program properly in my country as well. Good job: nothing too exceptional as + there's someone who is able to program properly in my country as well. Good job: nothing too exceptional as social bookmarking service, but an exemplary work.</p> <p><strong>Suitable for</strong>: Italians in particular and everybody else as well.</p> <h3><a href="http://www.shadows.com/">Shadows</a><br /> <img src="/images/pictures/socbook/shadows.gif" alt="" /> </h3> <ul> - <li><strong>Speed:</strong> 5 &#8211; I don&#8217;t know if it&#8217;s because of Rails or the interface, but this - site doesn&#8217;s seem to perform as well as the others</li> + <li><strong>Speed:</strong> 5 &#8211; I don't know if it's because of Rails or the interface, but this + site doesn's seem to perform as well as the others</li> <li><strong>Features:</strong> 7 &#8211; enhanced commenting, saved copies, thumbnails, groups</li> - <li><strong>Simplicity:</strong> 6 &#8211; The usual FAQs are there, but other than that there&#8217;s no particular - effort to make newbie&#8217;s life easier</li> + <li><strong>Simplicity:</strong> 6 &#8211; The usual FAQs are there, but other than that there's no particular + effort to make newbie's life easier</li> <li><strong>Interface/Design:</strong> 5 &#8211; Simple but not quite pretty interface, no graphic effor whatsoever, <span class="caps">AJAX</span> for adding and editing comments </li>

@@ -273,13 +273,13 @@ <li><strong>Userbase:</strong> 6 &#8211; Not a tiny userbase but not huge either</li>

<li><em><strong>Overall Rating: 6</strong></em></li> </ul> <p><strong>Overview</strong><br /> - Maybe it&#8217;s just me, but I wasn&#8217;t too impressed by Shadows: it doesn&#8217;t offer any particular + Maybe it's just me, but I wasn't too impressed by Shadows: it doesn't offer any particular innovative feature other than enhanced commenting. You can start real discussions about your bookmarks and interact with other users fairly well, but the question is: do you really want to? Perhaps an interesting way to build communities, but other than that nothing special. <br /> - The interface is not too pretty, unlike Ma.gnolia it looks like they didn&#8217;t make a terrible effort trying to + The interface is not too pretty, unlike Ma.gnolia it looks like they didn't make a terrible effort trying to design something pleasant to look at and the final result is quite boring. They seem to support thumbnails, but - clearly they use a third party service like Alexa because there&#8217;s hardly any thumbnail displayed, generally: + clearly they use a third party service like Alexa because there's hardly any thumbnail displayed, generally: wrong choice &#8211; see Blogmarks below for a better thumbnail support.<br /> And yes, the default green smily default avatar is terribly cheesy and truly annoying (not that the others are any better&#8230;).</p>

@@ -288,7 +288,7 @@ <h3><a href="http://www.simpy.com/">Simpy</a><br />

<img src="/images/pictures/socbook/simpy.png" alt="" /> </h3> <ul> - <li><strong>Speed:</strong> 7 &#8211; It&#8217;s fast, but again, its interface is not anything fancy</li> + <li><strong>Speed:</strong> 7 &#8211; It's fast, but again, its interface is not anything fancy</li> <li><strong>Features:</strong> 7 &#8211; Detects broken links and redirections, notes, groups</li> <li><strong>Simplicity:</strong> 6 &#8211; It has FAQs but it could look confusing for inexperienced users</li> <li><strong>Interface/Design:</strong> 6 &#8211; Nothing special, no eye candy, no <span class="caps">AJAX</span>

@@ -300,19 +300,19 @@ <p><strong>Overview</strong><br />

The best feature offered by Simpy is the link detection service, able to detect broken links, duplicates and redirections. Everything else looks pretty normal and nothing special: it offers tag management, groups, notes, the usual tools. Copies of your bookmarks are <span class="caps">NOT</span> cached, and clicking on the <em>cached</em> - link will take you to web.archive.org, hoping that it cached the page you&#8217;re looking for (hell even I could do + link will take you to web.archive.org, hoping that it cached the page you're looking for (hell even I could do that!).<br /> - No <span class="caps">AJAX</span>, nothing too pretty. Boring? Well, no, let&#8217;s call it functional and + No <span class="caps">AJAX</span>, nothing too pretty. Boring? Well, no, let's call it functional and essential.</p> <p><strong>Suitable for</strong>: Anybody, moderate experience required</p> <h3><a href="http://blogmarks.net">Blogmarks</a><br /> <img src="/images/pictures/socbook/blogmarks.jpg" alt="" /> </h3> <ul> - <li><strong>Speed:</strong> 5 &#8211; It&#8217;s slow. One of the main reasons ought to be the thumbnails: every + <li><strong>Speed:</strong> 5 &#8211; It's slow. One of the main reasons ought to be the thumbnails: every bookmark has an associated image!</li> <li><strong>Features:</strong> 7 &#8211; Excellent thumbnail support, Private tags, usual things</li> - <li><strong>Simplicity:</strong> 6 &#8211; It&#8217;s pretty straightforward, but there&#8217;s only one page to + <li><strong>Simplicity:</strong> 6 &#8211; It's pretty straightforward, but there's only one page to help new users</li> <li><strong>Interface/Design:</strong> 7 &#8211; Simple and essential, no <span class="caps">AJAX</span>, not too fancy</li>

@@ -329,13 +329,13 @@ <p><strong>Suitable for</strong>: Anybody, moderate experience required</p>

<h3>Conclusions</h3> <p>Although del.icio.us is still the leading service for social bookmarking, its competitors are obviously getting better. Among the ones I reviewed today, at least some of them look promising: Blinklist is definitely the most - advanced in terms of features offered and technology used, and I think I&#8217;ll try it out a bit more and see if + advanced in terms of features offered and technology used, and I think I'll try it out a bit more and see if it can be better than del.icio.us in the long run. Spurls is also tempting especially because it offers various interesting features without <em>forcing</em> you to abandon your del.icio.us account &#8211; and that was an excellent (and wise) feature Spurl developers chose to implement, without any doubt. Regarding my old favourite, Ma.gnolia, it still deserves a mention, mainly for being a succesful blend of latest technology and class design, without being too extreme.</p> -<p>So&#8230; what&#8217;s <em>your</em> favorite then?</p> +<p>So&#8230; what's <em>your</em> favorite then?</p> <h3>Notes and Resources</h3> <p class="footnote" id="fn1"><a href="#fnr1"><sup>1</sup></a> Social Bookmarking, <a href="http://en.wikipedia.org/wiki/Social_bookmarking">Wikipedia Page</a></p>

@@ -343,10 +343,10 @@ <p class="footnote" id="fn2"><a href="#fnr2"><sup>2</sup></a> <a href="http://del.icio.us/">del.icio.us</a>, the first

social bookmarking service</p> <p class="footnote" id="fn3"><a href="#fnr3"><sup>3</sup></a> <a href="http://www.oreillynet.com/pub/a/oreilly/tim/news/2005/09/30/what-is-web-20.html">What is Web 2.0?</a> - &#8211; O&#8217;Reilly article</p> + &#8211; O'Reilly article</p> <p class="footnote" id="fn4"><a href="#fnr4"><sup>4</sup></a> <a href="http://shakk.wordpress.com/2006/04/20/mother-of-all-social-bookmarking-services-icons/">Mother of all - social bookmarking services icons</a> &#8211; A cool mosaic of all the social bookmarking sites&#8217; icons. + social bookmarking services icons</a> &#8211; A cool mosaic of all the social bookmarking sites' icons. </p> <p class="footnote" id="fn5"><a href="#fnr5"><sup>5</sup></a> Other reviews and comparisons of social bookmarking services:</p>
M contents/articles/succeeding-with-agile-review.htmlcontents/articles/succeeding-with-agile-review.html

@@ -12,15 +12,16 @@ <p>&#8220;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.&#8221;</p> </blockquote> - <p style="padding-left:5em;">&#8212; Mike Cohn, <em>Succeeding with Agile</em></p> - <p>Great. That&#8217;s just great. Good job I started with the <em>Introduction</em> first, otherwise the first + <p style="padding-left:2rem;">&#8212; 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&#8217;t</em> teach you about <em>Scrum</em> or <em>agile</em> methodologies, it won&#8217;t give you a + <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&#8230; instead, it takes all that for granted and teaches how to pragmatically adopt &#8212; or better, <acronym title="Awareness, Desire, Ability, Promotion, Transfer"><span class="caps">ADAPT</span></acronym> to &#8212; <em>Scrum</em>, in the context of yourself, your team, - and even your entire organization.</p> + and even your entire organization. + </p> <blockquote> <p>&#8220;[&#8230;] 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

@@ -31,8 +32,8 @@ <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> &#8230; <em>is it really more productive?</em> &#8230; <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&#8217;t think of.</p> - <p>If you don&#8217;t know what all this is about, then you&#8217;d better do your homework first:</p> + 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> &#8211; An Agile Process</a></li>

@@ -47,7 +48,7 @@ <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&#8217;ll notice that the start of each part is like a new + 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>

@@ -71,10 +72,11 @@ <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&#8217;ll meet <em>skeptics</em>, <em>followers</em>, - <em>saboteurs</em> and <em>diehards</em> &#8212; no hope? Well, of course not: you&#8217;ll learn how to + possible reactions to becoming <em>agile</em>. You'll meet <em>skeptics</em>, <em>followers</em>, + <em>saboteurs</em> and <em>diehards</em> &#8212; 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> + responsabilities related to <em>Scrum</em>. + </p> </section>

@@ -82,7 +84,7 @@ <section class="section">

<header> <h1 id="h_4" class="toc">Part III: Teams</h1> </header> - <p>Up next, Teams. You&#8217;re no longer dealing with single-minded individuals, but with more complex + <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 &#8212; The Product Backlog</strong>, which provides invaluable insights on this important everyday tool. <strong>Chapter 15 &#8212; Planning</strong> is another interesting read:

@@ -94,12 +96,12 @@ <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&#8217;re nearly done. You probably know most of the tricks by now, - but there&#8217;s still a lot to learn. <strong>Chapter 17 &#8212; Scaling <em>Scrum</em></strong> is + <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 &#8212; 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 &#8212;Cohexisting with Other Approaches</strong> almost feels heretical at times: mixing <em>Scrum</em> with Waterfall? Is that even conceivable? Yes. Sometimes - it&#8217;s the only way, especially when you have to deal with compliance to standards like ISO9001. + 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>

@@ -112,7 +114,8 @@ <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> + <em>agile</em>. + </p> </section>

@@ -122,12 +125,12 @@ <section class="section">

<header> <h1 id="h_7" class="toc">Technical Analysis</h1> </header> - <p>I&#8217;m not exaggerating when I say that this is <em>by far</em> the best book I&#8217;ve read in the past + <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&#8217;ll end up with a handy (and free!) + 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&#8217;t mean the book isn&#8217;t a worthwhile read, but rather that it can also be used as a + <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 class="section">

@@ -135,9 +138,9 @@ <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&#8230; it&#8217;s not a technical manual of + how technical documentation should be written, except that&#8230; 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&#8217;s never a huge blob of boring text, never a series of pointless pictures: Mike + 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

@@ -153,23 +156,24 @@ </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&#8217;s informal and conversational style is one of the main reasons + 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> &#8212; Whenever a new strategy or practice is introduced, - you&#8217;ll find one of these boxes containing a bulleted list. <em>&#8220;Commit to running the + you'll find one of these boxes containing a bulleted list. <em>&#8220;Commit to running the next two or three sprints without any overtime&#8221;</em>, &#8220;Do you understand what motivates every other person on your team? If not, find out. How? Ask them.&#8221;, &#8230; these - are just examples of some of the author&#8217;s reccommendations to put you in the right track.</li> + are just examples of some of the author's reccommendations to put you in the right track.</li> <li><strong>Objection</strong> &#8212; 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>&#8220;If the product includes less than what we&#8217;ve planned, no one will buy - it&#8221;</em>, or <em>&#8220;My team won&#8217;t self organize; team members are too passive + <em>&#8220;If the product includes less than what we've planned, no one will buy + it&#8221;</em>, or <em>&#8220;My team won't self organize; team members are too passive and look to me to lead&#8221;</em>, &#8230; of course, what makes these objection boxes valuable - is not the statement themselves, but the tips on how what to do about them. There&#8217;s not a - single one left unanswered: you really feel you&#8217;re covered in any situation.</li> + 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>

@@ -180,11 +184,11 @@ <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&#8217;s quite long (450 pages), - but also because it&#8217;s very dense of information. Another author could have made it three times longer, - but I was glad Mike didn&#8217;t. I&#8217;m pretty certain I&#8217;ll keep it near me and read bits from it - when I need to: it&#8217;s pretty much the Bible of <em>Scrum</em> adoption.</p> - <p>What&#8217;s wrong with it then? Not much. Perhaps the only thing I really missed was an introductory + <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>
M contents/articles/take-back-your-site-with-nanoc.htmlcontents/articles/take-back-your-site-with-nanoc.html

@@ -6,17 +6,17 @@ popular: true

timestamp: 1253014371 tags: "website|ruby|programming|writing" ----- -<h3>Why I don&#8217;t need a blog platform</h3> -<p>There&#8217;s nothing inherently wrong with blog platforms like Wordpress: they allow <em>anyone</em> to publish +<h3>Why I don't need a blog platform</h3> +<p>There's nothing inherently wrong with blog platforms like Wordpress: they allow <em>anyone</em> to publish content on the web using a user-friendly administration area. They were built with one thing in mind: make publishing - content on the web something as simple as possible, even for people who don&#8217;t know anything about <span + content on the web something as simple as possible, even for people who don't know anything about <span class="caps">HTML</span>, let alone server-side scripting.</p> <p>What about people who <em>do</em> know about web development though? Do they still need a blog platform? Depends. If you are comfortable with editing files using a text editor, if you enjoy using the command-line on a daily basis, if - you like programming and <em>hacking</em> a little bit, if you don&#8217;t really care about fancy and user-friendly - administration backends&#8230; <em>then you probably don&#8217;t</em>.</p> + you like programming and <em>hacking</em> a little bit, if you don't really care about fancy and user-friendly + administration backends&#8230; <em>then you probably don't</em>.</p> <p>All you need is a system to transform a bunch of source files into a web site. The good news is that such system - exists &ndash; and you&#8217;re also spoiled for choices!</p> + exists &ndash; and you're also spoiled for choices!</p> <h3>Introducing site compilers</h3> <p>The first <em>site compiler</em> I discovered was <a href="http://webby.rubyforge.org/">Webby</a>:</p> <blockquote>

@@ -50,8 +50,8 @@ decided to go for <a href="http://nanoc.stoneship.org/">nanoc</a>, simply because it was the only one that seemed to

fit all my needs.</p> <h3>A quick overview of nanoc</h3> <p>nanoc is a nifty tool written in Ruby suitable for <em>[&#8230;] building small to medium-sized websites</em>. In - other words, anything which doesn&#8217;t involve some fancy user interaction. For what concerns blogs, the only user - interaction is <em>comments</em> &ndash; but that&#8217;s fine, because there&#8217;s more than one web service for + other words, anything which doesn't involve some fancy user interaction. For what concerns blogs, the only user + interaction is <em>comments</em> &ndash; but that's fine, because there's more than one web service for that, such as <a href="http://disqus.com/">Disqus</a> or <a href="http://intensedebate.com/">IntenseDebate</a>.</p> <h4>Some details on the project</h4> <p>Compared to the alternatives, nanoc is one of the most mature and most maintained, having hit just a few weeks ago

@@ -59,11 +59,11 @@ its 3.0 release. Its creator, Denis Defreyne, uses it for his own <a href="http://stoneship.org/">web site</a> and is

involved with the project on a daily basis, both coding and offering support to nanoc users like myself who regularly ask questions on the <a href="http://groups.google.com/group/nanoc">nanoc user group</a>.</p> <p>Denis also seems very concerned about keeping documentation up-to-date &ndash; something that really impressed me - from a technical writer&#8217;s point of view. The <a href="http://nanoc.stoneship.org/tutorial/">tutorial</a> he put + from a technical writer's point of view. The <a href="http://nanoc.stoneship.org/tutorial/">tutorial</a> he put together will get you started in no time, and the <a href="http://nanoc.stoneship.org/manual/">manual</a> will explain everything else you may possibly want to know. When release 3.0 came out he even put together a <a - href="http://nanoc.stoneship.org/migrating/">migration guide</a>. If this is still not enough and you don&#8217;t - mind spending some time extending the system, nanoc&#8217;s <a href="http://nanoc.stoneship.org/doc/3.0.0/">RDoc + 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="/images/pictures/nanoc-structure.png" alt="" /></p>

@@ -77,12 +77,12 @@ assets.</li>

<li><strong>layouts</strong> &ndash; the site layouts (and partial layouts)</li> <li><strong>lib</strong> &ndash; place your custom ruby code and vendor libraries here</li> <li><strong>output</strong> &ndash; your &#8220;compiled&#8221; site, ready to be deployed</li> - <li><strong>config.yaml</strong> &ndash; your site&#8217;s configuration file. The only one (and it&#8217;s just a few + <li><strong>config.yaml</strong> &ndash; your site's configuration file. The only one (and it's just a few lines)</li> <li><strong>Rakefile</strong> &ndash; place any custom Rake task here</li> <li><strong>Rules</strong> &ndash; defines the rules for compilation, layout and routing</li> </ul> -<p>Here&#8217;s the default <code>config.yaml</code> file:</p> +<p>Here's the default <code>config.yaml</code> file:</p> <div class='yaml'> <pre><code>--- data_sources:

@@ -96,7 +96,7 @@ href="http://nanoc.stoneship.org/doc/3.0.0/Nanoc3/DataSources/FilesystemCompact.html">filesystem_compact</a> data

source requires that you create two files in the /content folder for each article or page of your web page:</p> <ul> <li>One containing the actual content of the page</li> - <li>Another for the page&#8217;s arbitrary metadata</li> + <li>Another for the page's arbitrary metadata</li> </ul> <p>By personal preference, I chose the <a href="http://nanoc.stoneship.org/doc/3.0/Nanoc3/DataSources/FilesystemCombined.html">filesystem_combined</a> data

@@ -125,7 +125,7 @@ <p>At run time, the content goes through a Textile filter and the metadata is used in layouts, to generate tag links

automatically, for example.</p> <h4>Layouts, filters, and helpers</h4> <p>Layouts in nanoc are similar to layouts and views in Rails, but much simpler. The same applies to helpers. - Here&#8217;s a snippet from my <a href="http://github.com/h3rald/h3rald/tree/master/layouts/default.erb">default + Here's a snippet from my <a href="http://github.com/h3rald/h3rald/tree/master/layouts/default.erb">default layout</a>:</p> <div class='text'> <pre><code>&lt;div id="container"&gt;

@@ -153,12 +153,12 @@ <%= render 'article_buttons' if @item[:type] == 'article' %>

&lt;/div&gt; &lt;/div&gt;</code></pre> </div> -<p>This source code snippet shows quite a few features of nanoc&#8217;s layouts:</p> +<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&#8217;s title, for example. + <code>@item[:title]</code> returns the page's title, for example. </li> - <li>Layouts can be nested, and behave like Rails&#8217;s partials. The <code>render</code> takes a string parameter + <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> <li>Layouts support any kind of filter, like <span class="caps">ERB</span> for example. Go crazy.</li>

@@ -168,7 +168,7 @@ Check the <a href="http://nanoc.stoneship.org/doc/3.0.0/">source code docs</a> for more info, and of course feel free

to create your own as you see fit.</p> <p>Finally, filters are used to filter content markup. nanoc ships with <a href="http://nanoc.stoneship.org/manual/#list-of-built-in-filters">almost everything you need</a>, from Textile to - Haml to RDoc, but nobody forbids you to create your own, and it&#8217;s dead easy.</p> + Haml to RDoc, but nobody forbids you to create your own, and it's dead easy.</p> <h4>Rules and tasks</h4> <p>While tasks (as in Rake tasks) do not constitute a huge part of nanoc (but as usual, you may need to create your own to perform custom operations), Rules became, as of version 3, one of the key concepts to grasp in order to make

@@ -180,11 +180,11 @@ </li>

<li>Define how layout are handled, which filters to apply to a particular layout, etc.</li> </ul> <p>You can find more information in the <a href="http://nanoc.stoneship.org/manual/#rules">manual</a>, along with other - important information, but for now, let&#8217;s say you should be familiar with <em>most</em> of nanoc&#8217;s jargon - and how it works. Let&#8217;s see what you can do with it, in practice.</p> + important information, but for now, let's say you should be familiar with <em>most</em> of nanoc's jargon + and how it works. Let's see what you can do with it, in practice.</p> <h3>Migrating from your blog platform</h3> <p>As of version 7, h3rald.com has been powered by the <a href="http://www.typosphere.org">Typo</a> blog platform. If - you are not familiar with it, let&#8217;s just say it&#8217;s a sort of Wordpress built on top of Rails: database + you are not familiar with it, let's just say it's a sort of Wordpress built on top of Rails: database backend, pretty admin front-end, tags, comments, and all sort of things a blog may need. While Typo is pleasant enough to use, it has all the inherent disadvantages of any other similar platform:</p> <ul>

@@ -192,32 +192,32 @@ <li>It relies on a database</li>

<li>It relies on server-side scripting to render pages</li> <li>It uses a complex caching mechanism to produce, ultimately, semi-static pages</li> <li>It may be subject to exploits, attacks, high server loads, and similar</li> - <li>You can&#8217;t really customize it beyond a certain point</li> + <li>You can't really customize it beyond a certain point</li> <li>You have to upgrade your backend frequently, and often is not as painless as you may expect</li> - <li>You can&#8217;t use versioning tools like git for your content, as it&#8217;s stored in a database</li> + <li>You can't use versioning tools like git for your content, as it's stored in a database</li> </ul> -<p>I&#8217;m not claiming that nanoc is blogging&#8217;s silver bullet (it was not created for that), but for sure:</p> +<p>I'm not claiming that nanoc is blogging's silver bullet (it was not created for that), but for sure:</p> <ul> <li>It <em>does not</em> rely on a database</li> <li>It <em>does not</em> rely on server-side scripting to render pages (not in real-time, anyway)</li> <li>It <em>does not</em> need a complex caching mechanism simply because it produces static pages</li> <li>It is definitely less prone to nasty things</li> - <li>It&#8217;s extremely flexible and hackable with very little effort</li> - <li>You don&#8217;t have to upgrade all the time, but it is <em>really</em> painless if you decide to</li> + <li>It's extremely flexible and hackable with very little effort</li> + <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&#8217;s see how it worked out. + <em>good thing</em>, so let's see how it worked out. </p> <h4>Posts, pages and comments</h4> -<p>Out of Typo&#8217;s MySQL database, I just wanted to get the following data:</p> +<p>Out of Typo's MySQL database, I just wanted to get the following data:</p> <ul> <li>Pages and posts</li> <li>Tags</li> <li>Comments</li> </ul> <p>Following the approach used by <a href="http://github.com/mojombo/jekyll">Jekyll</a>, I decided to use the simple and - powerful <a href="http://sequel.rubyforge.org/">Sequel</a> gem. I&#8217;m sorry to disappoint you, but the whole + powerful <a href="http://sequel.rubyforge.org/">Sequel</a> gem. I'm sorry to disappoint you, but the whole migration process can be summarize with the following Rake task:</p> <div class='ruby'> <pre><code>task :migrate, :db, :usr, :pwd, :host do |t, args|

@@ -249,11 +249,11 @@ c = c+1

end end</code></pre> </div> -<p>That&#8217;s it. Well, almost: you can find the <code>get_comments</code>, <code>get_tags</code> and +<p>That's it. Well, almost: you can find the <code>get_comments</code>, <code>get_tags</code> and <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&#8217;s metadata. The <code>write_page</code> method simply creates a file in the + 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> <h4>Filters and highlighters</h4>

@@ -273,17 +273,17 @@ end

end</code></pre> </div> -<p>Yes, that&#8217;s it. Granted, the <code>bb-ruby</code> gem does all the work, but notice how easy it is to just plug - in new Ruby code into nanoc&#8217;s architecture!</p> +<p>Yes, that's it. Granted, the <code>bb-ruby</code> gem does all the work, but notice how easy it is to just plug + in new Ruby code into nanoc's architecture!</p> <p>The next big challange was code highlighting. After a quick research, I found at least a half dozen of possible solutions to highlight source code. Some were javascript based, others were based on a server-side language like <span class="caps">PHP</span>, Ruby or Python. Again, I looked at Jekyll for inspiration and discovered they integrated the <a href="http://www.pygments.org">Pygments</a> <em>Python</em> library. Why use a Python library for code - highlighting in a Ruby-based project? Because there&#8217;s nothing to stop you (if you can run Python on your server, + highlighting in a Ruby-based project? Because there's nothing to stop you (if you can run Python on your server, that is), because it looks very neat and because it supports a lot of different programming languages.</p> <p>Lazy as I am, I more or less dropped <a href="http://github.com/h3rald/h3rald/blob/master/lib/albino.rb">Chris - Wanstrath&#8217;s Ruby wrapper</a> into my <code>/lib</code> folder (I just used Open3 instead of Open4 for Windows - compatibility), and monkey-patched nanoc&#8217;s filtering helper as follows:</p> + Wanstrath's Ruby wrapper</a> into my <code>/lib</code> folder (I just used Open3 instead of Open4 for Windows + compatibility), and monkey-patched nanoc's filtering helper as follows:</p> <div class='ruby'> <pre><code>module Nanoc3::Helpers::Filtering

@@ -377,11 +377,11 @@ buffer

end end</code></pre> </div> -<p>Nothing too daunting, once you get used to Ruby&#8217;s <span class="caps">XML</span> builder. I followed a similar +<p>Nothing too daunting, once you get used to Ruby's <span class="caps">XML</span> builder. I followed a similar approach for my <a href="/articles">monthly archives</a></p> <h4>3rd-party services</h4> <p>Finally, the interactive bits. I basically turned to third-party services and a bit of jQuery for everything which - required user-interaction or pulling data from other web sites. Here&#8217;s a list of services and APIs I currently + required user-interaction or pulling data from other web sites. Here's a list of services and APIs I currently use:</p> <ul> <li><a href="http://intensedebate.com/">IntenseDebate</a>, for comments.</li>

@@ -399,18 +399,18 @@ </ul>

<p>If you want to know how I integrated them, check out my <a href="http://github.com/h3rald/h3rald/tree/master/content/js">/js folder</a>, it was very simple, really.</p> <h3>Conclusion</h3> -<p>I was very happy of switching to nanoc. It didn&#8217;t take me long, and I spent most of the time with non-nanoc +<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&#8217;re not comfortable with hacking your way a little bit, then maybe it&#8217;s not for + 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="/images/pictures/nanoc-compile.png" alt="" /></p> -<p>Personally, I&#8217;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&#8217;m +<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 have to touch a few files.</p> -<p>nanoc&#8217;s metadata is mindblowing for its simplicity and power: although you&#8217;re not dealing with a +<p>nanoc's metadata is mindblowing for its simplicity and power: although you're not dealing with a database, you can query your content in the easiest ways possible. Whenever I needed a way to easily access pages, - filter them, add extra logic to them, I just added metadata. If you forget something, you don&#8217;t have to change + filter them, add extra logic to them, I just added metadata. If you forget something, you don't have to change your database tables, create new relationships or anything of the sort, you simply add metadata to pages.</p> <p>Be warned that tweaking nanoc gets addictive very quickly: you soon end up creating silly little tasks for making things just the way you want. For me, adding a new article to my blog now just means this:</p>
M contents/articles/textlinkads_sidebar_v01.htmlcontents/articles/textlinkads_sidebar_v01.html

@@ -6,18 +6,18 @@ tags: "rails|opensource"

----- <p>I thought it would be nice to share the code of the sidebar I created to display <a href="http://www.text-links-ads.com">Text Link Ads</a> sponsor links on my Typo powered blog.</p> -<p>There&#8217;s actually another <a +<p>There's actually another <a href="http://blog.nanorails.com/articles/2006/10/01/a-new-rails-plugin-for-textlinkads-including-support-for-feedvertising">plugin</a> - which was made for Typo 2.6, but unfortunately it doesn&#8217;t work with Typo 4.1.1.</p> + which was made for Typo 2.6, but unfortunately it doesn't work with Typo 4.1.1.</p> <h3>Installation</h3> <p>Just unzip it inside your vendor/plugins directory. The new sidebar should appear in the list of your available - sidebars in the Typo&#8217;s administration area.</p> + sidebars in the Typo's administration area.</p> <h3>Configuration</h3> -<p>In Typo&#8217;s administration area, configure the following settings for this sidebar:</p> +<p>In Typo's administration area, configure the following settings for this sidebar:</p> <ul> <li><strong>Title</strong>: The title of the sidebar</li> - <li><strong><span class="caps">KEY</span></strong>: Your TLA&#8217;s <span class="caps">XML</span> key</li> - <li><strong>Affiliate ID</strong>: Your TLA&#8217;s affiliate ID</li> + <li><strong><span class="caps">KEY</span></strong>: Your TLA's <span class="caps">XML</span> key</li> + <li><strong>Affiliate ID</strong>: Your TLA's affiliate ID</li> <li><strong>Advertise Here</strong>: A message shown when no links are displayed.</li> </ul> <p><strong><a href="/files/textlinkads_sidebar_v0.2.zip">Download Text Links Ads Sidebar v0.2</a></strong></p>
M contents/articles/the-internet-philosopher.htmlcontents/articles/the-internet-philosopher.html

@@ -6,54 +6,54 @@ 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 &#8211; that&#8217;s good. I have moved to India just to afford and get + <p>Hi. Respect for being an internet addict &#8211; 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&#8217;s just telling me something about + 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 &#8211; after all it was just one click away &#8211; mostly for curiosity.That website was one of the most - plain ones I&#8217;ve ever come across, perhaps to help the visitor to understand that <em>content</em> is the only + 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>&#8220;I&#8217;m trying to live for my opinions and ideas&#8221;</em></p> +<p><em>&#8220;I'm trying to live for my opinions and ideas&#8221;</em></p> <p style="float:right;"><img src="/images/pictures/lampinen/piccadilly.jpg" alt="" /></p> -<p>This is Daniel&#8217;s &#8220;statement&#8221; which guides his entire life. He lives for his opinions and ideas, he +<p>This is Daniel's &#8220;statement&#8221; 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&#8217;t want to do that, and &#8211; believe it or not &#8211; he - didn&#8217;t want a business career either: he just wanted to spend time on the Internet, creating <em>things</em>. + other jobs anywhere in the world. He didn't want to do that, and &#8211; believe it or not &#8211; 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&#8217;ve ever seen: they were +<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>&#8220;Imagine what could have happened if he could have used our communication systems&#8221;</em>, trying to promote - Telecom&#8217;s services, and it has been criticized<sup class="footnote" id="fnr2"><a href="#fn2">2</a></sup> many + 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&#8217;s homepage. Obviously he&#8217;s far from being + 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&#8217;s much, <span + 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 &#8211; that&#8217;s all + futile things. He lives in a cheap hotel in Puri, India, where he can access the Internet &#8211; 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 &#8211; at least from someone&#8217;s point of view.</p> -<p><em>&#8220;Yeah, OK, it&#8217;s all good so far but how can he live like that? Has he got a job?&#8221;</em></p> + night, buying drugs or waste money on trendy clothes &#8211; at least from someone's point of view.</p> +<p><em>&#8220;Yeah, OK, it's all good so far but how can he live like that? Has he got a job?&#8221;</em></p> <p>Yes and no &#8211; 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>&#8220;[&#8230;] 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>&#8221;</em>.<br /> - It&#8217;s quite similar to charity and it&#8217;s an interesting idea, whose success highly depends on the - conscience of the giver: <em>the more honest his soul his, the more he&#8217;ll give</em>.</p> + 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&#8217;t call him a beggar. Daniel has his own way of seeing the economy of the Rich World and also his own views +<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>

@@ -61,12 +61,12 @@ <p>&#8220;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 /> [&#8230;] 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&#8217;s today restaurants where you can pay as much as you thought that the food + 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&#8217;s plenty of different policies on what you should put your money on. On of the policies is to follow + <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&#8217;s ok to buy a Gucci bag for $1000 but think it&#8217;s out of the question to give something to someone - that &#8220;doesn&#8217;t wanna work for the money&#8221;.</p> + it's ok to buy a Gucci bag for $1000 but think it's out of the question to give something to someone + that &#8220;doesn't wanna work for the money&#8221;.</p> <p>[&#8230;] It can even be fun to get fooled by a souvenir salesman in a warm country &#8211; if you let go of some of the pride and the &#8220;millimeter justice&#8221;. Do that. You can still give as much or more to Unicef. I prefer a society where people put money on other people &#8211; both those struck by a catastrophe and rich

@@ -75,10 +75,10 @@ href="#fn5">5</a></sup>&quot;</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&#8217;ll respect your decision: someone told him not to buy drugs and he never did, while another asked him to + 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&#8217;re curious about what he buys, Daniel added a list of expenses<sup class="footnote" id="fnr8"><a + 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>

@@ -111,33 +111,33 @@ 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 &#8220;ideas&#8221; in the same way: you start emailing him explaining your situation and your - needs, and he&#8217;ll try his best to come up with a solution and his own opinions. You won&#8217;t believe it, but + 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="/images/pictures/lampinen/view.jpg" alt="" /></p> -<p>Perhaps one of the most interesting things about Daniel&#8217;s website is his journal. Not a proper blog, but just a - single static webpage hosting all his daily thoughts: you can&#8217;t comment to them, but reading some passages may +<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&#8217;s pretty easy) and read what he - wrote about that, I tried with &#8220;Internet&#8221; and here&#8217;s something I came across:</p> + 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 &#8220;Internet&#8221; and here's something I came across:</p> <blockquote> - <p>&#8220;Now I&#8217;m finally realizing my two year old plans to be in a poor country. The only thing I&#8217;m + <p>&#8220;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&#8217;s good for everybody, is that I - don&#8217;t need many dollars/euros to survive.&#8221;</p> + 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.&#8221;</p> </blockquote> -<p>This was one of his early posts, and yes, that&#8217;s exactly what he started to do&#8230;</p> +<p>This was one of his early posts, and yes, that's exactly what he started to do&#8230;</p> <blockquote> - <p>So, I&#8217;m living at the internet. Hotel room, beach, internet. That&#8217;s pretty monotonous. But all - together better than better than s[**]t job. I&#8217;m gonna contact medias that cover the internet and offer to + <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&#8217;m happily addicted to something that makes me smarter and finding the right + <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&#8217;s a nice atmosphere.</p> + 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>

@@ -146,33 +146,34 @@ <p>&#8220;Yesterday I searched on Google for the swedish words for &#8220;I am an internet addict&#8221; and

e-mailed the words &#8220;respect for being an internet addict &#8211; that is good&#8221; to the bloggers that had written the sentence &#8220;I am an internet addict&#8221; during the last year.&quot;</p> </blockquote> -<p>Yes, that&#8217;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>&#8220;I am not an Internet addict! You might be, but I&#8217;m not.&#8221;</em> &#8211; He obviously - didn&#8217;t mean to insult neither me nor any other blogger he mailed: for him, &#8220;being an internet +<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>&#8220;I am not an Internet addict! You might be, but I'm not.&#8221;</em> &#8211; He obviously + didn't mean to insult neither me nor any other blogger he mailed: for him, &#8220;being an internet addict&#8221; is probably one of the best things people &#8211; especially young people &#8211; can do.</p> -<p>Shocked? Yes, it&#8217;s understandable: we hear a lot about Internet addiction in these days, and I was reading in a +<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>&#8220;[&#8230;] 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.&#8221;</p> </blockquote> -<p>Is it though? Daniel Lampinen truly admints he&#8217;s an Internet addict, but he most definitely doesn&#8217;t have +<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>&#8220;On [the] Give me money [page] there&#8217;s now a list of demands from the givers. The first demand come - from the latest giver: no drugs. Which I&#8217;m fine with. As you can see on What I&#8217;m buying, I&#8217;ve + <p>&#8220;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 &#8220;get away from reality&#8221;, or to &#8220;have - fun&#8221;. Not even beer, which I only take to relax. That&#8217;s how dull I am. The reality rules.&quot;</p> + fun&#8221;. Not even beer, which I only take to relax. That's how dull I am. The reality rules.&quot;</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&#8217;s society: he had a boring job which he didn&#8217;t enjoy, and he simply realised that the Internet - <em>could</em> &#8211; at least sometimes &#8211; be better than ordinary life. He openly admits he&#8217;s a weird - human being, and he&#8217;s fine with that, but you can be sure of two things:</p> + World's society: he had a boring job which he didn't enjoy, and he simply realised that the Internet + <em>could</em> &#8211; at least sometimes &#8211; 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&#8217;s totally, absolutely honest, in anything he does, and he&#8217;s not afraid to express his own + <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>

@@ -180,7 +181,7 @@ <p>How many people in the Rich World can accomplish either of these things? Please raise your hands&#8230;</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&#8217;s <a +<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&amp;cod=3432">Gandhi e Telecom Italia</a> &#8211; Comments on

@@ -193,12 +194,12 @@ 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 &#8220;Eat as you Want, Pay as you Wish&#8221; 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&#8217;s <a +<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&#8217;s <a +<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&#8217;s <a - href="http://www.ropix.org/money.html">Money page</a> lists all possible ways to dive him money, most notably: +<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

@@ -209,9 +210,9 @@ 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&#8217;s documented in the <a +<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&#8217;s <a +<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>
M contents/articles/the-merb-way-review.htmlcontents/articles/the-merb-way-review.html

@@ -8,10 +8,11 @@ <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&#8217;s acclaimed Rails bible.</p> -<p>Apparently it only takes 300 pages to describe a web framework nowadays! I couldn&#8217;t help but feeling a bit + <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 &ndash; and the whole <a - href="http://www.merbivore.com">Merb</a> framework &ndash; with some initial skepticism: isn&#8217;t Ruby on + href="http://www.merbivore.com">Merb</a> framework &ndash; 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>

@@ -22,61 +23,62 @@ <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&#8217;re reading about a <em>Hacker&#8217;s Web - Framework</em>. That&#8217;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&#8217;s Handbook</em> rather than - an ordinary guide on how to develop web applications. You won&#8217;t learn what <span class="caps">MVC</span> is by - reading this book, and don&#8217;t expect to be taught what a <em>mixin</em> is; you are reading a book about a Ruby +<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&#8217;s fundamentals (from the layout of a Merb application to an + 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 &#8220;introduced&#8221; 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&#8217;s how Merb does this</em>.</p> + <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&#8217;s design and extreme flexibility without being <em>in the way</em> of your + 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&#8217;s code from the top to the + 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&#8217;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&#8217;t +<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&#8217;m not exaggerating) is Ruby source code. In a good way, it feels like a +<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&#8217;t feel quite right with this book is its title: <em>Merb + 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&#8217;t teach you how to create a blog in five minutes, but perhaps a thorough + 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&#8217;ll have to create your own Merb plugin from scratch.</p> + 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>&#8220;There&#8217;s too much code!&#8221;</em> she said, without hesitation. + her what was wrong with it. <em>&#8220;There's too much code!&#8221;</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&#8217;s not much featuring something other than Merb itself. Basically the exact opposite of all the other + 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&#8217;s design is very intriguing, and you grasp the essentials by reading this book, but a few diagrams + <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 &ndash; unfortunately the chapters about them are far too short and shallow. The reasoning behind this is that <em>their future may be

@@ -88,4 +90,5 @@ 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> + great job presenting and describing it. +</p>
M contents/articles/the-rails3-way-review.htmlcontents/articles/the-rails3-way-review.html

@@ -9,18 +9,18 @@ -----

<section class="section"> <p>Obie did it, again. With the second edition of his former masterpiece, <em>The Rails Way</em>, he managed to - outdo himself delivering a new, even more useful, Rails Bible. Wether you&#8217;re a Ruby on Rails professional + outdo himself delivering a new, even more useful, Rails Bible. Wether you're a Ruby on Rails professional like him or just an enthusiast, this book is pretty much everything you need to learn how to master the third - release of DHH&#8217;s Ruby web framework.</p> + release of DHH's Ruby web framework.</p> <p><a href="http://tr3w.com/">The Rails 3 Way</a> is no ordinary second edition. If you already own <em>The Rails - Way</em>, you&#8217;ll be pleasantly surprised that this is a different, more polished book. While something - had to remain the same, there&#8217;s a lot of new content in its 708 pages, and even the old content has been + Way</em>, you'll be pleasantly surprised that this is a different, more polished book. While something + had to remain the same, there's a lot of new content in its 708 pages, and even the old content has been rewritten or at least revised.</p> - <p>It doesn&#8217;t matter whether you already know Rails 2.x or you&#8217;re jumping straight into the Rails 3 - world, if you use Rails, you can&#8217;t miss this book.</p> + <p>It doesn't matter whether you already know Rails 2.x or you're jumping straight into the Rails 3 + world, if you use Rails, you can't miss this book.</p> <p>I started the <a href="/articles/the-rails-way-review/">review of the first edition</a> with a quote from my fiancée (now wife) on how pointless programming books are, especially those dealing with newish technologies: - they tend to go out of date fairly quickly. While this still holds true, there&#8217;s not much you can do about + they tend to go out of date fairly quickly. While this still holds true, there's not much you can do about it, except maybe purchasing a digital edition of the book instead. However, if you want to keep a good Rails reference book by your side, this has to be the one.</p>

@@ -35,11 +35,11 @@ <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 - see that the new book is considerably shorter: about 200 pages less. This doesn&#8217;t mean it contains + see that the new book is considerably shorter: about 200 pages less. This doesn't mean it contains less information, quite the opposite: the new book contains a lot more stuff with less <em>fluff</em>. Obie managed to reduce digressions to a bare minimum and focus on providing more informative content to the readers using less text. Think of it as a <em>fat-free</em> book.</p> - <p>While no <em>What&#8217;s new in Rails 3</em> section is included in the book, Obie points out the new stuff + <p>While no <em>What's new in Rails 3</em> section is included in the book, Obie points out the new stuff when needed (but not always). An example is chapter 12, <em>Ajax on Rails</em>, in which changes introduced by Rails 3 clearly stand out, especially the section on Unobtrusive JavaScript (<span class="caps">UJS</span>).</p>

@@ -47,9 +47,9 @@ <p>Although the book is divided into chapters, it can also be divided into parts (each dealing with a specific

theme) simply by looking at the front edge. According to this theme-based partitioning, Active Record makes up for nearly <em>a quarter</em> of the book (173 pages), followed by <em>Active Support <span class="caps">API</span></em> appendix and the <em>All About Helpers</em> chapter.</p> - <p>Another nice addition that can really make the difference when you&#8217;re in a hurry is the <em>Method + <p>Another nice addition that can really make the difference when you're in a hurry is the <em>Method Index</em>, which is separate from the main Index. It seems to account for all the methods in all (or at - least the most important) classes in Rails. I didn&#8217;t check method by method, but it is pretty + least the most important) classes in Rails. I didn't check method by method, but it is pretty comprehensive nonetheless, based on some quick spot checking.</p> </section>

@@ -67,8 +67,8 @@ <p>Even though Rails 3 is less opinionated than early versions, in that it allows for easy reconfiguration

of Rails assumptions, this book is more opinionated than ever.</p> </blockquote> <p style="margin-left: 4em">&ndash; Obie Fernandez, <cite>Introduction to <em>The Rails Way</em></cite></p> - <p>In other words, you won&#8217;t find an ERb view in the whole book (Haml rulez!) and if you don&#8217;t like - RSpec&#8230; well, you&#8217;d better skip Chapter 18 altogether.</p> + <p>In other words, you won't find an ERb view in the whole book (Haml rulez!) and if you don't like + RSpec&#8230; well, you'd better skip Chapter 18 altogether.</p> <p>The other big difference with traditional Ruby and Rails books is the amount of reference to third-party code, mainly rubygems. Rails comes with no authentication functionality? So what: <a href="https://github.com/binarylogic/authlogic">Authlogic</a> and <a

@@ -84,20 +84,20 @@

<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&#8217;s reference material. Plenty of it, a good 40% I daresay. The good thing is that (unlike the - first edition) it won&#8217;t bore you to death: take Chapter 5 (Working with Active Record) for example, - you&#8217;ll fly through find-related methods so swiftly you&#8217;ll regret when it&#8217;s over. Active - Support? I didn&#8217;t read every line of Appendix B, but when I want to know something about inflection + <p>Then there's reference material. Plenty of it, a good 40% I daresay. The good thing is that (unlike the + first edition) it won't bore you to death: take Chapter 5 (Working with Active Record) for example, + you'll fly through find-related methods so swiftly you'll regret when it's over. Active + Support? I didn't read every line of Appendix B, but when I want to know something about inflection methods I will know exactly where to find them, and what to expect: the method signature, a few lines of text, and a short example at most.</p> <p>My only regret? Cheat sheets. Or better, the lack of them. More tables, please! Granted, the web is full of Rails cheat sheets, but a few of them at the end of the book or even in a separate foldable add-on like in the <a href="http://www.pragprog.com/titles/tpp/the-pragmatic-programmer">Pragmatic Programmer</a> - can&#8217;t hurt.</p> - <p>Finally, some words about the code examples. The code/text ratio is almost 1:1, but Obie&#8217;s choice of + can't hurt.</p> + <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&#8217;t distrupt your reading. If you want to play with them, they&#8217;re even <a + 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>

@@ -107,29 +107,29 @@ <header>

<h1 id="h_3" class="toc">Organization and Writing Style</h1> </header> <figure style="float:right;"><img src="/images/pictures/books/rails3way/flick.jpg" /> - <figcaption>Yes, it&#8217;s a long book. But you don&#8217;t<br />have to read it from start to finish! + <figcaption>Yes, it's a long book. But you don't<br />have to read it from start to finish! </figcaption> </figure> - <p><em>The Rails 3 Way</em> is a book for Rails professionals. If you don&#8217;t know Ruby or if you never - heard of Ruby on Rails, this book is <em>not</em> for you. It won&#8217;t teach you what <span - class="caps">MVC</span> is, it won&#8217;t waste time on explaining <em>convention over - configuration</em>, it won&#8217;t even describe the structure of a Rails app! If you&#8217;re newcomer - to Rails&#8230; well, that&#8217;s what <a href="http://ruby.railstutorial.org/">The Rails Tutorial</a> is + <p><em>The Rails 3 Way</em> is a book for Rails professionals. If you don't know Ruby or if you never + heard of Ruby on Rails, this book is <em>not</em> for you. It won't teach you what <span + class="caps">MVC</span> is, it won't waste time on explaining <em>convention over + configuration</em>, it won't even describe the structure of a Rails app! If you're newcomer + to Rails&#8230; well, that's what <a href="http://ruby.railstutorial.org/">The Rails Tutorial</a> is for.</p> - <p>To be honest, I&#8217;m with Obie on this. If this book had been beginner-friendly, it would have been even + <p>To be honest, I'm with Obie on this. If this book had been beginner-friendly, it would have been even longer than the previous edition, and probably more boring. Instead, by assuming that the reader has been already initiated to the world of Ruby and Rails, the author can dive into the framework straight away. - Moreover, chapters are not ordered by difficulty: they don&#8217;t need to be, they need to be ordered in a + Moreover, chapters are not ordered by difficulty: they don't need to be, they need to be ordered in a way that makes sense for a Rails developer.</p> <p>Once again, this book includes personal sidebars used to voice the opinion of one of the co-authors or Rails gurus: there are plenty of &#8220;<em>Yehuda</em> says&#8221;, &#8220;<em>Xavier</em> says&#8221;, - &#8220;<em>Durran</em> says&#8221;, and so on. Nothing new there, it&#8217;s just a nice way to provide the + &#8220;<em>Durran</em> says&#8221;, and so on. Nothing new there, it's just a nice way to provide the reader with authoritative opinions on some matters.</p> <p>As I progressed through the book, I started noticing how Obie anticipated my questions and doubts: I found this to be a remarkable feature of this book, and an excellent way to make the readers feel they are on the same page with the author. If something should not be done because it may cause you problems, the author - won&#8217;t hold back. See page 214, &#8220;Extra Columns on <strong>has_and_belongs_to_many</strong> Join - Tables&#8221;, for example: it&#8217;s a cool feature, but it can cause all sort of annoyances, and the + won't hold back. See page 214, &#8220;Extra Columns on <strong>has_and_belongs_to_many</strong> Join + Tables&#8221;, for example: it's a cool feature, but it can cause all sort of annoyances, and the bottom line is: use <strong>has_many :through</strong> instead, if you need extra columns on join tables. </p>

@@ -140,10 +140,10 @@ <h1 id="h_4" class="toc">Conclusion</h1>

</header> <p><em>The Rails 3 Way</em> remains the <em>de facto</em> reference book for Rails. I was quite pleased to see that Obie improved it so much, compared to the first edition. Sure, it cannot be recommended to absolute - beginners, but it&#8217;s not a big problem: if you&#8217;re new to Rails, all you have to do is browse + beginners, but it's not a big problem: if you're new to Rails, all you have to do is browse around and read a few basic tutorials first.</p> - <p>What I really missed was a <em>What&#8217;s New</em> section, or something like that. The new stuff that was - introduced in Ruby on Rails v3 is seamlessly blended with all the rest, which is great if you&#8217;re + <p>What I really missed was a <em>What's New</em> section, or something like that. The new stuff that was + introduced in Ruby on Rails v3 is seamlessly blended with all the rest, which is great if you're tackling the framework for the first time, but not so much when you already read tons of books on Rails 2.&#215;. I would have tagged content specific to Rails 3 in some way at least, for example with labels on the side of each page. Or maybe have a short introductory chapter covering the new features, and directions
M contents/articles/thoughts-on-firefox3-and-opera95.htmlcontents/articles/thoughts-on-firefox3-and-opera95.html

@@ -8,19 +8,19 @@ <p>Opera 9.5 is out, Firefox 3 too (more or less), so, which browser are you going to use today?<br />

This new generatio of browsers offers plenty of new, innovative features and improvements over the past, in both cases:</p> <ul> - <li>You can finally use Firefox because it finally doesn&#8217;t eat up all your <span class="caps">RAM</span></li> + <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 &#8220;understand&#8221; ajaxified web sites like Gmail</li> </ul> <p>Amazingly, these two releases have a lot in common&#8230;<img src="/images/opera_sharp.png" alt="" /></p> <h3>A fresh new look</h3> -<p>Both browsers needed a new look, let&#8217;s be honest. Both didn&#8217;t really care that much in the past releases, +<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 development team came up with <span class="caps">FOUR</span> different themes, aiming to camouflage Firefox as a native application for all the major OSes.</p> <p>Personally, while I was really impressed by the new Opera theme, I was not too sure of the new direction taken for Firefox UI. Why a different theme for each different major operating system? In particular the XP theme could have been better, in my opinion. <br /> - Not a huge deal though, as both browsers are skinnable (although I&#8217;m not gonna alter the way Opera + Not a huge deal though, as both browsers are skinnable (although I'm not gonna alter the way Opera looks!).<br /> <br /> <br />

@@ -33,19 +33,19 @@ <p>Firefox 3, luckily, is much faster and more memory-efficient than its predecessor, as the development team squashed

most of the memory-related bugs. The introduction of jemalloc as the new memory allocator and also the new cycle collectory improved things quite a bit.</p> <p>Opera 9.5 still &#8220;feels&#8221; faster at startup and also the <span class="caps">GUI</span> is a bit more snappy - than Firefox&#8217;s, but Firefox 3 is <em>terribly</em> fast at interpreting Javascript.<br /> + than Firefox's, but Firefox 3 is <em>terribly</em> fast at interpreting Javascript.<br /> As a result, sites like Gmail or Google Reader are rendered almost instantaneously in Firefox 3, while Opera 9.5 is slightly slower.</p> <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&#8230; well, let&#8217;s just say that Firefox Developers built something truly wonderful with the new + and Firefox&#8230; well, let's just say that Firefox Developers built something truly wonderful with the new &#8220;AwesomeBar&#8221;: it is now possible to search history items <em>tagged pages and bookmarks</em>.</p> <p><img src="/images/awesomebar.png" alt="" /></p> -<p>But there&#8217;s more: you&#8217;ll notice that the AwesomeBar does an outstanding job in retrieving results ordered +<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 that smart.</p> -<h3>Sync&#8217;ing up</h3> +<h3>Sync'ing up</h3> <p>Opera offers the ability to sync your bookmarks, notes, custom toolbars and Quick Dial pages via the new <a href="http://link.opera.com/">Link</a> service.<br /> It looks awfully similar to <a href="https://services.mozilla.com/">Mozilla Weave</a>, an experimental extension

@@ -53,7 +53,7 @@ aiming to synchronize the whole Firefox profile.</p>

<p>Currently, Weave allows users to sync bookmarks, history and passwords in a very secure way: this truly preserve the &#8220;state&#8221; of your browser across multiple computers.</p> <p>On the other hand, Opera is virtually on <em>any device or platform</em>, so Link can be handy if you use Opera as - your mobile browser. Unfortunately, we&#8217;ll still have to wait a bit for a proper Mozilla competitor for mobile + your mobile browser. Unfortunately, we'll still have to wait a bit for a proper Mozilla competitor for mobile device, but it already <a href="http://arstechnica.com/news.ars/post/20080409-first-look-mozilla-fennec-targets-handheld-browser-market.html">looks very promising</a>.</p>

@@ -63,42 +63,42 @@ proprietary, freeware, <em>closed source</em> app.<br />

Some people are really bothered by this, especially Linux users of course: it really comes down to how religious you are about the software running on your machine.</p> <p>Being open source, Firefox is more hacker-friendly: this release, especially, also delivers an awful lot of useful - APIs which can be used to develop extensions in a much easier way. This of course isn&#8217;t an option for Opera. + APIs which can be used to develop extensions in a much easier way. This of course isn't an option for Opera. </p> <p>From a different point of view, Opera actually implements <a - href="http://dev.opera.com/articles/opera-9-5-the-next-generation-of-web-s/">more &#8216;next generation&#8217; + href="http://dev.opera.com/articles/opera-9-5-the-next-generation-of-web-s/">more &#8216;next generation' open standards</a> than Firefox, and it scores more than Firefox in the <a href="http://acid3.acidtests.org/">Acid 3</a> test.</p> -<p>Does this matter in the end? Well, yes and no: it&#8217;s nice that Opera struggles to be way ahead than others in - this, but in the end, until Firefox 3 (and Internet Explorer too!) catch up, web developers won&#8217;t dare using +<p>Does this matter in the end? Well, yes and no: it's nice that Opera struggles to be way ahead than others in + this, but in the end, until Firefox 3 (and Internet Explorer too!) catch up, web developers won't dare using any of the new features.</p> -<p>Do you have a web site optimized for Opera? No, probably not: you&#8217;re normally aiming at Firefox or IE (sigh!) +<p>Do you have a web site optimized for Opera? No, probably not: you're normally aiming at Firefox or IE (sigh!) when it comes to development, because they are still more widely used.</p> <p>All this is very sad, but still terribly true. But at least, other browsers will feel more compelled to catch up.</p> <h3>Usability is the key</h3> -<p>Personally, I prefer Opera&#8217;s philosophy of &#8220;everything in tabs&#8221; rather than having many dialog +<p>Personally, I prefer Opera's philosophy of &#8220;everything in tabs&#8221; rather than having many dialog boxes floating around for downloads, history, bookmarks etc.</p> <p>From this point of view, Firefox is arguably not as usable as Opera. Before Firefox <span class="caps">GUI</span> purists start screaming insults, I repeat that this is entirely up to your taste.</p> -<p>While Opera&#8217;s <span class="caps">GUI</span> didn&#8217;t undergo any major change, Firefox 3 definitely did: +<p>While Opera's <span class="caps">GUI</span> didn't undergo any major change, Firefox 3 definitely did: </p> <ul> <li>A new <em>Library</em> now holds all your bookmarks, history and feeds</li> <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&#8217;s where + <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="/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&#8217;t need any major overhaul, but I would have liked to have cookies and preference in tabs, too (they +<p>Opera didn't need any major overhaul, but I would have liked to have cookies and preference in tabs, too (they are pretty much the only dialog boxes left).</p> <h3>To extend or not extend?</h3> <p>This is always the eternal dilemma when it comes to Firefox vs. other browsers.</p> <p>The major strength of Firefox 3, like <em>all</em> its predecessors, lies in the hundreds of free extensions which - can be installed by user to enhance browser&#8217;s functionality. You can turn Firefox into almost anything you + can be installed by user to enhance browser's functionality. You can turn Firefox into almost anything you like.</p> -<p>Because I&#8217;m trying to be browser-independent, I like to keep my Firefox extensions to a bare minimum:</p> +<p>Because I'm trying to be browser-independent, I like to keep my Firefox extensions to a bare minimum:</p> <ul> <li>Weave</li> <li>Operator</li>

@@ -109,8 +109,8 @@ <li>StumbleUpon</li>

<li>ColorZilla</li> <li>Secure Login</li> </ul> -<p>Opera fans always boost that Opera can do pretty much everything you&#8217;d ever need <em>out of the box</em>, so - you don&#8217;t need any extension at all. Part of this is true (does Firefox have an e-mail client? No. Does +<p>Opera fans always boost that Opera can do pretty much everything you'd ever need <em>out of the box</em>, so + you don't need any extension at all. Part of this is true (does Firefox have an e-mail client? No. Does Firefox offer a Wand out-of-the-box? No., &#8230;read <a href="http://my.opera.com/Rijk/blog/2006/07/04/top-150-popular-firefox-extensions-and-opera">this</a> for the details)</p>

@@ -119,22 +119,22 @@ quite cute and work well enough (a few of them at least).</p>

<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&#8217;m pretty sure this will make <em>a lot</em> of web developers very happy.</p> + I'm pretty sure this will make <em>a lot</em> of web developers very happy.</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> -<p>It is really up to you. I don&#8217;t have a true favorite as for now: Firefox 3 is very, very tempting because of +<p>It is really up to you. I don't have a true favorite as for now: Firefox 3 is very, very tempting because of three things:</p> <ul> - <li>The AwesomeBar: I feel I&#8217;m already becoming addicted to it</li> + <li>The AwesomeBar: I feel I'm already becoming addicted to it</li> <li>Some of its extensions, including Weave</li> <li>The performance improvements, especially concerning memory management and the rendering of pages making extensive use of Javascript</li> </ul> -<p>Opera, on the other hand, charmes me for what it can do out-of-the-box: it&#8217;s fast, sleek, has almost everything - I need with no configuration at all. It&#8217;s ideal if you use multiple systems, including mobile devices.</p> -<p>Definitely I will not abandon any of the two as for now: I&#8217;ll probaly use Firefox for a more enhanced browsing - experience, but I&#8217;ll definitely use Opera when I&#8217;m in a hurry to look something up for example, and +<p>Opera, on the other hand, charmes me for what it can do out-of-the-box: it's fast, sleek, has almost everything + I need with no configuration at all. It's ideal if you use multiple systems, including mobile devices.</p> +<p>Definitely I will not abandon any of the two as for now: I'll probaly use Firefox for a more enhanced browsing + experience, but I'll definitely use Opera when I'm in a hurry to look something up for example, and every time my fiancée is using Firefox on the same account.</p> -<p>There&#8217;s no absolute winner in the Browser Wars yet: just different browsers for different occasions!</p> +<p>There's no absolute winner in the Browser Wars yet: just different browsers for different occasions!</p>
M contents/articles/to-rest-or-not-to-rest.htmlcontents/articles/to-rest-or-not-to-rest.html

@@ -4,35 +4,62 @@ content-type: article

timestamp: 1190605680 tags: "rails" ----- -<p>Lately I&#8217;ve been reading quite a bit about Rails&#8217; <span class="caps">REST</span> approach, and to be totally honest I&#8217;m not 100% convinced it can always be a good idea. The purpose of this post is to re-evaluate the situation, and ask other people their opinion on the matter.</p> -<p>Let&#8217;s see&#8230;</p> +<p>Lately I've been reading quite a bit about Rails' <span class="caps">REST</span> approach, and to be totally honest + I'm not 100% convinced it can always be a good idea. The purpose of this post is to re-evaluate the situation, and + ask other people their opinion on the matter.</p> +<p>Let's see&#8230;</p> <h3>Key Benefits</h3> <p>To cut a long story short, from my understanding <span class="caps">REST</span> can be a good thing because:</p> <ul> - <li>It introduces the powerful concept of &#8220;resources&#8221;, which is independent from the presentation. This basically means that you can have your &#8220;resources&#8221; represented in <span class="caps">HTML</span>. <span class="caps">XML</span> etc. etc. &#8220;for free&#8221;. If you are making an extensive use of web services, this is truly a bless.</li> - <li>Each <span class="caps">CRUD</span> action is carried out using a different <span class="caps">HTTP</span> command (get, post, put and delete). At present, because most browsers don&#8217;t understand <span class="caps">PUT</span> or <span class="caps">DELETE</span> requested, this is somehow simulated by Rails.</li> - <li>By thinking and modeling your application in terms of resources, everything should always be &#8220;in the right place&#8221;.</li> + <li>It introduces the powerful concept of &#8220;resources&#8221;, which is independent from the presentation. This + basically means that you can have your &#8220;resources&#8221; represented in <span class="caps">HTML</span>. + <span class="caps">XML</span> etc. etc. &#8220;for free&#8221;. If you are making an extensive use of web + services, this is truly a bless.</li> + <li>Each <span class="caps">CRUD</span> action is carried out using a different <span class="caps">HTTP</span> + command (get, post, put and delete). At present, because most browsers don't understand <span + class="caps">PUT</span> or <span class="caps">DELETE</span> requested, this is somehow simulated by Rails. + </li> + <li>By thinking and modeling your application in terms of resources, everything should always be &#8220;in the right + place&#8221;.</li> </ul> <h3>Downsides?</h3> -<p>Let&#8217;s now try to summarize what made me think more carefully this approach&#8230;</p> +<p>Let's now try to summarize what made me think more carefully this approach&#8230;</p> <ul> - <li>While I really like Rails&#8217; convention over configuration philosophy, this sounds a tiny bit too extreme for me. In the end it could be good, but it requires developers to completely re-think the way they develop their application in order to be 100% RESTful.</li> - <li>URLs aren&#8217;t that pretty anymore. While <a href="http://themysteriouswaysofruby.blogspot.com/2007/04/pretty-restful-urls-in-rails.html">someone</a> suggested a way to improve the way RESTful URLs look, that sounds like extra hassle to me. It&#8217;s subjective, I know, but I really don&#8217;t like using IDs in the url&#8230; I&#8217;d rather go for an univocal code any day (check out this site&#8230; I don&#8217;t even like dates in my blog).</li> - <li>Sometimes, it may take quite a bit to figure out how to model some functionality using resources. While it is straightforward when you want to perform <span class="caps">CRUD</span> operations, modeling a search action or authentication may be a bit tricky and may also feel a bit forced. Again, maybe it&#8217;s just me.</li> - <li>It may be a bit too early to take full advantage of this approach. <span class="caps">PUT</span> and <span class="caps">DELETE</span> are simulated, and this doesn&#8217;t sound right &#8212; agreed, that&#8217;s the only way for now, but it still sounds like a forceful workaround. Browsers are not RESTful (yet)!</li> - <li>All resources are virtually accessible by a <span class="caps">URL</span>. I&#8217;m not a security expert, but this scares me a bit.</li> + <li>While I really like Rails' convention over configuration philosophy, this sounds a tiny bit too extreme for me. + In the end it could be good, but it requires developers to completely re-think the way they develop their + application in order to be 100% RESTful.</li> + <li>URLs aren't that pretty anymore. While <a + href="http://themysteriouswaysofruby.blogspot.com/2007/04/pretty-restful-urls-in-rails.html">someone</a> + suggested a way to improve the way RESTful URLs look, that sounds like extra hassle to me. It's subjective, I + know, but I really don't like using IDs in the url&#8230; I'd rather go for an univocal code any day (check out + this site&#8230; I don't even like dates in my blog).</li> + <li>Sometimes, it may take quite a bit to figure out how to model some functionality using resources. While it is + straightforward when you want to perform <span class="caps">CRUD</span> operations, modeling a search action or + authentication may be a bit tricky and may also feel a bit forced. Again, maybe it's just me.</li> + <li>It may be a bit too early to take full advantage of this approach. <span class="caps">PUT</span> and <span + class="caps">DELETE</span> are simulated, and this doesn't sound right &#8212; agreed, that's the only way + for now, but it still sounds like a forceful workaround. Browsers are not RESTful (yet)!</li> + <li>All resources are virtually accessible by a <span class="caps">URL</span>. I'm not a security expert, but this + scares me a bit.</li> </ul> <p>Here are some posts which made me think a bit:</p> <ul> - <li><a href="http://gilesbowkett.blogspot.com/2007/04/looking-for-good-argument-against-rest.html">Looking for a good argument against <span class="caps">REST</span></a></li> + <li><a href="http://gilesbowkett.blogspot.com/2007/04/looking-for-good-argument-against-rest.html">Looking for a + good argument against <span class="caps">REST</span></a></li> </ul> <ul> <li><a href="http://www.ipbabble.com/2007/07/restful_myths.html">RESTful Myths: Unraveling the Confusion</a></li> </ul> <ul> - <li><a href="http://blog.livollmers.net/index.php/2007/06/26/why-cant-web-apps-be-rest-ful/">Why Can’t Web Apps Be <span class="caps">REST</span>-ful?</a></li> + <li><a href="http://blog.livollmers.net/index.php/2007/06/26/why-cant-web-apps-be-rest-ful/">Why Can’t Web Apps Be + <span class="caps">REST</span>-ful?</a></li> </ul> -<p>The bottom line is: is <span class="caps">REST</span> really worth the hassle? Especially for small and simple applications like a blog, is it really worthwhile to coerce myself to adopt a RESTful approach when I could accomplish exactly the same things with much less hassle?</p> -<p>In other words, is <span class="caps">REST</span> really the answer to everything or in <em>some cases</em> it is just <em>not necessary</em>?</p> -<p>And also (OK, this may sound harsh and impolite): does it really make sense to push people to adopt a RESTful approach no matter what? Sometimes someone may get the feeling that Rails is all about <span class="caps">REST</span> now. Is that true, or is there still room for <del>freedom</del> other views?</p> +<p>The bottom line is: is <span class="caps">REST</span> really worth the hassle? Especially for small and simple + applications like a blog, is it really worthwhile to coerce myself to adopt a RESTful approach when I could + accomplish exactly the same things with much less hassle?</p> +<p>In other words, is <span class="caps">REST</span> really the answer to everything or in <em>some cases</em> it is + just <em>not necessary</em>?</p> +<p>And also (OK, this may sound harsh and impolite): does it really make sense to push people to adopt a RESTful + approach no matter what? Sometimes someone may get the feeling that Rails is all about <span + class="caps">REST</span> now. Is that true, or is there still room for <del>freedom</del> other views?</p> <p>Looking forward to hear your comments, but please be nice and civilized!</p>
M contents/articles/too-many-cooks-take-2.htmlcontents/articles/too-many-cooks-take-2.html

@@ -4,15 +4,27 @@ content-type: article

timestamp: 1188708060 tags: "cakephp|writing|rant" ----- -<p>Today I was not going to post on my blog. I have the flu, I don&#8217;t feel very well so I started reading some news feeds on Google Reader. That lasted for about half an hour, so I decided to check my old Netvibes account where I kept other feeds, including a bunch of CakePHP-related blogs.</p> +<p>Today I was not going to post on my blog. I have the flu, I don't feel very well so I started reading some news feeds + on Google Reader. That lasted for about half an hour, so I decided to check my old Netvibes account where I kept + other feeds, including a bunch of CakePHP-related blogs.</p> <p>Two posts immediately grab my attention:</p> -<p><a href="http://cakebaker.42dh.com/2007/08/27/i-dont-trust-cakephp-or-what-should-you-say-in-public/">I don’t trust CakePHP or what should you say in public?</a></p> +<p><a href="http://cakebaker.42dh.com/2007/08/27/i-dont-trust-cakephp-or-what-should-you-say-in-public/">I don’t trust + CakePHP or what should you say in public?</a></p> <p>and</p> <p><a href="http://cakebaker.42dh.com/2007/08/28/bye-bye-cakephp-team/">Bye, bye, CakePHP team</a></p> -<p>They&#8217;re both from Daniel&#8217;s cakebaker blog, the one I used to read when I was really into Cake.</p> -<p>To cut a long story short, apparently Daniel said something wrong and he got &#8220;what he deserves&#8221; for speaking out. Naughty boy!</p> -<p>That&#8217;s because it might have put &#8220;CakePHP and the team in a bad light&#8221;. Well, I don&#8217;t know about that, but definitely now it IS in a bad light!</p> +<p>They're both from Daniel's cakebaker blog, the one I used to read when I was really into Cake.</p> +<p>To cut a long story short, apparently Daniel said something wrong and he got &#8220;what he deserves&#8221; for + speaking out. Naughty boy!</p> +<p>That's because it might have put &#8220;CakePHP and the team in a bad light&#8221;. Well, I don't know about that, + but definitely now it IS in a bad light!</p> <p>I even found a bunch of comment which link this incident to what happened to me a few months ago:</p> -<p><em>&#8220;I said it when Fabio/H3rald left, and I’ll say it again—I think the biggest weakness of Cake is that the core dev team is quick to cut people out who don’t hold to every dogma the devs do. Fundamentalism, ego, call it what you will, a great community will only count for so long if the core keeps alienating its biggest allies. (not that they’re neccessarily alienating you, dho. I truly hope you stick around. You do seem to be taking it well.)&#8221;</em></p> -<p><sup>^</sup> Whoever you are, you&#8217;re 100% right.</p> -<p>A core asset (at least for his writings) of the CakePHP team is gone, and another (big) chunk of CakePHP PR strategy is out of play, now, it seems. While I&#8217;m sorry the CakePHP community has to get the butt-end of it as always, I&#8217;m certainly happy for Daniel who, like me, will now have a chance to look around and experiment with new things. That&#8217;s right man, Rails or Django are the way to go.</p> +<p><em>&#8220;I said it when Fabio/H3rald left, and I’ll say it again—I think the biggest weakness of Cake is that the + core dev team is quick to cut people out who don’t hold to every dogma the devs do. Fundamentalism, ego, call it + what you will, a great community will only count for so long if the core keeps alienating its biggest allies. + (not that they’re neccessarily alienating you, dho. I truly hope you stick around. You do seem to be taking it + well.)&#8221;</em></p> +<p><sup>^</sup> Whoever you are, you're 100% right.</p> +<p>A core asset (at least for his writings) of the CakePHP team is gone, and another (big) chunk of CakePHP PR strategy + is out of play, now, it seems. While I'm sorry the CakePHP community has to get the butt-end of it as always, I'm + certainly happy for Daniel who, like me, will now have a chance to look around and experiment with new things. + That's right man, Rails or Django are the way to go.</p>
M contents/articles/too-many-cooks-take-3.htmlcontents/articles/too-many-cooks-take-3.html

@@ -13,29 +13,29 @@ <p>It has been two years since my last post on this subject and yes, the cake is still rising, but at what price? Will

it still taste sweet now that two of its main ingredients are not part of it anymore? As <a href="http://cakebaker.42dh.com/2009/10/23/the-end-of-cakephp/">Daniel</a> puts it, <em>probably the best thing to do now is to drink tea and to wait until the dust settles&#8230;</em></p> -<p>As far as I&#8217;m concerned, what really matters is that Garrett Woodworth (former CakePHP Project Manager) and +<p>As far as I'm concerned, what really matters is that Garrett Woodworth (former CakePHP Project Manager) and Nate Abele (former CakePHP Lead Developer) are <em>gone</em>. They realized they had enough Nuts over the years and they decided to switch to a more <a href="http://irc.cakephp.org/logs/link/1110092#message1110102">Lithium-rich</a> diet. More helthy and depression-proof, too!</p> <p>Stupid metaphors and painful jokes aside, this is probably the best piece of news the CakePHP community received in a long time: the birth of <em>a fork of the CakePHP framework</em>, more precisely of the so-called Cake3 branch.</p> -<p><em>Cake3</em>? I didn&#8217;t keep up-to-date with the buzz, so I didn&#8217;t know anything about this until today, +<p><em>Cake3</em>? I didn't keep up-to-date with the buzz, so I didn't know anything about this until today, when I decided to finally start catching up.</p> <blockquote> <p>&#8220;Cake 3.0, on the other hand, is pretty different from the existing core code in a few notable ways. - Mainly, it&#8217;s been re-written from the ground up for <span class="caps">PHP</span> 5.3.&#8221;</p> + Mainly, it's been re-written from the ground up for <span class="caps">PHP</span> 5.3.&#8221;</p> </blockquote> <p style="padding-right:6em;">from <a href="http://debuggable.com/posts/Cake_3_interview_with_Nate_Abele:4a665a5e-5bfc-4e42-96ee-6d284834cda3">Cake 3 interview with Nate Abele</a>, debuggable.com</p> <p>Of course, in these three years of my full immersion in the Ruby language, I almost completely forgot about <span class="caps">PHP</span> too. <span class="caps">PHP</span> 5.3 means namespace and closures, i.e. the - Rubyist&#8217;s daily bread. A more modular CakePHP, properly object-oriented, with an ActiveRecord-like <span - class="caps">API</span> for models (finally!) is definitely worth a look, especially if it&#8217;s Nut-free as + Rubyist's daily bread. A more modular CakePHP, properly object-oriented, with an ActiveRecord-like <span + class="caps">API</span> for models (finally!) is definitely worth a look, especially if it's Nut-free as well.</p> -<p>The new framework will be called <strong>Lithium</strong> (sounds more professional already), and it&#8217;s due to +<p>The new framework will be called <strong>Lithium</strong> (sounds more professional already), and it's due to launch next monday, here: <a href="http://li3.rad-dev.org/">http://li3.rad-dev.org/</a> (at the time of writing, this link is password-protected).</p> <p>Personally, I am <em>very</em> excited about this new project. It should have happened three years ago, really, but - there&#8217;s no point in being greedy: the time has finally come. I would like to (pre-)thank Garrett and Nate for - their (upcoming) amazing work, I&#8217;ll definitely keep a closer eye on it.</p> + there's no point in being greedy: the time has finally come. I would like to (pre-)thank Garrett and Nate for + their (upcoming) amazing work, I'll definitely keep a closer eye on it.</p>
M contents/articles/tweaking-windows-explorer.htmlcontents/articles/tweaking-windows-explorer.html

@@ -6,12 +6,13 @@ 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&#8217;d have answered something like: <a +<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&#8230;</p> -<p>There&#8217;s a multitude of &#8220;Explorer Replacements&#8221; which aim to be more feature-rich, more - user-friendly, less bloated than Bill&#8217;s favorite, and I indeed tried quite a few of them, mostly the free ones + Well, it turns out that I had to change my mind after all&#8230; +</p> +<p>There's a multitude of &#8220;Explorer Replacements&#8221; 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 &#8220;the one&#8221;, 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,

@@ -21,7 +22,7 @@ the file managers I tried, but at least in some:</p>

<ul> <li>Environment variables integration &#8212; Alternative file managers normally are not able to parse Windows environment variables.</li> - <li>Icon overlays &#8212; Some file managers can&#8217;t render Subversion&#8217;s icon overlays.</li> + <li>Icon overlays &#8212; Some file managers can't render Subversion's icon overlays.</li> <li>Strange context menus &#8212; Sometimes right-clicking on a file or a directory may not open the standard Explorer context menu</li> <li>Open Folder &#8212; Third-party application allowing you to open a folder, will always open it through Windows

@@ -29,7 +30,8 @@ Explorer</li>

<li>auto complete address bar&#8230;.</li> <li>Special Folders &#8212; 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 &#8220;Control Panel&#8221; will - <em>not</em> open the Control Panel in an alternative file manager.</li> + <em>not</em> open the Control Panel in an alternative file manager. + </li> </ul> <p><em>What about trying to &#8220;patch&#8221; Windows Explorer instead of using another program altogether?</em></p> <p>I never really thought of that until <a

@@ -38,7 +40,7 @@ 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 &#8220;patch&#8221; Windows Explorer using a few really useful (and free, of course) Windows Shell Extensions.</p> -<p>Here&#8217;s <em>my</em> file manager now:</p> +<p>Here's <em>my</em> file manager now:</p> <p><img src="/images/tweaked_explorer.jpg" alt="" /></p> <p>Yes, it is Windows Explorer, with just a few addons:</p> <ul>

@@ -54,14 +56,14 @@ <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&#8217;ll have to re-logon after installing nearly + 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&aacute;, 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&#8217;re ready, take your time to configure QT TabBar (right-click on it and choose +<p>Whenever you're ready, take your time to configure QT TabBar (right-click on it and choose &#8220;Options&#8221;) General options:</p> <p><img src="/images/tabbar_general.gif" alt="" /></p> <p>&#8230;and at least the Window options:</p>

@@ -72,9 +74,9 @@ <li>CTRL+N keyboard shortcut</li>

<li>Drag and drop a folder or a shortcut on QT TabBar &#8211; Even from other applications!</li> <li>Right click on an tab and choose &#8220;Clone this&#8221;</li> </ul> -<p>Other features? Sure, there&#8217;s plenty more, e.g.:</p> +<p>Other features? Sure, there's plenty more, e.g.:</p> <ul> - <li><strong>Single Instance</strong> &#8212; By enabling the appropriate option, you&#8217;ll only have a single + <li><strong>Single Instance</strong> &#8212; 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> &#8212; Tabs can be rearranged by dragging and dropping.</li> <li><strong>Lock/Unlock</strong> &#8212; Lock a tab (right-click &gt; Lock) to avoid closing it accidentally.</li>

@@ -101,7 +103,7 @@ </ol>

<p>I picked the following:</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&#8217;s really up to you what you choose really.<br /> + 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>

@@ -115,16 +117,17 @@ <li>Topmost &#8212; 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 &gt; Links folder. As shortcuts, I dragged each drive available on my system and - voilà: poor man&#8217;s Drive Toolbar! Unfortunately, unlike in the <em>proper</em> drive toolbars offered by + 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&#8217;re going to substitute it in the next section though), I decided to place +<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 &#8211; hear, hear &#8211; 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&#8217;s (much) more to it. A <em>search helper</em> is provided (click the little arrow pointing + 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

@@ -135,7 +138,7 @@ <p>I choose the Command Prompt and the A43 file manager. The cool thing is that you can enable the &#8220;arguments for

user application&#8221; 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&#8217;ll become available via the Applications button.</p> + 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>

@@ -148,7 +151,7 @@ <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&#8217;t. Quizo fixed it of course, with his <strong>QT Address Bar</strong>, which brings + 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>

@@ -157,20 +160,20 @@ 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&#8217;t use IE, I use Firefox, Opera, even Safari sometimes, but not IE unless I&#8217;m forced to do so. Hence - I <em>hardly ever</em> used Internet Explorer&#8217;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&#8230; What&#8217;s +<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&#8230; 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&#8217;ll be loaded in a sidebar on the left, - then simply drag a folder to QT TabBar and you&#8217;ll get there.</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&#8217;ll just use junctions now:</p> + For our purposes, we'll just use junctions now:</p> <p>bq.&#8220;[&#8230;] 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

@@ -191,18 +194,19 @@ <p>Both at home and at work, I use a &#8220;Gateway&#8221; folder containing junctions leading to commonly-accessed

directories, and this speeds up navigations a lot. Just remember to delete junctions &#8220;properly&#8221; (right-click &gt; Delete Junction), not like an ordinary directory&#8230; ;-)</p> <h3>De-cluttering the Context Menus</h3> -<p>Right now our Windows Explorer interface has been streamlined, folder navigation is easier, but there&#8217;s still +<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&#8217;s not exactly - user-friendly, is it? Now there&#8217;s an easy alternative: <strong>FileMenu Tools</strong>.</p> + 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> + pretty icon) you can choose from: +</p> <ul> <li>Synchronize Folders</li> <li>Extended Delete</li>

@@ -221,9 +225,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&#8217;s enough for you to give Windows Explorer another shot &#8212; or at least it was enough for me +<p>I think that's enough for you to give Windows Explorer another shot &#8212; 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&#8217;t forget <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>
M contents/articles/where-does-your-ruby-code-live.htmlcontents/articles/where-does-your-ruby-code-live.html

@@ -4,69 +4,139 @@ content-type: article

timestamp: 1226147640 tags: "ruby|programming" ----- -<p>Back when I wrote my <a href="/articles/10-reasons-to-learn-ruby">10 reasons to learn Ruby</a> article, I mentioned <a href="http://www.rubygems.org/">RubyGems</a> in <em>Reason #1</em> as one of they key features of the Ruby programming languages.<br /> -Indeed, gems make getting Ruby programs as easy as typing <code>gem install &lt;something&gt;</code> from the command line. When you want to distribute something new in Ruby, there&#8217;s no need to give people download links, zip files or setup programs, just <a href="http://adam.blog.heroku.com/past/2008/11/2/pony_the_express_way_to_send_email_from_ruby/">tell them to get the gem</a>. That&#8217;s perfectly normal, and extremely cool.</p> -<p>Gems are normally stored on <a href="http://rubyforge.org">RubyForge</a>, so all you have to do is uploading your gem there, and it will be available to the rest of the universe. It&#8217;s a nice feeling. I remember when I first uploaded <a href="http://rubyforge.org/projects/rawline/">RawLine</a> and then tried <code>gem install rawline</code> just for the hell of it: it downloaded and installed the gem, as expected.</p> -<p>Back in the day, if you wanted to find something written in Ruby, all you had to do is search through RubyForge, and you&#8217;d eventually find it, with a bit of luck.</p> +<p>Back when I wrote my <a href="/articles/10-reasons-to-learn-ruby">10 reasons to learn Ruby</a> article, I mentioned + <a href="http://www.rubygems.org/">RubyGems</a> in <em>Reason #1</em> as one of they key features of the Ruby + programming languages.<br /> + Indeed, gems make getting Ruby programs as easy as typing <code>gem install &lt;something&gt;</code> from the + command line. When you want to distribute something new in Ruby, there's no need to give people download links, zip + files or setup programs, just <a + href="http://adam.blog.heroku.com/past/2008/11/2/pony_the_express_way_to_send_email_from_ruby/">tell them to get + the gem</a>. That's perfectly normal, and extremely cool.</p> +<p>Gems are normally stored on <a href="http://rubyforge.org">RubyForge</a>, so all you have to do is uploading your gem + there, and it will be available to the rest of the universe. It's a nice feeling. I remember when I first uploaded + <a href="http://rubyforge.org/projects/rawline/">RawLine</a> and then tried <code>gem install rawline</code> just + for the hell of it: it downloaded and installed the gem, as expected.</p> +<p>Back in the day, if you wanted to find something written in Ruby, all you had to do is search through RubyForge, and + you'd eventually find it, with a bit of luck.</p> <h3>Can we just have git, please?</h3> -<p>RubyForge had, until recently, one major problem: it only allowed <span class="caps">CVS</span> and <span class="caps">SVN</span> repositories, and you had to make your choice when creating the project, once and for all. So when the cool guys at <a href="http://github.com/">GitHub</a> rolled out their <em>social code hosting</em> web site, most of the <em>créme de la créme</em> of RubyForge flocked there in mass migration: <a href="http://github.com/rails/rails/tree/master">Rails</a>, <a href="http://github.com/wycats/merb-core/tree/master">Merb</a>, <a href="http://github.com/dchelimsky/rspec/tree/master">RSpec</a>&#8230; you name it.<br /> -Once the big guys made the switch, a lot jumped on the GitHub bandwagon of course. Result: we have a lot of projects still on RubyForge, but quite a few (and important ones) on GitHub.</p> -<p>Why did people move there? Well, at first it was because they wanted a sleek-looking git host, and RubyForge didn&#8217;t offer git at the time. But <a href="http://drnicwilliams.com/2008/04/08/git-for-rubyforge-accounts/">git is now available on RubyForge</a>, so why don&#8217;t people use it? <br /> -I&#8217;d like to know how many people use git on RubyForge. Apparently you can have your old <span class="caps">SVN</span> repository manually migrated to git, if you ask nicely (and RubyForge people are very helpful always, anyway). Still, I don&#8217;t think many people use git there, and hardly anyone (if any) moved back from GitHub.</p> -<p>What&#8217;s so special about this new &#8220;social code hosting&#8221; site then? I guess just a few key features:</p> +<p>RubyForge had, until recently, one major problem: it only allowed <span class="caps">CVS</span> and <span + class="caps">SVN</span> repositories, and you had to make your choice when creating the project, once and for + all. So when the cool guys at <a href="http://github.com/">GitHub</a> rolled out their <em>social code hosting</em> + web site, most of the <em>créme de la créme</em> of RubyForge flocked there in mass migration: <a + href="http://github.com/rails/rails/tree/master">Rails</a>, <a + href="http://github.com/wycats/merb-core/tree/master">Merb</a>, <a + href="http://github.com/dchelimsky/rspec/tree/master">RSpec</a>&#8230; you name it.<br /> + Once the big guys made the switch, a lot jumped on the GitHub bandwagon of course. Result: we have a lot of projects + still on RubyForge, but quite a few (and important ones) on GitHub.</p> +<p>Why did people move there? Well, at first it was because they wanted a sleek-looking git host, and RubyForge didn't + offer git at the time. But <a href="http://drnicwilliams.com/2008/04/08/git-for-rubyforge-accounts/">git is now + available on RubyForge</a>, so why don't people use it? <br /> + I'd like to know how many people use git on RubyForge. Apparently you can have your old <span + class="caps">SVN</span> repository manually migrated to git, if you ask nicely (and RubyForge people are very + helpful always, anyway). Still, I don't think many people use git there, and hardly anyone (if any) moved back from + GitHub.</p> +<p>What's so special about this new &#8220;social code hosting&#8221; site then? I guess just a few key features:</p> <ul> <li>Fast and reliable git hosting</li> - <li>The ability to &#8220;watch&#8221; other people&#8217;s repositories and interact with them &#8220;the git way&#8221;, also by forking.</li> - <li>There&#8217;s a whole new and fresh community feeling to it: you can follow people, message them, etc.</li> - <li>The interface is much more neat than RubyForge&#8217;s (OK, granted, it doesn&#8217;t take much)</li> + <li>The ability to &#8220;watch&#8221; other people's repositories and interact with them &#8220;the git way&#8221;, + also by forking.</li> + <li>There's a whole new and fresh community feeling to it: you can follow people, message them, etc.</li> + <li>The interface is much more neat than RubyForge's (OK, granted, it doesn't take much)</li> <li>Really cool stats and graphs</li> <li>A basic, but functional, wiki</li> </ul> <h3>&#8230;oh, and bug tracking, too!</h3> -<p>GitHub has no bug tracking features. It tracks an awful lot of stuff about your repositories and people working on them, but &#8220;batteries are sold separately&#8221;. You can get batteries <a href="http://lighthouseapp.com/">here</a>, for example. Apparently, GitHub and LightHouse are seamlessly <a href="http://github.com/blog/41-service-integration">integrated</a>.</p> -<p>So now you can sign up to two cool brand new web applications with neat interfaces instead of sticking with the old-looking RubyForge (which comes with &#8220;batteries included&#8221;, after all). <br /> -Personally <strong>I&#8217;m very confused now</strong>. Fortunately I don&#8217;t have any extremely cool projects used by thousands of people, so jumping from one source code hosting solution from another is not really an issue for me, but I imagine it would be for others! Correct?</p> -<p>So, as far as I know, if you are a Rubyist, here&#8217;s what you can do:</p> +<p>GitHub has no bug tracking features. It tracks an awful lot of stuff about your repositories and people working on + them, but &#8220;batteries are sold separately&#8221;. You can get batteries <a + href="http://lighthouseapp.com/">here</a>, for example. Apparently, GitHub and LightHouse are seamlessly <a + href="http://github.com/blog/41-service-integration">integrated</a>.</p> +<p>So now you can sign up to two cool brand new web applications with neat interfaces instead of sticking with the + old-looking RubyForge (which comes with &#8220;batteries included&#8221;, after all). <br /> + Personally <strong>I'm very confused now</strong>. Fortunately I don't have any extremely cool projects used by + thousands of people, so jumping from one source code hosting solution from another is not really an issue for me, + but I imagine it would be for others! Correct?</p> +<p>So, as far as I know, if you are a Rubyist, here's what you can do:</p> <ol> - <li>Stick with RubyForge: it&#8217;s not so bad after all.</li> - <li>Embrace GitHub (and Lighthouse): it&#8217;s extremely nice to use. Some people are not <a href="http://groovie.org/2008/05/06/most-bizarre-git-service-and-other-stupid-rails-powered-businesses">too convinced</a> that this is the best choice though.</li> - <li>Go for something in between, like <a href="http://www.assembla.com/">Assembla</a>, which actually has an <em>impressive</em> list of features and is powered by Rails too, so you&#8217;ll feel at home. <a href="http://code.google.com/hosting/">Google Code</a> used to be another common choice, but sadly they don&#8217;t offer git yet.</li> - <li>Do-it-yourself, maybe using something like <a href="http://gitorious.org/">Gitorius</a> and some open source bug tracking/project management solution.</li> + <li>Stick with RubyForge: it's not so bad after all.</li> + <li>Embrace GitHub (and Lighthouse): it's extremely nice to use. Some people are not <a + href="http://groovie.org/2008/05/06/most-bizarre-git-service-and-other-stupid-rails-powered-businesses">too + convinced</a> that this is the best choice though.</li> + <li>Go for something in between, like <a href="http://www.assembla.com/">Assembla</a>, which actually has an + <em>impressive</em> list of features and is powered by Rails too, so you'll feel at home. <a + href="http://code.google.com/hosting/">Google Code</a> used to be another common choice, but sadly they + don't offer git yet.</li> + <li>Do-it-yourself, maybe using something like <a href="http://gitorious.org/">Gitorius</a> and some open source bug + tracking/project management solution.</li> </ol> <p>So&#8230; what choice did <em>you</em> make or are you planning to make?</p> <h3>Moving houses</h3> -<p>There&#8217;s one simple issue to consider when moving your code to a new place: what happens to your <em>old</em> place. If have a relatively popular project, a lot of people may have bookmarked your project page on RubyForge, or the RubyForge subdomain which you may have used as the &#8220;home page&#8221; for your project (in truth, most of the ones who moved away still use it).</p> -<p>You may setup a redirection to the new home page or put a notice saying that the project moved somewhere else and point visitors to GitHub and LightHouse, or to another web site, if you wish. When <a href="http://weblog.rubyonrails.org/2008/4/11/rails-premieres-on-github">Rails moved to GitHub</a>, that wasn&#8217;t much of a problem as Rails has its own web site.</p> -<p>What may become a problem is your old repository. In Rails&#8217; case, they left the old <span class="caps">SVN</span> repository available on sourceforge for a while and then removed it altogether. Other project owners have just abandoned their old repositories, occasionally resulting in <a href="http://webby.rubyforge.org/">someone else</a> deciding to leave a note as their <a href="http://webby.rubyforge.org/svn/trunk/">last <span class="caps">SVN</span> commit</a>.</p> -<p>These solutions all work (you eventually drive people to the new home of your project), but it&#8217;s not very nice, that&#8217;s all. What happens if someone comes up with something cooler than GitHub? In all honesty, you may end up moving house over and over again.</p> -<h3>Don&#8217;t forget the gems!</h3> -<p>One thing I liked about RubyForge, as I wrote at the beginning, was that if you uploaded a gem there, it was immediately available to everyone typing <code>gem install &lt;something&gt;</code>. <br /> -Luckily, <a href="http://gems.github.com/list.html">GitHub supports gems, too</a>! We&#8217;re saved. The page they put up is <a href="http://gems.github.com/">utterly awful</a>, but it does the job: you can have your gems hosted on GitHub.</p> -<p>Good! So surely I can get Rails now, right? Yup: <code>gem install rails</code> will get the latest version of Rails for you, straight from GitHub.</p> -<p>Actually, no. It doesn&#8217;t seem to work that way: sure you can get the latest rails in that way, but it will actually be downloaded from <em>RubyForge</em> (go check the <a href="http://rubyforge.org/frs/?group_id=307&amp;release_id=27493">downloads</a>, you&#8217;ll see it there). <br /> -So even if technically you got Rails, you got it from RubyForge. If you want to get gem from GitHub, you have to add it as gem source first (that&#8217;s an <em>una tantum</em> operation, luckily): <code>gem sources -a http://gems.github.com</code>.</p> -<p>So, yes, you can move to GitHub and you&#8217;ll also get gem support: but please <em>remind the users</em> that they have to add GitHub as gem source. Or, better, you should always remember to upload your latest gems to GitHub <em>and to RubyForge as well</em>.</p> +<p>There's one simple issue to consider when moving your code to a new place: what happens to your <em>old</em> place. + If have a relatively popular project, a lot of people may have bookmarked your project page on RubyForge, or the + RubyForge subdomain which you may have used as the &#8220;home page&#8221; for your project (in truth, most of the + ones who moved away still use it).</p> +<p>You may setup a redirection to the new home page or put a notice saying that the project moved somewhere else and + point visitors to GitHub and LightHouse, or to another web site, if you wish. When <a + href="http://weblog.rubyonrails.org/2008/4/11/rails-premieres-on-github">Rails moved to GitHub</a>, that wasn't + much of a problem as Rails has its own web site.</p> +<p>What may become a problem is your old repository. In Rails' case, they left the old <span class="caps">SVN</span> + repository available on sourceforge for a while and then removed it altogether. Other project owners have just + abandoned their old repositories, occasionally resulting in <a href="http://webby.rubyforge.org/">someone else</a> + deciding to leave a note as their <a href="http://webby.rubyforge.org/svn/trunk/">last <span class="caps">SVN</span> + commit</a>.</p> +<p>These solutions all work (you eventually drive people to the new home of your project), but it's not very nice, + that's all. What happens if someone comes up with something cooler than GitHub? In all honesty, you may end up + moving house over and over again.</p> +<h3>Don't forget the gems!</h3> +<p>One thing I liked about RubyForge, as I wrote at the beginning, was that if you uploaded a gem there, it was + immediately available to everyone typing <code>gem install &lt;something&gt;</code>. <br /> + Luckily, <a href="http://gems.github.com/list.html">GitHub supports gems, too</a>! We're saved. The page they put up + is <a href="http://gems.github.com/">utterly awful</a>, but it does the job: you can have your gems hosted on + GitHub.</p> +<p>Good! So surely I can get Rails now, right? Yup: <code>gem install rails</code> will get the latest version of Rails + for you, straight from GitHub.</p> +<p>Actually, no. It doesn't seem to work that way: sure you can get the latest rails in that way, but it will actually + be downloaded from <em>RubyForge</em> (go check the <a + href="http://rubyforge.org/frs/?group_id=307&amp;release_id=27493">downloads</a>, you'll see it there). <br /> + So even if technically you got Rails, you got it from RubyForge. If you want to get gem from GitHub, you have to add + it as gem source first (that's an <em>una tantum</em> operation, luckily): + <code>gem sources -a http://gems.github.com</code>.</p> +<p>So, yes, you can move to GitHub and you'll also get gem support: but please <em>remind the users</em> that they have + to add GitHub as gem source. Or, better, you should always remember to upload your latest gems to GitHub <em>and to + RubyForge as well</em>.</p> <h3>The present</h3> <p>To sum up:</p> <ul> - <li>If you want, you can stay on RubyForge. It has git, it has gems, it&#8217;s probably not nearly as prettier than competitors and is not as social, but it works.</li> - <li>You can opt for GitHub+LightHouse, have a slick interface, plenty of features and your project will be scattered in 2 different places + your home page, and you&#8217;ll also have to keep uploading your gems to RubyForge.</li> - <li>At this point, you may even go for something completely different, like Assembla or your own setup, but still upload your gems to RubyForge.</li> + <li>If you want, you can stay on RubyForge. It has git, it has gems, it's probably not nearly as prettier than + competitors and is not as social, but it works.</li> + <li>You can opt for GitHub+LightHouse, have a slick interface, plenty of features and your project will be scattered + in 2 different places + your home page, and you'll also have to keep uploading your gems to RubyForge.</li> + <li>At this point, you may even go for something completely different, like Assembla or your own setup, but still + upload your gems to RubyForge.</li> </ul> -<p>The obvious solutions at this point would be that the folks who craft rubygems (the gem which makes the gems, to be clear) add GitHub as default source. Sure as hell when that happens other people will want that too (hey, I&#8217;ll have gems.h3rald.com setup by then!). Is this the future? I hope not.</p> +<p>The obvious solutions at this point would be that the folks who craft rubygems (the gem which makes the gems, to be + clear) add GitHub as default source. Sure as hell when that happens other people will want that too (hey, I'll have + gems.h3rald.com setup by then!). Is this the future? I hope not.</p> <h3>The future?</h3> -<p>You know there&#8217;s a domain called <a href="http://www.rubygems.org/">www.rubygems.org</a>? It&#8217;s where the gem <em>manuals</em> are! <br /> -As much as I love documentation, there&#8217;s nothing wrong in moving all those documents and books to something like <em>docs.rubygems.org</em>, right? <br /> -Then they could make RubyGems.org the <em>only</em> official gem server and tell people they should upload their gems there if they want to distribute them efficiently (after manual approval, if necessary, like there is on RubyForge).</p> +<p>You know there's a domain called <a href="http://www.rubygems.org/">www.rubygems.org</a>? It's where the gem + <em>manuals</em> are! <br /> + As much as I love documentation, there's nothing wrong in moving all those documents and books to something like + <em>docs.rubygems.org</em>, right? <br /> + Then they could make RubyGems.org the <em>only</em> official gem server and tell people they should upload their + gems there if they want to distribute them efficiently (after manual approval, if necessary, like there is on + RubyForge).</p> <p>In this way:</p> <ul> - <li>You wouldn&#8217;t have to upload stuff to RubyForge anymore</li> + <li>You wouldn't have to upload stuff to RubyForge anymore</li> <li>You could have the clever folks at GitHub to create a simple script to automate the upload</li> - <li>You&#8217;d have virtually <em>all</em> the gems in one place</li> - <li>You&#8217;d put a good domain name (currently almost forgotten) to good use</li> + <li>You'd have virtually <em>all</em> the gems in one place</li> + <li>You'd put a good domain name (currently almost forgotten) to good use</li> </ul> -<p>While they are at it, <strong>the clever folks at RubyGems.org could also setup a <em>proper</em> gem directory with a <em>proper</em> search</strong>. I&#8217;m sure there would be plenty of people who could help, too!</p> -<p>It&#8217;s not impossible, right? They said that making Rails/Ruby/RSpec documentation more accurate and accessible was impossible, but now there&#8217;s <a href="http://apidock.com/">APIdock</a>, correct?</p> -<p>Personally I&#8217;d like it to be a collaborative effort of the Ruby community (like ruby-lang.org), rather than one private company showing off, but I think everyone will be happy as long as it works.<br /> -I&#8217;m sure people will contribute, I would try at least (after finishing the Italian translation of ruby-lang.org, that is&#8230; erhm, well, that&#8217;s another story&#8230;).</p> +<p>While they are at it, <strong>the clever folks at RubyGems.org could also setup a <em>proper</em> gem directory with + a <em>proper</em> search</strong>. I'm sure there would be plenty of people who could help, too!</p> +<p>It's not impossible, right? They said that making Rails/Ruby/RSpec documentation more accurate and accessible was + impossible, but now there's <a href="http://apidock.com/">APIdock</a>, correct?</p> +<p>Personally I'd like it to be a collaborative effort of the Ruby community (like ruby-lang.org), rather than one + private company showing off, but I think everyone will be happy as long as it works.<br /> + I'm sure people will contribute, I would try at least (after finishing the Italian translation of ruby-lang.org, + that is&#8230; erhm, well, that's another story&#8230;).</p> <p>Thoughts?</p>
M contents/articles/wunderlist.htmlcontents/articles/wunderlist.html

@@ -8,12 +8,12 @@ pdf: true

----- <section class="section"> - <p>I don&#8217;t remember the exact day when I started using a todo list in a serious way. It definitely happened at - work, but I can&#8217;t remember when exactly. The point is that, once I started working (and getting paid for + <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 &ndash; 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&#8217;ll do something <em>right - now</em> but I don&#8217;t do it within five minutes, they have to assume that I forgot about it altogether - and they&#8217;d better send me an email.</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>

@@ -26,25 +26,26 @@ </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> &ndash; I don&#8217;t want to specify (or see, either) a due date, a + <li><strong>Too many fields</strong> &ndash; 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> &ndash; On the other hand, just a title and a checkbox won&#8217;t do. I + <li><strong>Too few fields</strong> &ndash; 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> &ndash; 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&#8217;t many todo lists out + 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> &ndash; See the first complaint, above. With too many fields almost always - comes a complex interface. I don&#8217;t want to wait 17 clicks to save my task. I want to type in what + 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> &ndash; <span class="caps">GTD</span> is great and - David Allen is the God of Productivity, but I don&#8217;t want to use @contexts or specify next actions - because don&#8217;t believe in them, therefore I shouldn&#8217;t be forced to do so.</li> + 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% &ndash; perhaps &ndash; don&#8217;t. Luckily, I just need - <em>one</em>, and guess what: I found it!</p> + <p>90% of the digital todo list suck. Believe me. 10% &ndash; perhaps &ndash; don't. Luckily, I just need + <em>one</em>, and guess what: I found it! + </p> </section>

@@ -53,14 +54,15 @@ <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&#8217;s so awesome that&#8230; I should stop the ass-kissing right now, and get + anywhere and at any time. It's so awesome that&#8230; 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&#8217;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&#8217;s why:</p> + 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> &ndash; 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> + <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> &ndash; 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>

@@ -71,8 +73,8 @@ <li><strong>Amazing email integration</strong> &ndash; Create tasks via email, share tasks with others via

email, get reminders via push&#8230; or email. They even email you if you have overdue tasks. Like&#8230; 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&#8217;ed</strong> &ndash; On your iPhone, iPad, Android device, Windows PC, - Mac, web, etc. It&#8217;s all there, always, everywhere.</li> + <li><strong>Everything is sync'ed</strong> &ndash; 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&#8230; Then

@@ -87,15 +89,15 @@ </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&#8217;ll be able to access (as in read/write access) your + 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&#8230; I used to say things like &#8220;it&#8217;s on my list, honey, I&#8217;ll do it&#8221;, or - even &#8220;Yes&#8230; I&#8217;ll add it to the <em>Chores</em>, just gimme a minute&#8221;. Little did I + errands&#8230; I used to say things like &#8220;it's on my list, honey, I'll do it&#8221;, or + even &#8220;Yes&#8230; I'll add it to the <em>Chores</em>, just gimme a minute&#8221;. 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 &#8220;Take the rubbish out&#8221; or &#8220;Collect the package from the post office&#8221;.</p>

@@ -115,20 +117,20 @@ <p><img src="/images/pictures/wunderlist/wunderlist-work.png" style="float:right;margin-top:1em;" /></p>

<ul> <li><strong>Work [!]</strong> &ndash; 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&#8217;s my default list.</li> + the day. At work, that's my default list.</li> <li><strong>Work [~]</strong> &ndash; 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 [&#8230;]</strong> &ndash; 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&#8217;t be able to do anything because everyone will be on holiday&#8230; It will + August when I won't be able to do anything because everyone will be on holiday&#8230; It will become my default list for a week or two, then.</li> <li><strong>Work [CoP]</strong> &ndash; 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> &ndash; This is a special list for my boss only. We email each other - frequently, but rather then sending her long emails she can&#8217;t afford to read, I write down - discussion topics in this list, which I&#8217;ll then load up at the following status meeting.</li> + 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&#8230;</p>

@@ -139,13 +141,13 @@ <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&#8217;t agree with that. Wunderlist is not perfect, but close enough for + 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 &ndash; most importantly &ndash; very little features I - don&#8217;t need. In the end, this is what makes an app truly awesome.</p> + 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&#8217;t know they wanted. That&#8217;s - what Steve Jobs does at every Keynote, isn&#8217;t it?</p> + 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>
M templates/article.mustachetemplates/article.mustache

@@ -9,7 +9,7 @@ <div class="col-xs-12 sidebar">

{{> _header}} </div> </div> - <div class="row"> + <div class="row main-content"> <div class="col-xs-12"> <article class="{{content-type}} box content"> {{> _page_header}}