<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>H3RALD - Tag 'writing' (RSS Feed)</title>
    <language>en-us</language>
    <lastBuildDate>Fri, 09 Apr 2010 17:30:39 -0000</lastBuildDate>
    <ttl>40</ttl>
    <link>http://www.h3rald.com</link>
    <description/>
    <item>
      <title>Introducing Glyph</title>
      <description>&lt;p&gt;I&amp;#8217;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.&lt;/p&gt;
&lt;p&gt;For example, you can use:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;strong&gt;a Word Processor&lt;/strong&gt; like MS Word, for example &amp;#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&amp;#8217;t believe GUIs are suitable for doing this at a professional level.&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;a Document Authoring Software&lt;/strong&gt; like Adobe Framemaker, Robohelp, etc. Still GUIs, only more complicated to use.&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;&lt;span class="caps"&gt;XML&lt;/span&gt;, like &lt;span class="caps"&gt;DITA&lt;/span&gt; or DocBook, or other markups&lt;/strong&gt;, like ReStructuredText. Better, but still not easily extensible and flexible enough.&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;your company&amp;#8217;s tools&lt;/strong&gt;, if you have them. That&amp;#8217;s great if they are usable enough and the result makes your boss happy.&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;LaTeX&lt;/strong&gt;, and that&amp;#8217;s probably your best option, if you know what you&amp;#8217;re doing.&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;&lt;span class="caps"&gt;XHTML&lt;/span&gt; and CSS3&lt;/strong&gt;, in conjunction with a &lt;span class="caps"&gt;PDF&lt;/span&gt; renderer like &lt;a href="http://www.princexml.com/"&gt;Prince &lt;span class="caps"&gt;XML&lt;/span&gt;&lt;/a&gt; &amp;#8212; that&amp;#8217;s great if you know &lt;span class="caps"&gt;HTML&lt;/span&gt; and &lt;span class="caps"&gt;CSS&lt;/span&gt;, and you don&amp;#8217;t mind hand-crafting the structure of the document.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Lightweight markups&lt;/h3&gt;
&lt;p&gt;I love Textile and Markdown. When people aren&amp;#8217;t looking, I even use them at work to generate &lt;span class="caps"&gt;HTML&lt;/span&gt; code, because it&amp;#8217;s just so much faster. Textile in particular can be used as a drop-in replacement for &lt;span class="caps"&gt;HTML&lt;/span&gt; (and a bit of LaTeX, too), as it can produce most inline &lt;span class="caps"&gt;HTML&lt;/span&gt; tags effortlessly and some block-level tags, too.&lt;/p&gt;
&lt;p&gt;For things like &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; tags and &lt;code&gt;&amp;lt;tables&amp;gt;&lt;/code&gt; though, Textile is not the best thing in the world, so you normally end up falling back to &lt;span class="caps"&gt;HTML&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;Another &amp;#8220;problem&amp;#8221; is that &lt;strong&gt;Textile&lt;/strong&gt; or other similar lightweight markups cannot be extended easily, simply because they were not meant to be extended in the first place.&lt;/p&gt;
&lt;p&gt;Moreover, if you are producing a book, Textile can&amp;#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&amp;#8217;s job.&lt;/p&gt;
&lt;h3&gt;How Glyph can help&lt;/h3&gt;
&lt;p style="float:right;"&gt;&lt;img src="/img/pictures/glyph.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;There are a few projects on the Internet that tackle structured document generation. One of them is &lt;a href="http://github.com/fnando/kitabu"&gt;Kitabu&lt;/a&gt;, which looks promising and is able to produce pretty documents using Textile and Prince for &lt;span class="caps"&gt;PDF&lt;/span&gt; rendering&amp;#8230; but again, it&amp;#8217;s not extensible because it relies too much on Textile and Markdown.&lt;/p&gt;
&lt;p&gt;&lt;a href="/glyph/"&gt;Glyph&lt;/a&gt; is different. For one, it is much younger than any other, therefore it is most likely full of bugs.&lt;/p&gt;
&lt;p&gt;Jokes aside, Glyph follows a much more radical approach, which consists in using a &lt;em&gt;macro language&lt;/em&gt; on top of Textile or Markdown. The good thing about it is that this macro language is very simple to learn and &amp;#8212; most importantly &amp;#8212; very easy to extend.&lt;/p&gt;
&lt;p&gt;Here&amp;#8217;s an example:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;section[header[Something about Glyph]
You can use Glyph macros in conjunction
 with _Textile_ or _Markdown_ to
produce HTML files effortlessly.
  section[header[What about PDFs?|pdf]
Once you have a single, well-formatted HTML 
file, converting it to PDF is
extremely easy with a 3rd-party 
renderer like =&amp;gt;[http://www.princexml.com|Prince].
  ]   
]
&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;Which translates to:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;div class=&amp;quot;section&amp;quot;&lt;span class="ni"&gt;&amp;amp;gt;&lt;/span&gt;
  &lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;h2 id=&amp;quot;h_1&amp;quot;&lt;span class="ni"&gt;&amp;amp;gt;&lt;/span&gt;Something about Glyph&lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;/h2&lt;span class="ni"&gt;&amp;amp;gt;&lt;/span&gt;
  &lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;p&lt;span class="ni"&gt;&amp;amp;gt;&lt;/span&gt;You can use Glyph macros in conjunction with 
     &lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;em&lt;span class="ni"&gt;&amp;amp;gt;&lt;/span&gt;Textile&lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;/em&lt;span class="ni"&gt;&amp;amp;gt;&lt;/span&gt; or &lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;em&lt;span class="ni"&gt;&amp;amp;gt;&lt;/span&gt;Markdown&lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;/em&lt;span class="ni"&gt;&amp;amp;gt;&lt;/span&gt; to
     produce HTML files effortlessly.&lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;/p&lt;span class="ni"&gt;&amp;amp;gt;&lt;/span&gt;
  &lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;div class=&amp;quot;section&amp;quot;&lt;span class="ni"&gt;&amp;amp;gt;&lt;/span&gt;
   &lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;h3 id=&amp;quot;pdf&amp;quot;&lt;span class="ni"&gt;&amp;amp;gt;&lt;/span&gt;What about PDFs?&lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;/h3&lt;span class="ni"&gt;&amp;amp;gt;&lt;/span&gt;
   &lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;p&lt;span class="ni"&gt;&amp;amp;gt;&lt;/span&gt;Once you have a single, well-formatted HTML 
      file, converting it to PDF is
      extremely easy with a 3rd-party renderer 
      like &lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;a href=&amp;quot;http://www.princexml.com&amp;quot;&lt;span class="ni"&gt;&amp;amp;gt;&lt;/span&gt;Prince&lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;/a&lt;span class="ni"&gt;&amp;amp;gt;&lt;/span&gt;.&lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;/p&lt;span class="ni"&gt;&amp;amp;gt;&lt;/span&gt;
  &lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;/div&lt;span class="ni"&gt;&amp;amp;gt;&lt;/span&gt;
&lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;/div&lt;span class="ni"&gt;&amp;amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;Glyph macros can be used to:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Generate block-level &lt;span class="caps"&gt;HTML&lt;/span&gt; tags not commonly managed by lightweight markups, like &lt;code&gt;head&lt;/code&gt;, &lt;code&gt;body&lt;/code&gt;, &lt;code&gt;div&lt;/code&gt; and &lt;code&gt;table&lt;/code&gt;.&lt;/li&gt;
	&lt;li&gt;Create and validate internal and external links.&lt;/li&gt;
	&lt;li&gt;Include and validate images and figures.&lt;/li&gt;
	&lt;li&gt;Automatically determine header levels based on the document structure.&lt;/li&gt;
	&lt;li&gt;Automatically generate a Table of Contents based on the document structure.&lt;/li&gt;
	&lt;li&gt;Store common snippets of text in a single &lt;span class="caps"&gt;YAML&lt;/span&gt; file and use them anywhere in your document, as many times as you need.&lt;/li&gt;
	&lt;li&gt;Store configuration settings in a &lt;span class="caps"&gt;YAML&lt;/span&gt; file and use them anywhere in your document, as many times as you need.&lt;/li&gt;
	&lt;li&gt;Evaluate Ruby code within your document.&lt;/li&gt;
	&lt;li&gt;Call macros from other macros (including snippets), carefully avoiding mutual calls.&lt;/li&gt;
	&lt;li&gt;Include text files in other text files.&lt;/li&gt;
	&lt;li&gt;Include the contents of configuration settings (author, title) in the document.&lt;/li&gt;
	&lt;li&gt;Filter input explicitly or implicitly, based on file extensions when including files.&lt;/li&gt;
	&lt;li&gt;Manage comments and todo items.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;An example Glyph project? Sure, Glyph&amp;#8217;s own guide (&lt;a href="http://github.com/h3rald/glyph/tree/master/book/"&gt;source&lt;/a&gt; &amp;#8212; &lt;a href="http://github.com/h3rald/glyph/tree/master/book/output/pdf/"&gt;&lt;span class="caps"&gt;PDF&lt;/span&gt; output&lt;/a&gt;).&lt;/p&gt;
&lt;h3&gt;Technical Details&lt;/h3&gt;
&lt;p&gt;Glyph is built on top of the following Ruby Gems:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://github.com/davetron5000/gli"&gt;gli&lt;/a&gt; &amp;#8212; For the high-level command line interface.&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://rake.rubyforge.org/"&gt;rake&lt;/a&gt; &amp;#8212; For the mid-level interdependent task layer.&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://treetop.rubyforge.org/"&gt;treetop&lt;/a&gt; &amp;#8212; For parsing Glyph Language, whose grammar is &lt;a href="http://github.com/h3rald/glyph/blob/master/lib/glyph/glyph_language.treetop"&gt;ridiculously simple&lt;/a&gt;, but it seems to work so far.&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://rubyforge.org/projects/extlib/"&gt;extlib&lt;/a&gt; &amp;#8212; Because I can&amp;#8217;t leave without it.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Disclaimer&lt;/h3&gt;
&lt;p&gt;Glyph is &lt;strong&gt;alpha software&lt;/strong&gt; (hence the 0.1.0 version number) &amp;#8212; handle with care and be aware that &lt;em&gt;everything&lt;/em&gt; could change tomorrow. If you want to keep up-to-date and/or provide feedback, feel free to join &lt;a href="http://groups.google.com/group/glyph-framework"&gt;Glyph&amp;#8217;s User Group&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;For more information&amp;#8230;&lt;/h3&gt;
&lt;p&gt;&amp;#8230;head over to &lt;a href="/glyph/"&gt;Glyph&amp;#8217;s homepage&lt;/a&gt;.&lt;/p&gt;</description>
      <pubDate>Fri, 09 Apr 2010 17:30:39 -0000</pubDate>
      <guid>http://www.h3rald.com/articles/introducing-glyph/</guid>
      <link>http://www.h3rald.com/articles/introducing-glyph/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/introducing-glyph/#comments</comments>
      <category>glyph</category>
      <category>ruby</category>
      <category>frameworks</category>
      <category>writing</category>
    </item>
    <item>
      <title>Take back your site, with nanoc!</title>
      <description>&lt;p&gt;Back in 2004, when I bought the h3rald.com domain, this site was static. At the time I hardly knew &lt;span class="caps"&gt;HTML&lt;/span&gt; and &lt;span class="caps"&gt;CSS&lt;/span&gt;, nevermind server-side languages, so I remember creating a &lt;em&gt;pseudo-template&lt;/em&gt; for the web site layout and using it whenever I wanted to create a new page, to preserve the overall look-and-feel. This was a crude and inefficient strategy, of course: whenever I changed the layout I had to replicate the change in all the pages of the site &amp;ndash; the whole eight of them.&lt;/p&gt;
&lt;p&gt;Five years later, after rebuilding this web site &lt;a href="/h3rald/"&gt;seven times&lt;/a&gt; using different backends (&lt;span class="caps"&gt;PHP&lt;/span&gt; + CakePHP, Ruby + Rails + Typo, etc.), I decided to make it static again, this time with a twist. It all started when I read a &lt;a href="http://tom.preston-werner.com/2008/11/17/blogging-like-a-hacker.html"&gt;post&lt;/a&gt; by Tom Preston-Warner (&lt;a href="http://www.github.com"&gt;GitHub&lt;/a&gt; co-founder) that I finally decided to give it a try. Today, the 8th release of this web site is 100% static: if you load any page, there&amp;#8217;s no server-side interpretation going on, you&amp;#8217;re just browsing a plain &lt;span class="caps"&gt;HTML&lt;/span&gt; page, at most with a few &lt;span class="caps"&gt;AJAX&lt;/span&gt; calls. But let&amp;#8217;s start from the beginning&amp;#8230;&lt;/p&gt;
&lt;h3&gt;Why I don&amp;#8217;t need a blog platform&lt;/h3&gt;
&lt;p&gt;There&amp;#8217;s nothing inherently wrong with blog platforms like Wordpress: they allow &lt;em&gt;anyone&lt;/em&gt; 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&amp;#8217;t know anything about &lt;span class="caps"&gt;HTML&lt;/span&gt;, let alone server-side scripting.&lt;/p&gt;
&lt;p&gt;What about people who &lt;em&gt;do&lt;/em&gt; 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 &lt;em&gt;hacking&lt;/em&gt; a little bit, if you don&amp;#8217;t really care about fancy and user-friendly administration backends&amp;#8230; &lt;em&gt;then you probably don&amp;#8217;t&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;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 &amp;ndash; and you&amp;#8217;re also spoiled for choices!&lt;/p&gt;
&lt;h3&gt;Introducing site compilers&lt;/h3&gt;
&lt;p&gt;The first &lt;em&gt;site compiler&lt;/em&gt; I discovered was &lt;a href="http://webby.rubyforge.org/"&gt;Webby&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;[&amp;#8230;] Webby works by combining the contents of a page with a layout to produce &lt;span class="caps"&gt;HTML&lt;/span&gt;. The layout contains everything common to all the pages &amp;mdash; &lt;span class="caps"&gt;HTML&lt;/span&gt; headers, navigation menu, footer, etc. &amp;mdash; and the page contains just the information for that page. You can use your favorite markup language to write your pages; Webby supports quite a few.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;There are quite a few applications like Webby, such as:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://nanoc.stoneship.org/"&gt;nanoc&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://snk.tuxfamily.org/lib/rassmalog/doc/guide.html"&gt;Rassmalog&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://www.jekyllrb.com/"&gt;Jeckyll&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://webgen.rubyforge.org/"&gt;WebGen&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://rog.rubyforge.org/"&gt;Rog&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://rote.rubyforge.org/"&gt;Rote&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://hobix.com/"&gt;Hobix&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://rakeweb.rubyforge.org/wiki/wiki.pl"&gt;RakeWeb&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://www.apeth.com/RubyFrontierDocs/default.html"&gt;RubyFrontier&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://staticmatic.rubyforge.org/"&gt;StaticMatic&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://staticweb.rubyforge.org/"&gt;StaticWeb&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://www.zenspider.com/ZSS/Products/ZenWeb/"&gt;ZenWeb&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://yurtcms.roberthahn.ca/"&gt;YurtCMS&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://nanoblogger.sourceforge.net/"&gt;NanoBlogger&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There are probably even more, with different features, but they all try to solve the same problem: provide a way to generate static web sites in an automated way.&lt;/p&gt;
&lt;p&gt;I spent some time reading about each one of them, &lt;a href="http://github.com/h3rald/h3rald/issues/closed#issue/1"&gt;evaluating the pros and cons&lt;/a&gt; and in the end I decided to go for &lt;a href="http://nanoc.stoneship.org/"&gt;nanoc&lt;/a&gt;, simply because it was the only one that seemed to fit all my needs.&lt;/p&gt;
&lt;h3&gt;A quick overview of nanoc&lt;/h3&gt;
&lt;p&gt;nanoc is a nifty tool written in Ruby suitable for &lt;em&gt;[&amp;#8230;] building small to medium-sized websites&lt;/em&gt;. In other words, anything which doesn&amp;#8217;t involve some fancy user interaction. For what concerns blogs, the only user interaction is &lt;em&gt;comments&lt;/em&gt; &amp;ndash; but that&amp;#8217;s fine, because there&amp;#8217;s more than one web service for that, such as &lt;a href="http://disqus.com/"&gt;Disqus&lt;/a&gt; or &lt;a href="http://intensedebate.com/"&gt;IntenseDebate&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;Some details on the project&lt;/h4&gt;
&lt;p&gt;Compared to the alternatives, nanoc is one of the most mature and most maintained, having hit just a few weeks ago its 3.0 release. Its creator, Denis Defreyne, uses it for his own &lt;a href="http://stoneship.org/"&gt;web site&lt;/a&gt; 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 &lt;a href="http://groups.google.com/group/nanoc"&gt;nanoc user group&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Denis also seems very concerned about keeping documentation up-to-date &amp;ndash; something that really impressed me from a technical writer&amp;#8217;s point of view. The &lt;a href="http://nanoc.stoneship.org/tutorial/"&gt;tutorial&lt;/a&gt; he put together will get you started in no time, and the &lt;a href="http://nanoc.stoneship.org/manual/"&gt;manual&lt;/a&gt; will explain everything else you may possibly want to know. When release 3.0 came out he even put together a &lt;a href="http://nanoc.stoneship.org/migrating/"&gt;migration guide&lt;/a&gt;. If this is still not enough and you don&amp;#8217;t mind spending some time extending the system, nanoc&amp;#8217;s &lt;a href="http://nanoc.stoneship.org/doc/3.0.0/"&gt;RDoc documentation&lt;/a&gt; is very comprehensive compared to other Ruby projects.&lt;/p&gt;
&lt;h4&gt;Sites, Items and data sources&lt;/h4&gt;
&lt;p style="float:right;"&gt;&lt;img src="/img/pictures/nanoc-structure.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;nanoc ships with a really neat command line tool that can do most of the work for you. &lt;code&gt;Nanoc3 create_site h3rald&lt;/code&gt; will create a new web site in a folder called h3rald. The contents of this folder are laid out according to a particular logic (&lt;em&gt;convention over configuration&lt;/em&gt;, remember?) So:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;strong&gt;content&lt;/strong&gt; &amp;ndash; your articles, pages, stylesheets, images, &amp;#8230;all the site content and assets.&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;layouts&lt;/strong&gt; &amp;ndash; the site layouts (and partial layouts)&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;lib&lt;/strong&gt; &amp;ndash; place your custom ruby code and vendor libraries here&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;output&lt;/strong&gt; &amp;ndash; your &amp;#8220;compiled&amp;#8221; site, ready to be deployed&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;config.yaml&lt;/strong&gt; &amp;ndash; your site&amp;#8217;s configuration file. The only one (and it&amp;#8217;s just a few lines)&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Rakefile&lt;/strong&gt; &amp;ndash; place any custom Rake task here&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Rules&lt;/strong&gt; &amp;ndash; defines the rules for compilation, layout and routing&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Here&amp;#8217;s the default &lt;code&gt;config.yaml&lt;/code&gt; file:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="l-Scalar-Plain"&gt;data_sources&lt;/span&gt;&lt;span class="p-Indicator"&gt;:&lt;/span&gt; 
&lt;span class="p-Indicator"&gt;-&lt;/span&gt; &lt;span class="l-Scalar-Plain"&gt;items_root&lt;/span&gt;&lt;span class="p-Indicator"&gt;:&lt;/span&gt; &lt;span class="l-Scalar-Plain"&gt;/&lt;/span&gt;
  &lt;span class="l-Scalar-Plain"&gt;layouts_root&lt;/span&gt;&lt;span class="p-Indicator"&gt;:&lt;/span&gt; &lt;span class="l-Scalar-Plain"&gt;/&lt;/span&gt;
  &lt;span class="l-Scalar-Plain"&gt;type&lt;/span&gt;&lt;span class="p-Indicator"&gt;:&lt;/span&gt; &lt;span class="l-Scalar-Plain"&gt;filesystem_compact&lt;/span&gt;
  &lt;span class="l-Scalar-Plain"&gt;output_dir&lt;/span&gt;&lt;span class="p-Indicator"&gt;:&lt;/span&gt; &lt;span class="l-Scalar-Plain"&gt;output&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;A &lt;em&gt;data source&lt;/em&gt; in nanoc defines where data is retrieved from to create the web site. By default, the &lt;a href="http://nanoc.stoneship.org/doc/3.0.0/Nanoc3/DataSources/FilesystemCompact.html"&gt;filesystem_compact&lt;/a&gt; data source requires that you create two files in the /content folder for each article or page of your web page:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;One containing the actual content of the page&lt;/li&gt;
	&lt;li&gt;Another for the page&amp;#8217;s arbitrary metadata&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;By personal preference, I chose the &lt;a href="http://nanoc.stoneship.org/doc/3.0/Nanoc3/DataSources/FilesystemCombined.html"&gt;filesystem_combined&lt;/a&gt; data source, which allows you to combine the content and the metadata of a page in a single file.&lt;/p&gt;
&lt;p&gt;The source code for this very article, for example, starts like this:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;-----
type: article
tags:
- website
- ruby
- programming
- writing
date: 2009-09-15 13:32:51.049000 +02:00
permalink: take-back-your-site-with-nanoc
title: &amp;quot;Take back your site, with nanoc!&amp;quot;
toc: true
-----
Back in 2004, when I bought the h3rald.com domain, this site was static. At the time I hardly 
knew HTML and CSS, nevermind server-side languages, so I remember creating a _pseudo-template_ for
 the web site layout and using it whenever I wanted to create a new page, to preserve the overall look-and-feel. 
This was a crude and inefficient strategy, of course: whenever I changed the layout I had to replicate the change
 in all the pages of the site &amp;amp;ndash; the whole eight of them.
&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;At run time, the content goes through a Textile filter and the metadata is used in layouts, to generate tag links automatically, for example.&lt;/p&gt;
&lt;h4&gt;Layouts, filters, and helpers&lt;/h4&gt;
&lt;p&gt;Layouts in nanoc are similar to layouts and views in Rails, but much simpler. The same applies to helpers. Here&amp;#8217;s a snippet from my &lt;a href="http://github.com/h3rald/h3rald/tree/master/layouts/default.erb"&gt;default layout&lt;/a&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;        &amp;lt;div id=&amp;quot;container&amp;quot;&amp;gt;
          &amp;lt;!-- CONTENT START --&amp;gt;
          &amp;lt;div id=&amp;quot;content&amp;quot; class=&amp;quot;clearfix&amp;lt;%= (@item[:permalink] == &amp;#39;home&amp;#39;) ? &amp;#39; home&amp;#39; : &amp;#39; standard&amp;#39; %&amp;gt;&amp;quot;&amp;gt;
            &amp;lt;h2&amp;gt;&amp;lt;%= @item[:title] %&amp;gt;&amp;lt;/h2&amp;gt;
            &amp;lt;%   case @item[:type]
                when &amp;#39;article&amp;#39; then%&amp;gt;
                &amp;lt;div id=&amp;quot;content-header&amp;quot;&amp;gt;
                  &amp;lt;%= render &amp;#39;article_meta&amp;#39;, :article =&amp;gt; @item %&amp;gt;
                &amp;lt;/div&amp;gt;
              &amp;lt;% end %&amp;gt;
              &amp;lt;hr /&amp;gt;
              &amp;lt;div id=&amp;quot;content-body&amp;quot;&amp;gt;
                &amp;lt;%= yield %&amp;gt;
              &amp;lt;/div&amp;gt;
              &amp;lt;div id=&amp;quot;content-footer&amp;quot;&amp;gt;
                &amp;lt;div class=&amp;quot;share&amp;quot;&amp;gt;
                  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;http://w.sharethis.com/button/sharethis.js#publisher=6e34d60c-b14e-4c19-9b2f-7c35a9f0ab09&amp;amp;amp;type=website&amp;amp;amp;linkfg=%23a4282d&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;
                  &amp;lt;% if @item[:feed] then %&amp;gt;
                  &amp;lt;a href=&amp;quot;&amp;lt;% @item[:feed_url] || @item[:feed]+&amp;quot;rss/&amp;quot; %&amp;gt;&amp;quot; type=&amp;quot;application/rss+xml&amp;quot; rel=&amp;quot;alternate&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;/images/theme/feed-icon-14x14.png&amp;quot; alt=&amp;quot;#&amp;quot;/&amp;gt;H3RALD - &amp;lt;%= @item[:feed_title]%&amp;gt;&amp;lt;/a&amp;gt;
                  &amp;lt;% end %&amp;gt;
                &amp;lt;/div&amp;gt;
                &amp;lt;%= render &amp;#39;article_buttons&amp;#39; if @item[:type] == &amp;#39;article&amp;#39; %&amp;gt;
              &amp;lt;/div&amp;gt;
            &amp;lt;/div&amp;gt;
&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;This source code snippet shows quite a few features of nanoc&amp;#8217;s layouts:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;You can access the metadata of the page which is being rendered using the &lt;code&gt;@item&lt;/code&gt;, so &lt;code&gt;@item[:title]&lt;/code&gt; returns the page&amp;#8217;s title, for example.&lt;/li&gt;
	&lt;li&gt;Layouts can be nested, and behave like Rails&amp;#8217;s partials. The &lt;code&gt;render&lt;/code&gt; takes a string parameter (the name of the layout to render) and an optional hash parameter to pass variables to the layout.&lt;/li&gt;
	&lt;li&gt;The &lt;code&gt;yield&lt;/code&gt; method is used to include the content of a page.&lt;/li&gt;
	&lt;li&gt;Layouts support any kind of filter, like &lt;span class="caps"&gt;ERB&lt;/span&gt; for example. Go crazy.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Helpers can be used in layouts to perform common tasks, like creating links, feeds, navigation elements and so on. Check the &lt;a href="http://nanoc.stoneship.org/doc/3.0.0/"&gt;source code docs&lt;/a&gt; for more info, and of course feel free to create your own as you see fit.&lt;/p&gt;
&lt;p&gt;Finally, filters are used to filter content markup. nanoc ships with &lt;a href="http://nanoc.stoneship.org/manual/#list-of-built-in-filters"&gt;almost everything you need&lt;/a&gt;, from Textile to Haml to RDoc, but nobody forbids you to create your own, and it&amp;#8217;s dead easy.&lt;/p&gt;
&lt;h4&gt;Rules and tasks&lt;/h4&gt;
&lt;p&gt;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 everything work. Rules are stored in the &lt;code&gt;Rules&lt;/code&gt; file of your nanoc site, they can be used to:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Define routes, i.e. where pages are deployed in the output folder.&lt;/li&gt;
	&lt;li&gt;Define how pages are compiled, which filters to apply to a particular set of pages, which layouts to use, etc.&lt;/li&gt;
	&lt;li&gt;Define how layout are handled, which filters to apply to a particular layout, etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You can find more information in the &lt;a href="http://nanoc.stoneship.org/manual/#rules"&gt;manual&lt;/a&gt;, along with other important information, but for now, let&amp;#8217;s say you should be familiar with &lt;em&gt;most&lt;/em&gt; of nanoc&amp;#8217;s jargon and how it works. Let&amp;#8217;s see what you can do with it, in practice.&lt;/p&gt;
&lt;h3&gt;Migrating from your blog platform&lt;/h3&gt;
&lt;p&gt;As of version 7, h3rald.com has been powered by the &lt;a href="http://www.typosphere.org"&gt;Typo&lt;/a&gt; blog platform. If you are not familiar with it, let&amp;#8217;s just say it&amp;#8217;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:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;It relies on a database&lt;/li&gt;
	&lt;li&gt;It relies on server-side scripting to render pages&lt;/li&gt;
	&lt;li&gt;It uses a complex caching mechanism to produce, ultimately, semi-static pages&lt;/li&gt;
	&lt;li&gt;It may be subject to exploits, attacks, high server loads, and similar&lt;/li&gt;
	&lt;li&gt;You can&amp;#8217;t really customize it beyond a certain point&lt;/li&gt;
	&lt;li&gt;You have to upgrade your backend frequently, and often is not as painless as you may expect&lt;/li&gt;
	&lt;li&gt;You can&amp;#8217;t use versioning tools like git for your content, as it&amp;#8217;s stored in a database&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I&amp;#8217;m not claiming that nanoc is blogging&amp;#8217;s silver bullet (it was not created for that), but for sure:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;It &lt;em&gt;does not&lt;/em&gt; rely on a database&lt;/li&gt;
	&lt;li&gt;It &lt;em&gt;does not&lt;/em&gt; rely on server-side scripting to render pages (not in real-time, anyway)&lt;/li&gt;
	&lt;li&gt;It &lt;em&gt;does not&lt;/em&gt; need a complex caching mechanism simply because it produces static pages&lt;/li&gt;
	&lt;li&gt;It is definitely less prone to nasty things&lt;/li&gt;
	&lt;li&gt;It&amp;#8217;s extremely flexible and hackable with very little effort&lt;/li&gt;
	&lt;li&gt;You don&amp;#8217;t have to upgrade all the time, but it is &lt;em&gt;really&lt;/em&gt; painless if you decide to&lt;/li&gt;
	&lt;li&gt;You can use git and similar: your content is in plain old text files&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Rants are beside the point, suffice to say I recently convinced myself that switching from Typo to nanoc was a &lt;em&gt;good thing&lt;/em&gt;, so let&amp;#8217;s see how it worked out.&lt;/p&gt;
&lt;h4&gt;Posts, pages and comments&lt;/h4&gt;
&lt;p&gt;Out of Typo&amp;#8217;s MySQL database, I just wanted to get the following data:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Pages and posts&lt;/li&gt;
	&lt;li&gt;Tags&lt;/li&gt;
	&lt;li&gt;Comments&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Following the approach used by &lt;a href="http://github.com/mojombo/jekyll"&gt;Jekyll&lt;/a&gt;, I decided to use the simple and powerful &lt;a href="http://sequel.rubyforge.org/"&gt;Sequel&lt;/a&gt; gem. I&amp;#8217;m sorry to disappoint you, but the whole migration process can be summarize with the following Rake task:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;  &lt;span class="n"&gt;task&lt;/span&gt; &lt;span class="ss"&gt;:migrate&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:db&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:usr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:pwd&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:host&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
    &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="no"&gt;RuntimeError&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;Please provide :db, :usr, :pass&amp;quot;&lt;/span&gt; &lt;span class="k"&gt;unless&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:db&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:usr&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:pwd&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
    &lt;span class="n"&gt;db&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Sequel&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;mysql&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:db&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:user&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:usr&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:password&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:pwd&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:host&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:host&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;localhost&amp;#39;&lt;/span&gt;
    &lt;span class="c1"&gt;# Remove all existing pages!&lt;/span&gt;
    &lt;span class="n"&gt;dir&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Pathname&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="no"&gt;Dir&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pwd&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;content&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;dir&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;rmtree&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;dir&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;exist?&lt;/span&gt;
    &lt;span class="n"&gt;dir&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;mkpath&lt;/span&gt;
    &lt;span class="c1"&gt;# Prepare page data&lt;/span&gt;
    &lt;span class="n"&gt;dataset&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:contents&lt;/span&gt;&lt;span class="o"&gt;].&lt;/span&gt;&lt;span class="n"&gt;where&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;state = &amp;#39;published&amp;#39; || type = &amp;#39;Page&amp;#39;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;total&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;dataset&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt; 
    &lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
    &lt;span class="n"&gt;total_tags&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;[]&lt;/span&gt;
    &lt;span class="n"&gt;dataset&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;each&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
      &lt;span class="nb"&gt;puts&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;Migrating [&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;total&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;]: &amp;#39;&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:title&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#39;...&amp;quot;&lt;/span&gt;
      &lt;span class="n"&gt;meta&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
      &lt;span class="n"&gt;meta&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;tags&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;get_tags&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:keywords&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
      &lt;span class="n"&gt;meta&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;comments&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;get_comments&lt;/span&gt; &lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:id&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
      &lt;span class="n"&gt;meta&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;permalink&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:permalink&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:name&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
      &lt;span class="n"&gt;meta&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;title&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:title&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
      &lt;span class="n"&gt;meta&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;type&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:type&lt;/span&gt;&lt;span class="o"&gt;].&lt;/span&gt;&lt;span class="n"&gt;downcase&lt;/span&gt;
      &lt;span class="n"&gt;meta&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;date&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:published_at&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
      &lt;span class="n"&gt;meta&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;toc&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kp"&gt;true&lt;/span&gt;
      &lt;span class="n"&gt;meta&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;filters_pre&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;extension&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;get_filter&lt;/span&gt; &lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:text_filter_id&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
      &lt;span class="n"&gt;contents&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;convert_code_blocks&lt;/span&gt; &lt;span class="n"&gt;meta&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:body&lt;/span&gt;&lt;span class="o"&gt;]+&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:extended&lt;/span&gt;&lt;span class="o"&gt;].&lt;/span&gt;&lt;span class="n"&gt;to_s&lt;/span&gt;
      &lt;span class="n"&gt;write_page&lt;/span&gt; &lt;span class="n"&gt;meta&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;contents&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;extension&lt;/span&gt;
      &lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
    &lt;span class="k"&gt;end&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;That&amp;#8217;s it. Well, almost: you can find the &lt;code&gt;get_comments&lt;/code&gt;, &lt;code&gt;get_tags&lt;/code&gt; and &lt;code&gt;get_filter&lt;/code&gt; methods in a separate &lt;a href="http://github.com/h3rald/h3rald/tree/master/lib/utils.rb"&gt;utility file&lt;/a&gt;. 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&amp;#8217;s metadata. The &lt;code&gt;write_page&lt;/code&gt; method simply creates a file in the &lt;code&gt;/contents&lt;/code&gt; folder.&lt;/p&gt;
&lt;h4&gt;Filters and highlighters&lt;/h4&gt;
&lt;p&gt;On my old site, I used mainly Textile and Markdown to write posts. However, some of my really old articles used BBCode, whose corresponding filter is not available in nanoc. No worries, I soon found out that creating a new nanoc filter came down to this:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;rubygems&amp;#39;&lt;/span&gt;
&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;bb-ruby&amp;#39;&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;BbcodeFilter&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="no"&gt;Nanoc3&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Filter&lt;/span&gt;
  &lt;span class="n"&gt;identifier&lt;/span&gt; &lt;span class="ss"&gt;:bbcode&lt;/span&gt;

  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;bbcode_to_html&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;Yes, that&amp;#8217;s it. Granted, the &lt;code&gt;bb-ruby&lt;/code&gt; gem does all the work, but notice how easy it is to just plug in new Ruby code into nanoc&amp;#8217;s architecture!&lt;/p&gt;
&lt;p&gt;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 &lt;span class="caps"&gt;PHP&lt;/span&gt;, Ruby or Python. Again, I looked at Jekyll for inspiration and discovered they integrated the &lt;a href="http://www.pygments.org"&gt;Pygments&lt;/a&gt; &lt;em&gt;Python&lt;/em&gt; library. Why use a Python library for code highlighting in a Ruby-based project? Because there&amp;#8217;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.&lt;/p&gt;
&lt;p&gt;Lazy as I am, I more or less dropped &lt;a href="http://github.com/h3rald/h3rald/blob/master/lib/albino.rb"&gt;Chris Wanstrath&amp;#8217;s Ruby wrapper&lt;/a&gt; into my &lt;code&gt;/lib&lt;/code&gt; folder (I just used Open3 instead of Open4 for Windows compatibility), and monkey-patched nanoc&amp;#8217;s filtering helper as follows:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="k"&gt;module&lt;/span&gt; &lt;span class="nn"&gt;Nanoc3::Helpers::Filtering&lt;/span&gt;

  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;highlight&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;syntax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;block&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="c1"&gt;# Seamlessly ripped off from the filter method...&lt;/span&gt;
    &lt;span class="c1"&gt;# Capture block&lt;/span&gt;
    &lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;capture&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;block&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="c1"&gt;# Reconvert &lt;/span&gt;
    &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;gsub!&lt;/span&gt; &lt;span class="sr"&gt;/&amp;lt;%/&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;&amp;#39;&lt;/span&gt;
    &lt;span class="c1"&gt;# Filter captured data&lt;/span&gt;
    &lt;span class="n"&gt;filtered_data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;&amp;lt;notextile&amp;gt;&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="no"&gt;Albino&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;colorize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;syntax&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&amp;lt;/notextile&amp;gt;&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt; &lt;span class="k"&gt;rescue&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt; 
    &lt;span class="c1"&gt;# Append filtered data to buffer&lt;/span&gt;
    &lt;span class="n"&gt;buffer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;eval&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;_erbout&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;block&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;binding&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;buffer&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;filtered_data&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="kp"&gt;include&lt;/span&gt; &lt;span class="no"&gt;Nanoc3&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Helpers&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Filtering&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;There you go, another thing sorted.&lt;/p&gt;
&lt;h4&gt;Tags and Feeds&lt;/h4&gt;
&lt;p&gt;Adding tagging support was a tiny bit more tricky. nanoc supports content tagging out-of-the-box though metadata and a simple helper, but I wanted to create tag pages (with feeds). Nothing too difficult though, it all came down to a simple Rake task:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;  &lt;span class="n"&gt;task&lt;/span&gt; &lt;span class="ss"&gt;:tags&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
    &lt;span class="n"&gt;site&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Nanoc3&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Site&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;.&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;site&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;load_data&lt;/span&gt;
    &lt;span class="n"&gt;dir&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Pathname&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="no"&gt;Dir&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pwd&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;content/tags&amp;#39;&lt;/span&gt;
    &lt;span class="n"&gt;dir&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;rmtree&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;dir&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;exist?&lt;/span&gt;
    &lt;span class="n"&gt;dir&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;mkpath&lt;/span&gt;
    &lt;span class="n"&gt;tags&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
    &lt;span class="c1"&gt;# Collect tag and page data&lt;/span&gt;
    &lt;span class="n"&gt;site&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;items&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;each&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="nb"&gt;p&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
      &lt;span class="k"&gt;next&lt;/span&gt; &lt;span class="k"&gt;unless&lt;/span&gt; &lt;span class="nb"&gt;p&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;attributes&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:tags&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
      &lt;span class="nb"&gt;p&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;attributes&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:tags&lt;/span&gt;&lt;span class="o"&gt;].&lt;/span&gt;&lt;span class="n"&gt;each&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;tags&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
          &lt;span class="n"&gt;tags&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;tags&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="o"&gt;]+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
        &lt;span class="k"&gt;else&lt;/span&gt;
          &lt;span class="n"&gt;tags&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; 
        &lt;span class="k"&gt;end&lt;/span&gt;
      &lt;span class="k"&gt;end&lt;/span&gt;
    &lt;span class="k"&gt;end&lt;/span&gt;
    &lt;span class="c1"&gt;# Write pages&lt;/span&gt;
    &lt;span class="n"&gt;tags&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;each_pair&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
      &lt;span class="n"&gt;write_tag_page&lt;/span&gt; &lt;span class="n"&gt;dir&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;
      &lt;span class="n"&gt;write_tag_feed_page&lt;/span&gt; &lt;span class="n"&gt;dir&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;RSS&amp;#39;&lt;/span&gt;
      &lt;span class="n"&gt;write_tag_feed_page&lt;/span&gt; &lt;span class="n"&gt;dir&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;Atom&amp;#39;&lt;/span&gt;
    &lt;span class="k"&gt;end&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;Again, you can find all the other simple utility methods in my &lt;a href="http://github.com/h3rald/h3rald/tree/master/lib/utils.rb"&gt;utility file&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;When it came to feeds, I decided to create a new method for the Blogging helper to create &lt;span class="caps"&gt;RSS&lt;/span&gt; feeds, although nanoc does come with an Atom feed generator:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;rss_feed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{})&lt;/span&gt;
    &lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;builder&amp;#39;&lt;/span&gt;
    &lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;time&amp;#39;&lt;/span&gt;
    &lt;span class="n"&gt;prepare_feed&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;
    &lt;span class="c1"&gt;# Create builder&lt;/span&gt;
    &lt;span class="n"&gt;buffer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;&amp;#39;&lt;/span&gt;
    &lt;span class="n"&gt;xml&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Builder&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;XmlMarkup&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:target&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;buffer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:indent&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="c1"&gt;# Build feed&lt;/span&gt;
    &lt;span class="n"&gt;xml&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;instruct!&lt;/span&gt;
    &lt;span class="n"&gt;xml&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;rss&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:version&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;2.0&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
      &lt;span class="n"&gt;xml&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;channel&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
        &lt;span class="n"&gt;xml&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;title&lt;/span&gt; &lt;span class="vi"&gt;@item&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:title&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
        &lt;span class="n"&gt;xml&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;language&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;en-us&amp;#39;&lt;/span&gt;
        &lt;span class="n"&gt;xml&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;lastBuildDate&lt;/span&gt; &lt;span class="vi"&gt;@item&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:last&lt;/span&gt;&lt;span class="o"&gt;][&lt;/span&gt;&lt;span class="ss"&gt;:date&lt;/span&gt;&lt;span class="o"&gt;].&lt;/span&gt;&lt;span class="n"&gt;rfc822&lt;/span&gt;
        &lt;span class="n"&gt;xml&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ttl&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;40&amp;#39;&lt;/span&gt;
        &lt;span class="n"&gt;xml&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;link&lt;/span&gt; &lt;span class="vi"&gt;@site&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:base_url&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
        &lt;span class="n"&gt;xml&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;description&lt;/span&gt;
        &lt;span class="vi"&gt;@item&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:articles&lt;/span&gt;&lt;span class="o"&gt;].&lt;/span&gt;&lt;span class="n"&gt;each&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
          &lt;span class="n"&gt;xml&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
            &lt;span class="n"&gt;xml&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;title&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:title&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
            &lt;span class="n"&gt;xml&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;description&lt;/span&gt; &lt;span class="vi"&gt;@item&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:content_proc&lt;/span&gt;&lt;span class="o"&gt;].&lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="n"&gt;xml&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pubDate&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:date&lt;/span&gt;&lt;span class="o"&gt;].&lt;/span&gt;&lt;span class="n"&gt;rfc822&lt;/span&gt;
            &lt;span class="n"&gt;xml&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;guid&lt;/span&gt; &lt;span class="n"&gt;url_for&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="n"&gt;xml&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;link&lt;/span&gt; &lt;span class="n"&gt;url_for&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="n"&gt;xml&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;author&lt;/span&gt; &lt;span class="vi"&gt;@site&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:author_email&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
            &lt;span class="n"&gt;xml&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;comments&lt;/span&gt; &lt;span class="n"&gt;url_for&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;#comments&amp;#39;&lt;/span&gt;
            &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:tags&lt;/span&gt;&lt;span class="o"&gt;].&lt;/span&gt;&lt;span class="n"&gt;each&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
              &lt;span class="n"&gt;xml&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;category&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt;
            &lt;span class="k"&gt;end&lt;/span&gt;
          &lt;span class="k"&gt;end&lt;/span&gt;
        &lt;span class="k"&gt;end&lt;/span&gt;
      &lt;span class="k"&gt;end&lt;/span&gt;
      &lt;span class="n"&gt;buffer&lt;/span&gt;
    &lt;span class="k"&gt;end&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;Nothing too daunting, once you get used to Ruby&amp;#8217;s &lt;span class="caps"&gt;XML&lt;/span&gt; builder. I followed a similar approach for my &lt;a href="/archives"&gt;monthly archives&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;3rd-party services&lt;/h4&gt;
&lt;p&gt;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&amp;#8217;s a list of services and APIs I currently use:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://intensedebate.com/"&gt;IntenseDebate&lt;/a&gt;, for comments.&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://code.google.com/apis/ajaxsearch/web.html"&gt;Google &lt;span class="caps"&gt;AJAX&lt;/span&gt; Search &lt;span class="caps"&gt;API&lt;/span&gt;&lt;/a&gt; for internal site-wide search.&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://apiwiki.twitter.com/"&gt;Twitter &lt;span class="caps"&gt;JSON&lt;/span&gt; &lt;span class="caps"&gt;API&lt;/span&gt;&lt;/a&gt; to fetch tweets.&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://delicious.com/help/json"&gt;Delicious &lt;span class="caps"&gt;JSON&lt;/span&gt; &lt;span class="caps"&gt;API&lt;/span&gt;&lt;/a&gt; to fetch delicious bookmarks.&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://www.backtype.com/developers"&gt;BackType &lt;span class="caps"&gt;JSON&lt;/span&gt; &lt;span class="caps"&gt;API&lt;/span&gt;&lt;/a&gt; to fetch comments from other sites.&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://develop.github.com/"&gt;GitHub &lt;span class="caps"&gt;JSON&lt;/span&gt; &lt;span class="caps"&gt;API&lt;/span&gt;&lt;/a&gt; to fetch GitHub commits for most of my &lt;a href="/projects"&gt;projects&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you want to know how I integrated them, check out my &lt;a href="http://github.com/h3rald/h3rald/tree/master/content/js"&gt;/js folder&lt;/a&gt;, it was very simple, really.&lt;/p&gt;
&lt;h3&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;I was very happy of switching to nanoc. It didn&amp;#8217;t take me long, and I spent most of the time with non-nanoc issues (brushing up jQuery, &lt;span class="caps"&gt;CSS&lt;/span&gt;, graphics, etc.). Of course knowing the Ruby programming language helps, and if you&amp;#8217;re not comfortable with hacking your way a little bit, then maybe it&amp;#8217;s not for you.&lt;/p&gt;
&lt;p style="float:left;"&gt;&lt;img src="/img/pictures/nanoc-compile.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Personally, I&amp;#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&amp;#8217;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.&lt;/p&gt;
&lt;p&gt;nanoc&amp;#8217;s metadata is mindblowing for its simplicity and power: although you&amp;#8217;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&amp;#8217;t have to change your database tables, create new relationships or anything of the sort, you simply add metadata to pages.&lt;/p&gt;
&lt;p&gt;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:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;$ rake site:article name=take-back-your-site-with-nanoc
$ vim content/articles/take-back-your-site-with-nanoc
... write &amp;amp; close the file ...
$ Nanoc3 compile 
&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;&amp;#8230;Exactly what I need. Nothing more, nothing less.&lt;/p&gt;</description>
      <pubDate>Tue, 15 Sep 2009 11:32:51 -0000</pubDate>
      <guid>http://www.h3rald.com/articles/take-back-your-site-with-nanoc/</guid>
      <link>http://www.h3rald.com/articles/take-back-your-site-with-nanoc/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/take-back-your-site-with-nanoc/#comments</comments>
      <category>website</category>
      <category>ruby</category>
      <category>programming</category>
      <category>writing</category>
    </item>
    <item>
      <title>Rails-powered Open Source Killer Apps, Anyone?</title>
      <description>&lt;p&gt;Lately I&amp;#8217;ve been meandering around the web to find a good &lt;span class="caps"&gt;CMS&lt;/span&gt; for a family site I&amp;#8217;d like to set up. &lt;br /&gt;
Why a &lt;span class="caps"&gt;CMS&lt;/span&gt;? Well, for a few simple reasons:&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;I don&amp;#8217;t have enough free time to fiddle with Rails and make my own (I&amp;#8217;m an &lt;em&gt;Hobbyist Programmer&amp;#8482;&lt;/em&gt;: I code for fun and enlightment, not for money)&lt;/li&gt;
	&lt;li&gt;Even if I had the time, I&amp;#8217;m &lt;em&gt;sure&lt;/em&gt; there are plenty of CMSes out there which suits my needs.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;It turns out that reason #2 is not really applicable in this case, especially if we restrict the field to Ruby + Rails/Merb/&amp;lt;insert cool &lt;span class="caps"&gt;DRY&lt;/span&gt; framework here&amp;gt;.h3. Rails-powered CMSes&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Name a Rails-powered &lt;span class="caps"&gt;CMS&lt;/span&gt;, quick!&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Easy: &lt;a href="http://radiantcms.org/"&gt;Radiant&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Hmm, no. As much as I do like Radiant, it really cannot be considered a general-purpose &lt;span class="caps"&gt;CMS&lt;/span&gt;, can it? When it comes to build nearly-static sites in a clean and neat way I&amp;#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 &lt;span class="caps"&gt;URL&lt;/span&gt; conventions (/en/about, /it/about, etc.).&lt;/p&gt;
&lt;p&gt;I&amp;#8217;m not saying that there aren&amp;#8217;t enough CMSes built on Rails, just that there&amp;#8217;s no &amp;#8220;killer app&amp;#8221; in the pack. A &amp;#8220;killer&amp;#8221; &lt;span class="caps"&gt;CMS&lt;/span&gt; would be something as powerful as Drupal, but easier to use and more modular.&lt;/p&gt;
&lt;p&gt;Here&amp;#8217;s an incomplete list of the Rails CMSes I&amp;#8217;m currently aware of:&lt;/p&gt;
&lt;table&gt;
	&lt;tr&gt;
		&lt;th&gt;Name &lt;/th&gt;
		&lt;th&gt;First Impressions/Comments &lt;/th&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt; &lt;a href="http://radiantcms.org/"&gt;Radiant&lt;/a&gt; &lt;/td&gt;
		&lt;td&gt; Mature, suitable for administering static sites &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt; &lt;a href="http://www.typosphere.org/"&gt;Typo&lt;/a&gt; &lt;/td&gt;
		&lt;td&gt; Mature, one of the best blogging engines out there (my opinion is slightly biased though) &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt; &lt;a href="http://mephistoblog.com/"&gt;Mephisto&lt;/a&gt; &lt;/td&gt;
		&lt;td&gt; Mature, blogging engine &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt; &lt;a href="http://rubricks.org/index_en.html"&gt;Rubricks&lt;/a&gt; &lt;/td&gt;
		&lt;td&gt; Under development, basic features if compared to other non-Rails solutions &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt; &lt;a href="http://slateinfo.blogs.wvu.edu/"&gt;Slate&lt;/a&gt; &lt;/td&gt;
		&lt;td&gt; Missing a lot of features if compared to competitors &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt; &lt;a href="http://beast.caboo.se"&gt;Beast&lt;/a&gt; &lt;/td&gt;
		&lt;td&gt; Forum engine, extremely ligtweight &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt; &lt;a href="http://www.railfrog.com/"&gt;RailFrog&lt;/a&gt; &lt;/td&gt;
		&lt;td&gt; Not sure if it&amp;#8217;s still being updated, not so many features &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt; &lt;a href="http://zenadmin.org/en"&gt;Zena&lt;/a&gt; &lt;/td&gt;
		&lt;td&gt; Alpha, looks promising although it doesn&amp;#8217;t offer many features &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt; &lt;a href="http://simplelog.net/"&gt;simplelog&lt;/a&gt; &lt;/td&gt;
		&lt;td&gt; Yet another blogging engine. Simple and easy to use &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt; &lt;a href="http://rcms.oopen.de/"&gt;oooopen rcms&lt;/a&gt; &lt;/td&gt;
		&lt;td&gt; Early development stage (dead?), minimal feature set &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt; &lt;a href="http://www.geegocms.com/"&gt;Geego&lt;/a&gt; &lt;/td&gt;
		&lt;td&gt; Multilingual, not so many out-of-the-box features &lt;/td&gt;
&lt;/table&gt;
&lt;p&gt;&lt;em&gt;[Psst, if you know any other Rails &lt;span class="caps"&gt;CMS&lt;/span&gt; I missed out, mention it in a comment and I&amp;#8217;ll update this table!]&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;Developing Proprietary Web Applications with Rails&lt;/h3&gt;
&lt;p&gt;What&amp;#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.&lt;/p&gt;
&lt;p&gt;What&amp;#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&amp;#8217;t there a fully fledged &lt;span class="caps"&gt;CMS&lt;/span&gt; to rival Drupal? &lt;br /&gt;
I think that part of the problem is that Rails is &lt;em&gt;too&lt;/em&gt; good. &lt;strong&gt;Why build a &lt;span class="caps"&gt;CMS&lt;/span&gt; from scratch when you can develop a web site from scratch much more easily, tailored to your customer?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Rails has been used to build a few &amp;#8220;mainstream&amp;#8221; sites like Twitter (no bashing please!), Basecamp, GitHub and many more. What do these sites have in common? &lt;em&gt;They are not open source&lt;/em&gt;. You cannot deploy your own Twitter on your server (You can with &lt;a href="http://laconi.ca/trac/"&gt;Laconica&lt;/a&gt;, though), you cannot deploy your own Basecamp to your server (you can with &lt;a href="http://www.projectpier.org/"&gt;ProjectPier&lt;/a&gt;, an open source fork of &lt;a href="http://www.activecollab.com/"&gt;ActiveCollab&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;It feels like that even though Rails itself is open source, &lt;strong&gt;there aren&amp;#8217;t that many open source Rails-powered projects after all&lt;/strong&gt;. 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, &lt;span class="caps"&gt;PHP&lt;/span&gt; is still the &lt;em&gt;Open Source King of the Web&lt;/em&gt;, and that&amp;#8217;s very, very sad in my opinion.&lt;/p&gt;
&lt;h3&gt;Dreams on Rails&lt;/h3&gt;
&lt;p&gt;The annoying thing is that Rails &lt;em&gt;is suitable&lt;/em&gt; to build CMSes, and good ones, too! Take Radiant and Typo, for example: they both excel in their own ways, &lt;em&gt;in their own worlds&lt;/em&gt;.&lt;br /&gt;
Theorethically speaking, &lt;strong&gt;there&amp;#8217;s no reason why someone couldn&amp;#8217;t develop a modular system to glue different components together&lt;/strong&gt;: you&amp;#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.&lt;br /&gt;
Hell guys, the folks at Drupal developed a huge (and successful) product with a million different ways to extend it &lt;em&gt;in &lt;span class="caps"&gt;PHP&lt;/span&gt;&lt;/em&gt;. Even without using &lt;span class="caps"&gt;OOP&lt;/span&gt;! Every damn hook in the core is a &lt;em&gt;function&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Rails lacks successful open source projects, in particular CMSes&lt;/strong&gt;. I wish someone could fix this: not by coding the &lt;em&gt;n^th^&lt;/em&gt; &lt;span class="caps"&gt;CMS&lt;/span&gt; with the only two or three features you need, but by developing an &lt;em&gt;high level application framework&lt;/em&gt; to build complex, dynamic and interactive web sites. Don&amp;#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.&lt;/p&gt;
&lt;p&gt;The community will do the rest, hopefully&amp;#8230; Or maybe are you too busy trying to roll out your newest, closed source startup?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;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&lt;/strong&gt;, articles, and books. And I&amp;#8217;m not kidding.&lt;/p&gt;
&lt;h3&gt;[&lt;span class="caps"&gt;UPDATED&lt;/span&gt;] A Glimpse of Hope&lt;/h3&gt;
&lt;p&gt;A few of the commenters of this article brought up a few interesting points and actually gave me a little bit of hope. &lt;a href="http://salesforceonrails.com/"&gt;Luigi Montanez&lt;/a&gt; pointed out that Rails was built to help developers build web sites. For now, Rails deployment isn&amp;#8217;t as seamless as end users would like it, so there&amp;#8217;s no point creating a killer app for such users if they can&amp;#8217;t even get it to run on their $2/month shared hosting environment.&lt;br /&gt;
Nevertheless, there seems to be at least &lt;em&gt;three&lt;/em&gt; different open source &amp;#8220;social network engines&amp;#8221; powered by Rails:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://portal.insoshi.com/"&gt;Insoshi&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://www.communityengine.org/"&gt;Community Engine&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://lovdbyless.com/"&gt;Lovd By Less&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These are not CMSes &lt;em&gt;in the early 2000&amp;#8217;s sense&lt;/em&gt;, 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 &lt;span class="caps"&gt;PHP&lt;/span&gt;-based solutions.&lt;/p&gt;
&lt;p&gt;On the other hand, &lt;a href="http://priit.mx.ee/"&gt;Priit Tamboom&lt;/a&gt; mentioned &lt;a href="http://adva-cms.org/"&gt;adva cms&lt;/a&gt;, a project still in alpha stage which aims to be more traditional and site-agnostic:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;#8220;[&amp;#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. [&amp;#8230;]&amp;#8221;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This sounds &lt;em&gt;exactly&lt;/em&gt; like what I was hoping would come out from the Rails community: something in between a web development framework and an high-level &lt;span class="caps"&gt;CMS&lt;/span&gt;. &lt;br /&gt;
I&amp;#8217;m definitely going to try it out (it&amp;#8217;s an ideal weekend project) and I&amp;#8217;ll report back once I know more about it.&lt;/p&gt;</description>
      <pubDate>Sun, 02 Nov 2008 09:41:00 -0000</pubDate>
      <guid>http://www.h3rald.com/articles/rails-os-killer-apps/</guid>
      <link>http://www.h3rald.com/articles/rails-os-killer-apps/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/rails-os-killer-apps/#comments</comments>
      <category>rails</category>
      <category>ruby</category>
      <category>writing</category>
      <category>rant</category>
    </item>
    <item>
      <title>Rails-Doc.org - A First Look</title>
      <description>&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;I actually never bought a book to learn &lt;span class="caps"&gt;PHP&lt;/span&gt;, in the past though. Why&amp;#8217;s that? Well, for two simple reasons:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;The &lt;a href="http://www.php.net/manual/en/"&gt;&lt;span class="caps"&gt;PHP&lt;/span&gt; manual&lt;/a&gt; can easily be searched and provides enough documentation, in most cases.&lt;/li&gt;
	&lt;li&gt;When the documentation is not enough, there&amp;#8217;s always plenty of comments by experienced developers to save your day.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That being said, &lt;span class="caps"&gt;PHP&lt;/span&gt; is still an awfully disorganized language, but believe it or not, coming from &lt;span class="caps"&gt;PHP&lt;/span&gt; I didn&amp;#8217;t find &lt;a href="http://api.rubyonrails.org/"&gt;Rails documentation&lt;/a&gt; useful enough simply because it didn&amp;#8217;t have these two simple but very powerful features.&lt;/p&gt;
&lt;p&gt;Sure, there&amp;#8217;s the &lt;a href="http://www.railsdocumentation.org/"&gt;Rails Documentation Project&lt;/a&gt; which provides more organized docs, and &lt;a href="http://www.noobkit.com/"&gt;Noobkit&lt;/a&gt; does a nice job with its search-as-you-type feature&amp;#8230; but still is not quite enough: you&amp;#8217;d expect something much better than that for something like Rails!h3. Introducing Rails-Doc.org&lt;/p&gt;
&lt;p style="float:right;"&gt;&lt;img src="/files/railsdoc_logo_sm.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.rails-doc.org"&gt;Rails-Doc.org&lt;/a&gt; focuses on providing a better interface to Rails documentation by offering two key features:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;A powerful, fast and useful document search&lt;/li&gt;
	&lt;li&gt;The possibility to add notes to Rails documentation&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;When the app went live, I immediately registered (it&amp;#8217;s free of course) and started playing with it&amp;#8230;&lt;/p&gt;
&lt;h4&gt;Search as you type&amp;#8230;&lt;/h4&gt;
&lt;p&gt;The first thing I did was trying the search features, of course. I started typing &amp;#8220;rout&amp;#8221; for Routing, and I was immediately shown a list of matches:&lt;/p&gt;
&lt;p&gt;&lt;img src="/files/rails-doc_search.gif" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;It took a small fraction of a second to load the matches, which makes me think that definitely they have all the names indexed somewhere. Nevertheless, it was a pleasant surprise: normally, these search-as-you-type utilities are not that refined!&lt;/p&gt;
&lt;p&gt;All you need to do is start typing at least three letters, and you get results, if any. &lt;br /&gt;
if you press &lt;span class="caps"&gt;ENTER&lt;/span&gt;, you get automatically redirected to the first result. This can be good, but maybe it would have been nicer to load a &amp;#8220;traditional&amp;#8221; list of results, but it depends on your taste, really.&lt;/p&gt;
&lt;h4&gt;&amp;#8230;or browse through the namespaces&lt;/h4&gt;
&lt;p&gt;Alternatively, it is possible to browse the docs in the more traditional way, i.e. according to their class or module: the &lt;strong&gt;Browse&lt;/strong&gt; page does just that: it lists &lt;em&gt;all&lt;/em&gt; Rails classes and modules, regardless of the nesting. But there&amp;#8217;s more: a little roundy icon precedes each class name, to indicate whether the documentation is present, and to what degree:&lt;/p&gt;
&lt;p&gt;&lt;img src="/files/rails-doc_icons.gif" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;This is an interesting concept: in this way, in theory, people should contribute to the documentation where it&amp;#8217;s more needed.&lt;/p&gt;
&lt;p&gt;Each reference page is very neatly re-formatted: you can hardly imagine it&amp;#8217;s actually the same content included in Rails&amp;#8217; RDoc pages!&lt;/p&gt;
&lt;p&gt;&lt;img src="/files/rails-doc_document.gif" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Finally, another nice addition is the &lt;strong&gt;Related&lt;/strong&gt; column, which lists links to other items which are related to the current topic:&lt;/p&gt;
&lt;p&gt;&lt;img src="/files/rails-doc-related.gif" alt="" /&gt;&lt;/p&gt;
&lt;h3&gt;Contribute, contribute, contribute!&lt;/h3&gt;
&lt;p&gt;You have to register for something, don&amp;#8217;t you? Yes. If you register, you can post notes to any document. Simple enough, all you have to do is to click the &lt;strong&gt;Add Note&lt;/strong&gt; button and a form will slide down for you to fill in:&lt;/p&gt;
&lt;p&gt;&lt;img src="/files/rails-doc_note1.gif" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;As you start typing, you&amp;#8217;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:&lt;/p&gt;
&lt;p&gt;&lt;img src="/files/rails-doc_note2.gif" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;What if there&amp;#8217;s no documentation for a particular class or method? You&amp;#8217;ll get a warning like this one:&lt;/p&gt;
&lt;p&gt;&lt;img src="/files/rails-doc_nodoc.gif" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;The idea behind this is that, if you provide some useful insights, they&amp;#8217;ll eventually end up in Rails core documentation.&lt;/p&gt;
&lt;h3&gt;An Short Interview with Mikael Roos, from Nodeta&lt;/h3&gt;
&lt;p&gt;Before the application went live, I was lucky enough to get Mikael Roos to answer to some of my questions. Here&amp;#8217;s the full interview&amp;#8230;&lt;/p&gt;
&lt;h4&gt;What are you actually trying to do on Rails-Doc.org?&lt;/h4&gt;
&lt;p&gt;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&lt;br /&gt;
quality and amount of documentation. This we have already accomplished, and all remaining issues are related to browser compatibility. Another initial goal is to present a smooth interface for creating inline notes to&lt;br /&gt;
the documentation so that Rails developers can post notes about certain methods etc. for themselves and others to draw knowledge from.&lt;/p&gt;
&lt;p&gt;Our longer-term goal (N.B. we are an agile project, so long-term means, say, three months) is to provide a way for the active members of the Rails community to improve the existing documentation based on the posted notes&lt;br /&gt;
to create an extended documentation that could optimally even be made in to a patch and would find its way back into the actual Rails source.&lt;/p&gt;
&lt;p&gt;Another clear and obvious goal is to keep improving the service steadily as we progress toward the goals that I mentioned above.&lt;/p&gt;
&lt;h4&gt;Could you spend a few words on the &amp;#8220;development process&amp;#8221; followed by your company to develop this app? Did I read the word &amp;#8220;Scrum&amp;#8221; somewhere? Am I correct?&lt;/h4&gt;
&lt;p&gt;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.&lt;br /&gt;
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&amp;#8217;s me!).&lt;/p&gt;
&lt;h4&gt;Did you develop it in three months, or&amp;#8230;?&lt;/h4&gt;
&lt;p&gt;The first release was developed in three &lt;span class="caps"&gt;SPRINTS&lt;/span&gt;, not months &amp;#8211; so what I&amp;#8217;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&lt;br /&gt;
development and then stabilization, were two weeks each). However, it is a &lt;span class="caps"&gt;FIRST&lt;/span&gt; &lt;span class="caps"&gt;RELEASE&lt;/span&gt;, which means the app is by all means not complete, but since we make software in a very agile way, it&amp;#8217;a all about &amp;#8220;Ship, ship, ship!&amp;#8221;.&lt;/p&gt;
&lt;h4&gt;What is &lt;a href="http://www.nodeta.fi"&gt;Nodeta&lt;/a&gt;, exactly? My Finnish is a bit rusty nowadays&amp;#8230;&lt;/h4&gt;
&lt;p&gt;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.&lt;br /&gt;
There are currently 10 Nodetans.&lt;/p&gt;
&lt;p&gt;Rails-Doc.org is a pilot project for your new shiny app, ApiDock. Is it an open source app?&lt;/p&gt;
&lt;p&gt;Unfortunately, I cannot go into details about APIdoc yet. What I can tell is that it is developed with Rails and that it won&amp;#8217;t be open source, but rather it would optimally be offered as a service, which after all is what&lt;br /&gt;
the word &amp;#8220;app&amp;#8221; on the web means these days. Open source projects could however use it for free, sort of in the spirit of GitHub.&lt;/p&gt;
&lt;p&gt;It will also most likely be separately targeted to larger companies.&lt;/p&gt;
&lt;h4&gt;Can you give me more technical details about the way keyword search is performed? Are you indexing/tagging documentation beforehand?&lt;/h4&gt;
&lt;p&gt;There will probably be a blog post on the &lt;a href="http://blog.nodeta.fi"&gt;Nodeta blog&lt;/a&gt; about the search and how it works after the first release comes out.&lt;/p&gt;
&lt;h4&gt;What about the social side of it: you&amp;#8217;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?&lt;/h4&gt;
&lt;p&gt;The quality of notes is judged in a social way. Notes can be thanked by other users and notes that get many thanks are showed in a more prominent way. Registration will be required in order to post notes and the registration will feature a captcha.&lt;/p&gt;
&lt;h4&gt;Will contributors be credited somehow? Who can contribute and at what level?&lt;/h4&gt;
&lt;p&gt;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&lt;br /&gt;
release.)&lt;/p&gt;
&lt;h4&gt;You want to blow out competition and that you don&amp;#8217;t want to fail: sounds a good plan! How is Rails-Docs different from other similar apps?&lt;/h4&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;h4&gt;Do you have DHH&amp;#8217;s seal of approval? Will you? Is there any copyright issue with your domain name?&lt;/h4&gt;
&lt;p&gt;Time will tell what &lt;span class="caps"&gt;DHH&lt;/span&gt; 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.&lt;/p&gt;
&lt;h4&gt;What about doing something similar for the whole Ruby language? Ruby docs may also be easier, in a way&amp;#8230;&lt;/h4&gt;
&lt;p&gt;It is possible that we might do just that but right now it&amp;#8217;s all about Rails.&lt;/p&gt;
&lt;h3&gt;The Bottom Line&lt;/h3&gt;
&lt;p&gt;Rails-Doc.org is definitely an interesting project, which has all the potential to become a powerful, Rails-powered service. Sure, it&amp;#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&amp;#8217;t they?&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;I&amp;#8217;ll be watching this project closely and I&amp;#8217;ll pay particular attention on what happens to the community&amp;#8217;s contributions: will it really be useful? Will it really help creating documentation patches to Rails core? Only time will tell, of course.&lt;/p&gt;</description>
      <pubDate>Thu, 19 Jun 2008 05:30:00 -0000</pubDate>
      <guid>http://www.h3rald.com/articles/rails-doc-first-look/</guid>
      <link>http://www.h3rald.com/articles/rails-doc-first-look/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/rails-doc-first-look/#comments</comments>
      <category>rails</category>
      <category>ruby</category>
      <category>writing</category>
      <category>review</category>
    </item>
    <item>
      <title>Firefox 3 Revealed</title>
      <description>&lt;p&gt;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. &lt;br /&gt;
After diving deeper into Firefox 3 development, reading dozens of different blogs and scouting Mozilla&amp;#8217;s web sites, I realized I was wrong: Firefox 3 introduced &lt;em&gt;a lot&lt;/em&gt; of new things, and keeping track of all of them, I admit, was quite a hard task.&lt;/p&gt;
&lt;p&gt;Nevertheless, I wrote the article and delivered it to SitePoint in time fore the release, but my editor &amp;#8220;complained&amp;#8221; that 8,300+ words was about 3 times over the minimum requirements for a feature article! &lt;br /&gt;
&lt;em&gt;&amp;#8220;I don&amp;#8217;t really think that people can read the whole thing online&amp;#8221;&lt;/em&gt; &amp;mdash;, he said, and I somehow agreed.&lt;/p&gt;
&lt;p&gt;In the end, they decided to pack my &amp;#8220;article&amp;#8221; into a 30-pages &lt;span class="caps"&gt;PDF&lt;/span&gt; eBook which can be downloaded &lt;em&gt;absolutely free of charge&lt;/em&gt; from SitePoint web site as well, so here it is:&lt;/p&gt;
&lt;p style="float:left;"&gt;&lt;img src="/files/ff3-revealed.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;br /&gt;
&lt;span style="font-size: 1.5em;"&gt; &lt;strong&gt;&lt;a href="http://firefox.s3.sitepoint.com/ff3-revealed.zip"&gt;Firefox 3 Revealed&lt;/a&gt;&lt;/strong&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;If you prefer though, you can still read the article directly on SitePoint, &lt;a href="http://www.sitepoint.com/article/firefox-3-whats-new-whats-hot"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This guide aims to give you a comprehensive overview of virtually &lt;em&gt;all&lt;/em&gt; the new features and improvements introduced by Firefox 3.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;I would like to thank the whole SitePoint staff for giving me the opportunity to write this eBook, and in particular &lt;strong&gt;&lt;a href="http://magain.com/blog/"&gt;Matthew Magain&lt;/a&gt;&lt;/strong&gt; for his help and support (and for creating the &lt;span class="caps"&gt;PDF&lt;/span&gt; on a Sunday evening!).&lt;br /&gt;
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.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; Feel free to &lt;strong&gt;&lt;a href="http://digg.com/software/FireFox_3_Revealed_Free_ebook_from_SitePoint"&gt;digg&lt;/a&gt;&lt;/strong&gt; this eBook!&lt;/p&gt;</description>
      <pubDate>Tue, 17 Jun 2008 02:46:00 -0000</pubDate>
      <guid>http://www.h3rald.com/articles/firefox3-revealed/</guid>
      <link>http://www.h3rald.com/articles/firefox3-revealed/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/firefox3-revealed/#comments</comments>
      <category>firefox</category>
      <category>browsers</category>
      <category>writing</category>
      <category>review</category>
      <category>books</category>
    </item>
    <item>
      <title>10 reasons why I didn't update my blog</title>
      <description>&lt;p&gt;&lt;em&gt;&amp;#8220;It has been a while since my last post, sorry about that&amp;#8221;&lt;/em&gt;&lt;br /&gt;
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&amp;#8217;t write a meaningful post on my blog for a long time and no, probably this is not going to change that either.&lt;/p&gt;
&lt;p&gt;Yesterday I started thinking &lt;strong&gt;why&lt;/strong&gt; this happens, not only to me but to a lot of other non-professional bloggers. A professional blogger &amp;emdash; for what I can tell &amp;emdash; is someone like Michael Arrington or Gina Trapani: someone who has the luck (or course) to be able to just blog for a living.&lt;/p&gt;
&lt;p&gt;I don&amp;#8217;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 &amp;#8220;proper&amp;#8221; money from my site. There&amp;#8217;s nothing wrong with it: I believe there are some other people in my condition, and that&amp;#8217;s quite normal.&lt;/p&gt;
&lt;p&gt;That being said, let&amp;#8217;s examine the ten most common reasons why I (and you too, maybe) end up not updating my blog, &lt;em&gt;even when I have time to do so&lt;/em&gt;.h3. Someone already blogged about it&lt;/p&gt;
&lt;p&gt;This is very irritating. I am obsessed with original content. I want to write about something other people &lt;em&gt;never&lt;/em&gt; (or hardly ever) wrote about. As a consequence, I often find myself googling the same topic I&amp;#8217;m planning my blog post on, and I &lt;em&gt;obviously&lt;/em&gt; often get quite a few results, too!&lt;/p&gt;
&lt;p&gt;I actually wanted to title this very post &amp;#8220;The Blogger&amp;#8217;s Block&amp;#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. &lt;br /&gt;
It also happened a few weeks ago: I wanted to write about the current state of tech news sites and Antonio Cangiano comes up with a similar &lt;a href="http://antoniocangiano.com/2008/05/29/random-thoughts-on-social-sites/"&gt;post&lt;/a&gt;. Very interesting indeed, but quite annoying as well!&lt;/p&gt;
&lt;p&gt;OK scrap that, think about something else&amp;#8230;&lt;/p&gt;
&lt;p&gt;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&amp;#8217;s what I did to write this post).&lt;/p&gt;
&lt;h3&gt;I didn&amp;#8217;t research enough on the subject&lt;/h3&gt;
&lt;p&gt;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. &lt;br /&gt;
I wanted to write a review of the new Treo 750 I bought. I&amp;#8217;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!&lt;br /&gt;
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&amp;#8217;t it?&lt;/p&gt;
&lt;p&gt;The solution to this would be trying to limit the scope of your post: screw Apple, let&amp;#8217;s just focus on my Treo 750 and on the amazing amount of programming languages I can use on it!&lt;/p&gt;
&lt;h3&gt;After researching for X days, I realized it was all a waste of time&lt;/h3&gt;
&lt;p&gt;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&amp;#8217;t it? I started researching about all the most esoteric lightweight web servers, about JRuby, Glassfish, IronRuby, &amp;#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.&lt;/p&gt;
&lt;p&gt;Very frustrating. I abandoned the whole thing, because there was simply no reason to go on researching: it was all a waste of time.&lt;/p&gt;
&lt;p&gt;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&amp;#8217;s plenty of articles about the same subject, at least you have a concrete purpose to write yours.&lt;/p&gt;
&lt;p&gt;Erhm, yes, by the way, keep an eye on &lt;a href="http://www.sitepoint.com"&gt;SitePoint&lt;/a&gt; in the next few days/weeks, OK?&lt;/p&gt;
&lt;h3&gt;I only write when I&amp;#8217;m inspired, and now I&amp;#8217;m not&lt;/h3&gt;
&lt;p&gt;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&amp;#8217;t have access to a computer or the Internet. &lt;br /&gt;
Of course I don&amp;#8217;t forget about it, but by the time I have a chance to actually write it, I really don&amp;#8217;t fancy doing so. Oh, the irony! &lt;br /&gt;
It happened today, actually, during my lunch break: I was supposed to write this post but I didn&amp;#8217;t feel like it. I lost my inspiration and all my artistic verve, so no, it can&amp;#8217;t be done. Tough luck, wait until next time.&lt;/p&gt;
&lt;p&gt;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.&lt;br /&gt;
I also saved it to my &lt;span class="caps"&gt;PDA&lt;/span&gt; and continued writing it when I had a chance. Eventually, I managed to finish it during my lunch break, the next day.&lt;/p&gt;
&lt;p&gt;Try to write &lt;em&gt;whenever you are inspired&lt;/em&gt;. 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.&lt;/p&gt;
&lt;h3&gt;This won&amp;#8217;t make Digg&amp;#8217;s front page&lt;/h3&gt;
&lt;p&gt;Digg, Reddit, DZone, you name it. They are all excellent free tools for promoting your content. Don&amp;#8217;t tell me you never wrote a post &lt;em&gt;for the sake of making the front page&lt;/em&gt; of one of those sites. I did, I confess.&lt;br /&gt;
I didn&amp;#8217;t make Digg&amp;#8217;s front page in a while, and I&amp;#8217;m probably never going to make it again. The reason? When it comes to promoting the right content in a fair way Digg &lt;strong&gt;sucks&lt;/strong&gt;. As a consequence, 80% of the articles which appear on Digg &lt;strong&gt;suck&lt;/strong&gt;. I&amp;#8217;m sure you&amp;#8217;ll be able to forgive my French when I say that &lt;strong&gt;Digg utterly sucks&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;No matter how clever your story may be, unless you&amp;#8217;re backed up by a swarm or an active community willing to Digg your story, you simply aren&amp;#8217;t going to make it. When is the last time a proper programming article made it to Digg? I don&amp;#8217;t remember, probably way before I unsubscribed to the Digg&amp;#8217;s Technology feed, about a year or so ago.&lt;/p&gt;
&lt;p&gt;Just write for the sake of writing. Don&amp;#8217;t even submit your story to Digg (unless you&amp;#8217;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&amp;#8217;t get as much traffic, granted, but you also won&amp;#8217;t get tons of idiots writing pointless crap on your site and you won&amp;#8217;t risk a server crash. If it&amp;#8217;s destiny, then some good soul will post it to Digg, but nobody will digg it. That&amp;#8217;s just life, I&amp;#8217;m afraid.&lt;/p&gt;
&lt;h3&gt;It has been too long since my last post: the next one will have to make up for it&lt;/h3&gt;
&lt;p&gt;This happens when you start feeling guilty because you didn&amp;#8217;t post in a long time.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;#8220;My next post is going to be superb, long, interesting and everyone will start flocking back to my blog!&amp;#8221;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Wrong. First of all because statistically people just don&amp;#8217;t &amp;#8220;flock back&amp;#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&amp;#8217;re waiting for that special &lt;em&gt;next post&lt;/em&gt; which will be &lt;em&gt;so much better&lt;/em&gt; and will bring your blob back to &lt;del&gt;spam&lt;/del&gt; life.&lt;/p&gt;
&lt;p&gt;It happened, it happened&amp;#8230; again, all you have to do is just post all the tidbits you need, while you&amp;#8217;re preparing your big shot: your blog will remain &amp;#8220;fresh&amp;#8221; and more people will enjoy your interesting posts, whenever they&amp;#8217;ll come.&lt;/p&gt;
&lt;h3&gt;Nobody gives a damn, anyway&lt;/h3&gt;
&lt;p&gt;I didn&amp;#8217;t want to upset my younger audience by using a nasty f-word in the title, but that&amp;#8217;s exactly how it feels like it, sometimes.&lt;br /&gt;
I went to Rome last week, did you know? I twittered about it, you &lt;strong&gt;ought&lt;/strong&gt; to know! And of course you&amp;#8217;ll all be waiting for the usual 10-page-long article on my awesome vacation. Like when I &lt;a href="http://www.h3rald.com/articles/incomplete-guide-to-london"&gt;went to London&lt;/a&gt;, remember?&lt;br /&gt;
No, sadly not everyone may be interested in this crap. So I probably won&amp;#8217;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&amp;#8217;s normal.&lt;br /&gt;
Especially for a blog like mine, which is deliberately open to all my interests: programming, technology, travelling, etc. That&amp;#8217;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&amp;#8217;re not carefula and if you&amp;#8217;re not 100% devoted to your blog&amp;#8217;s theme. &lt;br /&gt;
A themed blog will build up a faithful audience, like when I was writing almost exclusively about CakePHP: a lot of &lt;span class="caps"&gt;PHP&lt;/span&gt; programmers where flocking here daily. Then things &lt;a href="http://www.h3rald.com/blog/42"&gt;went wrong&lt;/a&gt; and I really couldn&amp;#8217;t be bothered to write about the same crap. Which leads us to the next topic&amp;#8230;&lt;/p&gt;
&lt;h3&gt;If I write about this, a large chunk of my audience is going to be upset&lt;/h3&gt;
&lt;p&gt;This applies especially to themed blogs: if you&amp;#8217;re a well-known Firefox addict, you can&amp;#8217;t suddenly start writing about &lt;a href="http://www.h3rald.com/articles/firefox-lovers-guide-to-opera"&gt;Opera&lt;/a&gt;, praising its speed and the features it offers out-of-the box!&lt;br /&gt;
If you take a side, you&amp;#8217;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 &amp;#8220;changed side&amp;#8221;: from CakePHP and &lt;span class="caps"&gt;PHP&lt;/span&gt; to Rails and Ruby, from Firefox to Opera (well, wait until my next SitePoint article comes out, at least&amp;#8230;). Probably they are not the same people who read this blog a year or so ago.&lt;/p&gt;
&lt;p&gt;In the end, it&amp;#8217;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. &lt;br /&gt;
And if you don&amp;#8217;t feel 100% sure you want a themed blog, you definitely shouldn&amp;#8217;t go for a themed domain name, or you may end up abandoning it afterwards. And when that happens, unless you&amp;#8217;re writing damn cool posts like &lt;a href="http://redhanded.hobix.com/"&gt;Why&lt;/a&gt;, it&amp;#8217;s going to hurt your audience. On the other hand, if you&amp;#8217;re sure you&amp;#8217;ll get ten times more visitors, go for it.&lt;br /&gt;
No, h3rald.com stays&amp;#8230; I may end up raving about Safari at some point within the next ten years though, don&amp;#8217;t be upset!&lt;/p&gt;
&lt;h3&gt;I&amp;#8217;m not an expert on the subject, so I shouldn&amp;#8217;t blog about it&lt;/h3&gt;
&lt;p&gt;This is a common problem I have when I try to write about something I don&amp;#8217;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!&lt;br /&gt;
I thought about writing a longish post on learning Ruby from scratch, but then I realized it wouldn&amp;#8217;t have been a great idea: I was just starting to learn a new language, I didn&amp;#8217;t know all the nitty-gritty and writing about it to teach others was going to be a bit presumptuous, maybe!&lt;br /&gt;
Instead, I opted for a lighted &lt;a href="http://www.h3rald.com/articles/10-reasons-to-learn-ruby"&gt;10 reasons to learn Ruby&lt;/a&gt; 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.&lt;br /&gt;
You don&amp;#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&amp;#8217;t know.&lt;/p&gt;
&lt;h3&gt;There are a lot of professional bloggers out there, and I&amp;#8217;m not one of them&lt;/h3&gt;
&lt;p&gt;Finally, this can be summarized in two words: inferiority complex. &amp;#8220;Proper&amp;#8221; blogs fire out 10+ posts &lt;em&gt;per day&lt;/em&gt;, and I don&amp;#8217;t even write ten points in &lt;em&gt;a month&lt;/em&gt;! 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! &lt;br /&gt;
Think of TechCrunch or LifeHacker, for example: they have a small legion of talented writers working for them &amp;emdash; even if Michael Harrington does rant about Twitter about three times a week himself, though.&lt;br /&gt;
At the end of the day, what matters is the &lt;em&gt;quality&lt;/em&gt; of your posts. Not the length minf, the Quality. I personally think that non-professionals (I said &amp;#8220;non-professionals&amp;#8221;, not &amp;#8220;amateurs&amp;#8221;!) are &lt;em&gt;allowed&lt;/em&gt; to write about once a week, if they can provide good content, that is.&lt;/p&gt;
&lt;p&gt;But you still do have to write &lt;em&gt;at least&lt;/em&gt; once a week (OK, let&amp;#8217;s make it ten days), otherwise either you&amp;#8217;re justified (you genuinely don&amp;#8217;t have time) or you may be a victim of one of these common fears. Watch out, and happy blogging!&lt;/p&gt;</description>
      <pubDate>Thu, 12 Jun 2008 01:30:00 -0000</pubDate>
      <guid>http://www.h3rald.com/articles/10-reasons-why-i-didnt-update-my-blog/</guid>
      <link>http://www.h3rald.com/articles/10-reasons-why-i-didnt-update-my-blog/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/10-reasons-why-i-didnt-update-my-blog/#comments</comments>
      <category>internet</category>
      <category>rant</category>
      <category>personal</category>
      <category>writing</category>
    </item>
    <item>
      <title>Too many cooks... take #2</title>
      <description>&lt;p&gt;Today I was not going to post on my blog. I have the flu, I don&amp;#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.&lt;/p&gt;
&lt;p&gt;Two posts immediately grab my attention:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://cakebaker.42dh.com/2007/08/27/i-dont-trust-cakephp-or-what-should-you-say-in-public/"&gt;I don&#8217;t trust CakePHP or what should you say in public?&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;and&lt;/p&gt;
&lt;p&gt;&lt;a href="http://cakebaker.42dh.com/2007/08/28/bye-bye-cakephp-team/"&gt;Bye, bye, CakePHP team&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;They&amp;#8217;re both from Daniel&amp;#8217;s cakebaker blog, the one I used to read when I was really into Cake.&lt;/p&gt;
&lt;p&gt;To cut a long story short, apparently Daniel said something wrong and he got &amp;#8220;what he deserves&amp;#8221; for speaking out. Naughty boy!&lt;/p&gt;
&lt;p&gt;That&amp;#8217;s because it might have put  &amp;#8220;CakePHP and the team in a bad light&amp;#8221;. Well, I don&amp;#8217;t know about that, but definitely now it IS in a bad light!&lt;/p&gt;
&lt;p&gt;I even found a bunch of comment which link this incident to what happened to me a few months ago:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;#8220;I said it when Fabio/H3rald left, and I&#8217;ll say it again&#8212;I think the biggest weakness of Cake is that the core dev team is quick to cut people out who don&#8217;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&#8217;re neccessarily alienating you, dho. I truly hope you stick around. You do seem to be taking it well.)&amp;#8221;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;sup&gt;^&lt;/sup&gt; Whoever you are, you&amp;#8217;re 100% right.&lt;/p&gt;
&lt;p&gt;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&amp;#8217;m sorry the CakePHP community has to get the butt-end of it as always, I&amp;#8217;m certainly happy for Daniel who, like me, will now have a chance to look around and experiment with new things. That&amp;#8217;s right man, Rails or Django are the way to go.&lt;/p&gt;</description>
      <pubDate>Sun, 02 Sep 2007 04:41:00 -0000</pubDate>
      <guid>http://www.h3rald.com/articles/too-many-cooks-take-2/</guid>
      <link>http://www.h3rald.com/articles/too-many-cooks-take-2/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/too-many-cooks-take-2/#comments</comments>
      <category>cakephp</category>
      <category>writing</category>
      <category>rant</category>
    </item>
    <item>
      <title>Back from holiday</title>
      <description>&lt;p&gt;I&amp;#8217;m back. I was so eager to go on holiday that I didn&amp;#8217;t even bother writing a post about it, too bad. I actually when on holiday for a week but I thought I&amp;#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&amp;#8217;t actually manage to relax that much.&lt;/p&gt;
&lt;p&gt;Now everything is fine. I still have to send in my laptop for assistance but it&amp;#8217;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&amp;#8217;t publish the specs, but it&amp;#8217;s alright for me and my fianc&amp;eacute;e.&lt;/p&gt;
&lt;p&gt;So what now? Well&amp;#8230; the usual: more posts will soon be added to the &lt;a href="/tags/simplyonrails"&gt;Simply On Rails&lt;/a&gt; series, a Ruby-related article is on the way (it will be edited by the excellent &lt;a href="http://www.cyberarmy.net"&gt;CyberArmy&lt;/a&gt; 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&amp;#8217;ll eventually complete another pet project of mine, but that will take more time&amp;#8230;&lt;/p&gt;
&lt;p&gt;Stay tuned.&lt;/p&gt;</description>
      <pubDate>Thu, 30 Aug 2007 02:59:00 -0000</pubDate>
      <guid>http://www.h3rald.com/articles/back-from-holiday/</guid>
      <link>http://www.h3rald.com/articles/back-from-holiday/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/back-from-holiday/#comments</comments>
      <category>personal</category>
      <category>website</category>
      <category>writing</category>
    </item>
    <item>
      <title>Time for a diet...</title>
      <description>&lt;p&gt;My fianc&amp;eacute;e keeps telling me that too many cakes are not good for me, and I never listen: I always liked cakes! I &lt;strong&gt;did&lt;/strong&gt; like the CakePHP&amp;#8482;&lt;sup class="footnote" id="fnr1"&gt;&lt;a href="#fn1"&gt;1&lt;/a&gt;&lt;/sup&gt; framework too, once, and I &lt;strong&gt;did&lt;/strong&gt; write &lt;a href="http://www.h3rald.com/projects/view/cakephp-herald"&gt;some articles&lt;/a&gt; about it in the past, and I believe at least a bunch of Bakers found them useful, especially at the time.&lt;br /&gt;
I do believe the Cake&amp;#8482; Software Foundation&lt;sup class="footnote" id="fnr1"&gt;&lt;a href="#fn1"&gt;1&lt;/a&gt;&lt;/sup&gt; quite liked having their framework featured on popular websites like php|architect and SitePoint, and I believe that I contributed &amp;#8211; to some extent &amp;#8211; to make it one of the most popular frameworks available for the &lt;span class="caps"&gt;PHP&lt;/span&gt; programming language.&lt;/p&gt;
&lt;p&gt;Unfortunately though someone decided that two of such articles and my personal website were no longer worth a mention on CakePHP official website frontpage. To me, this makes sense since the two CakePHP-related series which are being published by &lt;span class="caps"&gt;IBM&lt;/span&gt; are much more up-to-date than my articles, and thus deserve such a mention instead.&lt;/p&gt;
&lt;p&gt;Oddly enough, I took a screenshot of the CakePHP website just yesterday &lt;em&gt;&amp;#8220;by chance&amp;#8221;&lt;/em&gt; and my articles were still there:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.h3rald.com/img/pictures/cake-promo/cakephp-08032007.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;#8230;while this morning they weren&amp;#8217;t anymore:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.h3rald.com/img/pictures/cake-promo/cakephp-09032007.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Of course I can&amp;#8217;t provide any proof that I took the screenshot yesterday, and of course I don&amp;#8217;t have any proof of the fact that someone in &lt;span class="caps"&gt;CSF&lt;/span&gt; may have thought that due to my recent &lt;a href="http://www.h3rald.com/blog/view/42/"&gt;bad behavior&lt;/a&gt; my articles didn&amp;#8217;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&amp;#8217;s accident reminded them that there were far better articles which needed to be featured on their site. At least I &lt;em&gt;finally&lt;/em&gt; did something good for the community!&lt;/p&gt;
&lt;p&gt;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 &amp;#8211; for the sake of the framework &amp;#8211; should have never been made public, perhaps.&lt;br /&gt;
I want all of you to know that I still think that CakePHP is the best &lt;span class="caps"&gt;PHP&lt;/span&gt; framework ever made and I genuinely think that Larry E. Master did outstanding work in all this time, along with the rest of &lt;span class="caps"&gt;CSF&lt;/span&gt; members and contributors. Best of luck for your future editorial and development projects.&lt;/p&gt;
&lt;p&gt;Since now my contributions are no longer &amp;#8220;officially recognized&amp;#8221;, I think I&amp;#8217;d better to move on devoting my attention to something else.&lt;/p&gt;
&lt;p class="footnote" id="fn1"&gt;&lt;a href="#fnr1"&gt;&lt;sup&gt;1&lt;/sup&gt;&lt;/a&gt; &amp;#8220;CakePHP&amp;#8221; and &amp;#8220;Cake&amp;#8221; &lt;em&gt;seems&lt;/em&gt; to be registered trademarks of the Cake Software Foundation Inc. I&amp;#8217;m not sure if I&amp;#8217;m allowed to use them in this blog &amp;#8212; If anyone has any problem with it, please let me know.&lt;/p&gt;</description>
      <pubDate>Fri, 09 Mar 2007 10:59:00 -0000</pubDate>
      <guid>http://www.h3rald.com/articles/43/</guid>
      <link>http://www.h3rald.com/articles/43/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/43/#comments</comments>
      <category>cakephp</category>
      <category>rant</category>
      <category>writing</category>
    </item>
    <item>
      <title>Too many cooks spoil the Cake book</title>
      <description>&lt;p&gt;I am sorry to announce that my upcoming book, CakePHP Recipes, will not be published anymore. As a matter of fact, it wasn&amp;#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.&lt;/p&gt;
&lt;p&gt;To quote an email I received from my publisher a few days ago,&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;#8220;[&amp;#8230;] The Cake Software Foundation has informed us they are withdrawing from the CakePHP Recipes project, and returning the advances they&amp;#8217;ve received. This means we can no longer count on them for support, nor can we package the book as an official title.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;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. [&amp;#8230;]&amp;quot;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;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&amp;#8217;s misjudgement and lack of motivation it will never be available to the readers.&lt;br /&gt;
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&amp;#8217;t enough: unfortunately it seems that someone didn&amp;#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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;</description>
      <pubDate>Wed, 07 Mar 2007 01:45:00 -0000</pubDate>
      <guid>http://www.h3rald.com/articles/42/</guid>
      <link>http://www.h3rald.com/articles/42/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/42/#comments</comments>
      <category>cakephp</category>
      <category>writing</category>
    </item>
    <item>
      <title>Introducing: "CakePHP Recipes"</title>
      <description>&lt;p&gt;Despite all my efforts to keep the whole thing quiet for the time being, a few days ago I entered the words &amp;#8220;CakePHP Recipes&amp;#8221; in Google and discovered &amp;#8211; to my astonishment &amp;#8211; that my new book about the CakePHP framework is already for (pre)sale in many popular online bookstores.&lt;/p&gt;
&lt;p&gt;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&amp;#8217;t phisically get it simply because it&amp;#8217;s still in progress (miracles of the modern publishing industry!).&lt;/p&gt;
&lt;p style="float:left;"&gt;&lt;img src="http://base--/img/cakephp-recipes/cover.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;I&amp;#8217;d like to point out that I&amp;#8217;m not the &lt;em&gt;only&lt;/em&gt; 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.&lt;br /&gt;
It is our intent to produce an enjoyable and yet very useful book which will hopefully help CakePHP enthusiasts to use the framework in real-world situations: the book will not focus on theory but on practice, by providing a lot of interesting &amp;#8220;recipes&amp;#8221; on how to implement a particular functionality in a CakePHP web application.&lt;/p&gt;
&lt;p&gt;Why should you get it? Here are some reasons:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;It is a book written &lt;em&gt;by&lt;/em&gt; programmers &lt;em&gt;for&lt;/em&gt; programmers&lt;/li&gt;
	&lt;li&gt;All the code included in the book has been created and tested by the creators of the framework&lt;/li&gt;
	&lt;li&gt;Part of all the revenues generated by the book (including royalties) will go to the Cake Software Foundation, and hopefully contribute to improve our already excellent framework.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Very special thanks to &lt;a href="http://www.peachpit.com/"&gt;Peachpit Press&lt;/a&gt; for giving me and the Cake Software Foundation this chance to&lt;/p&gt;
&lt;p&gt;More to come&amp;#8230;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;span class="caps"&gt;UPDATE&lt;/span&gt;&lt;/strong&gt;: This book &lt;a href="http://www.h3rald.com/blog/42"&gt;has been canceled&lt;/a&gt; and therefore will &lt;span class="caps"&gt;NEVER&lt;/span&gt; be available in bookshops or online stores.&lt;/p&gt;
&lt;/blockquote&gt;</description>
      <pubDate>Thu, 02 Nov 2006 04:25:00 -0000</pubDate>
      <guid>http://www.h3rald.com/articles/40/</guid>
      <link>http://www.h3rald.com/articles/40/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/40/#comments</comments>
      <category>cakephp</category>
      <category>writing</category>
    </item>
    <item>
      <title>Information Mapping</title>
      <description>&lt;p&gt;As I thought, my job also represents a great opportunity to learn new things. I don&amp;#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 &lt;a href="http://www.infomap.com/"&gt;Information Mapping&lt;/a&gt; was by far the most interesting topic I learnt about this week.&lt;/p&gt;
&lt;h3&gt;What is Information Mapping?&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Definition&lt;sup class="footnote" id="fnr1"&gt;&lt;a href="#fn1"&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/strong&gt; &lt;br /&gt;
&lt;blockquote&gt;The Information Mapping method is a research-based approach to the analysis, organization, and visual presentation of information.&lt;/blockquote&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Information Mapping is media independent&lt;/strong&gt;&lt;br /&gt;
&lt;blockquote&gt;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. &lt;/blockquote&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Concepts&lt;/strong&gt;&lt;br /&gt;
&lt;blockquote&gt;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.&lt;/blockquote&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Purpose&lt;/strong&gt;&lt;br /&gt;
&lt;blockquote&gt;&lt;br /&gt;
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&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;purpose&lt;/li&gt;
	&lt;li&gt;audience needs, and&lt;/li&gt;
	&lt;li&gt;information types.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p class="footnote" id="fn1"&gt;&lt;a href="#fnr1"&gt;&lt;sup&gt;1&lt;/sup&gt;&lt;/a&gt; Contents were taken from &lt;a href="http://www.infomap.com/index.cfm/TheMethod/"&gt;InfoMap.com&lt;/a&gt; and were re-formatted and re-organized into an information map.&lt;/p&gt;
&lt;h3&gt;Key Concepts&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;br /&gt;
&lt;blockquote&gt;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.&lt;/blockquote&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Principles&lt;/strong&gt;&lt;br /&gt;
&lt;blockquote&gt;&lt;/p&gt;
&lt;table&gt;
	&lt;tr&gt;
		&lt;td&gt; &lt;strong&gt;Name&lt;/strong&gt; &lt;/td&gt;
		&lt;td&gt; &lt;strong&gt;Explanation&lt;/strong&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt; Chuncking &lt;/td&gt;
		&lt;td&gt; Writers should group information into small, manageable units. &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt; Relevance &lt;/td&gt;
		&lt;td&gt; Writers should make sure that al information in a chunck relates to one main point (function or purpose). &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt; Labeling &lt;/td&gt;
		&lt;td&gt; Writers should provide a label for every unit of information. &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt; Consistency &lt;/td&gt;
		&lt;td&gt; Writers should use similar labels, word, formats for similar subject matters. &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt; Integrated Graphics &lt;/td&gt;
		&lt;td&gt; The use of tables, images, diagrams and lists is encouraged. &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt; Accessible Detail &lt;/td&gt;
		&lt;td&gt; Documents should provide sufficient details where necessary, to make the information more accessible for the readers. &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt; Hierarchy &lt;/td&gt;
		&lt;td&gt;  Small, relevant units of information should be organized into a hierarchy. &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Information Types&lt;/strong&gt;&lt;br /&gt;
&lt;blockquote&gt;&lt;/p&gt;
&lt;table&gt;
	&lt;tr&gt;
		&lt;td&gt; &lt;strong&gt;Name&lt;/strong&gt; &lt;/td&gt;
		&lt;td&gt; &lt;strong&gt;Definition&lt;/strong&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt; Procedure &lt;/td&gt;
		&lt;td&gt; Set of steps to obtain a specified outcome &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt; Process &lt;/td&gt;
		&lt;td&gt; A series of changes through the time for some purpose &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt; Structure	&lt;/td&gt;
		&lt;td&gt; Something which can be defined into multiple parts &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt; Concept &lt;/td&gt;
		&lt;td&gt; Group of physical objects, conditions, relations, &amp;#8230; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt; Principle	&lt;/td&gt;
		&lt;td&gt; Statement of what should be done, assumptions &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt; Fact &lt;/td&gt;
		&lt;td&gt; Statement presented with no supporting evidence &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt; Classification &lt;/td&gt;
		&lt;td&gt; The sorting of a group of specimen into classes &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;br /&gt;
&lt;blockquote&gt;Although it may initially seem too schematic, Information Mapping is a valid method to organize and present information to those readers who just need &amp;#8220;facts&amp;#8221; without any unnecessary distraction. This method it is used with some modifications in many technical manuals and documentation written by many companies.&lt;/blockquote&gt;&lt;/p&gt;</description>
      <pubDate>Fri, 02 Jun 2006 04:10:00 -0000</pubDate>
      <guid>http://www.h3rald.com/articles/33/</guid>
      <link>http://www.h3rald.com/articles/33/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/33/#comments</comments>
      <category>productivity</category>
      <category>writing</category>
    </item>
    <item>
      <title>Writing Tools</title>
      <description>&lt;p&gt;Since in these days (and even more in near future) I&amp;#8217;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.&lt;/p&gt;
&lt;p&gt;I&amp;#8217;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 &lt;a href="http://http://www.textism.com/"&gt;textile&lt;/a&gt; markup, zZine Magazine used BBcode, other site use their own &amp;#8220;proprietary&amp;#8221; styles and so on. One could just give up and use Notepad &amp;#8211; or better, &lt;a href="http://notepad-plus.sourceforge.net/uk/site.htm"&gt;Notepad++&lt;/a&gt; &amp;#8211; for everything, while someone else like me might opt for various applications according to the task.&lt;/p&gt;
&lt;p&gt;One of the few essential requirements for a &lt;em&gt;writer&lt;/em&gt; is some spell checking functionality. Sad but true, this is enough to leave the most popular multi-purpose programming editor out: programmers don&amp;#8217;t need a spell checker, a highlighter for their favourite language is more than enough. &lt;br /&gt;
I will not mention all the applications I tried to find the Perfect Editor, and I&amp;#8217;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.&lt;/p&gt;
&lt;p style="float:left;"&gt;&lt;img src="http://base--/img/pictures/wp/bill.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.microsoft.com/office/preview/default.mspx"&gt;Word 2007 Beta 2&lt;/a&gt; &amp;#8211; Yes, I know that OpenOffice is free and OO Writer works great, but perhaps at work you&amp;#8217;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&amp;#8217;ll still have to use Redmond&amp;#8217;s most popular Word Processor &amp;#8211; &lt;em&gt;if you have it&lt;/em&gt;. If you got it with your laptop (I didn&amp;#8217;t) or your auntie gave you 300$ to buy it you&amp;#8217;re all set, but if you don&amp;#8217;t? &lt;br /&gt;
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, &lt;a href="http://www.microsoft.com/office/preview/beta/overview.mspx"&gt;run&lt;/a&gt;. I did it yesterday and well, it&amp;#8217;s nice to try this brand-new piece of eye candy. the interface is completely new, you won&amp;#8217;t find the usual drop down menu but with some imagination you&amp;#8217;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 &lt;span class="caps"&gt;STILL&lt;/span&gt; doesn&amp;#8217;t have a tabbed interface, so you &lt;span class="caps"&gt;STILL&lt;/span&gt; have to clutter your taskbar if you want to keep more than one document open. &lt;br /&gt;
At any rate, it does the job, exactly in the same way as it did in the previous versions. &lt;br /&gt;
I use it if people ask me to, and for writing stuff which doesn&amp;#8217;t need to be formatted with a particular markup or style but rather look nice and have pictures embedded.&lt;/p&gt;
&lt;p style="float:right;"&gt;&lt;img src="http://base--/img/pictures/wp/writely.gif" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://base--/bookmarks/view/writely/"&gt;Writely&lt;/a&gt; &amp;#8211; Now this is much more fun. A &lt;em&gt;online&lt;/em&gt;, &lt;span class="caps"&gt;AJAX&lt;/span&gt;-powered word processor recently acquired by Google. IT&amp;#8217;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.&lt;br /&gt;
It&amp;#8217;s nice. It&amp;#8217;s nice if you have to work with MS Word documents or create &lt;span class="caps"&gt;PDF&lt;/span&gt; files, and it supports the most essential features offered by desktop word processors, plus some more, really convenient functionalities. &lt;br /&gt;
It can import MS Word documents pretty well and also any kind of text file, so that you can edit it online anytime and anywhere. You can star, tag, archive, edit and delete your documents in a really easy way and &amp;#8211; which is one of its killer features &amp;#8211; you can grant access to certain documents to collaborators for editing or viewing. Other word processors out there offer similar features, but Writely is by far the nicest to use and perhaps even the more advanced. I recently wrote a couple of articles about CakePHP (coming soon-ish to some online magazines near you) and then gave access to gwoo and PhpNut for editing, so that they could check the code snippets, in particular: it was a success. Magazine editors were happy and impressed as well.&lt;br /&gt;
Another really wonderful feature is &lt;em&gt;version support&lt;/em&gt;. I discovered this recently: when you edit a document and save it, Writely automatically creates a new version of it, storing the old ones as well, so that you can even compare them to highlight differences if you wish: a great feature to keep track of the editing process and know exactly who edited which. When I noticed it that was it, Writely has become my online &lt;em&gt;repository&lt;/em&gt; for my articles and writings.&lt;/p&gt;
&lt;p style="float:left;"&gt;&lt;img src="http://base--/img/pictures/wp/cream.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://base--/bookmarks/view/cream-editor"&gt;Cream&lt;/a&gt; &amp;#8211; I discovered this a while ago, and it&amp;#8217;s perhaps the most multi-purpose editor out there. It&amp;#8217;s built on top of Vim (respect+) but it has a friendlier interface by default, and that&amp;#8217;s exactly what I&amp;#8217;m using right now for typing this post. The reasons are simple: it supports &lt;span class="caps"&gt;ANY&lt;/span&gt; kind of file format and any character encoding. There&amp;#8217;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. &lt;br /&gt;
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 &amp;#8220;expert&amp;#8221; view and challenge my vi skills ;)&lt;/p&gt;
&lt;p&gt;That&amp;#8217;s pretty much what I use for writing articles, posts, and other documents&amp;#8230; I tried other alternatives like RoughDraft or similar programs but I&amp;#8217;m now really happy with these three applications. Commercial &amp;#8220;writer&amp;#8217;s programs&amp;#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?&lt;/p&gt;</description>
      <pubDate>Thu, 25 May 2006 12:57:00 -0000</pubDate>
      <guid>http://www.h3rald.com/articles/32/</guid>
      <link>http://www.h3rald.com/articles/32/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/32/#comments</comments>
      <category>writing</category>
      <category>tools</category>
    </item>
    <item>
      <title>Writing more articles...</title>
      <description>&lt;p&gt;Yes, I know, I&amp;#8217;ve been slaking a little bit, and haven&amp;#8217;t posted on my blog in a while. Well, I actually &lt;em&gt;didn&amp;#8217;t&lt;/em&gt; slack at all in these days getting ready to start my job, looking for a damn fitted kitchen for my house and&amp;#8230; writing more articles.&lt;/p&gt;
&lt;p&gt;Nothing special, and nothing too technical, to be honest, but equally interesting. First of all I updated my &lt;a href="http://base--/articles/view/ie-lovers-guide-to-firefox/"&gt;An IE Lover&amp;#8217;s Guide to Firefox&lt;/a&gt; a little bit and people at SpreadFirefox.com and &lt;a href="http://www.firefoxfacts.com/"&gt;FirefoxFacts&lt;/a&gt; liked it. Glad to hear that, unfortunately some guy who wrote about &lt;a href="http://mywebpages.comcast.net/SupportCD/FirefoxMyths.html"&gt;Firefox Myths&lt;/a&gt; wasn&amp;#8217;t too impressed, but at any rate he read it anyway.&lt;/p&gt;
&lt;p&gt;OK, this wasn&amp;#8217;t a new article at all, but &lt;a href="http://base--/articles/view/the-internet-philosopher/"&gt;this one&lt;/a&gt; is fresh, at least. It&amp;#8217;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 &lt;a href="http://base--/bookmarks/view/ropix"&gt;website&lt;/a&gt; I decided to write something about him. An interesting and rather unusual read. Pity that some sections of his homepage are in Swedish only.&lt;/p&gt;
&lt;p&gt;Finally, yesterday I felt inspired and decided to write &lt;a href="http://base--/articles/view/social-bookmarking-services"&gt;another roundup&lt;/a&gt; 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&amp;#8217;t seem to be particularly interested in &lt;a href="http://digg.com/software/Ten_popular_social_bookmarking_services_reviewed"&gt;reading another one&lt;/a&gt;, but hey! After all I can&amp;#8217;t expect of getting dugg for every roundup I write, can&amp;#8217;t I?&lt;/p&gt;
&lt;p&gt;That&amp;#8217;s about it. And what about the CakePHP article I promised &lt;a href="http://base--/blog/view/13/"&gt;long ago&lt;/a&gt; to CakePHP beginners? It&amp;#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 &amp;#8211; most important &amp;#8211; to tell me whether they&amp;#8217;ll publish it or not. Let&amp;#8217;s hope for the best.&lt;/p&gt;</description>
      <pubDate>Sun, 14 May 2006 04:26:00 -0000</pubDate>
      <guid>http://www.h3rald.com/articles/29/</guid>
      <link>http://www.h3rald.com/articles/29/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/29/#comments</comments>
      <category>website</category>
      <category>writing</category>
    </item>
    <item>
      <title>The Internet Philosopher</title>
      <description>&lt;p&gt;Recently I got this rather short email from a guy named Daniel Lampinen:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Hi. Respect for being an internet addict &amp;#8211; that&amp;#8217;s good. I have moved to India just to afford and get time to be on the internet as much as possible:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.ropix.org/english.html"&gt;http://www.ropix.org/english.html&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;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&amp;#8217;s just telling me something about myself and perhaps try to get me to visit his site&lt;sup class="footnote" id="fnr1"&gt;&lt;a href="#fn1"&gt;1&lt;/a&gt;&lt;/sup&gt;. I did indeed &amp;#8211; after all it was just one click away &amp;#8211; mostly for curiosity.That website was one of the most plain ones I&amp;#8217;ve ever come across, perhaps to help the visitor to understand that &lt;em&gt;content&lt;/em&gt; is the only think that matters, not &lt;em&gt;design&lt;/em&gt;. 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 &lt;em&gt;enough&lt;/em&gt; about him, his way of living and his beliefs that I decided to write this article about him.&lt;/p&gt;
&lt;h3&gt;An Internet Philosopher&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;&amp;#8220;I&amp;#8217;m trying to live for my opinions and ideas&amp;#8221;&lt;/em&gt;&lt;/p&gt;
&lt;p style="float:right;"&gt;&lt;img src="/img/pictures/lampinen/piccadilly.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;This is Daniel&amp;#8217;s &amp;#8220;statement&amp;#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.&lt;br /&gt;
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&amp;#8217;t want to do that, and &amp;#8211; believe it or not &amp;#8211; he didn&amp;#8217;t want a business career either: he just wanted to spend time on the Internet, creating &lt;em&gt;things&lt;/em&gt;. Not cool websites or successful e-businesses, just express his own opinions, thoughts and ideas and spread them online, he defines himself a &lt;em&gt;philosopher&lt;/em&gt;, and yet I could not find anything better to define him: he literally lives for his thoughts.&lt;/p&gt;
&lt;p&gt;A few months ago the Italian Telecom broadcasted one of the most peculiar adverts I&amp;#8217;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 &lt;em&gt;&amp;#8220;Imagine what could have happened if he could have used our communication systems&amp;#8221;&lt;/em&gt;, trying to promote Telecom&amp;#8217;s services, and it has been criticized&lt;sup class="footnote" id="fnr2"&gt;&lt;a href="#fn2"&gt;2&lt;/a&gt;&lt;/sup&gt; many times for this. &lt;br /&gt;
I immediately thought about this advert while reading Daniel&amp;#8217;s homepage. Obviously he&amp;#8217;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&amp;#8217;s much, &lt;span class="caps"&gt;MUCH&lt;/span&gt; cheaper than any country in Europe or in the rest of the Rich World.&lt;/p&gt;
&lt;p style="float:left;"&gt;&lt;img src="/img/pictures/lampinen/cow.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;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 &amp;#8211; that&amp;#8217;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 &amp;#8211; at least from someone&amp;#8217;s point of view.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;#8220;Yeah, OK, it&amp;#8217;s all good so far but how can he live like that? Has he got a job?&amp;#8221;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Yes and no &amp;#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 &lt;em&gt;&amp;#8220;[&amp;#8230;] by this principle (the Annalakshmi&lt;sup class="footnote" id="fnr3"&gt;&lt;a href="#fn3"&gt;3&lt;/a&gt;&lt;/sup&gt; principle): pay as much as you think my work is worth.&lt;sup class="footnote" id="fnr4"&gt;&lt;a href="#fn4"&gt;4&lt;/a&gt;&lt;/sup&gt;&amp;#8221;&lt;/em&gt;.&lt;br /&gt;
It&amp;#8217;s quite similar to charity and it&amp;#8217;s an interesting idea, whose success highly depends on the conscience of the giver: &lt;em&gt;the more honest his soul his, the more he&amp;#8217;ll give&lt;/em&gt;.&lt;/p&gt;
&lt;h3&gt;Business Talk&lt;/h3&gt;
&lt;p&gt;Don&amp;#8217;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:&lt;/p&gt;
&lt;p style="float:right;"&gt;&lt;img src="/img/pictures/lampinen/money.jpg" alt="" /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;#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.&lt;br /&gt;
[&amp;#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&amp;#8217;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.&lt;/p&gt;
&lt;p&gt;There&amp;#8217;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&amp;#8217;s ok to buy a Gucci bag for $1000 but think it&amp;#8217;s out of the question to give something to someone that &amp;#8220;doesn&amp;#8217;t wanna work for the money&amp;#8221;.&lt;/p&gt;
&lt;p&gt;[&amp;#8230;] It can even be fun to get fooled by a souvenir salesman in a warm country &amp;#8211; if you let go of some of the pride and the &amp;#8220;millimeter justice&amp;#8221;. Do that. You can still give as much or more to Unicef. I prefer a society where people put money on other people &amp;#8211; both those struck by a catastrophe and rich people in your country &amp;#8211; instead of buying un-necessary stuff.&lt;sup class="footnote" id="fnr5"&gt;&lt;a href="#fn5"&gt;5&lt;/a&gt;&lt;/sup&gt;&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Daniel accepts donations in many ways&lt;sup class="footnote" id="fnr6"&gt;&lt;a href="#fn6"&gt;6&lt;/a&gt;&lt;/sup&gt;, 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&amp;#8217;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&lt;sup class="footnote" id="fnr7"&gt;&lt;a href="#fn7"&gt;7&lt;/a&gt;&lt;/sup&gt;.&lt;br /&gt;
If you&amp;#8217;re curious about what he buys, Daniel added a list of expenses&lt;sup class="footnote" id="fnr8"&gt;&lt;a href="#fn8"&gt;8&lt;/a&gt;&lt;/sup&gt; 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:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;10 Bread&lt;/li&gt;
	&lt;li&gt;9 Tip to roomservice&lt;/li&gt;
	&lt;li&gt;30 Internet ticket&lt;/li&gt;
	&lt;li&gt;10 Drinking water&lt;/li&gt;
	&lt;li&gt;40 Riksa taxi&lt;/li&gt;
	&lt;li&gt;10 Muffins&lt;/li&gt;
	&lt;li&gt;10 Bananas&lt;/li&gt;
	&lt;li&gt;25 Bread and chips&lt;/li&gt;
	&lt;li&gt;10 Tip to roomservice&lt;/li&gt;
	&lt;li&gt;36 Candy&lt;/li&gt;
	&lt;li&gt;15 Bread&lt;/li&gt;
	&lt;li&gt;20 Internet ticket&lt;/li&gt;
	&lt;li&gt;12 Tip to roomservice&lt;/li&gt;
	&lt;li&gt;20 Tip to roomservice&lt;/li&gt;
	&lt;li&gt;7268 Hotel room for 8-18 April (plus food+bewerages+internet+laundry)&lt;/li&gt;
	&lt;li&gt;15 Tip roomservice&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In a nutshell, when it comes to money and buying things, Daniel lives by this simple rule:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;#8220;Work with unwanted things as little as possible, consume as little as possible, communicate as much as possible&amp;#8221;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;But is it really that simple? Could &lt;em&gt;you&lt;/em&gt; live like him and still be happy? Certainly he has a big advantage: he lives in India, where everything costs much less than in Europe or the US. If you decide to try, he can help: he can give anybody suggestions on how to live cheaper and even keep you motivated to do so, and all he asks in exchange is what &lt;span class="caps"&gt;YOU&lt;/span&gt; think his suggestions are worth. All the payments for this service must be made through a Swedish company&lt;sup class="footnote" id="fnr9"&gt;&lt;a href="#fn9"&gt;9&lt;/a&gt;&lt;/sup&gt;, which is technically his employer.&lt;/p&gt;
&lt;p&gt;He can also sell &amp;#8220;ideas&amp;#8221; in the same way: you start emailing him explaining your situation and your needs, and he&amp;#8217;ll try his best to come up with a solution and his own opinions. You won&amp;#8217;t believe it, but a Swedish company&lt;sup class="footnote" id="fnr10"&gt;&lt;a href="#fn10"&gt;10&lt;/a&gt;&lt;/sup&gt; was really pleased to hear his opinions and thoughts about innovation and used his suggestions to improve their services.&lt;/p&gt;
&lt;h3&gt;An Internet Addict&lt;/h3&gt;
&lt;p style="float:left;"&gt;&lt;img src="/img/pictures/lampinen/view.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Perhaps one of the most interesting things about Daniel&amp;#8217;s website is his journal. Not a proper blog, but just a single static webpage hosting all his daily thoughts: you can&amp;#8217;t comment to them, but reading some passages may be interesting enough. &lt;br /&gt;
The best way to do so is trying to search for a particular word (in Firefox it&amp;#8217;s pretty easy) and read what he wrote about that, I tried with &amp;#8220;Internet&amp;#8221; and here&amp;#8217;s something I came across:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;#8220;Now I&amp;#8217;m finally realizing my two year old plans to be in a poor country. The only thing I&amp;#8217;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 &lt;span class="caps"&gt;VISA&lt;/span&gt; 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&amp;#8217;s good for everybody, is that I don&amp;#8217;t need many dollars/euros to survive.&amp;#8221;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This was one of his early posts, and yes, that&amp;#8217;s exactly what he started to do&amp;#8230;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;So, I&amp;#8217;m living at the internet. Hotel room, beach, internet. That&amp;#8217;s pretty monotonous. But all together better than better than s[**]t job. I&amp;#8217;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.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Internet, internet, internet. I&amp;#8217;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&amp;#8217;s a nice atmosphere.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;#8220;Yesterday I searched on Google for the swedish words for &amp;#8220;I am an internet addict&amp;#8221; and e-mailed the words &amp;#8220;respect for being an internet addict &amp;#8211; that is good&amp;#8221; to the bloggers that had written the sentence &amp;#8220;I am an internet addict&amp;#8221; during the last year.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Yes, that&amp;#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: &lt;em&gt;&amp;#8220;I am not an Internet addict! You might be, but I&amp;#8217;m not.&amp;#8221;&lt;/em&gt; &amp;#8211; He obviously didn&amp;#8217;t mean to insult neither me nor any other blogger he mailed: for him, &amp;#8220;being an internet addict&amp;#8221; is probably one of the best things people &amp;#8211; especially young people &amp;#8211; can do.&lt;/p&gt;
&lt;p&gt;Shocked? Yes, it&amp;#8217;s understandable: we hear a lot about Internet addiction in these days, and I was reading in a recent study&lt;sup class="footnote" id="fnr11"&gt;&lt;a href="#fn11"&gt;11&lt;/a&gt;&lt;/sup&gt; which pointed out that:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;#8220;[&amp;#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.&amp;#8221;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Is it though? Daniel Lampinen truly admints he&amp;#8217;s an Internet addict, but he most definitely doesn&amp;#8217;t have any history of drug or alcohol abuse:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;#8220;On [the] Give me money [page] there&amp;#8217;s now a list of demands from the givers. The first demand come from the latest giver: no drugs. Which I&amp;#8217;m fine with. As you can see on What I&amp;#8217;m buying, I&amp;#8217;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 &amp;#8220;get away from reality&amp;#8221;, or to &amp;#8220;have fun&amp;#8221;. Not even beer, which I only take to relax. That&amp;#8217;s how dull I am. The reality rules.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;There you are. &lt;br /&gt;
So why did he choose to become an Internet addict? Well, most definitely because he was tired of the Rich World&amp;#8217;s society: he had a boring job which he didn&amp;#8217;t enjoy, and he simply realised that the Internet &lt;em&gt;could&lt;/em&gt; &amp;#8211; at least sometimes &amp;#8211; be better than ordinary life. He openly admits he&amp;#8217;s a weird human being, and he&amp;#8217;s fine with that, but you can be sure of two things:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;he&amp;#8217;s totally, absolutely honest, in anything he does, and he&amp;#8217;s not afraid to express his own opinions without adjusting them according to the people around him&lt;/li&gt;
	&lt;li&gt;he maintained his individuality at the cost of living in a poorer country&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;How many people in the Rich World can accomplish either of these things? Please raise your hands&amp;#8230;&lt;/p&gt;
&lt;h3&gt;Notes&lt;/h3&gt;
&lt;p&gt;Very special thanks to Daniel Lampinen for allowing me to write about him and providing all the pictures for this article.&lt;/p&gt;
&lt;p class="footnote" id="fn1"&gt;&lt;a href="#fnr1"&gt;&lt;sup&gt;1&lt;/sup&gt;&lt;/a&gt; Daniel Lampinen&amp;#8217;s &lt;a href="http://www.ropix.org/english.html"&gt;website&lt;/a&gt;, English version.&lt;/p&gt;
&lt;p class="footnote" id="fn2"&gt;&lt;a href="#fnr2"&gt;&lt;sup&gt;2&lt;/sup&gt;&lt;/a&gt; &lt;a href="http://www.zeusnews.it/index.php3?ar=stampa&amp;amp;cod=3432"&gt;Gandhi e Telecom Italia&lt;/a&gt; &amp;#8211; Comments on the famous Italian advert. [Italian]&lt;/p&gt;
&lt;p class="footnote" id="fn3"&gt;&lt;a href="#fnr3"&gt;&lt;sup&gt;3&lt;/sup&gt;&lt;/a&gt; &lt;a href="http://www.annalakshmi.org/index.php"&gt;Annalakshmi&lt;/a&gt; &amp;#8211; &lt;em&gt;A non-profit organization dedicated to bringing the joy of Indian culinary, visual and performing arts to one and all.&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;Annalakshmi is an international chain of vegetarian restaurants that augments its dining experience by showcasing Indian arts and handicrafts as well as cultural dance and music performances. Inspired by the Hindu concept for Abundance, Annalakshmi operates on the basis of &amp;#8220;Eat as you Want, Pay as you Wish&amp;#8221; where the guest decides not just what to order but also how much to pay.&lt;/em&gt;&lt;/p&gt;
&lt;p class="footnote" id="fn4"&gt;&lt;a href="#fnr4"&gt;&lt;sup&gt;4&lt;/sup&gt;&lt;/a&gt; From Daniel Lampinen&amp;#8217;s &lt;a href="http://www.ropix.org/ideas.html"&gt;UI Ideas&lt;/a&gt; page.&lt;/p&gt;
&lt;p class="footnote" id="fn5"&gt;&lt;a href="#fnr5"&gt;&lt;sup&gt;5&lt;/sup&gt;&lt;/a&gt; From Daniel Lampinen&amp;#8217;s &lt;a href="http://www.ropix.org/money.html"&gt;Money&lt;/a&gt; page.&lt;/p&gt;
&lt;p class="footnote" id="fn6"&gt;&lt;a href="#fnr6"&gt;&lt;sup&gt;6&lt;/sup&gt;&lt;/a&gt; Daniel&amp;#8217;s &lt;a href="http://www.ropix.org/money.html"&gt;Money page&lt;/a&gt; lists all possible ways to dive him money, most notably:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href="https://www.paypal.com/cgi-bin/webscr?cmd=_xclick&amp;amp;business=800825%40gmail%2ecom&amp;amp;item_name=Ropix&amp;amp;no_shipping=0&amp;amp;no_note=1&amp;amp;tax=0&amp;amp;currency_code=USD&amp;amp;bn=PP%2dDonationsBF&amp;amp;charset=UTF%2d8"&gt;Paypal&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;His &lt;span class="caps"&gt;IBAN&lt;/span&gt; bank account number (an international number):&lt;br /&gt;
SE1580000008201644439081&lt;br /&gt;
With this code: &lt;span class="caps"&gt;BIC&lt;/span&gt;. &lt;span class="caps"&gt;SWEDSESS&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;His &lt;a href="http://www.ropix.org/free.html"&gt;free page&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p class="footnote" id="fn7"&gt;&lt;a href="#fnr7"&gt;&lt;sup&gt;7&lt;/sup&gt;&lt;/a&gt; It&amp;#8217;s documented in the &lt;a href="http://www.ropix.org/gustav100kr.html"&gt;Gustav 100Kr&lt;/a&gt; page.&lt;/p&gt;
&lt;p class="footnote" id="fn8"&gt;&lt;a href="#fnr8"&gt;&lt;sup&gt;8&lt;/sup&gt;&lt;/a&gt; Daniel&amp;#8217;s &lt;a href="http://www.ropix.org/expenses.html"&gt;list&lt;/a&gt; of expenses.&lt;/p&gt;
&lt;p class="footnote" id="fn9"&gt;&lt;a href="#fnr9"&gt;&lt;sup&gt;9&lt;/sup&gt;&lt;/a&gt; &lt;a href="http://www.f-bolaget.se/index.html"&gt;F-Bolaget AB&lt;/a&gt;&lt;/p&gt;
&lt;p class="footnote" id="fn10"&gt;&lt;a href="#fnr10"&gt;&lt;sup&gt;10&lt;/sup&gt;&lt;/a&gt; &lt;a href="http://www.intip.se/"&gt;Intip&lt;/a&gt;&lt;/p&gt;
&lt;p class="footnote" id="fn11"&gt;&lt;a href="#fnr11"&gt;&lt;sup&gt;11&lt;/sup&gt;&lt;/a&gt; &lt;a href="http://arstechnica.com/news.ars/post/20060510-6795.html"&gt;Is Internet addiction a real problem?&lt;/a&gt; &amp;#8211; Arstecnica.com&lt;/p&gt;</description>
      <pubDate>Thu, 11 May 2006 11:00:41 -0000</pubDate>
      <guid>http://www.h3rald.com/articles/the-internet-philosopher/</guid>
      <link>http://www.h3rald.com/articles/the-internet-philosopher/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/the-internet-philosopher/#comments</comments>
      <category>internet</category>
      <category>writing</category>
      <category>travelling</category>
    </item>
    <item>
      <title>Baking a new CakeArticle</title>
      <description>&lt;p&gt;Too right. Enough being a lazy writer, it&amp;#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&amp;#8217;d like to write something &lt;em&gt;proper&lt;/em&gt; and new. Judging by the latest stats people come here hoping to find either a blog &lt;em&gt;entirely&lt;/em&gt; devoted to CakePHP or some CakePHP related content. Well, actually they can &lt;a href="http://base--/tags/CakePHP/"&gt;find&lt;/a&gt; quite a bit, but I&amp;#8217;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 &lt;em&gt;latest addition&lt;/em&gt; 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.&lt;/p&gt;
&lt;p style="float:left;"&gt;&lt;img src="http://base--/img/pictures/baking_bear.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Without further ado, I hereby announce that &lt;em&gt;I am working on some new articles on CakePHP&lt;/em&gt;, at least one. I&amp;#8217;d like to write something technical about CakePHP&amp;#8217;s advanced features, because that&amp;#8217;s where the current documentation is lacking, at the moment: associations, caching, some advanced components&amp;#8230; they are topics which seem to interest those bakers who already baked their first cake and are now looking for some more icing.&lt;/p&gt;
&lt;p&gt;Interested? Good! Sadly, that&amp;#8217;s not what I&amp;#8217;m going to write now, at least not the first article I&amp;#8217;ll be releasing. Please stop calling me names, there&amp;#8217;s no need to say that I&amp;#8217;m just a lazy coward who doesn&amp;#8217;t want to get his hands dirty and write some tough stuff. And stop pulling those sad faces! Think about&amp;#8230; new bakers. There are new people learning about Cake and I know there are, I just discovered &lt;a href="http://www.480x.com/2006/04/12/eureka/"&gt;one&lt;/a&gt; yesterday almost by chance: he seems to be really enthusiastic about Cake, judging by his &lt;a href="http://www.480x.com/2006/04/13/eureka-part-deux/"&gt;latest post&lt;/a&gt; (OK, nevermind the pic).&lt;br /&gt;
Those people are mostly more-or-less experienced &lt;span class="caps"&gt;PHP&lt;/span&gt; programmers who want to find an answer to all their development problems and annoyance. Well, my good friends, the answer lies in Cake. Cake can save us all and bestow powerful blessings of Good &lt;span class="caps"&gt;PHP&lt;/span&gt; Design and Well-structured Programming upon our messy spaghetti code!&lt;/p&gt;
&lt;p&gt;I almost considered writing a humorous article about Cake, but luckily I changed my mind. My old &lt;a href="http://base--/articles/view/cakephp/"&gt;CakePHP article&lt;/a&gt; is already a few months old and was written when Cake was in pre-beta. I feel it&amp;#8217;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.&lt;/p&gt;
&lt;p&gt;Baking lessons. Yes, that&amp;#8217;s it. I&amp;#8217;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 &lt;acronym title="Object Oriented Programming"&gt;&lt;span class="caps"&gt;OOP&lt;/span&gt;&lt;/acronym&gt; and &lt;acronym title="Model-View-Controller"&gt;&lt;span class="caps"&gt;MVC&lt;/span&gt;&lt;/acronym&gt;, and perhaps more difficult for others: at any rate, I&amp;#8217;ll try my best.&lt;/p&gt;</description>
      <pubDate>Thu, 13 Apr 2006 14:21:00 -0000</pubDate>
      <guid>http://www.h3rald.com/articles/13/</guid>
      <link>http://www.h3rald.com/articles/13/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/13/#comments</comments>
      <category>cakephp</category>
      <category>writing</category>
    </item>
    <item>
      <title>Project Gutenberg: The What, When and Why</title>
      <description>I always liked reading Shakespeare, and I always wanted to have a copy of every one of his plays, tragedies and sonnets on my bookshelf ready for consultation, but such things always seemed unrealistic because I had neither the space for them nor the time to find them all nor the money to spend on them when I did find them. &lt;br /&gt;
Now I can store the complete works of William Shakespeare directly on my mobile phone, and they take up as little as 1.4 MB compressed...&lt;br /&gt;
&lt;strong&gt;Origins&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
Even if you never heard the word ?e-book?[1] before, you can probably guess its meaning: &lt;em&gt;electronic book&lt;/em&gt;, or a book in digital format. What you probably don't knoe is that people started copying books into digital format nearly as soon as computers were available to the public, and maybe even before: the first &lt;em&gt;e-book&lt;/em&gt; was created in 1971.&lt;br /&gt;
&lt;br /&gt;
That year, a student at the University of Illinois named Michael Hart was given the equivalent of $100,000,000 (or $100,000, or $1,000,000 - there is no official estimation) in &lt;em&gt;computer time&lt;/em&gt;. Basically, since he was friends with some of the operators at the Materials Research Lab, he was given an operator account on the Xerox Sigma V mainframe, which later became one of the 15 nodes that developed into the global network that eventually became the Internet. At that time, having that much computer time at your disposal was indeed a great privilege, and Hart felt that he had to use that time for something useful that could in theory generate a profit - not an easy task when you consider that only a limited amount of people in the world had access to a computer, and that those computers weren?t even connected together. &lt;br /&gt;
&lt;br /&gt;
Foreseeing an era where computers where interconnected and regular people had access to them, Michael Hart thought that virtually all texts and books could be made available in digital format, for free, to anyone who wanted to read them. Certainly, such a &lt;em&gt;project&lt;/em&gt; seemed quite unrealistic and excessively time consuming at the time; nevertheless, he decided to start copying the first book himself, the Declaration of Independence of the United States, which he was carrying in his backpack.&lt;br /&gt;
&lt;br /&gt;
Project Gutenberg[2] was born with that one single text, and it has grown through the years. Today, there are more than 16,000 e-books available to download and read.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;What is Project Gutenberg?&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
By that name, Michael Hart probably wanted to define the project?s scope and vision: an idea as revolutionary for the diffusion of literature as the invention of moveable type printing[3] in the 1450s. &lt;br /&gt;
&lt;br /&gt;
The mission of the project can be summarized as follows[4]:&lt;br /&gt;
&lt;br /&gt;
[center]&lt;em&gt; "To encourage the creation and distribution of eBooks."&lt;br /&gt;
 &lt;/em&gt;[/center]&lt;br /&gt;
&lt;br /&gt;
In order to achieve this, Project Gutenberg is set up such that &lt;em&gt;anyone&lt;/em&gt; can contribute to it, in many different ways. It is run completely by volunteers, hundreds of people around the world who share the same ideals and believe that literature should be freely available to everyone at virtually no cost. &lt;br /&gt;
&lt;br /&gt;
The Internet serves this purpose magnificently: it is possible to download all of the over 16,000 free e-books from the Project Gutenberg website[5] in different formats and many different languages[6]!&lt;br /&gt;
&lt;br /&gt;
However, having such a large amount of books available within a few clicks can make people forget about how time consuming the process of making one single e-book is: originally, after acquiring a paper copy of the book, Gutenberg?s volunteers had to transcribe it themselves, typing every word from the beginning to the end. Then the book had to be checked for mistakes before it was accepted into the Project. &lt;br /&gt;
&lt;br /&gt;
Producing a single e-book can therefore take many people and many hours from beginning to end, and presumably this was one of the reasons why Project Gutenberg was criticized for being more of an utopian ideal than a tangible reality: every year since its creation people have doubted the project, accusing Hart of pursuing an impossible dream, and prophesying that fewer and fewer people would join the team and that there was no future for Project Gutenberg.&lt;br /&gt;
&lt;br /&gt;
Oddly enough, they were all wrong: not only is the Project still active today, but the number of books released every year has grown consistently over time, from a few dozen in the early days to thousands per year now.&lt;br /&gt;
&lt;br /&gt;
 More and more people became involved, partially because they share the same ideals and partially because it has always been easy to get involved[7]: Project Gutenberg strives to remove all the institutional barriers which could potentially interfere with members? motivation; they try not to impose any restrictions, and they don't support perfectionism. It is believed[8] that there shouldn?t be any &lt;em&gt;proper&lt;/em&gt; or &lt;em&gt;standard&lt;/em&gt; way to release e-books, but instead many different ways, to appeal to many tastes: the Project doesn?t support any particular standard for releasing ebooks, although it normally takes the simplest path. Therefore, the majority of the books are available in &lt;em&gt;Plain Vanilla ASCII&lt;/em&gt;, i.e., texts are written using only ASCII characters, and bold, italicized or underlined words are capitalized instead.  While this format has the most limitations, it is also the most portable.&lt;br /&gt;
&lt;br /&gt;
At this point, you might wonder why they don't just scan the original books, and make them available as image files or PDF files.  While it would be much faster, it also has disadvantages, such as large file size and an inability to be displayed at particular resolutions; a scanned book probably wouldn't be readable on a PDA, mobile phone, or other equally small device. &lt;br /&gt;
&lt;br /&gt;
Nonetheless, scanners do play an important part nowadays in the process of making an e-book: texts are no longer copied manually if a printed edition already exists.  Instead, they are scanned with OCR[9] and then proofread twice before being accepted. The (un)official procedure recommends scanning at least one page a day, having it proofread once by someone in charge of doing so (a ?junior? proofread), and then again by a more experienced member. This has undoubtedly sped up the process.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Not All Books Are Equal (for now)&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
By looking at some of the titles available on Project Gutenberg, you?ll notice that most of them are &lt;em&gt;classics&lt;/em&gt; or relatively old works: for example, you won?t find the latest &lt;em&gt;Harry Potter&lt;/em&gt;[10] available for download.&lt;br /&gt;
&lt;br /&gt;
Since &lt;em&gt;all&lt;/em&gt; of the books at Project Gutenberg are free to download (more details of the license will be given later on), and therefore not subject to fees or copyrights, only books in the public domain[11] can generally be included in the Project.&lt;br /&gt;
&lt;br /&gt;
Public domain includes all those works of art whose intellectual property cannot be legally claimed or exploited by any person, institution or legal entity, and therefore belong to all mankind. In the case of books, copyright can expire &lt;em&gt;only if&lt;/em&gt; some particular conditions subsist:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;
&lt;li&gt;The work was created and first published before January 1, 1923, or at least 95 years before January 1 of the current year, whichever is later.&lt;br /&gt;
&lt;/li&gt;&lt;li&gt;The last surviving author died at least 70 years before January 1 of the current year.&lt;br /&gt;
&lt;/li&gt;&lt;li&gt;Neither a &lt;/li&gt;&lt;em&gt;perpetual copyright&lt;/em&gt; is granted by the Berne Convention nor has a particular government (US or EU) passed a copyright term extension.&lt;br /&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;br /&gt;
Now we can see why there are not very many &lt;em&gt;new&lt;/em&gt; publications available in the project, and that?s really frustrating for Michael Hart and other volunteers:&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt; "In the USA, no copyrights will expire from now to 2019!!! It is even much worse in many other countries, where they actually removed 20 years from the public domain. Books that had been legal to publish all of a sudden were not. Friends told me that in Italy, for example, all the great Italian operas that had entered the public domain are no longer there... Same goes for the United Kingdom. Germany increased their copyright term to more than 70 years back in the 1960's. It is a domino effect. Australia is the only country I know of that has officially stated they will not extend the copyright term by 20 years to more than 70."&lt;/em&gt;[12]&lt;br /&gt;
&lt;br /&gt;
After all these considerations, we can take a closer look at Gutenberg?s license[13] which comes in two different versions: &lt;em&gt;informative&lt;/em&gt; and normative (?legalese?, as they call it), the latter of which is the real document. Luckily, the non-legalese version is simple and complete enough: basically PG releases books which are either in the public domain or ? if copyrighted ? the author gave express permission to re-distribute them. The difference lies in the fact that if you remove PG?s trademark and license from a book which is in the public domain, you can re-distribute it freely on your own, but if the book is copyrighted and permission to distribute was given &lt;em&gt;only&lt;/em&gt; to PG, you?ll have to contact the author to obtain permission.&lt;br /&gt;
&lt;br /&gt;
Furthermore, anybody can use the PG trademark when distributing &lt;em&gt;verbatim&lt;/em&gt; copies of a book, with no changes (re-formatting is allowed); if you want to charge money for the copies you distribute, you have to pay royalties to PG.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Satellite Sites and Similar Projects&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
Michael Hart was ? and still is ? an authentic pioneer in his field: he had the idea to create the largest free library on the Internet to &lt;em&gt;?Break Down the Bars of Ignorance and Illiteracy?&lt;/em&gt;. A lot of people thought he wouldn?t achieve anything, but his dedication and perseverance were simply so exemplary that more and more people got involved, a few satellite sites were created and similar projects were started in all over the world sharing the same goals.&lt;br /&gt;
 &lt;br /&gt;
Hart is obviously aware of the fact that there are also some sites &lt;em&gt;selling&lt;/em&gt; e-books, but he explains that neither those sites nor any other free online library should be considered a competitor to Project Gutenberg: they all contribute to the diffusion of e-books. &lt;br /&gt;
&lt;br /&gt;
One of the most important &lt;em&gt;satellite site&lt;/em&gt; of PG is ?Distributed Proofreading?[14] which is now considered the main source of PG books: every month more than 100 books are proofread by hundreds of volunteers who can register on the site for free and then get added to the project. The key concept of this parallel organization is that a single book can be proofread by more than one person at the same time, and thereby speeding up a project which would be otherwise very difficult to coordinate.&lt;br /&gt;
&lt;br /&gt;
Another site which helps the main project is HWG, the HTML Writers Guild[15]. It aims to convert PG?s plain text ebooks into more feature-rich HTML documents: by using a mark-up language it is possible to add footnotes and it can be analyzed easily by automatic tools.&lt;br /&gt;
&lt;br /&gt;
Although Project Gutenberg releases well-known books in many languages, a few sites officially affiliated with the project were created to focus particularly on their regional literature and works. That?s the case for both Australia[16] and Germany[17], for example; they both focus on their own national heritage. Regarding the latter, they recently claimed their own copyright for their e-books, and thus a new foundation is in the process of being created: Project Gutenberg Europe[18] which aims, among other things, to address the myriad copyright issues and laws of the EU.&lt;br /&gt;
&lt;br /&gt;
Last but not least, there?s an interesting discussion[19] about similarities and differences between Project Gutenberg and Wikisource[20] a Wikipedia[21]?s sister project aiming to create a free repository of texts which are either in the public domain or licensed under the GFDL[22].  &lt;br /&gt;
&lt;br /&gt;
Wikisource people obviously noticed that their project was quite similar to PG, but with an important difference: their texts were formatted and freely editable by any user who was able to spot a mistake or inaccuracy; PG doesn?t offer this. In this context, Project Gutenberg was sometimes blamed for allowing inaccurate material to be included in the project: this was due to the fact that even if PG uses Distributed Proofreading website to proofread e-books, this is often not comparable to a wiki system.  However, in PG's defense, wiki articles, being much more open, are subject to much more vandalism, and therefore must be more closely watched.  One can imagine a high school student changing &lt;em&gt;Hamlet&lt;/em&gt; to read "To be or not to be, who gives a crap." &lt;br /&gt;
&lt;br /&gt;
However, the members of Project Gutenberg have proposed a sort of mutual cooperation between PG and wikisource: wikisource should maintain a broader scope, focusing not only on literary works but also on quotations and other kind of texts, and at the same time provide some revised edition of some book to Project Gutenberg.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;The Future of Project Gutenberg&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
Project Gutenberg demonstrated the ability to grow considerably during its over 30-year existence.  During that same time, copyright laws were extended, and some new technologies tried to &lt;em&gt;intimidate&lt;/em&gt; the Project, which seems to remain relatively unchanged. However, last year a long-awaited DVD containing all the Project's e-books was released, showing the world that PG can keep up with the progress of technology to a certain extent.&lt;br /&gt;
 &lt;br /&gt;
One aspect that makes PG a successful project even today is its ability to adapt: CD-ROMs and a DVD were released, OCR was almost immediately taken into consideration, and since last year, all e-books have been released in both plain text and HTML format: there are still no fixed standards or rigid guidelines, but common sense seems to prevail over chaos, and for now, the system works. &lt;br /&gt;
&lt;br /&gt;
So far, Michael Hart showed the entire world that a single person can do &lt;em&gt;a lot&lt;/em&gt; when pursuing a noble goal. Call him an idealist, call him a dreamer, but he surely created something able to gratify and motivate him and his fellow volunteers forever:&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;?I can't think of anything more rewarding to do as a career than Project Gutenberg. It is something that will reach more people than any other project in all of history. It is as powerful as The Bomb, but everyone can benefit from it.?&lt;/em&gt;[12]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Notes &amp;amp;amp; Further Readings&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
[1] Ebook, Wikipedia page ? &lt;a href="http://en.wikipedia.org/wiki/Ebook"&gt;http://en.wikipedia.org/wiki/Ebook&lt;/a&gt;&lt;br /&gt;
[2] Project Gutenberg, Wikipedia page - &lt;a href="http://en.wikipedia.org/wiki/Project_Gutenberg"&gt;http://en.wikipedia.org/wiki/Project_Gutenberg&lt;/a&gt;&lt;br /&gt;
[3] Movable type, Wikipedia page - &lt;a href="http://en.wikipedia.org/wiki/Printing_press"&gt;http://en.wikipedia.org/wiki/Printing_press&lt;/a&gt;&lt;br /&gt;
[4] Project Gutenberg FAQ0 -  &lt;a href="http://www.gutenberg.org/about/faq0"&gt;http://www.gutenberg.org/about/faq0&lt;/a&gt;&lt;br /&gt;
[5] Project Gutenberg Official Website - &lt;a href="http://www.gutenberg.org"&gt;http://www.gutenberg.org&lt;/a&gt;&lt;br /&gt;
[6] Project Gutenberg?s catalog - &lt;a href="http://www.gutenberg.org/catalog/"&gt;http://www.gutenberg.org/catalog/&lt;/a&gt;&lt;br /&gt;
[7] Project Gutenberg?s volunteering page - &lt;a href="http://www.gutenberg.org/info/volunteer"&gt;http://www.gutenberg.org/info/volunteer&lt;/a&gt;&lt;br /&gt;
[8] Project Gutenberg FAQ3 ? &lt;a href="http://www.gutenberg.org/about/faq3"&gt;http://www.gutenberg.org/about/faq3&lt;/a&gt;&lt;br /&gt;
[9] Optical Character Recognition, Wikipedia Page ? &lt;a href="http://en.wikipedia.org/wiki/Optical_character_recognition"&gt;http://en.wikipedia.org/wiki/Optical_character_recognition&lt;/a&gt;&lt;br /&gt;
[10] ?Harry Potter and the half-blood prince?, Scholastic Inc. website - &lt;a href="http://www.scholastic.com/harrypotter/books/prince/index.htm"&gt;http://www.scholastic.com/harrypotter/books/prince/index.htm&lt;/a&gt;&lt;br /&gt;
[11] Public Domain, Wikipedia Page - &lt;a href="http://en.wikipedia.org/wiki/Public_domain"&gt;http://en.wikipedia.org/wiki/Public_domain&lt;/a&gt;&lt;br /&gt;
[12] ?The Second Gutenberg Interview with Michael Hart?, Sam Vaknin, Ph.D. - &lt;a href="http://samvak.tripod.com/busiweb29.html"&gt;http://samvak.tripod.com/busiweb29.html&lt;/a&gt;&lt;br /&gt;
[13] Gutenberg Project license ? &lt;a href="http://www.gutenberg.org/license"&gt;http://www.gutenberg.org/license&lt;/a&gt;&lt;br /&gt;
[14] Project Gutenberg?s Distributed Proofreading - &lt;a href=" &lt;a href="http://www.pgdp.net/c/default.php"&gt;http://www.pgdp.net/c/default.php&lt;/a&gt; "&gt; &lt;a href="http://www.pgdp.net/c/default.php"&gt;http://www.pgdp.net/c/default.php&lt;/a&gt; &lt;/a&gt;&lt;br /&gt;
[15] HTML Writers Guild Project Gutenberg ? &lt;a href="http://gutenberg.hwg.org/"&gt;http://gutenberg.hwg.org/&lt;/a&gt; &lt;br /&gt;
[16] Project Gutenberg Australia ? &lt;a href="http://gutenberg.net.au/"&gt;http://gutenberg.net.au/&lt;/a&gt;&lt;br /&gt;
[17] Project Gutenberg Germany ? &lt;a href="http://gutenberg.spiegel.de/"&gt;http://gutenberg.spiegel.de/&lt;/a&gt;&lt;br /&gt;
[18] Project Gutenberg Europe ? &lt;a href="http://gutenberg.nl/"&gt;http://gutenberg.nl/&lt;/a&gt;&lt;br /&gt;
[19] Wikisource and Project Gutenberg, Wikisource page ? &lt;a href="http://wikisource.org/wiki/Wikisource:Wikisource_and_Project_Gutenberg"&gt;http://wikisource.org/wiki/Wikisource:Wikisource_and_Project_Gutenberg&lt;/a&gt;&lt;br /&gt;
[20] Wikisource main page ? &lt;a href="http://wikisource.org/wiki/Main_Page"&gt;http://wikisource.org/wiki/Main_Page&lt;/a&gt;&lt;br /&gt;
[21] Wikipedia main page ? &lt;a href="http://www.wikipedia.org/"&gt;http://www.wikipedia.org/&lt;/a&gt;&lt;br /&gt;
[22] GNU Free Documentation License ? &lt;a href=" &lt;a href="http://en.wikipedia.org/wiki/Wikipedia:Text_of_the_GNU_Free_Documentation_License"&gt;http://en.wikipedia.org/wiki/Wikipedia:Text_of_the_GNU_Free_Documentation_License&lt;/a&gt; "&gt; &lt;a href="http://en.wikipedia.org/wiki/Wikipedia:Text_of_the_GNU_Free_Documentation_License"&gt;http://en.wikipedia.org/wiki/Wikipedia:Text_of_the_GNU_Free_Documentation_License&lt;/a&gt; &lt;/a&gt;</description>
      <pubDate>Sat, 10 Dec 2005 11:55:28 -0000</pubDate>
      <guid>http://www.h3rald.com/articles/project-gutenberg/</guid>
      <link>http://www.h3rald.com/articles/project-gutenberg/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/project-gutenberg/#comments</comments>
      <category>writing</category>
      <category>internet</category>
    </item>
  </channel>
</rss>
