all repos — h3rald @ d041f9cf66df929a4e132542a17de622365a811f

The sources of https://h3rald.com

Fixed contents; implemented Tags page.
h3rald h3rald@h3rald.com
Sun, 06 Aug 2017 16:46:56 +0200
commit

d041f9cf66df929a4e132542a17de622365a811f

parent

9187a4dd3e01b0592103432a479da5892ef80ec8

163 files changed, 513 insertions(+), 425 deletions(-)

jump to
M contents/403.htmlcontents/403.html

@@ -1,5 +1,5 @@

----- -title: Forbidden +title: "Forbidden" content-type: page ----- <p>There&#8217;s obviously nothing to see here. Go <a href="">home</a>!</p>
M contents/404.htmlcontents/404.html

@@ -1,5 +1,5 @@

----- -title: Page Not Found +title: "Page Not Found" content-type: page ----- <p>The page you&#8217;re looking for cannot be found. Try searching the <a href="/archives/">archives</a>, maybe you&#8217;ll have better luck!</p>
M contents/500.htmlcontents/500.html

@@ -1,5 +1,5 @@

----- -title: Internal Server Error +title: "Internal Server Error" content-type: page ----- <p>Something went wrong. Try to go back <a href="/">home</a> and if things improve. If not, send a <a href="/">tweet</a> to <em>@h3rald</em> and I&#8217;ll try to sort it out.</p>
M contents/about.htmlcontents/about.html

@@ -1,5 +1,5 @@

----- -title: About +title: "About" content-type: page ----- <p>H3RALD.com was created in 2004 by Fabio Cevasco, a system architect, technical writer, programmer and IT enthusiast. It features over a hundred <a href="/archives/">articles</a> covering a wide range of topics, from programming to writing, productivity and traveling.</p>
M contents/articles/10-programming-languages.htmlcontents/articles/10-programming-languages.html

@@ -1,10 +1,10 @@

----- -title: 10 programming languages worth checking out +title: "10 programming languages worth checking out" content-type: article -subtitle: A quick comparison of 10 non-mainstream programming languages +subtitle: "A quick comparison of 10 non-mainstream programming languages" popular: true timestamp: 1229868075 -tags: programming +tags: "programming" ----- <blockquote> <p>&mdash; This article has been translated into <a href="http://science.webhostinggeeks.com/10-programskih-jezika">Serbo-Croatian</a> by <cite><a href="http://webhostinggeeks.com/">Web Geeks</a></cite> &mdash;</p>
M contents/articles/10-reasons-to-learn-ruby.htmlcontents/articles/10-reasons-to-learn-ruby.html

@@ -1,10 +1,10 @@

----- -title: 10 Reasons to Learn Ruby +title: "10 Reasons to Learn Ruby" content-type: article -subtitle: Ten possible reasons to learn the Ruby Programming Language +subtitle: "Ten possible reasons to learn the Ruby Programming Language" popular: true timestamp: 1188988800 -tags: ruby +tags: "ruby" ----- <h3>Preamble</h3> <p>I discovered Ruby fairly recently, through the excellent Ruby on Rails framework<sup class="footnote" id="fnr1"><a href="#fn1">1</a></sup>. Although I don&#8217;t consider myself a Ruby expert by any means, I read the PickAxe<sup class="footnote" id="fnr2"><a href="#fn2">2</a></sup>, I&#8217;ve coded a few utilities for my personal use in Ruby and I&#8217;m currently developing with Rails during my free time.</p>
M contents/articles/10-reasons-why-i-didnt-update-my-blog.htmlcontents/articles/10-reasons-why-i-didnt-update-my-blog.html

@@ -1,8 +1,8 @@

----- -title: 10 reasons why I didn't update my blog +title: "10 reasons why I didn't update my blog" content-type: article timestamp: 1213234200 -tags: internet|rant|personal|writing +tags: "internet|rant|personal|writing" ----- <p><em>&#8220;It has been a while since my last post, sorry about that&#8221;</em><br /> I read this sentence (or something along those lines) on many blogs on the Internet, including mine. As a matter of fact, I actually didn&#8217;t write a meaningful post on my blog for a long time and no, probably this is not going to change that either.</p>
M contents/articles/10.htmlcontents/articles/10.html

@@ -1,8 +1,8 @@

----- -title: Italian General Elections - 2006 +title: "Italian General Elections - 2006" content-type: article timestamp: 1144560780 -tags: italy|politics +tags: "italy|politics" ----- <p style="float:right;"><img src="http://www.berluscastop.it/v_imag/sodom1.gif" alt="" /></p> <p>Another five years have passed and here we go again: General Elections time!<br />
M contents/articles/11-07-2009.htmlcontents/articles/11-07-2009.html

@@ -1,8 +1,8 @@

----- -title: 11th of July 2009 +title: "11th of July 2009" content-type: article timestamp: 1248605640 -tags: wedding +tags: "wedding" ----- <ul> <li><a href="#prologue">Prologue</a></li>
M contents/articles/11.htmlcontents/articles/11.html

@@ -1,12 +1,12 @@

----- -title: Meet some Cake(PHP) bakers! +title: "Meet some Cake(PHP) bakers!" content-type: article timestamp: 1144767780 -tags: cakephp +tags: "cakephp" ----- <p>I should write more. I noticed that I since I decided to take a break from <a href="http:www.zzine.org">zZine Magazine</a> I more or less stopped writing &#8211; and started <em>baking</em> again with <a href="http://www.cakephp.org/">CakePHP</a>. As a result I finally recoded this website and <em>refreshed</em> a little bit my almost-rusty baking skills.</p> -<p style="float:left;"><img src="/img/pictures/cakephp.png" alt="" /></p> -<p>Why not taking advantage of this and write more about CakePHP then? After all, my last <a href="/articles/view/cakephp/">article</a> turned out well enough and some people even bookmarked it online on del.icio.us and ma.gnolia&#8230; Now it&#8217;s a bit out of date, I must admit: it was based on a pre-beta release of the framework, and we&#8217;re (more or less) stable now. <br /> +<p style="float:left;"><img src="http://base--/img/pictures/cakephp.png" alt="" /></p> +<p>Why not taking advantage of this and write more about CakePHP then? After all, my last <a href="http://base--/articles/view/cakephp/">article</a> turned out well enough and some people even bookmarked it online on del.icio.us and ma.gnolia&#8230; Now it&#8217;s a bit out of date, I must admit: it was based on a pre-beta release of the framework, and we&#8217;re (more or less) stable now. <br /> A lot of things changed in the Bakers Community since then! At the time the <a href="http://wiki.cakephp.org/">wiki</a> barely started and there was no <a href="http://manual.cakephp.org/">manual</a> whatsoever, only my long and perhaps <em>slightly</em> boring article describing Cake&#8217;s functionalities. Now there things are much better for newcomers: they have a continuously growing community to rely upon, both on the Google user group and on <span class="caps">IRC</span> (#cakephp on FreeNode counted 63 members today, while back in the day 20 was a big number). There are also a few people who started blogging and starting websites about CakePHP: while I was the first to write an article about Cake I was <em>the last</em> so far to start a blog :/ Oh well, nobody&#8217;s perfect!</p> <p>The first site I came across &#8211; although not a blog really &#8211; is Graham Bird&#8217;s <a href="http://grahambird.co.uk/cake/">Cake for Beginners</a>. When someone asks me some basic questions about CakePHP I send him there because first of all they&#8217;ll find a short <span class="caps">FAQ</span> about the framework, i.e. something everybody should know before even start thinking about learning Cake. Similarly, the guy has a <a href="http://grahambird.co.uk/cake/glossary/">Glossary</a> in progress to help those souls who feel lost in Cake&#8217;s terminology. If you don&#8217;t consider yourself a total beginner anymore, the <a href="http://grahambird.co.uk/cake/tutorials/">Tutorials</a> section can be a very interesting read: I wanted to add some <span class="caps">AJAX</span> bits to my site, but the documentation about this seemed pretty scarce, so I headed to the <a href="http://grahambird.co.uk/cake/tutorials/ajax.php">Ajax Task List</a> tutorial and it really helped.</p> <p>On the blogs front, on the other hand, <a href="http://cakebaker.42dh.com/">Cake Baker</a> seems to be the most active: I&#8217;m starting to check this one often (OK, I&#8217;d better subscribe to the <span class="caps">RSS</span> feeds, perhaps) because it seems to be <span class="caps">THE</span> best place to get the latest news about everything concerning CakePHP: The author seems to post quite frequently (there&#8217;s always a new post every 1-3 days maximum) includes short code snippets when necessary and report news when there&#8217;s anything to report.</p>

@@ -31,4 +31,4 @@ <p style="float:left;"><img src="http://rdos.rd11.com/img/rd11/rdlogo.gif" alt="" /></p>

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

@@ -1,8 +1,8 @@

----- -title: Choosing the right IT job +title: "Choosing the right IT job" content-type: article timestamp: 1144928828 -tags: personal +tags: "" ----- <p>The time has come. The times when I used to meander around reading stuff on the Net and writing about whatever I wanted are over. Incidentally, the world may end, <em>your</em> laptop could explode and I could knock at your door in a few minutes asking for money, imagine that!</p> <p>Nothing of the above, alright, bad joke, but sooner or later the time to <em>start doing something</em> comes, at some point you ought to start making some real money. It&#8217;s time to settle down, my fiance&eacute; are eager to get our own independence, move to our new house (which we&#8217;re still doing up) etc. etc. Fair enough. I spent the last five months wasting my time looking for a job, a <em>proper</em> job having something to do with <acronym title="Information Technology"><span class="caps">IT</span></acronym> and finally something seems to be possible.</p>

@@ -10,7 +10,7 @@ <p><em>Either nothing or everything</em> &#8211; I may even say that: now I have to face a difficult choice between two job proposals that seem both fairly interesting. <br />

<em>&#8220;Go wherever you can get more bucks, you nutter!&#8221;</em> &#8211; Well, there&#8217;s more to it.<br /> Let&#8217;s examine now the two similar but yet different realities I have to choose from. Maybe you&#8217;ll never be in my situation, but I hope this can help at least those who experienced or could experience something similar someday.</p> <p><em><strong>Working under Uncle Bill&#8217;s wing</strong></em><br /> -<img src="/img/pictures/genova.jpg" alt="" /> Not Microsoft. No, not directly at any rate. I&#8217;ve recently been contacted by a well known multi-national company which does almost anything ranging from computers, phones, electrical stuff to huge self-aware robots designed to conquer new worlds&#8230; Not quite, but let&#8217;s just say that this image contributes to give an idea of a Corporate-type reality.</p> +<img src="http://base--/img/pictures/genova.jpg" alt="" /> Not Microsoft. No, not directly at any rate. I&#8217;ve recently been contacted by a well known multi-national company which does almost anything ranging from computers, phones, electrical stuff to huge self-aware robots designed to conquer new worlds&#8230; Not quite, but let&#8217;s just say that this image contributes to give an idea of a Corporate-type reality.</p> <p><em>Preliminaries</em><br /> I happen to be an Italian whose English skills go a bit beyond the <em>&#8220;Hello, me Italian and like to do friendship with you&#8221;</em>, I applied in the above (un)mentioned company as <em>Software Tester</em> and got contacted twenty days afterwards about a possible position as <em>Technical Writer</em>. It makes perfect sense. Well, at any rate I was pleased and I went to the pre-selection which was something like a pre-<span class="caps">GCSE</span> English test with a bunch of &#8220;technical&#8221; questions (&#8220;What does <span class="caps">HTTP</span> mean?&#8221;&#8230;).<br /> Thanks to our Merciful God I passed it (and thus avoided endless teasing by my British fiance&eacute;), and they wanted to have a proper interview with me today.<br />

@@ -18,7 +18,7 @@ I went there and came back a few hours ago, and I think it wasn&#8217;t too bad, let&#8217;s say I may stand good chances but as normally happens in such companies in the end it was just something like <em>Thank you for coming, we&#8217;ll call you by the end of April</em>. Although I mentioned that I recently had some other job offer obviously they couldn&#8217;t give a damn: as any other big company, they need to interview all the possible candidates to be sure they pick the right one, and that&#8217;s fair enough.</p>

<p><em>The job</em><br /> In the remote eventuality they decide to take me on board, I&#8217;d be part of a Documentation Team in charge of writing technical documents, manuals and silly jokes &#8211; perhaps &#8211; about some semi-classified huge internal semi-intelligent corporate framework. <br /> Now, although some people may already start to feel bored even at thinking about a job like that, I think this role would fit me perfectly. I love writing. I love researching. I love crating documentations, howtos, reports and any other boring (for other people) stuff! And they want me to write in English, not in Italian, which is &#8211; it may sound weird &#8211; a true relief for me. <br /> -At the interview I had a chance to talk about my <a href="/articles/">articles</a> and they seemed interested in this activity of mine&#8230; I even mentioned my <a href="/articles/view/cakephp/">CakePHP article</a> and they say they&#8217;re gonna check it out. Oh well, this site&#8217;s stats are always one Firefox tab away from my current main browsing tab, so you can bet I&#8217;ll be tracking that.</p> +At the interview I had a chance to talk about my <a href="http://base--/articles/">articles</a> and they seemed interested in this activity of mine&#8230; I even mentioned my <a href="http://base--/articles/view/cakephp/">CakePHP article</a> and they say they&#8217;re gonna check it out. Oh well, this site&#8217;s stats are always one Firefox tab away from my current main browsing tab, so you can bet I&#8217;ll be tracking that.</p> <p><em>The contract and the salary</em><br /> <em>Classified</em>. They didn&#8217;t say anything, as usual, but presumably it should be a permanent (or semi-permanent) contract with all the contributions, health insurance, taxes etc. paid. And free cookies. Yum!<br /> Salary&#8230; well, it shouldn&#8217;t be too bad, anyway.</p>

@@ -37,10 +37,10 @@ <li>They&#8217;ll get back to me at the end of this month, and I have to give an answer to someone else before that</li>

<li>My friends and fiance&eacute; will probably hassle me to give them free goodies they think I&#8217;ll get from the company</li> </ul> <p><em><strong>Working in a &#8216;cool place&#8217;, and fly high</strong></em> <br /> -<img src="/img/pictures/lambruschini.jpg" alt="" /> Nope, sorry, the <a href="http://www.cakefoundation.org/">Cake Software Foundation</a> unfortunately is not hiring. The alternative is a small company in my city, Genoa, which recently merged with a slightly bigger company based in Milan, which <em>might</em> merge with a big national company involved in producing some successful (here in Italy and even abroad, a little bit) TV programs. Network involved are Italy&#8217;s national channels, good ol&#8217; pal Berlusconi&#8217;s channels, Sky Italy and (drums) <span class="caps">MTV</span>.<br /> +<img src="http://base--/img/pictures/lambruschini.jpg" alt="" /> Nope, sorry, the <a href="http://www.cakefoundation.org/">Cake Software Foundation</a> unfortunately is not hiring. The alternative is a small company in my city, Genoa, which recently merged with a slightly bigger company based in Milan, which <em>might</em> merge with a big national company involved in producing some successful (here in Italy and even abroad, a little bit) TV programs. Network involved are Italy&#8217;s national channels, good ol&#8217; pal Berlusconi&#8217;s channels, Sky Italy and (drums) <span class="caps">MTV</span>.<br /> Cool, innit? What do they do? Well, interaction between mobile phones and TV through software and networks. Polls, <span class="caps">SMS</span> chat services, <span class="caps">WAP</span> application downloads, &#8220;take matey out of Big Brother&#8217;s house&#8221;, <span class="caps">SMS</span>/<span class="caps">MMS</span> blind dates related to some well known TV programs, tele-voting at Sanremo Festival etc. etc.</p> <p><em>Preliminaries</em> <br /> -Their first interview was the most unusual I&#8217;ve ever had, and I <a href="/blog/view/9/">already wrote</a> about it: they even asked me to solve a riddle. Then they wanted to meet me again and showed me how they work in two different areas (see next section). They are really chilled out, friendly, they seem alright, even the main boss who deals with the company&#8217;s financial side, which is always a plus. <br /> +Their first interview was the most unusual I&#8217;ve ever had, and I <a href="http://base--/blog/view/9/">already wrote</a> about it: they even asked me to solve a riddle. Then they wanted to meet me again and showed me how they work in two different areas (see next section). They are really chilled out, friendly, they seem alright, even the main boss who deals with the company&#8217;s financial side, which is always a plus. <br /> By the way, they already offered me the job, and I&#8217;ll have to give an answer next Tuesday &#8211; that&#8217;s the bad part.</p> <p><em>The Job</em><br /> The Lead Developer of the company apparently seemed satisfied enough with my knowledge and Java skills. A first possibility for mewould be working for them as full-time Java Developer. Coding. Wake up, go to work, Code for eight hours, go home, sleep/other things, wake up, go to work&#8230;<br />
M contents/articles/13.htmlcontents/articles/13.html

@@ -1,13 +1,13 @@

----- -title: Baking a new CakeArticle +title: "Baking a new CakeArticle" content-type: article timestamp: 1144938060 -tags: cakephp|writing +tags: "cakephp|writing" ----- -<p>Too right. Enough being a lazy writer, it&#8217;s time to seriously produce something. I could sit here and pretend that long blog posts can make up for the lack of new articles, but I&#8217;d like to write something <em>proper</em> and new. Judging by the latest stats people come here hoping to find either a blog <em>entirely</em> devoted to CakePHP or some CakePHP related content. Well, actually they can <a href="/tags/CakePHP/">find</a> quite a bit, but I&#8217;d like to be able to sport more Cake-related articles, bookmarks, and posts. My main problem is that I could add ten bookmarks about Cake right away, but the <em>latest addition</em> showed on the front page would feature only bookmarks, which would be bad (yes, I do worry about silly things). At the moment this blog is the second easiest way to provide fresh content frequently enough to encourage visitors to come back, but articles could be even better.</p> -<p style="float:left;"><img src="/img/pictures/baking_bear.png" alt="" /></p> +<p>Too right. Enough being a lazy writer, it&#8217;s time to seriously produce something. I could sit here and pretend that long blog posts can make up for the lack of new articles, but I&#8217;d like to write something <em>proper</em> and new. Judging by the latest stats people come here hoping to find either a blog <em>entirely</em> devoted to CakePHP or some CakePHP related content. Well, actually they can <a href="http://base--/tags/CakePHP/">find</a> quite a bit, but I&#8217;d like to be able to sport more Cake-related articles, bookmarks, and posts. My main problem is that I could add ten bookmarks about Cake right away, but the <em>latest addition</em> showed on the front page would feature only bookmarks, which would be bad (yes, I do worry about silly things). At the moment this blog is the second easiest way to provide fresh content frequently enough to encourage visitors to come back, but articles could be even better.</p> +<p style="float:left;"><img src="http://base--/img/pictures/baking_bear.png" alt="" /></p> <p>Without further ado, I hereby announce that <em>I am working on some new articles on CakePHP</em>, at least one. I&#8217;d like to write something technical about CakePHP&#8217;s advanced features, because that&#8217;s where the current documentation is lacking, at the moment: associations, caching, some advanced components&#8230; they are topics which seem to interest those bakers who already baked their first cake and are now looking for some more icing.</p> <p>Interested? Good! Sadly, that&#8217;s not what I&#8217;m going to write now, at least not the first article I&#8217;ll be releasing. Please stop calling me names, there&#8217;s no need to say that I&#8217;m just a lazy coward who doesn&#8217;t want to get his hands dirty and write some tough stuff. And stop pulling those sad faces! Think about&#8230; new bakers. There are new people learning about Cake and I know there are, I just discovered <a href="http://www.480x.com/2006/04/12/eureka/">one</a> yesterday almost by chance: he seems to be really enthusiastic about Cake, judging by his <a href="http://www.480x.com/2006/04/13/eureka-part-deux/">latest post</a> (OK, nevermind the pic).<br /> Those people are mostly more-or-less experienced <span class="caps">PHP</span> 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 <span class="caps">PHP</span> Design and Well-structured Programming upon our messy spaghetti code!</p> -<p>I almost considered writing a humorous article about Cake, but luckily I changed my mind. My old <a href="/articles/view/cakephp/">CakePHP article</a> is already a few months old and was written when Cake was in pre-beta. I feel it&#8217;s time for a more up-to-date howto and introduction to our framework, something maybe not as lenghty but easily readable by almost anyone interested in starting to learn about Cake.</p> -<p>Baking lessons. Yes, that&#8217;s it. I&#8217;m currently writing an article divided in ten lessons which could potentially turn casual cowboy coders into (apprentice) bakers. That could be easy for those already enlightened by <acronym title="Object Oriented Programming"><span class="caps">OOP</span></acronym> and <acronym title="Model-View-Controller"><span class="caps">MVC</span></acronym>, and perhaps more difficult for others: at any rate, I&#8217;ll try my best.</p>+<p>I almost considered writing a humorous article about Cake, but luckily I changed my mind. My old <a href="http://base--/articles/view/cakephp/">CakePHP article</a> is already a few months old and was written when Cake was in pre-beta. I feel it&#8217;s time for a more up-to-date howto and introduction to our framework, something maybe not as lenghty but easily readable by almost anyone interested in starting to learn about Cake.</p> +<p>Baking lessons. Yes, that&#8217;s it. I&#8217;m currently writing an article divided in ten lessons which could potentially turn casual cowboy coders into (apprentice) bakers. That could be easy for those already enlightened by <acronym title="Object Oriented Programming"><span class="caps">OOP</span></acronym> and <acronym title="Model-View-Controller"><span class="caps">MVC</span></acronym>, and perhaps more difficult for others: at any rate, I&#8217;ll try my best.</p>
M contents/articles/14.htmlcontents/articles/14.html

@@ -1,13 +1,13 @@

----- -title: CakePHP hybrids +title: "CakePHP hybrids" content-type: article timestamp: 1145001300 -tags: cakephp|webdevelopment|php +tags: "cakephp|webdevelopment|php" ----- <p>When I first talked to gwoo, CakePHP&#8217;s project manager, I asked him if Cake had any potential <em>limitations</em>. I asked him &#8211; I was kidding actually &#8211; wether it would be possible to build an application like Gmail using the framework and he &#8211; very seriously &#8211; simply said <em>&#8220;yes, why not?&#8221;</em>. <br /> I repeat myself when I say that CakePHP leaves plenty of freedom to developers within the bounds of its <span class="caps">MVC</span> structure: once you grasp the basic logic behind it, your possibilities are endless. I don&#8217;t want to act as a Ruby on Rails fanatic and boast that <em>you can do anything with CakePHP</em> and things like that, but I can certainly say that CakePHP can be <em>extended</em> and <em>integrated</em> with other collections of scripts, frameworks and projects. With limitations, of course: you probably don&#8217;t want to force an integration between CakePHP and another <span class="caps">MVC</span>/Event Driven/Whatever framework, simply because it would be rather pointless and potential conflicts may occur.</p> <p>What I keep finding online is other open source projects adopting CakePHP as <em>backend</em> and <em>structure</em>. I&#8217;m sure there are many examples which could be mentioned here, but I chose two in particular: one has been around for a few months and the other is just born.</p> -<p style="float:left;"><img src="/img/pictures/amfphp.jpg" alt="" /></p> +<p style="float:left;"><img src="http://base--/img/pictures/amfphp.jpg" alt="" /></p> <p><a href="http://amfphp.org/"><span class="caps">AMFPHP</span></a> is quite an interesting project:</p> <blockquote> <p>&#8220;[it] is an open-source Flash Remoting gateway. It&#8217;s fast, reliable, 100% free and open-source. Flash Remoting is a technology built into the Flash player core that enables sending data between the server and the client seemlessly.&#8221;</p>

@@ -31,10 +31,10 @@ http://localhost/cake_install/vendors/cakeamfphp/cakebrowser/&#8221;</p>

</blockquote> <p>The installation doesn&#8217;t seem too painful at all. And &#8211; guess what &#8211; gwoo recently updated a very informative tutorial showing how to create a simple &#8211; but still impressive &#8211; bullettin board with CakeAMFPHP.</p> <p><em>&#8220;Cool, but I never liked flash, what about <span class="caps">AJAX</span>?&#8221;</em></p> -<p style="float:left;"><img src="/img/pictures/qooxdoo.gif" alt="" /></p> +<p style="float:left;"><img src="http://base--/img/pictures/qooxdoo.gif" alt="" /></p> <p>CakePHP has a nice <span class="caps">AJAX</span> helper to be used in conjunction with <a href="http://prototype.conio.net/">prototype</a>, but there are truly a lot of libraries, mini-frameworks, pre-built applications to create interactive desktop-like user interfaces. Some people may already know <a href="http://qooxdoo.oss.schlund.de/">qooxdoo</a>,</p> <blockquote> <p>&#8220;[&#8230;] an advanced open-source JavaScript-based <span class="caps">GUI</span> toolkit. qooxdoo continues where simple <span class="caps">HTML</span> is not enough. This way qooxdoo can help you implement your <span class="caps">AJAX</span>-enhanced web 2.0 application &#8211; easier than ever before.&#8221;</p> </blockquote> <p>In a recent <a href="http://groups.google.com/group/cake-php/browse_thread/thread/ba219c64cd794764/1d77973293514618?lnk=raot">discussion</a> on CakePHP user group someone suggested the possibility to integrate qooxdoo with CakePHP. Apparently qooxdoo people were <a href="http://www.nabble.com/Re%3A-qooxdoo-PHP-framework-project-p3799302.html">evaluating</a> various <span class="caps">MVC</span> frameworks, and Cake was obviously listed together with two other Rails clones for <span class="caps">PHP</span>. The good news is that <a href="http://cakeforge.org/users/a100rk/">100rk</a> just started a new project called <a href="http://cakeforge.org/projects/cqx"><span class="caps">CQX</span></a>, which &#8211; although still in pre-alpha a development demo is already available, and it <em>shows off</em> most of qooxdoo&#8217;s features&#8230; <a href="http://cqx.100rk.org/trunk/">Take a look</a></p> -<p>Best of luck to 100rk and his brand new project, I really hope to see more of it soon!</p>+<p>Best of luck to 100rk and his brand new project, I really hope to see more of it soon!</p>
M contents/articles/15.htmlcontents/articles/15.html

@@ -1,12 +1,12 @@

----- -title: I18n +title: "I18n" content-type: article timestamp: 1145106900 -tags: cakephp|webdevelopment +tags: "cakephp|webdevelopment" ----- <p><em>&#8220;CakePHP will officially support Internationalization (i18n) from version 2.0&#8221;</em>. That is to say: not right now. That doesn&#8217;t mean we have to wait, no chance! I&#8217;m Italian and there are plenty of bakers speaking a language other than English who might want to develop a multi-lingual website.</p> <p>I did, <a href="http://v60.h3rald.com/">once</a>, and the final result wasn&#8217;t too bad in the end: every page of the site (except the articles) could be translated into Italian. Before examining my solution (which is far from optimal) I&#8217;d like to mention an excellent CakePHP package which allows basic (mostly statuc) i18n.<br /> -It looks like I missed an important baker in my recent <a href="/blog/view/11">blog post</a>: <a href="http://www.noswad.me.uk/">Andy Dawson</a>, creator &#8211; among other things &#8211; of the <a href="http://cakeforge.org/snippet/detail.php?type=package&amp;id=2">Locale Package</a>, available at CakeForge. His solution actually came out after H3RALD.com v60 was already developed so I didn&#8217;t use it for my own site.<br /> +It looks like I missed an important baker in my recent <a href="http://base--/blog/view/11">blog post</a>: <a href="http://www.noswad.me.uk/">Andy Dawson</a>, creator &#8211; among other things &#8211; of the <a href="http://cakeforge.org/snippet/detail.php?type=package&amp;id=2">Locale Package</a>, available at CakeForge. His solution actually came out after H3RALD.com v60 was already developed so I didn&#8217;t use it for my own site.<br /> At a first glance Andy&#8217;s solution truly solves basic l18n problems in an elegant way: the most important code snippet is the <a href="http://cakeforge.org/snippet/download.php?type=snippet&amp;id=74">Locale Component</a> which provides the following functionalities:</p> <ul> <li>automatic language detection based on browser&#8217;s UserAgent string</li>

@@ -63,4 +63,4 @@ </ul>

<p>I basically defined a global $lang variable set to &#8220;en&#8221; by default and then I accessed the record&#8217;s fields (for example in views) like this:</p> <p><code>echo $data['Project']['text_'.$lang]</code></p> <p>Ugly, perhaps, but did the job. The good (or bad) thing about this technique was that I could modify the contents of a project, for example, regardless of the current language: in my add/edit view, I chose to generate <em>all</em> the fields of a table and therefore modify all the fields of a project without switching to the other language.</p> -<p>How will Cake support locales? Will we have &#8220;localized&#8221; database tables (and models?) Only time will tell&#8230;</p>+<p>How will Cake support locales? Will we have &#8220;localized&#8221; database tables (and models?) Only time will tell&#8230;</p>
M contents/articles/16.htmlcontents/articles/16.html

@@ -1,19 +1,19 @@

----- -title: Databases supported by CakePHP +title: "Databases supported by CakePHP" content-type: article timestamp: 1145251800 -tags: cakephp|webdevelopment|databases +tags: "cakephp|webdevelopment|databases" ----- <p>One of the most recurring questions on CakePHP User Group is probably <em>&#8220;Does Cake support X database?&#8221;</em>. Sure, most of us tend to use just MySQL for our websites and applications, but in certain situations some more <em>exotic</em> database support makes the difference. A partial answer to the question above could be <em>&#8220;Yes, probably, at least partially&#8221;</em>: CakePHP offers support for some database &#8220;natively&#8221; (i.e. Cake folks made some <em>ad hoc</em> database drivers), others through either <a href="http://adodb.sourceforge.net/">ADOdb</a> or <a href="http://pear.php.net/package/DB"><span class="caps">PEAR</span>::DB</a>.</p> <p>CakePHP seems to use a <em>multiple level</em> database abstraction: in other words, popular abstraction layers like ADOdb or <span class="caps">PEAR</span>::DB have been wrapped in a &#8220;driver&#8221; which basically extends the DboSource class (which is the most high level database abstraction). Some people don&#8217;t like the idea, because this means that the could be some performance issues, for one, and also that inevitably not <em>all</em> features offered by either ADOdb or <span class="caps">PEAR</span>::DB are used. In my very, very, very modest opinion (I&#8217;m not an expert on this matter), this solution focus on achieving good database compatibility leaving the doors open for further tinkering, if needed.</p> -<p style="float:left;"><img src="/img/pictures/postgres.png" alt="" /></p> +<p style="float:left;"><img src="http://base--/img/pictures/postgres.png" alt="" /></p> <p>Having said this, yes, the possibilities are good that your favorite database is supported by CakePHP, more or less. Of course, as repeatedly pointed out by some CakePHP core developers, Cake dev team didn&#8217;t and is not going to test <em>every</em> database with Cake, using either of the two abstraction layers, but users are more than welcome to do so.</p> <p>Let&#8217;s now have a look at what is <em>known to work</em> with Cake:</p> <p><strong>MySQL</strong> works fine, and is currently recommended as <em>preferred</em> database solution. What about <strong>MySQLi</strong>? Well, thanks to mappleJoe there&#8217;s a (PHP5 only!) <a href="http://cakephp.org/pastes/show/770e73e77e4d7a3d32c2f3de3f175512">driver</a> ready to be used.</p> *PostgreSQL*&#8217;s support is continuously improving. Something may work, something may not: the good news is that the folks who are using it are <a href="http://groups.google.com/group/cake-php/browse_thread/thread/85a29ab6ec6826a0/8eecea26ba53e1fd?q=postgres&amp;rnum=1#8eecea26ba53e1fd">sharing their thoughts</a> with the rest of us. -<p style="float:right;"><img src="/img/pictures/sqlite.gif" alt="" /></p> +<p style="float:right;"><img src="http://base--/img/pictures/sqlite.gif" alt="" /></p> <p><strong>SQLite</strong> is supported natively, or so it seems&#8230; what about the newest SQLite3? Yes, probably: there&#8217;s a quick <a href="http://www.thompsonlife.net/index.php?section=9">howto</a> on ThompsonLife.net to make it work through the dbo_pear driver.</p> <p><strong>Access</strong> works through the ADOdb driver, as reported in CakePHP <a href="http://wiki.cakephp.org/docs:databases">wiki</a> (thanks ivanp).</p> <p><a href="http://www.filemaker.com/">FileMaker</a> is getting there: things aren&#8217;t that easy, but bdb is doing <a href="http://groups.google.com/group/cake-php/browse_thread/thread/572d8dd2ba4cbdf7/dca851c795247c0b?q=database&amp;rnum=2#dca851c795247c0b">all his best</a> to make it work, good luck!</p> <p>Neil Fincham was also trying to develop a custom driver to support <a href="http://www.pervasive.com/">Pervasive</a> through a <a href="http://www.unixodbc.org/">unixODBC</a> driver. Best of luck!</p> -<p>For other databases, check ADOdb&#8217;s <a href="http://phplens.com/adodb/supported.databases.html">list of supported databases</a> and use the <code>dbo-adodb</code> driver, or use <span class="caps">PEAR</span>::DB (for fbsql, ibase, informix, msql, mssql, mysql, mysqli, oci8, odbc, pgsql,sqlite and sybase) using the <code>dbo-pear</code> driver.</p>+<p>For other databases, check ADOdb&#8217;s <a href="http://phplens.com/adodb/supported.databases.html">list of supported databases</a> and use the <code>dbo-adodb</code> driver, or use <span class="caps">PEAR</span>::DB (for fbsql, ibase, informix, msql, mssql, mysql, mysqli, oci8, odbc, pgsql,sqlite and sybase) using the <code>dbo-pear</code> driver.</p>
M contents/articles/17.htmlcontents/articles/17.html

@@ -1,8 +1,8 @@

----- -title: New CakePHP Manual (with associations!) +title: "New CakePHP Manual (with associations!)" content-type: article timestamp: 1145342820 -tags: cakephp +tags: "cakephp" ----- <p>Gustavo Carreno just <a href="http://groups.google.com/group/cake-php/browse_thread/thread/4e13231cc383b9bb/6414184c1058fadb#6414184c1058fadb">announced</a> a new release of the <a href="http://cakeforge.org/frs/?group_id=53&amp;release_id=82">CakePHP Offline Manual</a>. Personally I was extremely happy to download this new release because it finally contains documentation and howtos related to CakePHP&#8217;s Model Associations, which is perhaps one of the most used <em>advanced</em> CakePHP features.<br /> So I&#8217;ll have no excuses not to learn how to use them, great&#8230;</p>
M contents/articles/18.htmlcontents/articles/18.html

@@ -1,17 +1,17 @@

----- -title: Textiling +title: "Textiling" content-type: article timestamp: 1145605143 -tags: writing +tags: "" ----- -<p>Once upon a time I used <a href="http://en.wikipedia.org/wiki/BBCode">BBcode</a>. <a href="/bookmarks/view/cyberarmy">CyberArmy</a> and all its affiliated sites adopted it as <em>de-facto</em> standard for forums and articles, so consequently more or less all my articles are bbcoded. <br /> -I could copy and paste the <em>BBcodeHelper</em> I coded for this site, and it could be quite an interesting read for some people&#8230; well, tough luck: today I&#8217;d like to talk about <a href="/bookmarks/view/textile-reference/">Textile</a> instead, which now I consider <em>the answer</em> to all text formatting problems.</p> +<p>Once upon a time I used <a href="http://en.wikipedia.org/wiki/BBCode">BBcode</a>. <a href="http://base--/bookmarks/view/cyberarmy">CyberArmy</a> and all its affiliated sites adopted it as <em>de-facto</em> standard for forums and articles, so consequently more or less all my articles are bbcoded. <br /> +I could copy and paste the <em>BBcodeHelper</em> I coded for this site, and it could be quite an interesting read for some people&#8230; well, tough luck: today I&#8217;d like to talk about <a href="http://base--/bookmarks/view/textile-reference/">Textile</a> instead, which now I consider <em>the answer</em> to all text formatting problems.</p> <p>If what I wrote up to here doesn&#8217;t make sense to you, I&#8217;m rambling about the apparent necessity and the undeniable need of web developers, content managers, and writers to use something else other than <span class="caps">HTML</span> for adding style and formatting text. What&#8217;s wrong with <span class="caps">HTML</span>? Nothing, it&#8217;s just too &#8220;tiresome&#8221; to use: you have to remember to close all tags, break lines, use the <code>&lt;strong&gt;</code> tag every time you want <strong>bold text</strong>, etc. etc.<br /> Some people even freak out when you tell them that they have to use <span class="caps">HTML</span> in their text: &#8220;it&#8217;s just <em>waaaaaay too difficult</em> to learn and use&#8221; &#8230;things like that.</p> <p>Whether you are scared to learn <span class="caps">HTML</span>, you don&#8217;t want to, or you know it but you&#8217;re too lazy to seriously thinking about manually use a markup language to write your article, I can say that you&#8217;ll definitely become addicted to Textile. What? <em>&#8220;<acronym title="What You See is What You Get"><span class="caps">WYSIWYG</span></acronym> <span class="caps">HTML</span> editors?&#8221;</em> &#8211; C&#8217;mon, let&#8217;s at least <em>try</em> to be serious :)<br /> Why BBcode doesn&#8217;t help enough? Well, simply because I don&#8217;t see why <code>[i]this[/i]</code> is easier than <code>&lt;i&gt;this&lt;/i&gt;</code>: unless you have a particular phobia for angular brackets, it seems quite similar to me!</p> <p>What about <code>_this_</code> instead? You use only two additional characters instead of seven. <span class="caps">SEVEN</span>. If I only want italcized text I honestly can&#8217;t imagine myself using more than two extra characters. It&#8217;s natural. It&#8217;s human.</p> -<p style="float:left;"><img src="/img/pictures/pear2.gif" alt="" /></p> +<p style="float:left;"><img src="http://base--/img/pictures/pear2.gif" alt="" /></p> Precisely. Textile is a <em>&#8220;Humane web text generator&#8482;&#8221;</em>, it&#8217;s simple, elegant and produces standard compliant <span class="caps">XHTML</span> code. <a href="http://www.textism.com/about/">Dean Allen</a> should be worshipped by entire generations of web developers for inventing something so easy to use and so <em>elegant</em> at the same time. Maybe not worshipped, but for sure respected. <p>I won&#8217;t copy and paste the extremely useful <a href="http://cakeforge.org/projects/textilehelper/">TextileHelper</a> for CakePHP either, simply because it&#8217;s 4085 lines long and it would be pointless: you can just get it and use it.</p> <p>I&#8217;ll just include some examples of textile formatting&#8230;</p>

@@ -34,7 +34,7 @@ <td> <code>fixed width</code> text</td>

</tr> <tr> <td> <code>"text":url</code> </td> - <td> <a href="/">linked</a> text </td> + <td> <a href="http://base--/">linked</a> text </td> </tr> <tr> <td> <code>!path/to/image!</code> </td>

@@ -47,7 +47,7 @@ | *Textile Code* | *Result* |

| @*text*@ | *bold* text | | @_text_@ | _italicized_ text | | &lt;code&gt;@text@&lt;code&gt;| @fixed width@ text| -| @"text":url@ | "linked":/ text | +| @"text":url@ | "linked":http://base--/ text | | @!path/to/image!@ | image | </code></pre> <p>The simplest and most intuitive way possible!</p>

@@ -56,7 +56,7 @@ I also noticed that sometimes empty <code>style=""</code> and <code>class=""</code> attributed are generated, which don&#8217;t do any particular harm, but they are not needed either&#8230; so here&#8217;s a quick fix to improve your Textile experience in CakePHP: You can use this function ideally in your customized textile helper, <code>$data</code> should be the return value of TextileHelper&#8217;s <code>process()</code> method.</p>

<pre><code> function _fixTextile($data) { - $patterns = array( '//', + $patterns = array( '/http://base--/', '/style=""/', '/class=""/', '/ &gt;/');
M contents/articles/20.htmlcontents/articles/20.html

@@ -1,15 +1,15 @@

----- -title: In memory of Vittorio Cevasco (1916-2006) +title: "In memory of Vittorio Cevasco (1916-2006)" content-type: article timestamp: 1146022560 -tags: personal +tags: "personal" ----- <p>Yesterday my grandpa passed away, due to an aggravation of his health condition, breathing problems and various other complications. He died in hospital, on Liberation Day, the Italian national holiday celebrating the liberation of our country from the nazi-fascist regime by the Allied troops and partisans on April 25th 1945. He died exactly 61 years after that day.</p> <p>I&#8217;d like to remember my grandpa today, because he most certainly deserves it, as he was a really extraordinary person.</p> <p><em>&#8220;Yes, I&#8217;m sure he was, isn&#8217;t everybody extraordinary in some way?&#8221;</em></p> <p>Definitely: everybody is special, and people tend to say that especially when someone passes away. In my grandpa&#8217;s case, actually I can say that in a slightly more absolute sense: his life was truly uncommon and very active.</p> <p><strong>A very active life</strong></p> -<p style="float:left;"><img src="/img/pictures/grandpa.jpg" alt="" /></p> +<p style="float:left;"><img src="http://base--/img/pictures/grandpa.jpg" alt="" /></p> <p>Vittorio Cevasco, my grandfather, was certainly the most active member of my family. We&#8217;re talking about a man who was still able to drive a car up to last September (he was nearly 90 years old), and used to drive 500 Km on the motorway and mountain roads every year to go on vacation: he went to the same place, Mals Vinschgau, near the Italian-Austrian-Swiss border for over fifty years. He never had particular troubles to walk, and just in the past months started using a walking stick&#8230; before that he used to walk around the city by himself everyday, in his endless meanderings. He always had something to do: visit friends, go to public offices, go to our house in the countryside &#8211; he still used to cultivate the land with potatoes, tomatoes and basil as a hobby until a few months ago &#8211; and so on: he was really a busy man.<br /> I can certainly say that I never though he was really old until after his wife, my grandma, died, about a year ago. Since then he really aged, and quickly, as she probably was one of the main reasons of his existance.</p> <p>When he was &#8220;young&#8221; (i.e. less than 80) he used to <em>compete</em> with the lift in his flat running down the stairs. Everyone else was taking the lift, but he always chose to go on foot down the stairs, to keep in exercise. His other exercise was cultivating our land in Sessarego, near Bogliasco (Genoa, Italy), as a hobby more than anything, providing us with fresh <em>biological</em> products like that extraordinary basil essential to make our very tasty local <a href="http://www.pesto.net/eng/index.php">pesto sauce</a>.<br />

@@ -19,7 +19,7 @@ Later on he became an estate agent, working for a local office and then helping out some friends running their activity. In 2001 he hit his own personal record selling a fancy villa worth one billion of the old Italian Lire &#8211; which convert to approx. 500,000 Euro, but at the time it was much bigger money than that. With the commission generated by that sale he bought a brand new Ford Fiesta: he was 85 years old.</p>

<p>But no, these are not the most extraordinary episodes of his life of course. He could fly &#8211; literally.</p> <p>He was one of the first man in Italy and the the first in Genoa area to get a flying license, back in 1934. A news which made the local papers at the time, and we still have that article somewhere. He wanted to become a civil pilot, but he never did: the Country needed him to protect our sky, when Italy joined the War in 1941.</p> <p><strong>The Aviator</strong></p> -<p style="float:left;"><img src="/img/pictures/sessarego.jpg" alt="" /></p> +<p style="float:left;"><img src="http://base--/img/pictures/sessarego.jpg" alt="" /></p> <p>My grandpa lived the early years of his youth in the village of Sessarego, where my great-grandfather bought an old house, after taking part in <a href="http://www.italian-american.com/garib-it.htm&#39;s">Giuseppe Garibaldi</a> expedition at Marsala (1860) fighting for the Italian independence (he&#8217;s listed among <a href="http://www.italian-american.com/garibal.htm">the ones</a> who actually landed there).<br /> There his parents used to have a few cows and produce milk, and one of his tasks was milking delivery&#8230; no scooters or cars, at the time, of course, and certainly not for a teenager like him: he often had to carry the milk barrels up and down the hill <em>on foot</em>, and I&#8217;m talking about 1-2 Km with at least 30-40 kilos on your shoulders!</p> <p>But my grandpa&#8217;s plans were much different: he wanted to fly away, and high &#8211; literally. You can imagine the face of my grand-grandfather when he expressed his wish to become a pilot! Nobody ever did that, in the area, and becoming a pilot was, at the time, like becoming an astronaut in the seventies.<br />

@@ -27,7 +27,7 @@ The price of the license was really high at the time, 1,200 Lire. That would be like at least 30,000 Euro now, especially considering that his parents weren&#8217;t exactly rich. In the very end, my father supported him and provided as much money as he could afford: 1000 Lire.<br />

But he still needed 200 Lire, so after hassling the flying instructors he signed an agreement stating that if they anticipated him the money he&#8217;d have paid them back once he started working: it was clear in fact that he&#8217;d have became a military pilot, as the Regime needed people for their brand new aircrafts, and the was felt imminent.<br /> He paid them back, eventually, after passing both the civil and military tests. He became a sergeant for the <em>Regia Aviazione</em> (Royal Airforce), with a salary of 20 Lire/month, ten of which went to the flying school, for many months, but he was still earning some very decent money.</p> <p>One of the most peculiar things about my grandpa was his memory: he was always able to tell you the story of his life, all the events, with the same details and <em>all the exact dates</em>, on every occasion. Even when we took him to the hospital, a few weeks ago, when we asked the nurse if he was self-conscious she said: <em>&#8220;Yes&#8230; well, he was talking a few hours ago, but I don&#8217;t know if he was raving or what&#8230; he said he was a pilot, and that he used to fly at 350Km/h&#8230;&#8221;</em></p> -<p style="float:right;"><img src="/img/pictures/r2002-main.jpg" alt="" /></p> +<p style="float:right;"><img src="http://base--/img/pictures/r2002-main.jpg" alt="" /></p> <p>Damn right. His old <a href="http://www.comandosupremo.com/Re2002.html">Re 2002</a> was able to fly at 350 Km/h if pushed, at a standard altitude of 35,000 m, while carrying a 500Kg bomb. It was <em>his</em> plane, and he never forgot that, even a few days before he passed away. He&#8217;d tell you all the stats, the mechanics, the technical details and all the tricks to perform acrobatic maneuvers if you asked him&#8230; Not that actually anybody ever did, because <em>every</em> time something reminded him of that, even slightly, he&#8217;d start talking about the old days when he was commanding his squad patrolling the Italian borders.</p> <p>Last year, after my grandma died and he didn&#8217;t feel like driving 500Km to go to the mountains (for the first time in his life), I had to drive his <em>Fiesta</em> myself in my first long driving journey. At first I wasn&#8217;t too sure I&#8217;d have enjoyed the drive, partly because of the long distance and partly because I was going to be alone with my grandpa for about six hours, and I was afraid of not be able to find enough topics of conversation&#8230;</p> <p>That fear went away almost instantly right a few minutes after we started the journey.<br />

@@ -36,7 +36,7 @@ <p><em>&#8220;Cent&ucirc;c&auml;ranta chilumetri l&#8217;&ucirc;a&#8230; &ucirc; m&euml; aeruplannu p&ucirc;eiv&auml; f&acirc; &iuml; trex&euml;ntusinc&ucirc;anta c&ucirc;mme ninte!&#8221;</em><br />

[140 kilometers per hour&#8230; my plane could easily do 350!]</p> <p>He normally used to speak in <em>zeneise</em> (&#8220;Genovese&#8221;), Genoa&#8217;s dialect, mixed with some Italian <em>if he really had to</em>. That was it: if you started talking about speed, technology, engines, history or any other topic which was <em>slightly</em> related to his plane, the war, the regime etc. he always started off talking about his past and his plane, ignoring everything else. <br /> My grandma used to get kinda annoyed about it&#8230; on every occasion, if he had a chance, he&#8217;d start talking about <em>that particular day in 193x/4x</em> and so on: we all knew that, and actually I enjoyed listening to his stories, mostly because they were genuine and authentic relics of an old and glorious past. I think in his mind he wanted us all to remember him in that way, to always keep in mind that he was a pilot and how he enjoyed it, even when he went in jail for it, even when his plane was taken down&#8230;</p> -<p style="float:left;"><img src="/img/pictures/Re2002.jpg" alt="" /></p> +<p style="float:left;"><img src="http://base--/img/pictures/Re2002.jpg" alt="" /></p> <p>On that day right after he was assigned to a new base, they asked him to perform some exercises in the air, loops and all sort of acrobatics: <em>&#8220;&euml; s&ouml;lite c&ouml;se che s&euml; d&ucirc;vi&euml;iva f&auml; in t&#8217;&euml; l&#8217;avi&auml;si&ucirc;n&#8221;</em> [the usual things you had to do in the airforce].<br /> He was just starting practicing the Re 2002 at the time, but he quickly found out that it was <em>extremely</em> maneuvrable, at least to the standards of the time: the equivalent of a top range today&#8217;s fighter.<br /> He started off with some usual things, performing various twists in the air, loops, etc. etc. until he had to end his exhibition with a dive from an altitude of 10,000m down at maximum speed to a limit of 1500m&#8230; On that particular day a colonel from another base and some other high-ranking officer were down on the ground near the aircraft to enjoy the show, and check that everything was performed correctly. My grandpa was aware of that, so he decided to perform a great show especially for them that day: he went up to 10,000m, and then dove down accelerating, helped by gravity&#8230; he went down and down, faster and faster, people down on the ground were staring at him waiting for him to pull up the plane, but nothing, he still went down and down so that quickly the small crowd of captains and colonels got scared and run away in every direction: <em>&#8220;He&#8217;ll crash, he&#8217;ll crash!&#8221;</em> <br />

@@ -52,4 +52,4 @@ <p>He always had a very practical view of life and especially of technology. He wouldn&#8217;t take you seriously and would not be interested in knowing about programming and the Internet, unless it could produce some concrete result:</p>

<p><em>&#8220;Ti che ti st&ucirc;ddi da insegn&euml; e che ti st&euml; sempre davanti a-&ucirc; cumputer, nun te puri&euml;sci truv&auml; &ucirc;n sistemm&auml; de an&auml; in t&#8217;&euml; a banca e piggi&euml; qualche mili&ucirc;n the Euro?&#8221;</em><br /> [You that you&#8217;re studying to become an engineer and that spend so long in front of the computer, couldn&#8217;t you find a way to get into a bank and get out some million of Euro?]</p> <p>He&#8217;d have loved me to become a [rich] hacker, probably&#8230; But the last time I saw him, last Friday, he seemed happy enough to hear that I was just about to start working.</p> -<p>He realized that I finally found a good job after my studies, and then my dad told him Roxanne and I would have moved to the countryside, in Sessarego&#8230; He made a big effort to move the muscles of his mouth in a large smile: he was happy.</p>+<p>He realized that I finally found a good job after my studies, and then my dad told him Roxanne and I would have moved to the countryside, in Sessarego&#8230; He made a big effort to move the muscles of his mouth in a large smile: he was happy.</p>
M contents/articles/21.htmlcontents/articles/21.html

@@ -1,10 +1,10 @@

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

@@ -20,7 +20,7 @@ <li><span class="caps">FTP</span> <em>and <span class="caps">SSH</span></em> access</li>

<li>Subversion, if possible</li> </ul> <p>All this for less than 10$/month, ideally 5$, on shared hosting. I already made my choice and if you&#8217;re reading this post it means everything worked fine, but anyway, let&#8217;s have a look at what the market can offer for my needs. I only went for US-based hosts: Italian hosts are terrible and US hosts are normally more reliable and cheaper.</p> -<p style="float:left;"><img src="/img/pictures/dreamhost.gif" alt="" /></p> +<p style="float:left;"><img src="http://base--/img/pictures/dreamhost.gif" alt="" /></p> <p>The first hosting company I was tempted by was <a href="http://www.dreamhost.com">DreamHost</a>. They can literally sell you anything but their mother, at stupidly cheap rates for what you get (apparently):</p> <ul> <li>20GB of space</li>

@@ -35,7 +35,7 @@ <li>&#8230;and more</li>

</ul> <p>For 7.95 if you pay two years in advance. And the first time you can get up to 97$ off by using one of the thousands referrer&#8217;s coupons available on the net. OK, where&#8217;s the catch? Well, there&#8217;s a <a href="http://futurosity.com/231/why-dreamhost-sucks">bad review</a> about them which points out that their reliability is not too great, for example, and that the seem to be rather dodgy in general. &#8220;They are overselling, they&#8217;ll soon enforce <span class="caps">CPU</span> restrictions&#8221; etc. etc. <br /> <em>&#8230;let&#8217;s move along</em></p> -<p style="float:right;"><img src="/img/pictures/rails.gif" alt="" /></p> +<p style="float:right;"><img src="http://base--/img/pictures/rails.gif" alt="" /></p> <p>I might try out Ruby on Rails someday, so perhaps I thought it would be wise to choose a host supporting it, for a change. The first Rails friendly I thought about was <a href="http://www.railsplayground.org">RailsPlayground</a>, which started off as <span class="caps">FREE</span> Rails host and then ended up offering interesting commercial hosting plans. They are not bad, and I&#8217;d have probably gone with them if I had only one site to manage: for 60$ a year you get:</p> <ul> <li>3GB of space</li>

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

<li>&#8230;and more</li> </ul> <p>Well, the only reason why I didn&#8217;t go with them was that I did slightly more space, only that. The plan for 5GB of space costs 11$/month, which was too expensive for my liking.</p> -<p style="float:left;"><img src="/img/pictures/textdrive.gif" alt="" /></p> +<p style="float:left;"><img src="http://base--/img/pictures/textdrive.gif" alt="" /></p> <p>Since we&#8217;re talking about Rails, why not <a href="http://www.textdrive.com">Textdrive</a>? Founded by 200 IT professional, hosts high quality sites, it&#8217;s the official Rails host&#8230; An &#8220;elite&#8221; solution, here&#8217;s what you get:</p> <ul> <li>Use Apache and Lighttpd web servers side-by-side</li>

@@ -105,4 +105,4 @@ <li>20 subdomains + 20 parked domains</li>

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

@@ -1,13 +1,13 @@

----- -title: Ten minutes on Rails (while eating Cake) +title: "Ten minutes on Rails (while eating Cake)" content-type: article timestamp: 1146317340 -tags: cakephp|rails|webdevelopment +tags: "cakephp|rails|webdevelopment" ----- <p>Today I decided to do something different, something I&#8217;ve been dying to do since before coming across CakePHP: give Rails a <em>proper</em> try. Like many other <span class="caps">PHP</span> developers out there, when <a href="http://www.rubyonrails.org">Ruby on Rails</a> came out I felt damn jealous and terribly tempted to learn Ruby <em>only</em> to start using such an amazing web development framework. At the time I actually even started reading various tutorials about it, and I was literally amazed at how RoR revolutioned the way of developing web applications.</p> -<p style="float:left;"><img src="/img/pictures/rails.gif" alt="" /></p> +<p style="float:left;"><img src="http://base--/img/pictures/rails.gif" alt="" /></p> <p>One of the main problems which made me &#8211; sadly &#8211; abandon Rails was Ruby itself: personally I&#8217;ve never seen a programming language with a cleaner and more elegant syntax, but also &#8211; at least at the time &#8211; there weren&#8217;t many hosts supporting it. LuckilyI found CakePHP quickly after that&#8230;<br /> -Now however, more and more hosting companies boast full Rails support, and so when recently I <a href="/blog/view/21/">had to move</a> to a new host, I made sure it was Rails-friendly, <em>just in case I wanted to give Rails another try, someday</em>.<br /> +Now however, more and more hosting companies boast full Rails support, and so when recently I <a href="http://base--/blog/view/21/">had to move</a> to a new host, I made sure it was Rails-friendly, <em>just in case I wanted to give Rails another try, someday</em>.<br /> Oh well, the temptation was so strong that today, only a two days after switching to my new host, I felt I <em>had</em> to try it, I <em>had</em> to taste something different than the usual Cake.</p> <p>I decided to (re-)read and follow the <a href="http://www.onlamp.com/pub/a/onlamp/2005/01/20/rails.html">OnLamp tutorial</a> about RoR, step by step, once again. I quickly typed <code>rails cookbook</code> from my shell and voil&aacute;, rails silently creates the skeleton of my application:</p> <p><span class="caps">README</span><br />

@@ -48,7 +48,7 @@ <li>libs/</li>

</ul></li> <li>vendors/</li> </ul> -<p style="float:right;"><img src="/img/pictures/cakephp.png" alt="" /></p> +<p style="float:right;"><img src="http://base--/img/pictures/cakephp.png" alt="" /></p> <p>Cake felt the necessity to divide what you can mess with (<code>app/</code>, <code>vendors/</code>) from what you&#8217;d better not touch (<code>cake/</code>). Rails just left everything on the same level.</p> <p>After creating my database and the necessary tables I have to edit <code>config/database.yml</code>, which corresponds to Cake&#8217;s <code>app/config/database.php</code>. Then things start to become a bit different from Cake, as Rails offers some very handy built in scripts which can be used to automatically create your application&#8217;s files, i.e. executing <code>ruby script/generate controller Recipe</code> creates the controller and other bits:</p> <pre><code>exists app/controllers/

@@ -105,4 +105,4 @@ 19: <td>&lt;</span>= recipe.date <span>&gt;</td><br />

20: </tr><br /> 21: &lt;</span> end <span>&gt;<br /> &lt;</span> end %&gt;</p> -<p>I took a screenshot of the page, because it was too nice: <a href="/img/pictures/rails_error.jpg">check it out</a>. This error page really tells you what&#8217;s wrong, and even prints the lines of code around the error! It also lets the developer check the full backtrace and every sort of information&#8230; Can we have this in CakePHP please? I actually started to develop something like this, but seemed quite hard to do in <span class="caps">PHP</span>.</p>+<p>I took a screenshot of the page, because it was too nice: <a href="http://base--/img/pictures/rails_error.jpg">check it out</a>. This error page really tells you what&#8217;s wrong, and even prints the lines of code around the error! It also lets the developer check the full backtrace and every sort of information&#8230; Can we have this in CakePHP please? I actually started to develop something like this, but seemed quite hard to do in <span class="caps">PHP</span>.</p>
M contents/articles/23.htmlcontents/articles/23.html

@@ -1,15 +1,15 @@

----- -title: A look at Symfony +title: "A look at Symfony" content-type: article timestamp: 1146483766 -tags: frameworks|php|cakephp +tags: "" ----- -<p>CakePHP is <span class="caps">THE</span> perfect <span class="caps">PHP</span> framework, so <em>we</em> don&#8217;t need anything else. Oh well, no. I personally love CakePHP, but I do believe other <span class="caps">PHP</span> frameworks can be interesting and maybe even useful, so today I thought I&#8217;d have a look at the <a href="/bookmarks/view/simfony/">Simfony Project</a>. This framework seems to be mentioned here and there on the Net in many different ways, someone said it can do wonders, some said it&#8217;s more advanced, others said something like <em>&#8220;qcodo sucks.. cake stinks.. symfony rocks!!!!!&#8221;</em>, so it <span class="caps">OUGHT</span> TO be pretty cool, definitely.</p> -<p style="float:left;"><img src="/img/pictures/symfony.gif" alt="" /> <em>Know thy enemy</em> someone said (OK, bad joke), so let&#8217;s have a look at this interesting alternative to CakePHP. <em>No dude, not another <span class="caps">MVC</span>-like, pseudo-Rails, <span class="caps">AJAX</span>-worshipping framework!</em> Yes, another one. Actually Symfony is more than that: while people <em>can</em> say CakePHP is similar to RoR for some features and for the strong <span class="caps">MVC</span> architecture, Symfony chose another road. Yes, <span class="caps">MVC</span> is still there, but the first thing I noticed after reading their <a href="http://www.symfony-project.com/tutorial/my_first_project.html">beginners&#8217; tutorial</a> was that one of the things which Symfony seems to use quite regularly (and Cake doesn&#8217;t)is code generators. Things like executing <code>symfony propel-build-sql</code> or even <code>symfony propel-generate-crud frontend post Post</code> from command line to generate your code automagically, which CakePHP &#8211; except for our little <em>bake</em> script &#8211; doesn&#8217;t use. <br /> +<p>CakePHP is <span class="caps">THE</span> perfect <span class="caps">PHP</span> framework, so <em>we</em> don&#8217;t need anything else. Oh well, no. I personally love CakePHP, but I do believe other <span class="caps">PHP</span> frameworks can be interesting and maybe even useful, so today I thought I&#8217;d have a look at the <a href="http://base--/bookmarks/view/simfony/">Simfony Project</a>. This framework seems to be mentioned here and there on the Net in many different ways, someone said it can do wonders, some said it&#8217;s more advanced, others said something like <em>&#8220;qcodo sucks.. cake stinks.. symfony rocks!!!!!&#8221;</em>, so it <span class="caps">OUGHT</span> TO be pretty cool, definitely.</p> +<p style="float:left;"><img src="http://base--/img/pictures/symfony.gif" alt="" /> <em>Know thy enemy</em> someone said (OK, bad joke), so let&#8217;s have a look at this interesting alternative to CakePHP. <em>No dude, not another <span class="caps">MVC</span>-like, pseudo-Rails, <span class="caps">AJAX</span>-worshipping framework!</em> Yes, another one. Actually Symfony is more than that: while people <em>can</em> say CakePHP is similar to RoR for some features and for the strong <span class="caps">MVC</span> architecture, Symfony chose another road. Yes, <span class="caps">MVC</span> is still there, but the first thing I noticed after reading their <a href="http://www.symfony-project.com/tutorial/my_first_project.html">beginners&#8217; tutorial</a> was that one of the things which Symfony seems to use quite regularly (and Cake doesn&#8217;t)is code generators. Things like executing <code>symfony propel-build-sql</code> or even <code>symfony propel-generate-crud frontend post Post</code> from command line to generate your code automagically, which CakePHP &#8211; except for our little <em>bake</em> script &#8211; doesn&#8217;t use. <br /> <em>See? Simfony is <span class="caps">MUCH</span> better and <span class="caps">MUCH</span> more advanced than Cake!</em> No, hang on a minute&#8230; I just listed one thing which Symfony has more than Cake, is there any more? Yes, there is, for now: i18n &#8211; internationalization. Symfony comes with native multi-lingual support and Cake doesn&#8217;t &#8211; yet &#8211; although there are rumors that i18n for Cake 2.0 is <em>almost done</em>. This is not speculation, re-read the sentence: First off I&#8217;m referring to Cake <em>2.0</em> (which means it will take a while) and also I read it in the <a href="https://trac.cakephp.org/wiki/Proposals/2.0ToDoList">Cake 2.0 ToDo List</a>.</p> <p>One of the most recurring and yet pointless critiques to CakePHP from Symfony enthusiasts is that the sites developed with CakePHP look terrible. I perfectly agree, look at <a href="http://www.h3rald.com/">this</a> and tell me if the developer is not a complete and hopeless idiot when it comes to design and look &#8216;n&#8217; feel!<br /> I do agree that some CakePHP sites (mine, mainly) don&#8217;t look too good, and probably the Cake Software Foundation should pay me to put it offline. I also agree that the Symfony website looks nice and is more pleasant to the eye than CakePHP&#8217;s, but I do hope that the old &#8220;design contest&#8221; doesn&#8217;t get forgotten&#8230;</p> -<p style="float:right;"><img src="/img/pictures/askeet.gif" alt="" /> The Symfony team also did something truly remarkable: a comprehensive tutorial, an advent calendar, some great free source code to download and a fully functional Web 2.0-compliant online application <em>all in one</em>. I&#8217;m referring to <a href="/bookmarks/view/askeet/">Askeet</a>, a Symfony-powered website which has been built from scratch using the framework and its development is well documented in <a href="http://www.symfony-project.com/askeet">twenty-four tutorials</a>. In one move these guys made an interesting website, some useful documentation and self promotion&#8230; what can I say: for next Christmas we&#8217;d better chain PHPnut, gwoo, nate &amp; the others to their chairs, close them in a small room and force them to code something like that in twenty-four days.<br /> +<p style="float:right;"><img src="http://base--/img/pictures/askeet.gif" alt="" /> The Symfony team also did something truly remarkable: a comprehensive tutorial, an advent calendar, some great free source code to download and a fully functional Web 2.0-compliant online application <em>all in one</em>. I&#8217;m referring to <a href="http://base--/bookmarks/view/askeet/">Askeet</a>, a Symfony-powered website which has been built from scratch using the framework and its development is well documented in <a href="http://www.symfony-project.com/askeet">twenty-four tutorials</a>. In one move these guys made an interesting website, some useful documentation and self promotion&#8230; what can I say: for next Christmas we&#8217;d better chain PHPnut, gwoo, nate &amp; the others to their chairs, close them in a small room and force them to code something like that in twenty-four days.<br /> If I were to mention something which Symfony did well I&#8217;d certainly say the <a href="http://www.symfony-project.com/content/documentation.html">documentation</a>. Screencasts, tutorials, advent calendars, a book, a wiki, <span class="caps">API</span> etc. etc. All done, and all good, I must admit that. The good news is that CakePHP is slowly catching up, and now the <a href="http://manual.cakephp.org">manual</a> looks pretty decent.</p> <p>OK, enough flattering and let&#8217;s talk about something I didn&#8217;t like about Symfony. I downloaded the thing and it turns out it&#8217;s 1.2MB in size, <em>a hell of a framework!</em> After extracting the beast I had a look inside and found three directories: <code>data</code>, <code>lib</code> and <code>bin</code>. Not bad. I opened <code>bin</code> and found the three magic symfony scripts, alright; I opened <code>data</code> and found nine directories, I opened <code>lib</code> (the real deal) and found 25 directories! These guys maybe never heard of something called <em>&#8220;an organized directory structure&#8221;</em>, or perhaps I&#8217;m just too used to Cake&#8217;s logic and essentiality.<br /> Browsing around I found something like 247 .dat files defining country names and currencies in all the languages of the world, script.aculo.us and prototype libraries, javascript calendars and other wonders&#8230; Weeeeheee! <br />
M contents/articles/24.htmlcontents/articles/24.html

@@ -1,12 +1,12 @@

----- -title: CakePHP 1.0 released +title: "CakePHP 1.0 released" content-type: article timestamp: 1146625560 -tags: cakephp|webdevelopment +tags: "cakephp|webdevelopment" ----- <p>As <a href="http://digg.com/programming/CakePHP_1.0_has_been_released">Digg</a>_ points out, the first <em>stable</em> version of CakePHP was released, yesterday. I should have posted yesterday about it, and no, I didn&#8217;t forget: I was just busy downloading the new version, have a look at the new site, talk to people etc.</p> <p>Anyhow, it&#8217;s ready, just baked and smells damn good. Go get it if you didn&#8217;t already, it&#8217;s available at <a href="http://cakeforge.org/frs/?group_id=23">the usual place</a>, even this time you won&#8217;t be disappointed. CakePHP now reached the 1.0 milestone, in a way which reminds me a lot about Mozilla Firefox: a lot of people were already using it <em>before</em> it went stable officially!</p> -<p style="float:left;"><img src="/img/pictures/CakePHP_1.0.png" alt="" /></p> +<p style="float:left;"><img src="http://base--/img/pictures/CakePHP_1.0.png" alt="" /></p> <p>The CakePHP Team has been humble enough not to declare their product <em>stable</em> before the time. I personally considered CakePHP stable <em>enough</em> since RC2&#8230; and considering that this site and many others have been built on alpha, beta and RC version, I think people can get an idea of Cake&#8217;s reliability.<br /> Nothing (too) new came out the oven this time: CakePHP 1.0 is mainly a bugfix release, with all the features we&#8217;ve learnt to love. It&#8217;s just <em>better_: a lot of things have been fixed, model associations work better, etc. etc. You can read the <a href="http://cakeforge.org/frs/shownotes.php?group_id=23&amp;release">changelog/announcement</a></em>id=85 or have a look below for a quick summary of the new features and most interesting fixes:</p> <pre><code>

@@ -42,8 +42,8 @@ Adding check for custom error class in app/.

Added check for AppController::appError(); will be called if this method is in AppController. </code></pre> -<p style="float:right;"><img src="/img/pictures/cakesite.png" alt="" /></p> +<p style="float:right;"><img src="http://base--/img/pictures/cakesite.png" alt="" /></p> <p>If you&#8217;re not too excited about this new release, maybe you should have a look at <a href="http://www.cakephp.org">www.cakephp.org</a>. Different? Damn right it is: it looks like someone listened to our prayers for a new website design. The merciful soul is <a href="http://www.nolimit-studio.com/">Armando Sosa</a>, the winner of CakePHP&#8217;s design contest. He&#8217;s a latin-american web designer who had the <span class="caps">GREAT</span> idea of thinking about an <em>innovative</em> design for the Cake site&#8230; Actually my dad didn&#8217;t think that way: <em>&#8220;That&#8217;s not new, that way of advertising was all over the place when I was a kid!&#8221;</em> And he&#8217;s right, Armando thought that a fifties-like template would have been perfect for Cake. Forget all the smooth, roundy-and-chubby, toons-like &#8220;official&#8221; Web 2.0 designs (beta), the new Cake site needs to stand out of the crowd&#8230;</p> -<p style="float:left;"><img src="/img/pictures/fonz.jpg" alt="" /></p> +<p style="float:left;"><img src="http://base--/img/pictures/fonz.jpg" alt="" /></p> <p><br /><br /> -<em>Heyyy! Well done guys&#8230;</em></p>+<em>Heyyy! Well done guys&#8230;</em></p>
M contents/articles/25.htmlcontents/articles/25.html

@@ -1,8 +1,8 @@

----- -title: Digg Effect - the day after +title: "Digg Effect - the day after" content-type: article timestamp: 1146794340 -tags: web20|webdevelopment|internet +tags: "web20|webdevelopment|internet" ----- <p>&#8230;So it turns out that my <a href="http://www.h3rald.com/articles/view/rails-inspired-php-frameworks/">last article</a> appeared on <a href="http://www.digg.com">Digg</a> homepage. <br /> This was quite a pleasant surprise: I didn&#8217;t expect that an article submitted to <em>my own site</em> could make it that far! I thought you&#8217;d need a relatively well-known website, mafia&#8217;s support, some divine intervention and a terrific amount of luck, but it seems that sometimes an interesting article about an interesting subject can be enough. I&#8217;ll probably write a more detailed report of what happened soon, in another article rather than a blog post, but for now I just wanted to post a short summary here.</p>

@@ -13,10 +13,10 @@ <p>Yes, they are similar &#8211; both were inspired by Rails, but Cake has gone further to differentiate themselves. Here&#8217;s a decent (but not great) overview of some frameworks: http://www.phpit.net/article/ten-different-php-frameworks/</p>

</blockquote> <p>At that point, I thought that another round up, perhaps more Cake-centric, was in order. The other reason was that in one of my recent <a href="http://www.h3rald.com/blog/view/23/">blog posts</a> I tried to compare CakePHP and Symfony, but obviously my emotions got in the way and in the end I noticed I was kinda <em>attacking</em> Symfony. That was a blog post though, and that&#8217;s half-allowed, but I felt that I should have written a slightly more objective <em>article</em> mentioning also all the other competitors.</p> <p>Anyhow, right when I went to submit my article to Digg, it turns out that another guy wrote <a href="http://digg.com/programming/5_Next_Generation_PHP_Frameworks">a similar round up</a>, which made it to Digg&#8217;s homepage. That was an annoying cohincidence, but in the end things didn&#8217;t go too bad: his roundup was more generic, while mine was more specific and detailed.</p> -<p style="float:left;"><img src="/img/pictures/dugg_detail.png" alt="" /></p> +<p style="float:left;"><img src="http://base--/img/pictures/dugg_detail.png" alt="" /></p> <p>After submitting my article the reaction wasn&#8217;t instantaneous&#8230; 5, 7, 10, 13 diggs in the first two hours. Then shortly I made it to 30 and when the 40th visitor dugg it my article was moved to the first page!<br /> I immediately noticed it when I refreshed my stats page: a minute before my girlfriend was here telling me &#8220;oh look, over 400 visitors&#8230; not too bad&#8221;. Then I refreshed the page and it said <em>539</em>, I refreshed again and said 600-something&#8230; eeep&#8230; Digg effect!</p> <p>A special praise goes to my new hosting company, <a href="http://www.bluehost.com/track/h3rald/CODE5">BlueHost</a>: the server didn&#8217;t go down and it managed the extra traffic fine! A good test for CakePHP as well, since I built this site with it.</p> <p>So here I am&#8230; over 5000 visitors read my article, about 600 people dugg it, nearly 40 people commented it on digg.com and 20 directly on my site. And &#8211; except for the usual <em>Rails-is-better-than-anything-else</em> comments &#8211; they were generally positive. Over 250 people bookmarked on del.icio.us and many blogs mentioned it in many different countries.</p> <p>Money? Didn&#8217;t make much with adsense at all: programmers <em>don&#8217;t</em> click on ads!<br /> -Bandwidth? About 1GB was gone in the first five hours, now is obviously slowing down: oh well, I still have another 398GB available till the end of the month :P</p>+Bandwidth? About 1GB was gone in the first five hours, now is obviously slowing down: oh well, I still have another 398GB available till the end of the month :P</p>
M contents/articles/26.htmlcontents/articles/26.html

@@ -1,14 +1,14 @@

----- -title: bake.php - Easy baking for lazy folks +title: "bake.php - Easy baking for lazy folks" content-type: article timestamp: 1146922980 -tags: cakephp|frameworks +tags: "cakephp|frameworks" ----- <p>When I first tried Ruby on Rails I was literally amazed by the <em>generator</em> script. Yes, I was young and inexperienced then (six/seven months ago), but you must admit that getting a controller, a model, all the basic views generated automatically by</p> <p><code>rails script/generator scaffold Posts</code></p> <p>is not a bad thing. Especially if the same script allows you to create model, views and controller separately and other things. <a href="http://www.symfony-project.com/">Symfony</a> and <span class="caps">PHP</span> on Trax already tried to port this functionalities, with mixed results. What about Cake? Oh well, yes, we do have something like that&#8230; something rather different, but still something: the <code>bake.php</code> script.<br /> This cute little thing is located in the <code>cake/scripts/</code> folder and can be used &#8211; hear, hear &#8211; from command line. You can run Ruby and Perl scripts, so yes, you can actually run <span class="caps">PHP</span> from command line, although it&#8217;s not its primary purpose.</p> -<p><img src="/img/pictures/bake.jpg" alt="" /></p> +<p><img src="http://base--/img/pictures/bake.jpg" alt="" /></p> <p>Cool then, let&#8217;s open a *nix shell, Windows command prompt, etc. etc., go into the <code>cake/scripts/</code> folder and run:</p> <p><code>php bake.php</code></p> <p>Assuming that the php executable is in your <em><span class="caps">PATH</span></em> environment variable &#8211; if not, either you add it or you&#8217;ll have to type something like:</p>

@@ -104,4 +104,4 @@ <code>php bake.php model Posts</code><br />

<code>php bake.php model Posts</code><br /> <code>php bake.php controller Posts helper +Html -Time,Javascript</code><br /> <code>php bake.php model Posts assoc +hasMany comments,tags</code></p> -<p>Bah&#8230; just some random thoughts. How about custom-made generators (<a href="http://wiki.rubyonrails.org/rails/pages/AvailableGenerators">Rails-inspired</a>)?</p>+<p>Bah&#8230; just some random thoughts. How about custom-made generators (<a href="http://wiki.rubyonrails.org/rails/pages/AvailableGenerators">Rails-inspired</a>)?</p>
M contents/articles/27.htmlcontents/articles/27.html

@@ -1,10 +1,10 @@

----- -title: rdBaker - Bake your CakePHP application online +title: "rdBaker: Bake your CakePHP application online" content-type: article timestamp: 1147081800 -tags: cakephp +tags: "cakephp" ----- -<p>Right after my <a href="/blog/view/26">last blog post</a> I decided to log on #cakephp on irc.freenode.org as usual, and gwoo pops in and says &#8220;h3raLd, you didn&#8217;t review rdBaker yet!&#8221;<br /> +<p>Right after my <a href="http://base--/blog/view/26">last blog post</a> I decided to log on #cakephp on irc.freenode.org as usual, and gwoo pops in and says &#8220;h3raLd, you didn&#8217;t review rdBaker yet!&#8221;<br /> That&#8217;s right, I didn&#8217;t yet, so I may as well do it today.</p> <p>I remember hearing about rdBaker months ago, waaay before CakePHP 1.0, way before the RCs, I remember someone mentioning it on CakePHP user group in right after the bake.php script was created. <em>&#8220;How about having an online baking utility?&#8221;</em> &#8211; and that&#8217;s precisely what rdBaker is, a more <span class="caps">PHP</span>-ish version of bake.php, which runs like any other <span class="caps">PHP</span> scripts: in your browser.</p> <p>This cute little thing is obviously available for free on <a href="http://cakeforge.org/frs/?group_id=13&amp;release_id=74">CakeForge</a> and is part of <a href="http://www.rd11.com">gwoo</a> &#8217;s <a href="http://cakeforge.org/projects/rdos/">rdOpenSource</a> project which includes various other Cake-powered applications.<br />

@@ -16,7 +16,7 @@ 2. chmod /cake_install/rdBaker/tmp to 0777<br />

3. launch http://localhost/cake_install/rdBaker/</p> </quote> <p>Not too hard, innit?</p> -<p><img src="/img/pictures/rdbaker.jpg" alt="" /></p> +<p><img src="http://base--/img/pictures/rdbaker.jpg" alt="" /></p> <p>Good. So you try accessing something like <code>http://localhost/php/test/cakephp/cake_test/rdBaker/</code> (that&#8217;s on my own local <span class="caps">WAMP</span> server) and you&#8217;ll get a nice page asking you to &#8220;supply your ingredients&#8221; via a simple form. <br /> Unlike its command line cousin, rdBaker doesn&#8217;t require you to fill in <em>all</em> the fields, but just the full path to the save directory (which is normally already filled in) and of course the name of the model (Post, User, Comment).<br /> Then you can select the type of output and choose whether you want to generate an empty controller, a scaffolded one or the <em>full</em> option including all the most common <acronym title="Create, Retrieve, Update, Delete"><span class="caps">CRUD</span></acronym> methods.<br />
M contents/articles/29.htmlcontents/articles/29.html

@@ -1,11 +1,11 @@

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

@@ -1,12 +1,12 @@

----- -title: Watch out: CakePHP screencasts +title: "Watch out: CakePHP screencasts" content-type: article timestamp: 1148132820 -tags: cakephp|tutorial +tags: "cakephp|tutorial" ----- <p>Tutorials are great, articles are helpful, manuals are essential and the <span class="caps">API</span> is your best friend, but there&#8217;s still something missing there&#8230; Unfortunately podcasts are not yet available, but the CakePHP team is proud to announce the creation of two <a href="http://cakephp.org/pages/screencasts">screencasts</a> in an effort to help new bakers familiarizing with CakePHP&#8217;s concepts. <br /> -This is old news now, the screencasts section came together with the <a href="/blog/view/24">site overhaul</a> but I only got a chance to take a look at them (one of them only, to be totally honest) recently, and so here&#8217;s a spoil&#8230; erhm, a <em>detailed</em> description of John Anderson&#8217;s screencast about the <a href="http://manual.cakephp.org/chapter/18">Blog Tutorial</a>.</p> -<p style="float:left;"><img src="/img/pictures/CakePHP_1.0.png" alt="" /></p> +This is old news now, the screencasts section came together with the <a href="http://base--/blog/view/24">site overhaul</a> but I only got a chance to take a look at them (one of them only, to be totally honest) recently, and so here&#8217;s a spoil&#8230; erhm, a <em>detailed</em> description of John Anderson&#8217;s screencast about the <a href="http://manual.cakephp.org/chapter/18">Blog Tutorial</a>.</p> +<p style="float:left;"><img src="http://base--/img/pictures/CakePHP_1.0.png" alt="" /></p> <p>There&#8217;s something I&#8217;ll never do: a screencast. Recording every mouse movement, every word or piece of code typed in half an hour? No way! And what happens if I mistype something? People will keep pointing out the fact that I was starting to type <code>&lt;/h2&gt;</code> to close a <code>&lt;/h1&gt;</code> tag, or that I waited an eternity like five full seconds before deciding what to do. I guess I&#8217;m quite paranoid&#8230; John did it, and he did it well. Using just bash, vim and Safari he was able to record an excellent 30-minutes screencast featuring the blog tutorial. <br /> Before people start complaining that the blog tutorial should be completed in fifteen minutes, keep in mind that John&#8217;s screencast is meant to show everything clearly to new users, via a trial and error approach if necessary.</p> <p>Here&#8217;s what happens in the screencast, nothing new if your read the blog tutorial, but still interesting, especially if you&#8217;re new to Cake. Unfortunately there&#8217;s no audio, but the video talks by itself and John will occasionally write some comments here and there.</p>

@@ -80,4 +80,4 @@ <li>edit config/routes.php</li>

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

@@ -1,24 +1,24 @@

----- -title: Writing Tools +title: "Writing Tools" content-type: article timestamp: 1148561820 -tags: writing|tools +tags: "writing|tools" ----- <p>Since in these days (and even more in near future) I&#8217;m really writing a lot I thought it would be good to share my thoughts on some writing programs and tools I started using for writing these blog posts, articles, and more.</p> <p>I&#8217;m going to examine a few applications which I find useful for different tasks, since I recently came to the conclusion that I cannot use the same editor for everything I write: some magazines require a .doc document, others want just plain text, my site uses the truly excellent <a href="http://http://www.textism.com/">textile</a> markup, zZine Magazine used BBcode, other site use their own &#8220;proprietary&#8221; styles and so on. One could just give up and use Notepad &#8211; or better, <a href="http://notepad-plus.sourceforge.net/uk/site.htm">Notepad++</a> &#8211; for everything, while someone else like me might opt for various applications according to the task.</p> <p>One of the few essential requirements for a <em>writer</em> is some spell checking functionality. Sad but true, this is enough to leave the most popular multi-purpose programming editor out: programmers don&#8217;t need a spell checker, a highlighter for their favourite language is more than enough. <br /> I will not mention all the applications I tried to find the Perfect Editor, and I&#8217;ll just focus on the programs I ended up using in the end. Some may be well known, others may not, anyway, here we go.</p> -<p style="float:left;"><img src="/img/pictures/wp/bill.jpg" alt="" /></p> +<p style="float:left;"><img src="http://base--/img/pictures/wp/bill.jpg" alt="" /></p> <p><a href="http://www.microsoft.com/office/preview/default.mspx">Word 2007 Beta 2</a> &#8211; Yes, I know that OpenOffice is free and OO Writer works great, but perhaps at work you&#8217;ll be asked to use MS Word. Some editors may require that as well, and their templates may not be correctly rendered by OpenOffice, so in the end you&#8217;ll still have to use Redmond&#8217;s most popular Word Processor &#8211; <em>if you have it</em>. If you got it with your laptop (I didn&#8217;t) or your auntie gave you 300$ to buy it you&#8217;re all set, but if you don&#8217;t? <br /> Oh well, yes, OpenOffice is the right choice perhaps, but at least until February 2007 uncle Bill lets you try the bleeding (quite literally) edge of all the commercial word processors: Word 2007 beta 2. You can download the whole Office Suite (and more) for free, <a href="http://www.microsoft.com/office/preview/beta/overview.mspx">run</a>. I did it yesterday and well, it&#8217;s nice to try this brand-new piece of eye candy. the interface is completely new, you won&#8217;t find the usual drop down menu but with some imagination you&#8217;ll manage to save/create/open a new document by clicking on the big roundy Office logo on the top left corner. More user friendly? Perhaps, once you get used to it. It <span class="caps">STILL</span> doesn&#8217;t have a tabbed interface, so you <span class="caps">STILL</span> have to clutter your taskbar if you want to keep more than one document open. <br /> At any rate, it does the job, exactly in the same way as it did in the previous versions. <br /> I use it if people ask me to, and for writing stuff which doesn&#8217;t need to be formatted with a particular markup or style but rather look nice and have pictures embedded.</p> -<p style="float:right;"><img src="/img/pictures/wp/writely.gif" alt="" /></p> -<p><a href="/bookmarks/view/writely/">Writely</a> &#8211; Now this is much more fun. A <em>online</em>, <span class="caps">AJAX</span>-powered word processor recently acquired by Google. IT&#8217;s currently in closed beta, but I was lucky enough to get an account before they closed registrations and I can invite people to use it.<br /> +<p style="float:right;"><img src="http://base--/img/pictures/wp/writely.gif" alt="" /></p> +<p><a href="http://base--/bookmarks/view/writely/">Writely</a> &#8211; Now this is much more fun. A <em>online</em>, <span class="caps">AJAX</span>-powered word processor recently acquired by Google. IT&#8217;s currently in closed beta, but I was lucky enough to get an account before they closed registrations and I can invite people to use it.<br /> It&#8217;s nice. It&#8217;s nice if you have to work with MS Word documents or create <span class="caps">PDF</span> files, and it supports the most essential features offered by desktop word processors, plus some more, really convenient functionalities. <br /> It can import MS Word documents pretty well and also any kind of text file, so that you can edit it online anytime and anywhere. You can star, tag, archive, edit and delete your documents in a really easy way and &#8211; which is one of its killer features &#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.<br /> Another really wonderful feature is <em>version support</em>. 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 <em>repository</em> for my articles and writings.</p> -<p style="float:left;"><img src="/img/pictures/wp/cream.png" alt="" /></p> -<p><a href="/bookmarks/view/cream-editor">Cream</a> &#8211; I discovered this a while ago, and it&#8217;s perhaps the most multi-purpose editor out there. It&#8217;s built on top of Vim (respect+) but it has a friendlier interface by default, and that&#8217;s exactly what I&#8217;m using right now for typing this post. The reasons are simple: it supports <span class="caps">ANY</span> kind of file format and any character encoding. There&#8217;s an highlighter for everything, including BBcode and textile, and of course you can make your own. It also includes spell checking on-the-fly which is missing in many simple editors. <br /> +<p style="float:left;"><img src="http://base--/img/pictures/wp/cream.png" alt="" /></p> +<p><a href="http://base--/bookmarks/view/cream-editor">Cream</a> &#8211; I discovered this a while ago, and it&#8217;s perhaps the most multi-purpose editor out there. It&#8217;s built on top of Vim (respect+) but it has a friendlier interface by default, and that&#8217;s exactly what I&#8217;m using right now for typing this post. The reasons are simple: it supports <span class="caps">ANY</span> kind of file format and any character encoding. There&#8217;s an highlighter for everything, including BBcode and textile, and of course you can make your own. It also includes spell checking on-the-fly which is missing in many simple editors. <br /> Whenever I have to write something which requires some particular formatting or markup I use Cream, it does the job pretty well, and whenever I feel brave I can always switch to &#8220;expert&#8221; view and challenge my vi skills ;)</p> -<p>That&#8217;s pretty much what I use for writing articles, posts, and other documents&#8230; I tried other alternatives like RoughDraft or similar programs but I&#8217;m now really happy with these three applications. Commercial &#8220;writer&#8217;s programs&#8221;? There are some out there, but who wants to spend 40$ or more for something which offer less than MS Word when you can use OpenOffice and Writely for free?</p>+<p>That&#8217;s pretty much what I use for writing articles, posts, and other documents&#8230; I tried other alternatives like RoughDraft or similar programs but I&#8217;m now really happy with these three applications. Commercial &#8220;writer&#8217;s programs&#8221;? There are some out there, but who wants to spend 40$ or more for something which offer less than MS Word when you can use OpenOffice and Writely for free?</p>
M contents/articles/33.htmlcontents/articles/33.html

@@ -1,8 +1,8 @@

----- -title: Information Mapping +title: "Information Mapping" content-type: article timestamp: 1149221400 -tags: productivity|writing +tags: "productivity|writing" ----- <p>As I thought, my job also represents a great opportunity to learn new things. I don&#8217;t mean only new technical stuff, but also a great deal of tips, best practices and methods to efficiently write documentation material in proper English. Some theory about <a href="http://www.infomap.com/">Information Mapping</a> was by far the most interesting topic I learnt about this week.</p> <h3>What is Information Mapping?</h3>
M contents/articles/34.htmlcontents/articles/34.html

@@ -1,16 +1,16 @@

----- -title: Akelos Framework: too good to be true? +title: "Akelos Framework: too good to be true?" content-type: article timestamp: 1149931560 -tags: frameworks|php|webdevelopment|review +tags: "frameworks|php|webdevelopment|review" ----- -<p>Someone recently added a comment to my article about <a href="/articles/rails-inspired-php-frameworks/">Rails-inspired <span class="caps">PHP</span> frameworks</a> pointing out that I forgot another Rails-like framework, in my round-up. He obviously posted a link to this rather mysterious Rails port in <span class="caps">PHP</span> and spam or not, I&#8217;d like to thank this guy for letting me know of the existance of <a href="/bookmarks/view/akelos-framework">Akelos</a>, a new <span class="caps">PHP</span> framework which seems simply too good to be true.</p> -<p style="float:left;"><img src="/img/pictures/frameworks/akelos_framework.png" alt="" /></p> +<p>Someone recently added a comment to my article about <a href="http://base--/articles/rails-inspired-php-frameworks/">Rails-inspired <span class="caps">PHP</span> frameworks</a> pointing out that I forgot another Rails-like framework, in my round-up. He obviously posted a link to this rather mysterious Rails port in <span class="caps">PHP</span> and spam or not, I&#8217;d like to thank this guy for letting me know of the existance of <a href="http://base--/bookmarks/view/akelos-framework">Akelos</a>, a new <span class="caps">PHP</span> framework which seems simply too good to be true.</p> +<p style="float:left;"><img src="http://base--/img/pictures/frameworks/akelos_framework.png" alt="" /></p> <p>Let me just spend a few words more before writing more about it though. First off, it&#8217;s not available yet. OR at least it doesn&#8217;t seem to be: the author is planning to release his work to the Open Source community but&#8230; well, he&#8217;s a bit concerned about the current &#8220;<span class="caps">PHP</span> Framework War&#8221;: he wouldn&#8217;t like to end up like <a href="http://subway.python-hosting.com/">Subway</a> or just be slagged off by those merciless reviewers who enjoy write round-ups and comparisons about frameworks. <a href="http://www.bermi.org/page/about_me">Bermi Ferrer</a> is &#8220;just&#8221; a talented <span class="caps">PHP</span> developer who decided to create his own framework and he really enjoyed doing so, nothing more, nothing less.</p> <p><em>&#8220;I considered other <span class="caps">PHP</span> ports of Ruby on Rails, but we could not find all we needed on them. One feature that I needed on the core was internationalization and Unicode support, so I decided to roll my own framework trying to keep most of the original rails interface so most of its documentation could work for it.&#8221;</em></p> <p>Where did I hear that? Nothing new: it&#8217;s always the same story of frameworks not being as we want them to be etc., it&#8217;s human. And yes, it&#8217;s <em><strong>another</strong></em> attempt to port Ruby on Rails to <span class="caps">PHP</span>, and a damn good one &#8212; or so it seems.</p> <p><small>Before proceeding any further, I&#8217;d like to write a short warning for a few people who may or may not want to pop in and start commenting about the Rails-is-better-than-any-<span class="caps">PHP</span>-clone issue: <strong>If I see a single comment slagging off this framework (or any other) only because it&#8217;s a port of Rails to <span class="caps">PHP</span>, it will be deleted, may it be David Heinemeier Hansson himself</strong>. Stop it, no seriously, I think it will be counter productive for Rails in the end: I really like RoR and I love the way it works, and yes, I think Ruby is definitely the best language to do that sort of things, <span class="caps">EVERYBODY</span> <span class="caps">KNOWS</span> <span class="caps">THAT</span>. Please, please, save us poor <span class="caps">PHP</span> developers the usual preaching.</small></p> -<p style="float:right;"><img src="/img/pictures/frameworks/bermi_ferrer.png" alt="" /></p> +<p style="float:right;"><img src="http://base--/img/pictures/frameworks/bermi_ferrer.png" alt="" /></p> <p>Right, back to Akelos now. Curious as I am I immediately checked out the official page and all i found was a pretty long list of features which made me dribble, literally&#8230; ooops!</p> <p>Let&#8217;s just quote the most juicy ones, shall we?</p> <p>Active Record [&#8220;Model&#8221;]</p>

@@ -61,4 +61,4 @@ <li><strong>Distributed sessions using databases</strong></li>

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

@@ -1,17 +1,17 @@

----- -title: ITALIA - CAMPIONE DEL MONDO! +title: "ITALIA: CAMPIONE DEL MONDO!" content-type: article timestamp: 1152688740 -tags: italy +tags: "italy" ----- <p><em><strong>Italy has won the World Cup!</strong></em></p> <p>It doesn&#8217;t matter if Zidane first scored on a totally unfair penalty kick at the 7th minute and then, totally out of his mind, headbutted Materazzi&#8230; WE <span class="caps">WON</span>, <span class="caps">AND</span> WE <span class="caps">KICKED</span> <span class="caps">THEIR</span> <span class="caps">ASS</span>, end of story :)</p> <div align="center"> -<p><img src="/img/italy/worldcup.jpg" alt="" /> </div></p> +<p><img src="http://base--/img/italy/worldcup.jpg" alt="" /> </div></p> <blockquote> -<p style="float:left;"><img src="/img/italy/grosso.jpg" alt="" /></p> +<p style="float:left;"><img src="http://base--/img/italy/grosso.jpg" alt="" /></p> <p>&#8220;Italy beat France 5-3 in a penalty shoot-out to win the World Cup after an absorbing 1-1 draw in Berlin.</p> -<p style="float:right;"><img src="/img/italy/italy1.jpg" alt="" /></p> +<p style="float:right;"><img src="http://base--/img/italy/italy1.jpg" alt="" /></p> <p>Fabio Grosso scored the winning goal after France&#8217;s David Trezeguet missed.</p> <p>Playing his last game before retiring, Zinedine Zidane&#8217;s career ended in disgrace after he was sent off for crazily headbutting Marco Materazzi.</p> <p>Zidane had put France ahead early on with a coolly-taken chipped penalty, before Materazzi levelled with a header from an Andrea Pirlo corner.<br />
M contents/articles/37.htmlcontents/articles/37.html

@@ -1,19 +1,19 @@

----- -title: Some updates +title: "Some updates" content-type: article timestamp: 1153789620 -tags: website|cakephp +tags: "website|cakephp" ----- <p>Quite a bit of time passed since the last blog post, and I&#8217;m actually sorry about that, but as I thought, I don&#8217;t have as much free time as I used to be. Work is work, after all!<br /> This post will be multipurpose as actually I bluid up a few things to write about in the last few days&#8230; erhm, ok, <em>weeks</em>.</p> <h3>New Website Design</h3> -<p>Something different eh? Yep, definitely! Some time ago I started a small project called <a href="/projects/view/h3rald-redesign">h3raLd.com Re-design</a> hoping that some <span class="caps">GFX</span> guru could provide a new template for this website, and actually in the end I decided to accept the work of <em><strong>Bartus F. Teipel</strong></em> a Brazilian CakePHP enthusiast.<br /> +<p>Something different eh? Yep, definitely! Some time ago I started a small project called <a href="http://base--/projects/view/h3rald-redesign">h3raLd.com Re-design</a> hoping that some <span class="caps">GFX</span> guru could provide a new template for this website, and actually in the end I decided to accept the work of <em><strong>Bartus F. Teipel</strong></em> a Brazilian CakePHP enthusiast.<br /> Bartus is obviously (<span class="caps">MUCH</span>) more talented than me when it comes to design, and I was amazed at the quality of the template he provided, in a really short time. <br /> Unfortunately he didn&#8217;t yet provide a link to his main website/portfolio, but for now all I can show you is his website for party pics, <a href="http://www.circuscircus.com.br/">CircusCircus</a>.</p> <p>The new template sports a more contemporary Web2.0-ish look which I like a lot, and Bartus used libraries like <a href="http://prototype.conio.net/">prototype</a>, <a href="http://moofx.mad4milk.net/">moo.fx</a> and <a href="http://www.html.it/articoli/niftycube/index.html">Nifty Corners Cube</a> for the <span class="caps">AJAX</span> effects and functionalities. <br /> A really outstanding work, thanks Bartus!</p> <h3>The CakePHP Herald project has been completed</h3> -<p>With my <a href="http://www.h3rald.com/articles/view/cakephp-first-bite/">latest article</a> about CakePHP published on SitePoint, the <a href="/projects/view/cakephp-herald/">CakePHP Herald</a> project was completed.<br /> +<p>With my <a href="http://www.h3rald.com/articles/view/cakephp-first-bite/">latest article</a> about CakePHP published on SitePoint, the <a href="http://base--/projects/view/cakephp-herald/">CakePHP Herald</a> project was completed.<br /> I must say that I really enjoyed writing all those articles about CakePHP, and the only thing I regret is not to have written anything (yet) about some more advanced topic about CakePHP. This was mostly due to &#8211; again &#8211; lack of time to focus on advanced topic and produce some quality examples.</p> <p>However, judging by the positive feedback I received about the articles, I am really happy of the final result: even more people discovered the power of CakePHP and became <em>bakers</em>. Happy baking to all of you!</p> <p><em>So&#8230; no more articles about Cake?</em> Maybe not for a while, I think I&#8217;ll be rather busy in the following months. Curious? Read on :-)</p>

@@ -23,4 +23,4 @@ <blockquote>

<p>&#8220;[&#8230;]In other news, some new articles were published on Sitepoint <sup class="footnote" id="fnr3"><a href="#fn3">3</a></sup> and in the International <span class="caps">PHP</span> magazine <sup class="footnote" id="fnr4"><a href="#fn4">4</a></sup>. Fabio Cevasco <sup class="footnote" id="fnr5"><a href="#fn5">5</a></sup> is the man behind these articles. Together with Fabio, we will be writing a book that will be published [&#8230;]&#8221;</p> </blockquote> <p>After all this time I spent <em>trying desperately not to say a word about it</em> they came out and heralded it out of nowhere. Sigh&#8230; they ruined the surprise effect! Oh well, it&#8217;s too late now, isn&#8217;t it?</p> -<p>So yes, when I say that I&#8217;m spending at least 60% of my time (at work and at home) writing I really mean it. The rest? Well, I do have a lovely girlfriend after all!!!</p>+<p>So yes, when I say that I&#8217;m spending at least 60% of my time (at work and at home) writing I really mean it. The rest? Well, I do have a lovely girlfriend after all!!!</p>
M contents/articles/38.htmlcontents/articles/38.html

@@ -1,10 +1,10 @@

----- -title: Akelos is real, after all... +title: "Akelos is real, after all..." content-type: article timestamp: 1154475180 -tags: frameworks|php|webdevelopment|review +tags: "frameworks|php|webdevelopment|review" ----- -<p>Bermi Ferrer kept his promise, and even if a few were skeptic on the <a href="/blog/view/34/">pre-announced</a> features of his upcoming Akelos framework, last week he sent me a &#8220;development preview&#8221; and a few days ago he opened the development <span class="caps">SVN</span> repository to the public:</p> +<p>Bermi Ferrer kept his promise, and even if a few were skeptic on the <a href="http://base--/blog/view/34/">pre-announced</a> features of his upcoming Akelos framework, last week he sent me a &#8220;development preview&#8221; and a few days ago he opened the development <span class="caps">SVN</span> repository to the public:</p> <p><a href="svn://akelos.org/trunk" target="_blank">svn://akelos.org/trunk</a></p> <p>Go, get it: it&#8217;s worthwhile (see below).</p> <p>&#8220;[&#8230;] The Akelos Framework is an open-source port of Ruby on Rails to the <span class="caps">PHP</span> programming language.<br />

@@ -12,8 +12,8 @@ The main goal of the Akelos Framework is to help programmers to build multilingual database-backed web applications according to the Model-View-Control pattern. It lets you write less code by favoring conventions over configuration.&#8221;</p>

<p>At the Akelos Framework Features page you can find detailed information about what has been already implemented into the framework.</p> </blockquote> <p>I think it says it all, well almost. Some people will undoubtedly be disgusted by yet-another-hopeless-Rails-clone: <em>not again!</em> I hear them crying&#8230;</p> -<p>Well, yeah, I think this &#8211; to be honest &#8211; should be the last attempt someone makes to port Rails to <span class="caps">PHP</span> or at least port <em>some features and the overall philosophy</em>, like <a href="/bookmarks/view/cakephp">CakePHP</a> did: there are honestly too many for one single language. Look at Python, <a href="http://www.djangoproject.com/">Django</a> seems to be the only &#8220;Rails-inspired&#8221; framework available and everyone is happy with it, while as a general rule <span class="caps">PHP</span> folks are never happy with what they already got.</p> -<p>Bermi is undoubtedly one of them, and that&#8217;s the reason he decided to code his very own Rails-inspired framework for <span class="caps">PHP</span>, which is, to date, the most remarkable of the ones I left out (it wasn&#8217;t available at the time) in my <a href="/articles/rails-inspired-php-frameworks/">article</a>.</p> +<p>Well, yeah, I think this &#8211; to be honest &#8211; should be the last attempt someone makes to port Rails to <span class="caps">PHP</span> or at least port <em>some features and the overall philosophy</em>, like <a href="http://base--/bookmarks/view/cakephp">CakePHP</a> did: there are honestly too many for one single language. Look at Python, <a href="http://www.djangoproject.com/">Django</a> seems to be the only &#8220;Rails-inspired&#8221; framework available and everyone is happy with it, while as a general rule <span class="caps">PHP</span> folks are never happy with what they already got.</p> +<p>Bermi is undoubtedly one of them, and that&#8217;s the reason he decided to code his very own Rails-inspired framework for <span class="caps">PHP</span>, which is, to date, the most remarkable of the ones I left out (it wasn&#8217;t available at the time) in my <a href="http://base--/articles/rails-inspired-php-frameworks/">article</a>.</p> <h3>Confirmed Features &amp; Contents</h3> <p>So well, although I didn&#8217;t really have a proper chance to play with Akelos I can certainly herald some of its &#8211; verified, this time &#8211; features.</p> <p>For one, it&#8217;s huge. Take Cake, add <em>every excellent, useful third party library or class you can possibly thing of</em> and you&#8217;ll get Akelos. No kidding. The unzipped source of the whole framework is a massive 16MB, 8.5 of which constitute the <code>vendors</code> folder. What&#8217;s in it? Well, all this:</p>

@@ -42,7 +42,7 @@ <li>FileUploader (by the author, using prototype)</li>

<li>Window</li> <li>EventSelectors</li> </ul> -<p style="float:left;"><img src="/img/pictures/frameworks/akelos_framework_logo.gif" alt="" /></p> +<p style="float:left;"><img src="http://base--/img/pictures/frameworks/akelos_framework_logo.gif" alt="" /></p> <p>Good, well, kind of: that&#8217;s just what <em>others</em> did, but it&#8217;s worth noting that it&#8217;s all there and &#8211; apparently &#8211; integrated with the framework, hopefully not too tightly. But people are fussy, and do not get excited easily anymore, long gone are the early days of Rails, when the whole Internet shake at hearing about <em>code generators</em>&#8230; Aye, there are in Akelos as well, of course!</p> <p>Coming to the more juicy stuff, <em>lo&#8217; and behold, ye contents of /lib folder (with comments):</em></p> <ul>

@@ -81,4 +81,4 @@ <p>As I said earlier, Akelos looks like <em>CakePHP on steroids</em>: agreed, the Cake philosophy of &#8220;no we-may-use-it code in the trunk&#8221; has been <em>completely</em> (and intentionally) ignored, but this is our chance to peek at what CakePHP could have become if such philosophy didn&#8217;t become a lifestyle for the Cake Dev Team. <br />

Akelos code is Rails-inspired, so yes, it&#8217;s <em>very</em> similar to Cake, although with some rough edges and some re-used parts, but it&#8217;s the work of <span class="caps">ONE</span> person with no community support (yet), don&#8217;t forget. Remarkable.</p> <p>And he needs co-developers, by the looks of it, so there you are then: there&#8217;s <em>your</em> chance!</p> <p>My personal opinion about it? Well, I think Akelos can learn from CakePHP and vice-versa: a merge? Well, at least it would reduce the number of Rails-inspired framework for <span class="caps">PHP</span> and <em>possibly</em> meet the needs of more people: those who want just the essentials, as a framework, and those who like to be <em>virtually almighty</em> and be able to do anything, <em>if they wanted to</em>.</p> -<p>Two flavours of the same framework? <em>CakePHP</em> and <em>cAkePHP</em> (note the case)? Bah, let&#8217;s stop raving now, shall we?</p>+<p>Two flavours of the same framework? <em>CakePHP</em> and <em>cAkePHP</em> (note the case)? Bah, let&#8217;s stop raving now, shall we?</p>
M contents/articles/39.htmlcontents/articles/39.html

@@ -1,13 +1,13 @@

----- -title: Why I like Netvibes +title: "Why I like Netvibes" content-type: article timestamp: 1158551460 -tags: web20|ajax|review +tags: "web20|ajax|review" ----- <p>The so-called &#8220;<span class="caps">AJAX</span> Start Pages&#8221; are not a new concept anymore, and like for almost any other offspring of Web 2.0 there is more than one to chose from. Hence the increasing number of comparative reviews on the Web nowadays (Yes, I&#8217;m guilty of that too). I soon learnt that for any &#8220;good and useful thing&#8221; on the web there are at least <em>n</em> clones: consider for example social bookmarking, community-powered news sites, php frameworks&#8230;<br /> And no, you can&#8217;t use the word clone because it has a strong negative connotation nowadays so let&#8217;s just say that whenever someone comes up with a new idea, others examine it, process it and in a few weeks (days?) some <em>very, very similar application</em> comes out, and it&#8217;s <em>better</em> than the previous one. <br /> Now, I don&#8217;t know exactly whether <a href="http://www.netvibes.com/">NetVibes</a> was one of the first <span class="caps">AJAX</span> Start Pages created or not, but at any rate &#8211; in my very, very, very humble opinion, is the most advanced and the most usable of <a href="http://www.techcrunch.com/2005/12/07/ajax-desktops-wont-stop/">the lot</a>, and an essential tool for lazy folks like me who want to keep up-to-date with what&#8217;s going on without having to visit dozen of websites everyday.</p> -<p style="float:left;"><img src="/img/pictures/netvibes.jpg" alt="" /></p> +<p style="float:left;"><img src="http://base--/img/pictures/netvibes.jpg" alt="" /></p> <p>I can see people jumping up and down shouting &#8220;Pageflakes is better&#8221;, &#8220;Protopage kicks a$$&#8221; etc. etc. Well, yes, probably, as you like: different people like different things, and when it comes to <span class="caps">AJAX</span> Start Pages there&#8217;s really a lot to choose from: 3spots has an excellent (and complete, I believe) <a href="http://3spots.blogspot.com/2006/03/ajax-or-flash-startpages-or-homepages.html">list</a> of all the start pages currently available on the Net, so yes, you can try them out yourself and make out your mind :)</p> <p>I made up my mind long ago after experimenting a few of those. Why Netvibes? OK, let&#8217;s see:</p> <ol>

@@ -19,4 +19,4 @@ <li><strong>Public <span class="caps">API</span> for modules</strong>: For those who &#8211; unlike me &#8211; has some proper free time and would like to develop their own module, the <a href="http://eco.netvibes.com/developers/">Netvibes Mini Module <span class="caps">API</span></a> is public&#8230;</li>

<li><strong>Ecosystem</strong> : Netvibes <a href="http://eco.netvibes.com/">Ecosystem</a> includes hundreds of modules and podcasts and thousands of feeds and tabs which can be integrated into any Netvibes page with a single click. Some of my favourites: <a href="http://eco.netvibes.com/modules/3492/xe.com-currency-converter">XE</a> Currency Converter, <a href="http://eco.netvibes.com/modules/3709/quick-translator">Quick Translator</a>, <a href="http://eco.netvibes.com/modules/6776/google-map">Google Map</a> <a href="http://eco.netvibes.com/modules/91/daily-cartoons">Daily Cartoons</a> and <a href="http://eco.netvibes.com/modules/6/bitty-browser">Bitty Browser</a>. <br /> CakePHP feeds? <a href="http://eco.netvibes.com/?type=all&amp;q=cakephp">Loads</a>!</li> </ol> -<p>Enough?</p>+<p>Enough?</p>
M contents/articles/40.htmlcontents/articles/40.html

@@ -1,12 +1,12 @@

----- -title: Introducing "CakePHP Recipes" +title: "Introducing: "CakePHP Recipes"" content-type: article timestamp: 1162441500 -tags: cakephp|writing +tags: "cakephp|writing" ----- <p>Despite all my efforts to keep the whole thing quiet for the time being, a few days ago I entered the words &#8220;CakePHP Recipes&#8221; in Google and discovered &#8211; to my astonishment &#8211; that my new book about the CakePHP framework is already for (pre)sale in many popular online bookstores.</p> <p>Up to now I never made any formal announcement myself (although the Cake Software Foundation already did, months ago), nor gave out any juicy details about it, but maybe now the time has come to post something more about it. Yes, I am indeed writing a book about the CakePHP framework, and yes, you can already buy it but no, you can&#8217;t phisically get it simply because it&#8217;s still in progress (miracles of the modern publishing industry!).</p> -<p style="float:left;"><img src="/img/cakephp-recipes/cover.jpg" alt="" /></p> +<p style="float:left;"><img src="http://base--/img/cakephp-recipes/cover.jpg" alt="" /></p> <p>I&#8217;d like to point out that I&#8217;m not the <em>only</em> author of the book: all the code examples and snippets included in the book is provided by the Cake Software Foundation staff, in the person of Larry E. Masters and Garrett J. Woodworth mainly, who will also act as technical editors and first reviewers of the book, together with other trusthworthy CakePHP core developers.<br /> 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 &#8220;recipes&#8221; on how to implement a particular functionality in a CakePHP web application.</p> <p>Why should you get it? Here are some reasons:</p>
M contents/articles/41.htmlcontents/articles/41.html

@@ -1,8 +1,8 @@

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

@@ -1,8 +1,8 @@

----- -title: Too many cooks spoil the Cake book +title: "Too many cooks spoil the Cake book" content-type: article timestamp: 1173231900 -tags: cakephp|writing +tags: "cakephp|writing" ----- <p>I am sorry to announce that my upcoming book, CakePHP Recipes, will not be published anymore. As a matter of fact, it wasn&#8217;t finished because some of the people involved failed to comply with the terms of their contract in delivering material which was suitable for publication.</p> <p>To quote an email I received from my publisher a few days ago,</p>
M contents/articles/43.htmlcontents/articles/43.html

@@ -1,8 +1,8 @@

----- -title: Time for a diet... +title: "Time for a diet..." content-type: article timestamp: 1173437940 -tags: cakephp|rant|writing +tags: "cakephp|rant|writing" ----- <p>My fianc&eacute;e keeps telling me that too many cakes are not good for me, and I never listen: I always liked cakes! I <strong>did</strong> like the CakePHP&#8482;<sup class="footnote" id="fnr1"><a href="#fn1">1</a></sup> framework too, once, and I <strong>did</strong> write <a href="http://www.h3rald.com/projects/view/cakephp-herald">some articles</a> about it in the past, and I believe at least a bunch of Bakers found them useful, especially at the time.<br /> I do believe the Cake&#8482; Software Foundation<sup class="footnote" id="fnr1"><a href="#fn1">1</a></sup> quite liked having their framework featured on popular websites like php|architect and SitePoint, and I believe that I contributed &#8211; to some extent &#8211; to make it one of the most popular frameworks available for the <span class="caps">PHP</span> programming language.</p>
M contents/articles/8.htmlcontents/articles/8.html

@@ -1,8 +1,8 @@

----- -title: New site operative +title: "New site operative" content-type: article timestamp: 1144335420 -tags: website|webdevelopment|cakephp +tags: "website|webdevelopment|cakephp" ----- <p>Yes, it works. Perhaps it&#8217;s a tiny bit slower than expected but the new h3raLd.com seems to work.<br /> I&#8217;ll probably find some new exciting bugs to fix in the next few hours, as usual &#8211; that will be annoying but perfectly normal.</p>
M contents/articles/9.htmlcontents/articles/9.html

@@ -1,8 +1,8 @@

----- -title: Riddle me this... and you'll get the job! +title: "Riddle me this... and you'll get the job!" content-type: article timestamp: 1144419238 -tags: personal +tags: "" ----- <p>Today I had my <em>n^th^</em> job interview. Yes, I&#8217;m getting used to them by now, and it&#8217;s becoming quite entertaining: if they <em>paid</em> me for just take interviews I&#8217;d do that for all my life quite happily! <br /> But since that&#8217;s not going to happen I&#8217;d better get a move on and find a so called <em>real job</em>. Actually this time it wasn&#8217;t the usual complete waste of time and this company <em>nearly</em> made me a proper offer: they&#8217;re gonna see me again next week, so let&#8217;s hope for the best.</p>
M contents/articles/a-look-at-drupal.htmlcontents/articles/a-look-at-drupal.html

@@ -1,7 +1,7 @@

----- -title: A look at Drupal +title: "A look at Drupal" content-type: article timestamp: 1137048164 -tags: php|webdevelopment|review +tags: "php|webdevelopment|review" ----- <em><strong>Important Notice:</strong> This article is about changes occurring to zZine Magazine's site[1]. At the time of writing, <a href="http://www.zzine.org">www.zzine.org</a> uses the old site, and not the Drupal-based one presented in this article, which is currently under construction[18].</em><br /><br />"Why can't we log who edits the articles?"<br />"Can we send newsletters?"<br />"We should really have a members' area..."<br /><br />zZine.org[1] is a scratch-built site, coded from the ground up to offer zZine journalists, editors and readers all the functionalities and features they wanted. I'm not totally against sites being coded from scratch, but what happens if something needs to be fixed, or new functionalities have to be implemented and you realize that the code cannot be extended or patched easily?<br /><br /><strong>Case Study: zZine Magazine</strong><br /><br />zZine Magazine is an online magazine which publishes not only IT-related and other articles on a weekly basis, but also monthly publications containing CyberArmy[2] digests, special columns, and featured articles. A team of journalists, researchers, editors, publishers and outside contributors has access to the zZine site to write, submit, and edit articles, manage publications and perform various other tasks through a password-protected administration area. This is common to approximately 75% of the websites on the Internet: they have a front-end to present content to the general public and a semi-hidden administration backend which is normally more difficult and tedious to code. That's why someone started developing <em>Content Management Systems</em>[3]: ready-made, fully-featured administrative back-ends for creating and managing almost any kind of website, from blogs to eCommerce portals.<br /><br />Could a CMS be used for zZine Magazine? Probably - zZine doesn't need any innovative or advanced features, just a bunch of commonly-used functionalities like:<br /><ul><br /> <li>Add, delete, edit and publish articles</li><br /> <li>Customizable user permissions, ideally role-based </li>(writer, editor, publisher, etc.)<br /> <li>Creating and managing monthly publications</li><br /> <li>Editor's tests</li><br /> <li>User signups, notifications, etc.</li><br /> <li>RSS feed generation</li><br /> <li>Sending newsletters to subscribers</li><br /> <li>Logging user actions</li><br /></ul><br />Some members of my team raised some concerns regarding the usage of a CMS, which were mostly based on our past experience with just a particular product and not CMSes in general. Everybody agreed that if we were to go back to a CMS, we <em>had</em> to choose the <em>best</em> this time: something flexible, easy to use, fast, search-engine friendly, and extensible. I spent some time researching CMSes, because while I knew that there's no such thing as the best CMS, there was certainly a CMS that was best for our needs.<br /><br /><br /><strong>Making the right choice</strong><br /><br />In the past, I had played around with Xoops[4] when I first thought about creating websites, and I used Mambo[5] for some other sites. I admit that I never actually spent time creating complex Mambo components and modules, but I must say that in the end I felt somehow tied to third-party modules and unable to understand how they really worked: Mambo seemed to give developers too much freedom, and had neither a solid API nor conventions to follow, at least when I used it.<br /><br />So I decided to have a look around again, starting from the two most important sites people should look at when choosing the most suitable CMS for their work. <br />The first site is CMS Matrix[6] which - as the name implies - provides a really handy <em>matrix</em>, or chart, to compare the various features offered by nearly all CMS available, both proprietary and open-source.<br /><br />I remember choosing Mambo last time I used the matrix simply because it appeared to be one of the most feature-rich. This is actually something <em>not</em> to do when choosing a CMS: always concentrate on what your site needs rather than what the CMS is able to offer. Otherwise, you run the risk of having too much to work with.<br /><br />The other important website to visit when choosing a Content Management System is OpenSourceCMS[7], which basically allows you to try a demo of every open source CMS online. This is perhaps more useful, but also much more time-consuming: it's better to narrow down the list of possible CMSes after checking CMS Matrix and then try each one rather than just picking one at random.<br /><br />At this point, an experienced CyberArmy staff member[8] suggested Drupal[9]. I asked her why, and she simply said that it seemed to be the best choice according to zZine's needs, as it basically offered all the features we were looking for, either natively or through modules. She also admitted to be biased, as she's actually <em>part of Drupal's documentation team</em> and involved with Drupal development[10].<br /><br />Before making any kind of commitment, I checked out Drupal's website to see how they organized things, and I was quite impressed. I immediately noticed the Handbooks section[11], which contains all the official Drupal documentation and it seemed pretty much complete. No "under construction", "please write content here" or "we're a new project, help us write the documentation" notes, just a load of good-quality documentation, including a fully documented and <em>stable</em> API![12] <br /><br />This surprised me, because some projects I came across, even really good ones, lacked a proper documentation section. I think this is a common problem with new open source projects, and Drupal for this reason gave me the impression to be quite mature and useable already. After visiting the very clear and organized Downloads Section[13], I downloaded the CMS and a few modules and installed it on my laptop.<br /><br /><br /><strong>Installation</strong><br /><br />Drupal needs three things to run:<br /><ul><br /> <li>A web server - Apache is fine, and ISS is reported to be working</li><br /> <li>PHP - Either version 4 or 5, Drupal started supporting PHP5 since 4.6.0 release</li><br /> <li>A PHP-compatible database - MySQL or PostgreSQL is recommended</li><br /></ul><br />I used a WAMP[14] installation to test Drupal. First of all, I created a MySQL database, granting ALL privileges to the database user accessing the Drupal database. When I uploaded the site to the remote server, later on, I had some problems because the LOCK TABLES privilege wasn't granted by the host. Drupal requires this, so I had to contact my host to solve the problem. I then imported the database scheme located in the <em>database</em> directory under the installation directory and modified the configuration settings (sites/default/settings.php) to allow Drupal to access the database. Installation complete.<br /><br />Drupal was now up and running with the default configuration settings, with a minimum of fuss. For all the details concerning the installation process, consult the exhaustive documentation.[15] I didn't read it when I installed it, but it can really be useful in some situations.<br /><br /> There are actually two non-critical things to consider if you're planning to use Drupal for a medium-sized project: the first involves changing a few settings on php.ini, in particular increasing the amount of memory allocated to PHP from 8MB to 16MB, especially if you're planning to use either a lot of simple modules or a few complex ones, and the second is setting up your crontab to execute <em>http://www.yoursite.com/cron.php</em> every hour or so. This is required by some semi-essential modules like the site-wide search, but a common alternative (if you don't want to setup the <em>cron</em> task manually) is the poorman's <em>cron</em> module[15], which I used myself and found to be workable. <br /><br /><br /><strong>Keeping your site under control</strong><br /><br />Perhaps one of the best things Drupal has to offer is a rock-solid general-purpose administrative backend. The first thing I found in the backend which really impressed me (and that also I never found in another CMS) is the ability to create <em>custom</em> role-based user accounts and access permissions for <em>everything</em>: every module can be configured so that, for example, not all people can see its output and just a few can administer and modify it.<br /><br />For zZine, I created four types of accounts:<br /><ul><br /> [*]<em>Administrator</em> - Able to access everything and change every setting of the site<br /> [*]<em>Publisher</em> - Able to write, edit and publish every kind of content on the site, but not able to administer user accounts, permissions and similar administrator-only tasks.<br /> [*]<em>Editor</em> - Able to write and edit anything on the site, but not to publish it.<br /> [*]<em>Writer</em> - Able to write articles, blogs and similar content, but in some cases not allowed to edit it.<br /></ul><br />These were precisely the account types I was looking for in a CMS. Granted, other products offer them by default, but having pre-defined account types is one thing, and being able to customize them completely is another.<br /><br />User accounts are great, but sometimes it's good to know what the users of your sites are doing as well. On our old site we had user accounts for editors and administrators, and even if only a few people had access we had no way to determine who edited an article or who published something unless that person told us. Drupal comes with a radical solution to this: Almost every action is automatically logged by the <em>watchdog</em> core module. Every website error, every page not found, and every PHP or MySQL error is logged, as well as every content submission or modification. Page accesses, meanwhile, can be logged through the statistics module. <br /><br />Themes & Templates<br /><br />"We shouldn't use a CMS: I don't want zZine to have the overly used *nuke-style look." I've heard this too many times. Sometimes people associate the word "CMS" with "lack of original design", and that's not true by any means, especially for Drupal. Of course, there are plenty of ready made themes[16] which can be freely used or modified for any Drupal-based site. <br /><br />I must confess that when I first saw the themes section I feared that Drupal "themes" used their own template engine, like some CMSes do nowadays, but I was wrong: currently Drupal supports some template engines[17] but also pure PHP-based ones. Theme engines do their job wonderfully and can offer some interesting features, but templates written natively in PHP tend to perform better, simply because there's no extra parsing or additional overhead involved.<br /><br />I decided to have a look at a standard PHP theme. Basically, it's nothing more than a PHP-enriched xHTML file and its corresponding stylesheet. There are a few functions which must be used to perform particular tasks, like showing the main navigation links, but nothing too hard to understand. It's also <em>very</em> customizable. In fact, we're already working on a custom zZine theme, which doesn't seem any harder than coding a standard xHTML template. As design should always be the last thing to worry about, I decided to use a temporary template I created by slightly modifying an existing one.[18]<br /><br /><br /><strong>To switch or not to switch?</strong><br /><br />When creating a new site for an organization which already has one, there's something very important to consider: <em>what happens to the old data</em>?<br />Assuming the old site was dynamic and using a database of some sort, there are three possibilities:<br /><ul><br /> <li>Don't bother doing anything: any data on the old site will not be transferred to the new one.</li><br /> <li>Make the old website available somewhere else as an </li><em>archive</em> of old documents.<br /> <li>Import all the data from the old site to the new one. </li><br /></ul><br />Obviously we went straight for the third one, which is the most difficult to implement, but it was necessary: there were over 1000 articles on the old site-<br /><br />Of course, in reality, I didn't even mention the possibility of using Drupal until I figured out a way to import the old data into the new database structure. Never praise features or convince people to switch unless you're 100% sure you can handle the situation. Luckily for me, it turned out that everything could be imported easily enough.<br /><br />The first difference I found between Drupal and zZine was that we didn't really have proper user accounts. Every article had an author, but it was stored as a field in the article's record, and that was all. Drupal, on the other hand, supports (and perhaps requires) user accounts - everything present on the site must be written or edited by an existing user.<br /><br />The solution I cam eup with was rather drastic: I created about 120 user accounts, retrieving usernames from the articles and inserting them through a custom PHP script into Drupal's user table. Of course, those users never registered on the new site[18], so I didn't personalize the accounts at all: I simply put a notice on the first page asking everyone who contributed to zZine before to contact me in some way to enable their account with a valid email address.<br /><br />After this initial difficulty, importing articles was relatively easy. Pretty much every type of content in Drupal is, in its simplest form, a <em>node</em>. Nodes have a title, which is a teaser generated automatically from the body text, and an author (the node table in the database has more fields, but these are the key ones for us). Essentially, Drupal's two default models for writing <em>stories</em> and <em>pages</em> write data to this table only. The most important thing to understand about Drupal is that almost every module used to create <em>something</em> on the site - an article, a blog entry, even songs - will use the node table, and add everything else on other tables. This makes the whole system much easier to administer: every node can potentially be extended <em>in any way</em> by third party modules! <br /><br />What about categories? Well, Drupal has become famous for its taxonomy module: whereas most CMSes only support, or in fact <em>impose</em>, a one- or two-level hierarchy for categories, Drupal's taxonomy module supports the creation of as many different terms to describe data as you can think of. Each piece of content (categorization can be applied to <em>any</em> node, and since almost everything is a node-) can belong to none or <em>n</em> different categories, which can be nested in a <em>n</em>-level hierarchy. Since the zZine articles were already divided into categories, I imported all of them directly into Drupal. On the old zZine site, every article could have at most one category, which is fine, but it's good to know that we can now configure the system to support a more advanced categorizing system.<br /><br />After importing the articles, the last important thing to transfer to the new site were the zZine Publications. Publications are what we call the article collections that we release as an issue every month. I could have created a new module for this, and it wouldn't have been that hard, but there was already an excellent module for that. This was pure luck, but the <em>epublish</em>[19] module seemed like it was tailored specifically for our needs.<br /><br /><br /><strong>Drupal API and Modules</strong><br /><br />We were lucky enough to be able to use existing modules for the main functionalities of our site, but in some cases you might not be able to find <em>exactly</em> what you're looking for.<br /> <br />In our case, even if we could have used the <em>story</em> module, which is part of the default installation, for zZine articles (stories have a body, a teaser, a title and an author, exactly like our articles) we decided not to. I wanted our editors and writers to know what to use when submitting articles, and the name "stories" sounds a bit too ambiguous for my liking. So, I decided to have a look at the standard story module to see how modules work, and create something similar.<br /><br /><em>Note: I'm curious by nature and I didn't read anything in the Drupal API[12], or about developing custom modules; I looked at the story module without any prior knowledge of Drupal's conventions.</em><br /><br />All I found in the story module was a bunch of functions like:<br /><code><br />/**<br /> * Implementation of hook_node_name().<br /> */<br />function story_node_name($node) {<br /> return t('story');<br />}<br /></code><br /><br /> which seemed to be enough to tell the Drupal core what to do. I was used to Mambo components, where developers have more liberty to do what they want, including outputting HTML code anywhere. Drupal is nothing like that; on the contrary, it has its own structure and coding conventions that developers have to follow when creating custom modules. Even if a simple function like the one above is fully commented, it has to have a standard indentation (two spaces) and an obviously standardized name. I noticed that all the functions similar to this one started with "<em>story_</em>", so I created a new file named <em>zzarticle.module</em>, copied and pasted the story module code into it, and changed every function accordingly, like this:<br /><code><br />/**<br /> * Implementation of hook_node_name().<br /> */<br />function zzarticle_node_name($node) {<br /> return t('zZine Article');<br />} <br /></code><br />Trivial enough, and it worked fine! I put my shamefully copied module in the /modules directory and I was able to create "zZine Articles" (which were nothing but stories with a different name).<br /><br />At this point I decided to have a proper look at the API, and read about hooks:<br /><br /><fieldset><blockquote><em>"Drupal's module system is based on the concept of "hooks". A hook is a PHP function that is named foo_bar(), where "foo" is the name of the module (whose filename is thus foo.module) and "bar" is the name of the hook. Each hook has a defined set of parameters and a specified result type.<br /> To extend Drupal, a module need simply implement a hook. When Drupal wishes to allow intervention from modules, it determines which modules implement a hook and call that hook in all enabled modules that implement it. [-]"</em></blockquote></fieldset><br />A <em>hook</em> was used for the previously mentioned function, and this was diligently commented:<br /><br /><code><br />/**<br /> * Implementation of hook_node_name().<br /> */<br /></code><br /><br />This made me understand how Drupal is actually geared towards developers and at the same time suitable for non-technical users. Wait a minute, what if someone is not familiar with PHP and still needs custom modules and features? Is there any way to extend Drupal without having to physically code new things? Yes, there is, and two modules come to mind:<br /><ul><br /><br /> [*]<em>Webform</em> - allows the creation of any kind of web form. Users can customize field types, values, labels and messages. The module also provides ways to process forms by either saving data to the database or emailing it, which we can use for things like the Editor's Test and surveys.<br /> [*]<em>Flexynode</em> - This module is simple and powerful - it allows users to create their own content types without coding a single line. In my example, I cloned the story module to create the zZine Article content type. This is easy to do, and functional, but what happens if someone wants to include an additional field to the article submission form? I can probably do this using hooks, but if I was lazy I could do the same thing with the <em>flexynode</em> module. I actually used this module for our podcast section[20], and it did an excellent job.<br /></ul><br /><br /><strong>Conclusions</strong><br /><br />For now I must say I'm very happy with what Drupal has to offer, and if there's something we need for the site, we can code it ourselves and then integrate it into Drupal. <br />One of the major strengths of this CMS is definitely its developer-friendliness: while other CMSes mainly focus on users at the price of limiting extensibility and trapping developers into predefined modules, Drupal even encourages developers to integrate their code into the existing structure, opening virtually unlimited possibilities. Granted, it may seem difficult to understand at first, some people I talked to told me that 'Drupal is too complex' or has a rather steep learning curve, but I just think everything becomes clearer after reading parts of the vast documentation section: this is the only price to pay, and believe me, it is definitely worthwhile.<br /><br /> <br /><strong>Notes</strong><br /><small><br />[1] zZine Magazine: <a href="http://www.zzine.org">http://www.zzine.org</a><br />[2] CyberArmy Community: <a href="http://www.cyberarmy.net">http://www.cyberarmy.net</a><br />[3] Content Management System, Wikipedia page: <a href="http://en.wikipedia.org/wiki/Content_management_system">http://en.wikipedia.org/wiki/Content_management_system</a><br />[4] Xoops - Official Page <a href="http://www.xoops.org/">http://www.xoops.org/</a><br />[5] Mambo - Official Page: <a href="http://www.mamboserver.com">http://www.mamboserver.com</a><br />[6]CMS Matrix: <a href="http://cmsmatrix.org/">http://cmsmatrix.org/</a><br />[7] Open Source CMS: <a href="http://opensourcecms.com/">http://opensourcecms.com/</a><br />[8] Snarkles's CyberArmy Profile: <a href="http://www.cyberarmy.net/~snarkles">http://www.cyberarmy.net/~snarkles</a><br />[9] Drupal - Official Page: <a href="http://www.drupal.org">http://www.drupal.org</a><br />[10]Webchick's Drupal Profile: <a href="http://drupal.org/user/24967">http://drupal.org/user/24967</a><br />[11] Drupal - Handbooks: <a href="http://www.drupal.org/handbooks/">http://www.drupal.org/handbooks/</a><br />[12] Drupal API: <a href="http://drupaldocs.org/api/head">http://drupaldocs.org/api/head</a><br />[13] Drupal Downloads: <a href="http://www.drupal.org/project/">http://www.drupal.org/project/</a><br />[14] WAMP Server Package: <a href="http://www.wampserver.com">http://www.wampserver.com</a><br />[15] Drupal - Installing and Upgrading documentation: <a href="http://drupal.org/node/258">http://drupal.org/node/258</a><br />[16] Drupal - Themes: <a href="http://drupal.org/project/Themes">http://drupal.org/project/Themes</a><br />[17] Drupal - Theme Engines: <a href="http://drupal.org/node/509">http://drupal.org/node/509</a><br />[18] zZine Beta site: <a href="http://beta.zzine.org">http://beta.zzine.org</a><br />[19] Drupal - ePublish module: <a href="http://drupal.org/project/epublish">http://drupal.org/project/epublish</a><br />[20] zZine Podcasts: <a href="http://beta.zzine.org/podcasts">http://beta.zzine.org/podcasts</a><br /></small><br />
M contents/articles/academic.htmlcontents/articles/academic.html

@@ -1,8 +1,8 @@

----- -title: Thoughts about the Italian Academic Education +title: "Thoughts about the Italian Academic Education" content-type: article timestamp: 1120768200 -tags: italy|personal|rant +tags: "italy|personal|rant" pdf: true -----
M contents/articles/akelos-interview.htmlcontents/articles/akelos-interview.html

@@ -1,8 +1,8 @@

----- -title: An Interview with the creator of the Akelos Framework +title: "An Interview with the creator of the Akelos Framework" content-type: article timestamp: 1184814120 -tags: php|rails|cakephp|frameworks +tags: "php|rails|cakephp|frameworks" ----- <p>I <a href="http://www.h3rald.com/blog/34">already</a> <a href="http://www.h3rald.com/blog/38">covered</a> the Akelos <span class="caps">PHP</span> framework in the past, but for those who don&#8217;t know it, Akelos seems to be one of the few <a href="http://www.h3rald.com/articles/rails-inspired-php-frameworks">Rails-inspired <span class="caps">PHP</span> frameworks</a> still worth mentioning, besides CakePHP and Symphony of course.</p> <p>I recently has a look at their recently-relaunched <a href="http://www.akelos.org/">community website</a> and I noticed this phrase:</p>
M contents/articles/apache2-upgrade.htmlcontents/articles/apache2-upgrade.html

@@ -1,8 +1,8 @@

----- -title: Beware of sudden upgrades! +title: "Beware of sudden upgrades!" content-type: article timestamp: 1198132860 -tags: website|rails +tags: "website|rails" ----- <p>Yesterday I got a rather annoying early Christmas present: when visiting my site, I noticed that the raw source code of my dispatch.fcgi file (yes, I&#8217;m on shared hosting with FastCGI, for now) was displayed &#8220;as it is&#8221; instead of being interpreted.</p> <p>After the initial moment of anger and stress (I immediately realized it was BlueHost&#8217;s fault, not mine), I opened two tickets and went to bed, hoping to see everything solved in the morning.</p>
M contents/articles/back-from-holiday.htmlcontents/articles/back-from-holiday.html

@@ -1,8 +1,8 @@

----- -title: Back from holiday +title: "Back from holiday" content-type: article timestamp: 1188442740 -tags: personal|website|writing +tags: "personal|website|writing" ----- <p>I&#8217;m back. I was so eager to go on holiday that I didn&#8217;t even bother writing a post about it, too bad. I actually when on holiday for a week but I thought I&#8217;d take three weeks off from my blog duties in favor of laziness and relax, but unfortunately my laptop decided to go wrong as well, so I didn&#8217;t actually manage to relax that much.</p> <p>Now everything is fine. I still have to send in my laptop for assistance but it&#8217;s usable at least, and I finally found the time (and the money) to buy a desktop PC. I always wanted to build my own, actually, but in the end I decided to opt for a pre-made Fujitsu Siemens, mainly for economic reasons and time constraints. I won&#8217;t publish the specs, but it&#8217;s alright for me and my fianc&eacute;e.</p>
M contents/articles/best-practices-tech-writers-editors-review.mdcontents/articles/best-practices-tech-writers-editors-review.md

@@ -1,9 +1,9 @@

----- -title: Book Review: Best Practices for Technical Writers and Editors +title: "Book Review: Best Practices for Technical Writers and Editors" content-type: article -subtitle: Simply all the books your Documentation Team needs +subtitle: "Simply all the books your Documentation Team needs" timestamp: 1366519425 -tags: books|review|techcomm +tags: "books|review|techcomm" ----- I've been working in Technical Communications for nearly seven years now, first and foremost Technical Writer and more recently as Documentation Manager. In other words, my work revolves around manuals and online helps, authoring tools and guidelines, documentation standards and… you get the picture.
M contents/articles/boolean-search.htmlcontents/articles/boolean-search.html

@@ -1,7 +1,7 @@

----- -title: Understanding Boolean Search +title: "Understanding Boolean Search" content-type: article timestamp: 1134215836 -tags: internet|google +tags: "internet|google" ----- These days, it is necessary to use a search engines to find the information you want. When the World Wide Web was smaller, search engines weren't an essential websurfing tool, but once the Web started growing exponentially, and hosting literally billions of documents and files, even normal searches aren't enough to find important information, especially when it is not readily available. So, I'm going to show you a more powerful way to search.<strong>Learning how to search</strong><br /><br />Imagine yourself in the shoes of someone who has never used the Internet before. That's pretty rare nowadays, but it does happen. Take my dad, for example, who recently asked me something like "Where can I find a map of the Internet?". I explained that there wasn't any such thing because the Web is too dynamic to be mappable, and that's why we use search engines.<br /><br />I introduced him to Google [1], and he has since started to use search engines regularly. He didn't have much luck on his first few tries, but eventually he learned how to search properly.<br /><br />Searching the web is easy (just type in a word and hit enter), but finding stuff can be tricky, especially if you don't know enough about a subject to narrow your search down. Most people (including myself) tend to find what they're looking for only after multiple searches: we start with a general item, check the results, and restrict the next search based on what we learned from the previous one. While this is generally successful, every once in a while you will find yourself oging in circles.<br /><br />Let's look at a sample situation: I want to learn Ruby on Rails [2] and I want a free host to try it out. So, I go on Google and type something like: <br /><br /><em>ruby on rails free hosting</em><br /><br />I immediately find various blog entries referring to a project that aims to offer free hosting to try out the Ruby-based framework "Rails Playground". [3] It seems to be the perfect solution - they offer, completely free, enough space to try out Rails. It's a pity they recently decided to close new account registration, so now the whole thing is useless.<br /><br />Variants of the search query mentioned above bring up stuff related to Rails Playground. The project became so well-known that almost every Rails-related blog mentioned it at some point as the only place offering free hosting supporting Rails. Since it is useless now, is there a way to prevent Google (or other search engines) from displaying Rails Playground related results? Yes!<br /><br />You would need something like this: <br /><br /><em>rails free hosting -playground -railsplayground</em><br /><br />In this new query I excluded the words "playground" and "railsplayground" using a minus sign before them so I would find other results that didn't refer to the project. In the end, I didn't actually find any other free hosting that supported rails, but I did find the following: <br /><br />- a company which offers free rails hosting for testing purposes (until they officially launch their service) <br />- a guy who offered some space on his private server for testing rails (no longer available) <br /><br />Although I didn't find anything equivalent to Rails Playground, I didn't waste time either going in circles or scrolling through tons of pages trying to find something else. Actually, most people know how to exclude (or include) words in Google searches but they rarely do it. Furthermorte, most people don't know that there are many more search functions available on almost all the popular search engines. These functions, like the minus sign, are called Boolean operators.<br /><br /><br /><strong>A few words about Boolean algebra: </strong><br /><br />Boolean searches get their name from George Bool[4], the inventor of Boolean algebra[5], which is a particular algebraic structure involving three fundamental operators: AND, OR and NOT. If you attended any math class or course you should be already familiar with it. If not, here is a short summary of some of the concepts I will discuss in upcoming sections.<br /><br />Using Boolean searches (rather than Boolean algebra), the expressions A, B, C, etc. can be considered words, and "A &lt;Boolean operator B" can be considered search queries.<br /><br />- A AND B: pages must contain both words A and B.<br />- A OR B: pages must contain either the word A or the word B<br />- NOT A: pages must not contain the word A<br /><br />Trivial. Now let's see some more examples:<br /><br />- (A OR B) AND (NOT C): here I used brackets to create nesting, which causes expressions within brackets to be carried out before the rest, so the query means: "search for pages containing either A or B but which do not contain C".<br /><br />- (A OR (C AND D)) AND (NOT (F OR G)): similar but more complex than the previous: "search for pages containing either A or both C and D. Additionally, only F or G can be present, or neither of them".<br /><br />In some applications, like electrical circuits, NOR, NAND and XOR operators are also used to express Not OR, Not AND and eXclusive OR. As for search engines, only some of them support the XOR operator. A XOR B means that pages can contain either A but not B or B but not B.<br /><br /><br /><strong>Boolean search and Google</strong><br /><br />After reading this you might want to try typing Boolean expressions like "(food AND for) AND (cats OR DOGS) AND (NOT birds)" into a search engine, but that won't work. A Boolean expression typed "as is" rarely works on a search engine (it isn't supported because it's considered to be not user friendly enough). Google in particular adopted a more intuitive way[6] of performing Boolean searches. <br /><br />For starters, you almost always perform a Boolean search when searching something on Google simply because they decided (like most major search engines have) to automatically include the AND operator unless OR is specified.<br /><br />Searching the phrase "food for dogs" actually corresponds to "food AND for AND dogs" (using the proper Boolean expression). Presumably, this was done to prevent the search engine from delivering too many (and usually inconsistent) results. The other possibility (the default in MySQL's FULLTEXT boolean search[7]) would be to use the OR operator by default. Thus, searching for "food for dogs" might deliver results about food for cats, other pets, or even food in general. <br /><br />To improve the precision of their searches, Google also implements automatic exclusion for common words (like "for" in the example below). However, on occasion, a common word needs to be included in a search. To be fair,usually you will find what you are looking for, even with common words excluded. Nevertheless, to force Google to include a word, just add a plus symbol before it, like "+for".<br /><br />Similarly, a minus in front of a word (rails free hosting -playground -railsplayground) forces Google to exclude a word from the search query: in other words, the minus sign is Google's version of the Boolean NOT operator.<br />In order to transform the Boolean expression that I used at the start of this chapter - (food AND for) AND (cats OR DOGS) AND (NOT birds) - into a proper query accepted by Google, I have to write: "food for" "cats OR dogs" -birds. The OR operator <em>must</em> be specified, and anything in parentheses roughly corresponds to quotation marks because Google searches for the exact phrase enclosed in the quotation marks (also evaluating an OR operator, if present).<br /><br />The biggest limitation of Google when it comes to Boolean searches is the lack of support for nested expressions. Something like (food AND (NOT for)) AND (cats OR dogs) AND (NOT birds) cannot be translated into something like <em>"food -for" "cats OR dogs" -birds</em> because Google will not evaluate the "-" operator if it is enclosed in quotation marks. Something more complex like:<br /><br /><em>((food AND for) AND (cats OR DOGS) AND (NOT birds)) OR ((stuff AND for) AND (goats OR horses) AND (NOT (cows OR bulls)))</em><br /><br />cannot be translated into a Google-friendly query. Normal people probably won't ever do that complicated a search, but you never know...<br /><br /><br /><strong>All the other search engines, strategies and conclusions</strong><br /><br />There are various articles (see [8][9][10]) about how Boolean search has been implemented in various major search engines and AltaVista[11], AlltheWeb[12] and MSN Search[13] seem to support Boolean search features better than Google. All of them support the standard Boolean operators, as well as the "+" and "-" symbols, but apparently only MSN Search[13] seems to support full Boolean search queries with nesting: I actually managed to execute my previous complex example: <br /><br /><em>((food AND for) AND (cats OR DOGS) AND (NOT birds)) OR ((stuff AND for) AND (goats OR horses) AND (NOT (cows OR bulls)))</em><br /><br />and I got some decent results. The only (understandable) exception is that I had to specify +for to have the word "for" included.<br /><br />Although Boolean search is useful, it is not the only way to get relevant results as quickly as possible. Additional thinking is required to prepare a query properly. In everyday life, you won't really use heavily nested queries, simply because other methods are more effective. If you're interested in learning how to search I'd recommend a very informative article available at Waikato University[14].<br /><br />I found out that a mix between making multiple search attempts and using basic Boolean queries (word exclusion in particular) can deliver pertinent results fairly readily. Suppose you've heard something regarding a person named Halley who contributes to an IT-related community and that someone mentioned the word "kernel" when talking about him, and you remember that it wasn't referring to Linux. You could come up with something like: <br /><br />Halley kernel -Linux<br /><br />Et voila': Halley's CyberArmy Profile[15] appears as the first search result in Google! If you typed just <em>Halley</em> you wouldn't have found the right one right away; you would probably get more information about the Halley's Comet or the astronomer Sir Edmund Halley. If you typed <em>kernel Halley</em> you'd have found something about Kernel Halley on zZine first and then on CyberArmy lower down in the search results.<br /><br />Boolean search can be useful, but it must not be abused. Google's decision to implement only partial Boolean support without standard Boolean operation was probably the best choice to achieve both pertinent results and user-friendliness. <br /><br /><strong>Notes and further resources</strong><br />[1] Google Inc.: <a href="http://www.google.com/">http://www.google.com/</a><br />[2] Ruby on Rails framework: <a href="http://www.rubyonrails.org/">http://www.rubyonrails.org/</a><br />[3] Ruby Playground: <a href="http://www.railsplayground.com/">http://www.railsplayground.com/</a><br />[4] George Bool, Wikipedia Page: <a href="http://en.wikipedia.org/wiki/George_Boole">http://en.wikipedia.org/wiki/George_Boole</a><br />[5] Boolean Algebra, Wikipedia Page: <a href="http://en.wikipedia.org/wiki/Boolean_algebra">http://en.wikipedia.org/wiki/Boolean_algebra</a><br />[6] Google Help on Advanced Search: <a href="http://www.google.com/help/refinesearch.html">http://www.google.com/help/refinesearch.html</a><br />[7] MySQL FULLTEXT boolean search: <a href="http://dev.mysql.com/doc/mysql/en/fulltext-boolean.html">http://dev.mysql.com/doc/mysql/en/fulltext-boolean.html</a><br />[8] Search engines that implement boolean search (outdated): <a href="http://searchenginewatch.com/facts/article.php/2155991">http://searchenginewatch.com/facts/article.php/2155991</a><br />[9] Boolean Searching on the Internet: <a href="http://library.albany.edu/internet/boolean.html">http://library.albany.edu/internet/boolean.html</a><br />[10] How to choose a search engine or directory: <a href="http://library.albany.edu/internet/choose.html#logic">http://library.albany.edu/internet/choose.html#logic</a><br />[11] AltaVista Special Search Terms: <a href="http://www.altavista.com/help/search/syntax">http://www.altavista.com/help/search/syntax</a><br />[12] AlltheWeb Query Language: <a href="http://alltheweb.com/help/faqs/query_language#2">http://alltheweb.com/help/faqs/query_language#2</a><br />[13] MSN Search: <a href="http://search.msn.com/">http://search.msn.com/</a><br />[14] "The Assignment Process: Search Strategies": <a href="http://www.waikato.ac.nz/library/learning/g_strategies.shtml">http://www.waikato.ac.nz/library/learning/g_strategies.shtml</a><br />[15] Halley's CyberArmy Profile: <a href="http://www.cyberarmy.net/~Halley/">http://www.cyberarmy.net/~Halley/</a><br />
M contents/articles/cakephp-first-bite.htmlcontents/articles/cakephp-first-bite.html

@@ -1,7 +1,7 @@

----- -title: The CakePHP Framework: Your First Bite +title: "The CakePHP Framework: Your First Bite" content-type: article timestamp: 1152842580 -tags: cakephp|tutorial|review +tags: "cakephp|tutorial|review" ----- <p>According to a recent study, <span class="caps">PHP</span> is one of the most popular programming languages in the world. In spite of this, <span class="caps">PHP</span> is often criticized for its inconsistent naming conventions, its lack of important features as compared to other languages (like namespaces) and its inherent disorganization. Furthermore, <span class="caps">PHP</span> is very easy to learn, and this has often led to the common misconception that most <span class="caps">PHP</span> developers are inexperienced and that their code is therefore prone to security vulnerabilities and exploits.<a href="http://www.sitepoint.com/article/application-development-cakephp">Read the full article</a> on <a href="http://www.sitepoint.com/">SitePoint.com</a></p>
M contents/articles/cakephp-overview.htmlcontents/articles/cakephp-overview.html

@@ -1,8 +1,8 @@

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

@@ -1,7 +1,7 @@

----- -title: CakePHP - A 'tasty' solution for PHP programming +title: "CakePHP - A 'tasty' solution for PHP programming" content-type: article timestamp: 1134057819 -tags: cakephp|review|frameworks|webdevelopment +tags: "cakephp|review|frameworks|webdevelopment" ----- Web developers can either love or hate PHP, and one of the criticisms of this easy-to-use programming language which is repeated over and over on IRC, forums and blogs is that "PHP is disorganized".<br />Is this really true? If so, is there any possible way to write a PHP application in a logical and clean way? Read on...Every web developer has certainly heard of PHP. Some people like it and consider it a powerful and easy-to-use way to create complex websites or web applications, while others are convinced that it is merely a bad copy of Perl. Opinions are certainly mixed on the matter.<br /><br />One thing to keep in mind when reading criticisms of PHP is its origins, as therein lies the crux of the matter. PHP was created as a form interpreter, initially offering only a <em>very limited</em> range of functionality. Its main purpose was to make life easier for web developers who wanted to do simple tasks, like manipulating form data.<br /><br />People liked the concept - PHP was free and it quickly became popular among developers. More functionality was added and continues to be added with each new release, and PHP is now one of the most popular and powerful programming languages available for web development.It is relatively easy to learn, compared to Perl, ASP, or JSP, and it can be used for almost anything[1].<br /><br />The sheer simplicity of the language was most likely the cause of the enormous amount of exploits discovered through the years which earned PHP the label "<em>too dangerous to use in 'proper' applications</em>". The danger, however, lies not in the language itself, but rather in the <em>way</em> developers make use of the language: PHP's simplicity makes writing bad or exploitable code extremely easy. Furthermore, PHP's ability to be placed within any HTML page with the greatest of ease tempted developers to write ever-increasing amounts of 'spaghetti code', which by its very nature is neither organized nor clean code, and certainly does not help a developer learn how to write organized or clean code.<br /><br />These problems, however, can be solved. There are many ways to go about doing this, but the easiest, most effective way is to create a framework[2]. <br /><br /><br /><strong>Bringing Order to Chaos</strong><br /><br />After learning some PHP myself, I remember noticing that my applications were growing in a disorganized and uncontrollable manner. Things tended to be added at the last minute, and bugs were fixed and patched 'on the fly' wherever they occurred. PHP lacked the structure that is present in most other programming languages. I remember reading the word <em>framework</em> for the first time not too long ago while I was downloading a Windows Update of the .NET framework[3]. That inspired me to start searching the Internet for a 'PHP framework'. That led me to an interesting blog entry[4] where a solution was proposed - a solution to <em>bring order to chaos</em>:<br /><br /><fieldset><blockquote><br />[...] The answer is simple: create our own class library, some kind of framework, the PHP framework. The similar in many ways to that one which is already well known to Java or .NET programmers. We could set the standards, structure and main guidelines. [...]<br /></blockquote></fieldset><br /><br />That blog post made me think about developing my own framework, until I noticed that there were many projects already in progress, and some in fact completed; the end result being a fully functional PHP framework. I read a lot about some of them[5], and abandoned the idea of developing my own, because as a good developer, I believe I should never re-invent the wheel. So I kept looking. I found Pear[6], although that's more a repository of PHP classes with a common standard than a framework, while I was looking for THE solution to developing many types of applications, not merely how to do one thing in particular.<br /><br />I came across a very promising project named Prado[7], which won the latest Zend contest, and was considered the best PHP5 application of the year. It is a masterpiece of coding and PHP5 usage, so I tried to learn it. I even developed a website with it.<br /><br />Prado lets the developer design the application without imposing any ready-made components, but I found its event-driven[8] approach neither easy to learn nor suitable for everyday web applications. I did not like the idea of having to code a reaction to every event (like a click on a button or different phases of page rendering): that is the approach that ASP takes, and at least in that respect, Prado seems to be inspired by the .NET framework. Event-driven programming is suitable for GUI development and desktop-based interfaces, but not for web applications.<br /><br />After trying Prado, I was still unsatisfied, so I once again began my search for a solution to improve my programming. My meanderings took me to Ruby on Rails[9], one of the most recent examples of technology hype on the Net. At the same time,to a certain extent, it is also a successful tool. <br /><br /><br /><strong>The Rails Phenomenon</strong><br /><br /><fieldset><blockquote><br />"Rails is a full-stack, open-source web framework in Ruby for writing real-world applications with joy and less code than most frameworks spend doing XML sit-ups."<br /></blockquote></fieldset><br /><br />That sounded like what I was looking for, and I started reading more about it in the vast and varied help sections[10] available both on and off of the official site. The Rails team did an outstanding job promoting and marketing the framework, and also in providing comprehensive textual documentation (and even video tutorials) to help both beginners as well as experienced programmers get started with it.<br /><br />Briefly, Rails uses Ruby's object oriented programming, in conjunction with the MVC pattern and various automated scripts (generators), to help developers program their applications quickly and in a solid and organized way. However, as that is neither clear nor convincing, let's spend a few moments on the MVC Pattern[11], which will also be useful to understanding the following sections.<br /><br />MVC stands for <strong>M</strong>odel <strong>V</strong>iew <strong>C</strong>ontroller: these three words enclose - and this is just a personal opinion - all the wisdom and philosophy of web development, describing - once again, in my opinion - the three most logical parts a web application <em>should</em> be divided into to achieve code robustness, order and power, all at the same time. Let's look at what each of the component parts mean in detail:<br /><br /><ul><br /><li>Model: The model represents the very essence of the </li><em>information</em> and <em>content</em> of a web application. Imagine this as an object able to gather the information and content of your webpages from a particular resource, such as a database. The model is the only entity able to access resources.<br /><li>View: The view is an attempt to separate the most unstable part of an application: the user front-end. A view is only responsible for presenting the information that the Model gathered. A view does nothing but format the output, and can be compared to a template or report. In all MVC frameworks for web applications, only view files contain </li>(X)HTML code, and mostly only that. They can therefore be changed <em>at any time</em> without having to touch a single line of the business logic of your application.<br /><li>Controller: The controller is the 'brain' of the application. Consider it to be the only part of your program that can 'think' and manage the other parts. Controller files are the only ones able to </li><em>order</em> the Model to gather information and then pass the information obtained to the view for display. <br /></ul> <br /><br />Although the MVC seems to make things more complicated, that is part of the objective. Since one of the advantages (and weaknesses) of PHP was its simplicity, the MVC adds complexity to bring more order and logic to the design process. The three entities are separated for just that reason, and trying to put them together can result in potential disasters, since it causes the whole pattern to fail.<br /><br />Coming back to Rails, I was quite impressed by the features it offered, but there was a small problem: the Ruby programming language itself. I experienced some difficulties in setting up the environment properly, and I also discovered that most standard hosting companies do not offer Ruby hosting plans as standard. Hosting issues aside, I would have had to learn Ruby in order to master Rails, and I really did not have the time for that: I had to develop a website quickly and easily, preferably with languages I already knew.<br /><br />After deciding to abandon Rails (for the moment, anyway), I was amazed by the number of projects in other programming languages that try to emulate the famous Ruby framework, to the point of being considered <em>clones</em> or ports of it to another language. To my knowledge, the <em>Rails disease</em> contaminated the following programming languages:<br /><br /><ul><br /><li>PHP</li>[12]<br /><li>Python</li>[13]<br /><li>Java </li>[14]<br /><li>Perl </li>[15]<br /></ul><br /><br />I said <em>disease</em> because Rails developers think that Ruby on Rails was made in Ruby for a reason, namely that Ruby offered some unique features that were not available in other languages. I will not delve into that topic here; more information is available[16] for those who are interested. However, suffice it to say that there are some Rails ports in PHP that were immediately attacked because of the fact or legend that the creator of Rails originally wanted to develop his framework in PHP and then switched to Ruby. Let's examine one of those PHP frameworks in detail.<br /><br /><br /><strong>CakePHP: Just Another Rails Clone?</strong><br /><br />I chose to learn CakePHP (or "Cake")[17] mainly because it offered more features than the other two PHP alternatives. It also seemed to be a more original and actively developed project. In particular, I'd like to quote one of CakePHP's developers, from when he introduced the framework in a comment to a blog post[16]: <br /><br /><fieldset><blockquote><br />"While it's difficult to copy Rails in PHP, it's quite possible to write an equivalent system. I like the terseness of Ruby code, but I need the structure that Rails provides, how it makes me organize my code into something sustainable. That's why I'm ripping off Rails in Cake."<br /></blockquote></fieldset><br /><br />Cake's developers (bakers?) are developing their own framework which uses many principles of Ruby on Rails, revisited and re-proposed in an extremely flexible and easy to use PHP tool, rather than simply trying to port Rails to PHP. I also liked the fact that they bothered to choose an original name for their project, unlike others: there are too many "<insert language here>-on-Rails" frameworks, and while the whole "Rails" thing is innovative and catchy the first time, it loses its appeal quickly when people use the word everywhere just because it is "fashionable".<br /><br />Quoting from CakePHP's website:<br /><br /><fieldset><blockquote><br />"Cake is a rapid development framework for PHP which uses commonly known design patterns like ActiveRecord, Association Data Mapping, Front Controller and MVC. Our primary goal is to provide a structured framework that enables PHP users at all levels to rapidly develop robust web applications, without any loss to flexibility." <br /></blockquote></fieldset><br /><br />That sounds like the Holy Grail for PHP developers, and I must admit I'm quite impressed myself after using it on various little projects, but is it really all true? What are Cake's features? Are there any limitations?<br /><br /><br /><strong>The Ingredients</strong><br /><br />So what is Cake? In the previous sections, I introduced some general concepts and ideas common to Ruby on Rails and CakePHP, but nothing in particular was said about the structure of the framework itself. Let's now turn to that and discuss it in some detail, particularly as it pertains to Cake.<br /><br />The first thing to understand about Cake (and Rails as well) is that one of their aims was to avoid editing long and complex configuration files in order to run the environment. The approach in this sense is to use <em>conventions</em> over <em>configuration</em>. This may sound terribly restrictive, but in reality it proved to make things much simpler. After all, I said I wanted to use a framework because I needed a solid structure to base my applications on, not that I needed to be able to create and personalize my own structure and system. Cake uses some simple rules in order to run properly, and the easiest way to explain them is through Cake's directory structure, which represents the skeleton of every CakePHP application.<br /><br />/<br />---app/<br />------config/<br />------controllers/<br />---------components/<br />------models/<br />------plugins/<br />------views/<br />---------elements/<br />---------errors/<br />---------helpers/<br />---------layouts/<br />---------pages/<br />------webroot/<br />---------css/<br />---------files/<br />---------img/<br />---------js/<br />---cake/<br />------config/<br />---------inflections/<br />------docs/<br />------libs/<br />---------controller/<br />---------generator/<br />---------model/<br />---------view/<br />------scripts/<br />---tmp/<br />------cache/<br />------distro/<br />------logs/<br />------tests/<br />---vendors/<br /><br />I expanded only the first three levels of the tree, although there are more levels in the <em>/cake/</em> directory. They won't be considered here simply because the <em>/cake/</em> directory contains CakePHP's internal libraries, which normally will not be modified when developing an application. The <em>/tmp/</em> directory also will not be elaborated upon either, because it is only used to store temporary files. However, the <em>/vendor/</em> directory should contain third party scripts and libraries that you may want to use in your application, but they are not normally integrated with Cake's framework. 95% of your application will reside within the <em>/app/</em> directory, which we therefore need to examine in greater detail.<br /><br /><span style="text-decoration:underline;"><em>/config/</em></span><br />When I said that Cake strives to use conventions over configuration, I really meant it. This directory does not contain thousands of configuration files, only five very small ones. They represent the only items which <em>might</em> need to be configured. <br /><br /><ul><br /><li>acl.ini.php: This file must be edited only if you plan to use Cake's default ACL </li>(access control list) system for your application. It sets permissions for the application, so it should be used to list every group, user, and their respective rights. This can be useful for small sites with a few well known users, but for anything else, you should develop your own ACL or authentication system that relies on a database. <br /><li>core.php: This file can be edited to change some default options, such as the level of the error messages and notices that the application will output. This comes in very handy while developing an application.</li><br /><li>database.php.default: This should be renamed to database.php and edited if you plan to use any databases with Cake. The settings are fairly straightforward, and include the type of database used </li>(mysql, postrgres, sqlite, or any other supported by the AdoDB library[18]), username, password and database name.<br /><li>paths.php: Unless you are very particular, you should leave this file alone. It tells Cake where to look for CSS files, images, controllers, etc. If you are planning to adopt Cake's directory structure - which is the most logical option - you can ignore this.</li><br /><li>routes.php: Following Rails' example, CakePHP features a "routing system" for user-friendly URLs. By default, your URLs will look like this: </li><em>http://sitename/controller-name/action-name/eventual/action/parameters</em>, which is a really nice way to organize a site, but you may want to change something if you have particular requirements. <br /></ul><br /><br /><br /><span style="text-decoration:underline;"><em>Controllers</em></span><br />As mentioned previously, a controller represents the "brain" of the MVC pattern, the part which controls what the other parts are doing. Imagine a controller like a section of your site: its name will be present on the address bar, and each of these sections will have a file named <something>_controller.php, and will also contain a class named SomethingController that extends the AppController class. This class will have some methods that correspond to some standard actions like <em>index</em> (the default action called when you access the <a href="http://sitename/controller/">http://sitename/controller/</a> page) or other user-defined ones like <em>add</em> or <em>list</em> or <em>admin</em>, depending on the application. As a general rule, you want to add any 'business logic' you want to implement in your application in controllers - for example, calculations or a database query that produces a result. <em>Then</em> once all the mess is done, the result (usually an array or a variable) is passed to the view (see <em>views</em> below). <br /> <br />If this is starting to sound too technical for you, I recommend reading a tutorial[19] available on the CakePHP website about creating a simple blog application. The tutorial will explain most of Cake's basics, including how to pass a variable from a Controller to the corresponding view <em>($this-set('variableNameInView', $variable))</em> and other useful things.<br /><br />Recently <em>Components</em> have been added to CakePHP, and quoting from the corresponding wiki page[20]:<br /><fieldset><blockquote><br />"Components are the preferred way to provide additional functionality to your controller. To make a component available you would add var $component = array('myComponent') inside of your controller's definition, add your file to the /app/controllers/components, name your class MyComponent, and create your methods."<br /></blockquote></fieldset><br /><br /><br /><span style="text-decoration:underline;"><em>Models</em></span><br />A model is an object able to access the database. In Cake's terms, that is any class extending the AppModel class. That class is directly under the <em>/cake/</em> directory (along with the previously mentioned AppController class), and can be moved to the <em>/app/</em> directory and modified if you want to add some particular site-wide behavior to it which will be inherited by all models extending it.<br /><br />In even simpler terms, you need to create a Model class for every table you're planning to use in your database. A convention in Cake says that database table names should be plural and that the corresponding model should be singular. If you use a table named 'mice', your model should be named 'mouse': Cake is smart enough to understand irregular plurals through an <em>Inflector</em> class.<br /><br />Creating a model class for basic use is trivial:<br /><br /><br />class Post extends AppModel<br />{<br /> var $name = 'Post';<br />}<br /><br /><br />Then you'll be able to access the model (and therefore the database) from a controller via simple instructions like $this->Post->findAll(). This instruction will query the database and return all records within the Posts table in your database. You can also perform more complex operations, and also specify SQL queries to execute, if you need to, but remeber that models can only be accessed through controllers! If you need some information stored in your database to be displayed on a view, execute the query from the controller and pass it to the view as per the MVC pattern. It can prevent you from cluttering views with business logic and thereby making code updates much harder.<br /><br /><br /><span style="text-decoration:underline;"><em>Views</em></span><br />Views are used to present information gathered with a model and a controller to the public. They are mostly HTML pages with some PHP tags in them, prints of variables and maybe some <em>foreach</em> loops. Nothing more than that should be used in a view!<br /><br />Views must be placed in this directory and obey the following conventions:<br /><br />1. They must be named after a controller's action to allow the controller to refer to a particular view automatically. The same view can be used by multiple controllers, but it must be either set manually or through a layout (see below).<br />2. Views referring to an action of a particular controller must be placed under a subfolder named after the controller.<br />3. All views must have a .thtml extension.<br /><br />Any site-wide view, like the site's template, must be placed under the <em>layouts</em> subfolder. In particular, the default.thtml file in the folder represents the global template for your application: page titles and specific pages (views) will be invoked automatically by using $title_for_layout and $content_for_layout respectively.<br /><br />Similarly to what was said about components, <em>helpers</em> can be used to extend views functionalities[20]:<br /><br /><fieldset><blockquote><br />"Helpers are all about the view. You know about the helpers in Cake, but you need a little bit more. You want to have your own methods to display formatted info. To achieve this, you need to add var $helpers = array('myHelper').<br /><br />Now, throw your myhelper.php file into the /app/views/helpers/, create the class MyHelper, and $myHelper is available in the view." <br /></blockquote></fieldset> <br /><br />Cake comes with some very useful default helpers to create links and HTML tags, import JavaScript, create forms, and use AJAX code easily. Unlike most other frameworks, Cake neither has nor uses a third party template engine (like Smarty[21]) for views, but helpers can be used to achieve similar results more quickly than an engine can.<br /><br /><br /><span style="text-decoration:underline;"><em>Plugins</em></span><br /><br />Plugins are user-developed enhancements for Cake. Unlike the files placed under the <em>vendor</em> directory, a plugin is an application specifically made to be used within the CakePHP environment. At the moment this feature is still under development.<br /><br /><span style="text-decoration:underline;"><em>Webroot</em></span><br /><br />If you read carefully what I wrote above about routes, you might be wondering if <em>every</em> page must have a controller and a view in order to be displayed properly. What about images, JavaScript and CSS files? The answer is this directory: everything you place here will not be seen as part of the MVC-based environment; CSS files can be stored in the <em>/css</em> folder, Javascript under <em>/js</em>, and so on. Additionally, some helpers can provide a easier way to access or display images, scripts, CSS, etc.<br /><br /><br /><span style="text-decoration:underline;"><em>Other Features</em></span><br />Cake offers even more than this; the latest releases have introduced a few more Rails-inspired features:<br /><br /><ul><br /><li>Scaffolding: Do you want to test your application without spending time writing all the CRUD </li>(Create, Read, Update, Delete) code? That's where the concept of scaffolding comes in: by setting a few variables in the right places[22], Cake will generate basic mechanisms to add, edit, list, and delete records in your database, along with all the associated view files. You won't have to code a single form, as everything will be generated automatically by the framework according to SQL field types.<br /><li>Bake: Another Rails-inspired feature revisited in PHP. Rails uses a set of scripts and in particular the </li><em>rake</em> utility to instantaneously create the foundation for a Rails application with scaffolds already in place. CakePHP offers the same functionality through the <em>bake</em> utility, which is currently available as either a batch file or a PHP script.<br /><li>ACL: As previously mentioned, Cake comes with a ready-made Access Control List </li>(ACL) system, which can be extended and used to restrict particular areas of a Cake application to certain users or user groups.<br /><li>Compatibility: CakePHP is fully compatible with both PHP and PHP5.</li><br /></ul><br /><br /><br /><strong>Meet the Bakers</strong><br /><br />After reading all these things about CakePHP and its framework, you may have some questions, or be curious about some aspect of the project. PHPNut and gwoo, two of CakePHP's creators and lead developers, offered to answer some questions exclusively for zZine readers. This interview took place on Oct. 26th, 2005, in #dev-cakephp on irc.freenode.org.<br /><br /><em><span style="text-decoration:underline;">h3rald</span>:</em> Thanks to both of you for allowing me to interview you about your project, CakePHP. Where did the name come from, anyway?<br /><br /><em>PHPnut:</em> The original project was started by Michal Tatarynowicz aka Pies (hence the name), and when I saw his release, last March, I decided to contact him. I told him that the company I own supports projects like Cake, and also that I was in the process of developing something along the same lines. <br /><br /><em><span style="text-decoration:underline;">h3raLd</span>:</em> Is Cake released under the GPL? How many developers are helping out?<br /><br /><em>gwoo:</em> Cake is released under the MIT license, and the development team is composed of me and PHPnut, plus four other contributors. Then there's the Documentation Team, currently 3-5 people. Documentation has to follow the releases, so it usually lags behind a bit: we made so many modifications in the recent release that the Doc Team has a lot to catch up on, but it's getting there.<br /><br /><em>PHPnut:</em> With this release you will see that the docs are going to be much better. The code is very stable now, and hopefully very little changes on that.<br /><br /><em><span style="text-decoration:underline;">h3raLd</span>:</em> Some people, at first glance, may think that Cake is a PHP port of Ruby on Rails. How true is that? What are the differences and similarities between these two frameworks?<br /><br /><em>PHPnut:</em> Cake started as a port, but has evolved into something more: we discussed using the concepts that RoR offered and including them in a framework for users of PHP. I have used PHP for a number of years, and I am comfortable with it; this is where my passion is, and I think people who use Cake have those same passions as we developers do.<br /><br /><em><span style="text-decoration:underline;">h3raLd</span>:</em> I read once that Rails was developed in Ruby because only Ruby can offer certain functionalities and features...<br /><br /><em>gwoo:</em> I would disagree, and I think that is proven in what we have done: sure RoR has a built in server and some other nice things, but PHP is everywhere.<br /><br /><em><span style="text-decoration:underline;">h3raLd</span>:</em> Some developers, especially Perl programmers, tend to consider PHP an "inferior" language sometimes. What do you think of that?<br /><br /><em>PHPnut:</em> My name says what I think about them all.<br /><br /><em>gwoo:</em> PHP is a web programming language; that's what it was designed for, and that's what it does best: It all boils down to what you are comfortable with.<br /><br /><em><span style="text-decoration:underline;">h3raLd</span>:</em> Did you try any other PHP frameworks, MVC-based (Mojavi, for example), or event-driven, like Prado? What do you think about them? In what ways can Cake be better or worse?<br /><br /><em>gwoo:</em> They are all so complex, in my opinion, and I tried nearly all of them. Cake breaks apart the MVC and handle the CRUD in a logical way, and Cake syntax is super easy to learn.<br /><br /><em><span style="text-decoration:underline;">h3raLd</span>:</em> Ruby on Rails has been ported to various languages, including Java and Python. There are three PHP frameworks inspired by the famous Ruby project: Biscuit, PHP on Tracks and CakePHP. What do you think of that? Any chance of a merge? Did you have a look at them?<br /><br /><em>gwoo:</em> You forgot Symfony[27], a PHP5-only port: I tried it but it seems much harder to learn than Cake.<br /><br /><em>PHPnut:</em> I could be wrong, but I think these other projects are behind us in ease of use, in what the framework is capable of doing, and in features, not to mention community support.<br /><br /><em>gwoo:</em> I tried all of the PHP ports of Ruby on Rails and none of them has the features, the community,or a lexicon as good as Cake's.<br /><br /><em><span style="text-decoration:underline;">h3raLd</span>:</em> Why don't you consider CakePHP a port? In what way is it evolving from Rails?<br /><br /><em>PHPnut:</em> Rails and CakePHP share a lot: MVC pattern, Active Record pattern...but we're not strictly following Rails, and we're able to think by ourselves. Recently we changed the directory structure, and in my opinion our is more functional than the Ruby on Rails one.<br /><br /><em><span style="text-decoration:underline;">h3raLd</span>:</em> What can Cake be used for? What kind of projects? Are there any limitations?<br /><br /><em>gwoo:</em> Personally I think that Cake is the most extensible framework out there for PHP: with components, helpers and vendor access you can do anything you want!<br /><br /><em>PHPnut:</em> We are limited only by what a web server (generally Apache, but IIS seems to work as well) and a database can do. We may be limited by PHP itself, but we twist that in our own little sick ways sometimes.<br /><br /><em><span style="text-decoration:underline;">h3raLd</span>:</em> Any thought about AJAX? I saw some nice demos made with Cake. What do you think of this new trend in web development? Some people consider it the future, while others are concerned about compatibility, and still others are relatively indifferent to it. What about you?<br /><br /><em>gwoo:</em> AJAX can be very useful in creating an application, but should not be overused. People have become very comfortable with how the Web works:i f you start doing tons of drag and drop and no refreshes, users will feel lost in how to operate the site.<br /><br /><em><span style="text-decoration:underline;">h3raLd</span>:</em> Thank you very much for your time, both of you. Is there anything you'd like to add to this interview? Something you'd like to say to users interested in trying out Cake?<br /><br /><em>PHPnut:</em> Come and enjoy: we are here to help...<br /><br /><em>gwoo:</em> ...And plan to be here for a very long time!<br /><br /><br /><strong>Let's cook...</strong><br /><br />One of the most positive things about CakePHP is that even though it is a fairly new project (most of the code is 100% useable already,but they still consider the projectto be in the 'alpha' stage), it's maintained by many dedicated developers and PHP enthusiasts. I was amazed to see how the whole documentation evolves and is quite literally updatedon a daily basis. <br />Anybody can contribute to the framework or simply test it and share their experiences.<br /><br /><span style="text-decoration:underline;"><em>CakePHP Wiki</em></span><br /><br />Anybody can register an account for free and contribute tutorials and documentation to the new CakePHP Wiki[23]. This is currently the most up-to-date source for documentation files and tutorials.<br /><br /><span style="text-decoration:underline;"><em>CakePHP User Group</em></span><br /><br />If you need assistance or you want to contact the Cake developers or other Cake users, you can post a message on their Google User Group[24]: people will reply with useful comments, usually on the same day, and the developers <em>do</em> listen to user suggestions.<br /><br /><span style="text-decoration:underline;"><em>CakePHP IRC Channel</em></span><br /><br />If you want to offer (or receive) real-time assistance, feel free to join #cakephp on FreeNode (irc.freenode.org). I went there disguised as a total newbie (it wasn't much of a stretch) and they helped me a lot, explaining basic concepts of the framework and pointing me to the right documentation files.<br /><br /><span style="text-decoration:underline;"><em>CakePHP Development</em></span><br /><br />Experienced PHP developers are more than welcome to contribute to the project. People may be accepted to the core development team if they have sufficient knowledge and spare time, or alternatively,components or code can be submitted through the newly created CakeForge[24]. <br /><br /><br /><strong>...Or Just Eat</strong> <small><em> by Marc Abramowitz</em></small><br /><br />If you don't feel ready to contribute and you'd like to try out the framework first, it can be downloaded directly from the CakePHP site[25] as either a <em>release</em> or a <em>nightly</em> build: the zip file is less than 300KB.<br /><br />I wanted to include a <em>success story</em> written by Marc Abramowitz, an experienced PHP programmer who decided to adopt CakePHP as a framework to use in a production environment: he persuaded his colleagues to use it and they all seem happy with it. He writes:<br /><br /><em>For the past few years, I've done quite a bit of work in PHP, working on production code that runs on a very high traffic web site. PHP has served us well, as it is easy to write and read, quite efficient, and easy to integrate with existing C++ code as the site grew.<br /><br />Lately, there has been a lot of buzz in the web development community about Ruby on Rails. Like many others, I took some interest in Ruby on Rails because I was intrigued by the apparent power and elegance of Ruby and because I wondered if a Model/View/Controller (MVC) framework like Rails would help enforce a more consistent code structure that would make the code easier to understand and maintain. Additionally, I wondered if an MVC framework would enable very rapid prototyping.<br /><br />Some people are very wary of frameworks that impose structure, as they like to have the freedom to do things however they want. However, there is a tradeoff between structure and flexibility. If you're working on a small team or a relatively small project, then you may not find structure to be very helpful; you may even find that it gets in your way. <br /><br />However, as teams and projects get larger, structure becomes more and more valuable, as it enforces consistent patterns of how to do things and rather than being something that limits, it in fact liberates, because it abstracts away the small details and allows us to therefore concentrate on the larger problem. Think of the lines that are painted on our roadways - although they add structure, we don't find them to be limiting. On the contrary, they help us to drive without worrying about crashing into each other at every moment - they free us from being concerned with small details so that we can concentrate on getting where we're going.<br /><br />Rapid prototyping appeals to me, because I find it helps me to better present my ideas for new apps and features. A mockup can only go so far - there is no substitute for a working prototype. When clients get their hands on a functional prototype, they get a better idea of what is possible and it forces them to clarify their requirements for the product. This results in a better dialogue between the developer and the client, which leads to better upfront decisions, more stable requirements, less stress, and a better product.<br /><br />So, Rails appealed to me not only because of the potentially valuable structure that it could add, but also because it could enable rapid prototyping. However, I knew that there was no chance of Rails being used for production code in my organization, because we run some very high traffic web sites that require the utmost in efficiency. We are also by and large a PHP shop.<br /><br />However, when my manager approached me and asked me to develop a database-backed internal tool, I thought of Rails again. I then considered the fact that I would probably someday have to hand this app off to someone else, and that someone would probably know PHP but not Ruby. Heck, even I had several years of experience with PHP (including writing some PHP extensions) but I had only done a little bit of reading about Ruby, and I also had no practical experience with it.<br /><br />Furthermore, with PHP I had access to a large number of PHP extensions that wrapped various internal libraries. So PHP was the natural choice. Ideally, I wanted to use PHP with a Rails-like MVC framework that would facilitate rapid development, and this is what led me to CakePHP.<br /><br />I began by downloading CakePHP 0.9.2 and following the sample tutorial that walks you through creating a simple blog application (note that at the time of this writing, the current version of Cake is now 0.10.0.1076, so some of the details of using Cake have changed). I was pleased to find that the process was quite similar to the process for Rails. One difference that I noted was that Rails tutorials always emphasize using scripts to generate models, controller, and scaffolds, whereas the Cake tutorial walked me through explicitly writing out all the code. I noticed that the Cake download came with a script called "bake" which looked like something that could potentially do some of the code generation, but since it wasn't mentioned in the tutorial, I chose not to use it.<br /><br />The process of creating a first application using the tutorial was quite easy. Here are the steps in brief (consult the tutorial for more details):<br /><br />1. Create the database table. Cake requires tables to have some extra<br />fields:<br /> - id, an auto_increment primary key<br /> - created, a datetime<br /> - updated, a datetime<br />2. Configure Cake to access the database by editing the config/database.php file<br />3. Create a model class which extends AppModel (a Cake provided class)<br />4. Create a controller class which extends AppController (a Cake provided class) and write one or more controller methods<br />5. Create a view which is a PHP file with a .thtml extension and is meant to be mostly HTML with very little embedded PHP - typically just echoing of variables and some simple control structures like <em>foreach</em>.<br />Cake also provides some simple convenience methods that write out certain HTML constructs for you.<br /><br />That's it! That alone is enough to create a basic but functional application. The tutorial goes on to show you how to add additional functionality to the blogging app. After that there's a shorter, more advanced tutorial that shows you how to add a few more things to the blogging app.<br /><br />Once I had gotten comfortable with Cake by following the tutorial, I proceeded to write my own application. Getting started was easy - I followed the same steps as in the tutorial to create my first table, model, controller, and views, then my second table, model, controller, and views. Then my app got a bit more complicated. I needed to have many-to-many relations and more elaborate queries than the default ones that Cake provides. I began to worry that Cake would break down here. I had heard people grumble that MVC frameworks like Rails and Cake were great for little toy apps that only do CRUD (Create, Read, Update, Delete), but that they couldn't handle complex queries using joins and the like. I poked around in the Cake source code and was pleased to find that there were nice lower level methods that allowed me to bypass the Cake defaults and do whatever custom queries I liked. For example, I wrote something like this in one of my models:<br /><br />function index(){<br /> return $this-findBySql(<br /> "SELECT id, title, AVG(rating) avg_rating, MIN(rating) min_rating, MAX(rating) max_rating, COUNT(rating) num_ratings " .<br /> "FROM ideas LEFT JOIN ratings ON ideas.id =<br />ratings.skill_id " .<br /> "GROUP BY id " .<br /> "ORDER BY title");<br /> }<br /><br /><br />So what I have is a model that does <em>not</em> have a one-to-one mapping with a single table. It actually retrieves data from more than one table.<br /><br />Over time, I picked up a few more Cake concepts. For example, at some point we decided that every page of the app would have a similar look and feel with a particular masthead and logo, and all the pages in one section of the site would show tabs for all of the various views with the currently selected tab highlighted. At first, I just used the same code at the top of each of my views to display the masthead, logo, and tabs. This, of course, became a pain when I needed to change the layout, since I needed to make the same change in several different views.<br /><br />Then one day I realized that Cake had a concept of layouts, which are high level templates in <em>app/views/layouts</em> that define the basic structure of pages. The individual views are just content that gets embedded in these high level layout templates. So I took the common masthead and logo, put it in my default layout, and removed it from the individual views. Now when I wanted to change the look of the masthead, I only had to do it in one place. For the tabs, I discovered the concept of elements. I placed the code for my tabs in <em>apps/views/elements/tabs.thtml</em>. Then the tabs could be displayed in any template using:<br /><br /><?php echo $this-renderElement('tabs') ?<br /><br />Rather than stick the above statement in all of the many pages that were supposed to display tabs, I created a new layout in <em>apps/views/layouts/tabbed.thtml</em> (which uses renderElement to render the tabs). Then I used<br /><br />$this-layout = "tabbed"<br /><br />in the controller to tell it to use the tabbed layout rather than the default (non-tabbed) layout.<br /><br />After a couple of days of work on this application, it was time to demo it to the VP, who was very impressed with what I was able to accomplish in such a short period of time. It was brought up that before I took on the project they had asked some other folks how long it would take them to build it in Java and they had said that it would take on the order of months what I had built in a couple of days. Morals of the story:<br /><br />1. Cake is very lightweight and productive<br />2. Cake might be very beneficial to your career<br /><br />Eventually, I was assigned to another project and my manager wanted me to transition my Cake project to another engineer, who was experienced with PHP but not with Cake. I sat down with the new engineer and in about 20 or 30 minutes of explanation and walking him through the code,<br />he felt ready to code. Not only did he feel that he knew enough to start working with the application, I could tell from the smile on his face that he was very impressed by the power and succinctness of Cake, which was the same reaction that I initially had. After a couple of days, I checked back with him and he had made a remarkable amount of progress on the application - there were a ton of new pages and features.<br /><br />So you see, Cake is a very productive environment. For a very small investment in the initial learning curve, you can get a significant increase in productivity.<br /></em><br /><br /><strong>...And the icing?</strong><br /><br />So that's what CakePHP is about. The project may only have just entered alpha stage, but the code is already very stable and useable, as PHPnut, gwoo and Marc said. So what's going to be included in the beta and stable releases? I researched a bit and asked the developers, and here's how Cake will probably evolve in the following months:<br /><br /><ul><br /><li>Cake's built-in </li><strong>data-validation</strong> capabilities will be extended. A validator class - which already exists, by the way - will be extended to include more data types and expressions to be validated before being stored in a database. <br /><li>A new default </li><strong>ACL system</strong> will be included and will support database access and .ini files as well. <br /><li>The </li><strong>AJAX</strong> helper class and AJAX support will be enhanced, featuring unobtrusive JavaScript and ALA behavior[28].<br /><li>Multiple applications with the same core files. In the future developers will be able to create their own Cake application which could be placed in the app/plugins directory and be seamlessly integrated and auto-linked to other Cake applications.</li><br /></ul> <br /><br />After learning all this about Cake and after trying it out myself, I really think that I have found the solution to all of my PHP web development problems. CakePHP can really help PHP developers a lot if properly used and understood. Still not convinced? Just try it out then, will you?[17]<br /><br /><br /><strong>Notes and Related Resources</strong><br /><br />Special thanks to:<br /><br /><ul><br /><li>Larry E. Masters aka PhpNut and Garrett J. Woodworth </li><strong>gwoo</strong> for providing all the answers to my questions and contributing to create such a wonderful tool for the PHP community.<br /><li>Marc Abramowitz for sharing his experiences with the CakePHP framework and providing the content for the '...let's eat' section.</li><br /></ul><br /><br /><small><br />[1] PHP functions reference, <a href="http://www.php.net/manual/en/funcref.php">http://www.php.net/manual/en/funcref.php</a><br />[2] Framework, Wikipedia Page - <a href="http://en.wikipedia.org/wiki/Framework">http://en.wikipedia.org/wiki/Framework</a><br />[3] .NET framework overview - <a href="http://msdn.microsoft.com/netframework/technologyinfo/default.aspx">http://msdn.microsoft.com/netframework/technologyinfo/default.aspx</a><br />[4] "PHP Framework", delorian's blog, PHP Community - <a href="http://www.phpcommunity.org/node/100">http://www.phpcommunity.org/node/100</a><br />[5]Some popular PHP frameworks: Mojavi (<a href="http://www.mojavi.org/">http://www.mojavi.org/</a>), phpMVC (<a href="http://www.phpmvc.net/">http://www.phpmvc.net/</a>), BlueShoes (<a href="http://www.blueshoes.org/">http://www.blueshoes.org/</a>), Seagull (<a href="http://seagull.phpkitchen.com/">http://seagull.phpkitchen.com/</a>).<br />[6] PEAR - <a href="http://pear.php.net/">http://pear.php.net/</a><br />[7] Prado - PHP Rapid Application Development Object-Oriented, <a href="http://www.xisc.com/">http://www.xisc.com/</a><br />[8] Event Driven Programming, Wikipedia Page - <a href="http://en.wikipedia.org/w/index.php?title=Event_driven_programming">http://en.wikipedia.org/w/index.php?title=Event_driven_programming</a><br />[9] Ruby on Rails, Official Page - <a href="http://www.rubyonrails.org/">http://www.rubyonrails.org/</a><br />[10] Ruby on Rails, Doumentation - <a href="http://documentation.rubyonrails.com/">http://documentation.rubyonrails.com/</a><br />[11] Model View Controller, Wikipedia Page - <a href="http://en.wikipedia.org/w/index.php?title=Model-View-Controller">http://en.wikipedia.org/w/index.php?title=Model-View-Controller</a><br />[12] PHP frameworks inspired by Rails: <a href="http://phpontrax.com/">http://phpontrax.com/</a>, <a href="http://flinn.activeintra.net/biscuit/">http://flinn.activeintra.net/biscuit/</a>, <a href="http://www.cakephp.org/">http://www.cakephp.org/</a><br />[13]Python frameworks inspired by Rails: <a href="http://fanery.sourceforge.net/">http://fanery.sourceforge.net/</a>, <a href="http://fanery.sourceforge.net/">http://fanery.sourceforge.net/</a>, <a href="http://subway.python-hosting.com/">http://subway.python-hosting.com/</a><br />[14]Java framework inspired by Rails: <a href="https://trails.dev.java.net/">https://trails.dev.java.net/</a><br />[15]Perl frameworks inspired by Rails:<br /><a href="http://search.cpan.org/dist/Catalyst/lib/Catalyst/Manual/Intro.pod">http://search.cpan.org/dist/Catalyst/lib/Catalyst/Manual/Intro.pod</a>, <a href="http://perlonrails.org/index.php/Main_Page">http://perlonrails.org/index.php/Main_Page</a> <br />[16] "Rails Clones: Blood suckers or useful drones?", RedHanded - <a href="http://redhanded.hobix.com/cult/railsClonesBloodsuckersOrUsefulDrones.html">http://redhanded.hobix.com/cult/railsClonesBloodsuckersOrUsefulDrones.html</a><br />[17] CakePHP - Rails-inpired PHP framework, <a href="http://www.cakephp.org/">http://www.cakephp.org/</a><br />[18] AdoDB, PHP Database Abstraction Layer - <a href="http://adodb.sourceforge.net/">http://adodb.sourceforge.net/</a><br />[19] CakePHP blog tutorial - <a href="http://wiki.cakephp.org/tutorials:blog_tutorial_-_1">http://wiki.cakephp.org/tutorials:blog_tutorial_-_1</a><br />[20] Extending CakePHP - <a href="http://wiki.cakephp.org/tutorials:extending_cake">http://wiki.cakephp.org/tutorials:extending_cake</a><br />[21] Smarty, PHP Template Engine - <a href="http://smarty.php.net/">http://smarty.php.net/</a><br />[22] Scaffolding a Blog, CakePHP Wiki - <a href="http://wiki.cakephp.org/tutorials:scaffolding_a_blog">http://wiki.cakephp.org/tutorials:scaffolding_a_blog</a><br />[23] CakePHP Wiki - <a href="http://wiki.cakephp.org/">http://wiki.cakephp.org/</a><br />[24] CakePHP Google User Group - <a href="http://groups.google.com/group/cake-php">http://groups.google.com/group/cake-php</a><br />[25] CakeForge - <a href="http://cakeforge.org/">http://cakeforge.org/</a><br />[26] CakePHP Downloads Page - <a href="http://cakephp.org/downloads/">http://cakephp.org/downloads/</a><br />[27] Simfony, PHP5 framework - <a href="http://www.symfony-project.com/">http://www.symfony-project.com/</a><br />[28] ALA behavior - <a href="http://bennolan.com/behaviour/">http://bennolan.com/behaviour/</a><br /></small><br />
M contents/articles/choosing-the-right-blogging-platform.mdcontents/articles/choosing-the-right-blogging-platform.md

@@ -1,9 +1,9 @@

----- -title: Choosing the Right Blogging Platform +title: "Choosing the Right Blogging Platform" content-type: article -subtitle: Or why I am still going to use Nanoc for the foreseeable future +subtitle: "Or why I am still going to use Nanoc for the foreseeable future" timestamp: 1398607426 -tags: writing|internet|webdevelopment +tags: "writing|internet|webdevelopment" ----- Every so often I wonder whether I should ditch my current blogging platform and try something new and shiny that just came out. Luckily, normally I come back to the same conclusion: I don't need to change anything, I just need to find the time and the will to write about something.
M contents/articles/concatenative-020.htmlcontents/articles/concatenative-020.html

@@ -1,8 +1,8 @@

----- -title: Concatenative 0.2.0 released +title: "Concatenative 0.2.0 released" content-type: article timestamp: 1240126920 -tags: ruby|concatenative +tags: "ruby|concatenative" ----- <p>Version 0.2.0. of the <a href="/concatenative">Concatenative</a> <span class="caps">DSL</span> has been <a href="http://rubyforge.org/frs/?group_id=8068&amp;release_id=33575">released</a>.</p> <p>Here are some highlights from the changelog:</p>
M contents/articles/concatenative-programming-in-ruby.htmlcontents/articles/concatenative-programming-in-ruby.html

@@ -1,8 +1,8 @@

----- -title: Concatenative programming in Ruby +title: "Concatenative programming in Ruby" content-type: article timestamp: 1238221440 -tags: ruby|concatenative|programming +tags: "ruby|concatenative|programming" ----- <p>A while ago, I sat down examining a few <a href="http://www.h3rald.com/articles/10-programming-languages">alternative programming languages</a> I might decide to learn someday. Each of those languages has its own peculiarities, and I didn&#8217;t choose them randomly, I chose them based on their popularity, power, paradigm and how actively they are developed.</p> <p>I included <a href="http://factorcode.org/">Factor</a> as the only representative for <em>concatenative programming</em>, an interesting way to write programs, but seldom used in &#8220;recent&#8221; languages (except for Factor and a few others).</p>
M contents/articles/design-patterns-in-ruby-review.htmlcontents/articles/design-patterns-in-ruby-review.html

@@ -1,8 +1,8 @@

----- -title: Book Review: Design Patterns in Ruby +title: "Book Review: Design Patterns in Ruby" content-type: article timestamp: 1207885260 -tags: ruby|review|books +tags: "ruby|review|books" ----- <p>I finally got my hands on a shiny new copy of <em>Design Patterns in Ruby<sup class="footnote" id="fnr1"><a href="#fn1">1</a></sup></em>. The book itself is not brand new and it was already widely praised by many different people online, so I wanted to take a look for myself.</p> <p>To my surprise, the book is a hardcover edition, which makes it look more professional and more durable than the average programming book<sup class="footnote" id="fnr2"><a href="#fn2">2</a></sup>. It&#8217;s also smaller and shorter than the average programming book<sup class="footnote" id="fnr2"><a href="#fn2">2</a></sup> (340 pages), which makes it much easier to carry around and less intimidating to read. It&#8217;s also <em>not</em> meant to be a reference book, so it is actually pleasant an easy to read all in one go, as you&#8217;ll soon find out.</p>
M contents/articles/distributed-programming-with-ruby-review.htmlcontents/articles/distributed-programming-with-ruby-review.html

@@ -1,9 +1,9 @@

----- -title: Book Review: Distributed Programming with Ruby +title: "Book Review: Distributed Programming with Ruby" content-type: article -subtitle: Just what you need to get started with the right tools to build large and scalable applications in Ruby +subtitle: "Just what you need to get started with the right tools to build large and scalable applications in Ruby" timestamp: 1277206200 -tags: review|books|ruby +tags: "review|books|ruby" pdf: true -----
M contents/articles/efficient-ruby-code-shortcut-review.htmlcontents/articles/efficient-ruby-code-shortcut-review.html

@@ -1,8 +1,8 @@

----- -title: Book Review: Writing Efficient Ruby Code +title: "Book Review: Writing Efficient Ruby Code" content-type: article timestamp: 1200890820 -tags: ruby|review|books +tags: "ruby|review|books" ----- <p style="float:right;"><img src="/files/efficient_ruby_shortcut.jpeg" alt="" /></p> <p>The second shortcut from Addison-Wesley Professional series I&#8217;m going to review is called <a href="http://www.informit.com/store/product.aspx?isbn=0321540034">Writing Efficient Ruby Code</a>. A very promising title, especially considering that this book is only 50 pages long.</p>
M contents/articles/firefox-lovers-guide-to-opera.htmlcontents/articles/firefox-lovers-guide-to-opera.html

@@ -1,10 +1,10 @@

----- -title: A Firefox Lover's Guide to Opera +title: "A Firefox Lover's Guide to Opera" content-type: article -subtitle: An in-depth review of the Opera browser, with the eyes of a Firefox enthusiast +subtitle: "An in-depth review of the Opera browser, with the eyes of a Firefox enthusiast" popular: true timestamp: 1198847940 -tags: browsers|review|opera|firefox +tags: "browsers|review|opera|firefox" ----- <blockquote> <p><strong>Note:</strong> This article can be considered a sequel for <a href="http://www.h3rald.com/articles/ie-lovers-guide-to-firefox">An IE Lover&#8217;s Guide to Firefox</a>, which described Firefox through the eyes of an Internet Explorer fan. Similarly, this article describes Opera&#8217;s features from the point of view of a user &ndash; myself &ndash; who has been using Firefox for years and is now considering another browser switch.</p>
M contents/articles/firefox3-revealed.htmlcontents/articles/firefox3-revealed.html

@@ -1,8 +1,8 @@

----- -title: Firefox 3 Revealed +title: "Firefox 3 Revealed" content-type: article timestamp: 1213670760 -tags: firefox|browsers|writing|review|books +tags: "firefox|browsers|writing|review|books" ----- <p>When the SitePoint staff asked me to write an article summing up all the new features of Firefox 3, I gladly accepted: I wrote about Firefox before, and I thought it was just going to be a 2-3 hours job maximum. <br /> After diving deeper into Firefox 3 development, reading dozens of different blogs and scouting Mozilla&#8217;s web sites, I realized I was wrong: Firefox 3 introduced <em>a lot</em> of new things, and keeping track of all of them, I admit, was quite a hard task.</p>
M contents/articles/from-firefox-to-deer-park.htmlcontents/articles/from-firefox-to-deer-park.html

@@ -1,7 +1,7 @@

----- -title: From Firefox to... Deer Park? +title: "From Firefox to... Deer Park?" content-type: article timestamp: 1132509930 -tags: firefox|browsers|review +tags: "firefox|browsers|review" ----- On May 31st 2005 the Mozilla Foundation silently released the Deer Park browser... no, it's not another name change for Firefox, but the codename they gave to the long-awaited 1.1 release of the free, famous, award-winning browser. Actually what we have for now is just a non-feature complete developer preview release of the new milestone, the first alpha release, in other words. The alpha release nevertheless seems to be fully functional and already useable.ETAs for the actual stable version are not given as usual, but we should expect another alpha candidate soon hopefully (They wrote "June" on the <a href="http://www.mozilla.org/projects/firefox/">roadmap</a>, and we're already in July). Anyhow, this developer-oriented preview release can be <a href="http://www.mozilla.org/projects/firefox/">downloaded</a> and installed on Windows, Linux, and Mac OS X systems plus eventually, <a href="http://ftp.mozilla.org/pub/mozilla.org/firefox/releases/deerpark/alpha1/contrib/">Solaris and others</a>. The decision of using the codename Deer Park instead of naming the release Firefox 1.1 alpha 1 or something of the like was made to avoid the havoc which occurred before the official release of Firefox 1.0 (which was codenamed "Phoenix" by the way,) when some websites offered a late preview release as the actual new version to download.<br />This time when you install and run the program the Firefox name has been substituted with Deer Park Alpha 1, so for example Deer Park is used in the browser's title bar and in the "About Deer Park Alpha 1" menu under "Help". The icon they used for this testing release is not even the usual firefox icon - it represents a plain blueish globe with no fox whatsoever. They have definitely put in effort this time to avoid confusion.<br /><br />Furthermore, when the browser is installed it does not overwrite your existing firefox installation, simply because (on windows) it's installed under a directory named "Deer Park Alpha 1". As a side note, the process is "firefox.exe", so you cannot run Firefox and Deer Park at the same time: you'll just open another window of the browser which is already running. Having said this, let us now examine what is new in this developer's release.<br /><br /><strong>Fixed bugs</strong><br />Like any other Firefox Release, Deer Park comes with several <a href="http://www.squarefree.com/burningedge/releases/1.1a1.html">Bug Fixes</a>. On the official changelog there are many bugs reported to be fixed, sometimes they are hardly noticeable but I experienced some of them when browsing some websites and also when creating applications myself:<br /><br />- <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=103638">103638</a> - Targets with same name in different windows open in wrong window with javascript.<br />- <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=97283">97283</a> - Mouse wheel scrolling does not work for elements such as div using overflow - auto or scroll.<br />- <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=251986">251986</a> - Keyboard scrolling does not work for elements such as div using overflow - auto or scroll.<br />- <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=245829">245829</a> - Download manager progress and title do not update correctly, wrong number of files and percentage after finishing or cancelling a download.<br /><br />These are in my opinion the most notable of the notable bugs which have been fixed in this release. I was particularly relieved when I noticed that all the issues regarding scrolling divs or similar elements had been resolved. Also, it must be noted that Deer Park seems overall slightly faster than Firefox 1.0.4 (Note: I also have a Pentium II, that is why I could notice that probably). The speed increase is most probably caused by the base for Deer Park being the Mozilla 1.8 Beta 2 code, which is almost 1 year newer than what used for Firefox 1.0.<br /><br /><br /><strong>New Features</strong><br />Although announced as a non-feature complete release, it comes with some new and useful features. The new feature list includes nothing too extraordinary for now and they are all somehow minor changes but they really do represent some improvements. Perhaps the two most obvious features introduced with this release are the <em><strong>Sanitize Deer Park</strong></em> and the <em><strong>Report Broken Sites</strong></em> functions. The first one is accessible through the Tools menu and basically allows you to delete the Browsing History, Saved Form Information, Saved Passwords, Download History, Cookies and Cache. Actually you can accomplish the same feat via Options->privacy, but with Sanitize you need just one click. Convenience I suppose?<br /><br />The Report Broken Sites feature is reachable via the Help menu and basically starts a short wizard that you can use when you notice something wrong with a website. You just have to provide the url of the website, the problem you experienced (Browser not supported, cannot login, plugin not installed, other content missing, odd behaviou, odd appearence, etc.) and an optional description and email and then the report will be submitted to the Mozilla Deleopers.<br /><br />Additional features included are also <em>Image thumbnails as Tab icons</em>, used when viewing a single image with firefox, not a shocking feature really but it's just a little (tiny) bit of eyecandy I guess. Furthermore, when you try accessing an FTP server anonymously and that server doesn't allow anonymous access, you are prompted to provide appropriate credentials (before it just didn't let you in)... another little improvement, which probably will not change your life, but it's nice to know that it's there.<br /><br />Another more notable feature only for linux and mac users though allows changes made in the Preferences menu to be applied immediately without restarting your system. Using Windows on the other hand, they improved the option interface with a more extensive use of tabbed interfaces, and also additional options concerning tabbed browsing (BUT in my opinion the <a href="https://addons.mozilla.org/extensions/moreinfo.php?id=158&application=firefox">tabbrowser preferences</a> extension is still necessary to achieve certain behaviours).<br /><br />Regarding something more technical, among the so-called developers features there are various improvements regarding CSS support, in particular CSS2's <a href="http://www.w3.org/TR/CSS21/generate.html#quotes-specify">quotes nesting</a> and even some new CSS3 (!) features, like <a href="http://www.w3.org/TR/css3-multicol/">Multi-column layouts</a> the :only-child selector, overflow-x and overflow-y properties and even various new <a href="http://www.w3.org/TR/css3-ui/#cursor">cursors names</a>.<br />Even more news from Mozilla suggests that Deer Park already supports some functions for resolution-independent scalable vector graphics (SVG 1.1), but it's obviously just experimental, and even scriptable bitmap drawing surface (<a href="http://developer-test.mozilla.org/docs/Drawing_Graphics_with_Canvas">Canvas</a>). Last but not least, even support for <a href="http://www.w3.org/MarkUp/Forms/">Xforms</a> is already possible in Deer Park through a <a href="http://www.mozilla.org/projects/xforms/">related project/extension</a>. <br /><br /><br /><strong>Final Thoughs</strong><br />Again the Mozilla Foundation - with this fully functional but yet incomplete preview release,- seem to be always improving their foundations, and always offering support for new technologies and features before others. This release has certainly seen some great improvements, on the other hand hardly anything changes for website developers with this release. It is without a doube that websites are viewed better with Deer Park than with Firefox 1.0.4 or IE or any other browser for that matter. But it is impossible to even start planning at this stage for the development of a publicly accessible site using for example SVG graphics and Xforms, as visitors using other browsers will not be able to see any "magic" in them, or perhaps even view them at all.<br /><br />It's always the same paradox of web-development: where on one side of the coin there are new and better products are available, a website/online application should be accessible by at least 90-95% of visitors. Unfortunately, for now though 90-95% of all internet users seem to use <em>some other product</em> instead of Firefox or Deer Park... But that's another story!<br />
M contents/articles/getting-started-with-lithium.htmlcontents/articles/getting-started-with-lithium.html

@@ -1,8 +1,8 @@

----- -title: Getting Started with Lithium +title: "Getting Started with Lithium" content-type: article timestamp: 1256654880 -tags: li3|php|tutorial +tags: "li3|php|tutorial" ----- <p>So <a href="http://li3.rad-dev.org/">Lithium</a> is now officially out, and its 0.1 release can be freely <a href="http://rad-dev.org/lithium/versions">downloaded</a> from the official web site or by cloning the Lithium git repository. The good news is that although not many web hosts offer <span class="caps">PHP</span> 5.3, you can try it out youself, locally and with minimum effort.</p> <h3>Requirements</h3>
M contents/articles/git-for-the-locals.htmlcontents/articles/git-for-the-locals.html

@@ -1,8 +1,8 @@

----- -title: Git for the Locals +title: "Git for the Locals" content-type: article timestamp: 1216095480 -tags: programming +tags: "programming" ----- <p><em>&#8220;This is a <strong>local</strong> shop for <strong>local</strong> people, we want no trouble here!&#8221;</em></p> <p>&mdash; Edward, <a href="http://en.wikipedia.org/wiki/League_of_gentlemen">The League of Gentlemen</a></p>
M contents/articles/glyph-020-released.htmlcontents/articles/glyph-020-released.html

@@ -1,9 +1,9 @@

----- -title: Glyph 0.2.0 Released +title: "Glyph 0.2.0 Released" content-type: article -subtitle: Featuring single-file compilation, programmatic usage and auto-regeneration, and more +subtitle: "Featuring single-file compilation, programmatic usage and auto-regeneration, and more" timestamp: 1273417200 -tags: glyph|ruby|opensource +tags: "glyph|ruby|opensource" ----- <section class="section">
M contents/articles/glyph-030-released.htmlcontents/articles/glyph-030-released.html

@@ -1,9 +1,9 @@

----- -title: Glyph 0.3.0 Released +title: "Glyph 0.3.0 Released" content-type: article -subtitle: The third release of the Glyph Authoring Framework features dramatic speed improvements, and much more +subtitle: "The third release of the Glyph Authoring Framework features dramatic speed improvements, and much more" timestamp: 1276431000 -tags: glyph|ruby|opensource +tags: "glyph|ruby|opensource" ----- <section class="section">
M contents/articles/glyph-040-released.htmlcontents/articles/glyph-040-released.html

@@ -1,9 +1,9 @@

----- -title: Glyph 0.4.0 Released +title: "Glyph 0.4.0 Released" content-type: article -subtitle: Featuring web output, HTML5 support, stats, wkhtmltopdf, and much more +subtitle: "Featuring web output, HTML5 support, stats, wkhtmltopdf, and much more" timestamp: 1283535900 -tags: glyph|ruby|opensource +tags: "glyph|ruby|opensource" ----- <section class="section">
M contents/articles/glyph-050-released.htmlcontents/articles/glyph-050-released.html

@@ -1,9 +1,9 @@

----- -title: Glyph 0.5.0 Released +title: "Glyph 0.5.0 Released" content-type: article -subtitle: Featuring Calibre integration, macro composition, Turing-completeness, and more +subtitle: "Featuring Calibre integration, macro composition, Turing-completeness, and more" timestamp: 1314559080 -tags: glyph|ruby|opensource +tags: "glyph|ruby|opensource" ----- <section class="section">
M contents/articles/google-apps-for-your-domain.htmlcontents/articles/google-apps-for-your-domain.html

@@ -1,8 +1,8 @@

----- -title: Google Apps for your domain: a shared hosting killer service? +title: "Google Apps for your domain: a shared hosting killer service?" content-type: article timestamp: 1156737060 -tags: google|internet|ajax|web20|review +tags: "google|internet|ajax|web20|review" ----- <p>A while ago Google started offering services like <a href="http://mail.google.com/mail/">Google Mail</a> (Gmail) and <a href="http://www.google.com/calendar/">Google Calendar</a> to domain owners. Sure everyone likes Gmail, but one of the few bad things about it is that it never feels &#8220;unique&#8221;: your email address is always gonna be <something><code>gmail.com or &lt;something&gt;</code>googlemail.com. Not a big deal? Well, sure, not really, but it really depends on the people using the service and how fussy they are:</p> <ul>
M contents/articles/google-chrome.htmlcontents/articles/google-chrome.html

@@ -1,8 +1,8 @@

----- -title: Chrome - Google did it again! +title: "Chrome: Google did it again!" content-type: article timestamp: 1220401860 -tags: browsers|review|google +tags: "browsers|review|google" ----- <p style="float:left;"><img src="/files/google-chrome/chrome-logo.jpg" alt="" /></p> <p>It looks like there&#8217;s a <a href="http://www.google.com/chrome">new open source browser</a> in town. As usual, nearly everything about it <a href="http://blogoscoped.com/archive/2008-09-01-n47.html">leaked</a> <a href="http://www.techcrunch.com/2008/09/01/first-public-screen-captures-of-google-chrome/">before</a> its <a href="http://www.google.com/chrome">release</a>. Every blog that matters is talking about it, so if you didn&#8217;t hear anything about it, you&#8217;d better take a look yourself. Don&#8217;t be fooled by the usual <a href="http://www.techcrunch.com/2008/09/01/meet-chrome-googles-windows-killer/">senseless ravings</a> of some weird, overly-hyped blogger though: a <em>browser</em> just came out, nothing more and nothing less. It&#8217;s not the end of Windows, it&#8217;s not the end of the Internet, it&#8217;s not the end of the world as we know it. It&#8217;s just a new player in the Browser Wars.</p>
M contents/articles/google-earth.htmlcontents/articles/google-earth.html

@@ -1,7 +1,7 @@

----- -title: Software Review: Google Earth +title: "Software Review: Google Earth" content-type: article timestamp: 1134215339 -tags: review|google +tags: "review|google" ----- Almost every person on Earth has seen an image taken from a satellite at least once in his or her life: now imagine putting all those images together to make a sort of "patchwork world"...this is unfortunately not as simple as gluing atlas maps together, because height, resolution and orientation must be considered. However, "A computer could do all that"...and so it happened!<strong>In the beginning...</strong><br /><br /><br /><a href="http://www.nasa.gov/home/index.html?skipIntro=1">Nasa.gov</a> has always been one of the most famous and most visited websites in history, and among the resources you can find there, besides the pictures of space-related objects and phenomena that everyone flocks to, are satellite pictures of Earth. <br />Perhaps one of the most wonderful things NASA did software-wise was the realization of an open source software called <a href="http://worldwind.arc.nasa.gov/index.html">WorldWind</a>: <em>"World Wind lets you zoom from satellite altitude into any place on Earth. Leveraging Landsat satellite imagery and Shuttle Radar Topography Mission data, World Wind lets you experience Earth terrain in visually rich 3D, just as if you were really there."</em><br />A really cool thing indeed, if you ask me. So cool that people from all over the world started downloading and using it, causing problems on NASA's server for the project, which was extremely busy or even unreachable. The download is now mirrored on Sourceforge, download.com, and Wayne State University, but the server problem has to do with getting to the server to access the images. So why bother downloading if you know it doesn't actually work, regardless of the reason?<br /><br />The alternative, until a year or so ago, was a product created by "Keyhole Corp." - I won't bother posting a link to the site, you'll read why below. Guys from Keyhole basically created a similar program that was much faster, with no server timeouts and better image resolution. Of course, they thought they could charge for it, and I believe that back in the day some people actually paid $70 for what was seen afterwards as a piece of software with a great potential that was never tapped.<br /><br /><br /><strong>Google enters the scene</strong><br /><br />"Hey, look! It works! Now let's get it and do it better!" - This is, in a nutshell, Google's policy in the last 2 years or so: they find relatively small(er) companies that produced something with potential, buy it, and they either improve and resell the product, or give it away for free, getting income from advertising. It happened before, with Picasa and Blogger, for example, and now, with Keyhole as well (for a pretty complete list of Google's acquisitions and possible future targets, have a look <a href="http://www.kuro5hin.org/story/2005/6/12/143721/743">here</a>).<br />This is not a bad thing for the end user, because often new Google-branded products are free or discounted, and Google is happy because it can still make a huge profit from it: if you ask me, that's a much better policy than Microsoft's ("Create something which doesn't work, try to patch it eventually, force people to use it"), at least from a certain point of view.<br /><br />Anyhow, Google <a href="http://www.google.com/press/pressrel/keyhole.html">purchased</a> Keyhole Corp. on October 27th, 2004. The next day, Google said "let's drop Keyhole's price to 30 bucks" - And Google saw that it was good.<br /><br />Then everything went (almost) silent, until June 18th, 2005, seven months and one day since the acquisition of Keyhole, Google officially <a href="http://slashdot.org/article.pl?sid=05/06/28/1733229&amp;from=rss">released</a> a new product, called <a href="http://earth.google.com/">Google Earth</a>. <em>"Thus the heavens and the earth were finished, and all the host of them" [Gen. 2:1]</em><br /><br /><br /><strong>Welcome to a brand new world</strong><br />Pseudo-biblical jokes apart, Google's new Earth can be downloaded and installed FOR FREE! Go and <a href="http://desktop.google.com/download/earth/index.html">get it</a> because it's interesting, but please don't click on the link I provided before because you'll find out that Google won't let you download it, because they got too many requests, so... <br />So that's why, also thanks to Google, I found some <a href="http://www.majorgeeks.com/download4659.html">Major Geeks</a> mirrors and got it from there. The file is 10 MB, so if you have 56K dial-up don't bother, because it needs at least a 128Kbps connection to run correctly. Below are the minimal system requirements, the recommended ones, and what my PC has. As you can see, processor speed actually doesn't matter if you have a good video card and a good Internet connection.<br /><br /><em>Minimal Configuration</em><br /> * Operating system: Windows 2000, Windows XP<br /> * CPU speed: Intel? Pentium? PIII 500 MHz<br /> * System memory (RAM): 128MB<br /> * 200MB hard-disk space<br /> * 3D graphics card: 3D-capable video card with 16MB VRAM<br /> * 1024x768, 32-bit true color screen<br /> * Network speed: 128 kbps ("Broadband/Cable Internet")<br /> <br /><em>Recommended Configuration</em> <br /> * Operating system: Windows XP<br /> * CPU speed: Intel? Pentium? P4 2.4GHz+ or AMD 2400xp+<br /> * System memory (RAM): 512MB<br /> * 2GB hard-disk space<br /> * 3D graphics card: 3D-capable video card with 32MB VRAM or greater<br /> * 1280x1024, 32-bit true color screen<br /> * Network speed: 128 kbps ("Broadband/Cable Internet")<br /><br /><em>h3raLd's crappy PC's Configuration</em> <br /> * Operating system: Windows XP<br /> * CPU speed: Intel? Pentium? PII 350 MHz<br /> * System memory (RAM): 256MB<br /> * 30 GB hard-disk space<br /> * 3D graphics card: nVidia GeForce II MX 32MB VRAM<br /> * 1024x768, 32-bit true color screen<br /> * Network speed: 1240 kbps<br /> <br />I downloaded it, installed it, and it worked fine on my PC. Please note that Google has been pretty specific regarding the compatible OSes, basically only Windows 2000/XP are supported: very old systems (Windows 95/98/Me and alike) and very new systems (Windows Server 2003, X-x64) are not meant to be able to run it. Mac users shouldn't bother trying, while Linux users will be glad to read that it's supposed to work under <a href="http://appdb.winehq.org/appview.php?versionId=3254">wine</a> (rated "bronze").<br /><br />Let's suppose you installed the program and you're running it. If you don't want to try it because you are still unsure if it's worth or not, you can have a look at this <a href="http://newrecruit.org/archives/2005/may/googlekeyhole">article</a>, and in particular at the screenshots. <br />I found it quite easy to use, as are nearly all Google applications; the interface is quite pretty and does the job. You'll immediately notice the main panel where the world and images will be shown, then there's a bottom panel mainly used for navigation, while on the right the three main functions of the program are clearly presented in 3 tabs ("Fly to", "Local Search" and "Directions"), together with two other tabs below for adding/removing details from the map and managing your saved places and results.<br /><br />As it's a Google product, one of the most handy features is the search engine. You can put in a city, town, even street or building, restaurant, or place of interest, and the program should be smart enough to find it and take you there. With the "Fly Now" feature it's possible to just center the view on one place, for example. The resulting map will be at a certain height, depending on what term you searched for. You can now zoom in or out with your mouse wheel or with the buttons provided in the navigation panel, and you'll see the map updating. This is a gradual process and depends mainly on your connection speed, but also the available RAM, the video card, and the processor speed. <br /><br />As it's still a relatively new product, don't expect to find everything... or better, you can find (nearly) everything, but it might not be at the highest resolution, for example, and thus appear blurred on zoom. Currently the USA, the UK, and Western Europe are the places with the most details. In particular, in the major cities of the US you can also see a 3-D re-creation of the buildings which, even though in plain gray, actually reproduce the real shape of the element. <br />Furthermore, in the navigation panel you can also tilt up and tilt down the view! So the end result is a map which is half real and half virtual.<br />If you search for another place, you will not be taken there instantaneously, but instead Google Earth zooms out appropriately and moves around the globe to where the new place is and zooms in appropriately: a really nice effect.<br /><br />Also keep in mind that you can add or highlight details on the map, like grids, roads, names, places to see, restaurants, stadiums, railroads, boundaries and borders, different types of schools, earthquake areas, and - even if the satellite maps used can be up to three years old - statistical data about Cloud Coverage and a lot of other things.<br /><br />The other two functions, "Local Search" and "Directions" allow you, respectively, to perform a search restricted to the area (i.e. Trafalgar Square - London, UK) and get directions between two places, highlighting the suggested path. Also, all places you see can be saved, marked, and printed: wonderful.<br /><br /><br /><strong>Limitations and Opinions</strong><br /><br />As a Beta, Google Earth does come with limitations: as I wrote earlier, only USA, UK, and Western Europe are (almost) fully supported, but you can already get some pretty decent pictures from 200 miles up anywhere in the world. Another limitation is that since the images often come from different satellites, "patches" can be seen sometimes, where part of a picture of an area is darker or lighter than another.<br /> <br />However, you can't really complain about this software, because it's free and obviously Google's server seems to be always available, unlike NASA's. f you want more, Google Earth is available as a Plus edition (20$) and Pro edition (400$), with more <a href="http://earth.google.com/product_comparison.html">features</a> and support. <br />What of Microsoft? Well, Microsoft is said to be planning to "strike back" during this summer, with <a href="http://www.google.com/url?sa=U&amp;start=1&amp;q=http%3A//blog.searchenginewatch.com/blog/050523-125208&amp;ei=hy3EQpqoGcmciALB8vinCw&amp;sig2=ZNIj3_KWXuDMr4_2WmrCNA">MS Virtual Earth</a>, let's just wait and see...<br />
M contents/articles/h3rald-71.htmlcontents/articles/h3rald-71.html

@@ -1,8 +1,8 @@

----- -title: Introducing H3RALD.com v7.1 +title: "Introducing H3RALD.com v7.1" content-type: article timestamp: 1225081740 -tags: website|rails +tags: "website|rails" ----- <p>I finally decided to redesign my web site. About 2 years passed since last time and I think this was long overdue: a lot of people liked the black <em>Nitefall</em> theme, but a lot of people found a bit too dark for their liking.</p> <p>I decided to go for something more <del>boring</del> traditional this time: white background and only black header and footer. I think the new design improves the overall readability of the site, also because this time I kept thing simple:</p>
M contents/articles/h3rald-81.htmlcontents/articles/h3rald-81.html

@@ -1,9 +1,9 @@

----- -title: H3RALD.com v8.1 Released +title: "H3RALD.com v8.1 Released" content-type: article -subtitle: Featuring a a brand new newspaper-like design, powered by HTML5 and CSS3 +subtitle: "Featuring a a brand new newspaper-like design, powered by HTML5 and CSS3" timestamp: 1285243465 -tags: website|webdevelopment +tags: "website|webdevelopment" ----- <section class="section">
M contents/articles/h3rald-83.htmlcontents/articles/h3rald-83.html

@@ -1,9 +1,9 @@

----- -title: H3RALD.com v8.3 Released +title: "H3RALD.com v8.3 Released" content-type: article -subtitle: A new minimalist design, powered by Twitter Bootstrap +subtitle: "A new minimalist design, powered by Twitter Bootstrap" timestamp: 1356648094 -tags: website|webdevelopment +tags: "website|webdevelopment" ----- <section class="section">
M contents/articles/h3rald-v7-overview.htmlcontents/articles/h3rald-v7-overview.html

@@ -1,8 +1,8 @@

----- -title: Back on Track... +title: "Back on Track..." content-type: article timestamp: 1182515880 -tags: website|rails +tags: "website|rails" ----- <p>&#8230;or better, on <a href="http://www.rubyonrails.org">Rails</a>_. <br /> Yep, this 7th (!) version of the H3RALD website is powered by the overly-popular Ruby web framework <em>and</em> by the <a href="http://www.typosphere.org">Typo</a> blogging platform.</p>
M contents/articles/hastyscribe.mdcontents/articles/hastyscribe.md

@@ -1,9 +1,9 @@

----- -title: Introducing HastyScribe +title: "Introducing HastyScribe" content-type: article -subtitle: A simple command-line application to generate self-contained HTML documents +subtitle: "A simple command-line application to generate self-contained HTML documents" timestamp: 1405881092 -tags: writing|hastyscribe|opensource +tags: "writing|hastyscribe|opensource" ----- Did you ever have to write a document, but didn't want to (or couldn't) use MS Word or another WYSIWYG word processor? Yep, I agree: that's what [Markdown](https://daringfireball.net/projects/markdown/) is for.
M contents/articles/herald-vim-021.htmlcontents/articles/herald-vim-021.html

@@ -1,8 +1,8 @@

----- -title: herald.vim 0.2.1 released +title: "herald.vim 0.2.1 released" content-type: article timestamp: 1258029269 -tags: programming|vim +tags: "programming|vim" ----- <p style="float:right;"><img src="/images/herald.vim/0.2.1_release.png" alt="" /></p> <p><span class="dropcap">I</span> just updated the <a href="/herald-vim-color-scheme/">Herald Vim color scheme</a> to improve the readability of delimiters and search results.</p>
M contents/articles/herald-vim-color-scheme.htmlcontents/articles/herald-vim-color-scheme.html

@@ -1,10 +1,10 @@

----- -title: Herald (Vim Color Scheme) +title: "Herald (Vim Color Scheme)" content-type: article -subtitle: My very own VIM color scheme. Featuring 256, 16 and 8 color support, high readability and... pretty colors! +subtitle: "My very own VIM color scheme. Featuring 256, 16 and 8 color support, high readability and... pretty colors!" popular: true timestamp: 1245211860 -tags: programming|vim +tags: "programming|vim" ----- <p>I use <a href="http://www.vim.org">Vim</a> a lot. It&#8217;s my editor of choice when I code (mainly in Ruby), and also when I write my blog post and articles (mainly in Textile).</p> <p>One thing I always liked about Vim was it powerful syntax highlighting: there&#8217;s probably a syntax highlighting file for every programming language ever created, even the new ones (<a href="http://force7.de/nimrod/index.html">Nimrod</a>? Sure, <a href="http://www.vim.org/scripts/script.php?script_id=2632">here</a>!).</p>
M contents/articles/hlrb-review.htmlcontents/articles/hlrb-review.html

@@ -1,8 +1,8 @@

----- -title: Book Review: Humble Little Ruby Book +title: "Book Review: Humble Little Ruby Book" content-type: article timestamp: 1191383580 -tags: ruby|review|books +tags: "ruby|review|books" ----- <p>After reading the very first paragraph of Mr. Neighborly&#8217;s <a href="http://www.humblelittlerubybook.com/">Humble Little Ruby Book</a> (<span class="caps">HLRB</span> for short, from now on) it was very clear to me that it was going to be quite an unconventional read:</p> <blockquote>
M contents/articles/holiday-house-for-rent.htmlcontents/articles/holiday-house-for-rent.html

@@ -1,8 +1,8 @@

----- -title: Holiday house for rent +title: "Holiday house for rent" content-type: article timestamp: 1240530840 -tags: personal +tags: "personal" ----- <p><img src="/images/sessarego/outside.jpg" style="float:left; border: 1px solid #B80000; margin-right: 10px;" /></p> <p>Part of my family house in the countryside is now available for rent! It&#8217;s located in the small village of <a href="http://italia.indettaglio.it/eng/liguria/genova_bogliasco_sessarego.html">Sessarego</a>, a few minutes away from the coast, on the Italian Riviera.<br />
M contents/articles/ie-lovers-guide-to-firefox.htmlcontents/articles/ie-lovers-guide-to-firefox.html

@@ -1,7 +1,7 @@

----- -title: An IE Lover's Guide to Firefox +title: "An IE Lover's Guide to Firefox" content-type: article timestamp: 1132940820 -tags: ie|firefox|microsoft|firefox|browsers +tags: "ie|firefox|microsoft|firefox|browsers" ----- This is an attempt to explain to Internet Explorer users what Mozilla Firefox is, what its features are and how it can be enhanced or customized. Although this article is written primarily for IE users, it will make interesting reading for any Firefox user who wants to try to convince even the most hopeless IE fan to adopt Firefox for everyday use. <br /><strong><span style="text-decoration:underline;">My Point of View</span></strong><br />After using Mozilla Firefox for at least 2 years, I must admit two things: I'm biased towards Firefox, and I just about forgot what IE is like. When you ask someone who's been using Firefox for a while why he likes it, he would probably say something like, "because Firefox is much better than IE." Then he would start boasting about Firefox's features, like tabbed browsing, security improvements, popup blocking, extensions and so on, without thinking that maybe an accustomed IE user would be overwhelmed by all these new things, and in the end, might become even more obstinate in using IE. <br /><br />From here on, I'll play the part - for teaching purposes only, of course - of an Internet Explorer lover: IE is the only browser I've ever tried, and it is the only thing you need to surf the Net. I also talked with some IE users I know and I actually opened the browser myself (once again, for teaching purposes), and visited some sites. <br /><br />Why not have a real IE Lover write this article? Well, I thought about it, actually, and the only answer I could come up with was: there's no such thing as an 'IE lover', only a lot of people who are too used to IE to want to switch to Firefox. So, I'd better write this all myself; after all, a long time ago, I was just like those people.<br /><br /><br /><strong>IE: I've used it for years and it does the job</strong><br /><br />When I bought my computer from my favourite retailer, I immediately asked him: "Can I go on the Internet with it? Do I need to buy any particular program to visit websites?" and I was told that I didn't need anything at all, because it was all included in <em>Windows XP</em>. I just had to click on the start button and choose "Internet" from the pop-up menu. "Straightforward," I thought. "Anybody can do that!"<br />I soon noticed that to browse the Internet, Windows used a program called Internet Explorer 6, which was actually part of the whole Windows infrastructure, somehow: it's the same thing, more or less, that I use to view directories on my hard drive, just online. This is the way it should be - so tightly integrated with the operating system that you hardly notice its presence!<br /><br />After a while, I learned some more about Internet Explorer, and I noticed that a lot of other applications could be integrated into it, like download managers and <a href="http://www.adobe.com/products/acrobat/readstep2.html">PDF viewers</a>. I also discovered that I could even <a href="http://www.microsoft.com/windows/windowsmedia/mp10/default.aspx">listen to music and watch videos</a> through my browser, directly from webpages.<br /><br />Then I discovered toolbars - and I wasn't entirely happy about them. I installed <a href="http://toolbar.google.com/index_2">Google Toolbar</a>, and I really enjoyed its features, but I noticed that some other toolbars seemed to be installed, even if I didn't want to: I think some other program asked me to install them or something; I don't really know. All I do now is just set Internet Explorer not to display them, and change my starting page back to what I want, because sometimes, for some reason, IE starts with a different page than what I want.<br /><br />All that aside, what I really like about IE is that I can use it for anything and everything, even updating Windows! Microsoft has another cool technology called ActiveX which allows me to download and install Windows security patches and upgrades automatically!<br /><br />I really don't understand how people can run an operating system other than Windows: the Web was <strong>made</strong> for Internet Explorer! It's even <a href="http://www.microsoft.com/mac/products/internetexplorer/internetexplorer.aspx?pid=internetexplorer">available for Macintosh</a>. <br /><br />A friend of mine told me he started using another browser called "Firefox" or "Firebird" or something, and he really likes it! He said it can be used on Windows, Macintosh, Linux, Solaris, and Unix, but when I asked him why it was so good, he told me, "Because it's better, and IE sucks." <br /><br />I don't understand how he can say that, especially because everyone I know uses Internet Explorer, Bill Gates made loads of money out of it, so it can't be that bad! Anyhow, I decided to give this Fire-thingie a shot.<br /><br /><br /><strong><span style="text-decoration:underline;">Face to Face with a Fox</span></strong><br />My friend told me to download this thing from a <a href="http://www.mozilla.org/products/firefox/">website</a>, because it's free. So what? IE is free, too, because it came with my PC. Anyhow, I figured I'd just go and download it so he'd leave me alone about it. I read that Firefox - that's its name - is a free browser developed by the <a href="http://www.mozilla.org">Mozilla Foundation</a> which has received a lot of <a href="http://www.mozilla.org/press/awards.html">awards</a> from various well-known computer-related websites and institutions. It also seem to have a promotional <a href="http://www.spreadfirefox.com/">website</a> that says it has been downloaded nearly seventy million times! All the geeks seem to use it, and they love it. Maybe it's really good, or maybe they just don't like Microsoft. <br /><br />When I ran Firefox for the first time, Internet Explorer warned me that it couldn't verify the authenticity of the download, or something like that, but it says that all the time when I download stuff.<br />The first thing that happened was that I was prompted to import my favourites from Internet Explorer. Great! I didn't want to lose all the sites I have had bookmarked for years. So far, so good.<br /> <br />There were no XP-related icons at all, just some weird ones I didn't like, especially the "Home Page" icon. It sucks compared to the one in IE. It doesn't integrate with Windows; it's just another application for browsing websites, like that <a href="http://www.netscape.com">Netscape</a> thing my friend made me try a few years ago. That at least had an email client and other things included with it. <br /><br />Firefox isn't worth the hassle: my favourite websites look "broken" and the thing is continuously complaining about plugins to view some pages. Some websites even tell me off now because I'm not using IE, in particular Microsoft, which doesn't let me update <a href="http://v4.windowsupdate.microsoft.com/en/thanks.asp?">anymore</a>. I switched back to IE after a few minutes of pointless struggle. <br /><br /><br /><strong>Here's What You Get</strong><br />Firefox and IE are two very different things, and I didn't like that, but I admit I had some prejudices, maybe because of the fact that my friend told me to download something and said it was better, and it really wasn't. So I decided to give both him and Firefox a second chance, and I asked him to explain to me why Firefox is better than Internet Explorer. <br />The first thing he mentioned was the different terminology used by the two browsers, which can be summarized as follows:<br /><code><br />| Internet Explorer | Firefox |<br />| Internet Options | Options |<br />| Temporary Internet Files | Cache |<br />| Favorites | Bookmarks |<br />| Address Bar | Location Bar |<br />| Refresh | Reload |<br />| Links Bar | Bookmarks Toolbar |<br />| Explorer Bar | Sidebar |<br />| Copy Shortcut | Copy Link Location |<br />| Save Target As | Save Link As |<br /></code><br />and that once you get used to the new terms, finding what you're looking for is easier than in Internet Explorer. <br /><br />My friend also said a new feature implemented by Firefox is <em>popup blocking</em>. So I told him that as of Service Pack 2, even Internet Explorer blocks popups (and before that, so did my Google Toolbar) but apparently Firefox had this feature long before Microsoft did. Good to know, but not really impressive.<br />What was more interesting was that Firefox lets you type in whatever you want in the Location bar, even if it's not a Web address, and you will still get the most relevant page available: for example, typing "firefox" takes me to <a href="http://www.mozilla.org/products/firefox/">http://www.mozilla.org/products/firefox/</a>. This is accomplished through Google's "<a href="http://www.google.com/help/features.html#lucky">I'm Feeling Lucky</a>" feature. IE doesn't do this: it gives me a search page for what I typed, or it tries to 'guess' the domain by adding a .com or .net after the word.<br /><br />Firefox still didn't really impress me: some nice tricks, but nothing that would make me want to switch. What started to make the difference was the <strong><em>Tabbed Browsing</em></strong> feature: I knew about it already, because IE started implementing that through the <a href="http://toolbar.msn.com/">MSN toolbar</a>, but it's a bit<a href="http://weblogs.mozillazine.org/asa/archives/008312.html">buggy</a>, so I didn't even try it. Firefox has had this feature since its very first <a href="http://www.mozilla.org/products/firefox/releases/0.1.html">release</a>, so I guess it they represents a fully-functional, stable, and key feature of the browser. Tabbed browsing introduces a new <em>philosophy</em> for browsing the web: there is only one browser window, but it can have multiple <em>tabs</em>, each displaying a different page. You can switch from one tab to another by clicking on the title (tab titles appear horizontally under the location bar), "Open Link in New Tab" by right-clicking on a link, and open empty tabs with either CTRL+T or from the <em>File</em> menu. It takes a while to get used to it, but after a while I couldn't really live without it!<br /><br />I then asked my friend why Firefox doesn't allow me to play music or videos or read pdf files, etc., and he said that I needed to install all the necessary <a href="https://pfs.mozilla.org/plugins/">plugins</a>. This is the most annoying thing about Firefox: you have to "feed" it and "teach" it things - a lot like a baby, really. If the analogy is truly valid, in the end it should be worth it, and I have the feeling that my Firefox will grow up well, if I'm careful.<br /><br />After learning about plugins, and teaching my little Firefox what to do with movies, songs and other types of files, I learnt that it had another really smart feature: outstanding, built-in <em>search capabilities</em>.<br />I had already noticed the small search bar on the top right, next to the location bar: it's basically a shortcut to Google Search. Cool, but I already had this in IE. One thing I didn't like about IE though, was that if I wanted to use a different search engine, like Yahoo or MSN, I had to install <em>another toolbar</em>, and I ended up with something like three different toolbars under the address bar, so I could hardly see the webpages I was browsing!<br /><br />Firefox apparently knows that people might need to use more than one search engine, so you can select other search engines by clicking on the little icon on the left of the aforementioned search bar. Yahoo, MSN, Wikipedia, and others are available, and <a href="http://mycroft.mozdev.org/download.html">others</a> can be installed easily. If you need a plugin for a search engine, and it doesn't exist yet, you can even make it yourself quite <a href="http://mycroft.mozdev.org/generator/">easily</a>.<br /><br />But let's come back a bit to when I ran Firefox for the first time: where did my IE Favourites go? Under the <em>Bookmarks</em> menu, obviously, and they even kept their folder structure. They can be organized through the <em>Manage Bookmarks</em> option, and indeed Firefox's <em>Bookmarks Manager</em>'s interface looks much cleaner and is easier to use than IE's. However, since all the imported bookmarks get dumped in a subfolder, it takes a little time to get them all up to the top level.<br /> <br />Firefox also implements <em>Live Bookmarks</em>: some sites, especially news-related ones like <a href="http://news.yahoo.com/">Yahoo News</a> and <a href="http://news.bbc.co.uk/">BBC News</a>, and <a href="http://slashdot.org/">Slashdot</a> offer <a href="http://en.wikipedia.org/wiki/RSS_%28file_format%29">RSS</a> feeds which are updated several times a day. With Firefox, you can <em>subscribe</em> to a particular site's RSS by clicking on the little square orange icon which appears on the status bar, and a <em>Live Bookmark</em> will be saved. They appear under the <em>Bookmarks</em> menu, in a specific folder, and also on your <em>Bookmarks Toolbar</em> which is under the location bar: clicking on one of them will show the corresponding site's current headlines. You can click on any of the headlines to read the full story/article.<br /><br />Even if my friend realised he just created another Firefox fan, he insisted on telling me a few words about Downloads and Options. Regarding Downloads, there's not much to say: Firefox incorporates a <em>Download Manager</em> that saves all files downloaded from the Net in a specific (selectable) folder, and keeps a history of all downloads. The download manager is opened automatically whenever a file is downloaded, and it also can be opened manually by selecting <em>Tools-Downloads</em>. The really handy part is that you can easily open a downloaded file or the folder it's in, or clear your download history all in one place. The drawback is that it stays open until you close it, and you have to click a button to clear the already downloaded files from the queue.<br /><br /><em>Options</em> is more complex to deal with, as Firefox does not rely on Windows' <em>Internet Options</em>. Firefox's Options (under the <em>Tools</em> menu) are more complete and better organized, as they are clearly divided into 5 main categories:<br /><br /><em>General</em><br />In this panel you can set up your starting page, fonts, colors, language, character encodings, whether or not Firefox is the default browser, and your connection settings.<br /><br /><em>Privacy</em><br />Here - and this is really much better than in IE, I must admit - you can clear and manage history items, saved form information, saved passwords, download manager history, cookies and the browser cache. You can clear everything with a single click, but you'll lose all your saved passwords and your history lists.<br /><br /><em>Web Features</em><br />This panel is for setting your preferences regarding popup blocking, software installation, images, Java and JavaScript.<br /><br /><em>Downloads</em><br />Here you can choose your download destinatination folder as well as set other download-related preferences, like setting particular file types to save to a particular folder.<br /><br /><em>Advanced</em><br />This panel is for - as the name implies - advanced preferences regarding accessibility, browsing, security, validation and certificates. You don't need to change anything here unless you've been told to or you know what you're doing.<br /><br /><em>Is That All?</em><br />That's what I thought, and although I was really impressed with Firefox, I was still missing some features that IE had, such as third party toolbars. My friend was about to go, but he quickly opened a pre-defined firefox bookmark: <a href="https://addons.mozilla.org/">Mozilla Update</a>. "Now you know how Firefox works: I'm sure you can work this out by yourself," he said, and left me with a door to another vast world to explore. The journey was far from over.<br /><br /><br /><strong>Extensions and Themes</strong><br />One aspect of Firefox that was a bit discouraging was the fact that once you install the browser you need to install this, download that, and configure the other thing. For any IE user (like me), this is a major hassle: before, I just wanted to browse the Net, and I didn't care what I was using or how I was using it. Now, I have to be aware of certain things, and more or less <strong>create</strong> the browser I need! On the other hand, this is sort of exciting, in the sense that unlike IE, Firefox can became whatever you want it to be.<br /><br />Even after using Firefox for a while, and even after my friend had explained all its nice features, I still felt that it was somehow incomplete. Luckily, Firefox has <em>extensions</em> and <em>themes</em>. The numerous <a href="https://addons.mozilla.org/extensions/?application=firefox">Extensions</a> enhance Firefox by adding new features which - honestly - I never thought were even conceivable to be included in a browser. Furthermore, Firefox also has <a href="https://addons.mozilla.org/themes/?application=firefox">Themes</a>, so you can change the browser into something completely different, with different icons, shapes and colors!<br /><br />It's worth it to mention some <em><strong>Extensions</strong></em> which really impressed me by the functionality or behaviours they added to Firefox:<br /><br /><a href="https://addons.mozilla.org/extensions/moreinfo.php?id=10&application=firefox">Adblock</a><br />This extension blocks ads - if you don't want to see a banner on a certain site anymore, just right-click on it, select AdBlock, and it's gone! It also remembers your preferences for every URL or site. It's easily customizeable and useful.<br /> <br /><a href="https://addons.mozilla.org/extensions/moreinfo.php?id=158&application=firefox">Tabbrowser Preferences</a><br />This adds a new category in your Options called Tabbed Browsing, where you can customize particular behaviours concerning tabs, like opening all addresses typed in the location bar in a new tab (focused or unfocused), forcing links to open in new tabs instead of new windows, and so on. <br /><br /><a href="https://addons.mozilla.org/extensions/moreinfo.php?id=220&application=firefox">FlashGot</a><br />I complained before that my download manager wasn't integrated with Firefox: this extension does that, and supports nearly every possible download manager and accelerators. It also has a built-in gallery to quickly see what file types you are downloading.<br /><br /><a href="https://addons.mozilla.org/extensions/moreinfo.php?id=743&application=firefox">CustomizeGoogle</a><br />This personalises Google-related sites and services, such as using <a href="http://www.google.com/webhp?complete=1&hl=en">Google Suggest</a> in every search, filtering content and ads, anonymizing data transmitted to Google, and much more.<br /><br /><a href="https://addons.mozilla.org/extensions/moreinfo.php?id=398&application=firefox">ForeCastFox</a><br />Get weather forecasts from all over the world displayed directly on your status bar or anywhere you want.<br /><br /><a href="https://addons.mozilla.org/extensions/moreinfo.php?application=firefox&category=Developer%20Tools&numpg=10&id=60">Developer Tools</a><br />This is THE ultimate solution if you are a web developer or interested in knowing more about webpages. With this extension you can:<br />- Disable <strong>anything</strong> with a single click (images, JavaScript, cookies, colors, animations, etc.)<br />- Get CSS information or modify a page's CSS<br />- Have fun with Forms (convert POSTs to GETs, show hidden fields, and so on)<br />- Perform image-related operations: show paths, attributes, outline particular images, etc.<br />- Get infos about various elements on a page<br />- Clear history, cookies, open java console, view document's source<br />- Outline particular elements (images, tables, etc.)<br />- Resize your browser to a custom or predefined resolution<br />- Validate a page (HTML, CSS, WAI accessibility, speed reports)<br /><br /><a href="https://addons.mozilla.org/extensions/moreinfo.php?id=33">Googlebar</a><br />Clone of the IE Google Toolbar.<br /><br /><a href="https://addons.mozilla.org/extensions/moreinfo.php?id=270">Yahoo Companion</a><br />Clone of the IE Yahoo toolbar.<br /><br /><a href="https://addons.mozilla.org/extensions/moreinfo.php?id=219">FoxyTunes</a><br />Control your favourite media player (several programs supported) directly from Firefox!<br /><br /><a href="https://addons.mozilla.org/extensions/moreinfo.php?id=16">ChatZilla</a><br />A complete, fully functional, easy-to-use IRC client which runs from Firefox.<br /><br /><a href="https://addons.mozilla.org/extensions/moreinfo.php?id=684">FireFTP</a><br />Fully integrated FTP client.<br /><br />There are actually many more extensions available from either the Firefox website or other <a href="http://www.extensionsmirror.nl/">portals</a> which can be very useful, depending on your needs, but there are also <strong>Themes</strong> which can change Firefox's look and feel completely, such as:<br /><br /><a href="https://addons.mozilla.org/themes/moreinfo.php?id=7&application=firefox">Qute</a><br />This theme inspired Firefox default theme: "Icons designed to be modern, dynamic and fresh, with attention paid to usability and comfort over extended use".<br /><br /><a href="https://addons.mozilla.org/themes/moreinfo.php?id=101&application=firefox">Silverskin</a> <br />"Your favourite browser with a silver skin (With the Qute icons by Arvid Axelsson)"<br /><br /><a href="https://addons.mozilla.org/themes/moreinfo.php?application=firefox&category=Popular&numpg=10&id=414">Saferfox Xpanded</a> <br />"A full skin theme with a modern aqua design"<br /><br /><a href="https://addons.mozilla.org/themes/moreinfo.php?application=firefox&category=Popular&numpg=10&id=213">Plastikfox Crystal SVG</a><br />"Plastik style from KDE with Crystal SVG icons" <br /><br /><a href="https://addons.mozilla.org/themes/moreinfo.php?application=firefox&category=Popular&numpg=10&id=72">Noia (eXtreme)</a><br />"This theme is based on the Noia2.0 icon set by Carlitus."<br /><br /><a href="https://addons.mozilla.org/themes/moreinfo.php?application=firefox&category=Popular&numpg=10&id=548">Brushed</a><br />"A Brushed and Polished Browser Interface."<br /><br />Again, many more themes are available. There's something for everyone, really!<br /><br /><br /><strong>To switch or not to switch?</strong><br /><br />Yes, OK, it's not one of those questions which will keep you up at night, but for sure it can be a quandary. Personally, I decided to switch to Firefox gradually, while still viewing some sites in IE, because I think this can be a good compromise. The biggest problem is that even if Firefox supports Web standards (my friend said IE doesn't) some sites do not. Especially before Firefox, web developers apparently had to create their sites to be viewed correctly with Microsoft's browser. That's why some sites still have things like "This site is best viewed in Internet Explorer 6", or even, in some cases, they'll suggest you download the latest IE version, because <em>your browser is incompatible</em> when actually it's <em>the site</em> which is not compatible with <a href="http://www.w3c.org/">Web Standards</a>.<br />Furthermore, <a href="http://www.microsoft.com/com/default.mspx">ActiveX</a> is a non-standardized proprietary technology which Microsoft uses to make software components communicate and also provide complex functionalities necessary for things like Windows Update. Firefox doesn't support ActiveX, which has been exploited many times in the past (and still now): tough luck. Nowadays, Microsoft wants you to have Automatic Updates turned on, so you don't need to visit the Windows Update site anymore. As far as I'm concerned, I'm not too bothered by that, but if someday I need ActiveX technology, there's already a <a href="http://www.google.com/url?sa=U&start=1&q=http%3A//www.iol.ie/%7Elocka/mozilla/mozilla.htm&ei=cwnIQu_tBYqgiAKd9bGrCw&sig2=afi7r8Pa_YLozVo0JbGp9w">Mozilla Project</a> on it. Final note: If you need to switch back to IE for some reason, the <a href="https://addons.mozilla.org/extensions/moreinfo.php?id=35">IE View</a> extension can quickly give you the opportunity to do so, opening IE to view the page you're visiting.<br /><br />It looks like the Browser Wars have started again, and as a matter of fact, Firefox is becoming known for its features, innovations and <a href="http://www.mozillazine.org/">community support</a>. Switching can be scary, and people can try forcing you to do it, but you shouldn't listen to them: don't start using Firefox just because "it's cool" or "everybody uses it"; try it first, understand how it works, and spend time learning it, because it just might be worth it. <br /><br />One thing is certain: The existence of IE lovers is debatable, but there are over <a href="http://www.spreadfirefox.com">170 million</a> Firefox lovers. Go <a href="http://www.mozilla.org/products/firefox/">get it</a>! <br />
M contents/articles/im-on-twitter-anyway.htmlcontents/articles/im-on-twitter-anyway.html

@@ -1,8 +1,8 @@

----- -title: I'm on Twitter, anyway... +title: "I'm on Twitter, anyway..." content-type: article timestamp: 1211101440 -tags: personal|review|programming +tags: "personal|review|programming" ----- <p>I&#8217;ve been neglecting my blog, I know. The truth is that I&#8217;m quite busy in this period: I have more responsibilities in my daily full-time jobs, my lunch breaks are getting shorter and I don&#8217;t have much free time. At any rate, here&#8217;s what&#8217;s going on:</p> <ul>
M contents/articles/incomplete-guide-to-london.htmlcontents/articles/incomplete-guide-to-london.html

@@ -1,10 +1,10 @@

----- -title: Fabio's (In)complete Guide to London +title: "Fabio's (In)complete Guide to London" content-type: article -subtitle: Some (non-)essential tips on getting around, eating, and enjouing yourself +subtitle: "Some (non-)essential tips on getting around, eating, and enjouing yourself" popular: true timestamp: 1156307004 -tags: travelling +tags: "travelling" ----- <p>This summer I finally had a chance to spend <em>a whole week</em> in London. The city itself was not new to me, since I visited it 6 times before this one, but this summer was different, in a word: Roxy (my fiancee)&#8217;s brother Caspar was happy to host us at his place, for free.<a name="top"></a></p> <h3>Table of Contents</h3>
M contents/articles/inline-introduction.htmlcontents/articles/inline-introduction.html

@@ -1,8 +1,8 @@

----- -title: RawLine - a 100% Ruby solution for console inline editing +title: "RawLine - a 100% Ruby solution for console inline editing" content-type: article timestamp: 1205128740 -tags: ruby|programming|opensource|rawline +tags: "ruby|programming|opensource|rawline" ----- <p>One of the many things I like about Ruby is its cross-platform nature: as a general rule, Ruby code runs on everything which supports Ruby, regardless of its architecture and platform (yes, there are quite a few exceptions, but let&#8217;s accept this generalization for now).</p> <p>More specifically, I liked the fact that I could use the <a href="http://tiswww.case.edu/php/chet/readline/rltop.html"><span class="caps">GNU</span> Readline library</a> with Ruby seamlessly on both Windows and Linux.<br />
M contents/articles/inline-name-change.htmlcontents/articles/inline-name-change.html

@@ -1,8 +1,8 @@

----- -title: InLine name change: what's your opinion? +title: "InLine name change: what's your opinion?" content-type: article timestamp: 1206595800 -tags: ruby|programming|opensource|rawline +tags: "ruby|programming|opensource|rawline" ----- <p>I&#8217;ve been kindly asked by the lead developer of <a href="http://www.zenspider.com/ZSS/Products/RubyInline/">RubyInLine</a> to change the name of my <a href="http://rubyforge.org/projects/inline/">InLine</a> project, due to potential confusion and conflicts.</p> <p>This makes sense, and I&#8217;m ready to change the name of my project, although I&#8217;m not that good at choosing original and <em>smart</em> names, so well, any suggestion is more than welcome!</p>
M contents/articles/introducing-glyph.htmlcontents/articles/introducing-glyph.html

@@ -1,8 +1,8 @@

----- -title: Introducing Glyph +title: "Introducing Glyph" content-type: article timestamp: 1270834239 -tags: glyph|ruby|frameworks|writing +tags: "glyph|ruby|frameworks|writing" ----- <p>I&#8217;ve been writing technical documents for a living for the past four years, and I can tell you: there is no easy way to go about it.</p> <p>For example, you can use:</p>
M contents/articles/introducing-redbook.htmlcontents/articles/introducing-redbook.html

@@ -1,8 +1,8 @@

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

@@ -1,9 +1,9 @@

----- -title: Introducing the Ruby Compendium +title: "Introducing the Ruby Compendium" content-type: article -subtitle: An Essential Guide to the Ruby Ecosystem +subtitle: "An Essential Guide to the Ruby Ecosystem" timestamp: 1295802135 -tags: ruby-compendium|books|ruby +tags: "ruby-compendium|books|ruby" ----- <section class="section">
M contents/articles/journotwit-review.htmlcontents/articles/journotwit-review.html

@@ -1,8 +1,8 @@

----- -title: JournoTwit - The best way to organize your tweets +title: "JournoTwit - The best way to organize your tweets" content-type: article timestamp: 1257434357 -tags: review|web20|internet|software +tags: "review|web20|internet|software" ----- <p>Since I started using <a href="http://www.twitter.com">Twitter</a> on a regular basis, I felt overwhelmed by the endless stream of data generated by the people I was following.</p> <p>The official Twitter page quickly became inadequate to manage my tweets, so I began to search for an alternative through the myriad of Twitter clients available out there, both web and desktop based. After trying out a few desktop clients, I decided to restrict the search to web clients only: between work and home, I may use up to 4 different computers and 3 different operating system, and I really didn&#8217;t fancy the idea of keeping the <em>same</em> client up-to-date everywhere &#8212; even if such client existed.</p>
M contents/articles/komodo-edit-review.htmlcontents/articles/komodo-edit-review.html

@@ -1,9 +1,9 @@

----- -title: A closer look at Komodo Edit +title: "A closer look at Komodo Edit" content-type: article -subtitle: A comprehensive review of the free editor from ActiveState +subtitle: "A comprehensive review of the free editor from ActiveState" timestamp: 1195971780 -tags: review|programming|software +tags: "review|programming|software" ----- <p><a href="http://digg.com/programming/A_closer_look_at_Komodo_Edit"><br /> <img src="http://digg.com/img/badges/180x35-digg-button.png" width="180" height="35" alt="Digg!" /><br />
M contents/articles/leading-lean-software-development.htmlcontents/articles/leading-lean-software-development.html

@@ -1,9 +1,9 @@

----- -title: Book Review: Leading Lean Software Development +title: "Book Review: Leading Lean Software Development" content-type: article -subtitle: A lean leadership framework +subtitle: "A lean leadership framework" timestamp: 1293455745 -tags: review|books|software +tags: "review|books|software" pdf: true -----
M contents/articles/litestore.mdcontents/articles/litestore.md

@@ -1,9 +1,9 @@

----- -title: Introducing LiteStore +title: "Introducing LiteStore" content-type: article -subtitle: A tiny, lightweight, self-contained, RESTful document store +subtitle: "A tiny, lightweight, self-contained, RESTful document store" timestamp: 1442779305 -tags: webdevelopment|databases|litestore|opensource +tags: "webdevelopment|databases|litestore|opensource" ----- Lately I have become more and more interested in client-side single-page applications. Nowadays you can write your web apps in Javascript using your favorite framework, without any server-side logic, but you obviously still need:
M contents/articles/log-apr-2009.htmlcontents/articles/log-apr-2009.html

@@ -1,8 +1,8 @@

----- -title: Personal Log - April 2009 +title: "Personal Log - April 2009" content-type: article timestamp: 1240891860 -tags: personal_log|ruby|books|wedding +tags: "personal_log|ruby|books|wedding" ----- <p>April is tratidionally a rather busy month: Easter, public holidays, and &mdash; always &mdash; some deadline to meet at work. Moreover, my birthday is also in April which makes it even more busy! Let&#8217;s see what happened this year&#8230;h3. Using Ruby in a corporate environment</p> <p>I&#8217;ve been using Ruby at work for a while now. I started off writing some automation script for my own needs, then someone noticed it and asked me if by chance I could develop some scripts for them, for automating part of their own job, and so on. My boss ultimately noticed it, and she liked the idea of me investing a small portion of my time to make other people save huge amount of <em>their</em> time, so now I am <em>officially</em> in charge of workflow improvements and automation (it&#8217;s even in my job description!).</p>
M contents/articles/log-feb-2009.htmlcontents/articles/log-feb-2009.html

@@ -1,8 +1,8 @@

----- -title: Personal Log - February 2009 +title: "Personal Log - February 2009" content-type: article timestamp: 1235736540 -tags: personal_log|ruby +tags: "personal_log|ruby" ----- <p>This has been a rather busy month, hence the lack of general Internet activity. I really wanted to post some more articles to my site, but for one reason or another I had to procrastinate more and more, and here we are at the end of the month again.</p> <h3>Recession time!</h3>
M contents/articles/log-jan-2009.mdcontents/articles/log-jan-2009.md

@@ -1,8 +1,8 @@

----- -title: Personal Log - January 2009 +title: "Personal Log - January 2009" content-type: article timestamp: 1232880660 -tags: personal_log|wedding +tags: "personal_log|wedding" ----- Those who read my blog regularly may have noticed how I normally refrain from posting articles concerning my own life. I used to have a more blog-like web site, but things changed: _"Who would want to read about my life, anyway?"_ &mdash; That's what I always thought. Hence, I focused on writing general-interest, computer-related articles about programming in Ruby, about some IT book which came out, or about the latest chapter in the Browser Wars. You'll find all this in the [archives](/archives/).
M contents/articles/log-jun-2009.htmlcontents/articles/log-jun-2009.html

@@ -1,8 +1,8 @@

----- -title: Personal Log - June 2009 +title: "Personal Log - June 2009" content-type: article timestamp: 1246235040 -tags: personal_log|vim|ruby|wedding +tags: "personal_log|vim|ruby|wedding" ----- <p>Welcome to yet another of my extremely boring, excessively fragmented <a href="/tags/personal_log">personal log</a> posts. I&#8217;m seriously thinking of dropping the whole series in favor of more frequent (and shorter) blog posts, starting from next year. This means you&#8217;ll probably have to read <em>another six</em> of these priceless gems, until december 2009.<br /> As usual, feel free to skim through as each of the following <em>sections</em> is almost completely unrelated to the others.</p>
M contents/articles/log-mar-2009.htmlcontents/articles/log-mar-2009.html

@@ -1,8 +1,8 @@

----- -title: Personal Log - March 2009 +title: "Personal Log - March 2009" content-type: article timestamp: 1238385840 -tags: personal_log|wedding|ruby +tags: "personal_log|wedding|ruby" ----- <p>Another month <em>without</em> the Internet at home. This is getting really annoying, and I decided to change provider, <strong>again</strong>, hoping that I&#8217;ll eventually get my broadband back, someday. Luckily I can still go online at work, but of course it&#8217;s not the same thing: my time on Twitter and Facebook is now basically limited to weekends only, when Roxanne and I go down to Tuscany to stay with her parents.</p> <h3>Concatenative programming</h3>
M contents/articles/log-may-2009.htmlcontents/articles/log-may-2009.html

@@ -1,8 +1,8 @@

----- -title: Personal Log - May 2009 +title: "Personal Log - May 2009" content-type: article timestamp: 1243744500 -tags: personal_log|programming|wedding +tags: "personal_log|programming|wedding" ----- <p>Yet another extremely busy month, as you can see from the total absence of blog posts and lack of tweets even. Things are getting pretty hectic at work now I guess: less people, more work, more responsibility, same money. They call it <cite>contingency</cite>; it&#8217;s the latest trend in the Western World, didn&#8217;t you know? I&#8217;m really not impressed. I can&#8217;t complain though I guess: I still enjoy my job very much and I know it could be much worse, so it&#8217;s just a matter of enduring until autumn &#8212; or so they say.</p> <h3>Star Trek Premiere</h3>
M contents/articles/ma.htmlcontents/articles/ma.html

@@ -1,7 +1,7 @@

----- -title: Ma.gnolia - Social bookmarking made (extremely) easy +title: "Ma.gnolia - Social bookmarking made (extremely) easy" content-type: article timestamp: 1141476813 -tags: internet|review|web20 +tags: "internet|review|web20" ----- Social Bookmarking[1] is not something <em>new</em> anymore; in fact, some people say they've seen too much of it already (imagine that!). One of the worst things - or best, depending on your point of view - of the whole Web 2.0[2] hype is that everything evolves at least ten times faster than it did in good ol' Web 1.0 (if you let me use the term): there are <em>many, many more</em> web pages created everyday by literally <em>anyone</em>, from web developers to total newcomers to the Web, to amateurs who just want to share their content because it's 'cool'.<br />However, this is not a rant. Web 2.0 is inevitably going to become more and more user friendly, and you can't do anything about it. Why? Because it pays. Who's most likely to click on the flashy banner on page X featuring product Y not knowing that by doing so company Z will get a penny: your grandmother who is just now learning how to use the Internet or your brother who's majoring in computer science?<br />However, this is not necessarily a bad thing. I strongly believe that the Internet becomes a much more user-friendly place everyday, and, to put it bluntly, the web developers and companies who understand this will become popular and make money.<br /><br />I remember when I first read about social bookmarking: people were screaming here and there that you <em>had to</em> share your bookmarks on the Net, and this 'delicious'[3] thing was getting more and more popular. Then it became 'delirious'[4], and it was <em>better</em>, because it also meant <em>free</em>...then the shadows[5] came...<br />I was never a big fan of the whole concept, I admit, but an old friend of mine from a community[6] turned up and asked me to try a new website he coded in <em>Rails</em>[7]: a new social bookmarking service, simple to use and free: ma.gnolia[8].<br />I immediately felt the impulse to reply (as this happened on IRC[9])<em>"i.dont.give.a.sh.**"</em>. I really didn't want to try <em>yet another</em> social bookmarking thing, as I had had enough of it even before I started to grasp the whole concept properly. Hoever, since the guy is a friend of mine whom I respect a lot, especially for his skills and knowledge, I decided to give ma.gnolia a try, and here's what happened.<br /><br /><strong>A website which <em>smells good</em></strong><br />One of the things any Web 2.0 business cannot afford to overlook is the design and user interface of their product. It <em>does</em> matter! If you want to please your customers, make something that looks good. This is not a new idea at all[10], and it has been shown to work in many situations.<br />The first impression I had about the ma.gnolia website was similar to the one I had when visiting CSSZenGarden[11] for the first time: <em>code is poetry</em>. I particularly like the latest trend in web design, which preaches simplicity, functionality, clean-looking pages, xHMTL+CSS instead of other assorted bloat, pastel colors, rounded corners, and so on, and there are no rounded corners in ma.gnolia.<br />The ma.gnolia website succeeds in making the visitor feel comfortable: it doesn't clutter the page with pointless images or weird widgets, but limits itself to only the essential items needed for usability - logo, banner, essential navigation (bookmarks, tags, people, groups, messages, profile, support and tools), content, a few well placed and unobtrusive images and icons, and a footer with the same usual boring-but-necessary links (copyright, about, terms of service, privacy policy, contact us), nothing more. What else do you need?<br />People might disagree, of course, and it's certainly not the answer for all tastes: there are some people who really can't stand 'plain' websites, and they think that the whole philosophy is pointless: <em>De gustibus non est disputandum</em> (There is no accounting for taste). We had the same concerns two thousand years ago and the Romans got it right. Even the Romans would have agreed that ma.gnolia is easy to use, too plain or not.<br /><br /><strong>Quick features overview</strong> <br />The obvious first step before starting to use ma.gnolia is signing up for a (free) account. Right? Wrong. For non-committers, or casual, let's-try-it-and-see-what-happens users there's a (free) trial account. You can start using fully functional ma.gnolia right away, but unless you register, nothing you do will be permanent. This seems to be a new Web 2.0 trend as well; before, you needed to make everything free to get people's attention, now it must be free <em>and</em> not require registration. Makes perfect sense.<br /><br /><em><span style="text-decoration:underline;">Adding bookmarks</span></em><br />Trial or not, you can start adding bookmarks right away through the form on the front page, which is simple enough. As long as you didn't discover bookmarks (or <em>favorites</em> for the browser-impaired) the day before yesterday, you probably already have your little collection of bookmarks meticulously catalogued in many different folders. Well, you can import them into ma.gnolia in a few very easy steps, and that, believe me, will save time. Some people may think I'm wasting my time stating the obvious here, but when I tried del.icio.us the import feature wasn't available, and this was enough to make me walk away.<br /> <br />'Casual user', 'non-web-savvy', 'non-geeks': ma.gnolia obviously targets these types of people. Everything on the site is well-documented and easy to use. Ma.gnolia's project manager said in a recent interview[13]:<br /><br /><fieldset><blockquote><br /><em>[...] The rest of us muddle along for about 30 seconds, and if we still don't get it and aren't enjoying the experience, we leave, never to return. To avoid that fate -- to make the complex simple -- our lead IA Tanya Rabourn put in the hours and the iterations needed to make Ma.gnolia comprehensible to the non- expert. </em><br /></blockquote></fieldset><br /><br />This makes sense to me: Web 2.0 seems to be more user friendly, simply because a lot of non-geeks are browsing the web everyday and clicking on adverts.<br /><br />Once you import all your bookmarks, you'll have an almost exact copy of your bookmarks collection, now available online! If you don't want to share them, because you believe in anti-social bookmarking or you just want to have a backup, you can import all your bookmarks as "private", and you can toggle the status by clicking <img src="http://ma.gnolia.com/images/icons/privacy-on.gif" alt="" /> or <img src="http://ma.gnolia.com/images/icons/privacy-off.gif" alt="" />, whenever you like: the magic of Ajax[14] will do the rest. <br />You can also rate your bookmarks from one to five stars, but <em>only</em> yours: ma.gnolia is not a pointless competition to be the one who links the most and best websites.<br /><br /><em>What if I want to delete a bookmark?</em> Quick hint: <img src="http://ma.gnolia.com/images/icons/delete.gif" alt="" /><br /><br /><em><span style="text-decoration:underline;">Yes, you can tag as much as you like</span></em><br />No, there are no folders. Forget it. For me it started with Gmail[15] and it was shocking enough: there are no folders, but you can tag your messages. This can be disorienting for some, but once you have overcome the initial trauma, you will realize that tags can be better than folders in some cases. At any rate, Web 2.0 uses tags everywhere, so you'd better get used to it. A tag is basically a virtual label you can put on something - here, a bookmark - to make it belong to a defined group. Tags normally don't have a hierarchy like folders, and each item can have more than one tag. Simple. <br /><br />Unfortunately, you can't directly tag (or rate) bookmarks that you add from the main page, but since you'll normally be using some sort of <em>bookmarklet</em> for Ma.gnolia, it doesn't really matter. Also, at the moment, once you create a tag you can't rename it, but this feature will be added soon.<br /><br /><br /><em><span style="text-decoration:underline;">Connecting people</span></em><br />If you tried some other social bookmarking services before and you really enjoy the philosophy behind it, you'll be pleased to know that Ma.gnolia is even more social than others. When you register an account you can optionally disclose your real name, age, and gender, add an avatar, a webpage and so on, and you can create your own profile, just like anywhere else on the Internet.<br />Furthermore, Ma.gnolia allows <em>groups</em>: you can create, join, and leave a group of bookmarkers who share the same interests as you. Why would you want to do this? The answer to that question is simple and self-evident: because what is enjoyed by one person will likely be enjoyed by other people who share the same interests. Once you are part of a group you can send a bookmark to that particular group (<img src="http://ma.gnolia.com/images/icons/send-to-group.gif" alt="" />), or at least that's that ideal; if you just want to send a particular address to only one person you can do so (<img src="http://ma.gnolia.com/images/icons/send-to-contact.gif" alt="" />), provided that that person is already in your contact list, and to do so there's a specific button (not icon this time) in everyone's profile. <br />You'll notice a <em>Messages</em> link in the main navigation panel, and that's exactly where the bookmark (and only the bookmark) will go once you send it to your friend. At the moment you <em>cannot</em> send a traditional message to someone, unless you send it along with a bookmark. This might change in the future, depending on user feedback, as well as the addition of some place to actually have some sort of discussion and comments - or so I've been told.<br />I'd be happy to see more community-specific functionalities being implemented, but there are some inevitable risks if Ma.gnolia decides to take this road. I'll let them decide, but for now, Ma.gnolia is more social than other services, but less social than, say, a discussion board.<br /><br /><em><span style="text-decoration:underline;">Pages, stats and search</span></em><br />Perhaps one of the coolest features Ma.gnolia offers is the possibility of saving pages online. When you bookmark a web page, Ma.gnolia attempts to save an exact copy of that page on its server, so that you can access that resource even if it is deleted at the source, like an improved personal version of the WayBack Machine!<br />Two things need to be said - and yes, they might be obvious for some people:<br />1) Pages which require some sort of authentication cannot be saved; and<br />2) Saved copies cannot be viewed by people other than yourself.<br /><br />Another feature is the ability to access basic statistics regarding bookmarks and people: most viewed or most recent bookmarks, hot groups, hot tags, as well as featured linkers, i.e., people who Ma.gnolia chooses to be displayed in some pages. They are generally well-known members or institutions that use the service.<br />However, the search function disappointed me a little bit. There is a very entertaining story on their About page[17] on how Social Bookmarking is supposed to help people to find things on the Web, and the last part in particular is pretty informative:<br /><fieldset><blockquote>[...]In Ma.gnolia, people can save website addresses (or the 'url') and "tag" them with that words they think people need to find them in a search. That way, when somebody else searches a term, the websites that show up are only the ones that are good enough for real people to want to find them.<br />With Ma.gnolia, that's really all the work you have to do. Organizing is a thing of the past, since tags do the organizing for you. Magnolia will even suggest when to give certain tags to bookmarks based on how you tag other bookmarks, to keep things consistent and up to date. And since it's a website, your Ma.gnolia bookmark collection can be reached by you and your friends from anywhere, any time.<br />If searching was the first day of the web, finding what you want must be the second. Ready to discover how Found is the New Search? Give Ma.gnolia a try, and see what we mean.</blockquote></fieldset><br /><br />It seemed logical, so I tried it myself. I searched for "ajax framework", and nine of the ten results on the first page led to this document:<br /><br />ASP.NET AJAX framework comparison [18]<br /><br />This is undoubtedly an interesting document, but not what I was looking for, and I certainly didn't expect almost the entire first page to consist of the same document. I asked for an explanation of this apparently odd behaviour, and it appears that the developer is aware of this, and explained me why this <em>must</em> happen: if someone saved <a href="http://www.zzine.org">www.zzine.org</a> as "zZine Magazine" and another person saved it as "Microsoft", someone searching for Microsoft - provided that we don't show duplicate links anymore, will find a link to zZine Magazine as one of the first results, and it would not be relevant. This is due to the fact that the system searches tags, titles, and descriptions even if the URL is the same, or known. Still, I'd try to limit the number of identical results, at least by grouping together entries which have the same URL and title, or something along these lines.<br /><br /><br /><em><span style="text-decoration:underline;">Tools to play with</span></em><br />There's a whole section of the site devoted to <em>Support and Tools</em>, to make the whole thing even more user friendly. Regarding the support part, even the greenest of visitors to a social bookmarking site will have no problems, as everything is explained in very simple terms, and full of examples and tutorials. This can be an annoying read if you already know how social bookmarking works and if you're used to similar services, so my advice is: <em>geeks stay out of this section</em> - it will save pointless rants.<br />The upside of this is that if I send someone who has <em>never</em> used something like this before, he'll like it and definitely start using it; if you try this with del.icio.us, you'll have one less non-geek friend.<br /><br />Regarding the tools subsection, I already mentioned the excellent bookmark importer (which worked perfectly, but should probably warn in case a page cannot be imported due to a 404 error). Ma.gnolia also offers:<br /><br />- a del.icio.us importer<br />- del.icio.us to ma.gnolia GreaseMonkey script - to keep your del.icio.us and ma.gnolia synchronized<br />- a link roll generator, to share your bookmarks on your blog or page<br />- a universal bookmark exporter<br /><br />Additionally, and most importantly, various bookmarklets[19] which allow you to instantly add a bookmark to your ma.gnolia collection with a single click, just like adding an ordinary bookmark. Not new, but useful and essential.<br /><br /><br /><strong>Conclusions</strong><br />Ma.gnolia is definitely the best social bookmarking solution currently available for non-web savvy users. If you don't like having to spend more than five minutes figuring out how social bookmarking works, Ma.gnolia will become your new home, and you'll get addicted to it. I don't consider myself a total geek, and I honestly started using Ma.gnolia because it's simple and does the job...<br /><br />...or perhaps the website is just so easy to use and nice to navigate that makes it harder to browse away!<br /><br /><br /><strong>Notes</strong> <br />[1]Social Bookmarking, Wkipedia: <a href="http://en.wikipedia.org/wiki/Social_bookmarking">http://en.wikipedia.org/wiki/Social_bookmarking</a><br />[2]Web 2.0, Wikipedia: <a href="http://en.wikipedia.org/wiki/Web_2.0">http://en.wikipedia.org/wiki/Web_2.0</a><br />[3]del.icio.us Social bookmarking: <a href="http://del.icio.us">http://del.icio.us</a><br />[4]de.lirio.us Social bookmarking: <a href="http://de.lirio.us">http://de.lirio.us</a><br />[5]Shadows Social Bookmarking: <a href="http://www.shadows.com">http://www.shadows.com</a><br />[6]CyberArmy Community: <a href="http://www.cyberarmy.net">http://www.cyberarmy.net</a><br />[7]Ruby on Rails framework: <a href="http://www.rubyonrails.org">http://www.rubyonrails.org</a><br />[8]Ma.gnolia Social Bookmarking: <a href="http://ma.gnolia.com">http://ma.gnolia.com</a><br />[9]Internet Relay Chat, wikipedia: <a href="http://en.wikipedia.org/wiki/Internet_Relay_Chat">http://en.wikipedia.org/wiki/Internet_Relay_Chat</a><br />[11]Windows XP Official Page: <a href="http://www.microsoft.com/windowsxp/default.mspx">http://www.microsoft.com/windowsxp/default.mspx</a><br />[12]CSSZenGarden: <a href="http://www.csszengarden.com/">http://www.csszengarden.com/</a><br />[13]Darren Barefoot's Blog, Sugar Ma.gnolia, Blossoms Blooming:<br /> <a href="http://www.darrenbarefoot.com/archives/2006/02/sugar-magnolia-blossoms-blooming.html">http://www.darrenbarefoot.com/archives/2006/02/sugar-magnolia-blossoms-blooming.html</a><br />[14]Ajax, Wikipedia: <a href="http://en.wikipedia.org/wiki/Ajax_%28programming%29">http://en.wikipedia.org/wiki/Ajax_%28programming%29</a><br />[15]Google Mail: <a href="http://mail.google.com/">http://mail.google.com/</a><br />[16]Archive.org: <a href="http://www.archive.org/">http://www.archive.org/</a><br />[17]Ma.gnolia - About: <a href="http://ma.gnolia.com/about">http://ma.gnolia.com/about</a><br />[18] Daniel Zeiss, "ASP.NET AJAX framework comparison": <br />http://www.daniel-zeiss.de/AJAXComparison/Results.htm<br />[19]Ma.gnolia - Bookmarkles directory: <a href="http://ma.gnolia.com/support/bookmarklets">http://ma.gnolia.com/support/bookmarklets</a><br />
M contents/articles/making-it-big-in-software.htmlcontents/articles/making-it-big-in-software.html

@@ -1,9 +1,9 @@

----- -title: Book Review: Making it Big in Software +title: "Book Review: Making it Big in Software" content-type: article -subtitle: A handbook for (almost) guaranteed success in IT +subtitle: "A handbook for (almost) guaranteed success in IT" timestamp: 1285406501 -tags: review|books|software +tags: "review|books|software" pdf: true -----
M contents/articles/mongrel-shortcut-review.htmlcontents/articles/mongrel-shortcut-review.html

@@ -1,8 +1,8 @@

----- -title: Book Review: Mongrel Digital Shortcut +title: "Book Review: Mongrel Digital Shortcut" content-type: article timestamp: 1197686520 -tags: review|books|rails|ruby +tags: "review|books|rails|ruby" ----- <p>If you ever considered about developing an deploying a Rails application in the last year or so, you must have heard of <a href="http://mongrel.rubyforge.org/index.html">Mongrel</a> before. If you didn&#8217;t, I&#8217;d recommend you learn more about it because up to now it proved to be one of the few essential ingredients for deploying <em>scalable</em> Rails applications.</p> <p>Mongrel is a creation of <a href="http://www.zedshaw.com/">Zed Shaw</a> who started writing a replacement for FastCGI to use with Rails, and ended up creating a brand new, <span class="caps">HTTP</span> web server who turned out to be one of the best things the Rails community ever saw happening.</p>
M contents/articles/next-generation-dvds.htmlcontents/articles/next-generation-dvds.html

@@ -1,7 +1,7 @@

----- -title: Next generation DVDs +title: "Next generation DVDs" content-type: article timestamp: 1134215626 -tags: review +tags: "review" ----- Get a full comparative and analytical view of the HD-DVD and Blu-Ray disc formats. Why do we need them? Are they the perfect answer? Which one of them (if any...) will eventually take the throne? The answers to all these questions (and more) are inside! <br /><strong>The endless quest for space</strong><br />I remember when I showed a 3.5" floppy disk to my dad and he said, "That's so small, and it can store 1.44MB of information! That's over a million bytes!" He was used to working with big tapes of data that probably held much less, so I guess a floppy disk a big shock for him, at the time. <br /><br />When I got my first computer, it had a CD-ROM drive, and the CDs were supposed to hold 500MB of data. They eventually started supporting more, and got up to 900 in the end. Finally, we got DVDs, which are able to store up to 4.7GB of data, and once people noticed they could write another layer of data, the capacity doubled. <br /><br />Over the years, storage devices have evolve, and it seems now more than ever that mankind is on an endless "quest for space" - not with NASA (which nowadays is being much more careful before sending out a shuttle), trying to go where no one has gone before, but with a bunch of leading OEM companies, IT industries and Hollywood studios trying to write unbelievable amounts of information on a 12cm disk made out of plastic and other lesser known materials. <br /><br />Furthermore, despite me persuading my family to buy a "new" DVD player, the industry now claims that this relatively new commercial technology is going to be dead: apparently we'll soon have disks capable of holding 15-25 GB of data <em>per layer</em>, which will come to the aid of High Definition TeleVision (<a href="http://en.wikipedia.org/wiki/HDTV">HDTV</a>) which will deliver images at 1920x1080 pixels (versus 640x480 pixels on a normal DVD). This means that you'll be able to see - with your brand new HDTV-capable home theater - the imperfections of Jessica Alba's skin when she's dancing in <em><a href="http://www.imdb.com/title/tt0401792/">Sin City</a></em> if you look close enough, which brings up another question: "who wants this kind of technology?" - if nothing else, you'll have to pay a lot for it!<br /><br />As I previously stated, the evolution in storage media is unstoppable and yet necessary at the same time: having more storage space available proved to be a key factor for computer development.<br /><br /><br /><strong>A New War has Begun</strong><br />As the history of the computer industry has shown us, when the possibility of innovation arises, there's never just one group who tries it out. In the past, this led to the determination of two or more <em>de facto</em> standards by competitors promoting similar solutions. Perhaps the most familiar cases in the recent past were the introduction of the VHS and DVD formats. The first standard - for VHS - was adopted after a "war" against Sony's Betamax format - which was supposedly technologically superior - and the determining factor (or one of the main ones, anyway) was that Sony, "jealous" of its proprietary format, didn't want to license support for it to all the Original Equipment Manufactors (OEMs), while JVC and Matsushita [Panasonic]'s VHS licenses were basically given to anyone who even remotely suggested adopting the format. <br /><br />Sony was involved in another "war", for the successor of the CD format: they pushed for their Multimedia CD (MMCD), while Toshiba had their Super Density CD (SD). Perhaps because Sony was wary of another defeat, history didn't repeat itself this time, and the two manufacturers agreed to develop a hybrid format which is now widely known as the Digital Versatile (previously "Video") Disk, or more commonly, the DVD.<br /><br />However, once again, Sony is proposing its own format for next generation DVDs, called <a href="http://en.wikipedia.org/wiki/Blu-ray_Disc">Blu-Ray Disc</a> (BD) and once again, it's opposed by Toshiba (and others) with the High Density Digital Versatile Disk (HD-DVD). Both formats aim to increase space by using a blue laser for writing instead of the traditional red one used for DVDs. Other than that, the two formats are (for now) quite incompatible with each other as they use two different approaches to this same technology. Most of the following technical information is taken from an <a href="http://www.cdfreaks.com/article/186/">article</a> that appeared on CDfreaks.com.<br /><br /><br /><strong>The Contenders: HD-DVD</strong><br />Let's now examine the first of the two contenders to the "throne": High Density Digital Versatile Disk (<a href="http://www.hddvd.org/hddvd/">HD-DVD</a>). This format was the one that appeared first and is mainly promoted by Toshiba, along with NEC and Sanyo. The capacity is around 15GB per layer and it could be defined - for its structure mainly - as an application of newer laser technology to the older DVD format. <br /><br /><em><span style="text-decoration:underline;">Disk structure</span></em><br />As the diameter of the disk is the same and the information is coded roughly in the same way, the areas of improvement obviously reside in optimizing the physical space of the disk to hold more information. As with CDs and DVDs, data on a disk is written in tracks following a spiral path, from the center to the border of the support: in a CD, the gap between the two rows of the track (the <em>Track Pitch</em>) was 780nm; then it was reduced for DVDs (650nm), and again for HD-DVDs (400nm), so that we can store more information in the same space (because there are more rows). In order to achieve this, the laser must be more sensitive to be able to detect tracks correctly (that's why the laser is now blue; blue has a smaller wavelength), and the lens that gathers and concentrates the light needs to be changed. The measure that defines the shape (convexity) of the lens is called <em>Numerical Amplitude</em>: for CDs, it is 0.45, 0.6 for DVDs and 0.65 for HD-DVDs. These "tweaks" made more space available on the disk, and HD-DVDs, as previously stated, can store up to 15GB single layer and 30GB in double layer.<br /><br />Another characteristic that makes HD-DVDs similar to DVDs is the amount of the disk which is used for actual data storage and the amount which is used as "protective coating": HD-DVDs are 1.2mm thick, with 0.6mm used to store information and 0.6mm for protection.<br /><br /><br /><em><span style="text-decoration:underline;">Information processing and error correction</span></em><br />Data sent through a channel is subjected to "noise" of various kinds, and a similar phenomena occurs when writing information on a support, so various ways of preserving the data and correcting possible errors were developed. HD-DVD, in particular, uses a particular type of modulation called ETM (Eight to Twelve Modulation), which is once again similar to the technique used in CDs and DVDs: each byte of data is converted into twelve bits, and all bits set to 1 must satisfy an RLL(1,10) code (all '1' bits must be separated by at least 1 and at most 10 zeros).<br />Furthermore, disks must be able to bear scratches and other damage which could potentially corrupt bytes. Personally, I found that CDs are much more scratch-proof than DVDs, partly due to the fact that when you scratch a DVD (don't do it, just trust me!) more bytes get corrupted because of a higher data concentration: imagine what will happen now with 3-5x more data in the same space!<br />HD-DVD has the same correction techniques and data containers as the DVD format, the only exception being that the <a href="http://en.wikipedia.org/wiki/Error-correcting_code">ECC</a> blocks on HD-DVDs are twice as large, resulting in a longer correctable burst error length (7.1mm, where DVD is about 6mm).<br /><br /><br /><em><span style="text-decoration:underline;">Writing formats and copy protection</span></em><br />Even though HD-DVD has so far been quite similar to DVD (except for the obvious differences in laser, lens, and track pitch caused by the technology), there's an exception concerning the Rewritable format: it can hold more data than the ROM format (20GB instead of 15). This has been achieved by employing some technologies used in DVD-RAM. Despite the improvement, it might represent a problem for OEMs, because it makes HD-DVD RW handling totally different from the read-only format.<br /><br />For protection against piracy and illegal copying in general, HD-DVD format abandons the Content Scrambling System (CSS) used in DVDs (which has been shown to be unsuccessful) in favour of AACS (Advanced Access Content System), which uses a completely different key scheme.<br /> <br />AACS has been introduced for both HD-DVD and Blu Ray formats, and it involves the so-called "device keys": a unique key is assigned to each player's model, and before playing a protected disk, the player will have to retrieve its key (encoded in a three-way tree on the disk). Obviously, if a particular key is cracked, the manufacturers will be informed and will update the key in newer disks (which won't play in the cracked player at all). The technology is quite controversial at the moment, because "protection" is achieved at a high price: if someone cracks the key of your player, it simply won't play newer HD-DVDs, even if you weren't actually involved in any illegal activity. Solutions are currently being debated.<br /><br /><br /><br /><strong>The Contenders: Blu-Ray Disks</strong> <br /><br />Where Toshiba's HD-DVD adopted a somewhat conservative strategy, basing itself more or less on the DVD standard, Sony decided to use a much more experimental approach for its <a href="http://www.bluraydisc.com/">Blu-Ray</a> (BD) format, which appears to be more technologically advanced and offer even more space. <br />Blu-Ray disks can hold up to 25GB of data per layer, and this represents a great leap over HD-DVD's 15GB, but this has been achieved at the price of compatibility. <br /><br /><br /><em><span style="text-decoration:underline;">Disk structure</span></em><br />In order to reach the capacity it does BD uses the same type of blue/violet laser of HD-DVD but - as a necessity - the <em>Numeric Amplitude</em> of the lens has been increased to 0.85 (vs. 0.65 on HD-DVD), and the <em>Track Pitch</em> has been decreased to 320nm, so the additional space is explained by noting that the distance between the spiral rows is even smaller!<br /><br />Furthermore, BD can vary the length of the "pits" where data is written; by reducing it, more space on the disk can be obtained. Currently BD has 3 sub-formats, corresponding to 3 different capacities (23.3, 25 and 27GB), and associated to three different pit lengths (160, 149, and 138nm respectively) while HD-DVD has a fixed pit length of 204nm.<br /><br />Another innovation was introduced regarding the amount of disk used for data and for protection: disks are still 1.2mm thick, but 1.1mm are used for data storage and only 0.1mm for the protective coating!<br /><br />This was necessary in order to achieve the improved values for NA and Track Pitch, because the laser goes through only 0.1mm of protection before reading the data, meaning it can be more sensitive, but this also means that BDs are MUCH more vulnerable to scratches than HD-DVDs. Luckily, TDK immediately announced a new hyper-resistant protective coating which can offer improved protection from scratches and still be 0.1mm thick. <br /><br /><br /><em><span style="text-decoration:underline;">Information processing and error correction</span></em><br />BD decided to adopt its own modulation system (instead of using ETM like HD-DVD), called "17PP". The acronym basically means that each "1" must be separated by 1-7 "0" bits [RLL(1,7)] and also that the modulated sequence must have the same parity as the original data plus additional rules.<br />Error correction is then achieved using two codes similar to the <a href="http://en.wikipedia.org/wiki/Reed-Solomon_code">Reed-Solomon</a> code: LDC (Long Distance Code) and BIS (Burst Indication Subcode). Without going into too much detail, these two proprietary techniques can achieve almost the same result as HD-DVD's ECC, being able to correct corrupted data up to more than 7mm, which is quite remarkable considering the particularly delicate disk structure.<br /><br /><br />Blu-Ray also introduces two new modulation methods: the first one is called ?MSK-cos? (Minimum Shift Keying ? cosine variant), which is a special frequency modulation, and the second one is called ?HMW? (Harmonic Modulated Wave), which consists of replacing parts of the sine wave with sawtooths.<br /><br /><em><span style="text-decoration:underline;">Copy protection</span></em><br /><br />BD originally proposed its own control system, BD-CPS, for copy protection, but recently seems to have opted for AACS. This means that the same situation arises for both formats: they are both planning on implementing an advanced exchange key-based system to fight piracy.<br /><br />As another anti-piracy method, both formats also introduce a sort of "signature" called a <em>Volume Identifier</em> which will be very difficult to duplicate on a cloned disk.<br /><br /><br /><strong>The World Takes Sides</strong><br /><br />After discussing the two formats sufficiently in depth, it's now possible to itemize the pros and cons of each format:<br /><br /><em><span style="text-decoration:underline;">HD-DVD</span></em><br />Pros:<br /><ul><br /><li>Backward compatibility with CD/DVD will be available soon</li><br /><li>Reduced production costs, both for disks and players - cheaper to buy</li><br /><li>Improved durability</li><br /><li>Available relatively soon on the market</li><br /></ul><br />Cons:<br /><ul><br /><li>Incompatible with the competitor's format</li><br /><li>Less space than competitor's format</li><br /></ul><br /><br /><em><span style="text-decoration:underline;">Blu-Ray</span></em><br />Pros:<br /><ul><br /><li>Backward compatibility with CD/DVD will be available soon</li><br /><li>More space than competitor's format</li><br /><li>Technologically more advanced, longer life-span</li><br /><li>Higher recording speed</li><br /></ul><br />Cons:<br /><ul><br /><li>Incompatible with the competitor's format</li><br /><li>More expensive to produce and to buy</li><br /><li>More vulnerable to scratches </li>(the TDK solution notwithstanding)<br /><li>Still relatively experimental</li><br /></ul><br /><br />At this point, HD-DVD seems to be the "natural" successor to the DVD format: it inherits already-tested technologies and offers acceptable improvements regarding capacity. On the other hand, Blu-Ray is an innovative alternative, which, while more technologically advanced, needs to be tested more fully and is more expensive because of its innovation. Manufacturers will have to have separate machinery to produce Blu-Ray disks, while it appears that only some tweaks in existing structures will be necessary to support HD-DVD production on a mass scale at contained prices.<br /><br />Obviously, all the industries with interests in these new magnetic supports took sides with one or the other format:<br /><br /><em>HD-DVD:</em>Toshiba, Sanyo, NEC, Paramount Pictures, Universal Pictures, New Line Cinema, Warner Bros Studios, Time Warner, and, apparently, <em><strong>Microsoft</strong></em>.<br /><br /><em>Blu-Ray:</em> DELL, HP, Hitachi, LG-Electronics, Mitsubishi Electric, Panasonic, Pioneer, Philips, Samsung, Sharp, Sony, TDK, Thomson, 20th Century Fox, Walt Disney, Texas Instruments, Sun Microsystems, Electronic Arts, and Vivendi Universal Games.<br /><br />HD-DVD is supported mainly by film studios (Paramount and Universal) and multimedia companies (Time Warner). This is expected, since these industries advocate a product which is cheap, tested, and reliable. On the other hand, Blu-Ray is supported by IT industries that see a new technology for improved capacity and high recording speed. However, Walt Disney and 20th Century Fox seem to support this format, and they represent a sizable share of the family entertainment movie business.<br /><br />Microsoft recently seemed to <a href="http://news.softpedia.com/news/Microsoft-Sides-With-Toshiba-Against-Sony-s-Blu-ray-3798.shtml">support HD-DVD</a> technology. This was predictable, at least to a certain extent: Microsoft and Toshiba have always had a strong and productive working relationship, and Microsoft is probably trying to oppose Sony, who will probably use Blu-Ray for its upcoming PlayStation 3. Microsoft will probably opt for HD-DVD for the XBox, but it's too soon to say, especially since the big names of video games (like EA) seem to support Blu-Ray.<br /><br /><br /><br /><strong>The End of the War</strong><br />So a new <em>Standards War</em> has begun, and it's still too soon to know how it will end. Recently, the possibility of a hybrid standard has seemed more plausible, even if Toshiba's format arrives on the market much sooner than Blu-Ray. Toshiba itself advocates a <a href="http://www.pcpro.co.uk/news/73241/hddvd-bluray-marriage-back-on.html">single standard</a>, but seems also keen on <em>seeing how it goes</em> first, when both the two products are on the market. <br /><br />Actually there's <a href="http://news.softpedia.com/news/The-chronicles-of-a-futile-battle-Blu-Ray-vs-HD-DVD-631.shtml">someone</a> who predicts a different ending for this war: no one format will win, especially if the "conflict" lasts for too long. There's a chance that <a href="http://www.techtree.com/techtree/jsp/article.jsp?article_id=57500">Holographic Versatile Disks</a> (HVD) will eventually destroy both contenders by offering, on the same disk, 1TB of space at 1Gbps transfer speed! <br />As a matter of fact, Japan's <a href="http://www.optware.co.jp/english/what_040823.htm">Optware Corp.</a> might be the revelation that <em>saves the world</em>... <br />
M contents/articles/obama-may-come-to-genoa.htmlcontents/articles/obama-may-come-to-genoa.html

@@ -1,8 +1,8 @@

----- -title: Barack Obama may visit Genoa (Italy) on October 12th +title: "Barack Obama may visit Genoa (Italy) on October 12th" content-type: article timestamp: 1218420540 -tags: politics +tags: "politics" ----- <p>Barack Obama may visit Columbus&#8217; birthplace on October 12th 2008, and take part in the city&#8217;s celebration of the discovery of America, which is held in the city every year. As reported by <strong>Il Secolo <span class="caps">XIX</span></strong>, Genova&#8217;s local newspaper.</p> <p>Although the invitation has not been officially accepted by the American Presidential Candidate, Genoa&#8217;s mayor <strong>Marta Vincenzi</strong> is working very hard to make it happen.</p>
M contents/articles/pagerank.htmlcontents/articles/pagerank.html

@@ -1,7 +1,7 @@

----- -title: The Green Bar +title: "The Green Bar" content-type: article timestamp: 1134133434 -tags: google|internet +tags: "google|internet" ----- Since 1998 SEO experts, webmasters, and even casual users spent ages trying to figure out the magic within that small green bar... but what's really behind Google's most famous invention?If you never experienced the sensation of looking at such a <em>green bar</em> before, then maybe you don't know what I'm referring to; I suggest downloading and installing the Google Toolbar[1]. This IE add-on (now available for the Firefox browser) was developed by Google years ago and still remains the most common way to view a website's <strong>PageRank</strong> through a simple bar with a variable length, according to a 10 point scale.<br /><br />I quietly mentioned the infamous word <em>PageRank</em> earlier, but what is it?<br />Some people think the idea of the word might come from a pun involving one of Google's co-founders (Larry <em>Page</em>), while others simply think it was the most obvious choice for a system which was supposed to <em>rank</em> pages according to importance and popularity. Anyhow, the only certain thing is that two (insert appropriate adjective here) students of Stanford University wrote a paper, in 1998, called "The Anatomy of a Large-Scale Hypertextual Web Search Engine"[3], in which, they discussed some interesting ideas for developing a large scale search engine using a particular algorithm they invented, which was supposed to help delivering the most relevant results for any search query provided by a user of the service.<br /><br />It is also certain that these two guys, Larry Page and Sergey Brin, eventually made an awful lot of money in the following years, developing and expanding an initially simple-looking website/web application with a funny name[4] and turning it into one of the biggest and most profitable businesses in the history of Computer Science. But let's now examine how PageRank works. <br /><br /><br /><strong>Deus ex machina</strong><br /> Google's co-founders kindly provided a short text summing up their innovative (and perhaps secret) technology[5]. In particular, one paragraph seems to offer a brief and simple explanation of how PageRank works:<br /><fieldset><blockquote><br /><em>PageRank relies on the uniquely democratic nature of the web by using its vast link structure as an indicator of an individual page's value. In essence, Google interprets a link from page A to page B as a vote, by page A, for page B. But, Google looks at more than the sheer volume of votes, or links a page receives; it also analyzes the page that casts the vote. Votes cast by pages that are themselves "important", weigh more heavily and help to make other pages "important."<br /></em></blockquote></fieldset><br /><br /> The first time I read this paragraph, I really experienced a feeling of admiration and ecstasy for these two enlightened minds who decided to bestow their priceless gift on the World Wide Web: a system which gives every page the due importance through a democratic system. Isn't it wonderful?<br /><br /> Of course there's (much) more to it than a short paragraph, and obviously this <em>explanation</em> wasn?t enough for those people (webmasters, SEO experts, kids creating their online family albums, etc.), who gradually became more and more interested in knowing further details about the system, hoping that it would have improved their placement in Google's search results. <br /><br /> Indeed, PageRank contributed to label some sites as <em>important</em> and gradually the number of ?PageRank 10? websites[6] began to rise, but generally remaining a prerogative of important names of the IT industry (Microsoft, Apple and obviously Google itself, for example). But how did such sites achieve that? How did the green toolbar grow so much for them and not as much for your grandma's personal webpage?<br /><br /> Soon enough, theories and speculations produced an approximation of the algorithm[7], which is generally thought to be an acceptable model to understand how the system works.<br /><br />Take the following equation:<br /><br /><em>PR(A) = (1-d) + d (PR(T1)/C(T1) + ... + PR(Tn)/C(Tn))</em><br /><br />Where:<br /><br /><em>PR(A)</em> - The PageRank value of a certain page<br /><em>PR(Tn)</em> - The PageRank value of all pages linking to A<br /><em>C(Tn)</em> - The number of links present on page Tn<br /><em>d</em>(... - "damp factor", thought to be 0.85 <br /><br /> It now appears clear that the PageRank of page A depends on the number of pages linking to it. Furthermore, important factors taken into consideration are the <em>quality</em> of such pages (i.e. whether they have a high PageRank themselves or not) and the number of links present on each page, which causes the vote to be <em>divided</em> equally among them. <br /><br /> This is, in a nutshell, how PageRank is supposed to work. This is obviously a simple model, and there's actually a more mathematical/probabilistic approach[8] which goes beyond the scope of this article and requires some notions of probability theory.<br /><br /><br /><strong>Considerations and opinions</strong><br />With this model in mind, it's now possible to understand how (in a very simplified way) Google works: each month Google spiders search the web, and follow links from a page to another, keeping track of the "votes". PageRank is then calculated for every page and updated. This process normally takes a lot of time and, as a matter of fact, PageRank seems to be updated only every 4 months nowadays: these trimester updates normally causes a page to increase its rank by one (or more if you're lucky) level on the bar, or in some cases, lower it in the same way.<br /><br /> By taking a closer look at the formula proposed above, you'll notice that the maximum value of PR(A) is by no means equal to 10, as it depends on how many pages link to A and how many outbound links there are on such pages. As a matter of fact, people started speculating on the nature of the scale used for PageRank: on the toolbar it ranges from 0 to 10, while in reality a PageRank 10 (take Microsoft.com for example) should correspond to <em>some millions</em> in practice. <br /><br /> The most accredited theory is that the PageRank displayed on the green bar is the result of a sort of correspondence between real values and such 0 to 10 scale. Also, people suggested that such scale is in fact a base 5 (or 6) logarithmic scale. This would explain for example why it takes much longer to acquire PageRank 7 from PageRank 6 than acquiring PageRank 3 from PageRank 2.<br />For the non-mathematical minds, a <em>logarithmic scale</em> is a succession of numbers NOT incremented by "1" or a fixed quantity, but by an always-growing exponential factor: taking a base-10 logarithmic scale, values of 1,2,3 would correspond respectively to 10^1, 10^2 and 10^3 (10, 100, 1000).<br /><br /> For a long time Google seemed to use PageRank as an important factor for getting first places in search results, and it's still partly true: if you search for the keyword "Italy" you're likely to find some high PR sites as first results.<br /><br /> This resulted in all the possible forms of speculations: webmasters started asking money for publishing links on high PR pages, and similarly SEO experts started adopting various infamous tactics to obtain a high PageRank for their customers: this includes, for example, <em>link farms</em>[9].<br /><br />It's now clear that what is was believed to be a solution relying on the <em>uniquely democratic nature of the web</em> turned out to be a complete failure in that sense, because the very basis of the concept is wrong. Sad, but true, the WWW is by no means democratic at all. <br /><br /> Another complaint against PageRank was that new sites took ages to acquire <em>respectable</em> PageRank and therefore appear on the top of search results, no matter how wonderfully they were written. This is still partly true, as anyone can notice by searching Google, but the algorithm itself is continuously being tweaked both for stopping spammers and link farms, and also to favour those sites which provide relevant and appropriate content and are not up to some dodgy trick; I must admit that the situation is gradually getting better.<br /><br /><br /><strong>Case Study: ItalySimply.com and h3raLd.com</strong><br />I'm now going to discuss my own personal experience with PageRank applied to my two websites, ItalySimply[10] and h3raLd Labs[11]. While the second one is not currently advertised or promoted, because at the moment I don't have enough time for other web developing projects, with the first one I tried to follow a <em>SEO Strategy</em> trying to acquire PageRank and good placement in search engines.<br />You can see the result yourself: ItalySimply acquired PageRank 5 and h3raLd PageRank 4: not bad at all considering they are both two relatively new websites, ItalySimply being officially born in August 2004 and h3raLd Labs actually had some serious content from April 2005 on. <br /><br /> For ItalySimply, I even experienced a period of <em>PageRank 0</em> which lasted about 2 months: although according to Google all websites should have at least PR1, PR0 is used to penalize some <em>unusual</em> behaviour which in my case was a <em>302 - Temporarily Moved</em> redirect which was necessary to redirect users to a subfolder of the server. Later on I learned how this can be interpreted as a dodgy redirection by search engines[12], and why I was penalized by Google for this with a PR0. After noticing the mistakes, I immediately started a strategic link campaign; obtaining links from some good sites (also with high PR) related to mine, and PageRank for ItalySimply began to grow, from 0 to 3, then 4, and just recently 5.<br /><br /> At the same time, I re-designed h3raLd.com and noticed that it acquired PR1, because it was already listed in Google and didn't get any <em>vote</em> from other sites. I then decided to put a link to h3raLd Labs on <em>every</em> page of ItalySimply, which are now ranging from PR5 to PR2. <br /><br /> The result was an immediate growth of h3raLd.com in terms of PR, which reached an acceptable 4 without <em>any</em> link swapped, banner displayed on behalf of other sites, or anything as such. <br /><br /> The difference between the two sites though is much bigger than 1 point on PR, in terms of placement in search results: ItalySimply has some relatively interesting content and various pages, and it ranks good enough on MSN and Yahoo, and even Google, to an extent; h3raLd.com has just 4 pages and doesn't seem to appear at all in search engines, unless you search for something like "h3raLd". Again, this is a proof that nowadays PR doesn't mean immediate placement on the top of search results.<br /><br /><br /><strong>Final Considerations</strong><br /> Although PR is by no means the unique factor to determine search engine placements, it's still certainly important as a <em>co-factor</em>. As I said, it's still extremely difficult for a new page with low PageRank to place before a high-ranked one. Surely, if I decided to put something more interesting on h3raLd.com I would get better results than buying a new domain and creating a new site: old sites with high PR are still <em>naturally</em> inclined to rank better than new ones. Got that? Now, all you need to do is buy a really stupid domain name and create some pages for it, then think about it like a bottle of whisky; let it age for a while making it get some respectable rank: when you have a clever idea you'll have your ready-made place to promote it!<br /><br /><em>In Google we trust!</em><br /><br /><br /><br /><strong>Sources and related links:</strong><br /><br />[1] Google Toolbar, <a href="http://toolbar.google.com/">http://toolbar.google.com/</a><br />[2] Stanford University, <a href="http://www.stanford.edu/">http://www.stanford.edu/</a><br />[3] Lawrence Page and Sergey Brin, "The Anatomy of a Large-Scale Hypertextual Web Search Engine", Computer Science Department, Stanford University, <a href="http://www-db.stanford.edu/~backrub/google.html">http://www-db.stanford.edu/~backrub/google.html</a><br />[4] Google, <a href="http://www.google.com/">http://www.google.com/</a><br />[5] Google Technology, <a href="http://www.google.com/technology/">http://www.google.com/technology/</a><br />[6] List of PageRank 10 sites, <a href="http://www.searchenginegenie.com/pagerank-10-sites.htm">http://www.searchenginegenie.com/pagerank-10-sites.htm</a><br />[7] Ian Rogers, "The Google Pagerank Algorithm and How It Works", IPR Computing Ltd. <a href="http://www.iprcom.com/papers/pagerank/index.html">http://www.iprcom.com/papers/pagerank/index.html</a><br />[8] Pagerank, Wikipedia page, <a href="http://en.wikipedia.org/wiki/Pagerank">http://en.wikipedia.org/wiki/Pagerank</a> <br />[9] Link Farm, Wikipedia Page, <a href="http://en.wikipedia.org/wiki/Link_farm">http://en.wikipedia.org/wiki/Link_farm</a><br />[10] ItalySimply - Italy Real Estate Services and Relocation Help, <a href="http://www.italysimply.com/">http://www.italysimply.com/</a><br />[11] h3raLd Labs - Freelance Web Development, <a href="http://www.h3rald.com/">http://www.h3rald.com/</a><br />[12] "The Rundown on 301 and 302 redirects", September 10th, 2004, <br /><a href="http://www.rankforsales.com/seo-articles/301-and-302-domain-name-redirects.html">http://www.rankforsales.com/seo-articles/301-and-302-domain-name-redirects.html</a><br />
M contents/articles/perfect-browser.htmlcontents/articles/perfect-browser.html

@@ -1,7 +1,7 @@

----- -title: The Perfect Browser +title: "The Perfect Browser" content-type: article timestamp: 1134135061 -tags: browsers +tags: "" ----- So you finally decided to say goodbye to Internet Explorer, but now you feel lost in a multitude of browsers that all claim to be faster, more customizable, safer, or simply better than IE. Are they telling the truth? If so, which one is the perfect browser?<strong>Point of view, clarifications and scope of this article</strong><br /><br />So you're reading this article hoping to find out which is the <em>best</em> browser ever made? Well, you're wasting your time. There's no such thing as <em>The Perfect Browser</em>, despite the various attempts made by Mozilla Foundation, Opera, Microsoft and others. After trying out nearly all of the major browsers currently available, I came to this conclusion: the perfect browser is a relative term, dependent on the particular person you ask, if it exists at all. Contrary to popular belief, I myself am not a 100% Firefox freak, and I do not consider myself biased to the point of going around shouting that Firefox is the <em>"best browser ever made."</em> Granted, I do do that sometimes, but let's put my personal bias into some sort of perspective:<br /><br />Mozilla Firefox represents the most remarkable effort to create a <em>perfect browser</em>, but in some cases, and for some particular tasks, it may not be considered optimal by <em>some people</em>.<br /><br />Having said this, I hope I can convince you that I'm not <em>that</em> biased toward Mozilla's leading product, even if, as a matter of fact, nearly all the programs mentioned in this article are based on the Mozilla ('Gecko'? No, not quite... [1]) engine or a derivative. <br /><br />Originally, I was going to write a comparative review of Opera and Firefox, but in the end, I chose to broaden the scope a bit to include other products as well. There are already many articles and blog posts which have compared the two, either favoring Opera [2] or Firefox [3]. I also decided not to review browsers for platforms other than Windows, so there won't be any mention of Konqueror, Galeon, Safari, Camino, etc., which, although they are all interesting alternatives, go beyond the purpose of this article, which is to offer <em>Windows users</em> a small selection of alternative browsers.<br /><br /><br /><strong>Alternative Browsers</strong><br /><br />There are literally dozens of <em>alternative</em> browsers around. There are lists available online, and perhaps the most famous one is on Evolt.org [4], which can be considered comprehensive and accurate. Various statistics are available for objective comparisons of all the major browsers, for regarding for example speed [5] and overall performance and functionality [6], but even if such analyses are accurate, they are often not enough to fully evaluate a browser.<br /><br />In the following sections, we'll examine the following four free browsers, which are considered to be the most obvious alternatives to Internet Explorer. <br /><br />- Firefox<br />- Opera <br />- K-meleon<br />- Netscape<br /><br />I deliberately chose not to spend time on Slim Browser [7], Maxthon [8] (previously known as MyIE), or AvantBrowser [9], which are basically extensions built on top of Internet Explorer to add functionality to it. I also left out Mozilla's SeaMonkey [10], partly because of its alpha status, and partly because it is being marketed as an Internet Suite rather than just a web browser.<br /><br /><br /><strong>Why IE is 'bad'</strong><br /><br />'IE is crap', 'you MUST NOT use Internet Explorer', 'Internet Explorer is for n00bs'... how many times have you heard or read this? Some people tend to degrade Internet Explorer all the time, and the funny thing is, if one were to ask 'Why so?', approximately 40% would be unable to give a reply any more concrete than 'because Firefox is simply better' or 'because Opera owns!' or '[insert browser name here] simply can't be compared to IE!'.<br /><br />Now, all this may be true to a certain extent, but it certainly will not convince a person to switch browsers, and may even have the opposite effect: people will keep using IE no matter what! This is bad for the alternative browser market in general. It still looks like IE is used by 90% of people on the Internet and this will not change simply by telling all those people that they are "dumb" for using IE. There are sites whose only purpose is to make people abandon IE [11], but they discuss objective fact instead of opinionated propaganda. <br /><br />Personally, I decided not to use IE anymore because:<br /><br />- It's slow on my computer (which is old, as some of you may know)<br />- It's less secure than other browsers, and more vulnerable to malicious software and attacks, simply because it's used by the most people - that makes the BEST option for those who actually enjoy exploiting vulnerabilities, because it's not frequently patched [12].<br />- It's not very customizable<br />- It doesn't have (or support) additional features<br />- It deliberately breaks web standards or creates its own, which makes things difficult for web developers<br />- It's normally behind the supported technologies<br />- I hate the idea of using a proprietary browser imposed by Microsoft<br /><br />I could discuss each one of these reasons in more detail, but that would be an article in and of itself.<br /><br /><br /><strong>Firefox</strong><br /><br />The famous and multi-awarded Firefox [13] browser is now approaching the 1.5 release, and it's constantly improving both in security and features. Firefox quickly became Mozilla's leading product, ahead of the Mozilla Suite (which includes a browser, HTML editor, email client and address book), which is now being rebranded as <em>SeaMonkey</em> [10].<br /><br />On the other hand, Firefox is simply a web browser, and doesn't offer an email client or html editor anymore, which was obviously a choice made to improve the performance of the application and engine, which was normally quite bulky, especially on old hardware. This was a wise decision, and Mozilla/Netscape enthusiasts quite liked the idea of having a lightweight browser rather than a slow-performing suite of applications. However, someone who uses both Firefox and ThunderBird (Mozilla's standalone email client) will end up using nearly twice the amount of memory used by SeaMonkey alone: this is because you now have two separate applications, so you have to load the rendering engine <em>twice</em>.<br /><br />With Firefox, the Mozilla Foundation aimed to create a browser which would satisfy web developers by supporting the latest web standards and technologies, while at the same time offering new and interesting functionalities to end users.<br /><br />The Fox is not ideal for all types of users, but a constantly growing community of enthusiasts [14] is trying literally every way possible to promote it by targeting virtually all kind of audiences. <br /><br />In addition, its design makes it mostly secure; even if a few bugs slip by, they are not design flaws, merely implementation issues. When a bug is found, the Firefox development community works quickly to fix it, and usually has an excellent track record regarding that. However, the most important aspect of Firefox's security (on Windows, that is), is that it is not integrated into the system like IE is. Remote attacks on a Windows PC are mostly executed through IE, and the insecure design causes it to have unfixed critical bugs after five years of non-development, because Microsoft tends to shove bugs under the carpet whenever possible; half year, one year or even older unfixed bugs are not unheard of.<br /><br />To make it more readily apparent, statistics [12] [15] say that the maximum time IE is <em>not</em> in danger from to an unpatched vulnerability is 7 days, while for Firefox, it is well over 200.<br /><br />Another of Firefox's strong points is the ability to add various <em>extensions</em> and <em>themes</em> for all kind of necessities: improving web searches, getting localized weather forecasts, playing music, blocking adverts, tweaking webpages, composing webpages, etc.<br />Firefox is <em>extremely</em> customizable, and extensions don't affect the overall browser performance, as the actual overhead is minimal - this has been tested on a Pentium 2, so you can believe me.<br /><br />This is all very well and good, but the ability to customize a browser is not considered a good thing by all. This is because it tends to become a necessity - if Firefox didn't have extensions, it would still be better than IE for security and some features, but not amazingly so. Opera users found that Firefox without extensions could not match up to the features in Opera.<br /><br />After asking some IE users, it seems that Firefox can appear too <em>geeky</em> for the average user who only wants to surf the Net and doesn't really care about web standards and browser customization. After all, a lot of people may decide that they don't want to spend their time tweaking and personalizing a program to make it fit their needs, as they find it annoying.<br /><br />Finally, a slightly unpleasant thing about extensions is that almost every time a major update to the browser comes out, some of the installed extensions become unusable until their developers update them. In order to solve this problem, Mozilla Development Team is releasing public alphas and betas of every major milestone, to allow third party extension developers update their extensions in time for the stable release. As a consequence, to avoid trouble with extensions, I suggest non-developers stick with the stable releases and avoid updating to alpha or beta versions.<br /><br />Anyhow, all those people who don't like having to play around with extensions should just use Opera.<br /><br /><br /><strong>Opera</strong><br /><br />A few years ago I came across Opera's site [16], and I downloaded their <em>free</em> browser to try it out. At the time, Firefox wasn't a big thing, and the Mozilla/Netscape suites were too bulky for my liking, so I was looking for something lightweight and fast. That's the reason why the Opera team has always used the slogan <em>'the fastest browser on Earth'</em> to describe their product, and they seem to be right[5]. <br /><br />I actually didn't like it at first, because - at the time - it didn't offer anything better than IE <em>and</em> the company was more or less silently asking people to <em>pay</em> them to get rid of the annoying ads the browser displayed on the interface. Browsers are nothing but software, however, and I think the reason why they are (nearly) all free is because IE comes free with every Windows installation. <br /><br />Finally, Opera agreed with that same philosophy: while celebrating their 10 years of existence, Opera Software ASA decided initially to give away license codes to get rid of the ads, and then to finally stop annoying their users with ad banners and cut their licensing fee altogether [17]. Obviously, at that point, I was really tempted to give Opera another chance.<br /><br />I was impressed, indeed. Opera is actually a nice piece of software. It's really fast in rendering pages, it displays them correctly, respects web standards (they improved this quite a bit over the years), and it's fast even when pressing the Back and Forward buttons. Its interface is probably the best and cleanest ever made; it's easy to use even for novices even if some things (like keyboard shortcuts) are different.<br /><br />Speaking of features, it offers: <br /><br />- Tabbed browsing and integrated search like Firefox (and IE7)<br />- A truly remarkable technology able to make <em>any webpage</em> fit a window by zooming images in and out automatically<br />- A complete and fully working mail client<br />- An address book<br />- The ability to save browsing sessions<br />- Easily re-open closed tabs<br />- Skins<br />- A <em>magic wand</em> to fill in forms and logins automatically<br />- A built-in scratchpad/notepad<br />- Voice integration (yes, you can even speak to your browser now, imagine that!)<br />- SVG support - not that it really matters for now, but it's a cool thing to say nowadays<br /><br />All of this is included in an application which is - to my eyes - more lightweight than Firefox. But it's not perfect yet. Why? The reason is simple. It allows a certain degree of customization, but doesn't have 'extensions'. One thing is true though, as someone pointed out [18]: in most cases, for 'average use', Opera doesn't need extensions, because it already offers quite a lot of functionality that doesn't need to be extended. <br /><br />It also happens that the features listed above are the most commonly requested by the majority of users, and that was, in my opinion, a clever marketing move. <br /><br />There are still two things about Opera that put me off from using it, however. One is the lack of a built in <em>"I'm feeling lucky"</em> feature in the taskbar - even though there is a workaround [19]. The other is more serious, and it concerns compatibility. Even though the people at Opera Software are struggling more than ever to make it compatible with every site and technology - full Gmail support has recently been added - Opera cannot render some sites correctly. The most blatant example is Writely.com [20], which is a site offering a free ajax-based online word processor. It seems that Opera doesn't like Ajax too much for now.<br /><br /><br /><strong>K-meleon</strong><br /><br />Now let's talk about a piece of software which appears to have been forgotten by the majority of people in the world: K-meleon [21], a Windows-only, Mozilla-based browser. It is a prime example of how good software can be ignored by the masses, for three main reasons:<br /><br />- It wasn't conceived with the <em>average user</em> in mind<br />- There's another browser using the same technology which is considered to be better<br />- It apparently doesn't offer anything new or stimulating<br /><br />I would define it as a browser for true geeks. To unlock its secrets you need to play around with configuration files, hundreds of hidden settings, macros, and menus. However, it can be very gratifying for people who enjoy this sort of thing. There's just one little problem with it: people who enjoy tweaking an application as much as K-meleon needs to be tweaked normally prefer a more customizable operating system altogether, but the browser is strictly <em>Windows only</em>.<br /><br />I like it even if I don't have the time to play around with it as much as I would like to, and I think it is useful for some specific tasks. In particular, I found myself using it to upload pictures when updating one of my sites, and similarly repetitive jobs where all you need is a browser able to render a page quickly without using too much memory or CPU cycles. <br />K-meleon is built for Windows, and is therefore optimized for it, perhaps even more so than Firefox, and it's arguably nearly as fast as Opera. As far as I'm concerned, it's more lightweight than Opera and this makes it ideal as a <em>secondary browser</em> to run together with Firefox or Opera. Why would you want to do that? Well, suppose you have to check two different GMail accounts and reply to emails here and there: using a secondary browser to keep you logged in to another Google account is better than having to login and logout repeatedly.<br /><br />Something amusing (or maybe not) about K-meleon: it seems to have no security advisories [22] on Secunia as only one was submitted and quickly patched in 2004, and that was all. The impression is that the browser is just not very popular.<br /><br /><br /><strong>Netscape</strong><br /><br />Netscape [23] is perhaps one of the oldest browsers that is still alive. It used to be a full-on web suite (basically a rebrand of the Mozilla Suite), and thus featured a web browser (Netscape Navigator), a WYSIWYG HTML editor, a mail client, and an address book. It was never lightweight (due to all the applications bundled together), but it was a true all-in-one Internet suite, at the time.<br /><br />Nowadays people prefer having a separate email client or check their email online. They rarely need an address book, since email addresses and contact details are normally stored automatically by the mail client/web application. The average user probably won't use the HTML editor, and the web developer will choose a more professional/optimal solution than Netscape/Mozilla Composer.<br /><br />Furthermore, Mozilla <em>suddenly</em> started changing its roadmap, heavily marketing a standalone browser rather than an application suite, so people at Netscape thought it was the right time to do the same. Netscape now offers only a browser. It is based on Firefox, but has a lot of additional features. <br /><br />When the Netscape browser was launched in May 2005, it was supposed to represent a <em>new standard</em> for online security, but various vulnerabilities[24] were found just after release, which caused it to gain the totally opposite reputation. Everything was fixed quickly enough, but people weren't impressed by that (myself included). Furthermore, another incident occurred a few days later. Microsoft advised its customers to uninstall Netscape 8 from their system [25], because after installing it on Windows, Internet Explorer inexplicably became unable to render XML pages, displaying a blank page instead!<br /><br />Apart from these odd events - which indeed half ruined Netscape's reputation - the application itself isn't that bad; it's based on Firefox, after all.<br /><br />Differences from Mozilla's browser are obvious immediately after installation: Netscape opted for a sort of online install, in the sense that the installer, which is downloadable from the official site, starts the download of the actual components and then installs them. In the meantime, slides specially tailored for end users appear on the screen, introducing the main browser features. These slides provide entertaining and informative viewing for the user. <br /><br />The browser is shipped with two default themes, and the interface itself is rearranged: search bar on the left, four weird buttons on the right, and a magic <em>multibar</em> underneath. The multibar addresses a common issue with Firefox and IE - if you keep installing extensions and toolbars, the window used to display the page eventually becomes smaller. This new feature allows users to choose up to 10 different bars which can be selected in rotation with a single click.<br /><br />The real innovation, however, is the Security Center. It seems that these two magic words are now heavily used everywhere, as if they have some mystical power to reassure users and make them feel protected. In reality, the security center only tells you whether or not you can trust a site, based on Netscape's list of trusted sites or your preferences, and it automatically adjusts the browser security settings accordingly.<br /><br /><em>But isn't Netscape a Firefox based browser?</em><br /><br />Yes and no. Netscape can render using either Mozilla's engine or Internet Explorer's! Good or bad? Well, probably good in some cases, but rather annoying sometimes as it's <em>too smart</em>: I tried visiting Microsoft.com and without doing anything the rendering engine switched to IE automatically! It basically tries to guess which browser is better to render certain pages, and this can be problematic, especially if it renders as IE any page which uses ActiveX technology. This short term gain - <em>total</em> compatibility - is achieved by surrendering to IE flaws and maybe even giving no incentive for developers to abandon an IE-oriented web development: <em>'If Netscape can use an IE engine, why should I code using web standards?'</em> <br /><br />Fortunately, despite the effort made by the developers and marketing experts at Netscape Corp., the new browser is not convincing enough. It is also clearly heavier on resources than Firefox; while I was just surfing it started claiming more than 70MB of RAM, while Firefox normally uses half the amount. Personally, I think it's an interesting attempt to create a <em>perfect</em> browser, and it enriches Firefox with some new features which either are normally not available or require extensions, but it's not for me.<br /><br /><br /><strong>Summing up</strong><br /><br />As I said at the beginning (ruining all the suspense), there's no perfect browser; there's nothing universally accepted by everyone because everyone does different things. Personally, I'd advise using Firefox for general use, because it offers excellent compatibility, security and features. <br /><br />On the other hand, if you don't like extensions and you just need something to browse the Internet quickly, without the hassle of having to download additional components, go for Opera, although there are still some compatibility issues with it that need to be fixed. <br /><br />For Windows-based geeks, I'd recommend K-meleon: it's fast, simple, effective, and gives you plenty of things to play with to tweak almost every part of the browser. The project is not dead; a community of people are using it and providing patches, even if the leading developer is not able to do so.<br /><br />Netscape still needs some work, but it could be useful for quickly viewing a site on Firefox and IE, for example. It's also a little more user-friendly than Firefox. Those who are already accustomed to Firefox, however, are more likely to stick with it.<br /><br />Again, depending on what you do, what your needs are, and even your mood, one browser can be better than others. Personally, I use a variety of browsers: Firefox mostly, but K-meleon and Opera as well, and I like this combination as my <em>perfect browser</em>. What about you? <br /><br /><br /><strong>Credits</strong><br />Thanks to comet for providing appropriate thoughts and opinions regarding the browsers' security. <br /><br /><strong>Notes and Resources</strong><br /><small><br />[1] Clarification about the 'Gecko' engine: <a href="http://www.mozilla.org/newlayout/gecko.html">http://www.mozilla.org/newlayout/gecko.html</a><br />[2] 'One Week with Firefox, its Extensions and Opera', OsNews.com, by Mart'n Marconcini <a href="http://www.osnews.com/story.php?news_id=7562">http://www.osnews.com/story.php?news_id=7562</a><br />[3] 'Firefox 1.5 vs Opera 8.5', SonSpring Journal, 09/22/2005 - <a href="http://sonspring.com/journal/firefox-15-vs-opera-85">http://sonspring.com/journal/firefox-15-vs-opera-85</a><br />[4] Evolt.com, Browser list - <a href="http://browsers.evolt.org/">http://browsers.evolt.org/</a><br />[5] HowToCreate.com - Browser Speed Analysis -<a href="http://www.howtocreate.co.uk/browserSpeed.html#winspeed">http://www.howtocreate.co.uk/browserSpeed.html#winspeed</a><br />[6] 'Comparison of web browsers', Wikipedia page - <a href="http://en.wikipedia.org/wiki/Comparison_of_web_browsers">http://en.wikipedia.org/wiki/Comparison_of_web_browsers</a><br />[7] Slim Browser, Home Page - <a href="http://www.flashpeak.com/sbrowser/">http://www.flashpeak.com/sbrowser/</a><br />[8] Maxthon, Home Page - <a href="http://www.maxthon.com/">http://www.maxthon.com/</a><br />[9] AvantBrowser, Home Page - <a href="http://www.avantbrowser.com/">http://www.avantbrowser.com/</a><br />[10] SeaMonkey Project, Hope Page - <a href="http://www.mozilla.org/projects/seamonkey/">http://www.mozilla.org/projects/seamonkey/</a><br />[11] StopIE.com - <a href="http://www.stopie.com/">http://www.stopie.com/</a>, BrowseHappy.com - <a href="http://browsehappy.com/">http://browsehappy.com/</a><br />[12] Secunia vulnerabilities, Internet Explorer - <a href="http://secunia.com/product/11/">http://secunia.com/product/11/</a><br />[13] Firefox Home Page - <a href="http://www.mozilla.org/products/firefox/">http://www.mozilla.org/products/firefox/</a><br />[14] Spread Firefox website - <a href="http://www.spreadfirefox.com/">http://www.spreadfirefox.com/</a><br />[15] Secunia vulnerabilities, Mozilla Firefox - <a href="http://secunia.com/product/4227/">http://secunia.com/product/4227/</a><br />[16] Opera Browser, Official Website - <a href="http://www.opera.com/">http://www.opera.com/</a><br />[17] Opera becomes free, webpage - <a href="http://www.opera.com/free">http://www.opera.com/free</a><br />[18] Opera and Firefox extensions - <a href="http://virtuelvis.com/archives/2005/01/opera-and-firefox-extensions">http://virtuelvis.com/archives/2005/01/opera-and-firefox-extensions</a><br />[19] How to add 'I'm feeling lucky' to Opera - <a href="http://my.opera.com/community/forums/topic.dml?id=63620">http://my.opera.com/community/forums/topic.dml?id=63620</a><br />[20] Writely.com, free online word processor - <a href="http://www.writely.com/">http://www.writely.com/</a><br />[21] K-meleon Project, Sourceforge - <a href="http://kmeleon.sourceforge.net/">http://kmeleon.sourceforge.net/</a><br />[22] Secunia vulnerabilities, K-meleon - <a href="http://secunia.com/product/3684/">http://secunia.com/product/3684/</a><br />[23] Netscape Browser, Home Page - <a href="http://browser.netscape.com/ns8/">http://browser.netscape.com/ns8/</a><br />[24] 'Netscape fixes holes in 'security' browser', Zdnet - <a href="http://www.zdnet.com.au/news/security/0,2000061744,39192767,00.htm">http://www.zdnet.com.au/news/security/0,2000061744,39192767,00.htm</a><br />[25] Netscape 8 'breaks' IE, Zdnet - <a href="http://news.zdnet.co.uk/software/applications/0,39020384,39200178,00.htm">http://news.zdnet.co.uk/software/applications/0,39020384,39200178,00.htm</a><br /></small><br />
M contents/articles/pre-review-of-ie7.htmlcontents/articles/pre-review-of-ie7.html

@@ -1,7 +1,7 @@

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

@@ -1,7 +1,7 @@

----- -title: Project Gutenberg: The What, When and Why +title: "Project Gutenberg: The What, When and Why" content-type: article timestamp: 1134215728 -tags: writing|internet +tags: "writing|internet" ----- 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. <br />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...<br /><strong>Origins</strong><br /><br />Even if you never heard the word ?e-book?[1] before, you can probably guess its meaning: <em>electronic book</em>, 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 <em>e-book</em> was created in 1971.<br /><br />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 <em>computer time</em>. 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. <br /><br />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 <em>project</em> 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.<br /><br />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.<br /><br /><br /><strong>What is Project Gutenberg?</strong><br /><br />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. <br /><br />The mission of the project can be summarized as follows[4]:<br /><br /><div style="text-align: center;"><em> "To encourage the creation and distribution of eBooks."<br /> </em></div><br /><br />In order to achieve this, Project Gutenberg is set up such that <em>anyone</em> 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. <br /><br />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]!<br /><br />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. <br /><br />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.<br /><br />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.<br /><br /> 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 <em>proper</em> or <em>standard</em> 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 <em>Plain Vanilla ASCII</em>, 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.<br /><br />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. <br /><br />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.<br /><br /><br /><strong>Not All Books Are Equal (for now)</strong><br /><br />By looking at some of the titles available on Project Gutenberg, you?ll notice that most of them are <em>classics</em> or relatively old works: for example, you won?t find the latest <em>Harry Potter</em>[10] available for download.<br /><br />Since <em>all</em> 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.<br /><br />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 <em>only if</em> some particular conditions subsist:<br /><br /><ul><br /><li>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.</li><br /><li>The last surviving author died at least 70 years before January 1 of the current year.</li><br /><li>Neither a </li><em>perpetual copyright</em> is granted by the Berne Convention nor has a particular government (US or EU) passed a copyright term extension.<br /></ul><br /><br />Now we can see why there are not very many <em>new</em> publications available in the project, and that?s really frustrating for Michael Hart and other volunteers:<br /><br /><em> "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."</em>[12]<br /><br />After all these considerations, we can take a closer look at Gutenberg?s license[13] which comes in two different versions: <em>informative</em> 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 <em>only</em> to PG, you?ll have to contact the author to obtain permission.<br /><br />Furthermore, anybody can use the PG trademark when distributing <em>verbatim</em> 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.<br /><br /><br /><strong>Satellite Sites and Similar Projects</strong><br /><br />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 <em>?Break Down the Bars of Ignorance and Illiteracy?</em>. 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.<br /> <br />Hart is obviously aware of the fact that there are also some sites <em>selling</em> 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. <br /><br />One of the most important <em>satellite site</em> 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.<br /><br />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.<br /><br />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.<br /><br />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]. <br /><br />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 <em>Hamlet</em> to read "To be or not to be, who gives a crap." <br /><br />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.<br /><br /><br /><strong>The Future of Project Gutenberg</strong><br /><br />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 <em>intimidate</em> 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.<br /> <br />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. <br /><br />So far, Michael Hart showed the entire world that a single person can do <em>a lot</em> 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:<br /><br /><em>?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.?</em>[12]<br /><br /><br /><br /><br /><strong>Notes &amp; Further Readings</strong><br /><br />[1] Ebook, Wikipedia page ? <a href="http://en.wikipedia.org/wiki/Ebook">http://en.wikipedia.org/wiki/Ebook</a><br />[2] Project Gutenberg, Wikipedia page - <a href="http://en.wikipedia.org/wiki/Project_Gutenberg">http://en.wikipedia.org/wiki/Project_Gutenberg</a><br />[3] Movable type, Wikipedia page - <a href="http://en.wikipedia.org/wiki/Printing_press">http://en.wikipedia.org/wiki/Printing_press</a><br />[4] Project Gutenberg FAQ0 - <a href="http://www.gutenberg.org/about/faq0">http://www.gutenberg.org/about/faq0</a><br />[5] Project Gutenberg Official Website - <a href="http://www.gutenberg.org">http://www.gutenberg.org</a><br />[6] Project Gutenberg?s catalog - <a href="http://www.gutenberg.org/catalog/">http://www.gutenberg.org/catalog/</a><br />[7] Project Gutenberg?s volunteering page - <a href="http://www.gutenberg.org/info/volunteer">http://www.gutenberg.org/info/volunteer</a><br />[8] Project Gutenberg FAQ3 ? <a href="http://www.gutenberg.org/about/faq3">http://www.gutenberg.org/about/faq3</a><br />[9] Optical Character Recognition, Wikipedia Page ? <a href="http://en.wikipedia.org/wiki/Optical_character_recognition">http://en.wikipedia.org/wiki/Optical_character_recognition</a><br />[10] ?Harry Potter and the half-blood prince?, Scholastic Inc. website - <a href="http://www.scholastic.com/harrypotter/books/prince/index.htm">http://www.scholastic.com/harrypotter/books/prince/index.htm</a><br />[11] Public Domain, Wikipedia Page - <a href="http://en.wikipedia.org/wiki/Public_domain">http://en.wikipedia.org/wiki/Public_domain</a><br />[12] ?The Second Gutenberg Interview with Michael Hart?, Sam Vaknin, Ph.D. - <a href="http://samvak.tripod.com/busiweb29.html">http://samvak.tripod.com/busiweb29.html</a><br />[13] Gutenberg Project license ? <a href="http://www.gutenberg.org/license">http://www.gutenberg.org/license</a><br />[14] Project Gutenberg?s Distributed Proofreading - <a href="http://www.pgdp.net/c/default.php ">http://www.pgdp.net/c/default.php </a><br />[15] HTML Writers Guild Project Gutenberg ? <a href="http://gutenberg.hwg.org/">http://gutenberg.hwg.org/</a> <br />[16] Project Gutenberg Australia ? <a href="http://gutenberg.net.au/">http://gutenberg.net.au/</a><br />[17] Project Gutenberg Germany ? <a href="http://gutenberg.spiegel.de/">http://gutenberg.spiegel.de/</a><br />[18] Project Gutenberg Europe ? <a href="http://gutenberg.nl/">http://gutenberg.nl/</a><br />[19] Wikisource and Project Gutenberg, Wikisource page ? <a href="http://wikisource.org/wiki/Wikisource:Wikisource_and_Project_Gutenberg">http://wikisource.org/wiki/Wikisource:Wikisource_and_Project_Gutenberg</a><br />[20] Wikisource main page ? <a href="http://wikisource.org/wiki/Main_Page">http://wikisource.org/wiki/Main_Page</a><br />[21] Wikipedia main page ? <a href="http://www.wikipedia.org/">http://www.wikipedia.org/</a><br />[22] GNU Free Documentation License ? <a href="http://en.wikipedia.org/wiki/Wikipedia:Text_of_the_GNU_Free_Documentation_License ">http://en.wikipedia.org/wiki/Wikipedia:Text_of_the_GNU_Free_Documentation_License </a><br />
M contents/articles/project-windstone.htmlcontents/articles/project-windstone.html

@@ -1,7 +1,7 @@

----- -title: CyberArmy Presents: Project WindStone +title: "CyberArmy Presents: Project WindStone" content-type: article timestamp: 1134215963 -tags: internet|opensource +tags: "internet|opensource" ----- I think most of the people who currently use the Internet have tried Microsoft Hotmail[1] at least once. Many of you probably don't use it anymore because you found something better, but the point is that Hotmail has been around for a long time, and so has its authentication method, MSN Passport, which is a universal login system used not only for Hotmail but also for many other non-Microsoft websites and services.<br />If you don't like the idea of using Microsoft-owned technology as an authentication system, we have an alternative for you... <strong>Show me your Passport</strong><br /><fieldset><blockquote>"Create your sign-in credentials (e-mail and password) once, then use them everywhere on the Microsoft Passport Network. You can even set the site to remember your credentials for you!"</blockquote></fieldset><br /><br />This is what the MSN Passport does, in a nutshell: it provides a <em>universal</em> login system so that members only need to remember their email address and one password in order to be authenticated on every site that uses the Passport technology. It has been adopted quite happily by some websites and portals[3], and particularly by merchant sites, who liked the idea of making life easier for their users. So far, so good.<br /><br />Like nearly every Microsoft technology seems to at one point or another, the MSN Passport became an object of criticism and concern, as shown in a 2002 MIT document[4]. The main problem is this: among the data collected by Microsoft upon a user's registration is a significant amount of personal information (such as age, date of birth, and addresses) which is stored on the Microsoft servers. What if someone gains access to that information? Who guarantees that that information will not be used by third parties? <br /><br />Aside from the privacy issues, some people are concerned about the system's internal security and by the fact that the system is entirely dependent on Microsoft servers to work:<br /><br /><fieldset><blockquote>"As more services and components depend on remote servers, functionality can grind to a halt if there is a failure on the centralized Passport system."[5]</blockquote></fieldset><br /><br />People have concerns, but what has been done? Are there any alternatives? Well, yes and no. Apparently the <em>Liberty Alliance Project</em>[6] was created to offer a valid and perhaps more democratic alternative to the Microsoft Passport:<br /><br /><fieldset><blockquote>"The Liberty Alliance Project was formed in September 2001 to serve as the premier open standards organization for federated identity and identity-based services. The Alliance is delivering specifications and guidelines to enable a complete network identity infrastructure that will resolve many of the technology and business issues hindering the deployment of identity-based Web services."[7]</blockquote></fieldset><br /><br />The project's founders (160 IT organizations, including Sun Microsystems and VeriSign) aim to create a <em>distributed</em> authentication system, as opposed to the <em>centralized</em> MSN Passport. This will undoubtedly solve some of the problems, but the system is still under development.<br /><br /><strong>Introducing Project Windstone</strong><br />CyberArmy[8] is obviously like neither Microsoft or Sun Microsystems; it's a community of volunteers whose aim is sharing their knowledge and making the Internet a better place. Volunteers don't get paid, but sometimes something gets done, and some projects are released to the general public. Among these is a system for (if you haven't guessed already)a system for universal user authentication, called Project Windstone[9].<br /><br />Project Windstone was developed by SoundWave on behalf of Special Operations and Security[10] to provide a universal authentication system that is easy to use and deploy on websites and in applications. Furthermore, the Windstone protocol is language-independent and functions via HTTP POST transactions between clients and the Windstone server, so virtually any website coded in any language or any application able to communicate with a web server can implement it.<br /><br />It seems great so far, but what can Windstone be used for? As previously said, it is a system to allow users to authenticate themselves with the same credentials on many different websites and share profiles and information between those websites at the same time. Furthermore, users can send each other private messages that can be retrieved on any website that implements Windstone, with the added benefit of all transactions taking place in a secure and private environment.<br /><br />On second thought, Windstone features seem to lead to some perplexity, especially among users who are particularly concerned about their own privacy: apparently a single centralized server is involved, and users can share their profile and send messages with each other, so what warranties does Windstone offers as far as privacy/security goes? Here's something which should reassure most of us:<br /><br /><ul><br /><li>The information provided by users in their public profiles is entirely up to their discretion: in other words, it's up to the user if they want to list their credit card numbers on their profile or talk about their cat, as the Windstone server itself does not require any specific personal information in order to create a profile.</li><br /><li>The username can be any valid email address submitted by the user.</li><br /><li>User profiles are available only after authentication with the Windstone server, and only if the person requesting the profile already knows the email address used by another user for Windstone services. Currently, Windstone does not implement any form of listing of existing users among the standard commands.</li><br /><li>The password chosen for user authentication is NEVER saved in any form; not within the client applications, not on the central server, and not in cookies. </li><br /><li> Data sent from client to server and vice-versa is encrypted.</li><br /></ul><br /><br /><strong>Some more technical details</strong><br />I am actually planning to implement the system on one of my sites, so I started reading the short but straightforward documentation[11] available on the Windstone site to learn more about how the system works, and it seems quite simple and able to do what it does in a logical way; the Windstone "standard" contains a bunch of commands[12] which are used by the clients (agents) and the server to request information exchange such as requests for initialization, possible server replies, and so on. Commands and data are sent using the following format (excerpt from the official documentation):<br /><br /><em><br />The format of this command string is as follows:<br /><br />AAAA.*BBBBBBBBBB.*CCCC::DDDDDDDDDDDDDDDDDDDD::EEEE::FFFFFFFFFF<br /><br />A. This is the command. Commands tell us what kind of request or response is being made with the command string. It also lets us know how many elements of data to expect (see F).<br /><br />B. This is the agent system identifier. Each website or IEP receives a unique alphanumeric ten (10) character identifier upon registration, which is used to identify this system within the network.<br /><br />C. This is the protocol version number. Generally, the version number will not change much, if at all, but it must be present. The protocol version goes with all command strings to let other systems and the Windstone server know what version of the protocol you are using. If certain versions are incompatible with each other, or if there is an upgrade or change to the protocol you are using, the version number will be used to determine that.<br /><br />D. This is the transaction identifier. Usually, this is not used, so the default information that should go here is six zeros ("000000"). The transaction identifier helps to link command strings into groups for processing and is most often used during the user login process.<br /><br />E. This is the sequence number. The sequence number, in conjunction with the transaction identifier, is used to put grouped command strings into their logical order. The sequence numbers have no specified numbering sequence, default start value, or length limit: the only requirement is that a sequence number must be in order from lowest to highest. When not using a transaction identifier or sequence number, the default information that should go here is a simple "X" (note that when "X" is being used in a command string by itself, it should always be capitalized).<br /><br />F. This is the data section. The data section is the heart of the command string. It is important to note that, at the minimum, all data sections need to be base-64 encoded prior to transmission - at no time should there be information in plain text format in the data section.<br /></em> <br /><br />Obviously, command strings can be manipulated to access each section separately and the manipulation can be done with virtually any programming language used on the client side. <br /><br />Normally, the client will send a command to the Windstone server to start the authentication process and then retrieve some information; the server will reply accordingly to the client's command strings with its own responses wrapped in command strings. Let's suppose a Windstone Agent is being used to perform the following actions:<br /><br />- Initialize the system<br />- perform a login<br />- retrieve user profile from the Windstone server <br /><br />In this simulation I will not use the actual command strings but just the codes for the various commands.<br /><br /><em><span style="text-decoration:underline;">Agent</span>: 0000 :: SETUP_INITIALIZE</em> - The Windstone agent sends a request to the server to initialize the authentication process, supplying the software identifier, the software type ("PC-Based" or "Web-Based"), the command landing URL and the URL to redirect logins to.<br /><br /><em><span style="text-decoration:underline;">Server</span>: 0002 :: SETUP_COMPLETE </em>- Everything looks good to the server, which replies with the following information: Unique agent identifier, primary authentication token, secondary authentication token, activation key, security code, shared encryption key (255 random characters, non-binary), registration completion date and time (epoch). These parameters will be used by the agent afterwards and are necessary to identify the agent on the Windstone server.<br /><br /><em><span style="text-decoration:underline;">Agent</span>: 1102 :: USER_LOGIN_REDIRECT</em> - The agent requests to start the authentication process and sends the email address of the user to the server along with the URL where the user's password will be entered.<br /><br /><br /><em><span style="text-decoration:underline;">Server</span>: 1105 :: USER_AUTH_SAVE</em> - User credentials are checked by the Windstone server. Everything is fine, so the server sends this response to the agent. The response contains the authentication token which will be used to authenticate the user during the session, as well as the user's display name.<br /><br /><em><span style="text-decoration:underline;">Agent</span>: 1107 :: USER_INFO</em> - The agent can now request the user's profile from the Windstone Server.<br /><br /><em><span style="text-decoration:underline;">Server</span>: 1108 :: USER_PROFILE</em> - After checking the user's authentication token, the server can now send the following information to the agent: Email address, display name, user "About Me" text, last login date and time, account created date and time, online status.<br /><br />This is just a simple example of how the Windstone protocol can be used; as mentioned earlier, there are various other commands[12] which can be used to perform various actions. <br /><br /><strong>Development and deployment</strong><br />The Windstone protocol is fully operational and can be implemented on any website or application able to communicate with a web server. The developer made a very basic PHP-based example of an Agent system available online[13]; it may not be a masterpiece of PHP coding (as the developer himself pointed out), but it can be useful in understanding how to develop a Windstone Agent System.<br /><br />If you'd like to start developing your own Agent System or you just want to create a Windstone account, it can be done on the Windstone registration page[14]: you'll be asked to provide an email address, a display name and a profile (the last two can be modified afterwards). Then the system will prompt you for a password, and an email will be sent to the address you provided to confirm and activate your account. Once you have an account, you can login to any website or application implementing the Windstone protocol, such as the Windstone website itself[15].<br /><br />Windstone is certainly not yet comparable to the MSN Passport technology - it's not used by a lot of important sites, and it's much simpler and offers fewer services, but it's undoubtedly an interesting approach to a free to use, secure and private system of universal user authentication.<br />Check it out![9] <br /><br /><strong>Notes and Resources</strong><br />[1] Microsoft Hotmail Service, <a href="http://www.hotmail.com">http://www.hotmail.com</a><br />[2] MSN Passport Network: <a href="https://accountservices.passport.net/ppnetworkhome.srf?vv=320&lc=1033">https://accountservices.passport.net/ppnetworkhome.srf?vv=320&lc=1033</a><br />[3] List of sites using MSN Passport, Passport@everything2: <a href="http://www.everything2.com/index.pl?node=passport">http://www.everything2.com/index.pl?node=passport</a><br />[4] "Microsoft .NET Passport and Wallet: Approach with Caution!", <a href="http://web.mit.edu/ist/isnews/v17/n04/170408.html">http://web.mit.edu/ist/isnews/v17/n04/170408.html</a><br />[5] "Microsoft Hailstorm and Passport", go-mono.com, <a href="http://www.go-mono.com/passport.html">http://www.go-mono.com/passport.html</a><br />[6] Liberty Alliance Project, Official Page, <a href="http://www.projectliberty.org/index.php">http://www.projectliberty.org/index.php</a><br />[7] Liberty Alliance Project, FAQs, <a href="http://www.projectliberty.org/about/faq.php">http://www.projectliberty.org/about/faq.php</a><br />[8] CyberArmy, Official Page, <a href="http://www.cyberarmy.net/">http://www.cyberarmy.net/</a><br />[9] Project Windstone, Official Page, <a href="http://windstone.x-mirror.com/v2/">http://windstone.x-mirror.com/v2/</a><br />[10] Special Operations and Security, official website, <a href="http://sos.x-mirror.com/">http://sos.x-mirror.com/</a><br />[11] Windstone Communications Protocol, Development Whitepaper, <a href="http://windstone.x-mirror.com/v2/development.php">http://windstone.x-mirror.com/v2/development.php</a><br />[12] Windstone Protocol Commands, <a href="http://windstone.x-mirror.com/v2/commands.php">http://windstone.x-mirror.com/v2/commands.php</a><br />[13] Example of PHP Agent System (ZIP file), <a href="http://windstone.x-mirror.com/v2/ws-testbed.zip">http://windstone.x-mirror.com/v2/ws-testbed.zip</a><br />[14] Windstone Registration, <a href="http://windstone.x-mirror.com/v2/register.php">http://windstone.x-mirror.com/v2/register.php</a><br />[15] Windstone Login Page, <a href="http://windstone.x-mirror.com/v2/login.php">http://windstone.x-mirror.com/v2/login.php</a><br />
M contents/articles/quick-overview-of-sqlite.htmlcontents/articles/quick-overview-of-sqlite.html

@@ -1,7 +1,7 @@

----- -title: A Quick Overview of SQLite +title: "A Quick Overview of SQLite" content-type: article timestamp: 1132937558 -tags: review|databases +tags: "review|databases" ----- A few months ago, my old hosting company started having problems with their servers. The servers would go down unexpectedly for 5-10 minutes on a relatively frequent basis, but for some weird reason... the MySQL databases were unusable for a couple of hours afterwards every time. "We had problems with MySQL, BUT the server was up, so we're still within the 99% uptime guarantee"... At the time I was thinking: "If only MySQL databases behaved like plain files..." <br /><br /><strong>What is SQLite?</strong><br /><br />When PHP5 was first released, I discovered SQLite: <em>"...a small C library that implements a self-contained, embeddable, zero-configuration SQL database engine"</em> (as quoted from the <a href="http://www.sqlite.org">official site</a>). PHP5 offers native support to this little wonder, whose development actually started long before PHP5 was released, and can be used with many, many other programming languages.<br /> <br />SQLite organizes each database in a .db file, and implements most of the SQL 92 standards, to access the databases with no need of a server process running at the same time. Access is accomplished through standard reading/writing file operations.<br /><br />Let's examine the pros and cons of using SQLite in your web applications.<br /><br /><strong>Features</strong><br /><br />- SQLite is FREE &quot;for any purpose&quot;, <a href="http://www.sqlite.org/copyright.html">they say</a>.<br />- It doesn't rely on a server process to run<br />- You don't need to spend time configuring your installation, because there's nothing to configure!<br />- As there's no client-server negotiation, accesses to the database are much faster (2-3 times faster than a MySQL database)<br /><br />As a consequence of all this, there's actually no concept of &quot;users&quot; allowed to access the database; as I said, the actual data of each database is stored into a single file, and as such, it has permissions which regulate access. If a script has read or write access to the file, a read/write sql instruction can be executed on the database. You can therefore simply protect your databases as you would protect any other file on your server.<br /><br />- SQLite is small: the library is just 250KB, and takes care of everything, you don't need any other library or program to use it.<br />- SQLite can handle files up to 2 terabytes in size.<br />- SQLite implements most of the SQL 92 standard. This means you can usually use standard and well known queries to access it (with some exceptions, discussed in the next section).<br />- SQLite does not enforce datatype constraints. Is this a feature or a bug? Well, they call it a feature, but others may not agree. As a matter of fact, you can put a string into a field marked &quot;integer&quot; and vice versa, and furthermore, the string can be as big as you like! There's one exception to this rule, though. Columns marked as PRIMARY KEY must be of integer type. <br /><br /><br /><strong>Limitations</strong><br />Now that you have read all of the preceding material, and know that PHP5 supports SQLite natively, you might be thinking about putting MySQL in the bin and using SQLite for everything instead: it's smaller, faster, portable, simpler, and headache-free... it's love at first sight. Right?<br /><br />Well, the developers themselves decided to devote <a href="http://www.sqlite.org/whentouse.html">a page</a> to discuss when you should use SQLite and where you'd be better off sticking with your &quot;old&quot; database engine. Furthermore, being such a small and powerful piece of code, SQLite comes with some limitations which should be considered before starting to use it in a project:<br /><br />- Not all SQL queries and syntax are supported. For a full list, have a look <a href="http://www.sqlite.org/omitted.html">here</a>. The most notable things you'll miss in SQLite are: the inability (for now) to &quot;ALTER TABLE&quot; (you do this, they say, by creating a new modified table and deleting the old one), no VIEW, and no CHECK or FOREIGN KEY constraints (they are &quot;parsed but not enforced&quot;).<br /><br />- Syntax can be different sometimes. I noticed that, for example, in a JOIN between two or more tables, when accessing columns you ALWAYS have to specify &lt;table&gt;.&lt;column&gt;, whereas MySQL doesn't complain if there's ambiguity.<br /><br />- SQLite is not suitable for projects which requires a lot of semi-simultaneous writing operations. SQLite uses reader/writer locks: if there's someone reading from the database, writing to it is not allowed. This basically mean that multiple simultaneous read operations (SELECT x FROM ...) have higher priority than write operations (INSERT, UPDATE, ...), which are therefore delayed. <br /><br />- Do not use SQLite for big databases. Even though I said that (theoretically) databases up to 2 terabytes are supported, when your database is more than 1 GB, SQLite requires too much memory to run (256 bytes of RAM for each MB of database space, they say).<br /><br />- Generally, if your website gets lots of traffic, SQLite shouldn't be your primary database engine, for the issues mentioned above. php.net uses SQLite for its site, but only on certain parts of it. If you get fewer than 100,000 hits/day, SQLite should work fine - they say. So basically I can use for any site I make...<br /><br /><br /><strong>Conclusions</strong><br />Considering all features and limitations, SQLite is an excellent solution for small or medium websites, embedded applications, programs which only need a small database to function and shouldn't be bound to a server, temporary databases, testing, and the like. Always keep in mind that you're working with files, so keep them protected wherever you put them in your server (a connection is established simply by specifying the path to the file).<br /><br />Last but not least, if you're used to phpMyAdmin for administering your MySQL databases, there are similar tools for SQLite, such as <a href="http://www.sqlitemanager.org">sqlitemanager</a>.<br />
M contents/articles/rails-doc-first-look.htmlcontents/articles/rails-doc-first-look.html

@@ -1,8 +1,8 @@

----- -title: Rails-Doc.org - A First Look +title: "Rails-Doc.org - A First Look" content-type: article timestamp: 1213853400 -tags: rails|ruby|writing|review +tags: "rails|ruby|writing|review" ----- <p>When you decided to learn Ruby on Rails (if you did, that is), chances are that you bought a book. I did, too, actually: there are a lot of very interesting and fairly comprehensive books out there after all.</p> <p>I actually never bought a book to learn <span class="caps">PHP</span>, in the past though. Why&#8217;s that? Well, for two simple reasons:</p>
M contents/articles/rails-inspired-php-frameworks.htmlcontents/articles/rails-inspired-php-frameworks.html

@@ -1,10 +1,10 @@

----- -title: Rails-inspired PHP frameworks +title: "Rails-inspired PHP frameworks" content-type: article -subtitle: A roundup of six different PHP frameworks inspired by Ruby on Rails +subtitle: "A roundup of six different PHP frameworks inspired by Ruby on Rails" popular: true timestamp: 1146661020 -tags: frameworks|review|cakephp|rails +tags: "frameworks|review|cakephp|rails" ----- <p>There are various articles online examining many <span class="caps">PHP</span> frameworks, providing short reviews or comparative charts, but I could not find yet an article examining the so called <em>&#8220;Rails-inspired frameworks&#8221;</em> anywhere on the web, so I decided to write my own&#8230;</p> <blockquote>
M contents/articles/rails-os-killer-apps.htmlcontents/articles/rails-os-killer-apps.html

@@ -1,8 +1,8 @@

----- -title: Rails-powered Open Source Killer Apps, Anyone? +title: "Rails-powered Open Source Killer Apps, Anyone?" content-type: article timestamp: 1225618860 -tags: rails|ruby|writing|rant +tags: "rails|ruby|writing|rant" ----- <p>Lately I&#8217;ve been meandering around the web to find a good <span class="caps">CMS</span> for a family site I&#8217;d like to set up. <br /> Why a <span class="caps">CMS</span>? Well, for a few simple reasons:</p>
M contents/articles/rails-to-italy.htmlcontents/articles/rails-to-italy.html

@@ -1,8 +1,8 @@

----- -title: Rails to Italy 2007 +title: "Rails to Italy 2007" content-type: article timestamp: 1183806900 -tags: rails|italy +tags: "rails|italy" ----- <p>So it looks like there will be a &#8220;Rails conference in Italy&#8221;, after all. In Pisa as well, and that&#8217;s maybe even less than 2 hours drive from where I live (Genoa)!</p> <p><em>Sounds cool!</em></p>
M contents/articles/randal-schwartz.htmlcontents/articles/randal-schwartz.html

@@ -1,10 +1,10 @@

----- -title: A pizza with Randal Schwartz +title: "A pizza with Randal Schwartz" content-type: article -subtitle: Talking about open source, programming, emacs and technical writing +subtitle: "Talking about open source, programming, emacs and technical writing" popular: true timestamp: 1289738129 -tags: opensource|programming|italy +tags: "opensource|programming|italy" pdf: true -----
M contents/articles/rawline-020.htmlcontents/articles/rawline-020.html

@@ -1,8 +1,8 @@

----- -title: New Release: RawLine 0.2.0 +title: "New Release: RawLine 0.2.0" content-type: article timestamp: 1207107180 -tags: ruby|programming|opensource|rawline +tags: "ruby|programming|opensource|rawline" ----- <p><del>InLine</del> RawLine 0.2.0 is out!</p> <p>*Raw*Line is the new name for InLine, in case you didn&#8217;t guess. The name was changed to avoid name collision problems with the RubyInline project.</p>
M contents/articles/rawline-030.htmlcontents/articles/rawline-030.html

@@ -1,8 +1,8 @@

----- -title: RawLine 0.3.0 released — now with Readline emulation +title: "RawLine 0.3.0 released — now with Readline emulation" content-type: article timestamp: 1235890020 -tags: ruby|opensource|rawline +tags: "ruby|opensource|rawline" ----- <p><a href="/rawline">RawLine</a> 0.3.0 has been <a href="http://rubyforge.org/projects/rawline">released</a>. This new milestones fixes some minor bugs and adds some new functionalities, must notably:</p> <ul>
M contents/articles/real-world-rawline-usage.htmlcontents/articles/real-world-rawline-usage.html

@@ -1,8 +1,8 @@

----- -title: Real-world Rawline usage +title: "Real-world Rawline usage" content-type: article timestamp: 1236398040 -tags: ruby|rawline +tags: "ruby|rawline" ----- <p>So I finally decided to update <a href="/rawline">RawLine</a> last week, and I added a more Readline-like <span class="caps">API</span>. When I first started the project, I was determined <em>not</em> to do that, because the current Readline wrapper shipped with Ruby is not very Ruby-ish: it&#8217;s a wrapper, after all!</p> <p>The good thing of having a new <span class="caps">API</span> compatible with Readline is that now people can use RawLine in their Readline-powered scripts, with very minor modifications.</p>
M contents/articles/redbook-020-released.htmlcontents/articles/redbook-020-released.html

@@ -1,8 +1,8 @@

----- -title: Announcement - RedBook v0.2.0 released +title: "Announcement: RedBook v0.2.0 released" content-type: article timestamp: 1191812700 -tags: redbook|ruby|productivity|opensource +tags: "redbook|ruby|productivity|opensource" ----- <blockquote> <p><em>&#8220;Release Early, Release Often&#8221;</em></p>
M contents/articles/redbook-030-released.htmlcontents/articles/redbook-030-released.html

@@ -1,8 +1,8 @@

----- -title: Announcement - RedBook v0.3.0 released +title: "Announcement: RedBook v0.3.0 released" content-type: article timestamp: 1193289480 -tags: redbook|ruby|productivity|opensource +tags: "redbook|ruby|productivity|opensource" ----- <p>It&#8217;s time for a new beta release of RedBook. This was actually going to be a fairly modest release in terms of features, but I actually ended up implementing a lot more than expected, even things which were planned for the first production release 1.0. So, let&#8217;s see what&#8217;s new</p> <h3>New operation names <em>(which break compatibility with previous versions)</em></h3>
M contents/articles/redbook-040-released.htmlcontents/articles/redbook-040-released.html

@@ -1,8 +1,8 @@

----- -title: Announcement - RedBook v0.4.0 released +title: "Announcement: RedBook v0.4.0 released" content-type: article timestamp: 1196235240 -tags: opensource|productivity|redbook|ruby +tags: "opensource|productivity|redbook|ruby" ----- <p>I&#8217;m pleased to announce a new release of the RedBook daily logging and time tracking script. This release introduces two new operations, four stats-related directives and a brand new Windows Installer able to setup RedBook in a blink, with (almost) no configuration at all.</p> <p>Let&#8217;s have a closer look&#8230;h2. New Operations</p>
M contents/articles/redbook-050-released.htmlcontents/articles/redbook-050-released.html

@@ -1,8 +1,8 @@

----- -title: Announcement - RedBook v0.5.0 released +title: "Announcement: RedBook v0.5.0 released" content-type: article timestamp: 1197788820 -tags: opensource|productivity|redbook|ruby +tags: "opensource|productivity|redbook|ruby" ----- <p>This new beta release of RedBook introduces quite a few changes when it comes to configuration and setup. Here&#8217;s some highlights&#8230;h3. Regexp changes</p> <p>It is now necessary to enter &#8220;proper&#8221; regular expressions for <code>:select</code>. Proper means between slashes, like the following:</p>
M contents/articles/redbook.htmlcontents/articles/redbook.html

@@ -1,8 +1,8 @@

----- -title: RedBook - A simple Ruby program for your daily logging needs +title: "RedBook - A simple Ruby program for your daily logging needs" content-type: article timestamp: 1191067500 -tags: ruby|productivity|software|tools|redbook +tags: "ruby|productivity|software|tools|redbook" ----- <p>Logging your daily activities is important. If you don&#8217;t believe me you&#8217;d better check at least these three posts on LifeHacker, which feature different scripts and applications:</p> <ul>
M contents/articles/refactoring-ruby-edition-review.htmlcontents/articles/refactoring-ruby-edition-review.html

@@ -1,8 +1,8 @@

----- -title: Book Review: Refactoring - Ruby Edition +title: "Book Review: Refactoring - Ruby Edition" content-type: article timestamp: 1264171236 -tags: ruby|books|review +tags: "ruby|books|review" ----- <p>Refactoring, like testing, is an activity that should be very familiar to all programmers, especially Rubyists. Actually, programs written in Ruby don&#8217;t need as many refactorings as, say, Java programs. However Rubyists are traditionally more <span class="caps">TDD</span> oriented and they like writing clear and elegant code.</p> <p><a href="http://www.informit.com/store/product.aspx?isbn=0321603508">Refactoring: Ruby Edition</a> is actually a rewrite of the more revolutionary &#8212; at the time &#8212; <a href="http://www.informit.com/store/product.aspx?isbn=0201485672">Refactoring: Improving the Design of Existing Code</a>, written by Martin Fowler &amp; others to teach Java programmers about refactoring. Jay Fields and others decided to <em>port</em> this historical title to Ruby to fill a gap: there was no authoritative book about refactoring for this language, so what&#8217;s better than translating the Bible on the subject?</p>
M contents/articles/reflections-on-management.htmlcontents/articles/reflections-on-management.html

@@ -1,9 +1,9 @@

----- -title: Book Review: Reflections on Management +title: "Book Review: Reflections on Management" content-type: article -subtitle: The key to becoming a true leader +subtitle: "The key to becoming a true leader" timestamp: 1296942685 -tags: review|books|software +tags: "review|books|software" pdf: true -----
M contents/articles/review-services.htmlcontents/articles/review-services.html

@@ -1,8 +1,8 @@

----- -title: Review Services +title: "Review Services" content-type: article timestamp: 1197631440 -tags: review|website|personal|tools|books +tags: "review|website|personal|tools|books" ----- <p>When it comes to software, I definitely like to try out new things. My collegues takes the piss out of me because every <del>week</del> day I come up with &#8220;some new tool they <em>have</em> to start using&#8221; and so on.<br /> As a matter of fact, I like reviewing software as well. I enjoy writing and analyzing new things, evaluating all the new possibilities they may offer, and I also tend to have a rather critical eye for what doesn&#8217;t <em>feel</em> right. I&#8217;ll use a tool for months but still try out new ones which claim to do the same thing — but better — as they come out.<br />
M contents/articles/ror-and-cakephp.htmlcontents/articles/ror-and-cakephp.html

@@ -1,8 +1,8 @@

----- -title: Ruby on Rails & CakePHP +title: "Ruby on Rails & CakePHP" content-type: article timestamp: 1152258748 -tags: cakephp|rails|tutorial +tags: "cakephp|rails|tutorial" ----- <p>This article is an attempt to port a famous Ruby on Rails tutorial to <span class="caps">PHP</span> using an emerging <span class="caps">PHP</span> <span class="caps">MVC</span> framework, CakePHP. CakePHP was inspired by Rails&#8217; philosophy of Rapid Application Development. It implements a lot of the features and concepts that made Ruby on Rails popular in a very short time. Although Ruby&#8217;s syntax and way of doing things is known to be much more elegant than other programming languages, there is yet hope for <span class="caps">PHP</span> to get more organized and effi cient. This tutorial will follow its Rails counterpart step-by-step, covering the essential steps to create a simple, yet fully functional, web application.<br /> Register on the <a href="http://www.php-mag.net/magphpde/psecom,id,20,archive,2,noeid,20,.html">International <span class="caps">PHP</span> Magazine</a> to read the full article.<br />
M contents/articles/ruby-compendium-020.htmlcontents/articles/ruby-compendium-020.html

@@ -1,9 +1,9 @@

----- -title: Ruby Compendium v0.2.0 released +title: "Ruby Compendium v0.2.0 released" content-type: article -subtitle: With up-to-date Ruby implementations, more resources, and online version +subtitle: "With up-to-date Ruby implementations, more resources, and online version" timestamp: 1312732912 -tags: ruby-compendium|books|ruby +tags: "ruby-compendium|books|ruby" ----- <section class="section">
M contents/articles/ruby-lang-italian.htmlcontents/articles/ruby-lang-italian.html

@@ -1,8 +1,8 @@

----- -title: Italian translation of Ruby-Lang.org finally available! +title: "Italian translation of Ruby-Lang.org finally available!" content-type: article timestamp: 1226756880 -tags: ruby +tags: "ruby" ----- <p><a href="#italian-version">[Vai alla versione italiana]</a></p> <p>I am very pleased to announce that the official site of the Ruby programming language is now available in Italian:</p>
M contents/articles/server-packages.htmlcontents/articles/server-packages.html

@@ -1,7 +1,7 @@

----- -title: Easy-to-install server packages +title: "Easy-to-install server packages" content-type: article timestamp: 1119989539 -tags: review|webdevelopment|php|databases +tags: "review|webdevelopment|php|databases" ----- The first and most obvious difference between, say, a C++ programmer and a PHP developer is that the PHP developer needs a server with PHP support up and running somewhere in order to "show" others that the application is working. This normally means that a PHP developer must either have remote access to a server, or have one set up on his machine. Installing and configuring a server can be tricky sometimes, especially if you want to configure it "properly", but in some cases - for Linux/BSD users mainly - there are some pre-configured servers you can download and install. <br /><br />I won't examine all these methods in this article, but I'll describe three alternatives for installing and run a webserver on windows in 10 minutes or less.<br /><br /><strong>Preliminary considerations</strong><br />Let's assume that you just want to have a server set up on your computer for <em>internal use</em> only, for testing purposes. That means that you wouldn't need to be concerned about "security" or similar issues - you just want to be able to run your PHP scripts and access your database(s) quickly and easily. <br /><br />As I said earlier, Linux users would probably opt for some package available for their favourite distros - they would only have to download and install an .rpm or .deb package for (presumably) Apache httpd, PHP and MySQL, and just use a basic configuration. There are other tools around which can help if you want to compile or configure Apache, but that is beyond the scope of this article.<br /><br />Let's just focus on Windows users, then. Normally they like things that are easy to install and can be configured in a few minutes <em>maximum</em> or not at all. Finally, let's assume that as a Windows user, you don't want to spend more money for a new operating system with a bundled server, like Windows 2003, because you can use <a href="http://www.apache.org">Apache</a> on Windows as well, for free. Having said this, I actually found 3 possible solutions that are handy for PHP (or Perl) developers who don't want to spend time learning how to configure a server. There are people like that, including myself to some extent.<br /><br /><br /><strong>WAMPserver</strong><br /><a href="http://www.wampserver.com">WAMP</a> stands for "Windows Apache MySQL PHP", and I must say that this product happens to be my choice. The current version, available at the time of writing, offers:<br /><br />- PHP 5.0.4<br />- Apache 1.3.33<br />- MySQL 4.1.10a<br />- phpMyadmin 2.6.1-pl3<br />- SQLitemanager 1.0.4<br /><br />This is basically a fully working PHP5 environment, with other tools like phpMyadmin to administer your MySQL database even more easily (more laziness!), and, if you're into the new functionalities of PHP5, it also comes with sqlitemanager, a php application similar to phpMyAdmin but for sqlite databases, which are supported by default in PHP5.<br />You download it, you start the installation program, and it's DONE. That's it. In 5 minutes you have your own little apache/php/mysql(ite) environment up and running and you can start showing off your sites to your friends and co-workers right away.<br /><br />The program also installs two services which can be run at startup, a little icon in the system tray to access all the tools and, of course, <a href="http://localhost">http://localhost</a> in your favourite browser.<br /><br />If all this is still not enough for you, and you want more things more easily, you can install addons to set up PHP4 (and seamlessly switch between the two with a single click!), Perl, Zend Accelerator, and so forth.<br /><br /><br /><strong>EasyPHP</strong><br />The second suite I will briefly describe is <a href="http://www.easyphp.org">EasyPHP</a>. This is a French project (like the previous one, actually), which offers PHP4, MySQL and Apache, plus phpMyAdmin to administer the MySQL databases. However, it doesn't offer PHP5 support yet (so it's not my favourite) and thus there's no sqlite support either.<br /><br />Apart from that, it works exactly like WAMP: you download it, you install it, and it's done. Services are installed and you have - again - your little icon on the system tray to access all its functions and tools. It works well, but it doesn't seem to have any add-ons available like WAMP does.<br /><br /><strong>XAMPP</strong><br />This is by far the most complete distribution of the three I am focusing on. This project is developed by <a href="http://www.apachefriends.org">Apache Friends</a> and has a lot of features and flavours. XAMPP currently includes:<br /><br />- Apache HTTPD 2.0.54<br />- MySQL 4.1.12<br />- PHP 5.0.4 + 4.3.11 + PEAR + Switch<br />- MiniPerl 5.8.6<br />- Openssl 0.9.7g<br />- PHPMyAdmin 2.6.2-pl1<br />- XAMPP Control Panel 1.0<br />- eAccelerator 0.9.3<br />- Webalizer 2.01-10<br />- Mercury Mail Transport System for Win32 and NetWare Systems v4.01a<br />- FileZilla FTP Server 0.9.8a<br />- SQLite 2.8.15<br />- ADODB 4.63<br />- Zend Optimizer 2.5.7<br />- XAMPP Security for Windows 98, 2000, XP<br /><br />Honestly, you can't ask for more! If by chance you want to run this suite on other platforms, there's a version for Mac OS X, Solaris, and even Linux.<br /><br />The installation method for XAMPP is slightly more difficult than the other suites - you actually have to download and unzip it in a folder of your choice. Then you're off and running.<br /><br />Unfortunately (or fortunately), there's no icon on the system tray, so you need to actually access <a href="http://localhost">http://localhost</a> to get a list of services and tools. It also doesn't come with sqlitemanager, but you can download it and install it in the documents folder (like I did).<br /><br />I actually use XAMPP - the "lite" edition, which is smaller and has less features - for my USB drive. Since it doesn't require any services to be installed in order to run, you can simply copy it onto a USB stick and run it from there!<br /><br /><strong>Conclusion</strong><br />I'm quite impressed by all of the server packages I reviewed; WAMP and XAMPP in particular. I can now carry around my websites and applications and instantly run them or show them to anyone who has a computer with a USB port.<br /><br />As I said in the beginning, these programs are NOT meant to be used in a production environment or to be accessed publicly, therefore, security is not a consideration here. In my opinion, they are simply excellent for testing purposes, and for now, that's what I need them for.<br />
M contents/articles/simply-on-rails-1-concepts-map.htmlcontents/articles/simply-on-rails-1-concepts-map.html

@@ -1,8 +1,8 @@

----- -title: Simply on Rails - Part 1: Concepts and Bubbles +title: "Simply on Rails - Part 1: Concepts and Bubbles" content-type: article timestamp: 1183786980 -tags: rails|website|web20 +tags: "rails|website|web20" ----- <p>The first thing I do when I start developing a new application is write down some ideas.</p> <p>Pen and paper normally do the job, but nowadays there are some valid online and offline applications which work as good if not (probably) better.</p>
M contents/articles/simply-on-rails-2-database-design.htmlcontents/articles/simply-on-rails-2-database-design.html

@@ -1,8 +1,8 @@

----- -title: Simply on Rails - Part 2: Database Design +title: "Simply on Rails - Part 2: Database Design" content-type: article timestamp: 1184405220 -tags: rails|databases +tags: "rails|databases" ----- <p>This week I attended a course for work on how to <em>Implement Databases with Microsoft <span class="caps">SQL</span> Server 2005</em>. An interesting course indeed, which made me realize how feature-rich Bill&#8217;s product is, compared to the Open Source alternatives like MySQL. It also made me realize how nice it is to implement database-related logic (read: Models) using a <em>proper</em> programming language rather than using triggers, stored procedures, functions and other goodies offered by Transact-<span class="caps">SQL</span>.</p> <p>It&#8217;s all a matter of taste and of necessities: using MS <span class="caps">SQL</span> Server for one of my website is simply not going to happen anytime soon, and I&#8217;m more than happy to have a database which can be used <em>just</em> as a database and a programming language (Ruby, in this case) which can do wonders, rather than a procedural-only surrogate.</p>
M contents/articles/simply-on-rails-3-shared-controller.htmlcontents/articles/simply-on-rails-3-shared-controller.html

@@ -1,8 +1,8 @@

----- -title: Simply on Rails - Part 3: LiteController +title: "Simply on Rails - Part 3: LiteController" content-type: article timestamp: 1185076980 -tags: rails +tags: "rails" ----- <p>Enough with concepts, ideas and diagrams: it&#8217;s time to start coding something. Everyone knows what&#8217;s the first step when creating a Rails applications, but anyhow, here it is:</p> <div class='ruby'><pre><code>rails italysimply</code></pre></div><p>Then I create a new development database, load it up with the schema I <a href="/blog/simply-on-rails-2-database-design">previously</a> prepared and modify the <code>config/database.yml</code> to be able to connect to it. Nothing new here.<br />
M contents/articles/simply-on-rails-4-default-data-migrations.htmlcontents/articles/simply-on-rails-4-default-data-migrations.html

@@ -1,8 +1,8 @@

----- -title: Simply On Rails - Part 4: Quick and Easy Default Data Migrations +title: "Simply On Rails - Part 4: Quick and Easy Default Data Migrations" content-type: article timestamp: 1189854600 -tags: rails|ruby|databases +tags: "rails|ruby|databases" ----- <p>In the <a href="http://www.h3rald.com/blog/simply-on-rails-3-shared-controller">last post</a> of this series I tried to find a <acronym title="Don&#39;t Repeat Yourself"><span class="caps">DRY</span></acronym> solution to deal with tables storing &#8220;ancillary&#8221; data, i.e. names of user roles, predefined categories, page state names and other similar things.<br /> I personally chose to put this kind of data to make my application more dynamic, although I could have decided to use ENUMs or simply ordinary varchar fields &#8212; that would have been easier, but less flexible. For now, I&#8217;m sticking with my original choice.</p>
M contents/articles/simply-on-rails-intro.htmlcontents/articles/simply-on-rails-intro.html

@@ -1,8 +1,8 @@

----- -title: Simply on Rails? +title: "Simply on Rails?" content-type: article timestamp: 1183176000 -tags: rails|web20 +tags: "rails|web20" ----- <p>So finally my site is back up, I don&#8217;t have to worry about coding anymore: just writing about whatever I like, no more Cake, no more <span class="caps">MVC</span>, no more frameworks&#8230;</p> <p><em>What do you mean no coding anymore? You&#8217;ve been bragging about how this Rails thing is fast, how you can develop things easily, and this, and that&#8230; You <strong>know</strong> what you have to do now</em></p>
M contents/articles/slax.htmlcontents/articles/slax.html

@@ -1,7 +1,7 @@

----- -title: Slax - A small, complete and 'nice-looking' Linux live distribution +title: "Slax - A small, complete and 'nice-looking' Linux live distribution" content-type: article timestamp: 1139156266 -tags: review +tags: "review" ----- How can I learn how to use Linux? Simple, you grab a copy of any of the twelve thousands different 'distros' available out there, and you install it on your PC, hoping not to damage your existing Windows installation (if any). Or there's a more lazy and safe way, get one of the few dozens of 'Linux live CDs', burn the cd, boot from it, and you're all set...It's true, nowadays the best solutions for Linux newbies is trying out a few <em>live CDs</em> before installing <em>the real deal</em> on their machines: it's safe(r), takes less time and it's much more fun. Yes, some people may object saying that the fun in learning Linux is installing it on your hard drive first, but a few people I know who 'accidentally' overwrote their Master Boot Record or 'accidentally' damaged their Windows installation might disagree there...<br /><br />A live distribution[1] basically is a CD (or DVD or USB drive) containing a fully working operating system - Linux in the specific - which can be run directly from the CD itself and does not require an hard disk installation. The drawback is that normally some part of the operating system are loaded and run from a <em>ram disk </em> and therefore the data written there will be erased once the system reboots. Due to the nature of CDs, saving data on the CD itself is obviously not possible, and this limitation can normally be bypassed by saving changes within a file to store either on your hard drive, remotely, or on some other media which allows read/writing like a floppy disk or USB stick.<br /><br />Linux is well known for the many different distributions available, each with its own features, pros and cons. The same happens for live distros: in the last few years the number grew a lot[2] and nearly all major distributions now have a <em>live</em> counterpart, mostly to allow new users to preview their product.<br /><br />The most famous, and possibly one of the first LiveCD ever made was Knoppix[3], a Debian[4]-based CD featuring a KDE[5] desktop environment and many useful applications <em>squeezed</em> into 700MB of space which can be used as a fully functional operating system. Add to this a truly impressive on-the-fly hardware detection ability, and there's the <em>best</em> (arguably) multi-purpose linux Live distribution ever made.<br />If Knoppix is "so perfect", why do other distributions exist at all? Well, some people noticed that they wanted to remove something from the collection of applications Knoppix included in the default CD, others wanted to add other bits, so soon a long list of Knoppix-based <em>customized</em> distros followed[6]...<br /><br />This is another story, I'd like focus my attention on perhaps the most valid Knoppix-alternative out there: Slax[7].<br /><br /><strong>Size vs. Features</strong><br />Knoppix was the first Live CD I tried, but I didn't like one thing about it: its size. 700MB means one CD, and one CD means that I can't carry it in my pocket now can I? Not literally, anyway, at least not comfortably. So I started looking for a smaller alternative, and I found various possible candidates. Damn Small Linux[8] was one of the most extreme: 50MB in total, nothing more, nothing less, and it worked! Alright, I must say that now it's much better than it was when I first tried it but, it was more or less functional at the time (2003), although relatively new on the scene. <br />I liked it, really but, due to its size self-limitations the user interface wasn't too pretty, and the applications included weren't exactly what I was looking for: when you're used to Firefox (or better, Firebird, at the time) to browse the Net, Dillo[9] doesn't really look exactly appealing and feature-rich - although remarkable for its size. <br /><br />I decided that I wanted something more than that, also because I was planning to burn the live-linux distro on a <em>brand new</em> (at the time) 8cm CD-RW with 180MB of space available. The best solution I could find, at the time and still now, perhaps, was Slackware Live CD, a very promising live distribution based on Slackware Linux[10].<br />I was very impressed at the time, especially for the effort the developer put to create a mini-distribution which is also user-friendly and nice-looking as well, incorporating the KDE Desktop. These are not the only strengths of the project, as we'll see in the next sections but, certainly the first thing everyone can notice. <br /><br />After a while the project changed names and became "Slax", perhaps to create its own identity and expand itself following a different direction than its non-live predecessor: while the 'real' Slackware is often quite cautious on using latest technologies and normally includes <em>stable</em> packages, Slax does quite the opposite, including more recent applications and solutions. <br /> <br /><br /><strong>Overview</strong><br />Slax website[7] evolved quite a bit through the years, and now it's a true example of clarity and exhaustiveness. An essential clean design, access to a lot of information on how to use the live CD, solutions to common problems and also something for developers interested in creating their own live distro: the truly remarkable thing is that the biggest part of the work is done - apparently - by one single person, Tomas Matejicek[11], the founder of the project. <br /><br />The strength of Slax - as I anticipated before - is perhaps its ability to compress a few carefully selected, commonly used applications which allow the user to fully enjoy his live experience in 177MB of space. Certainly the choice of using the K Desktop Environment instead of a more lightweight one like Fluxbox or Xfce may seem illogical, but for sure new Linux users would feel more "at home" with KDE, especially if coming from Windows XP. KDE is by far the most user friendly desktop environment available for Linux, and Slax made it even more user friendly by carefully organizing menus in an optimal way without cluttering the desktop with a myriad of icons and overly-crowded navigation bars.<br />When it comes to the applications included, Slax offers nearly everything the average desktop user needs: word processor (KWord), spreadsheet (KSpread), browser (Konqueror), multimedia player (Kplayer), editors, games and much more[26]! In its simplicity and especially for its size, Slax is a well-rounded, multi-purpose distribution. There's an interesting article available on tuxs.org[12] which documents the author's <em>personal challenge</em> of using <em>only</em> Slax (version 4.1.4 at the time) for a whole week. Surprisingly, the writer was really impressed of the features offered by this little distro: he was able to connect to the Net, browse the web, check his mail, write and do various other "everyday task", with no difficulty or extra hassle.<br /><br />Slax is also <em>very</em> fast: normally some other live CDs compress <em>the whole</em> operating system on a single file, or a few, while Slax developed an optimized modular architecture: groups of programs or even single applications are compressed <em>separately</em> into .mo files: this technique sensibly increases the performance and speed of the operating system: whenever I open KWord, for example, to write an article, the OS will access <em>just</em> the KWord module on the disk, without touching other modules. <br /><em>Surely there's a way to add/remove modules...</em> - Yes, there is, and this will be discussed later on.<br /><br />Finally, like various other live distros, Slax supports some handy "cheatcodes" which can be used to boot customize some options when booting the operating system.<br /><br />Some of the most interesting codes include:<br /><br /><code><br />boot: slax webconfig=passphrase<br />boot: slax webconfig=ask<br /></code><br />This is a recent feature: Slax allows users to save their settings remotely, directly on Slax server. Every user has to choose a 10+ characters password in order to use this feature[27].<br /><br /><code><br />boot: slax toram (just alias for copy2ram)<br />boot: slax copy2ram<br /></code><br />This code can be used to copy the entire operating system to your computer's RAM: this may make the booting process slower, but Slax will run faster than light afterwards (256MB+ ram required)<br /><br /><code><br />boot: slax changes=/dev/device<br /></code><br />Saves changes to a specified device using any linux filesystem, like a hard drive or a usb stick.<br /><br /><code><br />boot: slax load=module<br /></code><br />Load optional modules stored in the /optional/ directory. For further information about modules, see the "Make your own!" section below.<br /><br />For a full list of all Slax cheat codes, see the cheatcodes page[13] on Slax website. <br /><br /><strong>Different flavors</strong><br />I defined Slax a multi-purpose mini distribution, but as always different people have different needs: some users may want to be able to run some windows applications through Wine[14], for example, or may prefer a more lightweight Desktop Environment. The huge - and logical - limitation of all live CDs is that they normally don't offer the possibility of adding applications and packages: when the operating system starts the "root" partition is transferred onto a ramdrive which allows - even if until reboot - read/write access. Although this limitation can be overcome at least through using some of the cheatcodes described before, having the application already installed could be much easier.<br /><br />That's why Slax developers decided to start creating different <em>flavors</em> of Slax. Some of them are not available at the moment (the current slax version at the time of writing is 5.0.6), and others can be already downloaded from the official site[15].<br /><br /><span style="text-decoration:underline;">Slax "Kill Bill"</span> - This is the first Slax customization which became available, and came out more or less at the same time as Tarantino's movie. <em>Bill</em> Gates didn't seem to mind at all, even if this version actually allows users to run <em>some</em> Windows applications like notepad on linux. Basically Wine[15] dosbox[16] and qemu[17] can make this possible, with limitations... nothing too exciting but, definitely fun to try out.<br /><br /><br /><span style="text-decoration:underline;">Slax "Server"</span><br /><fieldset><blockquote>SLAX SRV is a pocket operating system with many internet services ready to use. Includes DNS, DHCP, SMB, HTTP, FTP, MySQL, SMTP, POP3, IMAP, SSH.</blockquote></fieldset><br />Unfortunately, this flavor of Slax is not yet available for download, but some updates concerning its status are available on the developer's TODO list[18]:<br /><br /><em>SE: mysql up and running <br />SE: httpd up and running, with PHP with MySQL <br />SE: DNS server up and running as a cache server <br />SE: DHCP server included but not started automatically, could confuse local network <br />SE: SSH server up and running <br />SE: MAIL server up and running, needs testing <br />SE: FTP server up and running</em><br /><br />This is definitely going to be an interesting project, and I'm really looking forward to it. In the meantime, there are two server-oriented live distribution available, which is also based on Slax: Slampp[19] and in particular Slampp Lite[20]. I tried Slampp Lite and I was really satisfied with its features: support for PHP, Perl, Python on Apache (basically includes XAMPP for Linux[21]), xfce desktop environment, the latest Firefox browser, antivirus, firewall, and more.<br /><br /><span style="text-decoration:underline;">Slax "Popcorn"</span><br />This Slax flavor is more minimalist, and substantially different from the Standard Edition. For a start it features the more lightweight xfce Desktop Environment[22], and thus removes all KDE-based applications making more room for Firefox browser and Abiword, which are not included in the Standard version due to the presence of their <em>KDE counterparts</em> (Konqueror and Kword). <br />Very fast, simple, and fits 128MB: suitable for small USB keys more than anything. <br /><br /><span style="text-decoration:underline;">Slax "Frodo"</span><br />As the name implies, this version is smaller again (47MB), and it's basically the base for all other flavors as it includes just a Linux console and some scripts for hardware detection and setting up the live environment.<br /><br /><strong>Make your own!</strong><br /><em>Nice! But I'd have included X instead of Y, then added Z as well, perhaps...</em><br />That's a common feeling: the truth is that people are never happy with what they get! If you're still not happy with what Slax in all its different flavors can offer you, well, you can make your own. Although some might want to start more or less from scratch, creating <em>Slax-based</em> customizations (this was the only option until the more recent versions), now there's an easier way: modules and the documentation present on the official site is complete enough and describes the necessary steps to take to create, modify and use them[23]. Modules are basically files with .mo extension containing an application which will be loaded by Slax at startup, if placed in the /modules/ directory, or only if required by the user (see the corresponding cheatcode) if placed in the /optional/ directory. The easiest way to create a module which requires no particular skill is converting a Slackware package, by issuing this command:<br /><br /><code>tgz2mo application.tgz application.mo</code> <br /><br />Of course there are other ways to create modules without converting Slackware packages, further details in the documentation[23]. There are also a lot (currently 576!) of user-contributed modules ready for use available for download and hosted on the Slax site[24], the only problem is that inevitably some of them seem to be out-of-date, and not constantly updated by their maintainers.<br /><br />Last but not least, the dream of all Windows users: MySlax Creator and MySlax Modulator[25], which allow Windows users to create their own Slax distribution with custom modules both for CD and USB drive and create Slax modules on windows respectively. Two really nice additions which make this project even more (Windows-)user-friendly!<br /><br /><strong>Conclusions</strong><br />Slax is exactly how advertised on its website: <em>"[a] fast and beautiful Linux operating system which fits on small (3.14") CD-ROM disc"</em>, nothing more, nothing less. Personally, I'd like to emphasize its user-friendliness, as it seems the most valid alternative to Knoppix, and perhaps even better: it does not include <em>as many applications as possible</em> which could confuse Linux neophytes but, just a bunch of useful programs for everyday use to give users a <em>taste</em> of what Linux is capable to do.<br />Normally, as Slax is mostly maintained by one person, Slax releases are not too frequent: normally 2-3 per year maximum. The version which was tested for this article was the 5.0.6 and (un)luckily a new one <em>just came out</em> while I was writing the article: version 5.0.7b is now available for download[15] and features KDE 3.5. A few bugs were discovered immediately after its released and quickly fixed with a patch-module (hence the "b"): This YOUR chance to try it out before I do...<br /><br />Happy Sla<em>x</em>ing! <br /><br /><br />[1]Linux Live CD - Wikipedia: <a href="http://en.wikipedia.org/wiki/Linux_live_cd">http://en.wikipedia.org/wiki/Linux_live_cd</a><br />[2]DrozenTech's LiveCD List: <a href="http://www.frozentech.com/content/livecd.php">http://www.frozentech.com/content/livecd.php</a><br />[3]Knoppix Official Site: <a href="http://www.knoppix.org/">http://www.knoppix.org/</a><br />[4]Debian Official Site: <a href="http://www.debian.org/">http://www.debian.org/</a><br />[5]K Desktop Environment: <a href="http://www.kde.org/">http://www.kde.org/</a><br />[6]Knoppix Customizations: <a href="http://www.knoppix.net/wiki/Knoppix_Customisations">http://www.knoppix.net/wiki/Knoppix_Customisations</a><br />[7]Slax Live CD: <a href="http://slax.linux-live.org">http://slax.linux-live.org</a><br />[8]Damn Small Linux - Official Page: <a href="http://www.damnsmalllinux.org/">http://www.damnsmalllinux.org/</a><br />[9]Dillo Browser, Official Page: <a href="http://www.dillo.org/">http://www.dillo.org/</a><br />[10]Slackware Linux, Official Page: <a href="http://www.slackware.com/">http://www.slackware.com/</a><br />[11]Slax - Developer's page: <a href="http://slax.linux-live.org/credits.php">http://slax.linux-live.org/credits.php</a><br />[12]Barney Matthews, "A week with Slax 4.1.4" - Tuxs.org: <a href="http://www.tuxs.org/slax.htm">http://www.tuxs.org/slax.htm</a><br />[13]Slax cheatcodes: <a href="http://slax.linux-live.org/cheatcodes.php">http://slax.linux-live.org/cheatcodes.php</a><br />[14]Wine HQ: <a href="http://www.winehq.com/">http://www.winehq.com/</a> <br />[15]Slax download page: <a href="http://slax.linux-live.org/download.php">http://slax.linux-live.org/download.php</a><br />[16]Dosbox Project: <a href="http://dosbox.sourceforge.net/news.php?show_news=1">http://dosbox.sourceforge.net/news.php?show_news=1</a><br />[17]Qemu Project: <a href="http://fabrice.bellard.free.fr/qemu/">http://fabrice.bellard.free.fr/qemu/</a><br />[18]Slax TODO list: <a href="http://slax.linux-live.org/todo.php">http://slax.linux-live.org/todo.php</a><br />[19]Slampp Official Page: <a href="http://slampp.abangadek.com/wiki/wikka.php?wakka=HomePage">http://slampp.abangadek.com/wiki/wikka.php?wakka=HomePage</a><br />[20]Slampp Lite page: <a href="http://slampp.abangadek.com/wiki/wikka.php?wakka=SlamppLite">http://slampp.abangadek.com/wiki/wikka.php?wakka=SlamppLite</a><br />[21]XAMPP for Linux: <a href="http://www.apachefriends.org/en/xampp-linux.html">http://www.apachefriends.org/en/xampp-linux.html</a><br />[22]Xfce desktop environment, official page: <a href="http://www.xfce.org">http://www.xfce.org</a><br />[23]Slax Documentation - Modules: <a href="http://slax.linux-live.org/doc_modules.php">http://slax.linux-live.org/doc_modules.php</a><br />[24]Slax modules page: <a href="http://slax.linux-live.org/modules.php">http://slax.linux-live.org/modules.php</a><br />[25]MySlax Projects: <a href="http://myslax.bonsonno.org/">http://myslax.bonsonno.org/</a><br />[26]Slax - installed packages: <a href="http://slax.linux-live.org/installed_packages.txt">http://slax.linux-live.org/installed_packages.txt</a><br />[27]Slax - Webconfig: <a href="http://slax.linux-live.org/webconfig.php">http://slax.linux-live.org/webconfig.php</a><br />
M contents/articles/social-bookmarking-services.htmlcontents/articles/social-bookmarking-services.html

@@ -1,8 +1,8 @@

----- -title: Review of ten popular social bookmarking services +title: "Review of ten popular social bookmarking services" content-type: article timestamp: 1147525587 -tags: web20|review|internet +tags: "web20|review|internet" ----- <p>Social bookmarking<sup class="footnote" id="fnr1"><a href="#fn1">1</a></sup> is perhaps one of the pillars of Web 2.0, allowing people to save, tag and share their Internet bookmarks online anytime, anywhere. Since <em>del.icio.us</em><sup class="footnote" id="fnr2"><a href="#fn2">2</a></sup> came out, the Web is not the same anymore: no more IE favourites or Firefox bookmarks, no more &#8220;Save page as&#8230;&#8221; etc., people nowadays want to do <em>everything</em> online without being bond to a single computer, and also make everything they do or read public &#8211; apparently. This is one of the key concepts of Web 2.0<sup class="footnote" id="fnr3"><a href="#fn3">3</a></sup>: sharing information in a quick and easy way, without any restrictions.Del.icio.us was the first, but of course not the only one social bookmarking system which became popular in a few months: many other followed its example, many companies developed their own alternative to del.icio.us, adding and removing features, changing bits etc. etc. Result: someone said that <em>&#8220;[&#8230;] There is almost 1 new social bookmark/digg like service appears one daily basis [&#8230;]&#8221;</em><sup class="footnote" id="fnr4"><a href="#fn4">4</a></sup>.</p> <p>Nice, and there are also many reviews of each one as well<sup class="footnote" id="fnr5"><a href="#fn5">5</a></sup>! Here&#8217;s another one&#8230;</p>
M contents/articles/sqlyog5-review.htmlcontents/articles/sqlyog5-review.html

@@ -1,7 +1,7 @@

----- -title: SQLyog 5 - a fast and reliable MySQL front-end +title: "SQLyog 5 - a fast and reliable MySQL front-end" content-type: article timestamp: 1141131000 -tags: databases|review +tags: "databases|review" ----- MySQL[1] is a great database solution. Literally millions of people who use it can tell you that it is a well-performing, feature-rich database solution for almost any size project: it is low-cost (often free), and available on the majority of webservers all over the world. When I first discovered MySQL while learning some basic PHP programming, I almost immediately wondered how I'd effectively access MySQL and manage my databases other than through PHP code or command line. I was pointed to PHPMyAdmin[2], which I still use as a quick, general-purpose MySQL front-end. However, I wondered if there was anything better than that, and maybe not confined within a browser window...<br /><br />There are a few desktop "cousins" of PHPMyAdmin out there, especially for Windows, which is not surprising. After a quick search, three products come up immediately: MySQL-Front[3], Navicat MySQL[4] and SQLyog[5], all of them are proprietary solutions and seem to be the most popular ones around. <br /><br /><em>Alright, which one is the best?</em><br /><br />There are many different criteria available to choose a winner among these three products. The easiest for me was simply: "which one is free?"<br /><br />- SQLyog, with some restrictions, is our instant winner. Both MySQL-Front and Navicat MySQL offer a 30-day trial, while SQLyog can be free for life but only with basic features. However, the number of basic features is considerable.<br /><br /><strong>First impressions</strong><br />After launching SQLyog (free edition), a small and not-too-annoying nag screen appears: you click on it and it goes away, it doesn't last for 10 seconds like some others. The same screen appears when you try to access the power tools and advanced features which are not included in the free edition. I got used to it after a short while, and that's the only annoyance of the free version of the product. <br /><br />The program's interface seems a bit unconventional for the traditional Windows user, especially if compared to the other two products. The main window is divided into four parts: the main menu and a navigation bar underneath it, a left column listing all the databases and tables in an expandable tree, the top half of the main window which hosts a SQL editor, and the lower half with everything else, including a tabbed area for displaying query results, messages, table data, table structure and history.<br /><br />It seems as if the SQL editor should be in a tab as well, but after using SQLYog for a while, you understand why is not: the editor has been positioned such that it can be used often, easily, and immediately. It took me a while to figure this out, but once you embrace this philosophy, you'll never stop using this program; all front-ends include a query editor, but it's often relatively hidden, meaning that it is at least one or two clicks away from the rest of the interface.<br /><br /><br /><strong>Main Features</strong><br />After specifying your credentials, the program will connect to the MySQL server and list all of the available databases in an Explorer-like left side panel. All tables can be accessed by clicking once on the corresponding database. All column fields, indexes and triggers (if any) are displayed by clicking on each table name.<br /><br /><em>So when I click on a database or a table the corresponding structure is displayed, right?</em><br /><br />Wrong. When you do that, nothing happens. Remember the multi-tabbed lower panel, which is supposed to display results, table data, objects, etc.? Well, the focus is set to the <em>Result</em> column by default, so if you want to display the database or table structure you need to click on the <em>Objects</em> table, and voil� , the structure appears. Fortunately this behaviour can be changed by modifying the program's options, through the Tools menu.<br /> <br />Clicking on <em>Table data</em> will display the first 50 records of the selected table, while the <em>Result</em> and <em>Messages</em> tabs will still be empty; the editor wasn't used, so there's no result to show, and we didn't get any errors or other messages from MySQL yet, so everything is as it should be.<br /><br />The most interesting feature from an educational point of view, so far, is actually the <em>History</em> tab, which is just one click away and shows the following:<br /><br /><code><br />/*[11:11:11 AM][ 0 ms]*/ show variables like '%character%'<br />/*[11:11:11 AM][ 0 ms]*/ Set character_set_connection=latin1<br />/*[11:11:11 AM][ 0 ms]*/ Set character_set_results=latin1<br />/*[11:11:11 AM][ 0 ms]*/ Set character_set_client=latin1<br />/*[11:11:11 AM][ 0 ms]*/ set sql_mode=''<br />/*[11:11:11 AM][ 15 ms]*/ show databases<br />/*[11:11:22 AM][ 0 ms]*/ use `zzine_drupal`<br />/*[11:11:23 AM][ 203 ms]*/ select `TABLE_NAME` from `INFORMATION_SCHEMA`.`TABLES` <br /> where `TABLE_SCHEMA` = 'zzine_drupal' and `TABLE_TYPE` = 'BASE TABLE'<br />/*[11:11:32 AM][ 47 ms]*/ show full fields from `zzine_drupal`.`node`<br />/*[11:11:32 AM][ 140 ms]*/ show keys from `zzine_drupal`.`node`<br />/*[11:11:32 AM][ 0 ms]*/ select * from `zzine_drupal`.`node` limit 0, 50<br /></code><br /><br />The above is a log of all the SQL commands which were sent to the server so far: the program connected and showed all the databases, I clicked on the "zzine_drupal" database, got some info about it, and then clicked on the <em>node</em> table and displayed the first 50 records. So, if you are new to SQL and want to learn the syntax to query the database you can just have a glance at this tab every so often.<br /><br />Note that the time to execute a query is displayed in ms, and it's not wrong! SQLyog actually performs quite well, as boasted on the official site's features page[6]: <em>"[it] uses native MySQL C API - the fastest way to communicate with MySQL server"</em> - and they do mean it.<br /><br /><em>What else does SQLYog offer?</em><br /><br /> The free version includes the most used features, like the very two most basic operations: you can query the database by typing an SQL query into the editor and executing it (F5 or F8 if you want to edit the results) and change the value of each field through a convenient blob editor, which can display text or images, import content from a file or save it locally.<br />Then the program groups all functionalities in standard dropdown menus on the top bar, and also presents the most used operations as clickable icons as well. Now, this can be handy, but the program displays 25+ icons without any text underneath, so either you keep hovering your mouse on each one waiting for an explanation message to appear, or you just use the standard dropdown menus anyway. The authors did an outstanding job creating an icon for (literally) every action: they are quite well made and explanatory enough if you look at them carefully, but they are still very similar, and too numerous to memorize.<br /><br />However, SQLyog is also 100% keyboard friendly, as almost every function has a shortcut. Memorizing just a few of them, and it's worthwhile, as it makes everything much faster. At any rate it's better than memorizing all the icons instead!<br /><br />Let's examine each dropdown menu and the functions listed in them.<br /><br /><span style="text-decoration:underline;">File</span><br />This menu lists all the functions concerning database connection and disconnection, opening and saving SQL files, and opening new query tabs - the SQL editor panel can have multiple tabs.<br /><br /><span style="text-decoration:underline;">Edit</span><br />This menu refers to the SQL editor, not to the query results! It includes functions like execute queries, copy, paste, cut, undo, redo and find/replace, which does not find strings in a record/table/database, but only in the SQL editor. I do believe the "Find in Database" function is missing in SQLyog, and is present in some of the competitors, but you can search your database using the appropriate SQL queries, right? Maybe - in my opinion - an advanced <em>Find <something> in <somewhere></em> wizard or dialogue should be implemented - as the developers seem to be very good at creating those types of things, we'll soon find out.<br /><br /><span style="text-decoration:underline;">DB</span><br />Maybe I'd have called this "database" for the sake of newbies, but this menu indeed groups all database-related functionalities together. Create/truncate/drop databases, create table and create view (maybe they could have been placed under the <em>table</em> menu), and other interesting features like creating an HTML schema on the database and even copying a whole database (or just a few tables) to a different host (even remote, if accessible) with a single click! It works, just don't try to copy a database onto another remote server on a 56K dialup connection, like I did...<br /><br /><br /><span style="text-decoration:underline;">Tables</span><br />Another self-explanatory menu, listing all table-related operations like create, alter, rename, empty, drop, import, export tables, manage indexes, rearrange columns, etc. All these functions can be performed through wizards, dialogues or other equally simple methods that any average Windows user should be familiar with. There are only a few exception here and in other menus: when wizards would be inappropriate or inadequate for certain actions, SQLyog prepares a "template query" and lets the user fill it in, typically for more advanced needs, such as if you want to create a new (MySQL 5.0+ only) <em>trigger</em> named <em>test</em> on the <em>node</em> table of the aforementioned zzine_drupal database. For this, SQLyog prepares the following query template: <br /><br /><code><br />DELIMITER $$;<br /><br />DROP TRIGGER `zzine_drupal`.`test`$$<br /><br />CREATE TRIGGER `zzine_drupal`.`test` BEFORE/AFTER INSERT/UPDATE/DELETE on `zzine_drupal`.`node`<br />FOR EACH ROW BEGIN<br /><br />END$$<br /><br />DELIMITER ;$$<br /></code> <br /><br />...just remember to modify it according to your needs!<br />Do you like SQLyog's query templates? Check out Edit->Insert Templates and there's almost everything for every taste.<br /><br /><br /><span style="text-decoration:underline;">Objects</span><br />Presumably the authors created this menu to group some advanced or new functionalities together, but everything listed here is already present in one of the other menus: management of functions and triggers, view-related actions, and stored procedures... except for the <em>Drop Column</em> action, which is only available under this menu.<br /><br /><span style="text-decoration:underline;">Tools</span><br />This menu also lists two actions which we already saw under the <em>DB</em> menu, which is exporting or importing a database. however, there is also an <em>Export resultset</em> wizard, as well as a very handy user management tool, information about the current database, and the program preferences.<br /><br />The program preferences apparently have two settings which perhaps should be changed by default, which concern the previously mentioned weird tab focus: if you'd like something more intuitive and you don't need (or want) to use the SQL editor a lot, you can safely unclick the "Keep focus on SQL Editor after query execution" and click the "Always select Objects tab when a new item is selected".<br /><br />Believe it or not, you get all this for free. No charge, no trial periods: these are the actual features offered by the free edition of SQLyog! No surprise that over 500,000 people already downloaded it!<br /><br />What's in the <em>Professional</em> and in the <em>Enterprise</em> edition then? Nothing much, and <em>Power tools</em>.<br /><br /><br /><strong>"Power Tools"</strong><br />When I wrote <em>nothing much</em> earlier I actually referred to the Professional Edition, which - as the feature matrix shows[8]- doesn't offer anything more than the free edition: basically you pay $9 to get rid of the nag screens, which are normally not very intrusive...<br /><br /><span style="text-decoration:underline;">Tunneling</span><br />On the contrary, the Enterprise Edition ($49) has a lot of very interesting advanced tools which are actually worthwhile to have. Perhaps the most essential feature missing in the free version, especially for people using a remote hosting solution, is <em>tunnelling</em>. You can use SQLyog to connect to a remote server, theoretically; in reality though, in order to do so your hosting provider must allow privileged remote connections to the database (i.e. <user>@% instead of <user>@localhost), which is not permitted 98% of the time for security reasons. So how can you use SQLyog to access your remote database(s)? With tunneling.<br />The concept is simple: even if privileged remote connections are normally not permitted, privileged local connections are. So all you need to do is place a PHP script on your server, somewhere accessible, and specify it as a parameter for HTTP tunneling before establishing the connection; SQLyog will then access the script and the script will basically forward SQLyog's instruction to the database server, just as if the commands were issued locally. <br /><br /><em>I will never allow commands to be sent to my server unencrypted and through a PHP script, which can be exploited by the first script-kiddie passing by!</em><br /><br />This is a common, slightly biased, but ultimately reasonable concern, and for $49 you can also get SSH tunneling, provided that your host allows you to connect to the server through a SSH shell. I tried this option and it worked perfectly: with a 2MB/s ADSL connection all went smoothly and fast: the program proved to be a valid alternative to PHPMyAdmin in terms of speed and responsiveness. <br />Do not try this on a 56K connection! It's not worthwhile, and probably not even conceived of by the developers. As I always want to try extreme solutions, I also tried SSH tunneling on dialup and my final conclusion was: <em>stick with PHPMyAdmin</em>. SQLyog seems to have been developed in order to achieve relatively immediate responses, as a result, when a low speed connection is used to connect to a remote database, the program may hang for a little while before delivering results and executing queries as normal. Perhaps there's room for improvement here: it would be great to have progress bars display when an operation takes more time than normal.<br /><br /><span style="text-decoration:underline;">Database Synchronization and Migration</span><br />A common and useful feature you should expect from a MySQL front-end is a synchronization utility, and SQLyog has one: by clicking on <em>Database Synchronization</em> under the Powertools menu you can start a quick and easy synchronization wizard, to automatically update two databases. Simply provide the connection details (even if they are on different hosts or require tunneling), and select the databases you want to synchronize, also specifying if you want a two-way synchronization or only one way. A similar function is <em>structure synchronization</em>, which can be used to keep only the structure (not the data) up-to-date between two databases. You won't be asked to create two new connections, but the operation can only be performed on databases that are already accessed by SQLyog.<br /><br />For more information on how to take advantage of SQLyog's advanced synchronization features, I recommend reading a very informative article specifically devoted to this subject, available online[8].<br /><br />Another VERY interesting features SQLyog offers (which has been the subject of a whole article on DatabaseJournal.com[9]) is the possibility to easily migrate to MySQL from other ODBC sources. Through a relatively painless wizard it is possible to migrate from another database type to MySQL, while making sure that any errors are handled as expected.<br /><br /><span style="text-decoration:underline;">Periodic Tasks and Management</span> <br />MySQL is a wonderful relational database, but it fundamentally lacks the ability to execute scheduled queries and operations, which are normally accomplished by server-side scripts. SQLyog offers you the opportunity to easily create and administer periodic tasks, notifications and backups via a few wizards: the <em>Notification Services</em> wizard, which can be used to send the result of a particular user-defined periodic query to an email address or execute maintenance queries, and the <em>Scheduled Backups</em> wizard to automate full or partial database backups and exports. Webyog[10] itself offers an informative how-to[10] on these tasks, step-by-step with screenshots. Last but not least, you can manage all these scheduled jobs through a very handy <em>job manager</em> located in the <em>Powertools</em> menu.<br /><br /><br /><strong>Final Judgement</strong><br />SQLyog is a well-rounded, multi-functional front-end for MySQL which can be used by both newbies and more experienced users to manage their databases. I'd clean up and reorganize the interface a little bit and remove a lot of the icons as well as list all the functions under the top menus, possibly <em>without</em> the icons and without repeating the same function anywhere.<br /><br />Apart from those small items, SQLyog is definitely worth a shot, and the Webyog team definitely did a good job in this fifth version by incorporating all the latest MySQL 5 functionalities in an already excellent program. The free version in particular offers quite a wide range of functionalities with no trial period, and this certainly helped the program to grow in popularity. I would never buy the Professional edition, simply because it only gets rid of nag screens without offering nothing new over and above the Free Edition. On the other hand, the Enterprise Edition is an excellent and inexpensive solution if you need the power tools.<br /><br />SQLyog is just a few clicks away[11], only 7 Megabytes, and ready to install! <br /><br /><br /><strong>Notes</strong><br /><small>[1]MySQL - Official Site: <a href="http://www.mysql.com/">http://www.mysql.com/</a> <br />[2]PHPMyAdmin - Official Site: <a href="http://www.phpmyadmin.net/home_page/index.php">http://www.phpmyadmin.net/home_page/index.php</a><br />[3]MySQL-Front: <a href="http://www.mysqlfront.de/">http://www.mysqlfront.de/</a><br />[4]Navicat MySQL: <a href="http://www.navicat.com/">http://www.navicat.com/</a><br />[5]Webyog Website: <a href="http://www.webyog.com/">http://www.webyog.com/</a><br />[6]SQLyog, feature page: <a href="http://www.webyog.com/sqlyog/index.php ">http://www.webyog.com/sqlyog/index.php </a><br />[7]SQLyog, features matrix: <a href="http://www.webyog.com/sqlyog/featurematrix.html">http://www.webyog.com/sqlyog/featurematrix.html</a><br />[8] Peter Laursen & Quy Ton, "Using SQLyog Enterprise to Effectively Synchronize MySQL Databases" (PDF):<br /><a href="http://www.webyog.com/articles/Using_SQLyog_Enterprise_to_Effectively_Synchronize_MySQL_Databases.pdf">http://www.webyog.com/articles/Using_SQLyog_Enterprise_to_Effectively_Synchronize_MySQL_Databases.pdf</a><br />[9] Peter Laursen, "Migration to MySQL with SQLyog ver 4.1" : <a href="http://www.databasejournal.com/features/mysql/article.php/10897_3550146">http://www.databasejournal.com/features/mysql/article.php/10897_3550146</a><br />[10]Webyog, "How to use Scheduled Backups with SQLyog": <a href="http://www.webyog.com/articles/how_to_use_scheduled_backup.html">http://www.webyog.com/articles/how_to_use_scheduled_backup.html</a><br /></small><br />
M contents/articles/succeeding-with-agile-review.htmlcontents/articles/succeeding-with-agile-review.html

@@ -1,8 +1,8 @@

----- -title: Book Review: Succeeding with Agile +title: "Book Review: Succeeding with Agile" content-type: article timestamp: 1272197788 -tags: review|productivity|books|software +tags: "review|productivity|books|software" pdf: true -----
M contents/articles/take-back-your-site-with-nanoc.htmlcontents/articles/take-back-your-site-with-nanoc.html

@@ -1,10 +1,10 @@

----- -title: Take back your site, with nanoc! +title: "Take back your site, with nanoc!" content-type: article -subtitle: How I turned H3RALD.com into a 100% static, hassle-free web site +subtitle: "How I turned H3RALD.com into a 100% static, hassle-free web site" popular: true timestamp: 1253014371 -tags: website|ruby|programming|writing +tags: "website|ruby|programming|writing" ----- <h3>Why I don&#8217;t need a blog platform</h3> <p>There&#8217;s nothing inherently wrong with blog platforms like Wordpress: they allow <em>anyone</em> to publish content on the web using a user-friendly administration area. They were built with one thing in mind: make publishing content on the web something as simple as possible, even for people who don&#8217;t know anything about <span class="caps">HTML</span>, let alone server-side scripting.</p>
M contents/articles/textlinkads_sidebar_v01.htmlcontents/articles/textlinkads_sidebar_v01.html

@@ -1,8 +1,8 @@

----- -title: Text Link Ads sidebar for Typo +title: "Text Link Ads sidebar for Typo" content-type: article timestamp: 1195271220 -tags: rails|opensource +tags: "rails|opensource" ----- <p>I thought it would be nice to share the code of the sidebar I created to display <a href="http://www.text-links-ads.com">Text Link Ads</a> sponsor links on my Typo powered blog.</p> <p>There&#8217;s actually another <a href="http://blog.nanorails.com/articles/2006/10/01/a-new-rails-plugin-for-textlinkads-including-support-for-feedvertising">plugin</a> which was made for Typo 2.6, but unfortunately it doesn&#8217;t work with Typo 4.1.1.</p>
M contents/articles/the-internet-philosopher.htmlcontents/articles/the-internet-philosopher.html

@@ -1,8 +1,8 @@

----- -title: The Internet Philosopher +title: "The Internet Philosopher" content-type: article timestamp: 1147345241 -tags: internet|writing|travelling +tags: "internet|writing|travelling" ----- <p>Recently I got this rather short email from a guy named Daniel Lampinen:</p> <blockquote>
M contents/articles/the-merb-way-review.htmlcontents/articles/the-merb-way-review.html

@@ -1,8 +1,8 @@

----- -title: Book Review: The Merb Way +title: "Book Review: The Merb Way" content-type: article timestamp: 1258452936 -tags: ruby|books|review +tags: "ruby|books|review" ----- <p>When I first picked up this book I was surprised by its length. Somehow, after reading <a href="/articles/the-rails-way-review">The Rails Way</a>, I got stuck in my mind that <a href="http://my.safaribooksonline.com/9780321601636">The Merb Way</a> had to be almost equally voluminous. Instead, this book is about 300 page long, roughly as long as the sum of the chapters devoted to <em>ActiveRecord</em> in Obie Fernandez&#8217;s acclaimed Rails bible.</p> <p>Apparently it only takes 300 pages to describe a web framework nowadays! I couldn&#8217;t help but feeling a bit skeptical at first. Even in the foreword, Obie Fernandez presents the book &ndash; and the whole <a href="http://www.merbivore.com">Merb</a> framework &ndash; with some initial skepticism: isn&#8217;t Ruby on Rails enough? Why do we need yet another Ruby web framework? And above all, seeing that Merb is going to eventually be <a href="http://weblog.rubyonrails.org/2008/12/23/merb-gets-merged-into-rails-3">merged into Rails 3</a>, why on Earth do we need a book about Merb, <em>now</em>?</p>
M contents/articles/the-rails-way-review.mdcontents/articles/the-rails-way-review.md

@@ -1,8 +1,8 @@

----- -title: Book Review: The Rails Way +title: "Book Review: The Rails Way" content-type: article timestamp: 1231056180 -tags: rails|books|review +tags: "rails|books|review" ----- > "Programming books are pointless: you buy them, you read them and you chuck them because they're already out-of-date!"
M contents/articles/the-rails3-way-review.htmlcontents/articles/the-rails3-way-review.html

@@ -1,9 +1,9 @@

----- -title: Book Review: The Rails 3 Way +title: "Book Review: The Rails 3 Way" content-type: article -subtitle: aka The (Rails) Bible, 2nd Edition +subtitle: "aka The (Rails) Bible, 2nd Edition" timestamp: 1301141806 -tags: review|books|rails +tags: "review|books|rails" pdf: true -----
M contents/articles/thoughts-on-firefox3-and-opera95.htmlcontents/articles/thoughts-on-firefox3-and-opera95.html

@@ -1,8 +1,8 @@

----- -title: Thoughts on Firefox 3 and Opera 9.5 +title: "Thoughts on Firefox 3 and Opera 9.5" content-type: article timestamp: 1213327080 -tags: browsers|review|firefox|opera +tags: "browsers|review|firefox|opera" ----- <p>Opera 9.5 is out, Firefox 3 too (more or less), so, which browser are you going to use today?<br /> This new generatio of browsers offers plenty of new, innovative features and improvements over the past, in both cases:</p>
M contents/articles/to-rest-or-not-to-rest.htmlcontents/articles/to-rest-or-not-to-rest.html

@@ -1,8 +1,8 @@

----- -title: To REST or not to REST? +title: "To REST or not to REST?" content-type: article timestamp: 1190605680 -tags: rails +tags: "rails" ----- <p>Lately I&#8217;ve been reading quite a bit about Rails&#8217; <span class="caps">REST</span> approach, and to be totally honest I&#8217;m not 100% convinced it can always be a good idea. The purpose of this post is to re-evaluate the situation, and ask other people their opinion on the matter.</p> <p>Let&#8217;s see&#8230;</p>
M contents/articles/too-many-cooks-take-2.htmlcontents/articles/too-many-cooks-take-2.html

@@ -1,8 +1,8 @@

----- -title: Too many cooks... take #2 +title: "Too many cooks... take #2" content-type: article timestamp: 1188708060 -tags: cakephp|writing|rant +tags: "cakephp|writing|rant" ----- <p>Today I was not going to post on my blog. I have the flu, I don&#8217;t feel very well so I started reading some news feeds on Google Reader. That lasted for about half an hour, so I decided to check my old Netvibes account where I kept other feeds, including a bunch of CakePHP-related blogs.</p> <p>Two posts immediately grab my attention:</p>
M contents/articles/too-many-cooks-take-3.htmlcontents/articles/too-many-cooks-take-3.html

@@ -1,8 +1,8 @@

----- -title: Too many cooks... take #3 +title: "Too many cooks... take #3" content-type: article timestamp: 1256408819 -tags: cakephp|rant|php|li3 +tags: "cakephp|rant|php|li3" ----- <p>Like <a href="http://www.h3rald.com/articles/too-many-cooks-take-2/">its predecessor</a>, this is another rant about the (end of the) <a href="http://www.cakephp.org">CakePHP framework</a>. Not that I particularly enjoy writing about the misfortune of others, but after reading <a href="http://bakery.cakephp.org/articles/view/the-cake-is-still-rising">this official announcement</a> I felt compelled to post.</p> <p>It has been two years since my last post on this subject and yes, the cake is still rising, but at what price? Will it still taste sweet now that two of its main ingredients are not part of it anymore? As <a href="http://cakebaker.42dh.com/2009/10/23/the-end-of-cakephp/">Daniel</a> puts it, <em>probably the best thing to do now is to drink tea and to wait until the dust settles&#8230;</em></p>
M contents/articles/tweaking-windows-explorer.htmlcontents/articles/tweaking-windows-explorer.html

@@ -1,10 +1,10 @@

----- -title: Tweaking Windows Explorer +title: "Tweaking Windows Explorer" content-type: article -subtitle: How to make the default Windows file manager suck less +subtitle: "How to make the default Windows file manager suck less" popular: true timestamp: 1183109280 -tags: review|software +tags: "review|software" ----- <p>If you asked me what file manager I used on Windows, up to a month ago I&#8217;d have answered something like: <a href="http://www.primitus.us/a43/">A43</a> or <a href="http://www.cubicreality.com/">CubicExplorer</a>, for sure <em>anything but Windows Explorer</em>.<br /> Well, it turns out that I had to change my mind after all&#8230;</p>
M contents/articles/web-promotion.htmlcontents/articles/web-promotion.html

@@ -1,7 +1,7 @@

----- -title: Zero-cost website promotion - Part I +title: "Zero-cost website promotion - Part I" content-type: article timestamp: 1134133707 -tags: internet|webdevelopment +tags: "internet|webdevelopment" ----- Everybody from magazines to canned pasta sellers wants a website to promote their business, but you need to promote your site before you promote your products or services through it. In Part 1 of this article, I will explain some of the basics of promoting a website, and show you how to implement a cost-free strategy to get the search engine placement you need to promote your website.<strong>The Necessity of Website Promotion</strong><br />As the World Wide Web kept growing over the years, people soon realised that keeping updated <em>list</em>s of all the available pages on the Net was an impossible and pointless job. It became necessary to develop a new way to easily find and access the massive amount of content on the Web, and that is when <em>search engines</em> became a reality.<br /><br />Everyone should know the <em>legend</em> of the two lads from Stanford University who became multi-millionaires in a few years after developing and successfully marketing their easy-to-use, ultra-powerful search engine called Google. <br /><br />After it became clear that the Web was going to be (quite literally) dominated by search engines, IT professionals started developing strategies to cause their site to appearon the first page of search results. These strategies and techniques soon became known as <em>Search Engine Optimizations</em> (SEO). Call it ?science?, ?magic? or simply a way to make money, SEO is a business, and so-called "SEO experts" often <em>do</em> get a lot of cash just to take care of your website.<br /><br />Whether you like it or not, any website must be promoted in order to get visitors; some sort of marketing strategy <em>is</em> necessary if you want to stand out from the crowd, and even if you just want someone to find your page.<br /><br />Now let's assume that you don't want to spend a penny marketing your site, but you still want to be known and noticed among either competitors or friends and get some visitors to your new, exceptional (for you) and extremely innovative (to your eyes) website. Is it possible to do this, or do you need to shell out some money to an SEO expert'<br /><br />I think that a zero-cost marketing strategy does exist, and I tried to put one into practice myself. I achieved relatively good results without spending anything but time. Patience and dedication are the keys to success in a zero-cost method: if you don't have those two qualities, you either need to start working on them or find a job to make money to spend for a <em>proper</em> (but sometimes risky) marketing campaign.<br /><br /><br /><strong>1. Plan your website</strong><br /><br />Don't skip this part, because it's the most important step in the whole process: you have to come up with some clever ideas to make your site look unique and original!<br /><br /><em>2. Have a look around</em><br /><br /><em>?Well, if I were able to do <strong>that</strong> I wouldn't need to promote my site at all, and I wouldn't be reading this article?</em><br /><br />This is true to some extent - coming up with an original idea nowadays is difficult if not impossible. <em>Offering something different</em> or <em>presenting it in a different way</em> can be done, as can offering the same thing <em>but better</em> (that's what Google did). Once again, you need patience, dedication, and the belief that it is worth it.<br /> <br />The best way to decide if it's worth creating a new website is to study your potential competitors, i.e. any other website that deals with the same stuff. Study the way these websites are created, list their weaknesses and strengths, and after comparing a few of them, start thinking about what <em>you</em> can do to create a <em>better</em> website.<br /><br />Then, <em>objectively</em> evaluate your idea and decide if you have the ability to do it, what risks are involved, and how long it would take to create. After all this brainstorming, if you still want to spend time on your project, you can go on; if not, <em>this is your last chance to stop and think about something completely different</em> - it doesn't mean you?re a coward, it just means you are capable of understanding your limits, which is something many people have trouble doing these days.<br /><br /><em>4. Create an identity</em><br />Now it's time to think about a proper <em>identity</em> for your site, and this involves the following steps:<br /><br /><ul><br /><li>Define your objectives and purposes</li><br /><li>Define the audience of your site</li><br /><li>Think about a good name for your site</li><br /><li>Create some graphics and a logo</li><br /><li>Create slogans and descriptions </li><br /></ul><br /><br />Of course, defining the objectives and purposes of your site is the most important thing on that entire list. Again, you have to be honest with yourself and not be afraid to admit your limitations: if you find you can't do something you?d like to, try to imagine your site without that particular feature, and if there?s still a hope of success, go ahead. If not, try looking at your ideas from a different point of view.<br /><br />A different point of view could mean a different audience: if you see that there?s absolutely no chance of selling canned pasta to Italians,you might have better luck with the English. Audience is extremely important: it's a factor which influences both the content and the design of your site, as well as the features offered. Doing something the way <em>you</em> like it doesn't mean other people are going to like it, and for people to want to come to your site, they have to like it!<br /><br />Now, think about a good name for your site: it must be easy to remember, be somehow related to what you do, and most importantly, the domain must be available. Check on that before you commit to a particular name, or you might be in for a shock. There are plenty of places on the Net that can tell you if a particular domain with a particular TLD is available[1].<br /><br />Next, I think you should come up with a logo, though some people say it's premature to think about graphics at this stage. It's probably true, but I find that having a visual representation of your goal can often be a morale booster that will help you to keep going. <br /><br />The last step is a slogan or a description. This is an important part of creating your site's identity. It should be honest, yet promising: it has to stick in the consumer's mind. How you do this is entirely up to you, and it can also be the most time-consuming step of the process - it will probably take you a few tries to come up with something you really like.<br /><br /><br /><em>4. Features, Services and Architecture</em><br /><br />Now it's time to do something less idealistic and slightly more practical: you should start listing the features and services your site will offer, and start thinking about how to present them. Don't plan on doing too many things or implementing unnecesssary features on your site - having a forum, a newsletter <em>and</em> a blog on CannedPasta.com could be a bit too much, whereas having a gallery and a Testimonials area could be a much better use of resources. In short, add features because they can be useful, not because it's trendy to offer them.<br /><br />After you decide on your features, you have to think about the <em>architecture</em> of your site, or <em>how</em> people are going to find the services you offer on your site. Menus and navigation bars are a must, but keep them relatively uncluttered and easy to use: you must be able to grab the visitor?s attention and communicate what you do in the first 10 seconds; then, if the visitor remains on the site for another minute or two, he must be convinced by then that you are selling the best canned pasta he?s ever tried and cheaper than anyone else. This is accomplished mainly by putting links to relevant pages in at the right places: if a visitor can't find your content, he?ll never be persuaded to try your product!<br /><br /><br /><strong>Site Development</strong><br /><br />It's now time to start coding your site. Whether you do it yourself or have someone do it for you, the web developer should follow some important guidelines when coding the site. I will only touch on them very briefly.<br /><br /><em>Make it simple</em> -don't do something unless you have to. The layout of your site must be decided according to the site?s purpose - that's why movie sites have a lot of graphics, Flash[3] and other eye-catching things, and why forums and news sites don't need that stuff at all. Show your products and describe them with the minimum amount of content; people who want to buy canned pasta normally don't want to know the history of it: they just want to see if it's worth buying it. <br /><br /><em>Cleaner is better</em> -the code of your site should be clean,support web standards, and contain no errors. Although code validation[4] is not critical to acquire good placement in search engines, it can help to a certain extent. <br /><br />For the sake of code clarity, I normally recommend not using deprecated tags or and its attributes. Avoiding using tags attributes altogether, if possible: CSS[5] was created for a reason, and that's for making your life easier. A discussion of CSS is beyond the scope of this article, but I have included a reference link[6] for you to learn more about it.<br /><br /><em>Fundamentals of an SEO Strategy</em><br /><ul><br /><li>Always provide an ALT attribute for your image </li>(crawlers[7] will process that instead of the image)<br /><li>Always provide a relevant TITLE attribute to your links</li><br /><li>Always use properly formatted h1, h2, etc. tags for your titles.</li><br /><li>The tag in the of every page should be different each time and either reflect the page?s content or provide a proper title for it. It should also be one of the first tags on the page.</li><br /><li>Always remember to provide an icon for your site </li>(favicon[8])<br /><li>Don't forget a valid robots.txt</li>[9] file in the root directory of your site.<br /></ul><br /><br /><em> Meta Tags</em><br />Although Google doesn't seem to care about them any more, you should always include some meta tags in every page, particularly for keywords and the site description. Ideally, these should vary according to the page's content, contain not more than 10-15 relevant keywords, and give a brief yet complete description of the page.<br /><br /><em> Search Engine Friendly (SEF) URLs</em><br />Even though all the major search engines can process dynamic URLs correctly, a URL like <a href="http://www.cannedpasta/products/spaghetti.php">http://www.cannedpasta/products/spaghetti.php</a> is much better than something like <a href="http://www.cannedpasta.com/index.php?a=show&cat=1256&id=234.">http://www.cannedpasta.com/index.php?a=show&cat=1256&id=234.</a> The first one will not only be crawled by ANY search engine with no problems at all, but more importantly, users will remember it. If your site is dynamic (as are the majority of websites these days) and your pages are therefore automatically generated, you could try using mod_rewrite to transform complicated URLs into their simplified but more effective counterparts[10].<br /><br />That's all for this part of the article. Next time I?ll discuss the final phases of your site?s zero-cost promotion campaign: website promotion, website maintenance, and what to do once you get things going.<br /><br /><br /><strong>Notes, related links, and further reading:</strong><br /><br />[1]You can do so here, for example: <a href="http://www.mydomain.com">http://www.mydomain.com</a><br />[2]The domain is fictitious and used as an example<br />[3]Macromedia Flash: <a href="http://www.macromedia.com/software/flash/">http://www.macromedia.com/software/flash/</a><br />[4]W3C validator: <a href="http://validator.w3.org/ ">http://validator.w3.org/ </a><br />[5]CSS: <a href="http://www.w3.org/Style/CSS/ ">http://www.w3.org/Style/CSS/ </a><br />[6]Official CSS tutorial: <a href="http://www.w3schools.com/css/default.asp ">http://www.w3schools.com/css/default.asp </a><br />[7]Web crawler, Wikipedia page: <a href="http://en.wikipedia.org/wiki/Web_crawler">http://en.wikipedia.org/wiki/Web_crawler</a><br />[8]Favicon, Wikipedia page: <a href="http://en.wikipedia.org/wiki/Favicon">http://en.wikipedia.org/wiki/Favicon</a><br />[9]Robot.txt tutorial: <a href="http://www.searchengineworld.com/robots/robots_tutorial.htm">http://www.searchengineworld.com/robots/robots_tutorial.htm</a><br />[10]Apache mod_rewrite: <a href="http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html ">http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html </a><br />
M contents/articles/what-is-ajax.htmlcontents/articles/what-is-ajax.html

@@ -1,7 +1,7 @@

----- -title: What is AJAX? +title: "What is AJAX?" content-type: article timestamp: 1137047408 -tags: internet|web20|ajax|webdevelopment +tags: "internet|web20|ajax|webdevelopment" ----- <em>"The Web is changing. The 30-year-old terminal-like technology it was originally is gradually giving way to new ways of doing things. The power of AJAX allows for rich user interaction without the trouble that has bugged traditional web applications."</em>This is the introduction to the script.aculo.us[1] website, and regardless your opinion about the so-called AJAX <em>programming technique</em>, they are fundamentally right: the web is changing. AJAX is at least one way to do things in a different way, enhancing - although arguably, in some cases - users' browsing experience.<br /><br /><strong>Application examples</strong><br />What is AJAX then? Nothing too new, but not too old either. I'd define AJAX as the <em>rebirth of Javascript</em>, for example, it's not only Javascript we're talking about. The acronym stands for Asynchronous Javascript And XML and it already gives an idea of the fundamentals of the technology: something build on <em>asynchronous server requests and responses </em>. This may be clear to coders, but the best way to try explaining this to everyday internet users is showing some famous applications:<br /><br /><em>Gmail[2]</em>: The first example? The most famous? The most used? Perhaps. Google aimed to impress both end users and geeks with it's free, long awaited email service. What's so unusual in this webmail application?<br /><ul><br /><li>An innovative and intuitive interface, more similar to a desktop application than a traditional webpage.</li><br /><li>Rich formatting through an effective, easy-to-use editor.</li><br /><li>Online spell checker.</li><br /><li>Instant </li>(one click) email tagging, labels, contact groups etc.<br /><li>Email auto save.</li><br /></ul><br /><br /><em>Kiko[3]</em>: This is a very neat online calendar, free to use and customizable. Features include:<br /><ul><br /><li>Multiple user/contacts/events administration.</li><br /><li>Personalization of the right click menu </li>(it overrides your browser's default behavior).<br /><li>Drag and drop events across the calendar.</li><br /><li>Easily switch through different calendar views without any page refresh.</li><br />- </ul><br /><br /><em>Writely[4]</em>: An online word processor. Although it is not as advanced as its desktop's cousins, this is a truly admirable effort to port a desktop application to the web. The service is free for now and it allows users to create, edit, share and export text documents. Among its features there are:<br /><ul><br /><li>High degree of document formatting - modify font size, style, colors, alignment, insert images and links etc.</li><br /><li>Enhanced exporting options - it can create html documents, Word documents, zip files etc.</li><br /><li>Online spell-checker.</li><br /><li>Ability to easily share and publish your work.</li><br /></ul><br /><br />This list can continue[5], as new "AJAX-powered" applications are created nearly every day. <br /><fieldset><blockquote>AJAX provides the web developer the ability to create web applications that look and feel like applications that run on the desktop. It does this by solving the 'partial update' problem. AJAX makes it possible for a web application to request data from the server (usually in response to a button click or other java script 'event') and change a part of the current page to reflect the result of the query. Prior to AJAX, if the web developer wanted to retrieve any information from the server a full page update was required. This may mean a full page load when the user clicks a help icon, spell checks a document or performs a drag and drop operation that changes data on the server. AJAX solves this problem and opens the door for a host of AJAX-powered web applications<br />There were some unconventional solutions to this problem prior to AJAX. I have ignored them for the purpose of this article as they were hacky or relied on a feature in a particular browser </blockquote></fieldset><br /><br /><strong>How does it work?</strong><br />Ajax[7] is fundamentally the union of various technologies - not something new by itself:<br /><ul><br /><li> </li>(X)HTML, CSS, etc., used as presentation layer and format the information retrieved by the server: nothing special here.<br /><li>The XMLHttpRequest</li>[8] object, which allows data exchange between client and server "silently", in an asynchronous way, without the need of refreshing and reloading a whole web page<br /><li>The Dom Object Model </li>(DOM)[9], a Object-Oriented way to represent and access HTML or XML.<br /><li>XML and XSLT used for data interchange and manipulation</li><br /></ul><br /><br />The magic is undoubtedly in the XMLHttpRequest object, originally invented by Microsoft as an ActiveX object and then made available as a standard Javascript class by Mozilla-based browsers. At least something which <em>seems</em> to be compatible with <em>most</em> browsers then.<br /><br />A necessary step in any Javascript script using the XMLHttpRequest object would be something like:<br /><br /><code><br />if (window.XMLHttpRequest) { // Mozilla, Safari, ...<br /> http_request = new XMLHttpRequest();<br />} else if (window.ActiveXObject) { // IE<br /> http_request = new ActiveXObject("Microsoft.XMLHTTP");<br />}<br /></code><br /><br />In order to have an http_request object to use later on which is independent from the browser type.<br /><br />Let's now examine an example of elementary Ajax application[10]. The following code is broken into different parts and commented, the uncommented source and a demo is available on degraeve.com[10].<br /><br />For this simple example we need to create a simple server-side script which will be called by our Ajax application. The script can be in any language, this one is in Perl.<br /><br /><code><br />#!/usr/bin/perl -w<br />use CGI;<br /><br />$query = new CGI;<br /><br />$secretword = $query-param('w');<br />$remotehost = $query-remote_host();<br /><br />print $query-header;<br />print "<p>The secret word is <b>$secretword</b> and your IP is <b>$remotehost</b>.<br /> </code><br /><br />Basically it creates a new CGI object named $query, used to access the parameter which will be passed by our submission form, "w", and get the user's IP address.<br />The script will then print a the page header and a phrase containing the word entered in our form and the user's IP address.<br /><br />And here's the simple Ajax application:<br /><br /><code><br /><html><br /><head><br /><title>Simple Ajax Example</title><br /><br /><script language="Javascript"><br /></code><br /><br /><em>Comment: Just the first HTML tags of the page, and the beginning of the script</em><br /><br /><code><br />function xmlhttpPost(strURL) {<br /> var xmlHttpReq = false;<br /> var self = this;<br /> // Mozilla/Safari<br /> if (window.XMLHttpRequest) {<br /> self.xmlHttpReq = new XMLHttpRequest();<br /> }<br /> // IE<br /> else if (window.ActiveXObject) {<br /> self.xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");<br /> }<br /></code><br /><br /><em>Comment: First of all we create a function named xmlhttpPost, which takes the parameter strURL, i.e. the web address of the script we created earlier. In the first part of the function, we create the HTMLHttpRequest object independently of the browser, which in this case is called self.xmlHttpReq. </em><br /><code><br /> <br /> self.xmlHttpReq.open('POST', strURL, true);<br /><br /> self.xmlHttpReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');<br /></code><br /><br /><em>Comment: with the method open we initialize the connection, specifying that we want to send a POST request to the page "strURL" and that the connection is asynchronous (true). The third parameter is actually true by default and could have been omitted in this case. <br />As we want to use the POST method, we need to set the content-type header for our request, in this case "application/x-www-form-urlencoded". </em><br /><br /><code><br /> self.xmlHttpReq.onreadystatechange = function() {<br /> if (self.xmlHttpReq.readyState == 4) {<br /> updatepage(self.xmlHttpReq.responseText);<br /> }<br /> }<br /> self.xmlHttpReq.send(getquerystring());<br />}<br /></code><br /><br /><br /><em>Comment: This is the crucial part, as we need to send the request and also define the behavior of our application once the response is received. The request is sent using the "send" method, which sends a properly formatted query string (see below), but before that we need to setup a "listener" to monitor what happens to our request.<br />The readyState variables is updated according to the status of the connection, and can assume the following values:<br /><ul><br /><li>0 - Uninitialised</li><br /><li>1 - Loading</li><br /><li>2 - Loaded</li><br /><li>3 - Interactive</li><br /><li>4 - Completed</li><br /></ul><br /><br />We want to update our page once we are sure that the connection with the script has been established, therefore we setup a listener (onreadystatechange) to update the page via the function update page defined below only if the connection's state is "Completed" (self.xmlHttpReq.readyState == 4). The self.xmlHttpReq.responseText variable which is sent to the update page function contains the response generated by our CGI script. </em><br /><br /><code><br />function getquerystring() {<br /> var form = document.forms['f1'];<br /> var word = form.word.value;<br /> qstr = 'w=' + escape(word); // NOTE: no '?' before querystring<br /> return qstr;<br />}<br /></code><br /><br /><em>Comment: This function simply formats the parameter sent to the script as "w=typedword" where "typedword" is the word typed in the form of our application. </em><br /><br /><code><br />function updatepage(str){<br /> document.getElementById("result").innerHTML = str;<br />}<br /></code><br /><br /><em>Comment: Finally, this function inserts the response we got from the CGI script into an HTML element with id=result, through the method innerHTML. </em><br /><br /><code><br /></script><br /></head><br /><br /><form name="f1"><br /> <pword: <input name="word" type="text" ><br /> <input value="Go" type="button" >onclick='JavaScript:xmlhttpPost("/cgi-bin/simple-ajax-example.cgi")'</p><br /> <div id="result"></div><br /></form><br /></body><br /></html><br /></code><br /><br /><em>Comment: This is the final part of the application, which defines our form containing a text field and a submit button. Note that our xmlhttpPost function is called once the button is clicked, through the on click attribute. </em><br /><br />That's it. <br />The first reaction after reading so far would probably be "Ajax is not easy at all", well, I never said it was. To create a simple application which just prints something on the screen we had to go through a lot of code, and we could have done something similar with much less hassle. This was just a trivial example, very different from those large scale applications available online.<br /><br />There's good news though, there are plenty of frameworks and toolkits which makes life easier for developers interested in using this programming technique. There are in particular various libraries built upon the Prototype[11] framework such as the already mentioned Script.aculo.us[1] and Rico[12] for examples, and various frameworks which integrate Ajax in some way in any server side language, like Ruby on Rails[13] or CakePHP[14], for example.<br /><br /><strong>Conclusion</strong><br />Undoubtedly Ajax can be used to create really powerful and innovative applications, but it shouldn't be abused or mis-used. There are a few things to keep in mind, when developing an Ajax application:<br /><ul><br /><li>It requires Javascript to be enable on the client browser, and the developer obviously can't control that</li><br /><li>The application may not compatible with all browsers, in particular older browsers will definitely not be able to access it.</li><br /><li>It can be too much of a surprise for the user who never used an Ajax application before: it may experience delays in responses, some basic functionalities like the "Back" button might not work as expected etc.</li><br /></ul><br /><br />There are actually many more things to consider [15] before even start planning to develop an application, and can basically be summarized as follows:<br /><br /><em>"Do not use Ajax in your web application unless you know what you're doing"</em><br /><br />Luckily, there are a lot of articles and resources[16] out there, waiting for you.<br /><br /><br /><strong>Notes and Resources</strong><br /><small><br />[1] Script.aculo.us AJAX toolkit: <a href="http://www.script.aculo.us ">http://www.script.aculo.us </a><br />[2] Gmail - Google's online webmail: <a href="http://mail.google.com/mail">http://mail.google.com/mail</a><br />[3] Kiko - Online calendar: <a href="http://www.kiko.com/">http://www.kiko.com/</a><br />[4] Writely - Online word processor: <a href="http://www.writely.com/">http://www.writely.com/</a> <br />[5] A venture forth Blog - Top 10 Ajax applications: <a href="http://www.aventureforth.com/?p=13">http://www.aventureforth.com/?p=13</a><br />[6] HTTP - Webopedia entry: <a href="http://www.webopedia.com/TERM/H/HTTP.html">http://www.webopedia.com/TERM/H/HTTP.html</a><br />[7] AJAX - Wikipedia Page: <a href="http://en.wikipedia.org/wiki/AJAX">http://en.wikipedia.org/wiki/AJAX</a><br />[8] XMLHTTP Wikipedia Page: <a href="http://en.wikipedia.org/wiki/XMLHTTP">http://en.wikipedia.org/wiki/XMLHTTP</a><br /><br />[9] Dom Object Model - Wikipedia Page: <a href="http://en.wikipedia.org/wiki/Document_Object_Model">http://en.wikipedia.org/wiki/Document_Object_Model</a><br />[10] degraeve.com - Simple Ajax Example: <a href="http://www.degraeve.com/reference/simple-ajax-example.php">http://www.degraeve.com/reference/simple-ajax-example.php</a><br />[11] Prototype Javascript Framework: <a href="http://prototype.conio.net/">http://prototype.conio.net/</a><br />[12] Rico open-source Javascript library: <a href="http://openrico.org/">http://openrico.org/</a><br />[13] Ruby on Rails: <a href="http://www.rubyonrails.org">http://www.rubyonrails.org</a><br />[14] CakePHP framework: <a href="http://www.cakephp.org">http://www.cakephp.org</a><br />[15] Alex Bosworth's Weblog: Ajax Mistakes: <a href="http://sourcelabs.com/ajb/archives/2005/05/ajax_mistakes.html">http://sourcelabs.com/ajb/archives/2005/05/ajax_mistakes.html</a><br />[16] AjaxMatters.com: <a href="http://www.ajaxmatters.com/r/welcome">http://www.ajaxmatters.com/r/welcome</a><br /></small><br />
M contents/articles/where-does-your-ruby-code-live.htmlcontents/articles/where-does-your-ruby-code-live.html

@@ -1,8 +1,8 @@

----- -title: Where does your Ruby code live? +title: "Where does your Ruby code live?" content-type: article timestamp: 1226147640 -tags: ruby|programming +tags: "ruby|programming" ----- <p>Back when I wrote my <a href="/articles/10-reasons-to-learn-ruby">10 reasons to learn Ruby</a> article, I mentioned <a href="http://www.rubygems.org/">RubyGems</a> in <em>Reason #1</em> as one of they key features of the Ruby programming languages.<br /> Indeed, gems make getting Ruby programs as easy as typing <code>gem install &lt;something&gt;</code> from the command line. When you want to distribute something new in Ruby, there&#8217;s no need to give people download links, zip files or setup programs, just <a href="http://adam.blog.heroku.com/past/2008/11/2/pony_the_express_way_to_send_email_from_ruby/">tell them to get the gem</a>. That&#8217;s perfectly normal, and extremely cool.</p>
M contents/articles/wunderlist.htmlcontents/articles/wunderlist.html

@@ -1,9 +1,9 @@

----- -title: Getting things done... in Wonderland! +title: "Getting things done... in Wonderland!" content-type: article -subtitle: Why Wunderlist is the only Todo List I'll ever need +subtitle: "Why Wunderlist is the only Todo List I'll ever need" timestamp: 1312063673 -tags: productivity|review|software +tags: "productivity|review|software" pdf: true -----
M contents/concatenative.htmlcontents/concatenative.html

@@ -1,5 +1,5 @@

----- -title: Concatenative +title: "Concatenative" content-type: project github: concatenative status: On Hold
M contents/contact.htmlcontents/contact.html

@@ -1,5 +1,5 @@

----- -title: Contact +title: "Contact" content-type: page ----- <div class="contact-list">
M contents/glyph.htmlcontents/glyph.html

@@ -1,7 +1,7 @@

----- -title: Glyph +title: "Glyph" content-type: project -subtitle: A Rapid Document Authoring Framework +subtitle: "A Rapid Document Authoring Framework" github: glyph status: Active version: 0.5.3.1
M contents/h3rald.htmlcontents/h3rald.html

@@ -1,7 +1,7 @@

----- -title: H3RALD Web Site +title: "H3RALD Web Site" content-type: project -subtitle: The site you're looking at +subtitle: "The site you're looking at" github: h3rald status: Active version: 8.4.0
M contents/hastyscribe.htmlcontents/hastyscribe.html

@@ -1,5 +1,5 @@

----- -title: HastyScribe +title: "" content-type: project github: hastyscribe status: Active
M contents/herald-vim-color-scheme.htmlcontents/herald-vim-color-scheme.html

@@ -1,7 +1,7 @@

----- -title: herald.vim +title: "herald.vim" content-type: project -subtitle: An easy to read, portable and pretty Vim Color Scheme +subtitle: "An easy to read, portable and pretty Vim Color Scheme" ----- <p><strong>herald</strong> is a dark color scheme for <a href="http://www.vim.org">Vim</a> which aims to be easy to read, eye-appealing, portable on multiple terminals, and suitable for source code highlighting in multiple languages.</p> <p>You can get the latest version <strong><a href="/files/herald.vim"><span class="caps">HERE</span></a></strong> (direct link).</p>
M contents/index.htmlcontents/index.html

@@ -1,5 +1,5 @@

----- -title: Home +title: "Home" content-type: page -----
M contents/litestore.htmlcontents/litestore.html

@@ -1,5 +1,5 @@

----- -title: LiteStore +title: "" content-type: project github: litestore status: Active
M contents/projects.htmlcontents/projects.html

@@ -1,5 +1,5 @@

----- -title: Projects +title: "Projects" content-type: page ----- <div class="projects-page">
M contents/rawline.htmlcontents/rawline.html

@@ -1,7 +1,7 @@

----- -title: RawLine +title: "RawLine" content-type: project -subtitle: A pure-ruby alternative to ReadLine +subtitle: "A pure-ruby alternative to ReadLine" github: rawline status: On Hold version: 0.3.2
M contents/ruby-compendium.htmlcontents/ruby-compendium.html

@@ -1,7 +1,7 @@

----- -title: Ruby Compendium +title: "Ruby Compendium" content-type: project -subtitle: An Essential Guide to the Ruby Ecosystem +subtitle: "An Essential Guide to the Ruby Ecosystem" github: ruby-compendium status: On Hold version: 0.2.0
M rules.minrules.min

@@ -1,5 +1,81 @@

'hastysite import +() =TAGS +() =TAGCOLUMNS + + +; Populates the TAGCOLUMNS array containing tags in groups +; of four, suitable for the creation of the tags page. +( + TAGS dsort =TAGS + 0 :count + () =tagcolumn + TAGS size :tcount + TAGS ( + =tag + tcount pred @tcount + tag first :tagname + tag last size :tagcount + () =tagdata + tagdata ( + tagname %tag + tagcount %count + ) tap #tagdata + count succ @count + tagdata tagcolumn append #tagcolumn + (count 4 == tcount 0 == or) + ( + () + tagcolumn %tags + TAGCOLUMNS append #TAGCOLUMNS + 0 @count + () #tagcolumn + ) when + ) foreach +) :prepare-tag-data + + +; Create the Tags page. +( + () + "tags/index" %id + "tags" %path + ".html" %ext + "Tags" %title + "page" %content-type + TAGCOLUMNS %tagcolumns + dup "_tags" swap mustache %contents + dup "page" swap mustache %contents + output-fwrite +) :create-tags-page + + +; Group articles by tags +( + (dict) expect -> =content + (content ?tags) + ( + content /tags "|" split =tags + tags ( + :tag + (TAGS tag dhas?) + ( + ; Add article to existing tag + content ("id" "title" "timestamp") dpick =article + TAGS tag dget =tagdata + article tagdata append #tagdata + TAGS tagdata tag dset #TAGS + ) + ( + ; Create new tag + content ("id" "title" "timestamp") dpick ' =article + TAGS article tag dset #TAGS + ) if + ) foreach + ) when + content +) :process-tags + ; Copy PDF files saved in asset folder ; to the corresponding article output folder. (

@@ -15,8 +91,8 @@ ; Process a content file applying the appropriate template

; and compiling markdown to HTML if necessary. ( (dict) expect -> =content - content /content-type :ct content /id :id + content /content-type :ct "page" :tpl (ct "article" ==) ("article" @tpl) when (id "index" ==) ("home" @tpl) when

@@ -34,7 +110,10 @@ ) :process-content

;;;; MAIN ;;;; -contents (process-content output-fwrite) foreach +contents (process-tags process-content output-fwrite) foreach +prepare-tag-data +create-tags-page + ; Process all assets. assets (
A templates/_tags.mustache

@@ -0,0 +1,9 @@

+<div class="container article-aggregation"> + {{#tagcolumns}} + <div class="row"> + {{#tags}} + <div class="col-md-3"><i class="h3-tag"></i> <a href="/tags/{{tag}}/">{{tag}}</a> ({{count}})</div> + {{/tags}} + </div> + {{/tagcolumns}} +</div>