<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>H3RALD - Tag 'review' (RSS Feed)</title>
    <language>en-us</language>
    <lastBuildDate>Tue, 22 Jun 2010 11:30:00 -0000</lastBuildDate>
    <ttl>40</ttl>
    <link>http://www.h3rald.com</link>
    <description/>
    <item>
      <title>Book Review: Distributed Programming with Ruby</title>
      <description>
		&lt;div class="section"&gt;
&lt;p&gt;Back when I read &#8225;&#8225;&#8225;&#8225;&#8225;PLACEHOLDER&#164;1&#8225;&#8225;&#8225;&#8225;&#8225; for the first time, I distinctly remember a short reference to &lt;a href="http://ruby-doc.org/stdlib/libdoc/drb/rdoc/index.html"&gt;DRb&lt;/a&gt;, the &lt;strong&gt;D&lt;/strong&gt;istributed &lt;strong&gt;R&lt;/strong&gt;u&lt;strong&gt;b&lt;/strong&gt;y library included in the Standard Library.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;#8220;Cool!&amp;#8221;&lt;/em&gt;  &amp;#8212; I thought&lt;/p&gt;
&lt;p&gt;&amp;#8230;and that was pretty much it. The documentation for DRb was pretty much nonexistent (at the time), I didn&amp;#8217;t need it, so I pretty much forgot about it altogether until this book came out.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.informit.com/store/product.aspx?isbn=0321638360"&gt;&lt;em&gt;Distributed Programming with Ruby&lt;/em&gt;&lt;/a&gt; fills a very particular niche of the Ruby programming world: &lt;em&gt;distributed&lt;/em&gt; programming. Moreover, this book is somehow &lt;em&gt;justified&lt;/em&gt; by the scarce documentation on the subject:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Although these libraries [DRb and rinda] have been included with Ruby for many years now, they have received little or no attention (or documentation). This has led to a lot of &lt;span class="caps"&gt;FUD&lt;/span&gt;&lt;br /&gt;
(fear, uncertainty, and doubt) about what these libraries can and cannot do, and when they are appropriate to use (if at all).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p style="padding-left:5em;"&gt;&amp;#8212; Mark Bates, &lt;em&gt;Distributed Programming with Ruby&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;But there&amp;#8217;s more. This book gives the reader a complete overview of what&amp;#8217;s out there, in the Ruby world, to support distributed programming. This includes quite a few gems and libraries besides the ones provided in the standard library.&lt;/p&gt;
&lt;div class="section"&gt;
&lt;h3 id="h_1"&gt;Overview&lt;/h3&gt;
&lt;img alt="-" src="/img/pictures/distributed-programming-with-ruby.jpg" style="float:right;" /&gt;
	&lt;p&gt;The book is organized into four parts, each dealing with a particular set of Ruby libraries related to distributed programming.&lt;/p&gt;
&lt;p&gt;The author, &lt;a href="http://www.metabates.com/"&gt;Mark Bates&lt;/a&gt;, does a good job maintaining a sort of continuity in the examples throughout the book: you&amp;#8217;ll get accustomed to a &lt;em&gt;Logger&lt;/em&gt; class of some kind being punctually re-implemented more or less once per chapter, using a different library.&lt;/p&gt;
&lt;p&gt;Additionally, the libraries described in the book are ordered by &amp;#8220;reverse preference&amp;#8221; in each part of the book, so normally the libraries described later on in a part fix some of the shortcomings of the preceding ones.&lt;/p&gt;


	
	&lt;div class="section"&gt;
&lt;h4 id="h_2"&gt;Part I: Standard Library&lt;/h4&gt;
&lt;p&gt;This part is the most important of all: it gives you the very basics about Distributed Programming and it describes the &amp;#8220;building blocks&amp;#8221; (&lt;a href="http://ruby-doc.org/stdlib/libdoc/drb/rdoc/index.html"&gt;DRb&lt;/a&gt; and &lt;a href="http://ruby-doc.org/stdlib/libdoc/rinda/rdoc/index.html"&gt;Rinda&lt;/a&gt;) used in nearly all the other libraries described in the book. If you want you can skip some chapters in the other parts of the book, but make sure this part is crystal clear in your head before proceeding any further.&lt;/p&gt;

&lt;/div&gt;	
	
	&lt;div class="section"&gt;
&lt;h4 id="h_3"&gt;Part II: Third-Party Frameworks and Libraries&lt;/h4&gt;
&lt;p&gt;If you read part I, you&amp;#8217;re probably a bit disappointed by DRb and Rinda and the amount of code you have to write to make simple things work in a distributed environment. The good news is that there are some Ruby gems out there that can make life simpler:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://seattlerb.rubyforge.org/RingyDingy/"&gt;RingyDingy&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://rufy.com/starfish/doc/"&gt;Starfish&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://github.com/markbates/distribunaut"&gt;Distribunaut&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://github.com/mperham/politics"&gt;Politics&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;	
	
	&lt;div class="section"&gt;
&lt;h4 id="h_4"&gt;Part III: Distributed Message Queues&lt;/h4&gt;
&lt;p&gt;In this part, the author introduces more in detail the concept of distribute message queues, and also the technologies and protocols available not only in the Ruby world but elsewhere. It focuses on two libraries:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://rubyforge.org/projects/starling/"&gt;Starling&lt;/a&gt;, originally used by Twitter.&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://github.com/tmm1/amqp"&gt;&lt;span class="caps"&gt;AMQP&lt;/span&gt;&lt;/a&gt;, an implementation of the &lt;a href="http://www.amqp.org/"&gt;&lt;span class="caps"&gt;AMQP&lt;/span&gt;&lt;/a&gt; protocol in Ruby, that can be used in conjunction with &lt;a href="http://www.rabbitmq.com/"&gt;RabbitMQ&lt;/a&gt;, an Erlang-based messaging system.&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;	
	
	&lt;div class="section"&gt;
&lt;h4 id="h_5"&gt;Part IV: Distributed Programming with Ruby on Rails&lt;/h4&gt;
&lt;p&gt;The book ends somewhat abruptly with this last part that deals with distributed programming in the Rails world. It feels a bit like a last-minute addendum that I would have left for an appendix, nevertheless it briefly introduces &lt;a href="http://backgroundrb.rubyforge.org/"&gt;BackgrounDRb&lt;/a&gt; and &lt;a href="http://github.com/tobi/delayed_job"&gt;Delayed Job&lt;/a&gt;.&lt;/p&gt;

&lt;/div&gt;

&lt;/div&gt;

&lt;div class="section"&gt;
&lt;h3 id="h_6"&gt;Technical Analysis&lt;/h3&gt;
&lt;p&gt;Unlike other technical books, this one can (must?) be read sequentially. Generally each chapter focuses on a library, describes how to install it and use it, and highlights its pros and cons. Typically, the &amp;#8220;cons&amp;#8221; are solved in the following chapter by another library, and so on&amp;#8230;&lt;/p&gt;
&lt;p&gt;The book is not meant to contain a full technical reference of each library, and it&amp;#8217;s quite short (256 pages), so you really get the most out of it if you read it all, from start to finish. I didn&amp;#8217;t realize there were so many different libraries in this particular niche of Ruby programming, and Mark does a good job demistifying some of them.&lt;/p&gt;
&lt;p&gt;One thing that really struck me out of this book is the focus on gems. We&amp;#8217;re not talking about &lt;em&gt;mainstream&lt;/em&gt; frameworks like Rails or Merb here, but rather of some rather specialized, smaller libraries that fullfill very specific tasks. Personally, I don&amp;#8217;t remember any other Ruby book doing this in the same way, and I was quite happy about it.&lt;/p&gt;
&lt;p&gt;On the other hand, gems are a double-edged sword: while some of them are really cool and well-maintained, others may disappear tomorrow with no prior notice. I was actually very surprised to see even some of the &lt;em&gt;quirks&lt;/em&gt; of these gems documented in the book:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;p91&lt;/strong&gt;: &lt;em&gt;&amp;#8220;Notice that we added client { } to the bottom of the server file. The reason for this appears to be a bug or flaw in the Starfish architecture.&amp;#8221;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Really? Hasn&amp;#8217;t it be fixed now? Apparently not, that&amp;#8217;s the way it works, so no, you can&amp;#8217;t blame the author of the book for this.&lt;/p&gt;

	&lt;div class="section"&gt;
&lt;h4 id="h_7"&gt;Formatting and Readability&lt;/h4&gt;
&lt;p&gt;As I pointed out earlier, this book is somehow meant to be read sequentially, and Mark does a good job making sure you don&amp;#8217;t get bored. Chapters and sections are quite short and there&amp;#8217;s a good text/code ratio: the examples are short and clear, and you don&amp;#8217;t have to try them out yourself, because most of the time the author does it for you. It&amp;#8217;s not infrequent for the author to tell you to run &amp;#8220;wrong&amp;#8221; code, but that&amp;#8217;s a great way to show you how to do the right thing right afterwards.&lt;/p&gt;
&lt;p&gt;Sidebars and boxes are used properly and they do provide actual value-added content: some information on a non-Ruby technology, some tips and tricks on how to run things smoothly, etc. On the other hand, one thing I couldn&amp;#8217;t stand were the &lt;em&gt;endnotes&lt;/em&gt;. I must say I don&amp;#8217;t like endnotes at the best of times, but when they are pointless I just can&amp;#8217;t suffer them. Each chapter has its own fair share of endnotes, but unfortunately most of them are just URLs to Wikipedia pages or RubyForce/GitHub projects: I would have preferred the URLs inline with the rest of the text, but that&amp;#8217;s just me.&lt;/p&gt;

&lt;/div&gt;
	&lt;div class="section"&gt;
&lt;h4 id="h_8"&gt;Style and Contents&lt;/h4&gt;
&lt;p&gt;Mark has a nice, informal writing style. Exactly what you expect from a programming book nowadays, even if sometimes it feels a bit too informal:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;p86&lt;/strong&gt;: &lt;em&gt;&amp;#8220;I think I understand what Eric means by all that. However, that is as deep as the documentation goes on the subject. I have not been able to test what I think he means, so I won&amp;#8217;t make any grand promises about what the library can and cannot do in regards to expiring/renewing registrations.&amp;#8221;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Although this is not something you&amp;#8217;d see in a professional book everyday, it definitely helps to connect with the reader: Mark is one of us after all, even if he happens to have created quite a few &lt;a href="http://github.com/markbates"&gt;interesting projects&lt;/a&gt;, like the Mack framework, the Distribunaut library (which is also mentioned in his book, but in a very impartial way) and Configatron. From his book you understand that he&amp;#8217;s neither one of those rockstar developers nor one of those famous authors who just writes books for a living: he&amp;#8217;s a competent programmer who knows quite a bit about a particular, but relevant, niche of Ruby programming.&lt;/p&gt;

&lt;/div&gt;

&lt;/div&gt;

&lt;div class="section"&gt;
&lt;h3 id="h_9"&gt;Final Thoughts&lt;/h3&gt;
&lt;p&gt;This is one of those books I&amp;#8217;d like to see a second edition of. Partly because there are some relatively new gems which have been left out (&lt;a href="http://github.com/kwi/BrB"&gt;BrB&lt;/a&gt;, for example), partly because this is a rather hot topic at the moment, and different solutions are popping out at a rather extreme rate.&lt;/p&gt;
&lt;p&gt;The decision to write about mainly about gems was bold but necessary, and I&amp;#8217;d really like to see more authors doing that, but with extra care. From reading this book, you understand that there&amp;#8217;s no &lt;em&gt;silver bullet&lt;/em&gt; when it comes to Distributed Programming, but rather different tools to do different jobs.&lt;/p&gt;
&lt;p&gt;The thing I missed the most? A proper conclusion to the book. You&amp;#8217;re left with two chapter about Rails-specific libraries which could have easily become appendixes, and nothing else. I would have liked a sort of &amp;#8220;summing up&amp;#8221; end chapter (re-)highlighting the pros and cons of each library and a sort of feature matrix.&lt;/p&gt;
&lt;p&gt;Nevertheless, it was well worth my time and it proved to be a very good resource to get started in writing distributed Ruby programs.&lt;/p&gt;

&lt;/div&gt;

&lt;/div&gt;</description>
      <pubDate>Tue, 22 Jun 2010 11:30:00 -0000</pubDate>
      <guid>http://www.h3rald.com/articles/distributed-programming-with-ruby-review/</guid>
      <link>http://www.h3rald.com/articles/distributed-programming-with-ruby-review/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/distributed-programming-with-ruby-review/#comments</comments>
      <category>review</category>
      <category>books</category>
      <category>ruby</category>
    </item>
    <item>
      <title>Book Review: Succeeding with Agile</title>
      <description>
		&lt;div class="section"&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;#8220;This is not a book for those who are completely new to &lt;em&gt;Scrum&lt;/em&gt; or &lt;em&gt;agile&lt;/em&gt;. There are other books, classes, and even websites for that. If you are completely new to &lt;em&gt;Scrum&lt;/em&gt;, start with one of those.&amp;#8221;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p style="padding-left:5em;"&gt;&amp;#8212; Mike Cohn, &lt;em&gt;Succeeding with Agile&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Great. That&amp;#8217;s just great. Good job I started with the &lt;em&gt;Introduction&lt;/em&gt; first, otherwise the first chapters of this book would have been way too overwhelming!&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.succeedingwithagile.com/"&gt;&lt;em&gt;Succeeding with Agile&lt;/em&gt;&lt;/a&gt; is a book that &lt;em&gt;doesn&amp;#8217;t&lt;/em&gt; teach you about &lt;em&gt;Scrum&lt;/em&gt; or &lt;em&gt;agile&lt;/em&gt; methodologies, it won&amp;#8217;t give you a definition of ScrumMaster, sprint, or backlog&amp;#8230; instead, it takes all that for granted and teaches how to pragmatically adopt &amp;#8212; or better, &lt;acronym title="Awareness, Desire, Ability, Promotion, Transfer"&gt;&lt;span class="caps"&gt;ADAPT&lt;/span&gt;&lt;/acronym&gt; to &amp;#8212; &lt;em&gt;Scrum&lt;/em&gt;, in the context of yourself, your team, and even your entire organization.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;#8220;[&amp;#8230;] this book draws on my experience with &lt;em&gt;Scrum&lt;/em&gt; over the past 15 years, but especialle the last 4. For the last 4 years, every evening after I spent the day with one of my clients, I would go back to my hotel room and make notes about problems they were facing, the question they asked, and the advice I gave.&amp;#8221;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Indeed, this book is a gold mine of information, anecdotes, tips and tricks about everything you could possibly want to know about making &lt;em&gt;Scrum&lt;/em&gt; work, at any level. If you have some knowledge about &lt;em&gt;agile&lt;/em&gt; development you definitely have some questions: &lt;em&gt;will it work?&lt;/em&gt; &amp;#8230; &lt;em&gt;is it really more productive?&lt;/em&gt; &amp;#8230; &lt;em&gt;how can I make my boss understant this?&lt;/em&gt;. This book has all the answers you need. Most definitely, it also answer questions you didn&amp;#8217;t think of.&lt;/p&gt;
&lt;p&gt;If you don&amp;#8217;t know what all this is about, then you&amp;#8217;d better do your homework first:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://www.mountaingoatsoftware.com/topics/scrum"&gt;Introduction to &lt;em&gt;Scrum&lt;/em&gt; &amp;#8211; An Agile Process&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/_Scrum__(development)"&gt;&lt;em&gt;Scrum&lt;/em&gt; (Wikipedia Page)&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://www.scrumalliance.org/"&gt;&lt;em&gt;Scrum&lt;/em&gt; Alliance&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://www.scrum.org/"&gt;&lt;em&gt;Scrum&lt;/em&gt;.org&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="section"&gt;
&lt;h3 id="h_1"&gt;Overview&lt;/h3&gt;
&lt;img alt="-" src="/img/pictures/succeeding-with-agile.jpg" style="float:left;" /&gt;
&lt;p&gt;The book is organized into five parts of different length, ranging from 20 to over 100 pages. If you read the book from the start till the very end, you&amp;#8217;ll notice that the start of each part is like a new milestone in &lt;em&gt;Scrum&lt;/em&gt; adoption: first the author makes sure that &lt;em&gt;you&lt;/em&gt; are prepared (Part 1), then moves on to deal with individuals and initial resistance (Part 2), then teams (Part 3) and finally the whole organization (Part 4), until you can finally taste the fruits of you labor (Part 5).&lt;/p&gt;
&lt;p&gt;In a way, you may well want to carry this book in your briefcase every day you go to work, and read it bit by bit, as you make progress in your quest for &lt;em&gt;Scrum&lt;/em&gt; adoption.&lt;/p&gt;

	&lt;div class="section"&gt;
&lt;h4 id="h_2"&gt;Part I: Getting Started&lt;/h4&gt;
&lt;p&gt;Part I is about making sure you know &lt;em&gt;why&lt;/em&gt; becoming gile is important and beneficial to you and your work environment. It will teach you how to promote &lt;em&gt;Scrum&lt;/em&gt;, its advantages and challenges, and the different ways to go about it: Start Small or Go All In? Stealth or Public Display? Things like that. Pointless theory? Not really: everything is well documented, with success stories to support one way or the other.&lt;/p&gt;

&lt;/div&gt;	 

	&lt;div class="section"&gt;
&lt;h4 id="h_3"&gt;Part II: Individuals&lt;/h4&gt;
&lt;p&gt;This part was very interesting from a psychological point of view: it deals with individuals and their possible reactions to becoming &lt;em&gt;agile&lt;/em&gt;. You&amp;#8217;ll meet &lt;em&gt;skeptics&lt;/em&gt;, &lt;em&gt;followers&lt;/em&gt;, &lt;em&gt;saboteurs&lt;/em&gt; and &lt;em&gt;diehards&lt;/em&gt; &amp;#8212; no hope? Well, of course not: you&amp;#8217;ll learn how to deal with each one of them in the best way possible. This part will also introduce you to new roles and responsabilities related to &lt;em&gt;Scrum&lt;/em&gt;.&lt;/p&gt;

&lt;/div&gt; 

	&lt;div class="section"&gt;
&lt;h4 id="h_4"&gt;Part III: Teams&lt;/h4&gt;
&lt;p&gt;Up next, Teams. You&amp;#8217;re no longer dealing with single-minded individuals, but with more complex groups. New challenges emerge, mostly related to communication and people interactions. I particularly enjoyed &lt;strong&gt;Chapter 13 &amp;#8212; The Product Backlog&lt;/strong&gt;, which provides invaluable insights on this important everyday tool. &lt;strong&gt;Chapter 15 &amp;#8212; Planning&lt;/strong&gt; is another interesting read: it teaches you a lot about planning vs. estimating, and coming to compromises to meet deadlines.&lt;/p&gt;

&lt;/div&gt; 

	&lt;div class="section"&gt;
&lt;h4 id="h_5"&gt;Part IV: The Organization&lt;/h4&gt;
&lt;p&gt;If you made it up to here, then you&amp;#8217;re nearly done. You probably know most of the tricks by now, but there&amp;#8217;s still a lot to learn. &lt;strong&gt;Chapter 17 &amp;#8212; Scaling &lt;em&gt;Scrum&lt;/em&gt;&lt;/strong&gt; is definitely worth reading, even just for the analysis between &lt;em&gt;formal&lt;/em&gt; and &lt;em&gt;informal communities&lt;/em&gt;, while &lt;strong&gt;Chapter 19 &amp;#8212;Cohexisting with Other Approaches&lt;/strong&gt; almost feels heretical at times: mixing &lt;em&gt;Scrum&lt;/em&gt; with Waterfall? Is that even conceivable? Yes. Sometimes it&amp;#8217;s the only way, especially when you have to deal with compliance to standards like ISO9001. Once again, the author has a nice success story on how a company passed an ISO9001 audit by providing documentation in form of photocopied notes and by adding a single failing test to persuade the auditor that the automated test suite was not rigged. Priceless.&lt;/p&gt;

&lt;/div&gt; 

	&lt;div class="section"&gt;
&lt;h4 id="h_6"&gt;Part V: Next Steps&lt;/h4&gt;
&lt;p&gt;Only two chapters in this part of the book, which mainly deals with (self) assessment and progress analysis. Still worth a read, but you can safely leave it out for when you succeeded with &lt;em&gt;agile&lt;/em&gt;.&lt;/p&gt;

&lt;/div&gt;

&lt;/div&gt; 

&lt;div class="section"&gt;
&lt;h3 id="h_7"&gt;Technical Analysis&lt;/h3&gt;
&lt;p&gt;I&amp;#8217;m not exaggerating when I say that this is &lt;em&gt;by far&lt;/em&gt; the best book I&amp;#8217;ve read in the past few years when it comes to the way it is organized. Start by reading the &lt;a href="http://my.safaribooksonline.com/9780321660534?portal=informit"&gt;table of contents&lt;/a&gt;: if you take each chapter out and make a bulletted list of each section you&amp;#8217;ll end up with a handy (and free!) cheat sheet on how to promote and adopt Agile methodologies.&lt;/p&gt;
&lt;p&gt;This doesn&amp;#8217;t mean the book isn&amp;#8217;t a worthwhile read, but rather that it can also be used as a reference when needed.&lt;/p&gt;

&lt;div class="section"&gt;
&lt;h4 id="h_8"&gt;Formatting and Readability&lt;/h4&gt;
&lt;p&gt;From a technical writing point of view, this book is spotless. I should keep it on my desk to remind me how technical documentation should be written, except that&amp;#8230; it&amp;#8217;s not a technical manual of course. But the formatting and the way content is laid out can make the most skilled technical writer very jealous: there&amp;#8217;s never a huge blob of boring text, never a series of pointless pictures: Mike Cohn (or his editors) did a terrific job composing this book.&lt;/p&gt;
&lt;p&gt;You can start reading it from any point and it still makes sense, diagrams are simple and clear, and yet extremely useful, and so are the reference tables and spreadsheets. They never hurt, they are always in the right place, at the right time. And bold text is aptly used at the start of list items, so that even if you skim through the key concepts will still make it to your brain. Excellent.&lt;/p&gt;

&lt;/div&gt;

&lt;div class="section"&gt;
&lt;h4 id="h_9"&gt;Style and Contents&lt;/h4&gt;
&lt;p&gt;Reading this book is like listening to a seminar hold by some charismatic icon like &lt;a href="http://en.wikipedia.org/wiki/David_Allen_(author)"&gt;David Allen&lt;/a&gt; or &lt;a href="http://en.wikipedia.org/wiki/JoAnn_Hackos"&gt;JoAnn Hackos&lt;/a&gt;: you never get bored, and you constantly learn something. Mike&amp;#8217;s informal and conversational style is one of the main reasons why you should read this book instead of others on the subject: he is a great communicator, and he knows how to make his point across.&lt;/p&gt;
&lt;p&gt;As an added value, Mike also uses two types of &lt;em&gt;boxes&lt;/em&gt; throughout the book:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;strong&gt;Things to try now&lt;/strong&gt; &amp;#8212; Whenever a new strategy or practice is introduced, you&amp;#8217;ll find one of these boxes containing a bulleted list. &lt;em&gt;&amp;#8220;Commit to running the next two or three sprints without any overtime&amp;#8221;&lt;/em&gt;, &amp;#8220;Do you understand what motivates every other person on your team? If not, find out. How? Ask them.&amp;#8221;, &amp;#8230; these are just examples of some of the author&amp;#8217;s reccommendations to put you in the right track.&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Objection&lt;/strong&gt; &amp;#8212; Either actual quotes from customers and employees, or possible statements which may come out throughout the process of adopting &lt;em&gt;Scrum&lt;/em&gt;. Things like &lt;em&gt;&amp;#8220;If the product includes less than what we&amp;#8217;ve planned, no one will buy it&amp;#8221;&lt;/em&gt;, or &lt;em&gt;&amp;#8220;My team won&amp;#8217;t self organize; team members are too passive and look to me to lead&amp;#8221;&lt;/em&gt;, &amp;#8230; of course, what makes these objection boxes valuable is not the statement themselves, but the tips on how what to do about them. There&amp;#8217;s not a single one left unanswered: you really feel you&amp;#8217;re covered in any situation.&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;

&lt;/div&gt;

&lt;div class="section"&gt;
&lt;h3 id="h_10"&gt;Final Thoughts&lt;/h3&gt;
&lt;p&gt;I really enjoyed this book. It took me ages to read it, not only because it&amp;#8217;s quite long (450 pages), but also because it&amp;#8217;s very dense of information. Another author could have made it three times longer, but I was glad Mike didn&amp;#8217;t. I&amp;#8217;m pretty certain I&amp;#8217;ll keep it near me and read bits from it when I need to: it&amp;#8217;s pretty much the Bible of &lt;em&gt;Scrum&lt;/em&gt; adoption.&lt;/p&gt;
&lt;p&gt;What&amp;#8217;s wrong with it then? Not much. Perhaps the only thing I really missed was an introductory 50-page-chapter on &lt;em&gt;Scrum&lt;/em&gt; and &lt;em&gt;agile&lt;/em&gt;. I know this is not meant to be a book for beginners, but some basic glossary or &lt;em&gt;Scrum&lt;/em&gt; cheat sheet would have made it accessible to an even wider audience, at virtually no cost for the author or the readers, who could have just skipped that part.&lt;/p&gt;
&lt;p&gt;Anyhow, I give it a 9 out of 10.&lt;/p&gt;

&lt;/div&gt;

&lt;/div&gt;</description>
      <pubDate>Sun, 25 Apr 2010 12:16:28 -0000</pubDate>
      <guid>http://www.h3rald.com/articles/succeeding-with-agile-review/</guid>
      <link>http://www.h3rald.com/articles/succeeding-with-agile-review/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/succeeding-with-agile-review/#comments</comments>
      <category>review</category>
      <category>productivity</category>
      <category>books</category>
      <category>software</category>
    </item>
    <item>
      <title>Book Review: Refactoring - Ruby Edition</title>
      <description>&lt;p&gt;Refactoring, like testing, is an activity that should be very familiar to all programmers, especially Rubyists. Actually, programs written in Ruby don&amp;#8217;t need as many refactorings as, say, Java programs. However Rubyists are traditionally more &lt;span class="caps"&gt;TDD&lt;/span&gt; oriented and they like writing clear and elegant code.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.informit.com/store/product.aspx?isbn=0321603508"&gt;Refactoring: Ruby Edition&lt;/a&gt; is actually a rewrite of the more revolutionary &amp;#8212; at the time &amp;#8212; &lt;a href="http://www.informit.com/store/product.aspx?isbn=0201485672"&gt;Refactoring: Improving the Design of Existing Code&lt;/a&gt;, written by Martin Fowler &amp;amp; others to teach Java programmers about refactoring. Jay Fields and others decided to &lt;em&gt;port&lt;/em&gt; this historical title to Ruby to fill a gap: there was no authoritative book about refactoring for this language, so what&amp;#8217;s better than translating the Bible on the subject?&lt;/p&gt;
&lt;p&gt;If you already own the Java book you shouldn&amp;#8217;t buy this one. This is not my personal opinion (I never read the original), it&amp;#8217;s actually written in the Preface of the book itself. I really like honest authors, and luckily this seems to have become a trend, lately: programmers don&amp;#8217;t like reading bullshit after all. By the authors&amp;#8217; own admission, this book contains roughly the same material and the same examples of the original Java book, plus some slightly more Ruby-specific content.&lt;/p&gt;
&lt;h3&gt;Getting started&lt;/h3&gt;
&lt;p style="float:right;"&gt;&lt;img src="/img/pictures/refactoring-ruby-ed.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;The first chapter, &lt;em&gt;Refactoring, a first example&lt;/em&gt;, is not a first chapter. Well, it is in a literal sense, but it doesn&amp;#8217;t look like one: no theory, no padding, you&amp;#8217;re immediately thrown in the middle of the battle, dealing with a small program in desperate need of refactoring. It literally contains quite a lot of code: the same program is rewritten over and over with changes in bold to teach you what refactoring means. The most intimidating thing is reading names of refactoring techniques capitalized and used in a natural way, like if the reader was supposed to know them already. In all fairness though, they are self-explanatory most of the time, e.g. &lt;em&gt;Replace Array with Object&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;What makes this chapter even more unusual is the clever usage of white space: &lt;em&gt;before&lt;/em&gt; and &lt;em&gt;after&lt;/em&gt; code snippets are shown on separate page, which makes it much more immediate to see the changes in code (but it won&amp;#8217;t work very well if you bought the ebook instead of the hardback).&lt;/p&gt;
&lt;p&gt;By contrast, the second chapter &lt;em&gt;Principles in Refactoring&lt;/em&gt; is all about theory: it should have been the first chapter, but it&amp;#8217;s better this way. Here you&amp;#8217;ll learn the basics: a bit of history, when to refactor and when not to, and so on. I bet it was taken almost verbatim from the Java book; see for example: &lt;em&gt;&amp;#8220;[&amp;#8230;] If your building APIs for outsid consumption, as &lt;strong&gt;Sun&lt;/strong&gt; does [&amp;#8230;]&amp;#8221;&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Chapter 3, &lt;em&gt;Bad Smells in Code&lt;/em&gt;, is probably the most important and useful chapter in the entire book. It&amp;#8217;s somethig you should read over and over until you can spot a code smell right after coding.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;#8220;You should use this chapter and the table on the inside back cover as a way to give you inspiration whn you&amp;#8217;re not sure what refactorings to do.&amp;#8221;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Precisely what you have to do. Except that there is no table on the inside back cover, so I guess &lt;a href="http://docs.google.com/viewer?url=http://www.industriallogic.com/papers/smellstorefactorings.pdf"&gt;this one&lt;/a&gt; will have to do. Pity.&lt;/p&gt;
&lt;p&gt;Chapter 4, &lt;em&gt;Building Tests&lt;/em&gt;, is the usual, compulsory chapter about unit testing, i.e. the usual intro to Test::Unit. As I said, it&amp;#8217;s essential for the book to make sense, but you can safely skip it if you know how to test already.&lt;/p&gt;
&lt;p&gt;Finally, chapter 5 (&lt;em&gt;Toward a Catalog of Refactoring&lt;/em&gt;) is a 2.5 page intro to the bulk of the book, nothing more than glue to ease the transition. I would have removed it completely, but that&amp;#8217;s because I&amp;#8217;m a merciless technical writer I guess.&lt;/p&gt;
&lt;h3&gt;Diving in&lt;/h3&gt;
&lt;p&gt;From chapter 6 onwards, specific refactoring techniques are described. Each chapter starts with a brief overview of the following sections (which should have been a list, but I&amp;#8217;m just being pedantic now), so you know what to expect.&lt;/p&gt;
&lt;p&gt;Each technique described has a very meaningful and immediate name that reflects its purpose, like Extract Method or Split Temporary Variable. A code example introduces the code smell and the proposed refactoring, followed by a &lt;em&gt;Mechanics&lt;/em&gt; section with a list of actions to perform and an explanatory &lt;em&gt;Motivation&lt;/em&gt; section.&lt;/p&gt;
&lt;p&gt;Tipically, each refactoring has its own, self-contained code snippets. Depending on the complexity of the refactoring technique examined, the authors may spend half to five or six pages just to show all code iterations to get to the result. When things get too complicated, &lt;span class="caps"&gt;UML&lt;/span&gt; diagrams are used to make the technique easier to understand, but only when it&amp;#8217;s strictly necessary.&lt;/p&gt;
&lt;p&gt;Even if the original techniques were though for Java, the authors (in particlar Jay Fields, I guess) do a great job making sure that the Ruby code doensn&amp;#8217;t look like Java code in disguise: the result of the refactoring always follows Ruby&amp;#8217;s philosophy and idioms. I particularly liked the following:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Replace Dynamic Receptor with Dynamic Method Definition (Chapter 6), a nice example of metaprogramming.&lt;/li&gt;
	&lt;li&gt;Decompose Conditional/Recompose Conditional (Chapter 9), very useful and very common&lt;/li&gt;
	&lt;li&gt;Replace Nested Conditional with Guard Clause (Chapter 9), another way to deal with a very common problem with conditionals&lt;/li&gt;
	&lt;li&gt;Extract Module (Chapter 11), very Rubyesque way to tidy up busy classes&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This doesn&amp;#8217;t mean that &lt;em&gt;every&lt;/em&gt; refactoring described in the book is a programmer&amp;#8217;s epiphany, some of the techniques are indeed pretty obvious and some portion of code in need of refactoring indeed smell very, very bad! E.g.:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Inline Class (Chapter 7): Who on Earth would ever create a class containing a single method returning a telephone number?&lt;/li&gt;
	&lt;li&gt;Replace Magic Number with Symbolic Constant (Chapter 8): Why would you use integers for constants? Didn&amp;#8217;t Matz give us Symbols to avoid just that?&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;The big picture&lt;/h3&gt;
&lt;p&gt;By the end of chapter 11 you should be familiar with nearly all the best possible way to get rid of code smells. That&amp;#8217;s all good, but what happens if &lt;em&gt;the entire program&lt;/em&gt; stinks? Chapter 12 (&lt;em&gt;Big Refactorings&lt;/em&gt;) claims to have some answers to some common pitfalls. The techniques defined in this chapter are by no means sufficient to solve all problems caused by bad design, but they can help especially to rewrite legacy code, or programs developed by Ruby newbies:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Tease Apart Inheritance&lt;/li&gt;
	&lt;li&gt;Convert procedural design to objects&lt;/li&gt;
	&lt;li&gt;Separate domain from presentation&lt;/li&gt;
	&lt;li&gt;Extract hierarchy&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;They are basically all about reducing bloat and unnecessary complexity, and &amp;#8212; to me, that is &amp;#8212; they all sounded pretty obvious. &lt;em&gt;Of course&lt;/em&gt; I&amp;#8217;m going to separate domain from presentation! Didn&amp;#8217;t Rails teach us anything at all? I must say I was somehow disappointed by this chapter. I was going to bet there was something slightly more advanced, maybe something about replacing traditional object instantiation with an internal &lt;span class="caps"&gt;DSL&lt;/span&gt;? Nope, sorry.&lt;/p&gt;
&lt;p&gt;Chapter 13, on the other hand, is an excellent conclusion to the book: it really helps the reader to understand when to refactor and how to do so, depending on the situation.&lt;/p&gt;
&lt;h3&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;This and &lt;a href="http://www.h3rald.com/articles/design-patterns-in-ruby-review/"&gt;Design Patterns in Ruby&lt;/a&gt; are now my favorite Ruby books. I believe they complete each other: Russ Olsen&amp;#8217;s book is more about designing your programs properly from the start, while &lt;em&gt;Refactoring: Ruby Edition&lt;/em&gt; can help to make things better at a lower level. &lt;br /&gt;
Ruby developers don&amp;#8217;t need to refactor as much as Java developers, mainly because of Ruby itself, nevertheless, this is an excellent read for anyone who wants to get serious about programming in Ruby, and is determined to do so by following the Ruby Way.&lt;/p&gt;
&lt;p&gt;I&amp;#8217;ll definitely keep this book near me when I&amp;#8217;m coding: I do believe it is much more helpful when you start using it as a reference, when you already read about all the refactoring techniques and want to put them in practice. Also, I&amp;#8217;ll probably re-read chapter 3 on a regular basis, to get accustomed to recognize code smells, and deal with them accordingly.&lt;/p&gt;</description>
      <pubDate>Fri, 22 Jan 2010 14:40:36 -0000</pubDate>
      <guid>http://www.h3rald.com/articles/refactoring-ruby-edition-review/</guid>
      <link>http://www.h3rald.com/articles/refactoring-ruby-edition-review/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/refactoring-ruby-edition-review/#comments</comments>
      <category>ruby</category>
      <category>books</category>
      <category>review</category>
    </item>
    <item>
      <title>Book Review: The Merb Way</title>
      <description>&lt;p&gt;When I first picked up this book I was surprised by its length. Somehow, after reading &lt;a href="/articles/the-rails-way-review"&gt;The Rails Way&lt;/a&gt;, I got stuck in my mind that &lt;a href="http://my.safaribooksonline.com/9780321601636"&gt;The Merb Way&lt;/a&gt; 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 &lt;em&gt;ActiveRecord&lt;/em&gt; in Obie Fernandez&amp;#8217;s acclaimed Rails bible.&lt;/p&gt;
&lt;p&gt;Apparently it only takes 300 pages to describe a web framework nowadays! I couldn&amp;#8217;t help but feeling a bit skeptical at first. Even in the foreword, Obie Fernandez presents the book &amp;ndash; and the whole &lt;a href="http://www.merbivore.com"&gt;Merb&lt;/a&gt; framework &amp;ndash; with some initial skepticism: isn&amp;#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 &lt;a href="http://weblog.rubyonrails.org/2008/12/23/merb-gets-merged-into-rails-3"&gt;merged into Rails 3&lt;/a&gt;, why on Earth do we need a book about Merb, &lt;em&gt;now&lt;/em&gt;?&lt;/p&gt;
&lt;p&gt;Needless to say, Foy Savas proved that both Merb and its book cannot be dismissed just like that.&lt;/p&gt;
&lt;h3&gt;Getting started&lt;/h3&gt;
&lt;p style="float:right;"&gt;&lt;img src="/img/pictures/therailsway.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;The book starts with the original &lt;a href="http://pastie.org/14416"&gt;Merb Pastie&lt;/a&gt;, a single page of Ruby code able to sort out &lt;span class="caps"&gt;HTTP&lt;/span&gt; requests, dispatch them to the appropriate controllers and render a web page. This piece of code is enough to convey what Merb is: a new breed of web framework, almost as simple as it can get but very poweful and flexible at the same time.&lt;/p&gt;
&lt;p&gt;As you start diving in through the first chapter, you realize you&amp;#8217;re reading about a &lt;em&gt;Hacker&amp;#8217;s Web Framework&lt;/em&gt;. That&amp;#8217;s precisely what Merb is: a very versatile tool to get the job done, in the simplest way possible. Similarly, &lt;em&gt;The Merb Way&lt;/em&gt; immediately feels like a &lt;em&gt;Hacker&amp;#8217;s Handbook&lt;/em&gt; rather than an ordinary guide on how to develop web applications. You won&amp;#8217;t learn what &lt;span class="caps"&gt;MVC&lt;/span&gt; is by reading this book, and don&amp;#8217;t expect to be taught what a &lt;em&gt;mixin&lt;/em&gt; is; you are reading a book about a Ruby web framework that was born after the &lt;em&gt;Rails Revolution&lt;/em&gt;, so it is safe (for the author) to assume that:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;You know the Ruby programming language&lt;/li&gt;
	&lt;li&gt;You know what Ruby on Rails is and you tried it out, at the very least&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The first few chapters are about the core functionalities provided by an an &lt;span class="caps"&gt;MVC&lt;/span&gt; framework: after a comprehensive first chapter about Merb&amp;#8217;s fundamentals (from the layout of a Merb application to an overview of Merb internals) you are quite abruptly &amp;#8220;introduced&amp;#8221; to routing, controllers, views and models. These chapters do not aim to provide a comprehensive description of each component, they simply tell you: &lt;em&gt;here&amp;#8217;s how Merb does this&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Out of the first five chapters, favorite is definitely the one about &lt;em&gt;Models&lt;/em&gt;. Although Merb is &lt;span class="caps"&gt;ORM&lt;/span&gt;-agnostic, DataMapper is the &lt;em&gt;de facto standard&lt;/em&gt; for Merb applications, and it fully embrace the framework&amp;#8217;s design and extreme flexibility without being &lt;em&gt;in the way&lt;/em&gt; of your code.&lt;br /&gt;
Foy does an excellent job in this chapter by strategically describing DataMapper&amp;#8217;s code from the top to the very bottom, from the highest abstractions to raw &lt;span class="caps"&gt;SQL&lt;/span&gt; code, using a plethora of snippets taken from the actual Merb code.&lt;/p&gt;
&lt;h3&gt;It&amp;#8217;s about how Merb works, not how to work with Merb&lt;/h3&gt;
&lt;p&gt;After reading the &lt;em&gt;Models&lt;/em&gt; chapter I decided to go back and re-examine the previous chapters. I didn&amp;#8217;t notice until then, but the author sneakily &lt;em&gt;smuggled&lt;/em&gt; a consistent amount of Merb source code into this book. This is rather unusual for books about web frameworks: they normally tell you how to use the framework, not how it was built! While this can be disappointing for people used to read Rails books, it came as a very pleasant surprise to me.&lt;/p&gt;
&lt;p&gt;About 40-50% of this entire book (and I&amp;#8217;m not exaggerating) is Ruby source code. In a good way, it feels like a collection of strategically-positioned code snippets glued together with explanations of the most tricky bits and digressions on how the framework was &lt;em&gt;designed&lt;/em&gt;. In other words, it probably contains just enough text to make sure that the average reader understands the code, but remember that the &lt;em&gt;average reader&lt;/em&gt; of this book must know Ruby failry well.&lt;/p&gt;
&lt;p&gt;There is no pointless prose in this book, no explanations of obvious methods, no fancy words, no useless boasting on how cool the framework is: just an objective description of how Merb works and of the key design decisions behind it. If I may, the only thing that doesn&amp;#8217;t feel quite right with this book is its title: &lt;em&gt;Merb Internals&lt;/em&gt; would have been a better choice. Once you realize this, the book suddenly makes sense, and can even make you a better Ruby programmer.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;The Merb Way&lt;/em&gt; does an excellent job in describing how to design a web framework, or any real-world Ruby application for that matter. It teaches you that modularity is the key to flexibility by showing how the Merb stack is organized. Sure, it doesn&amp;#8217;t teach you how to create a blog in five minutes, but perhaps a thorough explanation of how anthentication is implemented (Chapter 9) will actually be useful in two months time, when you&amp;#8217;ll have to create your own Merb plugin from scratch.&lt;/p&gt;
&lt;h3&gt;Some constructive criticism&lt;/h3&gt;
&lt;p&gt;The idea behind this book is clever but a bit dangerous. I flipped through the pages in front of my wife and asked her what was wrong with it. &lt;em&gt;&amp;#8220;There&amp;#8217;s too much code!&amp;#8221;&lt;/em&gt; she said, without hesitation. Precisely.&lt;/p&gt;
&lt;p&gt;It is damn good Ruby code, but sometimes you wish there was more text describing how to use it in practice. Or maybe some code examples on &lt;em&gt;using&lt;/em&gt; the framework on a real-world application. Not a chance. Of all that holy code, there&amp;#8217;s not much featuring something other than Merb itself. Basically the exact opposite of all the other books about Rails or other web frameworks!&lt;/p&gt;
&lt;p&gt;Even accepting the fact that you are not reading a book about developing web applications, there are two more things which could be improved:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Merb&amp;#8217;s design is very intriguing, and you grasp the essentials by reading this book, but a few diagrams here and there and more in-depth digressions on the subjects would have been nice.&lt;/li&gt;
	&lt;li&gt;Besides DataMapper, what I really wanted to read about were Slices and Parts &amp;ndash; unfortunately the chapters about them are far too short and shallow. The reasoning behind this is that &lt;em&gt;their future may be uncertain&lt;/em&gt; due to the Rails 3 merge. Pity.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;The death of Merb has been greatly exaggerated. Too bad I &lt;a href="/articles/take-back-your-site-with-nanoc/"&gt;gave up web frameworks altogether&lt;/a&gt; for my site, because after reading this book I would have gone for Merb &lt;em&gt;today&lt;/em&gt; rather than waiting to see the wonders of Rails 3 &lt;em&gt;tomorrow&lt;/em&gt;. Even a book with this title could have been written in a very different way, I would still recommend it if you want to become a better Ruby programmer by learning from the best: Merb code really stands out, even compared to Rails, and Foy Savas does a great job presenting and describing it.&lt;/p&gt;</description>
      <pubDate>Tue, 17 Nov 2009 10:15:36 -0000</pubDate>
      <guid>http://www.h3rald.com/articles/the-merb-way-review/</guid>
      <link>http://www.h3rald.com/articles/the-merb-way-review/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/the-merb-way-review/#comments</comments>
      <category>ruby</category>
      <category>books</category>
      <category>review</category>
    </item>
    <item>
      <title>JournoTwit - The best way to organize your tweets</title>
      <description>&lt;p&gt;Since I started using &lt;a href="http://www.twitter.com"&gt;Twitter&lt;/a&gt; on a regular basis, I felt overwhelmed by the endless stream of data generated by the people I was following.&lt;/p&gt;
&lt;p&gt;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&amp;#8217;t fancy the idea of keeping the &lt;em&gt;same&lt;/em&gt; client up-to-date everywhere &amp;#8212; even if such client existed.&lt;/p&gt;
&lt;p&gt;Over the past months I tried dozens of different web-based Twitter clients, and narrowed the list of &lt;em&gt;must-have&lt;/em&gt; features to the following:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;The interface should be simple to use and not too cluttered.&lt;/li&gt;
	&lt;li&gt;I should be able to categorize tweets in columns (&amp;agrave; la TweetDeck).&lt;/li&gt;
	&lt;li&gt;I should be able to know, when visiting the site, how many &lt;em&gt;new&lt;/em&gt; tweets I have to go through.&lt;/li&gt;
	&lt;li&gt;I should be able to mark tweets as read.&lt;/li&gt;
	&lt;li&gt;It should display media files (at least pictures) inline with the tweets.&lt;/li&gt;
	&lt;li&gt;The interface should provide all the most common twitter actions like reply, retweet, follow/unfollow, shorten url, upload pictures etc. etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The good news is that I found at least &lt;em&gt;one&lt;/em&gt; web-based client able to do all this: &lt;a href="http://www.journotwit.com"&gt;JournoTwit&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Introducing JournoTwit&lt;/h3&gt;
&lt;p&gt;JournoTwit was born &amp;ndash; as many software projects &amp;ndash; to scratch an itch:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Probably the last thing anyone was expecting me to do &amp;mdash; even myself, was to create my own twitter client. However, I&amp;#8217;ve been a little fed up with not having the features I wanted and running 5 or 6 accounts, I was getting annoyed at using several different applications just to have them logged in concurrently. [&amp;#8230;] In under 24 hours I put together a twitter client that functioned enough for me to call it my one and only. A few more days and I added in enough features that I felt it was good enough for public consumption. It is however, not perfect and I have plenty of improvements on my to do list for it.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p style="padding-left:3em;"&gt;&lt;cite&gt;&lt;a href="http://www.spodesabode.com/discussion/280/journotwit-the-twitter-client-thats-not-just-for-journalists/"&gt;JournoTwit&amp;#8217;s introductory post&lt;/a&gt;&lt;/cite&gt; by Andrew Spode Miller (&lt;a href="http://twitter.com/spode"&gt;@spode&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;After months of &lt;em&gt;public consumption&lt;/em&gt;, JournoTwit became a feature-packed Twitter client able to compete with a lot of mainstream alternatives &amp;ndash; albeit remaining always relatively unknown to the masses. You can call it a &lt;em&gt;niche&lt;/em&gt; Twitter client, able to satisfy a few basic needs:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;The ability to manage multiple Twitter accounts at once.&lt;/li&gt;
	&lt;li&gt;The ability to categorize all incoming tweets automatically, according to the type of information within them.&lt;/li&gt;
	&lt;li&gt;The ability to keep track of unread tweets.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These three features alone were enough to make JournoTwit my one and only Twitter client. And no, it&amp;#8217;s not only for journalists and writers.&lt;/p&gt;
&lt;h3&gt;Interface overview&lt;/h3&gt;
&lt;p&gt;After logging in, JournoTwit looks like this:&lt;/p&gt;
&lt;p&gt;&lt;img src="/img/pictures/journotwit/interface.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Note:&lt;/b&gt; I am using the &lt;em&gt; &lt;a href="http://www.journotwit.com/edge/"&gt;edge&lt;/a&gt; &lt;/em&gt; version of JournoTwit, a sort of development snapshot with the latest features.&lt;/p&gt;
&lt;p&gt;At the top, some more-or-less intuitive icons allow you to perform all the most common &lt;em&gt;global&lt;/em&gt; actions:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Tweet&lt;/li&gt;
	&lt;li&gt;Manual refresh&lt;/li&gt;
	&lt;li&gt;Mark all columns as read&lt;/li&gt;
	&lt;li&gt;Add new columns&lt;/li&gt;
	&lt;li&gt;Quick search&lt;/li&gt;
	&lt;li&gt;Edit settings&lt;/li&gt;
	&lt;li&gt;Logout&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Next to this global toolbar, there&amp;#8217;s a list of links, each corresponding to a column. Clicking a link toggles the visibility of the corresponding column.&lt;/p&gt;
&lt;p&gt;In each column, tweets are displayed in different column according to their state:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Read&lt;/li&gt;
	&lt;li&gt;Unread&lt;/li&gt;
	&lt;li&gt;Selected&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You can select one tweet at a time by clicking the &lt;strong&gt;+&lt;/strong&gt; icon. This toggles the tweet-specific actions:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Reply&lt;/li&gt;
	&lt;li&gt;Send a direct message&lt;/li&gt;
	&lt;li&gt;Save as favorite&lt;/li&gt;
	&lt;li&gt;Retweet&lt;/li&gt;
	&lt;li&gt;Translate&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pretty intuitive and easy to use, so far.&lt;/p&gt;
&lt;h3&gt;Default columns&lt;/h3&gt;
&lt;p&gt;When you login, you&amp;#8217;ll notice that all your tweets are &lt;em&gt;not&lt;/em&gt; presented in the traditional, disorganized single-column stream layout. Instead, they are &lt;em&gt;sorted automatically&lt;/em&gt; into different columns, according to their type:&lt;/p&gt;
&lt;dl&gt;
	&lt;dt&gt;My Feed&lt;/dt&gt;
	&lt;dd&gt;All the tweets &lt;em&gt;you&lt;/em&gt; sent. By default, this column is minimized.&lt;/dd&gt;
	&lt;dt&gt;No-Mention&lt;/dt&gt;
	&lt;dd&gt;All tweets containing your username without the &amp;#8220;@&amp;#8221;, i.e. every time someone mentions you sneakily, without sending you a reply.&lt;/dd&gt;
	&lt;dt&gt;Messages&lt;/dt&gt;
	&lt;dd&gt;All the direct messages you sent and received.&lt;/dd&gt;
	&lt;dt&gt;Mentions&lt;/dt&gt;
	&lt;dd&gt;All the tweets containing your twitter username (with &amp;#8220;@&amp;#8221;), such as replies to your tweets.&lt;/dd&gt;
	&lt;dt&gt;Statuses&lt;/dt&gt;
	&lt;dd&gt;All the tweets posted by people you follow that do not contain any link or cannot be categorized through other columns.&lt;/dd&gt;
	&lt;dt&gt;News&lt;/dt&gt;
	&lt;dd&gt;All the tweets posted by people you follow containing links to articles or non-multimedia web pages.&lt;/dd&gt;
	&lt;dt&gt;Retweets&lt;/dt&gt;
	&lt;dd&gt;All the retweets posted by people you follow.&lt;/dd&gt;
	&lt;dt&gt;Visual&lt;/dt&gt;
	&lt;dd&gt;All the tweets posted by people you follow containing links to pictures or videos. Where possible, media is displayed inside the tweet.&lt;/dd&gt;
	&lt;dt&gt;Audio&lt;/dt&gt;
	&lt;dd&gt;Same as above, but for audio items.&lt;/dd&gt;
	&lt;dt&gt;Chatter&lt;/dt&gt;
	&lt;dd&gt;Attempts to collect all conversations involving you or people you follow.&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;Surprisingly, these default columns are enough to make your Twitter experience easier and more manageable, without configure a single setting. They&amp;#8217;re obviously not perfect: some images are not resolved automatically, for example, but it works well otherwise.&lt;/p&gt;
&lt;p&gt;Still this may not be enough for your needs or maybe simply not the right thing. No problem: JournoTwit is extremely flexible when it comes to organizing and sorting out your tweets.&lt;/p&gt;
&lt;h3&gt;Adding new columns&lt;/h3&gt;
&lt;p&gt;All columns except for &lt;em&gt;Mentions&lt;/em&gt; and &lt;em&gt;Messages&lt;/em&gt; can be modified as you see fit. These two columns cannot be modified simply because there&amp;#8217;s nothing you &lt;em&gt;need&lt;/em&gt; to modify it, if you think about it. But they can be deleted, of course (and re-created in a blink, if you delete them by mistake).&lt;/p&gt;
&lt;p&gt;Let&amp;#8217;s go through the slightly geeky process of creating a column.&lt;/p&gt;
&lt;p&gt;When you click the &lt;b&gt;Add New Columns&lt;/b&gt; icon on the top-left corner you&amp;#8217;ll be prompted to further clarify whether you want to add a&amp;#8230;&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Set of Columns: i.e. the default columns provided by journotwit &lt;em&gt;or&lt;/em&gt; a single column containing all the tweets. Useful if you mess things up and you want to start over again.&lt;/li&gt;
	&lt;li&gt;Preset Column: choose from many different columns according to your needs, from different tweet types to memes (#followfriday, #musicmonday, etc.).&lt;/li&gt;
	&lt;li&gt;Custom Column: create your own personal column, according to your specific needs.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Because the overwhelming majority of my readers is composed by geeks, I&amp;#8217;ll just describe how to create a custom column, so that you can fully understand the power of this tool, in the right hands.&lt;/p&gt;
&lt;h3&gt;Adding a custom column&lt;/h3&gt;
&lt;p style="float:right;"&gt;&lt;img src="/img/pictures/journotwit/custom_column.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;The creation of a custom column doesn&amp;#8217;t take long, but there are quite a few things you can configure. First off, you have to specify whether you want the column to collect &lt;em&gt;local&lt;/em&gt; or &lt;em&gt;global&lt;/em&gt; tweets: local means the people you follow, while global means everyone on the planet. Simple enough.&lt;/p&gt;
&lt;p&gt;Then comes the juicy geeky part: search terms and tags. Simply type a valid &lt;a href="http://search.twitter.com/operators"&gt;Twitter Search query&lt;/a&gt; in the textbox, so something like this:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;from:jonobacon OR #ubuntu -jaunty&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&amp;#8230;will hopefully fetch all tweets posted by &lt;a href="http://www.twitter.com/jonobacon"&gt;@jonobacon&lt;/a&gt; or tweets about Ubuntu, but not related to the Jaunty Jackalope release. You can also add more text box and thus perform more search queries within the same column.&lt;/p&gt;
&lt;p&gt;Then you can filter by tweet type, enabling or disabling Statuses, Visual, Links, Audio, ReTweets and Chatter. Useful to remove the noise (if you follow &lt;a href="http://www.twitter.com/brentspiner"&gt;@brentspiner&lt;/a&gt;, make sure you disable &lt;em&gt;ReTweets&lt;/em&gt;&amp;#8230;).&lt;/p&gt;
&lt;p&gt;Finally, you only have to configure a few more settings:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Whether you want to be alerted with a &lt;em&gt;beep&lt;/em&gt; when there are new tweets in this column.&lt;/li&gt;
	&lt;li&gt;Whether you want the column to display tweets, a tag cloud or even an image slideshow.&lt;/li&gt;
	&lt;li&gt;The name of the column.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That&amp;#8217;s all. Simple enough. As a side note, the &amp;#8220;No-Mention&amp;#8221; column is nothing but a custom column in disguise: if you try to edit it, you&amp;#8217;ll see it&amp;#8217;s nothing but a search for &amp;#8220;&lt;em&gt;username&lt;/em&gt; -&lt;em&gt;@username&lt;/em&gt; -from:&lt;em&gt;username&lt;/em&gt;&amp;#8221;.&lt;/p&gt;
&lt;h3&gt;Other features and advanced settings&lt;/h3&gt;
&lt;p&gt;For the tweakers, JournoTwit also exposes the a set of global settings you can modify to enhance your experience or disable annoying behaviors (depends how you look at it):&lt;/p&gt;
&lt;h4&gt;Behavior&lt;/h4&gt;
&lt;ul&gt;
	&lt;li&gt;Unhide column when new tweets arrive? (default: yes)&lt;/li&gt;
	&lt;li&gt;Hide columns on Mark as Read? (default: yes)&lt;/li&gt;
	&lt;li&gt;Play alert sounds? (default: yes)&lt;/li&gt;
	&lt;li&gt;Animate when new items arrive? (default: yes)&lt;/li&gt;
	&lt;li&gt;Default #hashtags and search bar to a local search? (default: no)&lt;/li&gt;
	&lt;li&gt;Ignore Tag Coulds when marking all as read? (default: yes)&lt;/li&gt;
	&lt;li&gt;Ignore Slide Shows when marking all as read? (default: yes)&lt;/li&gt;
	&lt;li&gt;Warn when deleting columns? (default: yes)&lt;/li&gt;
	&lt;li&gt;Automatically translate tweets using Google Translate? (default: no)&lt;/li&gt;
	&lt;li&gt;Show &amp;#8220;Did You Know?&amp;#8221; messages on refresh? (default: yes)&lt;/li&gt;
	&lt;li&gt;Slide show transition time(s) (default: 5)&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Display Adjustment&lt;/h4&gt;
&lt;p&gt;If you are unsatisfied by JournoTwit&amp;#8217;s default look and feel, you can change the fond size, the color theme (there are 18 possible choices) and even match the color of the icons with the current theme.&lt;/p&gt;
&lt;h4&gt;Black Listing&lt;/h4&gt;
&lt;p&gt;Straight from the contextual help:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;#8220;Here you globally black list a #hashtag, such as #microsoft, or a search phrase such as &amp;#8220;Windows 7&amp;#8221;. Remember to separate them with a space and that you can block on a per column basis too.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This is just what you need when you want to filter out pointless tweets. Use with care though!&lt;/p&gt;
&lt;h3&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;Maybe it&amp;#8217;s just me being a geek, but I think JournoTwit nailed it when it comes to making Twitter more productive: everything &lt;em&gt;just works, and fast&lt;/em&gt;, unlike some of its more feature-boasting competitors. I have been using it on a daily basis for weeks, and I&amp;#8217;ve never missed a single tweet since (unless &lt;em&gt;I explicitly wanted to do so&lt;/em&gt;).&lt;/p&gt;
&lt;p&gt;That being said, there are a few small features I&amp;#8217;d like to see:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;I&amp;#8217;d like to be able to mark &lt;em&gt;single tweets&lt;/em&gt;, not entire columns, as read. In this way, when I go on vacation and come back, I can catch up with unread tweets more gradually, like I do with Google Reader.&lt;/li&gt;
	&lt;li&gt;I&amp;#8217;d like to use shortcut keys to navigate the interface, like with Google Reader.&lt;/li&gt;
	&lt;li&gt;I&amp;#8217;d like to configure tweets so that they only show up in one column, not in more than one (for example in Chatter, My Feed, and Mentions at the same time).&lt;/li&gt;
	&lt;li&gt;Support for Twitter Lists&amp;#8230;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I already told &lt;a href="http://twitter.com/spode"&gt;@spode&lt;/a&gt; about some of these, and he said he&amp;#8217;ll look into it, we&amp;#8217;ll see what happens. Anyhow, just &lt;a href="http://www.journotwit.com"&gt;give it a try&lt;/a&gt;, and see if you like it!&lt;/p&gt;</description>
      <pubDate>Thu, 05 Nov 2009 15:19:17 -0000</pubDate>
      <guid>http://www.h3rald.com/articles/journotwit-review/</guid>
      <link>http://www.h3rald.com/articles/journotwit-review/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/journotwit-review/#comments</comments>
      <category>review</category>
      <category>web20</category>
      <category>internet</category>
      <category>software</category>
    </item>
    <item>
      <title>Book Review: The Rails Way</title>
      <description>&lt;blockquote&gt;
    &lt;p&gt;"Programming books are pointless: you buy them, you read them and you chuck them because they're already out-of-date!"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is a quote from my fianc&#233;e, who always pointed out the ephemeral nature of programming books and therefore &lt;em&gt;highly discouraged me&lt;/em&gt; from buying any more. The sad thing is that this is partly true: if you buy a new programming book it &lt;em&gt;will&lt;/em&gt; eventually become outdated pretty quickly, especially if it's about newish technologies like &lt;a href="http://rubyonrails.org/"&gt;Ruby on Rails&lt;/a&gt;.  &lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;a href="http://www.informit.com/store/product.aspx?isbn=0321445619"&gt;The Rails Way&lt;/a&gt;&lt;/em&gt; is no exception: Rails 2.2 has been out for a while and introduced a few new features &amp;ndash; most notably Internationalization support &amp;ndash; which are not mentioned neither in this book nor in others.&lt;/p&gt;

&lt;p&gt;That being said, &lt;em&gt;The Rails Way&lt;/em&gt; by &lt;a href="http://obiefernandez.com/"&gt;Obie Fernandez&lt;/a&gt; is still the best and most comprehensive book on Rails v2 currently on the market. It's the book you simply cannot afford to ignore, if you are using (or are planning to use) this popular Ruby web framework.&lt;/p&gt;

&lt;h3&gt;Contents&lt;/h3&gt;

&lt;div style="float:right"&gt;&lt;img src="/files/therailsway.jpeg" alt="cover" /&gt;&lt;/div&gt;

&lt;p&gt;Before proceeding any further, I'd like to point out that is probably one of the longest programming books I've ever come across. With its 910 pages, &lt;em&gt;The Rails Way&lt;/em&gt; definitely cannot fit in your pocket and you cannot take it around with you easily. It's a book made to sit on your desk constantly and remain there, ready to be accessed at the right time, when needed. 
Unlike with other books I reviewed, this time I won't even attempt to go through every chapter and every section: it would not be meaningful for the review and it will probably bore you to death. For completeness' sake, however, here's a very trimmed-down table of contents listing &lt;em&gt;only&lt;/em&gt; the first level headings:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Introduction&lt;/li&gt;
&lt;li&gt;Chapter 1 - Rails Environment and Configurations  &lt;/li&gt;
&lt;li&gt;Chapter 2 - Working with Controllers  &lt;/li&gt;
&lt;li&gt;Chapter 3 - Routing  &lt;/li&gt;
&lt;li&gt;Chapter 4 - REST, Resources, and Rails  &lt;/li&gt;
&lt;li&gt;Chapter 5 - Reflecting on Rails Routing  &lt;/li&gt;
&lt;li&gt;Chapter 6 - Working with ActiveRecord  &lt;/li&gt;
&lt;li&gt;Chapter 7 - ActiveRecord Associations  &lt;/li&gt;
&lt;li&gt;Chapter 8 - ActiveRecord Validations  &lt;/li&gt;
&lt;li&gt;Chapter 9 - Advanced ActiveRecord  &lt;/li&gt;
&lt;li&gt;Chapter 10 - ActionView  &lt;/li&gt;
&lt;li&gt;Chapter 11 - All About Helpers  &lt;/li&gt;
&lt;li&gt;Chapter 12 - Ajax on Rails  &lt;/li&gt;
&lt;li&gt;Chapter 13 - Session Management  &lt;/li&gt;
&lt;li&gt;Chapter 14 - Login and Authentication  &lt;/li&gt;
&lt;li&gt;Chapter 15 - XML and ActiveResource  &lt;/li&gt;
&lt;li&gt;Chapter 16 - ActionMailer  &lt;/li&gt;
&lt;li&gt;Chapter 17 - Testing  &lt;/li&gt;
&lt;li&gt;Chapter 18 - RSpec on Rails  &lt;/li&gt;
&lt;li&gt;Chapter 19 - Extending Rails with Plugins  &lt;/li&gt;
&lt;li&gt;Chapter 20 - Rails Production Configurations  &lt;/li&gt;
&lt;li&gt;Chapter 21 - Capistrano  &lt;/li&gt;
&lt;li&gt;Chapter 22 - Background Processing  &lt;/li&gt;
&lt;li&gt;Appendix A ActiveSupport API Reference&lt;/li&gt;
&lt;li&gt;Appendix B Rails Essentials&lt;/li&gt;
&lt;li&gt;Afterword What Is the Rails Way (To You)?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you already know &lt;em&gt;Rails&lt;/em&gt;, these titles will be self-explanatory to you. If not, you'll just have to trust my words when I say that this book covers every possible aspect of the framework, and 99% of the notions you need to know to start developing almost any Rails-powered web application.&lt;/p&gt;

&lt;p&gt;What really pleased me were chapters 17 through 22, i.e. something &lt;em&gt;not&lt;/em&gt; strictly related to Rails Core. Normally, books about Ruby and Ruby on Rails don't deal with anything even a little bit outside their scope: as a result, topics such as Rubygems, RSpec and Capistrano are often not mentioned at all, or if they are, they are relegated to one or two pages at maximum, leaving the reader to look on the Internet for more information. 
By contrast, &lt;em&gt;The Rails Way&lt;/em&gt; covers these ancillary but still very important topics very in-depth. Sure, you won't know the inside-out of RSpec after reading this book (although a whole chapter is devoted to it), but you will certanly know your way around it &lt;em&gt;enough&lt;/em&gt; to use it properly.&lt;/p&gt;

&lt;p&gt;What's missing in this book then? Maybe a &lt;em&gt;Chapter 0&lt;/em&gt; to guide the absolute beginner through the very basics of Rails and Ruby. Probably this goes beyond the scope of the book though, as the author clearly states that the book _"[...] is not a tutorial or basic introduction to Ruby or Rails. It is meant as a day-to-day
reference for the full-time Rails developer. "_. 
Still, 100 pages about the Magic of Scaffolding &amp;amp; other tricks to astonish the children wouldn't have damaged the book, especially considering that Chapter 1 starts at page &lt;em&gt;60&lt;/em&gt; after a lot of &lt;em&gt;pages intentionally left blank&lt;/em&gt;, Introduction, Foreward, Acknowledgements and similar padding material.&lt;/p&gt;

&lt;h3&gt;Organization and writing style&lt;/h3&gt;

&lt;blockquote&gt;
    &lt;p&gt;"Before going on, I should mention that part of what makes Rails exceptional is that it is opinionated software, written by opinionated programmers. Likewise, this is an opinionated book, written by opinionated writers."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This sentence in the &lt;em&gt;Introduction&lt;/em&gt; sounded very familiar. Almost an echo of Zed Shaw's own words in the &lt;em&gt;&lt;a href="http://www.h3rald.com/articles/mongrel-shortcut-review"&gt;Mongrel Digital Shortcut&lt;/a&gt;&lt;/em&gt;. After all this book is part of the &lt;em&gt;&lt;a href="http://www.informit.com/imprint/series_detail.aspx?ser=2124042"&gt;Addison-Wesley Professional Ruby Series&lt;/a&gt;&lt;/em&gt;, of which Obie is the Series Editor.
Like the other books in the series, this book contains all the stylistic conventions and distinctive features which make them very enjoyable to read:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Informal, almost personal style&lt;/em&gt; &amp;ndash; reading this book is almost like hearing Obie telling you what &lt;em&gt;he&lt;/em&gt; thinks about Rails, and sharing with you his own tips and tricks.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Honest, even humble at times&lt;/em&gt; &amp;ndash; This book doesn't glorify Rails or Ruby: on the contrary, pitfalls are acknowledged and dealt with. Rails lacks an inbuilt authentication system? No problem, a whole chapter is devoted to the &lt;em&gt;act_as_authenticated&lt;/em&gt; plugin. You almost feel it's part of the core itself.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;"[Person] says" sidebars&lt;/em&gt; &amp;ndash; The book's co-authors occasionally have their saying in special sidebars, all throughout the book. A way to evaluate different opinions and take a break from the book's main flow.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Code snippets&lt;/em&gt; &amp;ndash; Not too many, not too few, just about the right amount. Granted, you won't find any sample application in this book, but the snippets provided are more than enough to get to the point.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Although this book is meant to be a reference, this doesn't mean it only contains reference material, it means that if you don't know about a particular feature of Rails or its satellites (Capistrano, RSpec, testing in general, etc.) you can open the book at any chapter and read through an in-depth discussion which will, most likely, answer all your questions.  &lt;/p&gt;

&lt;p&gt;Even if what you're looking for is not strictly related to Rails but can just &lt;em&gt;be used with it&lt;/em&gt;, you'll find it in the book. Some examples include a 23-page-long exhaustive dissertation on &lt;a href="http://www.prototypejs.org/"&gt;Prototype&lt;/a&gt;, a whole Chapter on RSpec, another on Capistrano and even information on XML parsing through REXML.&lt;/p&gt;

&lt;p&gt;What you won't find in the book, unfortunately, is how to get something which was not meant to be seamless integrated with Rails to work, like &lt;a href="http://jquery.com/"&gt;JQuery&lt;/a&gt;, for example. But again, this is understandable, as such topics would have made the book three times longer, at least.&lt;/p&gt;

&lt;h3&gt;Some constructive criticism&lt;/h3&gt;

&lt;p&gt;As a technical writer, I was somehow unhappy of the way reference material was presented in the book, i.e. more or less as ordinary chunks of text:&lt;/p&gt;

&lt;blockquote&gt;
    &lt;p&gt;&lt;code&gt;execute(sql_statement)&lt;/code&gt;&lt;br/&gt;
    Executes the SQL statement provided in the context of this connection. This method is abstract in the DatabaseStatements module and is overridden by specific database adapter implementations. As such, the return type is a result set object cor-
    responding to the adapter in use.&lt;/p&gt;
    
    &lt;p&gt;&lt;code&gt;insert(sql_statement)&lt;/code&gt;&lt;br/&gt;
    Executes an SQL INSERT statement and returns the last autogenerated ID from the affected table.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You'll find plenty of pages like this in the book. Although all essential the information about each specific method is there, it is not organized properly. When I'm coding and I want to look up something quick, chances are that I can just hop over to &lt;a href="http://apidock.com/rails"&gt;APIdock&lt;/a&gt; or other similar services and query Rails documentation in a much more efficient way.&lt;br/&gt;
On the other end, if reference material was added for completeness' sake, it would have been much better included at the end of the book, more succinctly, through some carefully constructed reference tables. If the aim was instead to help the reader memorize all the method he &lt;em&gt;must&lt;/em&gt; know to work productively with Rails everyday, the author should have included some diagrams or any other type of visual aid.&lt;/p&gt;

&lt;p&gt;Similarly, the &lt;em&gt;Stack Checklist&lt;/em&gt; included in Chapter 20 is not actually a list at all, but rather a sequence of titled paragraphs which is definitely a good read &lt;em&gt;the first time&lt;/em&gt;, but it won't be as useful when you need to just refresh your memory.&lt;/p&gt;

&lt;p&gt;I admit, I noticed these things because part of my daily job as Technical Writer consists in making sure that reference material is well presented in the most minimalist, direct and useful way to the reader. Maybe a year ago I wouldn't have thought anything of it, but now I felt compelled to point this out hoping the next edition of the book will deal also with this aspect of the book. &lt;/p&gt;

&lt;p&gt;Since the book came out in 2007, the organization and presentation of Rails Documentation has been significantly improved by third-party services: I hope the authors and editors will try to make sure, next time, that the reference material is more &lt;em&gt;usable&lt;/em&gt; by the readers.&lt;/p&gt;

&lt;h3&gt;Conclusion&lt;/h3&gt;

&lt;p&gt;Overall, the book is a good read. It's even possible to read it sequentially (even if the author discourages this practice) and still get the most out of it &amp;ndash; a rare trait in programming books nowadays.&lt;br/&gt;
No other book will go so in-depth about Rails or about everything you need to know to get your site up and running in a&lt;em&gt;real&lt;/em&gt; production environment. That's the reason why &lt;em&gt;The Rails Way&lt;/em&gt;is the perfect companion for web development professionals who must ensure their applications are tuned up to perform and scale well.&lt;/p&gt;

&lt;p&gt;This doesn't mean that beginners should be discouraged from reading this book, quite the opposite. This is actually the only book newcomers to Rails need once they are done reading all those awesome beginner-oriented tutorials freely available on the Internet. Everyone interested in Rails, at some point, has to follow &lt;em&gt;The Rails Way&lt;/em&gt;.&lt;/p&gt;</description>
      <pubDate>Sun, 04 Jan 2009 08:03:00 -0000</pubDate>
      <guid>http://www.h3rald.com/articles/the-rails-way-review/</guid>
      <link>http://www.h3rald.com/articles/the-rails-way-review/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/the-rails-way-review/#comments</comments>
      <category>rails</category>
      <category>books</category>
      <category>review</category>
    </item>
    <item>
      <title>Chrome: Google did it again!</title>
      <description>&lt;p style="float:left;"&gt;&lt;img src="/files/google-chrome/chrome-logo.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;It looks like there&amp;#8217;s a &lt;a href="http://www.google.com/chrome"&gt;new open source browser&lt;/a&gt; in town. As usual, nearly everything about it &lt;a href="http://blogoscoped.com/archive/2008-09-01-n47.html"&gt;leaked&lt;/a&gt; &lt;a href="http://www.techcrunch.com/2008/09/01/first-public-screen-captures-of-google-chrome/"&gt;before&lt;/a&gt; its &lt;a href="http://www.google.com/chrome"&gt;release&lt;/a&gt;. Every blog that matters is talking about it, so if you didn&amp;#8217;t hear anything about it, you&amp;#8217;d better take a look yourself. Don&amp;#8217;t be fooled by the usual &lt;a href="http://www.techcrunch.com/2008/09/01/meet-chrome-googles-windows-killer/"&gt;senseless ravings&lt;/a&gt; of some weird, overly-hyped blogger though: a &lt;em&gt;browser&lt;/em&gt; just came out, nothing more and nothing less. It&amp;#8217;s not the end of Windows, it&amp;#8217;s not the end of the Internet, it&amp;#8217;s not the end of the world as we know it. It&amp;#8217;s just a new player in the Browser Wars.&lt;/p&gt;
&lt;p&gt;I particularly recommend reading the official &lt;a href="http://books.google.com/books?id=8UsqHohwwVYC&amp;amp;printsec=frontcover#PPP1,M1"&gt;Google Comic Book&lt;/a&gt; about Chrome, however I included some of the most interesting parts of it in this article. It&amp;#8217;s a nice 40-page comic booklet explaining how the browser works in a friendly way&amp;#8230; I found it quite amusing and an interesting way to &lt;del&gt;leak&lt;/del&gt; distribute info on a new project.&lt;/p&gt;
&lt;h3&gt;Getting the damn thing&lt;/h3&gt;
&lt;p&gt;You can freely download Google Chromm from &lt;a href="http://www.google.com/chrome"&gt;here&lt;/a&gt;. You&amp;#8217;ll get a tiny 474KB setup file which installs the browser automatically. When I say automatically I mean automatically: you double click it, and it won&amp;#8217;t ask &lt;em&gt;anything&lt;/em&gt;: it will just install it in Program Files by itself. Idiot proof. Clever. Some people may like it, I damn hated it.&lt;/p&gt;
&lt;p&gt;I downloaded it and installed it fine from home, on Vista, and it was blazing fast (on &lt;em&gt;Vista_, imagine!). I tried to do the same thing from work and I couldn&amp;#8217;t. The damn installer is supposed to pick up the proxy settings from your default browser, but if the proxy uses authentication (like 99% of corporate proxies) it simply won&amp;#8217;t work. As far as I know, there&amp;#8217;s &lt;a href="http://groups.google.com/group/google-chrome-help-troubleshooting/browse"&gt;no way around this&lt;/a&gt;&lt;/em&gt;thread/thread/4c07ec5124f2eebc.&lt;/p&gt;
&lt;p&gt;This is the reason why this article won&amp;#8217;t have any chrome screenshots&amp;#8230; to protest against Google&amp;#8217;s stupid way of doing things &amp;#8220;too user-friendly&amp;#8221;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update 1:&lt;/strong&gt; Actually, it is now possible to download the full Chrome setup from &lt;a href="http://cache.pack.google.com/chrome/install/149.27/chrome_installer.exe"&gt;here&lt;/a&gt; (Thanks &lt;a href="http://www.thecrazyaustralian.com/installing-google-chrome-behind-a-proxy/"&gt;Crazy Australian&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update 2:&lt;/strong&gt; After installing Chrome, if your company uses an automatic proxy script you won&amp;#8217;t be able to browser web sites using Chrome. If that&amp;#8217;s your case, make sure you change IE&amp;#8217;s proxy settings by specifying your proxy address and port explicitly.&lt;/p&gt;
&lt;h3&gt;How Google &amp;#8220;re-invented&amp;#8221; the browser&lt;/h3&gt;
&lt;p&gt;Why did Google bother? Officially because&amp;#8230;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;#8220;[&amp;#8230;] we believe we can add value for users and, at the same time, help drive innovation on the web.&amp;#8221;&lt;/em&gt;&lt;br /&gt;
(from &lt;a href="http://googleblog.blogspot.com/2008/09/fresh-take-on-browser.html"&gt;Google Blog&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;In practice, a Google-branded browser makes sense especially because of the services offered by the search giant right now: nearly &lt;em&gt;every kind&lt;/em&gt; of web application, from mail clients to &lt;span class="caps"&gt;RSS&lt;/span&gt; readers.&lt;/p&gt;
&lt;p&gt;The philosophy of Google Chrome is fairly simple: the Web has changed since the nineties, we now have full-fledged applications instead of crappy hypertexts with animated GIFs, therefore browsers must change, too.&lt;/p&gt;
&lt;p&gt;Every major browser has a fairly long development history. Think of Firefox: version 3? Not really: try adding up at least 7 versions of Netscape before that. Internet Explorer &lt;strong&gt;8&lt;/strong&gt;, Opera &lt;strong&gt;9.5&lt;/strong&gt;, &amp;#8230;&lt;br /&gt;
Safari is probably the newest of the lot, but still not quite right.&lt;/p&gt;
&lt;p&gt;All major browsers &lt;em&gt;evolved&lt;/em&gt; through the years, but they never really changed: so why not to start from scratch?&lt;/p&gt;
&lt;p&gt;Starting from scratch has a lot of advantages:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;You can learn from other people&amp;#8217;s mistakes, and try to fix them&lt;/li&gt;
	&lt;li&gt;You can &lt;em&gt;get things right&lt;/em&gt; from the very start&lt;/li&gt;
	&lt;li&gt;You do not have to worry about breaking compatibility with previous versions&lt;/li&gt;
	&lt;li&gt;People won&amp;#8217;t have extremely high expectations, and they&amp;#8217;ll be prepared for a relatively unstable product&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Obviously building a browser from the ground up is not a weekend project, but things changed since the nineties and starting fresh does not necessarily means re-inventing the wheel!&lt;/p&gt;
&lt;h3&gt;An &amp;#8220;old&amp;#8221; Rendering Engine&lt;/h3&gt;
&lt;p&gt;Let&amp;#8217;s just say that the main work was already done for Google by the &lt;a href="http://webkit.org"&gt;WebKit&lt;/a&gt; guys. The rendering engine which now powers Safari, the Nokia Series 60 browser, Gnome&amp;#8217;s Epiphany, Adobe &lt;span class="caps"&gt;AIR&lt;/span&gt; has been picked by the Google guys for Chrome.&lt;/p&gt;
&lt;p style="float:right;"&gt;&lt;img src="/files/google-chrome/chrome-javascript.gif" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;This is a fairly obvious choice, if you ask me. Why?&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Presto (Opera&amp;#8217;s engine) is proprietary&lt;/li&gt;
	&lt;li&gt;Trident (IE&amp;#8217;s engine) is proprietary, and it sucks&lt;/li&gt;
	&lt;li&gt;Gecko (Mozilla&amp;#8217;s engine) is open source, but a bit bulky&lt;/li&gt;
	&lt;li&gt;WebKit is open source, and arguably the fastest rendering engine to date&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The rendering engine, after all, may be considered one of the most important parts of the browser: it&amp;#8217;s responsible of what users see, after all. &lt;br /&gt;
Google made the right choice, in my opinion: WebKit is also the most &amp;#8220;embeddable&amp;#8221; and lightweight engine available, and it is also used on the Android platform for this very reason.&lt;/p&gt;
&lt;h3&gt;A &amp;#8220;new&amp;#8221; Javascript&lt;/h3&gt;
&lt;p&gt;Mozilla has a &lt;a href="http:http://www.mozilla.org/js/spidermonkey/Javascript"&gt;fast&lt;/a&gt; engine, which will soon become &lt;a href="http://ejohn.org/blog/tracemonkey/"&gt;much faster&lt;/a&gt;. WebKit has a &lt;a href="http://webkit.org/projects/javascript/"&gt;blazing fast&lt;/a&gt; Javascript engine too, don&amp;#8217;t forget. So why Google didn&amp;#8217;t just use that?&lt;/p&gt;
&lt;p&gt;&amp;#8230;Because they wanted something &lt;em&gt;much&lt;/em&gt; faster than that, in their own way (as someone already &lt;a href="http://null-logic.net/blog/2008/09/02/javascript-performance-comparison-with-chrome/"&gt;pointed out&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Meet &lt;strong&gt;V8&lt;/strong&gt;, Chrome&amp;#8217;s very own Javascript Virtual Machine. When reading the Chrome Comic, I was particularly impressed of two improvements introduced by this new javascript VM:&lt;/p&gt;
&lt;p style="float:right;"&gt;&lt;img src="/files/google-chrome/chrome-javascript-gc.gif" alt="" /&gt;&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;It actually compiles Javascript to machine code via a Just-In-Time compiler (&lt;span class="caps"&gt;JIT&lt;/span&gt;). This means that whenever you refresh a page containing Javascript the browser won&amp;#8217;t re-interpret the whole script, but it will simply run the compiled version of it which was generated the first time the page was loaded. New concept? Not really, Mozilla is going &lt;em&gt;exactly&lt;/em&gt; in the same direction with their own engine, and &lt;span class="caps"&gt;JIT&lt;/span&gt; compilation will be added as of Firefox 3.1.&lt;/li&gt;
	&lt;li&gt;V8&amp;#8217;s incremental garbage collection looks like a much better alternative to the current conservative garbage collection methods used for Javascript. Because of V8&amp;#8217;s new concept of Hidden Class Transitions, V8 knows &lt;em&gt;exactly&lt;/em&gt; when something is no longer needed and thus it is able to garbace-collect it more effectively.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;While there has been some initial &lt;a href="http://nexus.zteo.com/2008/09/01/google-chrome-an-index-of-what-developers-need-to-know-good-and-bad/"&gt;skepticism&lt;/a&gt; on this new Javascript implementation, it looks like Google did it right. If you don&amp;#8217;t believe it you can &lt;a href="http://code.google.com/apis/v8/intro.html"&gt;download&lt;/a&gt; V8&amp;#8217;s C++ code and try it out yourself.&lt;/p&gt;
&lt;h3&gt;One Process per Tab&lt;/h3&gt;
&lt;p&gt;Google Chrome is the first multi-process browser. The idea is that &lt;em&gt;each tab&lt;/em&gt; (because you can&amp;#8217;t do browsers without tabs, these days, right?) has its own phisical process and it is therefore independent from each other.&lt;/p&gt;
&lt;p style="float:right;"&gt;&lt;img src="/files/google-chrome/chrome-processes.gif" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Hang on, isn&amp;#8217;t that what IE 5 did? A new instance of the browser for each window? No, not quite: there&amp;#8217;s a single instance of the browser and &lt;em&gt;multiple&lt;/em&gt; tab instances. Each tab is independent in the sense that it has its own address bar, but it&amp;#8217;s just a tab, at the end of the day.&lt;/p&gt;
&lt;p&gt;This is what Internet Explorer could have done, &lt;em&gt;before&lt;/em&gt; Internet Explorer 7, as an answer to the traditional concept of tabs promoted by Mozilla and Opera.&lt;/p&gt;
&lt;p&gt;Actually, it turns out that &lt;a href="http://blogs.msdn.com/ie/archive/2008/03/11/ie8-and-loosely-coupled-ie-lcie.aspx"&gt;this is &lt;em&gt;exactly&lt;/em&gt; what&amp;#8217;s planned for Internet Explorer 8&lt;/a&gt;, as &lt;a href="http://www.sriramkrishnan.com/blog/2008/09/thoughts-on-new-browser-wars.html"&gt;someone&lt;/a&gt; already pointed out!&lt;/p&gt;
&lt;p&gt;Additionally, Google thought of building in a mini task manager to let users monitor the &lt;span class="caps"&gt;CPU&lt;/span&gt; and memory usage of each tab. This is interesting, but it has a few implications discussed later on in this article.&lt;/p&gt;
&lt;p&gt;What&amp;#8217;s truly remarkable about this is that each tab seems to have an initial overhead of 1-2KB, which of course grows according to the site it loads. You can see all this in the task manager, which also picks up similar stats for any other browser running at the same time on your machine. &lt;br /&gt;
This was another clever move by Google: by looking at their own task manager, and running more than one browser together, you have everything you need to instantly compare browser performance (thus discovering that Chrome does an outstanding job, it seems).&lt;/p&gt;
&lt;p&gt;What&amp;#8217;s also remarkable about Chrome&amp;#8217;s tabs is the way you can interact with them:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;You can move them around smoohtly, exactly like with Safari&lt;/li&gt;
	&lt;li&gt;You can detach them by drag and drop&lt;/li&gt;
	&lt;li&gt;You can re-attach them by drag and drop (which is truly awesome!)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;del&gt;AwesomeBar&lt;/del&gt; &lt;em&gt;OmniBox&lt;/em&gt; and &lt;del&gt;Speed Dial&lt;/del&gt; &lt;em&gt;New Tab Page&lt;/em&gt;&lt;/h3&gt;
&lt;p&gt;Did you like Mozilla&amp;#8217;s AwesomeBar? Well, I personally did, others didn&amp;#8217;t so much. Meet OmniBox&amp;#8482; Google&amp;#8217;s very own, semi-sentient address bar which really understands you.&lt;/p&gt;
&lt;p&gt;Here&amp;#8217;s what you can do with it:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Type in URLs and view web sites (it would be damn funny if it couldn&amp;#8217;t do that)&lt;/li&gt;
	&lt;li&gt;Get &lt;del&gt;extra Google crap&lt;/del&gt; useful suggestions while typing. This includes, but it is not limited to:
	&lt;ul&gt;
		&lt;li&gt;Pages you visited&lt;/li&gt;
		&lt;li&gt;Bookmarks&lt;/li&gt;
		&lt;li&gt;Popular pages (guess who decides that&amp;#8230;)&lt;/li&gt;
	&lt;/ul&gt;&lt;/li&gt;
	&lt;li&gt;Custom searches: search &lt;span class="caps"&gt;IMDB&lt;/span&gt;, Wikipedia, Amazon and google itself with a few clicks&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="/files/google-chrome/chrome-bar.gif" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Unlike Firefox&amp;#8217;s AwesomeBar, Google&amp;#8217;s OmniBox seems more &amp;#8220;evolved&amp;#8221;: it doesn&amp;#8217;t get too much in your way, it lets you go where you want to go, and it&amp;#8217;s smart about searching. Apparently Mozilla is already planning to remove the search bar completely and incorporate it in the AwesomeBar&amp;#8230; but Google released it first, sorry guys.&lt;/p&gt;
&lt;p&gt;The other handy thing they &lt;del&gt;stole&lt;/del&gt; kindly borrowed from Opera is the &lt;em&gt;New Tab Page&lt;/em&gt;, basically like Opera&amp;#8217;s Speed Dial, but with two interesting things:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;It displays the nine &lt;em&gt;most visited&lt;/em&gt; pages: you don&amp;#8217;t have to configure it!&lt;/li&gt;
	&lt;li&gt;It displays search boxes for the most visited sites where you searched something on.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;While I really like how this works (it requires no configuration whatsoever), I kinda miss dragging my favorite pages in the New Tab Page. If you come from Opera, you&amp;#8217;ll miss this too: the pages I have in my speed dial are &lt;span class="caps"&gt;NOT&lt;/span&gt; necessarily the pages I visited the most!&lt;/p&gt;
&lt;p&gt;I guess I&amp;#8217;ll get used to it, though&amp;#8230;&lt;/p&gt;
&lt;h3&gt;Relax, it&amp;#8217;s Google!&lt;/h3&gt;
&lt;p&gt;Google is not Evil&amp;#8482;. Google is good to everyone, from their own employees to developers and end users: and the funniest part of this whole thing is that everything they make &lt;em&gt;looks&lt;/em&gt; good for you. You have absolutely no reason to fear Google.&lt;/p&gt;
&lt;p&gt;They did it again: they apparently released a new browser which definitely looks inherently more secure than competitors. &lt;br /&gt;
Here&amp;#8217;s why:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;It has an &lt;em&gt;Incognito&lt;/em&gt; mode, which lets you browse everything you want without logging anything anywhere.&lt;/li&gt;
	&lt;li&gt;It confines popups to the tab they belong, minimized. You can then seletively decide to drag them out and promote them to their own window.&lt;/li&gt;
	&lt;li&gt;Each tab is sandboxed: i.e., it has no rights to write anything to your PC. Absolutely no chance. When plugins for Java and Flash are used, however, this doesn&amp;#8217;t apply.&lt;/li&gt;
	&lt;li&gt;Chrome continuously downloads lists of malicious sites, so that you&amp;#8217;re protected against phishing in real time.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="float:left;"&gt;&lt;img src="/files/google-chrome/chrome-blame.gif" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Now, if everything goes wrong, you know it&amp;#8217;s definitely &lt;em&gt;someone else who did it&lt;/em&gt;. If you read the comic book between the lines, you&amp;#8217;ll notice a not-so-subtle message to the end users:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;The browser is sandboxed, so if anything goes wrong, blame others (Adobe for Flash, Sun for Java, Microsoft for some other crap)&lt;/li&gt;
	&lt;li&gt;You can monitor the resource consumption of each tab, &lt;em&gt;ergo&lt;/em&gt; what &lt;em&gt;each website&lt;/em&gt; uses. This means that if a site is slow is definitely the web developer&amp;#8217;s fault.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is basically what &lt;a href="http://ejohn.org/blog/google-chrome-process-manager/"&gt;John Resig&lt;/a&gt; immediately pointed out when the comic came out.&lt;/p&gt;
&lt;h3&gt;How it feels&lt;/h3&gt;
&lt;p&gt;Google Chrome is clearly a very nice product to use. It&amp;#8217;s as intuitive as IE for the average Windows user, it has the best of Firefox and Opera features and it&amp;#8217;s even more sleek than Safari. The UI, in my opinion, is a true masterpiece and feels well though out.&lt;/p&gt;
&lt;p&gt;Everything is aimed to be intuitive and does not get in your way: it just works. You want to download a file? You can just do it, without worrying about where to save it: it will appear in a &amp;#8220;download bucket&amp;#8221; at the bottom of your tabs, and you can just drag and drop what you downloaded anywhere you like, if you need to.&lt;br /&gt;
Why nobody thought of this before?&lt;/p&gt;
&lt;p&gt;Even the program settings are simple to understand. The Options dialog is divided in &amp;#8220;Basics&amp;#8221;, &amp;#8220;Minor Tweaks&amp;#8221; and &amp;#8220;Under the Hood&amp;#8221;. The idea is that anyone can understand the Basics, some people may tweak a bit more, and only geeks may want to go beyond that. This is particularly evident in the Italian translation (it comes bundled with 40 localizations, by the way), where they translated &amp;#8220;Under the Hood&amp;#8221; with &amp;#8220;Roba da smanettoni&amp;#8221; which means something like &amp;#8220;Stuff for people who fiddle with PCs&amp;#8221;. I personally found this translation a bit irritating, but anyway&amp;#8230;&lt;/p&gt;
&lt;h3&gt;Media Coverage and Target Audience&lt;/h3&gt;
&lt;p&gt;The overall impression is that Google wanted to target end users with this browser, but also appeal geeks, too. This makes sense from a marketing point of view. While 90% of geeks switched from IE to another browser, ordinary people are still stuck with IE. Why? Because alternative browsers have gained a reputation of being geek-friendly (which, by popular belief, does not mean user-friendly).&lt;/p&gt;
&lt;p&gt;Google&amp;#8217;s marketing strategy is quite clear, and it doesn&amp;#8217;t seem to be failing on any point:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;They targeted Windows first, because that&amp;#8217;s what the bulk of IE aficionados uses.&lt;/li&gt;
	&lt;li&gt;They did their best to make it as user-friendly as possible: the sleek &lt;span class="caps"&gt;GUI&lt;/span&gt;, the comic book, etc.&lt;/li&gt;
	&lt;li&gt;They spread the world like crazy: every blog is talking about it, but also major news sites like &lt;span class="caps"&gt;BBC&lt;/span&gt; and &lt;span class="caps"&gt;CNN&lt;/span&gt;. When I got to work, a collegue of mine asked me if I tried the new Google browser and if I read the comic. She heard it at the radio. Here &lt;em&gt;in Italy&lt;/em&gt;!&lt;/li&gt;
	&lt;li&gt;At the same time, they made the whole thing open source, released APIs and emphasized this, so that &amp;#8220;computer fiddlers&amp;#8221; couldn&amp;#8217;t resist.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To me, it looks like Google Chrome stands a good chance to succeed where others have failed: drive most of the Internet population away from Internet Explorer.&lt;/p&gt;
&lt;h3&gt;Open Source, testing and quality&lt;/h3&gt;
&lt;p&gt;Google is well known for its massive infrastructure. Moreover, Google is the only &amp;#8220;entity&amp;#8221; (let&amp;#8217;s call it that way, shall we) who &lt;em&gt;knows&lt;/em&gt; and &lt;em&gt;visited&lt;/em&gt; almost every web page on the Internet. If something is not &amp;#8220;on Google&amp;#8221;, it may well not exist at all: this is not strictly true, but it&amp;#8217;s the user perspective and ad the end of the day that&amp;#8217;s all that matters.&lt;br /&gt;
Google, as a consequence, has virtually unlimited resources (compared to any other possible competitor) and virtually unlimited knowledge of the Internet, which makes automated testing no more than a joke.&lt;/p&gt;
&lt;p&gt;From the Google Chrome Comic:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;#8220;Within 20-30 minutres of each new browser build, we can teswt it on tens of thousands of different web pages&amp;#8221;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&amp;#8230;and that&amp;#8217;s certainly not an understatemend: you can believe that.&lt;/p&gt;
&lt;p&gt;&lt;img src="/files/google-chrome/chrome-tests.gif" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Google seems very concerned of building a &amp;#8220;rock-solid&amp;#8221; browser rather than being the coolest guy in town, and that&amp;#8217;s a good sign. Google is &lt;em&gt;smart&lt;/em&gt;, remember?&lt;/p&gt;
&lt;p&gt;As if it weren&amp;#8217;t enough, the entire thing (the rendering engine, the javascript implementation and the whole code of the broswer) is 100% open source which means, in a nutshell:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Free testers&lt;/li&gt;
	&lt;li&gt;Free developers&lt;/li&gt;
	&lt;li&gt;Good publicity&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="/files/google-chrome/chrome-os.gif" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;If things go as planned, Chrome may become the most widely tested piece of software in the world. Let&amp;#8217;s just see how the community takes this.&lt;/p&gt;
&lt;h3&gt;Why it matters&lt;/h3&gt;
&lt;p&gt;Everyone seems to have gone crazy about Chrome, even long before it was made available. Why does it matter, anyway? Isn&amp;#8217;t it just a browser, at the end of the day? Well, yes, but:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;It&amp;#8217;s 100% open source. If you like something of it, you can get it, modify it, bundle it in another project and redistribute it. Give it a few weeks and extensions which use some of Google&amp;#8217;s new &lt;span class="caps"&gt;API&lt;/span&gt; will flock to the &amp;#8217;fox like crazy.&lt;/li&gt;
	&lt;li&gt;It&amp;#8217;s small, fast and very promising. Sure, it&amp;#8217;s not perfect, but &lt;span class="caps"&gt;YOU&lt;/span&gt; can help improving it. Get it?&lt;/li&gt;
	&lt;li&gt;It&amp;#8217;s on Windows, so it will reach the majority of Internet users&amp;#8230; in theory.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Last but not least, it comes bundled with &lt;a href="http://gears.google.com/"&gt;Gears&lt;/a&gt;, i.e. what Google would like you to use for RIAs. That&amp;#8217;s perhaps the only &amp;#8220;subliminal&amp;#8221; message they are trying to send to their users (for now, at least).&lt;br /&gt;
As a matter of fact, nothing prevents them from using Chrome as a way to promote their technology and products. But at the same time nothing prevents a random developer to just fork the project and distribute a &lt;em&gt;neutral&lt;/em&gt; and unbranded version of Chrome.&lt;/p&gt;
&lt;p&gt;See? Google is not evil at all, it&amp;#8217;s just smarter than others.&lt;/p&gt;
&lt;h3&gt;The Bottom Line&lt;/h3&gt;
&lt;p&gt;Google showed us once more that their &amp;#8220;innovation&amp;#8221; can be summarized with the following:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;&amp;#8220;Do not invent new things, just make them better&amp;#8221;&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;They didn&amp;#8217;t invent Internet search: they just made it better and smarted. The same philosophy applies to Chrome, too. Some examples? Sure:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;They didn&amp;#8217;t create a new rendering engine, they used an existing one&lt;/li&gt;
	&lt;li&gt;They analyzed Safari&amp;#8217;s neat &lt;span class="caps"&gt;GUI&lt;/span&gt; tricks and implemented something even better.&lt;/li&gt;
	&lt;li&gt;They added an IE8-like domain highlight in the &lt;span class="caps"&gt;URL&lt;/span&gt;.&lt;/li&gt;
	&lt;li&gt;They got the Firefox&amp;#8217;s AwesomeBar and improved it.&lt;/li&gt;
	&lt;li&gt;They got Opera&amp;#8217;s Speed Dial and improved it.&lt;/li&gt;
	&lt;li&gt;They got IE8&amp;#8217;s one-process-per-tab architecture and improved it.&lt;/li&gt;
	&lt;li&gt;They didn&amp;#8217;t think of a Javascript &lt;span class="caps"&gt;JIT&lt;/span&gt; first, they just made it widely-available first.&lt;/li&gt;
	&lt;li&gt;They didn&amp;#8217;t think about merging the address bar with the search bar, Mozilla announced it first, but Google released it before they did.&lt;/li&gt;
	&lt;li&gt;Safari 4 allows users to create shortcuts for their favorite web apps, but unfortunately it&amp;#8217;s only out for developers&amp;#8230;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Google did it, again. Exactly as planned.&lt;/p&gt;</description>
      <pubDate>Wed, 03 Sep 2008 00:31:00 -0000</pubDate>
      <guid>http://www.h3rald.com/articles/google-chrome/</guid>
      <link>http://www.h3rald.com/articles/google-chrome/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/google-chrome/#comments</comments>
      <category>browsers</category>
      <category>review</category>
      <category>google</category>
    </item>
    <item>
      <title>Rails-Doc.org - A First Look</title>
      <description>&lt;p&gt;When you decided to learn Ruby on Rails (if you did, that is), chances are that you bought a book. I did, too, actually: there are a lot of very interesting and fairly comprehensive books out there after all.&lt;/p&gt;
&lt;p&gt;I actually never bought a book to learn &lt;span class="caps"&gt;PHP&lt;/span&gt;, in the past though. Why&amp;#8217;s that? Well, for two simple reasons:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;The &lt;a href="http://www.php.net/manual/en/"&gt;&lt;span class="caps"&gt;PHP&lt;/span&gt; manual&lt;/a&gt; can easily be searched and provides enough documentation, in most cases.&lt;/li&gt;
	&lt;li&gt;When the documentation is not enough, there&amp;#8217;s always plenty of comments by experienced developers to save your day.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That being said, &lt;span class="caps"&gt;PHP&lt;/span&gt; is still an awfully disorganized language, but believe it or not, coming from &lt;span class="caps"&gt;PHP&lt;/span&gt; I didn&amp;#8217;t find &lt;a href="http://api.rubyonrails.org/"&gt;Rails documentation&lt;/a&gt; useful enough simply because it didn&amp;#8217;t have these two simple but very powerful features.&lt;/p&gt;
&lt;p&gt;Sure, there&amp;#8217;s the &lt;a href="http://www.railsdocumentation.org/"&gt;Rails Documentation Project&lt;/a&gt; which provides more organized docs, and &lt;a href="http://www.noobkit.com/"&gt;Noobkit&lt;/a&gt; does a nice job with its search-as-you-type feature&amp;#8230; but still is not quite enough: you&amp;#8217;d expect something much better than that for something like Rails!h3. Introducing Rails-Doc.org&lt;/p&gt;
&lt;p style="float:right;"&gt;&lt;img src="/files/railsdoc_logo_sm.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.rails-doc.org"&gt;Rails-Doc.org&lt;/a&gt; focuses on providing a better interface to Rails documentation by offering two key features:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;A powerful, fast and useful document search&lt;/li&gt;
	&lt;li&gt;The possibility to add notes to Rails documentation&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;When the app went live, I immediately registered (it&amp;#8217;s free of course) and started playing with it&amp;#8230;&lt;/p&gt;
&lt;h4&gt;Search as you type&amp;#8230;&lt;/h4&gt;
&lt;p&gt;The first thing I did was trying the search features, of course. I started typing &amp;#8220;rout&amp;#8221; for Routing, and I was immediately shown a list of matches:&lt;/p&gt;
&lt;p&gt;&lt;img src="/files/rails-doc_search.gif" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;It took a small fraction of a second to load the matches, which makes me think that definitely they have all the names indexed somewhere. Nevertheless, it was a pleasant surprise: normally, these search-as-you-type utilities are not that refined!&lt;/p&gt;
&lt;p&gt;All you need to do is start typing at least three letters, and you get results, if any. &lt;br /&gt;
if you press &lt;span class="caps"&gt;ENTER&lt;/span&gt;, you get automatically redirected to the first result. This can be good, but maybe it would have been nicer to load a &amp;#8220;traditional&amp;#8221; list of results, but it depends on your taste, really.&lt;/p&gt;
&lt;h4&gt;&amp;#8230;or browse through the namespaces&lt;/h4&gt;
&lt;p&gt;Alternatively, it is possible to browse the docs in the more traditional way, i.e. according to their class or module: the &lt;strong&gt;Browse&lt;/strong&gt; page does just that: it lists &lt;em&gt;all&lt;/em&gt; Rails classes and modules, regardless of the nesting. But there&amp;#8217;s more: a little roundy icon precedes each class name, to indicate whether the documentation is present, and to what degree:&lt;/p&gt;
&lt;p&gt;&lt;img src="/files/rails-doc_icons.gif" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;This is an interesting concept: in this way, in theory, people should contribute to the documentation where it&amp;#8217;s more needed.&lt;/p&gt;
&lt;p&gt;Each reference page is very neatly re-formatted: you can hardly imagine it&amp;#8217;s actually the same content included in Rails&amp;#8217; RDoc pages!&lt;/p&gt;
&lt;p&gt;&lt;img src="/files/rails-doc_document.gif" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Finally, another nice addition is the &lt;strong&gt;Related&lt;/strong&gt; column, which lists links to other items which are related to the current topic:&lt;/p&gt;
&lt;p&gt;&lt;img src="/files/rails-doc-related.gif" alt="" /&gt;&lt;/p&gt;
&lt;h3&gt;Contribute, contribute, contribute!&lt;/h3&gt;
&lt;p&gt;You have to register for something, don&amp;#8217;t you? Yes. If you register, you can post notes to any document. Simple enough, all you have to do is to click the &lt;strong&gt;Add Note&lt;/strong&gt; button and a form will slide down for you to fill in:&lt;/p&gt;
&lt;p&gt;&lt;img src="/files/rails-doc_note1.gif" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;As you start typing, you&amp;#8217;ll notice that a preview of the note is displayed instantly: as you can use SimpleMarkup to write notes, exactly like in RDoc, this feature can be very handy:&lt;/p&gt;
&lt;p&gt;&lt;img src="/files/rails-doc_note2.gif" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;What if there&amp;#8217;s no documentation for a particular class or method? You&amp;#8217;ll get a warning like this one:&lt;/p&gt;
&lt;p&gt;&lt;img src="/files/rails-doc_nodoc.gif" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;The idea behind this is that, if you provide some useful insights, they&amp;#8217;ll eventually end up in Rails core documentation.&lt;/p&gt;
&lt;h3&gt;An Short Interview with Mikael Roos, from Nodeta&lt;/h3&gt;
&lt;p&gt;Before the application went live, I was lucky enough to get Mikael Roos to answer to some of my questions. Here&amp;#8217;s the full interview&amp;#8230;&lt;/p&gt;
&lt;h4&gt;What are you actually trying to do on Rails-Doc.org?&lt;/h4&gt;
&lt;p&gt;The initial goal of the project is to provide the existing documentation in a more accessible way, most importantly to provide a lightning fast search feature that gives weighted results based on the&lt;br /&gt;
quality and amount of documentation. This we have already accomplished, and all remaining issues are related to browser compatibility. Another initial goal is to present a smooth interface for creating inline notes to&lt;br /&gt;
the documentation so that Rails developers can post notes about certain methods etc. for themselves and others to draw knowledge from.&lt;/p&gt;
&lt;p&gt;Our longer-term goal (N.B. we are an agile project, so long-term means, say, three months) is to provide a way for the active members of the Rails community to improve the existing documentation based on the posted notes&lt;br /&gt;
to create an extended documentation that could optimally even be made in to a patch and would find its way back into the actual Rails source.&lt;/p&gt;
&lt;p&gt;Another clear and obvious goal is to keep improving the service steadily as we progress toward the goals that I mentioned above.&lt;/p&gt;
&lt;h4&gt;Could you spend a few words on the &amp;#8220;development process&amp;#8221; followed by your company to develop this app? Did I read the word &amp;#8220;Scrum&amp;#8221; somewhere? Am I correct?&lt;/h4&gt;
&lt;p&gt;Yes, our development process of choice is Scrum. The core team is only three members, one backend developer, one backed/frontend develope and one frontend developer/UI specialist. I feel the team is optimal in many ways.&lt;br /&gt;
The team also has a few more experienced developers who are primarily active in other projects to ask questions from, one of whom is also the acting product owner on the Rails-doc project (that&amp;#8217;s me!).&lt;/p&gt;
&lt;h4&gt;Did you develop it in three months, or&amp;#8230;?&lt;/h4&gt;
&lt;p&gt;The first release was developed in three &lt;span class="caps"&gt;SPRINTS&lt;/span&gt;, not months &amp;#8211; so what I&amp;#8217;m saying is the first release was developed in five weeks (first sprint was mostly introductory and lasted a week, the next two sprints, first&lt;br /&gt;
development and then stabilization, were two weeks each). However, it is a &lt;span class="caps"&gt;FIRST&lt;/span&gt; &lt;span class="caps"&gt;RELEASE&lt;/span&gt;, which means the app is by all means not complete, but since we make software in a very agile way, it&amp;#8217;a all about &amp;#8220;Ship, ship, ship!&amp;#8221;.&lt;/p&gt;
&lt;h4&gt;What is &lt;a href="http://www.nodeta.fi"&gt;Nodeta&lt;/a&gt;, exactly? My Finnish is a bit rusty nowadays&amp;#8230;&lt;/h4&gt;
&lt;p&gt;Nodeta is a software development company that focuses on web software. We employ a highly agile and effective process. We have worked both on light independent projects and in the environment of large global enterprises.&lt;br /&gt;
There are currently 10 Nodetans.&lt;/p&gt;
&lt;p&gt;Rails-Doc.org is a pilot project for your new shiny app, ApiDock. Is it an open source app?&lt;/p&gt;
&lt;p&gt;Unfortunately, I cannot go into details about APIdoc yet. What I can tell is that it is developed with Rails and that it won&amp;#8217;t be open source, but rather it would optimally be offered as a service, which after all is what&lt;br /&gt;
the word &amp;#8220;app&amp;#8221; on the web means these days. Open source projects could however use it for free, sort of in the spirit of GitHub.&lt;/p&gt;
&lt;p&gt;It will also most likely be separately targeted to larger companies.&lt;/p&gt;
&lt;h4&gt;Can you give me more technical details about the way keyword search is performed? Are you indexing/tagging documentation beforehand?&lt;/h4&gt;
&lt;p&gt;There will probably be a blog post on the &lt;a href="http://blog.nodeta.fi"&gt;Nodeta blog&lt;/a&gt; about the search and how it works after the first release comes out.&lt;/p&gt;
&lt;h4&gt;What about the social side of it: you&amp;#8217;re hoping people will contribute with notes, which will then be collected and integrated in the documentation correct? Do you have any moderation or anti-spam precaution?&lt;/h4&gt;
&lt;p&gt;The quality of notes is judged in a social way. Notes can be thanked by other users and notes that get many thanks are showed in a more prominent way. Registration will be required in order to post notes and the registration will feature a captcha.&lt;/p&gt;
&lt;h4&gt;Will contributors be credited somehow? Who can contribute and at what level?&lt;/h4&gt;
&lt;p&gt;Anybody can post notes and good notes get thanks and thus so do their posters. Users that get lots of thanks will be later asked to become core users that can alter the extended documentation (not in the first&lt;br /&gt;
release.)&lt;/p&gt;
&lt;h4&gt;You want to blow out competition and that you don&amp;#8217;t want to fail: sounds a good plan! How is Rails-Docs different from other similar apps?&lt;/h4&gt;
&lt;p&gt;We think that our app is the first that is serious about making things happen. We think about users first and above all at this stage our search feature is frankly unparallelled.&lt;/p&gt;
&lt;h4&gt;Do you have DHH&amp;#8217;s seal of approval? Will you? Is there any copyright issue with your domain name?&lt;/h4&gt;
&lt;p&gt;Time will tell what &lt;span class="caps"&gt;DHH&lt;/span&gt; thinks. We did contact him just a few days ago to ask what his thoughts about all this are and are waiting for his comments. I doubt there is any wrinkles with copyright as Rails-doc itself is a completely non-profit project.&lt;/p&gt;
&lt;h4&gt;What about doing something similar for the whole Ruby language? Ruby docs may also be easier, in a way&amp;#8230;&lt;/h4&gt;
&lt;p&gt;It is possible that we might do just that but right now it&amp;#8217;s all about Rails.&lt;/p&gt;
&lt;h3&gt;The Bottom Line&lt;/h3&gt;
&lt;p&gt;Rails-Doc.org is definitely an interesting project, which has all the potential to become a powerful, Rails-powered service. Sure, it&amp;#8217;s not open source and this can be a bit of a letdown for some: but after all people flocked to GitHub when it opened, didn&amp;#8217;t they?&lt;/p&gt;
&lt;p&gt;The search capabilities of Rails-Doc.org are definitely a very important step forward in making Rails documentation more accessible and easier to use, but the killer feature is definitely the possibility to add notes, if used wisely.&lt;/p&gt;
&lt;p&gt;I&amp;#8217;ll be watching this project closely and I&amp;#8217;ll pay particular attention on what happens to the community&amp;#8217;s contributions: will it really be useful? Will it really help creating documentation patches to Rails core? Only time will tell, of course.&lt;/p&gt;</description>
      <pubDate>Thu, 19 Jun 2008 05:30:00 -0000</pubDate>
      <guid>http://www.h3rald.com/articles/rails-doc-first-look/</guid>
      <link>http://www.h3rald.com/articles/rails-doc-first-look/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/rails-doc-first-look/#comments</comments>
      <category>rails</category>
      <category>ruby</category>
      <category>writing</category>
      <category>review</category>
    </item>
    <item>
      <title>Firefox 3 Revealed</title>
      <description>&lt;p&gt;When the SitePoint staff asked me to write an article summing up all the new features of Firefox 3, I gladly accepted: I wrote about Firefox before, and I thought it was just going to be a 2-3 hours job maximum. &lt;br /&gt;
After diving deeper into Firefox 3 development, reading dozens of different blogs and scouting Mozilla&amp;#8217;s web sites, I realized I was wrong: Firefox 3 introduced &lt;em&gt;a lot&lt;/em&gt; of new things, and keeping track of all of them, I admit, was quite a hard task.&lt;/p&gt;
&lt;p&gt;Nevertheless, I wrote the article and delivered it to SitePoint in time fore the release, but my editor &amp;#8220;complained&amp;#8221; that 8,300+ words was about 3 times over the minimum requirements for a feature article! &lt;br /&gt;
&lt;em&gt;&amp;#8220;I don&amp;#8217;t really think that people can read the whole thing online&amp;#8221;&lt;/em&gt; &amp;mdash;, he said, and I somehow agreed.&lt;/p&gt;
&lt;p&gt;In the end, they decided to pack my &amp;#8220;article&amp;#8221; into a 30-pages &lt;span class="caps"&gt;PDF&lt;/span&gt; eBook which can be downloaded &lt;em&gt;absolutely free of charge&lt;/em&gt; from SitePoint web site as well, so here it is:&lt;/p&gt;
&lt;p style="float:left;"&gt;&lt;img src="/files/ff3-revealed.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;br /&gt;
&lt;span style="font-size: 1.5em;"&gt; &lt;strong&gt;&lt;a href="http://firefox.s3.sitepoint.com/ff3-revealed.zip"&gt;Firefox 3 Revealed&lt;/a&gt;&lt;/strong&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;If you prefer though, you can still read the article directly on SitePoint, &lt;a href="http://www.sitepoint.com/article/firefox-3-whats-new-whats-hot"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This guide aims to give you a comprehensive overview of virtually &lt;em&gt;all&lt;/em&gt; the new features and improvements introduced by Firefox 3.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;I would like to thank the whole SitePoint staff for giving me the opportunity to write this eBook, and in particular &lt;strong&gt;&lt;a href="http://magain.com/blog/"&gt;Matthew Magain&lt;/a&gt;&lt;/strong&gt; for his help and support (and for creating the &lt;span class="caps"&gt;PDF&lt;/span&gt; on a Sunday evening!).&lt;br /&gt;
Additionally, I would also like to thank the Mozilla Development Team for their awesome job with Firefox 3 and everyone else who made this eBook possible.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; Feel free to &lt;strong&gt;&lt;a href="http://digg.com/software/FireFox_3_Revealed_Free_ebook_from_SitePoint"&gt;digg&lt;/a&gt;&lt;/strong&gt; this eBook!&lt;/p&gt;</description>
      <pubDate>Tue, 17 Jun 2008 02:46:00 -0000</pubDate>
      <guid>http://www.h3rald.com/articles/firefox3-revealed/</guid>
      <link>http://www.h3rald.com/articles/firefox3-revealed/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/firefox3-revealed/#comments</comments>
      <category>firefox</category>
      <category>browsers</category>
      <category>writing</category>
      <category>review</category>
      <category>books</category>
    </item>
    <item>
      <title>Thoughts on Firefox 3 and Opera 9.5</title>
      <description>&lt;p&gt;Opera 9.5 is out, Firefox 3 too (more or less), so, which browser are you going to use today?&lt;br /&gt;
This new generatio of browsers offers plenty of new, innovative features and improvements over the past, in both cases:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;You can finally use Firefox because it finally doesn&amp;#8217;t eat up all your &lt;span class="caps"&gt;RAM&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;You can finally use Opera because it is finally &amp;#8220;understand&amp;#8221; ajaxified web sites like Gmail&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Amazingly, these two releases have a lot in common&amp;#8230;&lt;img src="/files/opera_sharp.png" alt="" /&gt;&lt;/p&gt;
&lt;h3&gt;A fresh new look&lt;/h3&gt;
&lt;p&gt;Both browsers needed a new look, let&amp;#8217;s be honest. Both didn&amp;#8217;t really care that much in the past releases, but suddenly things changed: the new Opera theme, Sharp, looks truly awesome on any platform, and the Mozilla development team came up with &lt;span class="caps"&gt;FOUR&lt;/span&gt; different themes, aiming to camouflage Firefox as a native application for all the major OSes.&lt;/p&gt;
&lt;p&gt;Personally, while I was really impressed by the new Opera theme, I was not too sure of the new direction taken for Firefox UI. Why a different theme for each different major operating system? In particular the XP theme could have been better, in my opinion. &lt;br /&gt;
Not a huge deal though, as both browsers are skinnable (although I&amp;#8217;m not gonna alter the way Opera looks!).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;The speed of light&lt;/h3&gt;
&lt;p&gt;My main complaint about Firefox 2 was its slow startup and generally slowness due to several memory leaks. This eventually led me to &amp;#8220;switch to Opera&amp;#8221; for my daily browsing a while ago.&lt;/p&gt;
&lt;p&gt;Firefox 3, luckily, is much faster and more memory-efficient than its predecessor, as the development team squashed most of the memory-related bugs. The introduction of jemalloc as the new memory allocator and also the new cycle collectory improved things quite a bit.&lt;/p&gt;
&lt;p&gt;Opera 9.5 still &amp;#8220;feels&amp;#8221; faster at startup and also the &lt;span class="caps"&gt;GUI&lt;/span&gt; is a bit more snappy than Firefox&amp;#8217;s, but Firefox 3 is &lt;em&gt;terribly&lt;/em&gt; fast at interpreting Javascript.&lt;br /&gt;
As a result, sites like Gmail or Google Reader are rendered almost instantaneously in Firefox 3, while Opera 9.5 is slightly slower.&lt;/p&gt;
&lt;h3&gt;Address Bar 2.0&lt;/h3&gt;
&lt;p&gt;Both browser struggled to add more features to the Address Bar: Opera now supports search-as-you-type history search and Firefox&amp;#8230; well, let&amp;#8217;s just say that Firefox Developers built something truly wonderful with the new &amp;#8220;AwesomeBar&amp;#8221;: it is now possible to search history items &lt;em&gt;tagged pages and bookmarks&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src="/files/awesomebar.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;But there&amp;#8217;s more: you&amp;#8217;ll notice that the AwesomeBar does an outstanding job in retrieving results ordered by relevance, frequency and access time, and it also allows the user to restrict search to specific page types.&lt;/p&gt;
&lt;p&gt;As an Opera user, I must admit that Firefox is really way ahead with this. Unfortunately, Opera toolbar still is not that smart.&lt;/p&gt;
&lt;h3&gt;Sync&amp;#8217;ing up&lt;/h3&gt;
&lt;p&gt;Opera offers the ability to sync your bookmarks, notes, custom toolbars and Quick Dial pages via the new &lt;a href="http://link.opera.com/"&gt;Link&lt;/a&gt; service.&lt;br /&gt;
It looks awfully similar to &lt;a href="https://services.mozilla.com/"&gt;Mozilla Weave&lt;/a&gt;, an experimental extension aiming to synchronize the whole Firefox profile.&lt;/p&gt;
&lt;p&gt;Currently, Weave allows users to sync bookmarks, history and passwords in a very secure way: this truly preserve the &amp;#8220;state&amp;#8221; of your browser across multiple computers.&lt;/p&gt;
&lt;p&gt;On the other hand, Opera is virtually on &lt;em&gt;any device or platform&lt;/em&gt;, so Link can be handy if you use Opera as your mobile browser. Unfortunately, we&amp;#8217;ll still have to wait a bit for a proper Mozilla competitor for mobile device, but it already &lt;a href="http://arstechnica.com/news.ars/post/20080409-first-look-mozilla-fennec-targets-handheld-browser-market.html"&gt;looks very promising&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Be nice, be open&lt;/h3&gt;
&lt;p&gt;Firefox is &lt;span class="caps"&gt;THE&lt;/span&gt; (only?) open source browser. Opera has always been (and always will be?) a proprietary, freeware, &lt;em&gt;closed source&lt;/em&gt; app.&lt;br /&gt;
Some people are really bothered by this, especially Linux users of course: it really comes down to how religious you are about the software running on your machine.&lt;/p&gt;
&lt;p&gt;Being open source, Firefox is more hacker-friendly: this release, especially, also delivers an awful lot of useful APIs which can be used to develop extensions in a much easier way. This of course isn&amp;#8217;t an option for Opera.&lt;/p&gt;
&lt;p&gt;From a different point of view, Opera actually implements &lt;a href="http://dev.opera.com/articles/view/opera-9-5-the-next-generation-of-web-s/"&gt;more &amp;#8216;next generation&amp;#8217; open standards&lt;/a&gt; than Firefox, and it scores more than Firefox in the &lt;a href="http://acid3.acidtests.org/"&gt;Acid 3&lt;/a&gt; test.&lt;/p&gt;
&lt;p&gt;Does this matter in the end? Well, yes and no: it&amp;#8217;s nice that Opera struggles to be way ahead than others in this, but in the end, until Firefox 3 (and Internet Explorer too!) catch up, web developers won&amp;#8217;t dare using any of the new features.&lt;/p&gt;
&lt;p&gt;Do you have a web site optimized for Opera? No, probably not: you&amp;#8217;re normally aiming at Firefox or IE (sigh!) when it comes to development, because they are still more widely used.&lt;/p&gt;
&lt;p&gt;All this is very sad, but still terribly true. But at least, other browsers will feel more compelled to catch up.&lt;/p&gt;
&lt;h3&gt;Usability is the key&lt;/h3&gt;
&lt;p&gt;Personally, I prefer Opera&amp;#8217;s philosophy of &amp;#8220;everything in tabs&amp;#8221; rather than having many dialog boxes floating around for downloads, history, bookmarks etc.&lt;/p&gt;
&lt;p&gt;From this point of view, Firefox is arguably not as usable as Opera. Before Firefox &lt;span class="caps"&gt;GUI&lt;/span&gt; purists start screaming insults, I repeat that this is entirely up to your taste.&lt;/p&gt;
&lt;p&gt;While Opera&amp;#8217;s &lt;span class="caps"&gt;GUI&lt;/span&gt; didn&amp;#8217;t undergo any major change, Firefox 3 definitely did:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;A new &lt;em&gt;Library&lt;/em&gt; now holds all your bookmarks, history and feeds&lt;/li&gt;
	&lt;li&gt;The new Downloads dialog supports (finally!) download resumes, even across different browsing sessions&lt;/li&gt;
	&lt;li&gt;It is very easy to access information on web site, especially with the new identity button (that&amp;#8217;s where the web site favicon is displayed).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="/files/places.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Another trend introduced by Firefox 3 is the ability to &lt;em&gt;search-as-you-type&lt;/em&gt; in all these dialogs and in many others (like the Cookie Manager). This makes finding information much easier.&lt;/p&gt;
&lt;p&gt;Opera didn&amp;#8217;t need any major overhaul, but I would have liked to have cookies and preference in tabs, too (they are pretty much the only dialog boxes left).&lt;/p&gt;
&lt;h3&gt;To extend or not extend?&lt;/h3&gt;
&lt;p&gt;This is always the eternal dilemma when it comes to Firefox vs. other browsers.&lt;/p&gt;
&lt;p&gt;The major strength of Firefox 3, like &lt;em&gt;all&lt;/em&gt; its predecessors, lies in the hundreds of free extensions which can be installed by user to enhance browser&amp;#8217;s functionality. You can turn Firefox into almost anything you like.&lt;/p&gt;
&lt;p&gt;Because I&amp;#8217;m trying to be browser-independent, I like to keep my Firefox extensions to a bare minimum:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Weave&lt;/li&gt;
	&lt;li&gt;Operator&lt;/li&gt;
	&lt;li&gt;Web Developer&lt;/li&gt;
	&lt;li&gt;Del.icio.us&lt;/li&gt;
	&lt;li&gt;Firebug&lt;/li&gt;
	&lt;li&gt;StumbleUpon&lt;/li&gt;
	&lt;li&gt;ColorZilla&lt;/li&gt;
	&lt;li&gt;Secure Login&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Opera fans always boost that Opera can do pretty much everything you&amp;#8217;d ever need &lt;em&gt;out of the box&lt;/em&gt;, so you don&amp;#8217;t need any extension at all. Part of this is true (does Firefox have an e-mail client? No. Does Firefox offer a Wand out-of-the-box? No., &amp;#8230;read &lt;a href="http://my.opera.com/Rijk/blog/2006/07/04/top-150-popular-firefox-extensions-and-opera"&gt;this&lt;/a&gt; for the details)&lt;/p&gt;
&lt;p&gt;In the past release, Opera added widget to let developers unleash their creativity. And I must admit that they are quite cute and work well enough (a few of them at least).&lt;/p&gt;
&lt;p&gt;One of the most frequently-missed feature was a Firebug equivalent for Opera. Luckily, this was fixed in this release with the introduction of &lt;a href="http://www.opera.com/products/dragonfly/"&gt;DragonFly&lt;/a&gt;, which is already bundled with the browser itself. &lt;br /&gt;
I&amp;#8217;m pretty sure this will make &lt;em&gt;a lot&lt;/em&gt; of web developers very happy.&lt;/p&gt;
&lt;p&gt;&lt;img src="/files/opera_dragonfly.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Personally, I still miss an equivalent of the del.icio.us extension in Opera, but I guess I can survive with just a bookmarklet, if needed.&lt;/p&gt;
&lt;h3&gt;Choose your winner&lt;/h3&gt;
&lt;p&gt;It is really up to you. I don&amp;#8217;t have a true favorite as for now: Firefox 3 is very, very tempting because of three things:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;The AwesomeBar: I feel I&amp;#8217;m already becoming addicted to it&lt;/li&gt;
	&lt;li&gt;Some of its extensions, including Weave&lt;/li&gt;
	&lt;li&gt;The performance improvements, especially concerning memory management and the rendering of pages making extensive use of Javascript&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Opera, on the other hand, charmes me for what it can do out-of-the-box: it&amp;#8217;s fast, sleek, has almost everything I need with no configuration at all. It&amp;#8217;s ideal if you use multiple systems, including mobile devices.&lt;/p&gt;
&lt;p&gt;Definitely I will not abandon any of the two as for now: I&amp;#8217;ll probaly use Firefox for a more enhanced browsing experience, but I&amp;#8217;ll definitely use Opera when I&amp;#8217;m in a hurry to look something up for example, and every time my fianc&#233;e is using Firefox on the same account.&lt;/p&gt;
&lt;p&gt;There&amp;#8217;s no absolute winner in the Browser Wars yet: just different browsers for different occasions!&lt;/p&gt;</description>
      <pubDate>Fri, 13 Jun 2008 03:18:00 -0000</pubDate>
      <guid>http://www.h3rald.com/articles/thoughts-on-firefox3-and-opera95/</guid>
      <link>http://www.h3rald.com/articles/thoughts-on-firefox3-and-opera95/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/thoughts-on-firefox3-and-opera95/#comments</comments>
      <category>browsers</category>
      <category>review</category>
      <category>firefox</category>
      <category>opera</category>
    </item>
    <item>
      <title>I'm on Twitter, anyway...</title>
      <description>&lt;p&gt;I&amp;#8217;ve been neglecting my blog, I know. The truth is that I&amp;#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&amp;#8217;t have much free time. At any rate, here&amp;#8217;s what&amp;#8217;s going on:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;I&amp;#8217;m writing a new article for an online magazine (assuming I&amp;#8217;m gonna finish it)&lt;/li&gt;
	&lt;li&gt;I signed up for a freelance technical reviewing job, for a new Ruby book which will come out soon-ish&lt;/li&gt;
	&lt;li&gt;I&amp;#8217;m getting ready to finally visit Rome (again), this time with my fianc&#233;e, for our fifth anniversary.&lt;/li&gt;
	&lt;li&gt;I&amp;#8217;m slowly preparing a version 1.0 of &lt;a href="http://code.google.com/p/redbook/"&gt;RedBook&lt;/a&gt;, which involves quite a lot of refactoring (and hopefully better documentation and tests).&lt;/li&gt;
	&lt;li&gt;I&amp;#8217;m trying to learn a little bit of Haskell: it seems to be one of the few non .&lt;span class="caps"&gt;NET&lt;/span&gt; languages able to produce standalone .exe files, nowadays&amp;#8230;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Last but not least, I now decided to use &lt;a href="http://twitter.com"&gt;Twitter&lt;/a&gt; regularly, so you can follow me &lt;a href="http://twitter.com/h3rald/"&gt;there&lt;/a&gt;, if you wish!&lt;/p&gt;</description>
      <pubDate>Sun, 18 May 2008 09:04:00 -0000</pubDate>
      <guid>http://www.h3rald.com/articles/im-on-twitter-anyway/</guid>
      <link>http://www.h3rald.com/articles/im-on-twitter-anyway/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/im-on-twitter-anyway/#comments</comments>
      <category>personal</category>
      <category>review</category>
      <category>programming</category>
    </item>
    <item>
      <title>Book Review: Design Patterns in Ruby</title>
      <description>&lt;p&gt;I finally got my hands on a shiny new copy of &lt;em&gt;Design Patterns in Ruby&lt;sup class="footnote" id="fnr1"&gt;&lt;a href="#fn1"&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/em&gt;. 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.&lt;/p&gt;
&lt;p&gt;To my surprise, the book is a hardcover edition, which makes it look more professional and more durable than the average programming book&lt;sup class="footnote" id="fnr2"&gt;&lt;a href="#fn2"&gt;2&lt;/a&gt;&lt;/sup&gt;. It&amp;#8217;s also smaller and shorter than the average programming book&lt;sup class="footnote" id="fnr2"&gt;&lt;a href="#fn2"&gt;2&lt;/a&gt;&lt;/sup&gt; (340 pages), which makes it much easier to carry around and less intimidating to read. It&amp;#8217;s also &lt;em&gt;not&lt;/em&gt; meant to be a reference book, so it is actually pleasant an easy to read all in one go, as you&amp;#8217;ll soon find out.&lt;/p&gt;
&lt;p&gt;What is it about? &amp;mdash; well, design patters in the Ruby language of course. But it&amp;#8217;s not the usual brainwash of programming theory you would expect by a typical book on patters, it has &lt;em&gt;plenty&lt;/em&gt; of examples of real code. When I say &lt;em&gt;real code&lt;/em&gt; I don&amp;#8217;t mean the usual Dog/Cat/Horse/&amp;lt;insert animal here&amp;gt; classes or juke-box simulations which don&amp;#8217;t work at all etc. etc., I mean actual snippets from well known Ruby applications, like RubyGems, FXRuby and, of course, Rails.&lt;br /&gt;
OK well, there&amp;#8217;s an exception perhaps: Russ &lt;em&gt;did&lt;/em&gt; include a few wild life simulations (ponds with frogs and similar), but it&amp;#8217;s only for your own good, and for the sake of tradition.&lt;/p&gt;
&lt;p&gt;Anyhow, let&amp;#8217;s start from the beginning&amp;#8230;&lt;/p&gt;
&lt;h3&gt;Part I: Patters and Ruby&lt;/h3&gt;
&lt;p&gt;The first part of the book serves as a general introduction to the other two parts. If you know the basics of both design patterns and Ruby, you can safely skip this as you won&amp;#8217;t find anything of overwhelming interest here.&lt;/p&gt;
&lt;p&gt;Personally I really liked &lt;strong&gt;Chapter 1&lt;/strong&gt; though, &amp;#8220;Building better Programs with Patterns&amp;#8221;, in which Russ does a great job in summarizing the original GoF book&lt;sup class="footnote" id="fnr3"&gt;&lt;a href="#fn3"&gt;3&lt;/a&gt;&lt;/sup&gt; into four points:&lt;/p&gt;
&lt;p style="float:right;"&gt;&lt;img src="/files/design_patterns_in_ruby.jpg" alt="" /&gt;&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;em&gt;Separate our the things that change from those that stay the same.&lt;/em&gt;&lt;/li&gt;
	&lt;li&gt;&lt;em&gt;Program to an interface, not an implementation.&lt;/em&gt;&lt;/li&gt;
	&lt;li&gt;&lt;em&gt;Prefer composition over inheritance.&lt;/em&gt;&lt;/li&gt;
	&lt;li&gt;&lt;em&gt;Delegate, delegate, delegate.&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Also, although it does not come from the Design Patterns book but from building real systems, the author adds the &lt;span class="caps"&gt;YAGNI&lt;/span&gt; (You Ain&amp;#8217;t Gonna Need It) principle&lt;sup class="footnote" id="fnr4"&gt;&lt;a href="#fn4"&gt;4&lt;/a&gt;&lt;/sup&gt; as a reminder to resist the temptation of implementing things which &lt;em&gt;may&lt;/em&gt; be needed &lt;em&gt;later on&lt;/em&gt;, even if they are not needed right now.&lt;br /&gt;
The chapter ends with an outline of the patterns which will be presented throughout the book: 14 out of the original 23 patterns by the Gand of Four will be discussed in Part II and 3 bonus &amp;#8220;Ruby-only&amp;#8221; patterns will be examined in Part &lt;span class="caps"&gt;III&lt;/span&gt;, as a special treat.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Chapter 2&lt;/strong&gt; (&lt;em&gt;Getting started with Ruby&lt;/em&gt;) feels perhaps a bit out of place. As others pointed out&lt;sup class="footnote" id="fnr5"&gt;&lt;a href="#fn5"&gt;5&lt;/a&gt;&lt;/sup&gt;, why does a book on advanced Ruby programming techniques include a 35-page-long introduction on the Ruby language? The answer was given by Russ himself in an interview&lt;sup class="footnote" id="fnr6"&gt;&lt;a href="#fn6"&gt;6&lt;/a&gt;&lt;/sup&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;#8220;The reason that I included the introductory chapter about Ruby in there was to make the book accessible to folks with little or no Ruby background.&lt;br /&gt;
Now honestly, I don&#8217;t think that you could come to my book with no background in Ruby and walk away from it an expert Ruby programmer &amp;mdash; it&#8217;s not really that kind of introductory book.&lt;br /&gt;
But I do think that someone with experience in other languages could read my book and come away knowing about Ruby, understanding what all the shouting is about.&amp;#8221;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I admit, I skipped this chapter during my first reading because I was eager to move on to the main part of the book, but I did read it afterwards (I had to write this review after all!). It&amp;#8217;s quite a nice introduction aimed at the average .&lt;span class="caps"&gt;NET&lt;/span&gt;/Java developer: Russ provides a step-by-step presentation of the main features of the language while holding the reader by hand when something weird or scary comes about:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The slightly strange-looking syntax in this code is actually a tip-off something deep and important: In Ruby, everythng &amp;mdash; and I mean &lt;em&gt;everything&lt;/em&gt; &amp;mdash; is an object.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Of course Chapter 2 won&amp;#8217;t turn you into a Ruby guru, but it definitely fulfills one of the author&amp;#8217;s goals: bringing developers of other languages closer to Ruby, and give them a tiny taste of how Ruby can be &lt;em&gt;wickedly powerful&lt;/em&gt;.&lt;/p&gt;
&lt;h3&gt;Part II: Patterns in Ruby&lt;/h3&gt;
&lt;p&gt;Part II constitutes the bulk of the book, describing 14 GoF patterns in 220 pages. The patterns covered are the following:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Template Method&lt;/li&gt;
	&lt;li&gt;Strategy&lt;/li&gt;
	&lt;li&gt;Observer&lt;/li&gt;
	&lt;li&gt;Composite&lt;/li&gt;
	&lt;li&gt;Iterator&lt;/li&gt;
	&lt;li&gt;Command&lt;/li&gt;
	&lt;li&gt;Adapter&lt;/li&gt;
	&lt;li&gt;Proxy&lt;/li&gt;
	&lt;li&gt;Decorator&lt;/li&gt;
	&lt;li&gt;Singleton&lt;/li&gt;
	&lt;li&gt;Factory Method&lt;/li&gt;
	&lt;li&gt;Abstract Factory Method&lt;/li&gt;
	&lt;li&gt;Builder&lt;/li&gt;
	&lt;li&gt;Interpreter&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Why not covering all 23? Well, because to be honest, they are rarely used in Ruby. Furthermore, in some cases some of the ones examined in the book may feel a bit &lt;em&gt;unnatural&lt;/em&gt; to the average Rubyist: how many times did you ever think about using an External Iterator when &lt;code&gt;each&lt;/code&gt; is normally available as default internal iterator for any Array-like class?&lt;/p&gt;
&lt;p&gt;Each chapter in this part is devoted to a particular pattern and it is organized in more or less the same way, as outlined in the following sections.&lt;/p&gt;
&lt;h4&gt;Introduction and Personal Anecdotes&lt;/h4&gt;
&lt;p&gt;Most chapters start with a personal anecdote involving the author: it may be a memory related to his first job at the local grocery store (Chapter 8), or about the day he decided to buy his son a bike (Chapter 14):&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;#8220;I remember the day we bought my son his first bike.&amp;#8221; [&amp;#8230;] I spent hours trying to pull together a minor junkiard of parts according to instructions that would have baffled the entire National Security Agency. As it turned out, picking the bike was the easy part: putting it together was the real challenge.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This was used to introduce the Builder pattern, and how to use it to configure objects which include different logical parts.&lt;br /&gt;
Personally I find this technique particularly useful to introduce a particular problem from a different, more mundane prospective instead of starting off with an abstract theorethical description of the pattern itself. &lt;br /&gt;
The anecdote is then followed by the description of the actual programming problem for which the specific pattern will be used.&lt;/p&gt;
&lt;h4&gt;Description of the Pattern and Initial Implementation&lt;/h4&gt;
&lt;p&gt;An initial implementation of the pattern in Ruby will be provided more or less immediately after the introduction of each chapter, often accompanied by a simple &lt;span class="caps"&gt;UML&lt;/span&gt; diagram.&lt;br /&gt;
This implementation normally has quite a few conceptual flaws, which are then examined and corrected step-by-step the chapter to obtain a more &amp;#8220;Ruby-friendly&amp;#8221; solution.&lt;/p&gt;
&lt;h4&gt;A More Rubyfied Version of the Pattern&lt;/h4&gt;
&lt;p&gt;The final implementation of each pattern is often very different from the initial attempt, and it may contain quite a lot of Ruby-specific code. The author does an excellent job in suggesting pattern implementations which often use blocks, &lt;code&gt;Proc&lt;/code&gt; objects or method redefinitions when needed, to make the code more succint and more readable at the same time, as all Ruby code should be.&lt;/p&gt;
&lt;p&gt;By doing so, even people who are still learning Ruby will understand how to use some very useful Ruby idioms which can be a bit difficult to grasp otherwise.&lt;/p&gt;
&lt;h4&gt;Using and Abusing &amp;lt;Pattern&amp;gt;&lt;/h4&gt;
&lt;p&gt;Patterns are often overused and misused, and some people normally end up wondering if they should be used at all, after all. This section (present as a matter of fact in &lt;em&gt;every&lt;/em&gt; chapter of part II an &lt;span class="caps"&gt;III&lt;/span&gt;) examines the pitfalls of the pattern and the most common mistakes developer make when applying it.&lt;br /&gt;
It is by far the most useful section of each chapter, and that&amp;#8217;s what I&amp;#8217;ll be reading and re-reading every time I&amp;#8217;m thinking about using a particular pattern in my code. As a matter of fact, these sections make you realize that &lt;em&gt;every&lt;/em&gt; pattern has its own inherent flaws and dangers, and that it is far from being a Silver Bullet. Even when you&amp;#8217;re &lt;em&gt;supposed&lt;/em&gt; to use a pattern to accomplish something, be aware that &lt;em&gt;something nasty&lt;/em&gt; can happen unless you&amp;#8217;re extra careful: this, perhaps, is the true Golden Rule conveyed throughout the whole book.&lt;/p&gt;
&lt;h4&gt;&amp;lt;Pattern&amp;gt;s in the Wild&lt;/h4&gt;
&lt;p&gt;This is another very interesting section which is included in every chapter of part II and &lt;span class="caps"&gt;III&lt;/span&gt;. After describing what a pattern does, how it &lt;em&gt;can&lt;/em&gt; be used and how it &lt;em&gt;should&lt;/em&gt; be used, you&amp;#8217;ll finally find some interesting examples taken from real world applications.&lt;br /&gt;
By &amp;#8220;real world application&amp;#8221; I mean something like ActiveRecord&lt;sup class="footnote" id="fnr7"&gt;&lt;a href="#fn7"&gt;7&lt;/a&gt;&lt;/sup&gt; (Observer, Command, Adapter, &amp;#8230;), DRb&lt;sup class="footnote" id="fnr8"&gt;&lt;a href="#fn8"&gt;8&lt;/a&gt;&lt;/sup&gt; (Proxy) or FXRuby&lt;sup class="footnote" id="fnr9"&gt;&lt;a href="#fn9"&gt;9&lt;/a&gt;&lt;/sup&gt; (Composite), for example, i.e. important programs and libraries which are used in production environments.&lt;br /&gt;
Personally, I was really glad to find such examples in this book: it definitely helps you feeling design patterns as something more practical and useful than pure software architecture theories.&lt;/p&gt;
&lt;h4&gt;Wrapping it Up&lt;/h4&gt;
&lt;p&gt;&amp;#8220;Wrapping it Up&amp;#8221; is the title of the last section of each chapter of Part II and &lt;span class="caps"&gt;III&lt;/span&gt;. It&amp;#8217;s basically a summary of the whole chapter and thus a useful way to recap the most important concepts. I found this section particularly useful when using the book as a design pattern reference, after reading it for the first time: this section provides a quick and essential overview of each pattern &amp;#8212; and the most important DOs and DON&amp;#8217;Ts, too.&lt;/p&gt;
&lt;h3&gt;Part &lt;span class="caps"&gt;III&lt;/span&gt;: Patterns for Ruby&lt;/h3&gt;
&lt;p&gt;By the time you get to Part &lt;span class="caps"&gt;III&lt;/span&gt; you&amp;#8217;ll definitely feel that Ruby can do &lt;em&gt;more_. Some of the Ruby implementation of certain patterns described in the book make extensive use of blocks and Proc objects, and the @method&lt;/em&gt;missing@ method (although potentially dangerous unless extra care is taken) gives us a more immediate way to obtain delegation, for example when creating Proxies. &lt;br /&gt;
Also the fact that objects can be modified at runtime by adding and removing methods &amp;#8220;as needed&amp;#8221; seems quite an underused feature in traditional patterns, simply because those patterns were first conceived for languages which are very different from Ruby and are perhaps less &lt;em&gt;liberal&lt;/em&gt; than Ruby when it comes to dynamic features&lt;sup class="footnote" id="fnr10"&gt;&lt;a href="#fn10"&gt;10&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;p&gt;These particular Ruby features can be used (and abused, of course) to implement more Ruby-esque patterns, such as the ones included in this part of the book:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Internal Domain-Specific Languages&lt;/li&gt;
	&lt;li&gt;Meta-Programming&lt;/li&gt;
	&lt;li&gt;Convention Over Configuration&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These are just examples, of course some may complain because the Active Record or &lt;span class="caps"&gt;ORM&lt;/span&gt; pattern are missing, but this is understandable as it may be considered too specific compared to the others. &lt;br /&gt;
Each pattern is examined in detail, and I particularly like way the &lt;span class="caps"&gt;DSL&lt;/span&gt; pattern was described: Chapter 16 explains how to develop a simple but effective Ruby &lt;span class="caps"&gt;DSL&lt;/span&gt; from scratch for creating file backups. This can be particularly useful for people who never tried creating DSLs before, but also for developers who tried, but want to improve their skills.&lt;/p&gt;
&lt;p&gt;Chapter 18 (Convention Over Configuration) is sufficiently clear and detailed, perhaps even too much if you already know how Rails was developed (and all the hype which follwed).&lt;/p&gt;
&lt;p&gt;On the other hand, I was a bit disappointed by Chapter 17 (Meta-Programming). Maybe it&amp;#8217;s because I built up extremely high expectations about it while reading the rest of the book, but it just felt too short and not detailed enough for my liking. If I had to write such a chapter (which would have been actually very hard), I would have started from an excellent post by Ola Bini&lt;sup class="footnote" id="fnr11"&gt;&lt;a href="#fn11"&gt;11&lt;/a&gt;&lt;/sup&gt; which introduces &lt;em&gt;eleven&lt;/em&gt; meta-programming techniques, and built up content and examples from there. The only reason why &amp;#8212; I think &amp;#8212; Russ didn&amp;#8217;t do it in his book was length/balance constraint: a &lt;em&gt;properly detailed&lt;/em&gt; chapter about meta-programming in Ruby could easily take up over forty pages!&lt;/p&gt;
&lt;h3&gt;The Verdict&lt;/h3&gt;
&lt;p&gt;As I said in the beginning: this is not meant to be a complete, in-depth, reference book on everything you may want to know about design patterns in Ruby. That&amp;#8217;s why, as a matter of fact, you can actually read this book all the way through without getting utterly bored. Russ uses an informal, yet appropriate style to turn potentially complex, theorethical computer science principles into easy-to-understand, &lt;em&gt;useful&lt;/em&gt; tools which can truly improve the way you code.&lt;/p&gt;
&lt;p&gt;The whole book flows very very nicely. I actually recommend reading this book in sequence, without skipping chapters, because each pattern is described in a way that is somehow linked to the following ones, so that you can understand and learn about the pros and cons of each one in a more natural and useful way.&lt;/p&gt;
&lt;p&gt;OK, I would have loved to see Part &lt;span class="caps"&gt;III&lt;/span&gt; as long as Part II, probably, but overall I&amp;#8217;m very, very satisfied of what the book taught me. The only problem is that it also made me suddenly realize all the naive design mistakes I&amp;#8217;ve been making when coding in Ruby, so I&amp;#8217;ll now feel compelled to fix at least some of them&amp;#8230;&lt;/p&gt;
&lt;p&gt;Definitely a worthwhile read, I just hope to see more books like this, or even a second edition of this one soon!&lt;/p&gt;
&lt;h3&gt;Notes&lt;/h3&gt;
&lt;p class="footnote" id="fn1"&gt;&lt;a href="#fnr1"&gt;&lt;sup&gt;1&lt;/sup&gt;&lt;/a&gt; &lt;a href="http://www.informit.com/store/product.aspx?isbn=0321490452"&gt;Design Patterns in Ruby&lt;/a&gt; by Russ Olsen, Addison Wesley Professional, 2007.&lt;/p&gt;
&lt;p class="footnote" id="fn2"&gt;&lt;a href="#fnr2"&gt;&lt;sup&gt;2&lt;/sup&gt;&lt;/a&gt; Think of &lt;a href="http://www.pragprog.com/titles/ruby"&gt;Programming Ruby: The Pragmatic Programmer&amp;#8217;s Guide, 2nd Ed.&lt;/a&gt; by Dave Thomas with Chad Fowler and Andy Hunt, Pragmatic Programmers, 2004.&lt;/p&gt;
&lt;p class="footnote" id="fn3"&gt;&lt;a href="#fnr3"&gt;&lt;sup&gt;3&lt;/sup&gt;&lt;/a&gt; &lt;a href="http://www.informit.com/store/product.aspx?isbn=0201633612"&gt;Design Patterns: Elements of Reusable Object-Oriented Software&lt;/a&gt;, by By Erich Gamma, Richard Helm, Ralph Johnson, John M. Vlissides (a.k.a. the &lt;em&gt;Gang of Four&lt;/em&gt;), Addison Wesley Professional, 1994.&lt;/p&gt;
&lt;p class="footnote" id="fn4"&gt;&lt;a href="#fnr4"&gt;&lt;sup&gt;4&lt;/sup&gt;&lt;/a&gt; For more information on the &lt;span class="caps"&gt;YAGNI&lt;/span&gt; principle, visit &lt;a href="http://www.xprogramming.com/Practices/PracNotNeed.html"&gt;You&amp;#8217;re &lt;span class="caps"&gt;NOT&lt;/span&gt; gonna need it&lt;/a&gt;, Ronald E Jeffries.&lt;/p&gt;
&lt;p class="footnote" id="fn5"&gt;&lt;a href="#fnr5"&gt;&lt;sup&gt;5&lt;/sup&gt;&lt;/a&gt; See &lt;a href="http://on-ruby.blogspot.com/2007/12/design-patterns-in-ruby-review.html"&gt;Design Patterns in Ruby, a review&lt;/a&gt;, &lt;em&gt;On Ruby&lt;/em&gt;blog.&lt;/p&gt;
&lt;p class="footnote" id="fn6"&gt;&lt;a href="#fnr6"&gt;&lt;sup&gt;6&lt;/sup&gt;&lt;/a&gt; See &lt;a href="http://on-ruby.blogspot.com/2008/01/russ-olsen-interview.html"&gt;Russ Olsen Interview&lt;/a&gt;, &lt;em&gt;On Ruby&lt;/em&gt;blog.&lt;/p&gt;
&lt;p class="footnote" id="fn7"&gt;&lt;a href="#fnr7"&gt;&lt;sup&gt;7&lt;/sup&gt;&lt;/a&gt; &lt;a href="http://ar.rubyonrails.com/"&gt;ActiveRecord&lt;/a&gt; is an implementation of the Object-Relational Mapping (&lt;span class="caps"&gt;ORM&lt;/span&gt;) pattern used by the Ruby on Rails framework.&lt;/p&gt;
&lt;p class="footnote" id="fn8"&gt;&lt;a href="#fnr8"&gt;&lt;sup&gt;8&lt;/sup&gt;&lt;/a&gt; Distributed Ruby, see &lt;a href="http://chadfowler.com/ruby/drb.html"&gt;Intro to DRb&lt;/a&gt; by Chad Fowler.&lt;/p&gt;
&lt;p class="footnote" id="fn9"&gt;&lt;a href="#fnr9"&gt;&lt;sup&gt;9&lt;/sup&gt;&lt;/a&gt; &lt;a href="http://www.fxruby.org/"&gt;FXRuby&lt;/a&gt;, a graphical toolkit written in Ruby.&lt;/p&gt;
&lt;p class="footnote" id="fn10"&gt;&lt;a href="#fnr10"&gt;&lt;sup&gt;10&lt;/sup&gt;&lt;/a&gt; This can be a good or bad thing depending on the way you look at it, and what you want to use the language for. The fact that Ruby is dynamically typed makes it easier to do things which are totally impossible in C++ or Java, but it also introduces a whole new set of potential dangers.&lt;/p&gt;
&lt;p class="footnote" id="fn11"&gt;&lt;a href="#fnr11"&gt;&lt;sup&gt;11&lt;/sup&gt;&lt;/a&gt; &lt;a href="http://ola-bini.blogspot.com/2006/09/ruby-metaprogramming-techniques.html"&gt;Ruby Metaprogramming Techniques&lt;/a&gt;, Ola Bini: Programming Language Synchronicity.&lt;/p&gt;</description>
      <pubDate>Fri, 11 Apr 2008 03:41:00 -0000</pubDate>
      <guid>http://www.h3rald.com/articles/design-patterns-in-ruby-review/</guid>
      <link>http://www.h3rald.com/articles/design-patterns-in-ruby-review/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/design-patterns-in-ruby-review/#comments</comments>
      <category>ruby</category>
      <category>review</category>
      <category>books</category>
    </item>
    <item>
      <title>Book Review: Writing Efficient Ruby Code</title>
      <description>&lt;p style="float:right;"&gt;&lt;img src="/files/efficient_ruby_shortcut.jpeg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;The second shortcut from Addison-Wesley Professional series I&amp;#8217;m going to review is called &lt;a href="http://www.informit.com/store/product.aspx?isbn=0321540034"&gt;Writing Efficient Ruby Code&lt;/a&gt;. A very promising title, especially considering that this book is only 50 pages long.&lt;/p&gt;
&lt;p&gt;As usual, this shortcut can be intended as a sort of programmer-friendly detailed cheatsheet: like the other ones in this series it sports a monitor-friendly landscape layout and does not go to deep into the details unless strictly necessary to understand a particular concept.&lt;/p&gt;
&lt;h3&gt;The Author&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://railsexpress.de/blog/"&gt;Dr. Stefan Kaes&lt;/a&gt;, the author, contributed a lot to improve Ruby on Rails&amp;#8217; performance by refactoring portions of its core and try to &amp;#8220;get maximum speed out of performance-critical sections of code&amp;#8221;. This short but interesting shortcut groups together a lot of performance tweaks, tips and tricks but also some &amp;#8220;anti-patterns&amp;#8221; Kaes was able to identify through his career as programming teacher Ruby software consultant and key Rails contributor.&lt;/p&gt;
&lt;h3&gt;The Contents&lt;/h3&gt;
&lt;p&gt;Like with the previously-covered &lt;a href="/articles/mongrel-shortcut-review"&gt;Mongrel shortcut&lt;/a&gt;, &lt;em&gt;Writing Efficient Ruby Code&lt;/em&gt; always goes straight to the point when it comes to identify problems. The first one mentioned is of course that the &lt;em&gt;Ruby Interpreter is Slow&lt;/em&gt;, most people are aware of that, due to their direct experience or because this argument is normally used by non-Rubyists to argue the language&amp;#8217;s usability in commercial projects. What you may not know is why that is so, and that&amp;#8217;s where the first part of this book comes into play.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&amp;#8220;Ruby is a highly dynamic language: Almost all language entities are first-class citizens in that they can be created, changed, and destroyed at runtime. This comprises classes, modules, methods, constants, and class and instance variables. Only local variables are second-class citizens in Ruby: Whether a name refers to a local variable is determined at parse time.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This makes Ruby extremely flexible, but also more complex. Whever you use a name to refer to an object, Ruby has to search for the object it refers to, and this costs in terms of processing time.&lt;/p&gt;
&lt;p&gt;As a matter of fact, one of the most recurring tips in the book to improve code performance is the following:&lt;/p&gt;
&lt;p style="text-align:center;"&gt;&lt;strong&gt;Method calls are expensive, use variables directly when possible.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Keep this in mind: &lt;code&gt;self.something&lt;/code&gt; is &lt;em&gt;not&lt;/em&gt; the same as &lt;code&gt;@something&lt;/code&gt;. The end result is the same, but the first way costs more in terms of performance because Ruby has to look up the method name.&lt;br /&gt;
Similarly, &lt;strong&gt;local variables &lt;em&gt;should&lt;/em&gt; be introduced as a way to &amp;#8220;cache&amp;#8221; the result of method calls&lt;/strong&gt;. Often you may feel &amp;#8220;guilty&amp;#8221; to introduce a new variable and keep calling the same method over and over: this should definitely be avoided.&lt;/p&gt;
&lt;p&gt;Other useful tips include, for example:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Use syntax constructs (e.g. assignments) as expressinons. Use evaluation precedences.&lt;/li&gt;
	&lt;li&gt;Use interpolated strings &lt;code&gt;"... #{string_variable}"&lt;/code&gt; (there&amp;#8217;s also no performance difference if constant strings are used between &lt;code&gt;"&lt;/code&gt; or &lt;code&gt;'&lt;/code&gt;)&lt;/li&gt;
	&lt;li&gt;Use operators which update the data structure without copying it (when possible). Use &lt;code&gt;update&lt;/code&gt; or &lt;code&gt;merge&lt;/code&gt; to update hashes.&lt;/li&gt;
	&lt;li&gt;Iterating using &lt;code&gt;for a in  A&lt;/code&gt; is slightly faster than performing the same iteration using &lt;code&gt;each&lt;/code&gt;, (it is the opposite in Ruby 1.9 though)&lt;/li&gt;
	&lt;li&gt;do not use &lt;code&gt;return&lt;/code&gt; unless you have to&lt;/li&gt;
	&lt;li&gt;test in order of expected case frequency&lt;/li&gt;
	&lt;li&gt;Use parallel assignment (&lt;code&gt;a, b = 5, 6&lt;/code&gt;) where applicable&lt;/li&gt;
	&lt;li&gt;If a module gets included in only one other class (or module), it&#8217;s preferable to open the class instead.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I deliberately chose not to elaborate any further on the tips listed above because otherwise I&amp;#8217;ll give a big chunk of the contents of the book itself. If you know Ruby enough, you may already know why such reccommendations make sense, but if you don&amp;#8217;t, &lt;em&gt;Writing Efficient Ruby Code&lt;/em&gt; can be a short but very interesting read.&lt;/p&gt;
&lt;h3&gt;The Good&lt;/h3&gt;
&lt;p&gt;For each of the 30 &amp;#8220;coding patterns&amp;#8221; (and consequent anti-patterns) described in the book, the author does a great job explaining the reasons of doing something in a particular way, also through examples and benchmarks, where possible.&lt;/p&gt;
&lt;p&gt;Furthermore, this &lt;em&gt;shortcut&lt;/em&gt; can really be useful to grasp a few difference between Ruby 1.8.5, 1.8.6 and 1.9 in terms of performance: not all the patters apply to all Ruby implementations, and when that&amp;#8217;s the case it is clearly stated.&lt;/p&gt;
&lt;h3&gt;The Bad&lt;/h3&gt;
&lt;p&gt;My only complaint about the book is probably the lack of details and more &amp;#8220;specialized&amp;#8221; patterns. Everything (except for a few Rails-specific tips) normally apply to Ruby &lt;em&gt;as a whole&lt;/em&gt;, without going deeply to analyze specific libraries or third-party gems. As a result, once you get the general idea, some of the patters may seem pretty obvious or a logic consequence of others.&lt;/p&gt;
&lt;p&gt;It is also true that this is meant to be a &lt;em&gt;shortcut&lt;/em&gt;, not a comprehensive analysis on code optimization techniques which can be applied to specific cases: something like this would require much more than 50 pages!&lt;/p&gt;
&lt;h3&gt;The Bottom Line&lt;/h3&gt;
&lt;p&gt;Read it, re-read a few bits of it to make sure you grasp the most important concepts, and keep its table of contents in front of you as a reminder when refactoring your code!&lt;/p&gt;</description>
      <pubDate>Mon, 21 Jan 2008 04:47:00 -0000</pubDate>
      <guid>http://www.h3rald.com/articles/efficient-ruby-code-shortcut-review/</guid>
      <link>http://www.h3rald.com/articles/efficient-ruby-code-shortcut-review/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/efficient-ruby-code-shortcut-review/#comments</comments>
      <category>ruby</category>
      <category>review</category>
      <category>books</category>
    </item>
    <item>
      <title>A Firefox Lover's Guide to Opera</title>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This article can be considered a sequel for &lt;a href="http://www.h3rald.com/articles/ie-lovers-guide-to-firefox"&gt;An IE Lover&amp;#8217;s Guide to Firefox&lt;/a&gt;, which described Firefox through the eyes of an Internet Explorer fan. Similarly, this article describes Opera&amp;#8217;s features from the point of view of a user &amp;ndash; myself &amp;ndash; who has been using Firefox for years and is now considering another browser switch.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I am a Firefox fan. I&amp;#8217;ve been using Firefox since it was named &amp;#8220;Firebird&amp;#8221; and calling it &amp;#8220;stable&amp;#8221; was a big overstatement. Firefox dragged me out of Internet Explorer, and that was definitely one of its biggest achievements.&lt;/p&gt;
&lt;p&gt;Because I&amp;#8217;m addicted to trying out new tools, however, I always kept testing new browsers I discovered here and there. K-Meleon, Flock, Sleipnir&amp;#8230; When Safari came out for Windows I immediately installed it and used it for about 2 hours, only to realize that it wasn&amp;#8217;t &amp;ndash; and it still isn&amp;#8217;t &amp;ndash; usable at all, mainly due to sporadic crashes.&lt;/p&gt;
&lt;p style="float:right;"&gt;&lt;img src="/files/opera/fast.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Similarly, I&amp;#8217;ve been trying out &lt;a href="http://www.opera.com/"&gt;Opera&lt;/a&gt; periodically, as new releases came out, but again it didn&amp;#8217;t seem to work for me. The biggest complaint I had was its inability to render heavily-ajaxified web sites properly. However, now it seems that the Opera Development Team made a big effort to improve the browser, and I was pleased to notice that &lt;a href="http://www.opera.com/products/desktop/next/"&gt;Opera 9.5b&lt;/a&gt; (&amp;#8220;Kestrel&amp;#8221;) doesn&amp;#8217;t seem to have this sort of problems at all.h3. Planning the Switch&lt;/p&gt;
&lt;p&gt;Firefox has extensions. Plenty of them actually. Some are useful, like the newish Del.icio.us one made by Yahoo, and also crappy ones you&amp;#8217;ll never use unless you want to have a fancy button on one of your over-cluttered toolbars which enables you to interface more easily with X or Y web services you hardly ever use.&lt;/p&gt;
&lt;p&gt;By contrast, Opera never attempted to add full-blown extension support to its venerable and yet very powerful browser. Instead, they kept building more and more features right into its core, being careful not to undermine the browser&amp;#8217;s two proverbial qualities: &lt;em&gt;speed&lt;/em&gt; and &lt;em&gt;stability&lt;/em&gt;. What seemed a doomed philosophy at first turned out to be a good thingin the long run. More and more people are getting more and more worried about Firefox&amp;#8217;s memory issues and begin to &lt;em&gt;wander off&lt;/em&gt; to explore new things, exactly like I did.&lt;/p&gt;
&lt;p&gt;The first step to switch from Firefox to Opera is to reduce the number of Firefox extensions to the bare minimum you need:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Colorzilla&lt;/li&gt;
	&lt;li&gt;Web Developer&lt;/li&gt;
	&lt;li&gt;MeasureIt&lt;/li&gt;
	&lt;li&gt;Search Status&lt;/li&gt;
	&lt;li&gt;Gmail Manager&lt;/li&gt;
	&lt;li&gt;Secure Login&lt;/li&gt;
	&lt;li&gt;Del.icio.us&lt;/li&gt;
&lt;/ul&gt;
How many extensions do you &lt;em&gt;actually&lt;/em&gt; use? Here&amp;#8217;s a short analysis for the ones above:
&lt;ul&gt;
	&lt;li&gt;The first three are related to Web Development only, which means that I don&amp;#8217;t need them unless I&amp;#8217;m doing some web-development tests during which I&amp;#8217;m always going to have more than one browser open anyway. &lt;strong&gt;&lt;span class="caps"&gt;UPDATE&lt;/span&gt;:&lt;/strong&gt; there are a few &lt;a href="http://widgets.opera.com/search/?order=name&amp;amp;q=ruler"&gt;Ruler&lt;/a&gt; widget which can be used instead of MeasureIt &lt;em&gt;(thanks &lt;strong&gt;Ameer&lt;/strong&gt;)&lt;/em&gt;.&lt;/li&gt;
	&lt;li&gt;SearchStatus gives me Alexa Rank and Google Pagerank: I think I can survive without those for a while. &lt;strong&gt;&lt;span class="caps"&gt;UPDATE&lt;/span&gt;:&lt;/strong&gt; if not, there&amp;#8217;s always &lt;a href="http://www.puzzleclub.ru/files/seobar/"&gt;SEObar&lt;/a&gt; &lt;em&gt;(thanks &lt;strong&gt;Ameer&lt;/strong&gt;)&lt;/em&gt;.&lt;/li&gt;
	&lt;li&gt;I use Gmail Manager because my girlfriend uses Gmail on the same computer. I&amp;#8217;m switching to Opera and she&amp;#8217;ll stick with Firefox, so no problem there&amp;#8230;&lt;/li&gt;
	&lt;li&gt;Secure Login? It&amp;#8217;s called &lt;em&gt;Wand&lt;/em&gt; and it has been built-in into Opera for the last decade or so.&lt;/li&gt;
	&lt;li&gt;Del.icio.us &amp;ndash; OK, I won&amp;#8217;t be able to access my favorite tags as quickly, but &lt;a href="http://erlang.no/2005/10/06/delicious-opera-buttons-2/"&gt;someone&lt;/a&gt; already came out with a few handy buttons for a better integration with the popular social bookmarking service.&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;span class="caps"&gt;UPDATE&lt;/span&gt;:&lt;/strong&gt; For a list of the features provided by Firefox extensions which are included in Opera, see Rijk&amp;#8217;s &lt;a href="http://files.myopera.com/Rijk/blog/extensions.html"&gt;Top 150 Popular Firefox Extensions and Opera&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p style="float:right;"&gt;&lt;img src="/files/opera/opera_navigation.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Because I&amp;#8217;m addicted to betas, I immediately downloaded &lt;a href="http://www.opera.com/products/desktop/next/"&gt;Opera Kestrel&lt;/a&gt;, i.e. Opera 9.50 beta 1. I never actually liked Opera&amp;#8217;s default theme, so I started looking around for &lt;strong&gt;&lt;a href="http://my.opera.com/community/customize/skins/"&gt;new skins&lt;/a&gt;&lt;/strong&gt; (yes, eye-candy matters sometimes) and came across the Ximple series by &lt;a href="http://my.opera.com/community/customize/skins/author/?id=serafins"&gt;serafins&lt;/a&gt;. In particular, &lt;a href="http://my.opera.com/community/customize/skins/info/?id=3835"&gt;2nd thought &amp;#8211; Jimple&lt;/a&gt; quickly became my favorite.&lt;/p&gt;
&lt;h3&gt;Tabs&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;&amp;#8220;Opera is the Web pioneer that delivered tabbed browsing in 2000 [&amp;#8230;]&amp;#8221;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Opera tabs &lt;em&gt;feel&lt;/em&gt; stable and mature. Why? Probably because tabs are used more consistently to open not only web pages but also:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Downloads (&amp;#8220;Transfers&amp;#8221;)&lt;/li&gt;
	&lt;li&gt;&lt;span class="caps"&gt;RSS&lt;/span&gt; feeds&lt;/li&gt;
	&lt;li&gt;Notes&lt;/li&gt;
	&lt;li&gt;Emails&lt;/li&gt;
	&lt;li&gt;Bookmarks&lt;/li&gt;
	&lt;li&gt;Widget Management&lt;/li&gt;
	&lt;li&gt;Contacts&lt;/li&gt;
	&lt;li&gt;History&lt;/li&gt;
	&lt;li&gt;Page Links&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I think this is a great feature and Firefox should definitely consider it: v3.0 comes with new download and bookmark managers, but they&amp;#8217;re still dialogs. Yes, I know, there&amp;#8217;s probably some extension which allows you to display them in the sidebar, but that&amp;#8217;s not the point: Opera brings more consistency to the overall browsing experience by using tabs wherever they should be used.&lt;/p&gt;
&lt;p&gt;Additionally, Opera tabs&amp;#8230;&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Can be rearranged, exactly like Firefox tabs&lt;/li&gt;
	&lt;li&gt;Can be restored, if closed accidently, by re-opening them from the Trash can&lt;/li&gt;
	&lt;li&gt;Can be locked, meaning that they can&amp;#8217;t be closed accidently&lt;/li&gt;
	&lt;li&gt;Can be duplicated&lt;/li&gt;
	&lt;li&gt;Can be saved in groups (sessions) and re-opened later on&lt;/li&gt;
	&lt;li&gt;Can be restored if Opera crashes&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Speed Dial&lt;/h3&gt;
&lt;p&gt;When you open Opera for the first time, and &lt;em&gt;whenever you open a new empty tab&lt;/em&gt; the Speed Dial is displayed. What I originally thought it was one of the most annoying things introduced by Opera 9 turned out to be actually useful and very addictive.&lt;/p&gt;
&lt;p&gt;The idea behind it is simple:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Show a default page with 9 slots&lt;/li&gt;
	&lt;li&gt;Allow users to drag links to those slots&lt;/li&gt;
	&lt;li&gt;Display preview of each slot (which is cached and can be updated by refreshing the page)&lt;/li&gt;
	&lt;li&gt;Allow users to quickly access pages saved in the Speed Dial via CTRL+1 .. CTRL+9 or simply by clicking them.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Simple and effective. Once you get going with it, you&amp;#8217;ll overcome the initial feeling of imposition and you&amp;#8217;ll use it more and more: I literally can&amp;#8217;t live without it now!&lt;/p&gt;
&lt;h3&gt;Right-click goodies&lt;/h3&gt;
&lt;p&gt;While I was testing Opera, my girlfriend came along and asked me to look something up on &lt;a href="http://www.imdb.com/"&gt;&lt;span class="caps"&gt;IMDB&lt;/span&gt;&lt;/a&gt;. I normally had &lt;span class="caps"&gt;IMDB&lt;/span&gt; as custom search engine in Firefox, but unfortunately Opera didn&amp;#8217;t seem to allow users to customize their search engines&amp;#8230;&lt;/p&gt;
&lt;p&gt;Totally wrong. Not only Opera lets you add any search engine to the search bar, it also does it with style and in the easiest way possible:&lt;/p&gt;
&lt;p style="float:right;"&gt;&lt;img src="/files/opera/search_engines.png" alt="" /&gt;&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;Go to your search engine or any website with a search form&lt;/li&gt;
	&lt;li&gt;Right click the search field&lt;/li&gt;
	&lt;li&gt;Click &lt;strong&gt;Create Search&amp;#8230;&lt;/strong&gt;&lt;/li&gt;
	&lt;li&gt;Specify a name and a keyword for your search engine&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Done. You&amp;#8217;ll now be able to search that particular site directly from the search bar. As you can see, I added Wikipedia, &lt;span class="caps"&gt;IMDB&lt;/span&gt; and even the &lt;a href="http://www.uesp.net/wiki/Main_Page"&gt;Unofficial Elder Scrolls Pages&lt;/a&gt; in this way.&lt;/p&gt;
&lt;p&gt;Besides creating searches, Opera lets you do a lot by right-clicking anywhere on a page:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;strong&gt;Block Content&lt;/strong&gt;: Right-click an empty area of any webpage and select &lt;strong&gt;Block Content&lt;/strong&gt; to select which ads, scripts and images will be blocked from now on.&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Validate&lt;/strong&gt;: Validate the &lt;span class="caps"&gt;HTML&lt;/span&gt; source code of the current page.&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Translate&lt;/strong&gt;: Translate the current page into a foreign language with just two clicks.&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Open With&lt;/strong&gt;: Open the current page in another browser installed on your system.&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Edit Site Preferences&amp;#8230;&lt;/strong&gt;: Choose to block/allow cookies and popups, identify Opera as another browser, set a different encoding, enable/disable scripts, images, flash, etc. These setting apply to the &lt;em&gt;current web site only&lt;/em&gt;.&lt;/li&gt;
	&lt;li&gt;View source, reload page every X seconds/minutes, send by email, etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Widgets&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://widgets.opera.com/"&gt;Opera Widgets&lt;/a&gt; must not be considered as Opera&amp;#8217;s counterpart to Firefox extensions. Instead, Opera Widgets can be used as &lt;em&gt;poor man&amp;#8217;s Vista Gadgets&lt;/em&gt; on Windows XP, and they do their job most remarkably.&lt;/p&gt;
&lt;p&gt;I&amp;#8217;m personally very fond of these ones:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://widgets.opera.com/widget/3683/"&gt;The Free Dictionary&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://widgets.opera.com/widget/8461/"&gt;Wikipedia&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://widgets.opera.com/widget/3687/"&gt;Calendar&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://widgets.opera.com/widget/4513/"&gt;Whois Widget&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://widgets.opera.com/widget/3689/"&gt;Currency Converter&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://widgets.opera.com/widget/5118/"&gt;&lt;span class="caps"&gt;HTML&lt;/span&gt; Entities&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://widgets.opera.com/widget/7206/"&gt;Twitter&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;They all have a common trait: they all behave as standalone programs, as they should be. The Wikipedia one, for example, can display Wikipedia entries directly inside the widget, unlike some others which just take you to Wikipedia, which is rather pointless.&lt;/p&gt;
&lt;p&gt;Although widgets live within Opera, they can be displayed &amp;#8220;always behind&amp;#8221;, which means they&amp;#8217;ll be glued to your desktop and therefore will be visible whenever Opera and other applications are minimized.&lt;/p&gt;
&lt;p&gt;Needless to say that anyone brave enough can make widgets for Opera by following a simple &lt;a href="http://dev.opera.com/articles/view/opera-widgets-specification-1-0/"&gt;Widget Specification&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Everything you can do on the Internet&lt;/h3&gt;
&lt;p&gt;The term &lt;em&gt;browser&lt;/em&gt; applied to Opera is somehow misleading. Personally I would have called it something like &amp;#8220;Internet Suite&amp;#8221;, because that would be a better choice due to the features it offers and the things it can do.&lt;/p&gt;
&lt;p&gt;Traditionally speaking, a web browser can be used to browse web pages, read feeds (sometimes) and navigate through &lt;span class="caps"&gt;FTP&lt;/span&gt; directories. Here&amp;#8217;s what Opera can handle:&lt;/p&gt;
&lt;p style="float:right;"&gt;&lt;img src="/files/opera/files.png" alt="" /&gt;&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Web Pages &amp;ndash; No need of explanations here.&lt;/li&gt;
	&lt;li&gt;&lt;span class="caps"&gt;FTP&lt;/span&gt; &amp;ndash; &lt;span class="caps"&gt;FTP&lt;/span&gt; directories are listed very clearly, overriding server&amp;#8217;s settings with a more user-friendly layout.&lt;/li&gt;
	&lt;li&gt;Local Files &amp;ndash; This was a surprise for me. Typing &lt;code&gt;file://&lt;/code&gt; will automatically load a list of the drives currently available on your machine. Similarly, auto-completion for directory and file names is supported! I almost started using Opera as my everyday&amp;#8217;s file manager (almost).&lt;/li&gt;
	&lt;li&gt;Feeds &amp;ndash; An embedded feed reader can be used to subscribe to &lt;span class="caps"&gt;RSS&lt;/span&gt;/Atom feeds and view them&amp;#8230; in a tab, of course.&lt;/li&gt;
	&lt;li&gt;E-mails &amp;ndash; Opera &lt;em&gt;is&lt;/em&gt; also a pretty decent email client. As of version 9.5 full &lt;span class="caps"&gt;IMAP&lt;/span&gt; support has been added, which definitely makes the difference.&lt;/li&gt;
	&lt;li&gt;&lt;span class="caps"&gt;IRC&lt;/span&gt; &amp;ndash; Opera can be used as an client, which works pretty well. Who needs ChatZilla anymore?&lt;/li&gt;
	&lt;li&gt;News &amp;ndash; Opera can be used to signup and retrieve news from newsgroups.&lt;/li&gt;
	&lt;li&gt;Gopher/&lt;span class="caps"&gt;WAIS&lt;/span&gt; &amp;ndash; Although not used everyday, Opera can handle these old protocols as well.&lt;/li&gt;
	&lt;li&gt;BitTorrent Files &amp;ndash; By default, Opera can act as a BitTorrent client as well, so you can just open .torrent files through the program and then monitor the download progress in the Transfers window, like with any other normal download. While this feature is indeed useful, it is also possible to &lt;a href="http://www.opera.com/support/search/view/840/"&gt;disable it&lt;/a&gt; and still use your favorite BitTorrent client.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Portability and Synchronization&lt;/h3&gt;
&lt;p&gt;Let&amp;#8217;s spend some words about &lt;em&gt;portability&lt;/em&gt;. Sure, there are two &amp;#8220;Portable Opera&amp;#8221; apps out there, and they work well enough, but one thing I&amp;#8217;d like about a web browser is the ability to synchronize my preferences, customizations, themes, passwords etc. etc. across multiple computers. &lt;br /&gt;
Firefox is &lt;a href="http://labs.mozilla.com/2007/12/introducing-weave/"&gt;getting there&lt;/a&gt;, although the technology is still at a very early stage.&lt;br /&gt;
Opera is doing something similar through &lt;a href="http://link.opera.com/"&gt;Opera Link&lt;/a&gt;, which allows you to synchronize automatically your Bookmarks, your Personal Bar and your Speed Dial. All you need is to get a (free) Opera account, login to Opera Link and enable the synchronization feature from the &lt;em&gt;File&lt;/em&gt; menu. From now on every time you&amp;#8217;ll modify your Speed Dial or Bookmarks, the changes will be sent to your Opera Link page. Similarly, whenever you start using opera somewhere else, if you login to your Opera Account you should be able to synchronize your Bookmarks and Speed Dial.&lt;/p&gt;
&lt;p&gt;Here are some thoughts on this type of technology:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;It&amp;#8217;s not totally private yet. While it&amp;#8217;s great to be able to sync bookmarks and speed dial, the problems arise when you finish using your friend&amp;#8217;s computer for example&amp;#8230; what happens to the bookmarks you just sync&amp;#8217;ed? The only way to delete them would be to have your friend to log in to his Opera account and re-sync them. Not enough privacy for my liking.&lt;/li&gt;
	&lt;li&gt;Your passwords, notes, widgets, etc. etc. cannot be synchronized yet, but that will hopefully be possible in near future.&lt;/li&gt;
	&lt;li&gt;Sync&amp;#8217;ing bookmarks is pointless for me. Although Opera still hopes to compete with Del.icio.us &amp;amp; Co., that will be very hard to achieve. I stopped using in-browser bookmarks long ago.&lt;/li&gt;
	&lt;li&gt;Link seems and interesting feature considering that Opera is available on virtually &lt;em&gt;any operating system&lt;/em&gt; and a lot of different devices (mobile phones, Nintendo DS &amp;amp; Wii, &amp;#8230;).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;At any rate, it is still possible to &amp;#8220;carry around&amp;#8221; your personal opera settings by following the instructions provided on &lt;a href="http://help.opera.com/Windows/9.50/en/backup.html"&gt;this page&lt;/a&gt; which explains pretty much everything you need to know aboud Opera files and local storage.&lt;/p&gt;
&lt;h3&gt;Advanced Features&lt;/h3&gt;
&lt;p&gt;Opera looks more &amp;#8220;polished up&amp;#8221; than Firefox in most cases. The superb usage of tabs for nearly everything is one example, and another one is the possibility to apply skins (themes) on-the-fly, without having to restart the browser. &lt;br /&gt;
Firefox &lt;em&gt;can&lt;/em&gt; do this via the &lt;a href="http://labs.mozilla.com/2007/12/personas-for-firefox/"&gt;Personas&lt;/a&gt; extension, but Opera had this built-in for a long time.&lt;/p&gt;
&lt;p&gt;To apply a new skin:&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;Go to the &lt;a href="http://my.opera.com/community/customize/skins/"&gt;Skins Directory&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;Download a skin you like&lt;/li&gt;
	&lt;li&gt;Opera will download and apply the skin immediately, &lt;strong&gt;and it will ask you whether you want to keep it or not&lt;/strong&gt;. If you choose not to, it won&amp;#8217;t save it in your profile (very useful for quick previews). Neat.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Another quality opera always excelled to is accessibility. Besides using the interface in the traditional way, it is also possible to:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;strong&gt;Use &lt;a href="http://www.opera.com/products/desktop/mouse"&gt;mouse gestures&lt;/a&gt;&lt;/strong&gt; &amp;ndash; I wasn&amp;#8217;t a big fan of this until I bothered reading the excellent documentation Opera provided for them (which is significantly better than &lt;a href="http://www.mousegestures.org/"&gt;the Firefox&amp;#8217;s equivalent&lt;/a&gt;). It can be quite useful at times.&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Use &lt;a href="http://www.opera.com/products/desktop/keyboard/"&gt;keyboard shortcuts&lt;/a&gt;&lt;/strong&gt; &amp;ndash; Believe it or not, you can literally &lt;a href="http://www.opera.com/support/tutorials/nomouse/"&gt;use Opera without a mouse&lt;/a&gt;.&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;&lt;a href="http://www.opera.com/products/desktop/voice/"&gt;Speak&lt;/a&gt; to it&lt;/strong&gt; &amp;ndash; Opera&amp;#8217;s voice integration is getting better and better. Not only you can effectively &lt;a href="http://www.opera.com/support/tutorials/voice/"&gt;tell your browser what to do&lt;/a&gt;, you can also use the built-in text-to-speech function (Windows only) to have it read entire pages for you. It actually works quite well and it can parse punctuation well enough to apply the right intonation. Just for fun, I had it read it an Italian page&amp;#8230; and it actually worked as expected: it was like listening to an American reading an Italian text using US pronuntiation!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Finally, power users will be delighted of the way opera lets you hack the program settings, as you can:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Use &lt;strong&gt;Tools &amp;gt; Quick Preferences&lt;/strong&gt; to block/unblock popups, cookies, Java applets, images, etc.&lt;/li&gt;
	&lt;li&gt;Use &lt;strong&gt;Tools &amp;gt; Advanced&lt;/strong&gt; to access detailed information concerning cookies, cache (it lists every image/object cached!), plug-ins, Wand passwords, etc.&lt;/li&gt;
	&lt;li&gt;Use &lt;strong&gt;Tools &amp;gt; Appearence&amp;#8230;&lt;/strong&gt; to access and manage appearance-related settings, like skins, toolbars, buttons and panels&lt;/li&gt;
	&lt;li&gt;Use &lt;strong&gt;Tools &amp;gt; Preferences&amp;#8230;&lt;/strong&gt; to access general preferences (all the rest)&lt;/li&gt;
	&lt;li&gt;Type in &lt;strong&gt;opera:config&lt;/strong&gt; to view and tweak Opera&amp;#8217;s internal settings, somehow like Firefox&amp;#8217;s about:config, but much cleaner and easier to use.&lt;/li&gt;
	&lt;li&gt;Download the &lt;strong&gt;&lt;a href="http://dev.opera.com/tools/"&gt;Developer Console&lt;/a&gt;&lt;/strong&gt; to have a simpler alternative to Firefox&amp;#8217;s Web Developer Toolbar extension, to view &lt;span class="caps"&gt;DOM&lt;/span&gt; elements, &lt;span class="caps"&gt;CSS&lt;/span&gt; and Javascript information.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Annoyances&lt;/h3&gt;
&lt;p&gt;After using as main browser for a few weeks now, I can say that it&amp;#8217;s great but not perfect yet. It&amp;#8217;s very advanced, faster and more mature than any other browser, of course,but there are a few things which should be fixed or improved.&lt;/p&gt;
&lt;p&gt;In particular:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;strong&gt;It&amp;#8217;s not open source&lt;/strong&gt; &amp;ndash; This may not matter to someone, but some people consider this an essential requirement for their browser, and that&amp;#8217;s why Firefox is their most obvious choice. Although Opera is free, it is proprietary software after all, which means is definitely not as open as you may want it to be. Personally I&amp;#8217;m not too bothered, as I&amp;#8217;m starting to think that too much openness may lead to too many unuseful and bloated extensions and make the program somehow &amp;#8220;unpredictable&amp;#8221; and heavy.&lt;/li&gt;
	&lt;li&gt;&lt;del&gt;&lt;strong&gt;No address bar search&lt;/strong&gt; &amp;ndash; Amazingly, only Firefox seems to have this feature built-in. I&amp;#8217;m referring to the ability to type whatever in the address bar to be redirected to the site returned by a Google&amp;#8217;s &lt;em&gt;I&amp;#8217;m feeling lucky&lt;/em&gt; search. It is possible to emulate this feature in Opera by creating a custom search for &lt;em&gt;I&amp;#8217;m Feeling Lucky&lt;/em&gt; and assign it a short keyword like &amp;#8220;l&amp;#8221;. In this way, for example, typing in &lt;code&gt;l h3rald&lt;/code&gt; should lead you to this website. Not quite as immediate as in Firefox though.&lt;/del&gt;&lt;/li&gt;
	&lt;li&gt;&lt;del&gt;&lt;strong&gt;No find as you type&lt;/strong&gt; &amp;ndash; Another big disappointment for who comes from Firefox or Safari: Opera still uses a dialog box to perform page searches.&lt;/del&gt;&lt;/li&gt;
	&lt;li&gt;&lt;del&gt;&lt;strong&gt;No spell clecking&lt;/strong&gt; &amp;ndash; Again, both Firefox and Safari now offer text fields spell checking. Opera doesn&amp;#8217;t yet.&lt;/del&gt;&lt;/li&gt;
	&lt;li&gt;&lt;del&gt;&lt;strong&gt;No &lt;span class="caps"&gt;HTML&lt;/span&gt; mail composer&lt;/strong&gt; &amp;ndash; Opera&amp;#8217;s built-in mail client can display &lt;span class="caps"&gt;HTML&lt;/span&gt; emails but doesn&amp;#8217;t yet allow users to create them.&lt;/del&gt;&lt;/li&gt;
	&lt;li&gt;&lt;del&gt;&lt;strong&gt;Auto-start widgets?&lt;/strong&gt; &amp;ndash; This is a feature enhancement Opera Dev Team should consider: allow users to configure certain widgets to start automatically when Opera starts.&lt;/del&gt;&lt;/li&gt;
	&lt;li&gt;&lt;del&gt;&lt;strong&gt;Google Reader + Flash problems&lt;/strong&gt; &amp;ndash; Sometimes I experiences some scrolling problems when reading news which contain embedded flash movies on Google Reader.&lt;/del&gt;&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Corporate Sites&lt;/strong&gt; &amp;ndash; Unfortunately some corporate web site do not support Opera or are not displayed correctly in Opera. Unfortunately there&amp;#8217;s nothing much we can do about it but trying to &amp;#8220;mask&amp;#8221; Opera as another browser (via &lt;strong&gt;right-click &amp;gt; Edit Site Preferences&amp;#8230;&lt;/strong&gt;)&lt;/li&gt;
	&lt;li&gt;&lt;del&gt;&lt;strong&gt;Default Browser Problems&lt;/strong&gt; &amp;ndash; Setting Opera as default browser on Windows doesn&amp;#8217;t seem to set the file icons accordingly (or worse, it resets them to the default file icon).&lt;/del&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;&lt;span class="caps"&gt;ERRATA&lt;/span&gt;:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;It is possible to have Opera to redirect you to the right after typing a few words in thr address bar by setting Google&amp;#8217;s &amp;#8220;I&amp;#8217;m feeling lucky&amp;#8221; as default search engine &lt;em&gt;(thanks &lt;strong&gt;EJ902&lt;/strong&gt;)&lt;/em&gt;.&lt;/li&gt;
	&lt;li&gt;Spell Checking is &lt;a href="http://www.opera.com/support/tutorials/opera/spellcheck/"&gt;supported&lt;/a&gt; via &lt;span class="caps"&gt;GNU&lt;/span&gt; Aspell &lt;em&gt;(thanks &lt;strong&gt;cvm&lt;/strong&gt;)&lt;/em&gt; or by using &lt;a href="http://opera.gt500.org/ospell/"&gt;Ospell&lt;/a&gt; for inline spell checking &lt;em&gt;(thanks &lt;strong&gt;Dava&lt;/strong&gt;)&lt;/em&gt;.&lt;/li&gt;
	&lt;li&gt;Find as you type can be triggered by pressing &lt;code&gt;.&lt;/code&gt; and typing &lt;em&gt;(thanks &lt;strong&gt;cvm&lt;/strong&gt;)&lt;/em&gt;.&lt;/li&gt;
	&lt;li&gt;It is possible to auto-start widgets by saving a session with all your widget open and reloading it at every startup [CTRL+F12 &amp;gt; General &amp;gt; Startup &amp;gt; Continue saved sessions] &lt;em&gt;(thanks &lt;strong&gt;Tamil&lt;/strong&gt; &amp;amp; &lt;strong&gt;Ameer&lt;/strong&gt;)&lt;/em&gt;.&lt;/li&gt;
	&lt;li&gt;As of the &lt;a href="http://my.opera.com/desktopteam/blog/"&gt;latest snapshot&lt;/a&gt;, setting Opera as default browser and handler for &lt;span class="caps"&gt;HTML&lt;/span&gt; files doesn&amp;#8217;t cause any problems &lt;em&gt;thanks &lt;strong&gt;Ayush&lt;/strong&gt;)&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;Despite the few annoyances listed in the previous section, Opera 9.5 beta 1 truly impressed me. I was waiting for Opera to get better before switching and now I&amp;#8217;ve not been using Firefox for a few weeks.&lt;br /&gt;
Although Opera offers a lot of features, there&amp;#8217;s still room for improvements, especially for what concerns integration with third party services: I would really like to see some sort of integration with del.icio.us, and that could be possible via widgets at least. &lt;br /&gt;
Regarding the new Opera Link feature, it looks very promising and a potential competitor for Mozilla Weave even though it will be used mainly to get more and more users to register to the Opera community (I did, at least), which is indeed very active any way.&lt;/p&gt;
&lt;p&gt;To conclude this article, which still barely scratches the surface of this very powerful application, I&amp;#8217;d like to praise two more things about Opera:&lt;/p&gt;
&lt;p&gt;&lt;span style="float:right; margin:3px;"&gt;&lt;br /&gt;
&lt;script type="text/javascript"&gt;
digg_url = 'http://digg.com/software/A_Firefox_Lover_s_Guide_to_Opera';
&lt;/script&gt;
&lt;script src="http://digg.com/tools/diggthis.js" type="text/javascript"&gt;&lt;/script&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Their website network, and in particular their truly excellent documentation knowledge base, which is very comprehensive of references, tutorials and interesting articles. I am a full time technical writer myself, and I&amp;#8217;ve hardly ever come across better documentation.&lt;/li&gt;
	&lt;li&gt;Their extensive &lt;a href="http://www.opera.com/docs/specs/"&gt;support and compliance to web standards&lt;/a&gt;, which makes Opera the most advanced browser ever made.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you&amp;#8217;ve not tried Opera before, or if you&amp;#8217;ve always dismissed it because &amp;#8220;X browser is better&amp;#8221;, you may want to &lt;a href="http://www.opera.com/products/desktop/"&gt;give it another shot&lt;/a&gt;: for me it was definitely worthwhile!&lt;/p&gt;</description>
      <pubDate>Fri, 28 Dec 2007 13:19:00 -0000</pubDate>
      <guid>http://www.h3rald.com/articles/firefox-lovers-guide-to-opera/</guid>
      <link>http://www.h3rald.com/articles/firefox-lovers-guide-to-opera/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/firefox-lovers-guide-to-opera/#comments</comments>
      <category>browsers</category>
      <category>review</category>
      <category>opera</category>
      <category>firefox</category>
    </item>
    <item>
      <title>Book Review: Mongrel Digital Shortcut</title>
      <description>&lt;p&gt;If you ever considered about developing an deploying a Rails application in the last year or so, you must have heard of &lt;a href="http://mongrel.rubyforge.org/index.html"&gt;Mongrel&lt;/a&gt; before. If you didn&amp;#8217;t, I&amp;#8217;d recommend you learn more about it because up to now it proved to be one of the few essential ingredients for deploying &lt;em&gt;scalable&lt;/em&gt; Rails applications.&lt;/p&gt;
&lt;p&gt;Mongrel is a creation of &lt;a href="http://www.zedshaw.com/"&gt;Zed Shaw&lt;/a&gt; who started writing a replacement for FastCGI to use with Rails, and ended up creating a brand new, &lt;span class="caps"&gt;HTTP&lt;/span&gt; web server who turned out to be one of the best things the Rails community ever saw happening.&lt;/p&gt;
&lt;p&gt;It was created to be simple to use and configure, nevertheless it &lt;em&gt;does&lt;/em&gt; require some skill to set it up and tune it. Documentation is there, along with plenty of blog posts, but there&amp;#8217;s also an interesting &lt;a href="http://www.informit.com/store/product.aspx?isbn=0321483502&amp;amp;rl=1"&gt;book&lt;/a&gt; from &lt;a href="http://www.awprofessional.com/"&gt;Addison Wesley Professional&lt;/a&gt; which is definetely worth a read.&lt;/p&gt;
&lt;p style="float:right;"&gt;&lt;img src="/files/mongrel_shortcut.jpeg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;#8220;Mongrel: Serving, Deploying, and Extending Your Ruby Applications&amp;#8221; &amp;ndash; that&amp;#8217;s the title of the book. A &lt;em&gt;Digital Shortcut&lt;/em&gt;, 100-odd pages long, in &lt;em&gt;landscape&lt;/em&gt; format to make it easier to read on a computer, straight to the point with no added sugar for just 15$ (&lt;span class="caps"&gt;PDF&lt;/span&gt; only). I must say Addison Wesley got it right: the book&amp;#8217;s format is, as a matter of fact, &lt;em&gt;optimized for web developers&lt;/em&gt;, especially those who can&amp;#8217;t afford to read a 500-pages book covering everything about a subject just to find that one thing they don&amp;#8217;t know about.&lt;br /&gt;
This &lt;em&gt;shortcut&lt;/em&gt; can be seen, essentially, as an expanded cheatsheet which will teach you the basics about Mongrel and also give you plenty of advice on how to learn more about it.&lt;/p&gt;
&lt;p&gt;Let&amp;#8217;s have a closer look at it.&lt;/p&gt;
&lt;h3&gt;Overview, Introduction &amp;amp; Getting Started&lt;/h3&gt;
&lt;p&gt;The first three &lt;del&gt;chapters&lt;/del&gt; sections (there are no chapters, just &lt;em&gt;sections&lt;/em&gt;) of the book are meant to be a gentle introduction to Mongrel and its world. The main author is &lt;a href="http://www.informit.com/authors/bio.aspx?a=0260912e-6ed8-4ed1-882a-c357e644feec"&gt;Matt Pelletier&lt;/a&gt;, but Zed Show&amp;#8217;s contributions are definitely one of the book&amp;#8217;s best selling points. &lt;br /&gt;
Zed&amp;#8217;s thoughts are scattered here and there in many &lt;em&gt;sidebars&lt;/em&gt; throughout the book (there&amp;#8217;s at least one in each section): you&amp;#8217;ll see an odd-looking face (Zed&amp;#8217;s self-caricature) with some text next to it; when you read it, you&amp;#8217;ll notice that they are &lt;em&gt;actually&lt;/em&gt; Zed&amp;#8217;s own thoughts, straight from his mind, with no editorial filter whatsoever in-between. &lt;br /&gt;
Be warned: the text included within the &lt;strong&gt;Zed Sez&lt;/strong&gt; sidebars is highly opinionated, that&amp;#8217;s precisely what Zed &lt;em&gt;feels&lt;/em&gt; to say about something, and he&amp;#8217;ll just say it: just the plain, simple thoughts of an experienced programmer. As the author explains in &lt;strong&gt;Section 1&lt;/strong&gt;: &lt;em&gt;&amp;#8220;[&amp;#8230;] You may not agree with everything he says, but you probably should.&amp;#8221;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Section 2&lt;/strong&gt; is a general introduction about Mongrel. It explains &lt;em&gt;what&lt;/em&gt; it is, &lt;em&gt;when&lt;/em&gt; and &lt;em&gt;why&lt;/em&gt; it was made, and &lt;em&gt;how&lt;/em&gt; it works. There&amp;#8217;s nothing new to learn if you already used Mongrel before, probably, but it&amp;#8217;s definitely the first thing to show to someone who&amp;#8217;s new to Mongrel and its world, and possibly a bit skeptical about it. &lt;br /&gt;
The last subsection &lt;em&gt;&amp;#8220;What can Mongrel do for me&amp;#8221;&lt;/em&gt; is an attempt to &lt;del&gt;brainwash&lt;/del&gt; persuade you to fully embrace Mongrel and its philosophy, whether you are a developer, a sysadmin or even a manager: assertions like &lt;em&gt;&amp;#8220;Mongrel is pretty damned secure.&amp;#8221;&lt;/em&gt; and &lt;em&gt;&amp;#8220;Mongrel&amp;#8217;s license is capitalist-friendly.&amp;#8221;&lt;/em&gt; will definitaly make some of you (managers) happy.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Section 3&lt;/strong&gt; is slightly more juicy than the previous one, as it explains how to install and use Mongrel. Basically that&amp;#8217;s what everyone who ever used it already knows, but it&amp;#8217;s still necessary for the book&amp;#8217;s consistency, after all. After reading this section, you&amp;#8217;ll probably have your first Mongrel up and running and serving your little Rails application&amp;#8217;s pages, and you&amp;#8217;ll begin to wonder why the hell you need to keep reading this book now that everything seems to work already&amp;#8230;&lt;/p&gt;
&lt;h3&gt;Section 4: Configurations&lt;/h3&gt;
&lt;p&gt;&amp;#8230;aka &amp;#8220;a truly useful Mongrel cheatsheet&amp;#8221;. This section dives deep(er) into Mongrel&amp;#8217;s configuration by explaining what each start parameter does in detail. The parameters are presented in tabular form in a very well-organized way. As you would expect from an high-quality cheatsheet.&lt;/p&gt;
&lt;p&gt;Then the author will explore a few commonly used deployment scenarios, in particular:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;strong&gt;Standalone&lt;/strong&gt; &amp;ndash; The simplest configuration possible, with just one Mongrel instance serving both static and dynamic pages.&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;mongrel&amp;#95;cluster&lt;/strong&gt; &amp;ndash; How to use &lt;em&gt;&amp;#8220;a pack of mongrels&amp;#8221;&lt;/em&gt; together to handle more traffic.&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Behind a static web server&lt;/strong&gt; &amp;ndash; The most common (and most scalable) option, used to serve static content faster using a front-end server and use Mongrel only to handle Ruby pages.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Towards the end of the section, for the developer&amp;#8217;s delight, the author will discuss two common, useful scenarios where Mongrel can be used:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;strong&gt;Apache 2 + mod_proxy_balancer + mongrel&amp;#95;cluster&lt;/strong&gt;&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Nginx + mongrel&amp;#95;cluster&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The difference here is that detailed instructions are provided on how to setup and configure each server, including example file sources. This can be particularly useful for the Nginx example, as most of the documentation for this fantastic, lightweight Mongrel fron-end is scattered around the web (or written in Russian in a &lt;a href="http://sysoev.ru/nginx/"&gt;well known place&lt;/a&gt;).&lt;/p&gt;
&lt;h3&gt;Section 5: Production Deployment&lt;/h3&gt;
&lt;p&gt;This section introduces one of the most important part of the life cycle of a Rails application: the deployment on a production server. The author is pretty honest about the whole subject:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&amp;#8220;You will not do this in a day. If you are expecting to code until 1 minute before your deadline and then simply point and click and have an instant server then you need to take some kind of&lt;br /&gt;
medication because you are violently hallucinating. You will need at least a week of 8 hours days to make sure your first deployment works and to have the time to do it right.&amp;#8221;&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Sounds terribly true. Especially for larger projects demanding good performance under heavy traffic. Scared? Probably, if you never deployed a Rails application &amp;#8220;properly&amp;#8221; before, but at least the book comes to the rescue by providing an overview of what you need to perform a deployment and why it is such a complex and delicate process.&lt;/p&gt;
&lt;p&gt;Not only this, but also a &amp;#8220;Best Practices Rubric&amp;#8221; is also provided for the developer&amp;#8217;s own private enjoyement. It&amp;#8217;s written as a list of questions like:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;11. Do you have a shared location where you can document the deployment, such as a Wiki or &lt;span class="caps"&gt;CMS&lt;/span&gt;?&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;12. Do you know how to use httperf or ab and know what the statistics mean?&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;After these 13 questions, the author provides the key to give a meaning to your answers:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&amp;quot;For each question you answer with &amp;#8220;NO&amp;#8221;, add 10 hours to your time estimate for completion. This may seem unrealistic, since saying &amp;#8220;NO&amp;#8221; to everything means it&amp;#8217;ll take 190 hours (about one&lt;br /&gt;
month), but this estimate is actually low according to most first deployment experiences.&amp;quot;&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;If you answered &amp;#8220;NO&amp;#8221; too many times to these questions, you may want to read on through the next subsection which states 17 &amp;#8220;worst practices&amp;#8221;: an invaluable read for beginners!&lt;/p&gt;
&lt;p&gt;But after all this section is not only about stating the obvious (&amp;#8230;right?): a full example scenario is describedand examined throughly to give you an idea of how a deployment &lt;em&gt;should&lt;/em&gt; be made, using three different machines:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;One for Apache (as a front-end to Mongrel)&lt;/li&gt;
	&lt;li&gt;One for the Mongrel cluster and the Rails application&lt;/li&gt;
	&lt;li&gt;One for the database&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Maybe something you&amp;#8217;ll never do if you just want to run your grandma&amp;#8217;s site on Rails, but certainly something you may want to start looking at if your grandma becomes really popular and your small server gets grounded by several thousands of visitors per day.&lt;/p&gt;
&lt;p&gt;The last part of the section will give you a brief introduction on monitoring your applications and on which tools you should be using, although it does not discuss the subject in detail at all, it&amp;#8217;s just meant to point you to the right direction.&lt;/p&gt;
&lt;h3&gt;Section 6: Extending Mongrel&lt;/h3&gt;
&lt;p&gt;This section digs deeper into the software code internals and describes &lt;em&gt;how to teach new tricks to your Mongrel&lt;/em&gt;, i.e. how to extend its functionality.&lt;/p&gt;
&lt;p&gt;Before you begin, though, don&amp;#8217;t forget what Zed himself has to say about Mongrel&amp;#8217;s simplicity:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&amp;#8220;I&amp;#8217;ve always had a different aesthetic sense when I write my software. I value simplicity and directness and try to write software that follows this approach. I jokingly call it the Shibumi School of Software Structure. All I do is apply this rule: When given two possible designs with equal end results, pick the simpler one. I then ruthlessly strip the solution down to its finest elements, but no more.&amp;#8221;&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Mongrel&amp;#8217;s architecture is not that complex, and this section is sufficient to get you started by providing an overview of the main classes involved (HttpServer, HttpRequest, HttpResponse, HttpHandler, URIClassifier), and how they work together.&lt;br /&gt;
Note that the book won&amp;#8217;t describe anything about the APIs of these classes. but after all, the project&amp;#8217;s &lt;a href="http://mongrel.rubyforge.org/rdoc/files/README.html"&gt;RDoc documentation&lt;/a&gt; should cover all the details you need.&lt;/p&gt;
&lt;p&gt;The rest of the section focuses on how to extend Mongrel, by:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Writing custom handlers in Ruby&lt;/li&gt;
	&lt;li&gt;Creating custom filters to perform security checks, clean up requests and preliminary file processing&lt;/li&gt;
	&lt;li&gt;Creating plugins and distributing them as rubygems&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Two working examples are also provided:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;An example handler to deflate content (if the browser supports deflate)&lt;/li&gt;
	&lt;li&gt;An example &amp;#8220;duck&amp;#8221; plugin, to make Mongrel quack like a duck when it&amp;#8217;s started (not the most useful thing in the world, but serves the purpose)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Debugging, Performance &amp;amp; Security&lt;/h3&gt;
&lt;p&gt;The last three sections deals with other important aspects concerning the deployment of your application, how to debug, how to improve performance and how to secure your application.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Section 7&lt;/strong&gt; introduces two debugging modes:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Dash-Bee logging (-B)&lt;/li&gt;
	&lt;li&gt;USR1 logging (lighter)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And also gives you an idea on what to look for when debugging an application. Nothing too detailed, granted, but enough to make sure you are pointed in the right direction.&lt;/p&gt;
&lt;p&gt;Again, Zed&amp;#8217;s wisdom and wit are remarkable:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&amp;#8220;These people&amp;#8217;s problem is they suffer from Potpourri Turd Syndrome&#8212;a belief that their you-know-what don&amp;#8217;t stink and smells like fine dew on freshly cut grass. Whenever there&amp;#8217;s a bug, they go&lt;br /&gt;
running like kids in a candy store to other people&amp;#8217;s code trying to find fault and just assume that it&amp;#8217;s nothing they wrote.&lt;br /&gt;
[&amp;#8230;]&lt;br /&gt;
When you run into a problem with your application, always assume it&amp;#8217;s your fault first. Mongrel&amp;#8217;s not perfect, but its code is minuscule compared to the size of Rails and most likely even your own appli-cation code. Mongrel also powers many large and medium deployments without any problems. If there&amp;#8217;s an error, the evidence already says it&amp;#8217;s in your code, so bite the bullet and start investigating it as if it&amp;#8217;s your problem.&amp;#8221;&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Similarly, &lt;strong&gt;Section 8&lt;/strong&gt; is a short but useful overview on performance tips and tricks and deployment tuning. The most useful thing is probably the checklist of the &amp;#8220;tuning process&amp;#8221;, which illustrates the simple steps to take to tune your application.&lt;/p&gt;
&lt;p&gt;Finally, &lt;strong&gt;Section 9&lt;/strong&gt; addresses some common security concerns and clarifies how Mongrel deals with them. The answer is normally &amp;#8220;Mongrel strictly does this&amp;#8221; or &amp;#8220;Mongrel doesn&amp;#8217;t support this feature&amp;#8221;. After all, you should have understood by now that Mongrel is an example of simplicity and that it deliberately does not aim to offer all the feature you&amp;#8217;d expect by a server like Apache:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&amp;quot;As you probably see, Mongrel say, &amp;#8220;No&amp;#8221; in many places where most Web servers say, &amp;#8220;Yes, OK.&amp;#8221; Sometimes this is because no one using Mongrel has needed it yet, sometimes it&amp;#8217;s because there&amp;#8217;s a&lt;br /&gt;
better, simpler way to accomplish the same goal. Mongrel is a different kind of Web server, and frequently you can solve your problem with a different solution.&amp;quot;&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;If Mongrel is opinionated software, this is definitely an opinionated book which fully embraces the project&amp;#8217;s philosopy of simplicity above everything else. It&amp;#8217;s an interesting read and it won&amp;#8217;t bore you to death by deliberately skipping long and potentially tedious subjects and adding interesting insights instead (like the Zed Sez sidebars). Perhaps it is a bit too direct towards certain people, who may get even get offended (as planned) by some of the author&amp;#8217;s assertions.&lt;/p&gt;
&lt;p&gt;Despite being a 100-pages book, this &lt;em&gt;shortcut&lt;/em&gt; covers pretty much everything you need to know &lt;strong&gt;about Mongrel&lt;/strong&gt;. It will &lt;em&gt;not&lt;/em&gt; teach you everything about deployment, security, performance tweaks and debugging though: as the authors often state throughout the book, a lot of (big) books are available on those subject, and it wouldn&amp;#8217;t make sense to even attempt to discuss them in this shortcut.&lt;/p&gt;
&lt;p&gt;Similarly, you won&amp;#8217;t find complex examples either, but that&amp;#8217;s acceptable because simple examples are often the only thing you need to grasp the basics of a concept or feature, and then use them as a &amp;#8220;scaffold&amp;#8221; for your own code.&lt;/p&gt;
&lt;p&gt;Globally, the book is well balanced and &lt;em&gt;optimized&lt;/em&gt; for its size: lightweight introductory sections at first, then the &amp;#8220;real juice&amp;#8221; in the middle, and a few overview sections on advanced topics towards the end. You can read it easily in a few hours, perhaps less, and whenever you need to look something up in a hurry it will be fairly easy to locate.&lt;/p&gt;
&lt;p&gt;A good read, and a &lt;em&gt;must&lt;/em&gt; for everyone who wants to learn more about Mongrel or Rails deployment.&lt;/p&gt;</description>
      <pubDate>Sat, 15 Dec 2007 02:42:00 -0000</pubDate>
      <guid>http://www.h3rald.com/articles/mongrel-shortcut-review/</guid>
      <link>http://www.h3rald.com/articles/mongrel-shortcut-review/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/mongrel-shortcut-review/#comments</comments>
      <category>review</category>
      <category>books</category>
      <category>rails</category>
      <category>ruby</category>
    </item>
    <item>
      <title>Review Services</title>
      <description>&lt;p&gt;When it comes to software, I definitely like to try out new things. My collegues takes the piss out of me because every &lt;del&gt;week&lt;/del&gt; day I come up with &amp;#8220;some new tool they &lt;em&gt;have&lt;/em&gt; to start using&amp;#8221; and so on.&lt;br /&gt;
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&amp;#8217;t &lt;em&gt;feel&lt;/em&gt; right. I&amp;#8217;ll use a tool for months but still try out new ones which claim to do the same thing &#8212; but better &#8212; as they come out.&lt;br /&gt;
Unfortunately &#8212; or fortunately, depends how you look at it &#8212; when it comes to software, there are very few &lt;em&gt;silver bullets&lt;/em&gt;, and things keep changing: that&amp;#8217;s the way it is and the way it will be.&lt;/p&gt;
&lt;p&gt;I must try to write up a page (and ideally update it regularly, that&amp;#8217;s the hard part) listing all the tools I use, at some point&amp;#8230; but at any rate, if you coded some new app you think kicks ass or you found a hidden jewel in the labyrinth of freeware, just let me know: I&amp;#8217;ll definitely try it out, and if it&amp;#8217;s worth a post I&amp;#8217;ll blog about it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The same applies to books&lt;/strong&gt;, actually, as I like reading, especially those which are related to Ruby or programming, nowadays.&lt;/p&gt;
&lt;p&gt;The cost of such reviews and articles? Depends! Certainly I wouldn&amp;#8217;t mind donations or some compensation of some form, especially from publishers or software companies. It may be money, books, software or even nothing: it really depends on what I have to review.&lt;br /&gt;
Please be aware that I am &lt;strong&gt;not&lt;/strong&gt; doing this full time, and I already have a job and a fianc&#233;e to look after, but I&amp;#8217;ll do my best to publish as much as I can on my site or even elsewhere elsewhere [Note: on e-zines, magazines &amp;amp; similar, not on your brother&amp;#8217;s friend&amp;#8217;s mother-in-law&amp;#8217;s crappy blog!].&lt;/p&gt;
&lt;p&gt;For any inquiries, contact me (&lt;strong&gt;h3rald [&#8212;at&#8212;] h3rald.com&lt;/strong&gt;).&lt;/p&gt;</description>
      <pubDate>Fri, 14 Dec 2007 11:24:00 -0000</pubDate>
      <guid>http://www.h3rald.com/articles/review-services/</guid>
      <link>http://www.h3rald.com/articles/review-services/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/review-services/#comments</comments>
      <category>review</category>
      <category>website</category>
      <category>personal</category>
      <category>tools</category>
      <category>books</category>
    </item>
    <item>
      <title>A closer look at Komodo Edit</title>
      <description>&lt;p&gt;&lt;a href="http://digg.com/programming/A_closer_look_at_Komodo_Edit"&gt;&lt;br /&gt;
&lt;img src="http://digg.com/img/badges/180x35-digg-button.png" width="180" height="35" alt="Digg!" /&gt;&lt;br /&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;What&amp;#8217;s your favorite code editor?&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;This is a common question which still keeps popping up on community boards, mailing lists, comments, etc. Every programmer who writes code in some programming language normally has an editor of choice. Being realistic, most of the times it&amp;#8217;s not only one program but several, depending on the language and on the features needed at the time.&lt;br /&gt;
Yes, great, but how do you choose your favorite editor?&lt;br /&gt;
By trying a lot of them of course: that&amp;#8217;s what I&amp;#8217;ve been doing since I started programming. Lately I&amp;#8217;ve become fond of &lt;a href="http://www.vim.org"&gt;Vim&lt;/a&gt; (or better, gVim), although I have a few other editors I may recommend, e.g.:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://notepad-plus.sourceforge.net/uk/site.htm"&gt;Notepad++&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://intype.info/home/index.php"&gt;Intype&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://scintilla.sourceforge.net/SciTE.html"&gt;SciTE&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Recently, however, I came across my &lt;em&gt;n^th^&lt;/em&gt; &amp;#8220;what&amp;#8217;s your favorite editor&amp;#8221; thread and someone mentioned &lt;a href="http://www.activestate.com/Products/komodo_edit/"&gt;Komodo Edit&lt;/a&gt;. I knew of it already, actually, but I never had a chance to give it a &lt;em&gt;proper&lt;/em&gt; try. &lt;br /&gt;
ActiveState is well known mainly for two things:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Their effort in offering a lot of commercial, windows-based Perl libraries&lt;/li&gt;
	&lt;li&gt;Their commercial &lt;span class="caps"&gt;IDE&lt;/span&gt;, Komodo &lt;span class="caps"&gt;IDE&lt;/span&gt;, which I personally tried quite a long time ago&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The problems of Komodo &lt;span class="caps"&gt;IDE&lt;/span&gt; are foundamentally two:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;It costs money &amp;#8211; this is not great in a world where Eclipse and Netbeans are free&lt;/li&gt;
	&lt;li&gt;It is an &lt;span class="caps"&gt;IDE&lt;/span&gt; &amp;#8211; which normally means &lt;em&gt;&amp;#8216;heavy as hell&amp;#8217;&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It&amp;#8217;s a matter of taste and needs: some people feel more confortable with using an editor for certain tasks, while sometimes an &lt;span class="caps"&gt;IDE&lt;/span&gt; may be the best solution, despite its potential slowness and bulk.&lt;/p&gt;
&lt;p&gt;Komodo Edit solves the above-mentioned problems because:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;It&amp;#8217;s free&lt;/li&gt;
	&lt;li&gt;It&amp;#8217;s an editor&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Actually I wouldn&amp;#8217;t call it an editor, because it offers quite a lot of features which are normally absent in editors &amp;#8212; it&amp;#8217;s something in-between, which definitely deserves a try.&lt;/p&gt;
&lt;h2&gt;User interface&lt;/h2&gt;
&lt;p&gt;Komodo Edit&amp;#8217;s interface is one of the most clear I&amp;#8217;ve ever come across. It is organized in four main areas plus the top menu and toolbar (which only has the buttons you &lt;span class="caps"&gt;REALLY&lt;/span&gt; need, unlike Notepad++&amp;#8217;s 31-button-bar).&lt;/p&gt;
&lt;p&gt;&lt;img src="/files/komodo_main.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;The central area is for editing, the left pane is for the Project browser, the right one is for the Toolbox and the bottom pane is for command output. Luckily enough, a set of handy little buttons is provided in the toolbar to show and hide each pane. I normally only use the Project Browser and the main editing area, leaving the Toolbox and Command Output panes hidden, but that&amp;#8217;s up to you really.&lt;/p&gt;
&lt;p style="float:left;"&gt;&lt;img src="/files/komodo_show-hide_pane.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Komodo Edit allows symultaneous editing of multiple documents, which means that it has tabs like most of the best editors out there. Furthermore, it is possible to have Komodo re-open the files edited in the last editing session, saving you a lot of time. Granted, a lot of &lt;span class="caps"&gt;IDE&lt;/span&gt; do, but this is &lt;strong&gt;&lt;span class="caps"&gt;NOT&lt;/span&gt;&lt;/strong&gt; an &lt;span class="caps"&gt;IDE&lt;/span&gt;, remember? It&amp;#8217;s an &lt;em&gt;editor&lt;/em&gt;, or at least it is advertised as such.&lt;/p&gt;
&lt;p&gt;In reality it has &lt;em&gt;most&lt;/em&gt; of the power of a full-blown &lt;span class="caps"&gt;IDE&lt;/span&gt; though normally remaining under the 60K memory usage (out of 2GB of total &lt;span class="caps"&gt;RAM&lt;/span&gt;) &amp;#8212; which is not that bad, considering what Eclipse and NetBeans need.&lt;br /&gt;
Out of all the &lt;a href="http://www.activestate.com/Products/komodo_edit/edit_vs_ide.plex"&gt;extra features&lt;/a&gt; offered by Komodo &lt;span class="caps"&gt;IDE&lt;/span&gt;, the only one I truly miss is the Code Browser. Other than that, it quickly became my editor/&lt;span class="caps"&gt;IDE&lt;/span&gt; of choice (when gVim isn&amp;#8217;t looking, of course&amp;#8230;)&lt;/p&gt;
&lt;p&gt;Lets find out why&amp;#8230;&lt;/p&gt;
&lt;h2&gt;Editing features&lt;/h2&gt;
&lt;p&gt;Komodo Edit comes with all the editing features of ever average editor, so &lt;em&gt;&amp;#8220;[&amp;#8230;] Code commenting, auto-indent and outdent, block selection, incremental search, reflow paragraph, join lines, enter next character as raw literal, repeat next keystroke and clean line endings on &amp;#8220;save&amp;#8221;.&amp;quot;&lt;/em&gt;, it uses Scintilla as main editing component, which makes it a close relative of Notepad++, Notepad2 and of course SciTE when it comes to understanding languages and syntax highlighting.&lt;/p&gt;
&lt;p&gt;This is good, of course, as Scintilla is an excellent editing component, but &amp;#8211; I have to say this &amp;#8211; not as good as Vim when it comes to syntax highlighting (nothing is as good as Vim though, so I can&amp;#8217;t really complain!).&lt;br /&gt;
As you can see from the screenshot I included earlier on, it is possible to change the default black-on-white color scheme to something more stimulating and energy-saving. This doesn&amp;#8217;t mean I have to manually re-set the color of each element, it actually comes with a black-background scheme, which is handy.&lt;/p&gt;
&lt;h3&gt;Supported Languages &amp;amp; Syntax Highlighting&lt;/h3&gt;
&lt;p&gt;Komodo Edit supports quite a few programming languages, which means it can recognize the most common ones (C, C++, Java, &lt;span class="caps"&gt;PHP&lt;/span&gt;, Python, Ruby, Perl) but it also smart enough to notice framework-specific syntaxes like Smarty, Django or &lt;span class="caps"&gt;RHTML&lt;/span&gt;.&lt;br /&gt;
Like every scintilla-based editors, it sports a nice &lt;span class="caps"&gt;HTML&lt;/span&gt; multi-highlighter which allows you to keep putting all the Javascript, &lt;span class="caps"&gt;CSS&lt;/span&gt; and server-side scripting into the same file, &lt;span class="caps"&gt;GREAT&lt;/span&gt;! No, you probably wouldn&amp;#8217;t want to do that, but it&amp;#8217;s a good thing to have.&lt;/p&gt;
&lt;h3&gt;Auto-completion&lt;/h3&gt;
&lt;p&gt;What makes this editor a really handy tool is its auto-completion capabilities. Why? well, because it supports:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Ruby: require, class modules (on . and ::), class variables and methods, method calltips.&lt;/li&gt;
	&lt;li&gt;Python&lt;/li&gt;
	&lt;li&gt;Perl&lt;/li&gt;
	&lt;li&gt;&lt;span class="caps"&gt;PHP&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;&lt;span class="caps"&gt;XSLT&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;&lt;span class="caps"&gt;XML&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;Tcl&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Why is this so special? Well, because if you want this you normally need an &lt;span class="caps"&gt;IDE&lt;/span&gt;, and if you want it for Ruby &lt;span class="caps"&gt;AND&lt;/span&gt; Python &lt;span class="caps"&gt;AND&lt;/span&gt; Perl your choices are very limited. &lt;br /&gt;
I played with the Ruby auto-completion features quite a bit, and I&amp;#8217;m actually really impressed.&lt;/p&gt;
&lt;p style="float:right;"&gt;&lt;img src="/files/komodo_auto-completion.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;It can suggest what to write through calltips after a &lt;code&gt;require&lt;/code&gt; directive, after a . and a ::, and hitting CTRL+SPACE (or just tab if you configure the right option) will auto-complete what you&amp;#8217;re writing, be it a language keyword, a variable of any kind or a method. Additionally, it comes with &amp;#8220;soft characters support&amp;#8221;, which means it will try to match ( [ { when possible, allowing you to &lt;em&gt;write over&lt;/em&gt; the completed character if you want to.&lt;/p&gt;
&lt;h3&gt;Syntax Checking, Vi/Emacs key bindings and code folding&lt;/h3&gt;
&lt;p&gt;The heading is almost self-explanatory here: Komodo Edit supports code folding (you can even chose the folding chracters!) for all its supported languages, syntax checking (it can detect and display errors before running the script, very useful in Ruby, and hard to find in other editors) and Vi/Emacs key bindings. &lt;br /&gt;
It also offers &amp;#8220;vi emulation&amp;#8221;, which is constantly improving through every release &amp;#8211; so you won&amp;#8217;t forget Vim&amp;#8217;s keys when I don&amp;#8217;t use it: very nice, and again, hard to find in other editors, nevermind IDEs!&lt;/p&gt;
&lt;h2&gt;Projects and Tools&lt;/h2&gt;
&lt;p style="float:right;"&gt;&lt;img src="/files/komodo_toolbox.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;The Project Browser and Toolbox are two features which are normally presents in IDEs and which are normally not found in editors. Granted, some editors like &lt;a href="http://www.pspad.com/en/"&gt;PSPad&lt;/a&gt; do indeed have &amp;#8220;projects&amp;#8221;, but most of the others don&amp;#8217;t. A &lt;em&gt;project&lt;/em&gt; in Komodo Edit is normally composed by:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Some &lt;em&gt;Live Folders&lt;/em&gt; including all the source files of the application you&amp;#8217;re developing&lt;/li&gt;
	&lt;li&gt;An optional set of tools, commands, snippets and other goodies which may help you coding that particular application.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It is possible to create these tools by clicking the &lt;strong&gt;Add Item to current project&lt;/strong&gt; button in the Projects toolbar or by clicking the &lt;strong&gt;Add Item to Toolbox&lt;/strong&gt; button just over the toolbox. &lt;br /&gt;
Either way, you can choose among the following:&lt;/p&gt;
&lt;h4&gt;File/Remote File&lt;/h4&gt;
&lt;p&gt;Add a file on your local machine or a remote file hosted on a server you configured via &lt;strong&gt;Edit &amp;gt; Preferences &amp;gt; Servers&lt;/strong&gt;. Supported protocols are: &lt;span class="caps"&gt;FTP&lt;/span&gt;,&lt;span class="caps"&gt;FTPS&lt;/span&gt;, &lt;span class="caps"&gt;SFTP&lt;/span&gt;, &lt;span class="caps"&gt;SCP&lt;/span&gt;.&lt;/p&gt;
&lt;h4&gt;Folder&lt;/h4&gt;
&lt;p&gt;This will &lt;em&gt;not&lt;/em&gt; link to a folder and import local files in Komodo, instead, it will create a container for other tools, not for local files.&lt;/p&gt;
&lt;h4&gt;Live Folder&lt;/h4&gt;
&lt;p&gt;On the contrary, a live folder links to an actual folder on your machines, and all files and directories inside it are automatically imported. Note that it is possible to choose to include or exclude certain files or directories from being imported by right-clicking the folder and editing its properties.&lt;/p&gt;
&lt;h4&gt;Command&lt;/h4&gt;
&lt;p&gt;This will create a shortcut to a command to execute. It is possible to specify its parameters, the directory where it will be run, whether its output will be displayed in the Command Output or in a newly-spawned console window, etc. etc.&lt;/p&gt;
&lt;h4&gt;Snippet&lt;/h4&gt;
&lt;p&gt;TextMate fans will love this. Komodo will let you create a code snippet for later use. Furthermore, it is possible to specify &amp;#8220;tabstops&amp;#8221; to automatically select certain words when tab is pressed (so you can effectively fill in only particular fields of the snippet).&lt;/p&gt;
&lt;h4&gt;Template&lt;/h4&gt;
&lt;p&gt;A simple but effective way to create code templates.&lt;/p&gt;
&lt;h4&gt;Url&lt;/h4&gt;
&lt;p&gt;A link which will open a given url.&lt;/p&gt;
&lt;h4&gt;Open&amp;#8230; Shortcut&lt;/h4&gt;
&lt;p&gt;This will popup an &lt;strong&gt;Open File&lt;/strong&gt; dialog in a direcxtory of your choice.&lt;/p&gt;
&lt;h4&gt;Macro&lt;/h4&gt;
&lt;p&gt;For those who require even more customization, it is also possible to record or code macros in Python or javascript, and then configure their key bindings and triggers.&lt;/p&gt;
&lt;h4&gt;Custom Menu/Custom toolbar&lt;/h4&gt;
&lt;p&gt;This was really impressive. Sure you can group all your tools in folders in your current project or you can create them in the toolbox to make them available all the time, but it would be cool if &lt;em&gt;the editor itself&lt;/em&gt; could make those tools available by default in a toolbar or a menu. Well, that&amp;#8217;s possible: all you need to do is create a new custom menu or toolbar and populate it with your tools by drag and drop. Very, very nice!&lt;/p&gt;
&lt;p&gt;This mini-framework to create custom tools can be used to create project templates in a blink. To show this concept, Komodo Edit comes with a Rails template with almost all the tools you need when coding a Ruby on Rails application:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Create/delete database&lt;/li&gt;
	&lt;li&gt;Generators&lt;/li&gt;
	&lt;li&gt;Migrations&lt;/li&gt;
	&lt;li&gt;Run server&lt;/li&gt;
	&lt;li&gt;Example view snippets&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Komodo Edit is an interesting editor which offers a lot of features which are normally only available in IDEs at a smaller memory footprint. Granted, when I want to jot something down I still prefer to fire up gVim, but for a serious coding session, Komodo is the right choice.&lt;br /&gt;
Its close attention to details and its ease of use make developing an even more pleasant experience, although perhaps there&amp;#8217;s still room for improvement, if you&amp;#8217;re really fussy.&lt;/p&gt;
&lt;p&gt;Sometimes when you start getting used of its advanced features, the lack of a code browser seems a real shame, but after all, ActiveState must sell their &lt;span class="caps"&gt;IDE&lt;/span&gt; to someone at some point!&lt;/p&gt;
&lt;p&gt;Another thing which I would have liked is the ability to create new syntax highlighting schemes, which Notepad++ and &lt;span class="caps"&gt;VIM&lt;/span&gt; both offer. Whydoes it bothers me so much? Well, because I&amp;#8217;d like a &lt;a href="http://textism.com/tools/textile/"&gt;Textile&lt;/a&gt; syntax highlighting scheme for writing blogs and articles. &lt;span class="caps"&gt;VIM&lt;/span&gt; and Intype seem to be the only ones which offer it out-of-the-box, but there&amp;#8217;s no trace of it in Komodo Edit.&lt;/p&gt;
&lt;p&gt;Actually it is possible to create new syntax highlighting schemes and extend Komodo Edit via &lt;a href="http://community.activestate.com/addons"&gt;&lt;span class="caps"&gt;XUL&lt;/span&gt; extensions&lt;/a&gt;, exactly like Firefox. After a closer look, the Django syntax was added in this way.&lt;/p&gt;
&lt;p&gt;Unfortunately there aren&amp;#8217;t that many extensions available for Komodo Edit, yet, but the &lt;a href="http://community.activestate.com/"&gt;Activestate Community&lt;/a&gt; seems very active, so you never know. Additionally, the recently-started &lt;a href="http://www.openkomodo.com/"&gt;OpenKomodo&lt;/a&gt; is a new project created by ActiveState to &amp;#8220;[&amp;#8230;] create an open source platform for building developer environments. ActiveState has open-sourced elements of Komodo Edit, a free multi-language editor for dynamic languages based on Komodo &lt;span class="caps"&gt;IDE&lt;/span&gt;, to create the Open Komodo code base&amp;#8221;. A new competitor for Eclipse and Netbeans will be available soon?&lt;/p&gt;
&lt;p&gt;&lt;a href="http://digg.com/programming/A_closer_look_at_Komodo_Edit"&gt;&lt;br /&gt;
&lt;img src="http://digg.com/img/badges/180x35-digg-button.png" width="180" height="35" alt="Digg!" /&gt;&lt;br /&gt;
&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Sun, 25 Nov 2007 06:23:00 -0000</pubDate>
      <guid>http://www.h3rald.com/articles/komodo-edit-review/</guid>
      <link>http://www.h3rald.com/articles/komodo-edit-review/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/komodo-edit-review/#comments</comments>
      <category>review</category>
      <category>programming</category>
      <category>software</category>
    </item>
    <item>
      <title>Book Review: Humble Little Ruby Book</title>
      <description>&lt;p&gt;After reading the very first paragraph of Mr. Neighborly&amp;#8217;s &lt;a href="http://www.humblelittlerubybook.com/"&gt;Humble Little Ruby Book&lt;/a&gt; (&lt;span class="caps"&gt;HLRB&lt;/span&gt; for short, from now on) it was very clear to me that it was going to be quite an unconventional read:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;#8220;Yes, there is a Chapter 0.  There is a little bit of introductory stuff we need to talk about before &lt;br /&gt;
we set you loose on Ruby.  You wouldn&amp;#8217;t want to get psyched about a new gadget, get it home, &lt;br /&gt;
and then figure out you need batteries, a grapefruit, and the ability to speak three  languages to &lt;br /&gt;
even open the box would you?&amp;#8221;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That reminded me immediately of &lt;a href="http://poignantguide.net/ruby/"&gt;Why&amp;#8217;s Poignant Guide to Ruby&lt;/a&gt;. without a doubt. I don&amp;#8217;t know how it is possible that two witty, crazy, and very inventive guys grew fond of the same programming language. Anyhow, to reassure a few of you, you won&amp;#8217;t find any foxes or chunky bacon cartoons in &lt;span class="caps"&gt;HLRB&lt;/span&gt;, just some very well made (although still pretty unconventional) diagrams like this one:&lt;/p&gt;
&lt;p&gt;&lt;img src="/files/hlrb_diagram.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Got the picture? Good. Let&amp;#8217;s move on&amp;#8230;h3. Chapter 0: What&amp;#8217;chu talkin&amp;#8217; &amp;#8217;bout, mister?&lt;/p&gt;
&lt;p&gt;Chapter 0 is like an introduction to the book &lt;em&gt;and&lt;/em&gt; a place to put all the boring stuff you have to talk about in a book about a programming language:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;What is Ruby?&lt;/li&gt;
	&lt;li&gt;Installation procedure (on Windows, Mac OS X and Linux)&lt;/li&gt;
	&lt;li&gt;Hello, World!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Yes, you can skip this one safely without losing too much, unless of course you still need to install Ruby on your machine.&lt;/p&gt;
&lt;h3&gt;Chapter 1: Welcome to Ruby.&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;#8220;This  section  aims  to  introduce  the  syntactic  sugar  and  linguistic  misfortunes  of  Ruby  in  the &lt;br /&gt;
quickest manner that will still allow  for a full  education on the subject.&amp;#8221;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;As the first two lines of this chapter say, it&amp;#8217;s time to learn the basics of Ruby. You&amp;#8217;ll be quickly guided through strings, numbers, collections and variables. Every section with tons of code examples for your to play with. You won&amp;#8217;t find a full list of all the 876 methods of the String class, but you&amp;#8217;ll certainly learn the 10 most common ones at least (numbers are random, so no, don&amp;#8217;t count them). &lt;br /&gt;
Sure, yes, right, whatever&amp;#8230; &lt;em&gt;if you really want&lt;/em&gt; you can skip this chapter too, but if you are already a Ruby Guru there&amp;#8217;s probably no need for you to read books about Ruby, right? Beginners need to read this chapter. It&amp;#8217;s compulsory, really, and pretty enjoyable, too.&lt;/p&gt;
&lt;h3&gt;Chapter 2: Break it down now!&lt;/h3&gt;
&lt;p&gt;Or &amp;#8220;learn how to segment your code&amp;#8221; using methods, and&amp;#8230; blocks &amp;amp; &lt;code&gt;Proc&lt;/code&gt; objects! Gosh. Our poor newbies will probably have a heart attack if they never heard about blocks and closures before. I almost got scared myself, because this is normally regarded as a pretty tough topic. Despite, at page 25 of the book you&amp;#8217;ll have to face your fears and dive into it. You&amp;#8217;ll survive, anyway.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Purist Warning:&lt;/strong&gt; Please be aware that sometimes the author may decide to use certain terms and construct which may not sound 100% right to your ears. Just move on, beginners will understand more things like &lt;em&gt;&amp;#8220;Think of Proc objects as blocks that are pushed into variables.&amp;#8221;&lt;/em&gt; than anything else, guaranteed.&lt;/p&gt;
&lt;p&gt;After this section you&amp;#8217;ll finally be introduced to Ruby classes. Now, this can piss someone off, no doubt. Ruby is a &lt;em&gt;fully OO language&lt;/em&gt;, so people &lt;em&gt;must&lt;/em&gt; learn about classes before anything else. I must admit I was a bit confused by the ordering of the topics at first, but if someone comes from a non-OO background he&amp;#8217;ll probably find this particular order more suitable. &lt;br /&gt;
This section will cover class and object basics in Ruby like defining classes, instantiating objects, access control, methods, attributes, scope, duck typing. Finally, you&amp;#8217;ll briefly look into modules as well.&lt;/p&gt;
&lt;h3&gt;Chapter 3: Hustle and flow (control)&lt;/h3&gt;
&lt;p&gt;Finally, the author will deal with flow control. So things like &lt;code&gt;if&lt;/code&gt;, &lt;code&gt;case&lt;/code&gt;, conditional operators, loops and statement modifiers. In my opinion this section is truly excellent: it introduces all the control structures in a very simple and crystal clear way, often using flowcharts. A great chance even for absolute beginners to understand these basic but powerful concepts.&lt;br /&gt;
Towards the end of the chapter, you&amp;#8217;ll also learn how exceptions work: a clever way to tell people &amp;#8220;you have to learn how to use exceptions from the very beginning&amp;#8221;. Really nicely done.&lt;/p&gt;
&lt;h3&gt;Chapter 4: The system beneath&amp;#8230;&lt;/h3&gt;
&lt;p&gt;Here comes the juicy stuff. Up to now you learnt the usual boring things you need to know when learning a new programming language, now finally you learn how to do &lt;em&gt;real things&lt;/em&gt;. The chapter is full of complete and meaningful code snippets which will answer nearly all the questions you may have (at this time):&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;How do I read and write to a file?&lt;/li&gt;
	&lt;li&gt;How do I handle threads and processes?&lt;/li&gt;
	&lt;li&gt;How do command-line parameters and environment variables work?&lt;/li&gt;
	&lt;li&gt;How can I perform specific Windows-only operations, like reading and writing to the Registry? What about &lt;span class="caps"&gt;OLE&lt;/span&gt; automation?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Some of the big books out there will not spend too much time talking about Windows-only libraries, but I found &lt;span class="caps"&gt;HLRB&lt;/span&gt; gives quite a comprehensive introduction about them.&lt;/p&gt;
&lt;h3&gt;Chapter 5: Looking beyond home&lt;/h3&gt;
&lt;p&gt;More juicy stuff. If you are looking for a tutorial to learn the basics about networking, from from sockets to &lt;span class="caps"&gt;FTP&lt;/span&gt; to &lt;span class="caps"&gt;POP&lt;/span&gt; and web services, look no further: this chapter does a very remarkable job introducing various network-related libraries, with the usual well written code examples.&lt;br /&gt;
If that&amp;#8217;s still not enough, you&amp;#8217;ll also have a chance to explore the wonderful world of distributed Ruby and of databases. Granted, this chapter won&amp;#8217;t tell you about the 1567 methods available in ActiveRecord (buy a copy of &lt;a href="http://www.pragmaticprogrammer.com/title/rails/"&gt;Agile Web Development with Rails&lt;/a&gt; for this), but will tell you enough to get started.&lt;/p&gt;
&lt;h3&gt;Chapter 6: It&amp;#8217;s a Library!&lt;/h3&gt;
&lt;p&gt;The final chapter will go more in depth on some more advanced topics, like:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Strings&lt;/li&gt;
	&lt;li&gt;Regexp&lt;/li&gt;
	&lt;li&gt;Date &amp;amp; Time&lt;/li&gt;
	&lt;li&gt;Hashing and Cryptography&lt;/li&gt;
	&lt;li&gt;Unit Testing&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Everything with more and more useful code snippets.&lt;/p&gt;
&lt;h3&gt;The Appendices&lt;/h3&gt;
&lt;p&gt;Last but not least, a &lt;span class="caps"&gt;HUGE&lt;/span&gt; collection of links and resources to learn more about Ruby, and a quick digression on C/C++ extensions&amp;#8230; not much, but enough to wet your appetite.&lt;/p&gt;
&lt;h3&gt;The bottom line&lt;/h3&gt;
&lt;p&gt;&lt;span class="caps"&gt;HLRB&lt;/span&gt; is not &lt;em&gt;the only&lt;/em&gt; book you need to read about Ruby. It&amp;#8217;s better to make this clear otherwise I&amp;#8217;ll be hunted forever by Dave Thomas, Chad Fowler, &lt;span class="caps"&gt;DHH&lt;/span&gt; and all the other excellent Ruby hackers who also wrote very successful books (which I bought as well). &lt;span class="caps"&gt;HLRB&lt;/span&gt; is &lt;span class="caps"&gt;LITTLE&lt;/span&gt; and &lt;span class="caps"&gt;HUMBLE&lt;/span&gt;, after all: it doesn&amp;#8217;t aim at becoming the official Ruby Bible anytime soon (although a bird told me it may get updated &lt;em&gt;someday&lt;/em&gt; and include more stuff), but it is still a worthwhile reading.&lt;/p&gt;
&lt;p&gt;And of course I came to the very end of this review without mentioning the most important thing: this little wonder is free. All you need is to register to InfoQ (for free) and grab your &lt;a href="http://www.infoq.com/minibooks/ruby/"&gt;free copy&lt;/a&gt;. If you want you can buy a printed copy for just $9.95, if you feel in a good mood (please do).&lt;/p&gt;
&lt;p&gt;The most obvious strengths of this book are the abundance of code examples and very useful working snippets, and the unconventional style which makes it very readable and not boring at all. If I were to name some of its weaknesses (but only if you force me to), I&amp;#8217;d say some parts should be expanded and more info on other libraries should be provided&amp;#8230; but you never know what the future will bring us!&lt;/p&gt;
&lt;p&gt;Well done, &lt;a href="http://www.jeremymcanally.com/"&gt;Mr. Neighborly&lt;/a&gt;!&lt;/p&gt;</description>
      <pubDate>Wed, 03 Oct 2007 03:53:00 -0000</pubDate>
      <guid>http://www.h3rald.com/articles/hlrb-review/</guid>
      <link>http://www.h3rald.com/articles/hlrb-review/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/hlrb-review/#comments</comments>
      <category>ruby</category>
      <category>review</category>
      <category>books</category>
    </item>
    <item>
      <title>Tweaking Windows Explorer</title>
      <description>&lt;p&gt;If you asked me what file manager I used on Windows, up to a month ago I&amp;#8217;d have answered something like: &lt;a href="http://www.primitus.us/a43/"&gt;A43&lt;/a&gt; or &lt;a href="http://www.cubicreality.com/"&gt;CubicExplorer&lt;/a&gt;, for sure &lt;em&gt;anything but Windows Explorer&lt;/em&gt;.&lt;br /&gt;
Well, it turns out that I had to change my mind after all&amp;#8230;&lt;/p&gt;
&lt;p&gt;There&amp;#8217;s a multitude of &amp;#8220;Explorer Replacements&amp;#8221; which aim to be more feature-rich, more user-friendly, less bloated than Bill&amp;#8217;s favorite, and I indeed tried quite a few of them, mostly the free ones of course.&lt;/p&gt;
&lt;p&gt;The only problem is that whenever I got close to choose &amp;#8220;the one&amp;#8221;, I noticed that there always was one or two features missing somewhere, which were present in another and vice versa. Additionally, to be totally honest, the level of integration with Windows and other applications was never &lt;em&gt;complete&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;These are a few stupid, silly things which tend to be lacking or at least are not 100% functioning &amp;#8212; not in all the file managers I tried, but at least in some:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Environment variables integration &amp;#8212; Alternative file managers normally are not able to parse Windows environment variables.&lt;/li&gt;
	&lt;li&gt;Icon overlays &amp;#8212; Some file managers can&amp;#8217;t render Subversion&amp;#8217;s icon overlays.&lt;/li&gt;
	&lt;li&gt;Strange context menus &amp;#8212; Sometimes right-clicking on a file or a directory may not open the standard Explorer context menu&lt;/li&gt;
	&lt;li&gt;Open Folder &amp;#8212; Third-party application allowing you to open a folder, will always open it through Windows Explorer&lt;/li&gt;
	&lt;li&gt;auto complete address bar&amp;#8230;.&lt;/li&gt;
	&lt;li&gt;Special Folders &amp;#8212; Some special folders (e.g. Control Panel) are now accessible using alternative file manager, but others may not (e.g. Network Connections). At any rate, typing &amp;#8220;Control Panel&amp;#8221; will &lt;em&gt;not&lt;/em&gt; open the Control Panel in an alternative file manager.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;What about trying to &amp;#8220;patch&amp;#8221; Windows Explorer instead of using another program altogether?&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I never really thought of that until &lt;a href="http://lifehacker.com/software/featured-windows-download/add-tabs-to-windows-explorer-with-qt-tabbar-260926.php"&gt;LifeHacker&lt;/a&gt; featured the QT TabBar shell extension by &lt;a href="http://members.at.infoseek.co.jp/Quizo/freeware/indexEn.html"&gt;Quizo&lt;/a&gt;. That was my epiphany: I immediately thought I was going to &amp;#8220;patch&amp;#8221; Windows Explorer using a few really useful (and free, of course) Windows Shell Extensions.&lt;/p&gt;
&lt;p&gt;Here&amp;#8217;s &lt;em&gt;my&lt;/em&gt; file manager now:&lt;/p&gt;
&lt;p&gt;&lt;img src="/files/tweaked_explorer.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Yes, it is Windows Explorer, with just a few addons:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://members.at.infoseek.co.jp/Quizo/freeware/indexEn.html#qttab"&gt;QT TabBar&lt;/a&gt; (Requires .&lt;span class="caps"&gt;NET&lt;/span&gt; framework 2.0)&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://members.at.infoseek.co.jp/Quizo/freeware/indexEn.html#qtadr"&gt;QT Address Bar&lt;/a&gt; (Requires .&lt;span class="caps"&gt;NET&lt;/span&gt; framework 2.0)&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://members.at.infoseek.co.jp/Quizo/freeware/indexEn.html#qtt2"&gt;QU ToolBar 2&lt;/a&gt; (Requires .&lt;span class="caps"&gt;NET&lt;/span&gt; framework 2.0)&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://schinagl.priv.at/nt/hardlinkshellext/hardlinkshellext.html"&gt;&lt;span class="caps"&gt;NTFS&lt;/span&gt; Link Shell Extension&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://www.lopesoft.com/en/fmtools/info.html"&gt;FileMenu Tools&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Explorer Tabs&lt;/h3&gt;
&lt;p&gt;For an instant gratification, download and install QT TabBar first, logoff and logon again for the changes to take effect (or install all the other extensions first, otherwise you&amp;#8217;ll have to re-logon after installing nearly each one). As the name implies, this will add tabs to Windows Explorer, just the way you expect them to be: clean, stable and really smart.&lt;/p&gt;
&lt;p&gt;&lt;img src="/files/tabs.gif" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;After the installation, right-click anywhere in an existing window toolbar and enable the &lt;strong&gt;QT Tab Standard Buttons&lt;/strong&gt; and voil&amp;aacute;, a the tab bar will appear. You can click CTRL+N a few times to open new tabs. Take your time to position QT TabBar wherever is more convenient for you.&lt;/p&gt;
&lt;p&gt;Whenever you&amp;#8217;re ready, take your time to configure QT TabBar (right-click on it and choose &amp;#8220;Options&amp;#8221;) General options:&lt;/p&gt;
&lt;p&gt;&lt;img src="/files/tabbar_general.gif" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;#8230;and at least the Window options:&lt;/p&gt;
&lt;p&gt;&lt;img src="/files/tabbar_window.gif" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How do you create tabs?&lt;/strong&gt; There are many different ways to do it, choose whatever is best for you:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;CTRL+N keyboard shortcut&lt;/li&gt;
	&lt;li&gt;Drag and drop a folder or a shortcut on QT TabBar &amp;#8211; Even from other applications!&lt;/li&gt;
	&lt;li&gt;Right click on an tab and choose &amp;#8220;Clone this&amp;#8221;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Other features? Sure, there&amp;#8217;s plenty more, e.g.:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;strong&gt;Single Instance&lt;/strong&gt; &amp;#8212; By enabling the appropriate option, you&amp;#8217;ll only have a single instance of Windows explorer, everything will be opened in new tabs.  A must.&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Rearrange tabs&lt;/strong&gt; &amp;#8212; Tabs can be rearranged by dragging and dropping.&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Lock/Unlock&lt;/strong&gt; &amp;#8212; Lock a tab (right-click &amp;gt; Lock) to avoid closing it accidentally.&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Folder Memo&lt;/strong&gt; &amp;#8212; It is possible to set a &amp;#8220;folder memo&amp;#8221; for a specific folder, which can be visualized and edited afterwards (right-click &amp;gt; Memo for this folder).&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Folder Password&lt;/strong&gt; &amp;#8212; Password-protect a particular tab (right-click &amp;gt; Set Password&amp;#8230;).&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Picture Preview&lt;/strong&gt; &amp;#8212; Preview image files simply by hovering on them with the mouse.&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Groups&lt;/strong&gt; &amp;#8212; It is possible to group more tabs together by adding them to groups (right-click &amp;gt; Add to Group &amp;gt; [Group Name]) which can be configured via the QT TabBar option dialog.&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Keyboard Shortcuts&lt;/strong&gt; &amp;#8212; Open the folder in which you unzipped QT TabBar and run QTShortcutKeyEditor.exe and enable as many as you like (they are too many to list hered), the possibilities are endless.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Customizing Toolbars&lt;/h3&gt;
&lt;p&gt;Windows Explorer allows users to choose the buttons which will be displayed in the &lt;strong&gt;Standar Buttons&lt;/strong&gt; toolbar. To do so, proceed as follows:&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;If necessary, enable the Standard Buttons toolbar by selecting &lt;em&gt;View &amp;gt; Toolbars &amp;gt; Standard Buttons&lt;/em&gt; from the Explorer menu.&lt;/li&gt;
	&lt;li&gt;Select &lt;em&gt;View &amp;gt; Toolbars &amp;gt; Customize&lt;/em&gt; from the Explorer menu.&lt;/li&gt;
	&lt;li&gt;Choose the buttons you want to display.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I picked the following:&lt;/p&gt;
&lt;p&gt;&lt;img src="/files/standard_explorer_buttons.gif" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;i.e.: Up , Refresh, Search, Folders, History, Favorites, Undo, Delete, Cut, Copy, Paste, Properties, View, Map Drive and Disconnect. It&amp;#8217;s really up to you what you choose really.&lt;br /&gt;
I placed this toolbar right under the menu, on the top-left side.&lt;/p&gt;
&lt;p style="float:right;"&gt;&lt;img src="/files/tabbar_buttons.gif" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Right next to it I placed some of the buttons available for &lt;strong&gt;QT TabBar&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Groups &amp;#8212; Load an existing tab group (configurable in the options)&lt;/li&gt;
	&lt;li&gt;Recently Closed &amp;#8212; open recently-closed tabs&lt;/li&gt;
	&lt;li&gt;Applications &amp;#8212; run custom applications (configurable in the options)&lt;/li&gt;
	&lt;li&gt;Close &amp;#8212; Close current tab&lt;/li&gt;
	&lt;li&gt;Lock &amp;#8212; Lock current tab&lt;/li&gt;
	&lt;li&gt;Topmost &amp;#8212; Force explorer to stay on top of other windows&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Then I decided to enable the &lt;strong&gt;Links&lt;/strong&gt; Explorer toolbar, which can be configured to display bookarks and shortcuts placed in the Favorites &amp;gt; Links folder. As shortcuts, I dragged each drive available on my system and voil&#224;: poor man&amp;#8217;s Drive Toolbar! Unfortunately, unlike in the &lt;em&gt;proper&lt;/em&gt; drive toolbars offered by alternative file managers, all drive shortcuts will remain there (with a red question mark) even when the drive is not connected to the system. I can live with that.&lt;/p&gt;
&lt;p style="float:right;"&gt;&lt;img src="/files/toolbar2.gif" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Right to the address bar (we&amp;#8217;re going to substitute it in the next section though), I decided to place &lt;strong&gt;QT ToolBar 2&lt;/strong&gt;, which is available &amp;#8211; hear, hear &amp;#8211; after installing the QT ToolVar 2 extension.&lt;br /&gt;
At first it looks like a search filter toolbar, and yes, it can be used for this &lt;em&gt;as well&lt;/em&gt;. Just type .jpg in the search box and it will show only the &lt;span class="caps"&gt;JPG&lt;/span&gt; files in the current folder. Easy enough.&lt;/p&gt;
&lt;p&gt;Of course there&amp;#8217;s (much) more to it. A &lt;em&gt;search helper&lt;/em&gt; is provided (click the little arrow pointing downwards at the end of the toolbar and select Search Helper) to perform more complex searches:&lt;/p&gt;
&lt;p&gt;&lt;img src="/files/toolbar2_search.gif" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Additionally, ToolBar allows you to display a handy copy file name/path button and up to two buttons to access two applications you use frequently. To configure them select &lt;em&gt;Option&lt;/em&gt; from the dropdown menu accessible at the end of the toolbar, and configure your applications like this:&lt;/p&gt;
&lt;p&gt;&lt;img src="/files/toolbar2_apps.gif" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;I choose the Command Prompt and the A43 file manager. The cool thing is that you can enable the &amp;#8220;arguments for user application&amp;#8221; and the the file path (if a file is selected) or the folder path will be passed automatically to the application, so my A43 file manage will open in the current folder. If you want to have more than two custom applications at your fingertips, all you have to do is to configure as many as you like in the Options tab of QT TabBar, and they&amp;#8217;ll become available via the Applications button.&lt;/p&gt;
&lt;p&gt;Two little utilities can also be used through QT TabBar 2, &lt;em&gt;MD5&lt;/em&gt;, which instantly calculates the MD5 checksum of the selected file:&lt;/p&gt;
&lt;p&gt;&lt;img src="/files/toolbar2_md5.gif" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;and &lt;em&gt;Folder Analyze&lt;/em&gt;, which finds out the size of the current folder and how it is distributed across folders and files. A bit like a little &lt;a href="windirstat.info"&gt;WinDirStat&lt;/a&gt; but for the current folder only. It looks like this:&lt;/p&gt;
&lt;p&gt;&lt;img src="/files/toolbar2_folder.gif" alt="" /&gt;&lt;/p&gt;
&lt;h3&gt;Navigation Improvements&lt;/h3&gt;
&lt;p&gt;Is there any way to make navigation through folder easier in Windows Explorer? Yep, more than one:&lt;/p&gt;
&lt;h4&gt;Breadcrumbs&lt;/h4&gt;
&lt;p&gt;Vista offers a &lt;a href="http://www.zdnet.com.au/insight/software/soa/Investigating-Windows-Vista-s-breadcrumb-bar-/0,139023769,139218189,00.htm"&gt;Breadcrumb Bar&lt;/a&gt;, and XP doesn&amp;#8217;t. Quizo fixed it of course, with his &lt;strong&gt;QT Address Bar&lt;/strong&gt;, which brings breadcrumbs navigation to Windows XP. Use it as an Explorer address bar replacement. By default breadcrumbs are displayed:&lt;/p&gt;
&lt;p&gt;&lt;img src="/files/address-bar1.gif" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;#8230;allowing you to navigate through your folder three within submenus without changing the current directory. Clicking it toggles the standard path:&lt;/p&gt;
&lt;p&gt;&lt;img src="/files/address-bar2.gif" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;A nice thing to have.&lt;/p&gt;
&lt;h4&gt;Take back your Favorites!&lt;/h4&gt;
&lt;p&gt;I don&amp;#8217;t use IE, I use Firefox, Opera, even Safari sometimes, but not IE unless I&amp;#8217;m forced to do so. Hence I &lt;em&gt;hardly ever&lt;/em&gt; used Internet Explorer&amp;#8217;s Favorites, an I almost forgot about it, until I decided to begin tweaking Windows Explorer, and I (re-)discovered that Favorites are shared between the two&amp;#8230; What&amp;#8217;s that got to do with anything? Well, you can simply put Favorites to good use and use them to store &lt;em&gt;only&lt;/em&gt; Windows Explorer folders.&lt;/p&gt;
&lt;p&gt;Simple and effective: click the Favorites button in the toolbar, they&amp;#8217;ll be loaded in a sidebar on the left, then simply drag a folder to QT TabBar and you&amp;#8217;ll get there.&lt;/p&gt;
&lt;h4&gt;Wormholes, anyone?&lt;/h4&gt;
&lt;p&gt;Finally, &lt;strong&gt;&lt;span class="caps"&gt;NTFS&lt;/span&gt; Link Shell Extension&lt;/strong&gt; does something totally different altogether: it can be used to create hardlinks (a bit like Unix symlinks, but for &lt;span class="caps"&gt;NTFS&lt;/span&gt; drives only) junctions and symbolic links (Vista only). For an explanation of what each object is, refer to the explanations provided on the &lt;a href="http://schinagl.priv.at/nt/hardlinkshellext/hardlinkshellext.html#hardlinks"&gt;shell extension homepage&lt;/a&gt;. For our purposes, we&amp;#8217;ll just use junctions now:&lt;/p&gt;
&lt;p&gt;bq.&amp;#8220;[&amp;#8230;] Junctions  are wormholes in the tree structure of a directed graph. By browsing a Junction a maybe far distant location in the file system is made available. Modifying, Creating, Renaming and Deleting files within a junction tree structure operates at the junction target, i.e. if you delete a file in a Junction it is deleted at the original location. [&amp;#8230;]&amp;#8221;&lt;/p&gt;
&lt;p&gt;Consider the following example.&lt;/p&gt;
&lt;p style="float:right;"&gt;&lt;img src="/files/junction.gif" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;1) Create a directory called &amp;#8220;Gateway&amp;#8221; in C:\. &lt;br /&gt;
2) With &lt;span class="caps"&gt;NTFS&lt;/span&gt; Link Shell Extension installed, right-click a directory &amp;#8220;far, far away&amp;#8221;, on any of your &lt;span class="caps"&gt;NTFS&lt;/span&gt; drives, for example D:\My\Very\Long\Path\MyDirectory, and select &amp;#8220;Pick Link Source&amp;#8221;.&lt;br /&gt;
3) Go back in your Gateway folder, right-click and select &amp;#8220;Drop As &amp;gt; Junction&amp;#8221;. A folder with a small chain overlay will be created.&lt;br /&gt;
4) You will now be able to access all the contents in D:\My\Very\Long\Path\MyDirectory directly from C:\Gateway.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Important&lt;/strong&gt; &amp;#8211; No, creating a shortcut is &lt;em&gt;not&lt;/em&gt; the same thing. the path C:\Gateway\MyDirectory is an actual &lt;em&gt;valid path&lt;/em&gt;, i.e. you can use it to attach files to emails, and going up one level in C:\Gateway\MyDirectory will take you simply to C:\Gateway\, &lt;em&gt;not&lt;/em&gt; to D:\My\Very\Long\Path\.&lt;/p&gt;
&lt;p&gt;Both at home and at work, I use a &amp;#8220;Gateway&amp;#8221; folder containing junctions leading to commonly-accessed directories, and this speeds up navigations a lot. Just remember to delete junctions &amp;#8220;properly&amp;#8221; (right-click &amp;gt; Delete Junction), not like an ordinary directory&amp;#8230; ;-)&lt;/p&gt;
&lt;h3&gt;De-cluttering the Context Menus&lt;/h3&gt;
&lt;p&gt;Right now our Windows Explorer interface has been streamlined, folder navigation is easier, but there&amp;#8217;s still room for improvement. Where? Well, in the contex menus of course. &lt;br /&gt;
I spent ages trying to figure out an easy way to remove unnecessary or unwanted entries from the menus which appears on a right-click. Yes, they can be removed by fiddling with the Windows Registry, but that&amp;#8217;s not exactly user-friendly, is it? Now there&amp;#8217;s an easy alternative: &lt;strong&gt;FileMenu Tools&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;This nifty little utility allows you to remove rubbish from your context menus and add new entries as well. Entries are grouped by file type and can be enabled or disabled with a single click. Unfortunately I was not able to disabe some of them, probably due to restriction on my computer at work.&lt;/p&gt;
&lt;p style="float:right;"&gt;&lt;img src="/files/filemenu_tools.gif" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Once the rubbish is gone, perhaps you can even evaluate the possibility to add some more. I chose to enable just &lt;em&gt;Attributes&lt;/em&gt; and &lt;em&gt;Advanced Renamer&lt;/em&gt;, but there are many more predefined commands (each with its own pretty icon) you can choose from:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Synchronize Folders&lt;/li&gt;
	&lt;li&gt;Extended Delete&lt;/li&gt;
	&lt;li&gt;Find And Replace&lt;/li&gt;
	&lt;li&gt;Delete Locked File&lt;/li&gt;
	&lt;li&gt;Delete and no move to Recycle Bin&lt;/li&gt;
	&lt;li&gt;Change Icon&lt;/li&gt;
	&lt;li&gt;Run with Arguments&lt;/li&gt;
	&lt;li&gt;Command Line From Here&lt;/li&gt;
	&lt;li&gt;Split/Join File&lt;/li&gt;
	&lt;li&gt;Copy/Move to&amp;#8230;&lt;/li&gt;
	&lt;li&gt;Copy Name/PAth/Content&lt;/li&gt;
	&lt;li&gt;Change Time&lt;/li&gt;
	&lt;li&gt;Register/Unregister &lt;span class="caps"&gt;DLL&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;Create new folder&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Something missing? Well, you can always create your own entry, if you like!&lt;/p&gt;
&lt;h3&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;I think that&amp;#8217;s enough for you to give Windows Explorer another shot &amp;#8212; or at least it was enough for me anyway. Be aware that there are and hopefully there will be more Windows shell extensions able to do neat things: &lt;a href="http://www.7-zip.org/"&gt;7-Zip&lt;/a&gt;, &lt;a href="http://notepad-plus.sourceforge.net/uk/site.htm"&gt;Notepad++&lt;/a&gt; and &lt;a href="http://cream.sourceforge.net/"&gt;Cream&lt;/a&gt; all add very useful context menus, and don&amp;#8217;t forget &lt;a href="http://tortoisesvn.tigris.org/"&gt;TortoiseSVN&lt;/a&gt;, if you are a Windows-based developers (yes, they do exist).&lt;/p&gt;</description>
      <pubDate>Fri, 29 Jun 2007 09:28:00 -0000</pubDate>
      <guid>http://www.h3rald.com/articles/tweaking-windows-explorer/</guid>
      <link>http://www.h3rald.com/articles/tweaking-windows-explorer/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/tweaking-windows-explorer/#comments</comments>
      <category>review</category>
      <category>software</category>
    </item>
    <item>
      <title>Why I like Netvibes</title>
      <description>&lt;p&gt;The so-called &amp;#8220;&lt;span class="caps"&gt;AJAX&lt;/span&gt; Start Pages&amp;#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&amp;#8217;m guilty of that too). I soon learnt that for any &amp;#8220;good and useful thing&amp;#8221; on the web there are at least &lt;em&gt;n&lt;/em&gt; clones: consider for example social bookmarking, community-powered news sites,  php frameworks&amp;#8230;&lt;br /&gt;
And no, you can&amp;#8217;t use the word clone because it has a strong negative connotation nowadays so let&amp;#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 &lt;em&gt;very, very similar application&lt;/em&gt; comes out, and it&amp;#8217;s &lt;em&gt;better&lt;/em&gt; than the previous one. &lt;br /&gt;
Now, I don&amp;#8217;t know exactly whether &lt;a href="http://www.netvibes.com/"&gt;NetVibes&lt;/a&gt; was one of the first &lt;span class="caps"&gt;AJAX&lt;/span&gt; Start Pages created or not, but at any rate &amp;#8211; in my very, very, very humble opinion, is the most advanced and the most usable of &lt;a href="http://www.techcrunch.com/2005/12/07/ajax-desktops-wont-stop/"&gt;the lot&lt;/a&gt;, and an essential tool for lazy folks like me who want to keep up-to-date with what&amp;#8217;s going on without having to visit dozen of websites everyday.&lt;/p&gt;
&lt;p style="float:left;"&gt;&lt;img src="http://base--/img/pictures/netvibes.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;I can see people jumping up and down shouting &amp;#8220;Pageflakes is better&amp;#8221;, &amp;#8220;Protopage kicks a$$&amp;#8221; etc. etc. Well, yes, probably, as you like: different people like different things, and when it comes to &lt;span class="caps"&gt;AJAX&lt;/span&gt; Start Pages there&amp;#8217;s really a lot to choose from: 3spots has an excellent  (and complete, I believe) &lt;a href="http://3spots.blogspot.com/2006/03/ajax-or-flash-startpages-or-homepages.html"&gt;list&lt;/a&gt; of all the start pages currently available on the Net, so yes, you can try them out yourself and make out your mind :)&lt;/p&gt;
&lt;p&gt;I made up my mind long ago after experimenting a few of those. Why Netvibes? OK, let&amp;#8217;s see:&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;&lt;strong&gt;Fast to load&lt;/strong&gt;: Netvibes is fast. Relatively fast, of course, for sure is not as fast as a plain, old-style html page, but I think it&amp;#8217;s perhaps one of the fastest &lt;span class="caps"&gt;AJAX&lt;/span&gt; start pages ever created. As they &lt;a href="http://blog.netvibes.com/?2006/08/17/75-the-future-of-netvibes"&gt;pointed out&lt;/a&gt;, with a 15 million investment performance can only get better&amp;#8230;&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Tabbed pages&lt;/strong&gt;: After tabbed browsing, tabs within a single page seem to gain popularity. Netvibes allows you to create more than one page to prevent cluttering and general chaos: you can create a tab for CakePHP feeds, one for some cute &lt;span class="caps"&gt;AJAX&lt;/span&gt; widgets you&amp;#8217;ll never use, another for al that Web 2.0 rubbish you&amp;#8217;ll never read &amp;#8212; that&amp;#8217;s what I do at least.&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Smart Google Module&lt;/strong&gt;: Finally Netvibes has a &lt;em&gt;proper&lt;/em&gt; Google search module, which enable users to search with Google and view results &lt;em&gt;on Netvibes&lt;/em&gt; instead of opening up a browser tab.&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;&lt;span class="caps"&gt;RSS&lt;/span&gt; done right&lt;/strong&gt;: Their &lt;span class="caps"&gt;RSS&lt;/span&gt; reader is nice: by clicking on a feed title it opens up a &lt;em&gt;virtual window&lt;/em&gt; inside the page with the whole story and a menu with links to the other stories included in the feed. This is the most convenient way to read whole articles like TechCrunch&amp;#8217;s ones without leaving the page (and without loading the heavy TechCrunch UI).&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Public &lt;span class="caps"&gt;API&lt;/span&gt; for modules&lt;/strong&gt;: For those who &amp;#8211; unlike me &amp;#8211; has some proper free time and would like to develop their own module, the &lt;a href="http://eco.netvibes.com/developers/"&gt;Netvibes Mini Module &lt;span class="caps"&gt;API&lt;/span&gt;&lt;/a&gt; is public&amp;#8230;&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Ecosystem&lt;/strong&gt; : Netvibes &lt;a href="http://eco.netvibes.com/"&gt;Ecosystem&lt;/a&gt; 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: &lt;a href="http://eco.netvibes.com/modules/3492/xe.com-currency-converter"&gt;XE&lt;/a&gt; Currency Converter, &lt;a href="http://eco.netvibes.com/modules/3709/quick-translator"&gt;Quick Translator&lt;/a&gt;, &lt;a href="http://eco.netvibes.com/modules/6776/google-map"&gt;Google Map&lt;/a&gt; &lt;a href="http://eco.netvibes.com/modules/91/daily-cartoons"&gt;Daily Cartoons&lt;/a&gt; and &lt;a href="http://eco.netvibes.com/modules/6/bitty-browser"&gt;Bitty Browser&lt;/a&gt;. &lt;br /&gt;
CakePHP feeds? &lt;a href="http://eco.netvibes.com/?type=all&amp;amp;q=cakephp"&gt;Loads&lt;/a&gt;!&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Enough?&lt;/p&gt;</description>
      <pubDate>Mon, 18 Sep 2006 03:51:00 -0000</pubDate>
      <guid>http://www.h3rald.com/articles/39/</guid>
      <link>http://www.h3rald.com/articles/39/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/39/#comments</comments>
      <category>web20</category>
      <category>ajax</category>
      <category>review</category>
    </item>
    <item>
      <title>Google Apps for your domain: a shared hosting killer service?</title>
      <description>&lt;p&gt;A while ago Google started offering services like &lt;a href="http://mail.google.com/mail/"&gt;Google Mail&lt;/a&gt; (Gmail) and &lt;a href="http://www.google.com/calendar/"&gt;Google Calendar&lt;/a&gt; to domain owners. Sure everyone likes Gmail, but one of the few bad things about it is that it never feels &amp;#8220;unique&amp;#8221;: your email address is always gonna be &lt;something&gt;&lt;code&gt;gmail.com or &amp;lt;something&amp;gt;&lt;/code&gt;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:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;small/medium business wouldn&amp;#8217;t like this: @gmail.com gives farless credibility than @domain.com&lt;/li&gt;
	&lt;li&gt;When using Gmail with the Send As feature, messages will be sent &amp;#8220;on behalf of&amp;#8221;, and this can potentially mess things up as some spam filters don&amp;#8217;t like it.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Now it seems to be &lt;a href="http://seattlepi.nwsource.com/business/1700AP_Google_Business_Applications.html"&gt;official&lt;/a&gt;: Google is starting to offer customizable services to anyone who wish to sign up for it, not only as a restricted beta service.&lt;br /&gt;
What does this mean? Well, it can be the (free and easy) definitive web solution for small business, kids, grandmas and everyone who wants to establish a presence on the web by paying only the annual domain renewal fees&amp;#8230;&lt;/p&gt;
&lt;h3&gt;Included applications&lt;/h3&gt;
&lt;p&gt;Note the title: &lt;a href="https://www.google.com/a/"&gt;Google Apps&lt;/a&gt; for your domain, not only Gmail. Here&amp;#8217;s what you get:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://mail.google.com/"&gt;Gmail&lt;/a&gt; &amp;#8211; You know what it offers: a state-of-the art &lt;span class="caps"&gt;AJAX&lt;/span&gt; interface, speed, reliability, very effective spam filter, loads of space, tagging (labels) stars and all the rest.&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://www.google.com/calendar/"&gt;Google Calendar&lt;/a&gt; &amp;#8211; One of the best online calendar available. Features and &lt;span class="caps"&gt;AJAX&lt;/span&gt; interface, full integration with Gmail, ability to create private and public calendars, reminders,&lt;/li&gt;
	&lt;li&gt;&lt;em&gt;Google Chat&lt;/em&gt; &amp;#8211; Google&amp;#8217;s instant messenger, available through &lt;a href="http://www.google.com/talk/"&gt;Google Talk&lt;/a&gt; desktop application or online, seamlessly integrated in your Gmail interface.&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://pages.google.com/"&gt;Google Web Pages&lt;/a&gt; &amp;#8211; aka Google&amp;#8217;s page creator, easily create webpages using Google&amp;#8217;s &lt;span class="caps"&gt;WYSIWYG&lt;/span&gt; online editor.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Now, try imagining these four services combined and (almost) fully customizable&amp;#8230; Still no idea? Well, keep reading for a list of all the included features.&lt;/p&gt;
&lt;h3&gt;Included Features&lt;/h3&gt;
&lt;p&gt;In order to use Google Apps for your domain, you must of course own a domain. The next step involves changing your domain&amp;#8217;s MX entry to &amp;#8220;&lt;span class="caps"&gt;ASPMX&lt;/span&gt;.L.&lt;span class="caps"&gt;GOOGLE&lt;/span&gt;.&lt;span class="caps"&gt;COM&lt;/span&gt;&amp;#8221;, and follow the instructions to create an administration account for your Google applications, and after a while every email sent to your domain&amp;#8217;s accounts will be routed to your new Google-powered inbox. Similarly, in order to use Google Page Creator on your domain, you&amp;#8217;re required to change the &lt;span class="caps"&gt;CNAME&lt;/span&gt; record of your &lt;span class="caps"&gt;DNS&lt;/span&gt; to &amp;#8220;ghs.google.com&amp;#8221;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Note: in order to avoid inconveniences especially if a lot of users use your domain&amp;#8217;s email, it is recommended that you pay attention on Google&amp;#8217;s instructions on how to set the whole thing up. For further information refer to the official &lt;a href="https://www.google.com/a/FAQ"&gt;&lt;span class="caps"&gt;FAQ&lt;/span&gt;&lt;/a&gt;. In order to be able to use Google Page Creator on your domain, you must setup an &lt;span class="caps"&gt;URL&lt;/span&gt; to publish your webpages: of course do &lt;span class="caps"&gt;NOT&lt;/span&gt; set this to &amp;#8220;www.yourdomain.com&amp;#8221; or any subdomain currently in use or your visitors will access the pages you created with Google Page Creator.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Here&amp;#8217;s what you get:&lt;br /&gt;
&lt;img src="/img/pictures/gmail-hosted/gmail.png" alt="" /&gt; &lt;br /&gt;
For a bigger image click &lt;a href="/img/pictures/gmail-hosted/gmail_full.png"&gt;here&lt;/a&gt;. Let&amp;#8217;s now have a look at what are the main differences from the standard Gmail.&lt;/p&gt;
&lt;p&gt;&lt;u&gt;&lt;em&gt;&lt;strong&gt;Include your own logo&lt;/strong&gt;&lt;/em&gt;&lt;/u&gt;&lt;br /&gt;
&lt;img src="/img/pictures/gmail-hosted/logo.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Your own logo will be displayed on the upper left corner of every page. And this is truly sweet. All you have to do to change it is uploading a 143&amp;#215;59 &lt;span class="caps"&gt;PNG&lt;/span&gt; or &lt;span class="caps"&gt;GIF&lt;/span&gt; image from your domain management panel (see below).&lt;/p&gt;
&lt;p&gt;&lt;u&gt;&lt;em&gt;&lt;strong&gt;Use your company name instead of Google&amp;#8217;s&lt;/strong&gt;&lt;/em&gt;&lt;/u&gt;&lt;br /&gt;
&lt;img src="/img/pictures/gmail-hosted/links.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Besides a custom logo, it is possible to set a company name to be used instead of &amp;#8220;Google&amp;#8221; or &amp;#8220;Gmail&amp;#8221; in page titles and links. I chose &amp;#8220;H3RALD.com Mail&amp;#8221; and that&amp;#8217;s displayed everywhere, including on the sign-in page.&lt;/p&gt;
&lt;p&gt;&lt;u&gt;&lt;em&gt;&lt;strong&gt;Control Panel&lt;/strong&gt;&lt;/em&gt;&lt;/u&gt;&lt;br /&gt;
All the custom settings can easily be managed through an easy-to use control panel:&lt;/p&gt;
&lt;p&gt;&lt;img src="/img/pictures/gmail-hosted/options_panel.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;It&amp;#8217;s really easy to use and has wizards to setup all the included services and options like setting up user accounts, settings etc.&lt;/p&gt;
&lt;p&gt;&lt;img src="/img/pictures/gmail-hosted/domain.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;u&gt;&lt;em&gt;&lt;strong&gt;User Accounts&lt;/strong&gt;&lt;/em&gt;&lt;/u&gt;&lt;br /&gt;
Through the control panel you can add new users and modifying existing user accounts to access your services. You can create administrators who are able to access administrative domain-wide settings, and standard users. Every user gets 2048MB of space for their emails, and that&amp;#8217;s pretty generous considering that it seems that you&amp;#8217;re able to create around 25 user accounts.&lt;/p&gt;
&lt;p&gt;Already have a list of users you&amp;#8217;re like to import? Just save them in &lt;span class="caps"&gt;CSV&lt;/span&gt; format and upload them.&lt;/p&gt;
&lt;p&gt;Would you like to be able to contact all your users at once, e.g. via a newsletter? Google thought about this as well, and you can create your own personal newsletters which can be sent out automatically to your @yourdomain.com email accounts.&lt;/p&gt;
&lt;p&gt;&lt;u&gt;&lt;em&gt;&lt;strong&gt;Internal Messaging System&lt;/strong&gt;&lt;/em&gt;&lt;/u&gt;&lt;br /&gt;
But there&amp;#8217;s more. We all know Google Talk: yes it&amp;#8217;s nice, but probably &lt;span class="caps"&gt;MSN&lt;/span&gt; has more features, smileys and all the rest but it still remains a perfectly usable instant manager, which also allows file transfer. Your users can use Google Talk to communicate with each other &lt;em&gt;or&lt;/em&gt; simply chat through their webmail interface, More features? Well, for example &lt;a href="https://www.google.com/support/hosted/bin/answer.py?answer=34143"&gt;you can setup Google Talk to work on federated networks&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;u&gt;&lt;em&gt;&lt;strong&gt;Appointments/Projects management&lt;/strong&gt;&lt;/em&gt;&lt;/u&gt;&lt;br /&gt;
Google Calendar is an excellent online calendar, and now you can use it within your own domain as well. This means, for example, that it can be used to set your company&amp;#8217;s appointments, reminder, project deadlines by creating an unlimited number of custom calendars to share with your collaborators.&lt;/p&gt;
&lt;p&gt;&lt;u&gt;&lt;em&gt;&lt;strong&gt;Design your own site&lt;/strong&gt;&lt;/em&gt;&lt;/u&gt;&lt;br /&gt;
I know a lot of restaurants, shops and people who would like to have a small site for their business or activity, but they can&amp;#8217;t develop web application themselves. So the most obvious solution is to hire some professional web developer to rip them off&amp;#8230; erhm, to create a website for them. Now it is not necessary: by setting the correct &lt;span class="caps"&gt;DNS&lt;/span&gt; parameters, you can allow users to create their own webpages using a foolproof and advanced web editor powered by Google: &lt;a href="http://pages.google.com/"&gt;Google Page Creator&lt;/a&gt;. &lt;br /&gt;
I didn&amp;#8217;t set it up on my own domain, but a preview of what you can do with Google Page Creator is available &lt;a href="http://h3rald.googlepages.com/home"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Scenario&lt;/h3&gt;
&lt;p&gt;After considering all this, I came to the conclusion that what Google did can help a lot of people and at the same time prevent some evil webmaster to charge them hundreds of Euro (they really get away with it!) for basic &amp;#8220;websites&amp;#8221; with &amp;#8220;three or more static pages&amp;#8221;.&lt;br /&gt;
All you have to do is buy your own domain, and that can be as cheap as 8$ per year, the rest comes for free, from Google:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;The best webmail interface you can possibly imagine&lt;/li&gt;
	&lt;li&gt;Nearly unlimited space for everything&lt;/li&gt;
	&lt;li&gt;A truly effective spam filter&lt;/li&gt;
	&lt;li&gt;About 25 fully-featured user account, possibly more if you ask nicely&lt;/li&gt;
	&lt;li&gt;Your own &amp;#8220;corporate instant messenger&amp;#8221;&lt;/li&gt;
	&lt;li&gt;Your own calendar to manage appointments, meetings etc.&lt;/li&gt;
	&lt;li&gt;An intuitive and advanced web page creator &amp;#8211; not like Geocities&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All this for free. Yes, with ads (I&amp;#8217;m not here to discuss &lt;a href="http://www.gmail-is-too-creepy.com/"&gt;privacy concerns&lt;/a&gt;), but after all they&amp;#8217;re not displayed on your main site.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;What about Server Side technologies for my sites?&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;OK kid, now that would be a little bit too much, even if I can foresee some possible &amp;#8220;Google Web Widgets&amp;#8221; at some point. &amp;#8220;Create your &lt;em&gt;interactive and dinamic&lt;/em&gt; website within minutes, no programming knowledge required&amp;#8221;&amp;#8230; that would be great (for Google) and bad (for freelance web developers). One thing at a time, after all G(od|oogle) has the whole eternity to fulfill his Goals.&lt;/p&gt;</description>
      <pubDate>Mon, 28 Aug 2006 03:51:00 -0000</pubDate>
      <guid>http://www.h3rald.com/articles/google-apps-for-your-domain/</guid>
      <link>http://www.h3rald.com/articles/google-apps-for-your-domain/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/google-apps-for-your-domain/#comments</comments>
      <category>google</category>
      <category>internet</category>
      <category>ajax</category>
      <category>web20</category>
      <category>review</category>
    </item>
    <item>
      <title>Akelos is real, after all...</title>
      <description>&lt;p&gt;Bermi Ferrer kept his promise, and even if a few were skeptic on the &lt;a href="http://base--/blog/view/34/"&gt;pre-announced&lt;/a&gt; features of his upcoming Akelos framework, last week he sent me a &amp;#8220;development preview&amp;#8221; and a few days ago he opened the development &lt;span class="caps"&gt;SVN&lt;/span&gt; repository to the public:&lt;/p&gt;
&lt;p&gt;&lt;a href="svn://akelos.org/trunk" target="_blank"&gt;svn://akelos.org/trunk&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Go, get it: it&amp;#8217;s worthwhile (see below).&lt;/p&gt;
&lt;p&gt;&amp;#8220;[&amp;#8230;] The Akelos Framework is an open-source port of Ruby on Rails to the &lt;span class="caps"&gt;PHP&lt;/span&gt; programming language.&lt;br /&gt;
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.&amp;#8221;&lt;/p&gt;
&lt;p&gt;At the Akelos Framework Features page you can find detailed information about what has been already implemented into the framework.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I think it says it all, well almost. Some people will undoubtedly be disgusted by yet-another-hopeless-Rails-clone: &lt;em&gt;not again!&lt;/em&gt; I hear them crying&amp;#8230;&lt;/p&gt;
&lt;p&gt;Well, yeah, I think this &amp;#8211; to be honest &amp;#8211; should be the last attempt someone makes to port Rails to &lt;span class="caps"&gt;PHP&lt;/span&gt; or at least port &lt;em&gt;some features and the overall philosophy&lt;/em&gt;, like &lt;a href="http://base--/bookmarks/view/cakephp"&gt;CakePHP&lt;/a&gt; did: there are honestly too many for one single language. Look at Python, &lt;a href="http://www.djangoproject.com/"&gt;Django&lt;/a&gt; seems to be the only &amp;#8220;Rails-inspired&amp;#8221; framework available and everyone is happy with it, while as a general rule &lt;span class="caps"&gt;PHP&lt;/span&gt; folks are never happy with what they already got.&lt;/p&gt;
&lt;p&gt;Bermi is undoubtedly one of them, and that&amp;#8217;s the reason he decided to code his very own Rails-inspired framework for &lt;span class="caps"&gt;PHP&lt;/span&gt;, which is, to date, the most remarkable of the ones I left out (it wasn&amp;#8217;t available at the time) in my &lt;a href="http://base--/articles/rails-inspired-php-frameworks/"&gt;article&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Confirmed Features &amp;amp; Contents&lt;/h3&gt;
&lt;p&gt;So well, although I didn&amp;#8217;t really have a proper chance to play with Akelos I can certainly herald some of its &amp;#8211; verified, this time &amp;#8211; features.&lt;/p&gt;
&lt;p&gt;For one, it&amp;#8217;s huge. Take Cake, add &lt;em&gt;every excellent, useful third party library or class you can possibly thing of&lt;/em&gt; and you&amp;#8217;ll get Akelos. No kidding. The unzipped source of the whole framework is a massive 16MB, 8.5 of which constitute the &lt;code&gt;vendors&lt;/code&gt; folder. What&amp;#8217;s in it? Well, all this:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;ADOdb&lt;/li&gt;
	&lt;li&gt;Domit&lt;/li&gt;
	&lt;li&gt;&lt;span class="caps"&gt;FPDF&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;Excel (reader library)&lt;/li&gt;
	&lt;li&gt;Hyper Estraier full-text search system&lt;/li&gt;
	&lt;li&gt;Inutio &lt;span class="caps"&gt;XML&lt;/span&gt;-&lt;span class="caps"&gt;RPC&lt;/span&gt; Library&lt;/li&gt;
	&lt;li&gt;&lt;em&gt;Many&lt;/em&gt; &lt;span class="caps"&gt;PEAR&lt;/span&gt; packages&lt;/li&gt;
	&lt;li&gt;PHPCodeAnalyzer&lt;/li&gt;
	&lt;li&gt;PHPmailer&lt;/li&gt;
	&lt;li&gt;SimpleTest&lt;/li&gt;
	&lt;li&gt;A Simple &lt;span class="caps"&gt;PHP&lt;/span&gt; &lt;span class="caps"&gt;YAML&lt;/span&gt; Class&lt;/li&gt;
	&lt;li&gt;Textile&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Then, similarly, all the state-of-the-art Javascript/&lt;span class="caps"&gt;AJAX&lt;/span&gt; hyper-hyped libraries are included:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;span class="caps"&gt;AFLAX&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;Behaviour&lt;/li&gt;
	&lt;li&gt;Builder&lt;/li&gt;
	&lt;li&gt;various Scriptaculous packages&lt;/li&gt;
	&lt;li&gt;Prototype&lt;/li&gt;
	&lt;li&gt;FileUploader (by the author, using prototype)&lt;/li&gt;
	&lt;li&gt;Window&lt;/li&gt;
	&lt;li&gt;EventSelectors&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="float:left;"&gt;&lt;img src="http://base--/img/pictures/frameworks/akelos_framework_logo.gif" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Good, well, kind of: that&amp;#8217;s just what &lt;em&gt;others&lt;/em&gt; did, but it&amp;#8217;s worth noting that it&amp;#8217;s all there and &amp;#8211; apparently &amp;#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 &lt;em&gt;code generators&lt;/em&gt;&amp;#8230; Aye, there are in Akelos as well, of course!&lt;/p&gt;
&lt;p&gt;Coming to the more juicy stuff, &lt;em&gt;lo&amp;#8217; and behold, ye contents of /lib folder (with comments):&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;AkActionController (controller)&lt;/li&gt;
	&lt;li&gt;AkActionView (view)&lt;/li&gt;
	&lt;li&gt;AkActionWebservice (Web services)&lt;/li&gt;
	&lt;li&gt;AkActiveRecord (model)&lt;/li&gt;
	&lt;li&gt;AkAdodbCache (content caching)&lt;/li&gt;
	&lt;li&gt;AkCharset (utf8 support, includes &lt;em&gt;all&lt;/em&gt; mappings)&lt;/li&gt;
	&lt;li&gt;AkConfig (load config settings)&lt;/li&gt;
	&lt;li&gt;AkConverters (conversions!)
	&lt;ul&gt;
		&lt;li&gt;DBDesigner &amp;gt; AkelosDatabaseDesign&lt;/li&gt;
		&lt;li&gt;Excel &amp;gt; Array (bi-dimensional)&lt;/li&gt;
		&lt;li&gt;Excel &amp;gt; &lt;span class="caps"&gt;CSV&lt;/span&gt;&lt;/li&gt;
		&lt;li&gt;&lt;span class="caps"&gt;HTML&lt;/span&gt; &amp;gt; &lt;span class="caps"&gt;RTF&lt;/span&gt;&lt;/li&gt;
		&lt;li&gt;&lt;span class="caps"&gt;HTML&lt;/span&gt; &amp;gt; Text&lt;/li&gt;
		&lt;li&gt;Word &amp;gt; Unicode&lt;/li&gt;
		&lt;li&gt;&lt;span class="caps"&gt;PDF&lt;/span&gt; &amp;gt; Text&lt;/li&gt;
		&lt;li&gt;Xdoc &amp;gt; Text&lt;/li&gt;
	&lt;/ul&gt;&lt;/li&gt;
	&lt;li&gt;AkHeaders (&lt;span class="caps"&gt;HTTP&lt;/span&gt; headers, redirections)&lt;/li&gt;
	&lt;li&gt;AkImages (Image operations, resizing)&lt;/li&gt;
	&lt;li&gt;AkLocalize (Localization, countries and timezones)&lt;/li&gt;
	&lt;li&gt;AkInflector&lt;/li&gt;
	&lt;li&gt;AkLogger&lt;/li&gt;
	&lt;li&gt;AkFtp&lt;/li&gt;
	&lt;li&gt;AkInstaller&lt;/li&gt;
	&lt;li&gt;AkRouter&lt;/li&gt;
	&lt;li&gt;AkZip&lt;/li&gt;
	&lt;li&gt;&amp;#8230;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Well, it&amp;#8217;s all there, at any rate. The best way to know if it all works, and &lt;em&gt;how&lt;/em&gt; it works, is simply to try it out: &lt;a href="http://www.akelos.org/"&gt;www.akelos.org&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Remarks&lt;/h3&gt;
&lt;p&gt;As I said earlier, Akelos looks like &lt;em&gt;CakePHP on steroids&lt;/em&gt;: agreed, the Cake philosophy of &amp;#8220;no we-may-use-it code in the trunk&amp;#8221; has been &lt;em&gt;completely&lt;/em&gt; (and intentionally) ignored, but this is our chance to peek at what CakePHP could have become if such philosophy didn&amp;#8217;t become a lifestyle for the Cake Dev Team. &lt;br /&gt;
Akelos code is Rails-inspired, so yes, it&amp;#8217;s &lt;em&gt;very&lt;/em&gt; similar to Cake, although with some rough edges and some re-used parts, but it&amp;#8217;s the work of &lt;span class="caps"&gt;ONE&lt;/span&gt; person with no community support (yet), don&amp;#8217;t forget. Remarkable.&lt;/p&gt;
&lt;p&gt;And he needs co-developers, by the looks of it, so there you are then: there&amp;#8217;s &lt;em&gt;your&lt;/em&gt; chance!&lt;/p&gt;
&lt;p&gt;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 &lt;span class="caps"&gt;PHP&lt;/span&gt; and &lt;em&gt;possibly&lt;/em&gt; meet the needs of more people: those who want just the essentials, as a framework, and those who like to be &lt;em&gt;virtually almighty&lt;/em&gt; and be able to do anything, &lt;em&gt;if they wanted to&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Two flavours of the same framework? &lt;em&gt;CakePHP&lt;/em&gt; and &lt;em&gt;cAkePHP&lt;/em&gt; (note the case)? Bah, let&amp;#8217;s stop raving now, shall we?&lt;/p&gt;</description>
      <pubDate>Tue, 01 Aug 2006 23:33:00 -0000</pubDate>
      <guid>http://www.h3rald.com/articles/38/</guid>
      <link>http://www.h3rald.com/articles/38/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/38/#comments</comments>
      <category>frameworks</category>
      <category>php</category>
      <category>webdevelopment</category>
      <category>review</category>
    </item>
    <item>
      <title>The CakePHP Framework: Your First Bite</title>
      <description>&lt;p&gt;According to a recent study, &lt;span class="caps"&gt;PHP&lt;/span&gt; is one of the most popular programming languages in the world. In spite of this, &lt;span class="caps"&gt;PHP&lt;/span&gt; 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, &lt;span class="caps"&gt;PHP&lt;/span&gt; is very easy to learn, and this has often led to the common misconception that most &lt;span class="caps"&gt;PHP&lt;/span&gt; developers are inexperienced and that their code is therefore prone to security vulnerabilities and exploits.&lt;a href="http://www.sitepoint.com/article/application-development-cakephp"&gt;Read the full article&lt;/a&gt; on &lt;a href="http://www.sitepoint.com/"&gt;SitePoint.com&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Fri, 14 Jul 2006 02:03:00 -0000</pubDate>
      <guid>http://www.h3rald.com/articles/cakephp-first-bite/</guid>
      <link>http://www.h3rald.com/articles/cakephp-first-bite/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/cakephp-first-bite/#comments</comments>
      <category>cakephp</category>
      <category>tutorial</category>
      <category>review</category>
    </item>
    <item>
      <title>Akelos Framework: too good to be true?</title>
      <description>&lt;p&gt;Someone recently added a comment to my article about &lt;a href="http://base--/articles/rails-inspired-php-frameworks/"&gt;Rails-inspired &lt;span class="caps"&gt;PHP&lt;/span&gt; frameworks&lt;/a&gt; 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 &lt;span class="caps"&gt;PHP&lt;/span&gt; and spam or not, I&amp;#8217;d like to thank this guy for letting me know of the existance of &lt;a href="http://base--/bookmarks/view/akelos-framework"&gt;Akelos&lt;/a&gt;, a new &lt;span class="caps"&gt;PHP&lt;/span&gt; framework which seems simply too good to be true.&lt;/p&gt;
&lt;p style="float:left;"&gt;&lt;img src="http://base--/img/pictures/frameworks/akelos_framework.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Let me just spend a few words more before writing more about it though. First off, it&amp;#8217;s not available yet. OR at least it doesn&amp;#8217;t seem to be: the author is planning to release his work to the Open Source community but&amp;#8230; well, he&amp;#8217;s a bit concerned about the current &amp;#8220;&lt;span class="caps"&gt;PHP&lt;/span&gt; Framework War&amp;#8221;: he wouldn&amp;#8217;t like to end up like &lt;a href="http://subway.python-hosting.com/"&gt;Subway&lt;/a&gt; or just be slagged off by those merciless reviewers who enjoy write round-ups and comparisons about frameworks. &lt;a href="http://www.bermi.org/page/about_me"&gt;Bermi Ferrer&lt;/a&gt; is &amp;#8220;just&amp;#8221; a talented &lt;span class="caps"&gt;PHP&lt;/span&gt; developer who decided to create his own framework and he really enjoyed doing so, nothing more, nothing less.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;#8220;I considered other &lt;span class="caps"&gt;PHP&lt;/span&gt; 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.&amp;#8221;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Where did I hear that? Nothing new: it&amp;#8217;s always the same story of frameworks not being as we want them to be etc., it&amp;#8217;s human. And yes, it&amp;#8217;s &lt;em&gt;&lt;strong&gt;another&lt;/strong&gt;&lt;/em&gt; attempt to port Ruby on Rails to &lt;span class="caps"&gt;PHP&lt;/span&gt;, and a damn good one &amp;#8212; or so it seems.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;Before proceeding any further, I&amp;#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-&lt;span class="caps"&gt;PHP&lt;/span&gt;-clone issue: &lt;strong&gt;If I see a single comment slagging off this framework (or any other) only because it&amp;#8217;s a port of Rails to &lt;span class="caps"&gt;PHP&lt;/span&gt;, it will be deleted, may it be David Heinemeier Hansson himself&lt;/strong&gt;. 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, &lt;span class="caps"&gt;EVERYBODY&lt;/span&gt; &lt;span class="caps"&gt;KNOWS&lt;/span&gt; &lt;span class="caps"&gt;THAT&lt;/span&gt;. Please, please, save us poor &lt;span class="caps"&gt;PHP&lt;/span&gt; developers the usual preaching.&lt;/small&gt;&lt;/p&gt;
&lt;p style="float:right;"&gt;&lt;img src="http://base--/img/pictures/frameworks/bermi_ferrer.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;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&amp;#8230; ooops!&lt;/p&gt;
&lt;p&gt;Let&amp;#8217;s just quote the most juicy ones, shall we?&lt;/p&gt;
&lt;p&gt;Active Record [&amp;#8220;Model&amp;#8221;]&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Associations&lt;/li&gt;
	&lt;li&gt;Callbacks&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Transactions&lt;/strong&gt;&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Finders&lt;/strong&gt; [ &lt;code&gt;$Project-&amp;gt;findFirstBy('language AND start_year:greater', 'PHP', '2004');&lt;/code&gt; ]&lt;/li&gt;
	&lt;li&gt;Versioning&lt;/li&gt;
	&lt;li&gt;&amp;#8230;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Action Controller [&amp;#8220;Controller&amp;#8221;]&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Filters&lt;/li&gt;
	&lt;li&gt;Pagination&lt;/li&gt;
	&lt;li&gt;Mime Type&lt;/li&gt;
	&lt;li&gt;Mime Response&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Code Generation&lt;/strong&gt;&lt;/li&gt;
	&lt;li&gt;Response handler&lt;/li&gt;
	&lt;li&gt;&amp;#8230;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Action View [&amp;#8220;View&amp;#8221;]&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;strong&gt;Templates (using Sintags)&lt;/strong&gt;&lt;/li&gt;
	&lt;li&gt;Web 2.0 javascript using prototype and script.aculo.us&lt;/li&gt;
	&lt;li&gt;Helpers&lt;/li&gt;
	&lt;li&gt;Partials&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Template Compilers&lt;/strong&gt;&lt;/li&gt;
	&lt;li&gt;&amp;#8230;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And then more Akelos-only goodies:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;strong&gt;Multilingual Models and Views&lt;/strong&gt;&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Locale alias integrated on &lt;span class="caps"&gt;URLS&lt;/span&gt; (example.com/spanish will load the es_ES locale)&lt;/strong&gt;&lt;/li&gt;
	&lt;li&gt;Database migrations using DB Designer files&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Pure &lt;span class="caps"&gt;PHP&lt;/span&gt; support for Unicode (no extensions required)&lt;/strong&gt;&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Unit Tested source code&lt;/strong&gt;&lt;/li&gt;
	&lt;li&gt;Code Generators&lt;/li&gt;
	&lt;li&gt;Built in &lt;span class="caps"&gt;XHTML&lt;/span&gt; validator&lt;/li&gt;
	&lt;li&gt;Automated locale management&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Clean separation from &lt;span class="caps"&gt;HTML&lt;/span&gt; and Javascript using &lt;span class="caps"&gt;CSS&lt;/span&gt; event selectors.&lt;/strong&gt;&lt;/li&gt;
	&lt;li&gt;Ajax file uploads&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;&lt;span class="caps"&gt;AFLAX&lt;/span&gt; integration&lt;/strong&gt;&lt;/li&gt;
	&lt;li&gt;Dojo Rich Text Editor&lt;/li&gt;
	&lt;li&gt;Format converters&lt;/li&gt;
	&lt;li&gt;File handling using &lt;span class="caps"&gt;SFTP&lt;/span&gt; for shared host running Apache as user nobody (as most CPanel server do)&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Distributed sessions using databases&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Impressed? I was, honest. And I&amp;#8217;m talking as a CakePHP fanatic here, and I must say that if this framework can really offer all this &lt;em&gt;and&lt;/em&gt; &amp;#8212; and this is what really matters &amp;#8212; is also as simple as Cake to learn and well performing&amp;#8230; well, this is definitely going to be quite a promising player in the &amp;#8220;&lt;span class="caps"&gt;PHP&lt;/span&gt; Framework War&amp;#8221; (but is not a real war, is it?), although the author is quite worried about that:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;#8220;I&amp;#8217;m also concerned about the &lt;span class="caps"&gt;PHP&lt;/span&gt; Framework war, I don&amp;#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&amp;#8217;t want to spend my time discussing about if this is better or not than other solutions. That&amp;#8217;s the reason I&amp;#8217;ll first look for great developers interested in the Framework to help me releasing it.&amp;#8221;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;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, &lt;a href="http://www.bermi.org/projects/akelos_framework"&gt;Akelos Framework&lt;/a&gt;.&lt;/p&gt;</description>
      <pubDate>Sat, 10 Jun 2006 09:26:00 -0000</pubDate>
      <guid>http://www.h3rald.com/articles/34/</guid>
      <link>http://www.h3rald.com/articles/34/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/34/#comments</comments>
      <category>frameworks</category>
      <category>php</category>
      <category>web-development</category>
      <category>review</category>
    </item>
    <item>
      <title>An overview of the CakePHP framework</title>
      <description>&lt;p&gt;&lt;em&gt;&amp;#8220;There are many frameworks available for the &lt;span class="caps"&gt;PHP&lt;/span&gt; programming language nowadays, and especially a lot of &lt;span class="caps"&gt;RAD&lt;/span&gt; (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 &lt;span class="caps"&gt;RAD&lt;/span&gt; philosophy &amp;#8211; which became so popular after Ruby on Rails &amp;#8211; to the &lt;span class="caps"&gt;PHP&lt;/span&gt; programming language. CakePHP v1.0 is now one of the most popular and intuitive solutions for &lt;span class="caps"&gt;PHP&lt;/span&gt; programming, let&amp;#8217;s discover why&amp;#8230;&amp;#8221;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://hades.phparch.com/ceres/public/article/index.php/art::cakephp::overview"&gt;Read the full article&lt;/a&gt; on &lt;a href="http://hades.phparch.com/artemis/main/"&gt;php|architect article repository&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Tue, 30 May 2006 13:50:20 -0000</pubDate>
      <guid>http://www.h3rald.com/articles/cakephp-overview/</guid>
      <link>http://www.h3rald.com/articles/cakephp-overview/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/cakephp-overview/#comments</comments>
      <category>cakephp</category>
      <category>review</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Review of ten popular social bookmarking services</title>
      <description>&lt;p&gt;Social bookmarking&lt;sup class="footnote" id="fnr1"&gt;&lt;a href="#fn1"&gt;1&lt;/a&gt;&lt;/sup&gt; is perhaps one of the pillars of Web 2.0, allowing people to save, tag and share their Internet bookmarks online anytime, anywhere. Since &lt;em&gt;del.icio.us&lt;/em&gt;&lt;sup class="footnote" id="fnr2"&gt;&lt;a href="#fn2"&gt;2&lt;/a&gt;&lt;/sup&gt; came out, the Web is not the same anymore: no more IE favourites or Firefox bookmarks, no more &amp;#8220;Save page as&amp;#8230;&amp;#8221; etc., people nowadays want to do &lt;em&gt;everything&lt;/em&gt; online without being bond to a single computer, and also make everything they do or read public &amp;#8211; apparently. This is one of the key concepts of Web 2.0&lt;sup class="footnote" id="fnr3"&gt;&lt;a href="#fn3"&gt;3&lt;/a&gt;&lt;/sup&gt;: 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 &lt;em&gt;&amp;#8220;[&amp;#8230;] There is almost 1 new social bookmark/digg like service appears one daily basis [&amp;#8230;]&amp;#8221;&lt;/em&gt;&lt;sup class="footnote" id="fnr4"&gt;&lt;a href="#fn4"&gt;4&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;p&gt;Nice, and there are also many reviews of each one as well&lt;sup class="footnote" id="fnr5"&gt;&lt;a href="#fn5"&gt;5&lt;/a&gt;&lt;/sup&gt;! Here&amp;#8217;s another one&amp;#8230;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Preliminary Notes&lt;/strong&gt;: This round-up does &lt;em&gt;not&lt;/em&gt; include &lt;em&gt;all&lt;/em&gt; social bookmarking sites and yes, there are a lot missing. I decided to pick 10 services out of the dozens available for one simple reason: make this article more readable. I&amp;#8217;m really sorry if your favourite social bookmarking site is not listed: if you feel creative you can add your (short!) review as a comment to this article.&lt;br /&gt;
Although I recently wrote a very positive review of Ma.gnolia&lt;sup class="footnote" id="fnr6"&gt;&lt;a href="#fn6"&gt;6&lt;/a&gt;&lt;/sup&gt; and I know its lead developer, I do &lt;em&gt;not&lt;/em&gt; consider myself partial towards Ma.gnolia, you&amp;#8217;ll notice when I review it.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;Common features and concepts&lt;/h3&gt;
&lt;p&gt;The social bookmarking sites reviewed in this article are: del.icio.us&lt;sup class="footnote" id="fnr2"&gt;&lt;a href="#fn2"&gt;2&lt;/a&gt;&lt;/sup&gt;, Ma.gnolia&lt;sup class="footnote" id="fnr7"&gt;&lt;a href="#fn7"&gt;7&lt;/a&gt;&lt;/sup&gt;, Furl&lt;sup class="footnote" id="fnr8"&gt;&lt;a href="#fn8"&gt;8&lt;/a&gt;&lt;/sup&gt;, Spurl&lt;sup class="footnote" id="fnr9"&gt;&lt;a href="#fn9"&gt;9&lt;/a&gt;&lt;/sup&gt;, Yahoo MyWeb 2.0&lt;sup class="footnote" id="fnr10"&gt;&lt;a href="#fn10"&gt;10&lt;/a&gt;&lt;/sup&gt; Blinklist&lt;sup class="footnote" id="fnr11"&gt;&lt;a href="#fn11"&gt;11&lt;/a&gt;&lt;/sup&gt;, Smarking&lt;sup class="footnote" id="fnr12"&gt;&lt;a href="#fn12"&gt;12&lt;/a&gt;&lt;/sup&gt;, Shadows&lt;sup class="footnote" id="fnr13"&gt;&lt;a href="#fn13"&gt;13&lt;/a&gt;&lt;/sup&gt;, Simpy&lt;sup class="footnote" id="fnr14"&gt;&lt;a href="#fn14"&gt;14&lt;/a&gt;&lt;/sup&gt; and Blogmarks&lt;sup class="footnote" id="fnr15"&gt;&lt;a href="#fn15"&gt;15&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;p&gt;All these social bookmarking sites have some features in common which can be used to define &lt;em&gt;social bookmarking&lt;/em&gt; itself:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;They allow users to save URLs online, adding some notes to it, and share them with others&lt;/li&gt;
	&lt;li&gt;Each url can be &lt;em&gt;tagged&lt;/em&gt; with custom tags user can create and manage&lt;/li&gt;
	&lt;li&gt;&lt;span class="caps"&gt;RSS&lt;/span&gt; is widely supported, so you can included your &amp;#8220;recent bookmarks&amp;#8221; in your blog, for example&lt;/li&gt;
	&lt;li&gt;They allow users to import/export bookmarks in various formats&lt;/li&gt;
	&lt;li&gt;They support the creation and management of user profiles&lt;/li&gt;
	&lt;li&gt;Bookmarklet, buttons or other cute little things are provided to make your life easier and bookmark faster&lt;/li&gt;
&lt;/ul&gt;
Such features will not be mentioned over and over in each review, of course.
&lt;h3&gt;Review parameters&lt;/h3&gt;
&lt;p&gt;Besides an overview for each service and some notes regarding their intended &lt;em&gt;audience&lt;/em&gt;, some other parameters will be considered and rated from 0 to 10 (the higher, the better):&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Speed&lt;/em&gt;&lt;br /&gt;
I&amp;#8217;m currently on dialup, and so I&amp;#8217;ll be able to effectively test the speed and rendering time of each site. The higher the mark, the faster the site is.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Features&lt;/em&gt;&lt;br /&gt;
Notes concerning added/missing features, and overall features rating.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Simplicity&lt;/em&gt;&lt;br /&gt;
Do you need to be a certified geek&amp;#8482; in order to use the service or even your dog can learn how to use it, if he tries hard?&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Interface/Design&lt;/em&gt;&lt;br /&gt;
This parameter concerns the visual appearance of a website. Note: it can be particularly subjective, I&amp;#8217;ll try my best to be objective.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Userbase&lt;/em&gt;&lt;br /&gt;
Basically the amount of people which use a determined service.&lt;/p&gt;
&lt;p&gt;Ready to go&amp;#8230;&lt;/p&gt;
&lt;h3&gt;&lt;a href="http://del.icio.us/"&gt;del.icio.us&lt;/a&gt;&lt;br /&gt;
&lt;img src="/img/pictures/socbook/delicious.gif" alt="" /&gt;&lt;/h3&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;strong&gt;Speed:&lt;/strong&gt; 10 &amp;#8211; This is by far the fastest site to load, perhaps because it doesn&amp;#8217;t have any fancy eye-candy at all&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Features:&lt;/strong&gt; 6 &amp;#8211; del.icio.us offers only the most essential features, nothing too fancy, but nothing too bad either&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Simplicity:&lt;/strong&gt; 6 &amp;#8211; You need some time to get used to it, but it&amp;#8217;s not confusing like some others. Hardly any documentation or tutorial provided, but hey, this is the geek&amp;#8217;s choice after all&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Interface/Design:&lt;/strong&gt; 6 &amp;#8211; Personally I like it, but I know I have no taste for design and interfaces. An average user would say that it&amp;#8217;s too plain and no, nothing fancy at all&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Userbase:&lt;/strong&gt; 10 &amp;#8211; Judging by the amount of people coming to my site after one of my article made it to digg, compared to other social bookmarking services, this is BY &lt;span class="caps"&gt;FAR&lt;/span&gt; the most used one. Everyone has a del.icio.us account, then, maybe, something else&lt;/li&gt;
	&lt;li&gt;&lt;em&gt;&lt;strong&gt;Overall Rating: 7.6&lt;/strong&gt;&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Overview&lt;/strong&gt;&lt;br /&gt;
This is &lt;span class="caps"&gt;THE&lt;/span&gt; social bookmarking service, it is the first, the most supported (every other service allows importing from del.icio.us), and the most used, with several thousands of registered users. Obviously, this made it the main term of comparison for other bookmarking services, which claim to be &lt;em&gt;better&lt;/em&gt; because they are successful exactly where del.icio.us is lacking, e.g.:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Eye candy&lt;/li&gt;
	&lt;li&gt;they offer better user interaction (comments, messages)&lt;/li&gt;
	&lt;li&gt;Ratings are supported&lt;/li&gt;
	&lt;li&gt;More &lt;span class="caps"&gt;AJAX&lt;/span&gt; and effects&lt;/li&gt;
	&lt;li&gt;Other sites cache bookmarks internally or may offer thumbnails&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Nevertheless, del.icio.us still remains the geek&amp;#8217;s choice, the numbers speak by themselves. It is also my choice at the moment, because of its simplicity (in the sense of &amp;#8220;no useless things are included&amp;#8221;) and speed.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Suitable for:&lt;/strong&gt; IT professionals, computer enthusiasts, tech-savvy people in general. Your old auntie probably won&amp;#8217;t like it, but at least she&amp;#8217;ll keep away from it and leave you in peace.&lt;/p&gt;
&lt;h3&gt;&lt;a href="http://ma.gnolia.com/"&gt;Ma.gnolia&lt;/a&gt;&lt;br /&gt;
&lt;img src="/img/pictures/socbook/magnolia.gif" alt="" /&gt;&lt;/h3&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;strong&gt;Speed:&lt;/strong&gt; 5 &amp;#8211; It&amp;#8217;s a bit slow if compared to competitors. Maybe it&amp;#8217;s just me, maybe it&amp;#8217;s the server, maybe it&amp;#8217;s Ruby on Rails.&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Features:&lt;/strong&gt; 7 &amp;#8211; Saved copies, &lt;span class="caps"&gt;AJAX&lt;/span&gt; 5-star ratings, &lt;span class="caps"&gt;AJAX&lt;/span&gt; private/public lock, groups &amp;amp; messages&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Simplicity:&lt;/strong&gt; 8 &amp;#8211; Fairly simple to learn and use, excellent documentation online&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Interface/Design:&lt;/strong&gt; 10 &amp;#8211; I really like Ma.gnolia&amp;#8217;s website design over all the others: clean, simple and professional with &lt;span class="caps"&gt;AJAX&lt;/span&gt; features in the right place.&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Userbase:&lt;/strong&gt; 6 &amp;#8211; It&amp;#8217;s fairly new so not many people are using it. It&amp;#8217;s being pushed by Zeldman &amp;amp; ALA&amp;#8217;s crew though&lt;/li&gt;
	&lt;li&gt;&lt;em&gt;&lt;strong&gt;Overall Rating: 7.2&lt;/strong&gt;&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Overview&lt;/strong&gt;&lt;br /&gt;
This &lt;em&gt;was&lt;/em&gt; my first choice and the first social bookmarking site I reviewed&lt;sup class="footnote" id="fnr6"&gt;&lt;a href="#fn6"&gt;6&lt;/a&gt;&lt;/sup&gt; and tried properly. It is developed in Ruby on Rails and it excels in simplicity and visual appearance, but it has some rather annoying CONs. First of all it&amp;#8217;s a bit slow for my liking, especially now that I&amp;#8217;m on dialup. Second, the search is currently limited to tags only: it&amp;#8217;s obviously a temporary thing and it will be back soon though, but I gave it a 7 instead of a 8 for features for this reason.&lt;br /&gt;
Ads are visible on the top of every page &amp;#8211; subscribe (soon) to remove them&amp;#8230; oh well.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Suitable for:&lt;/strong&gt; Anyone, although it seems to be the choice of &lt;em&gt;web designers&lt;/em&gt; and people involved in website development.&lt;/p&gt;
&lt;h3&gt;&lt;a href="http://www.furl.net/"&gt;Furl&lt;/a&gt;&lt;br /&gt;
&lt;img src="/img/pictures/socbook/furl.gif" alt="" /&gt;&lt;/h3&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;strong&gt;Speed:&lt;/strong&gt; 7 &amp;#8211; Fast enough, no complains and no unnecessary objects or images either.&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Features:&lt;/strong&gt; 6 &amp;#8211; saved copies, plenty of tools including their own toolbar, multiple categories but no tagclouds and not as customizeable as the others&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Simplicity:&lt;/strong&gt; 7 &amp;#8211; Simple, organized, essential. Documentation available.&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Interface/Design:&lt;/strong&gt; 5 &amp;#8211; This is nothing fancy at all compared to the others, a fairly &lt;em&gt;traditional&lt;/em&gt; web interface. &lt;em&gt;Web 2.0?&lt;/em&gt; &amp;#8230;Pardon?&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Userbase:&lt;/strong&gt; 8 &amp;#8211; This is one of the oldest social bookmarking services and it&amp;#8217;s easier than del.icio.us, that&amp;#8217;s why the fairly large userbase.&lt;/li&gt;
	&lt;li&gt;&lt;em&gt;&lt;strong&gt;Overall Rating: 6.6&lt;/strong&gt;&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Overview&lt;/strong&gt;&lt;br /&gt;
When I tried this service after trying the others I wasn&amp;#8217;t impressed at all. The interface is fairly standard, all done in a traditional way, no &lt;span class="caps"&gt;AJAX&lt;/span&gt; at all: if you absolutely hate Web 2.0 hype, even when it&amp;#8217;s actually useful, go for this. To rate a bookmark I must click on edit and select the rating from a select menu: our children wouldn&amp;#8217;t believe it.&lt;br /&gt;
The good thing about Furl, and what made it popular, presumably, is its simplicity over other similar services like del.icio.us, that&amp;#8217;s the most logical reason I could find to explain its popularity.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Suitable for:&lt;/strong&gt; Anyone, users against or not yet accustomed to Web 2.0 interactivity&lt;/p&gt;
&lt;h3&gt;&lt;a href="http://www.spurl.net/"&gt;Spurl&lt;/a&gt;&lt;br /&gt;
&lt;img src="/img/pictures/socbook/spurl.jpg" alt="" /&gt;&lt;/h3&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;strong&gt;Speed:&lt;/strong&gt; 8 &amp;#8211; Fast and pleasant to look at, no complaints&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Features:&lt;/strong&gt; 7 &amp;#8211; Saved copies, del.icio.us sync, useful stats, no ratings, multilingual, some quirks (see below)&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Simplicity:&lt;/strong&gt; 8 &amp;#8211; Yes, this is really simple and straightforward to use. Extensive documentation available.&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Interface/Design:&lt;/strong&gt; 8 &amp;#8211; A really clean, simple, but yet nice looking and organized interface.&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Userbase:&lt;/strong&gt; 6 &amp;#8211; Fairly popular, not as popular as del.icio.us but on the right track&lt;/li&gt;
	&lt;li&gt;&lt;em&gt;&lt;strong&gt;Overall Rating: 7.4&lt;/strong&gt;&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Overview&lt;/strong&gt;&lt;br /&gt;
Now this is is an interesting service. The first thing that I really liked about it is the good del.icio.us integration: not excellent because it seems to take quite a bit to import my del.icio.us bookmarks, but everything you bookmark with Spurl can be send to del.icio.us at the same time and vice versa! They also offer interesting stats regarding your bookmarks, report broken links, cache webpages, etc. &lt;br /&gt;
Some annoying things must be noted though (hence the 7 in features): the bookmarklet will popup a window &amp;#8211; not great; it doesn&amp;#8217;t support ratings and the tag management could be improved: del.icio.us and ma.gnolia can &lt;em&gt;suggest&lt;/em&gt; tags when saving a bookmarks, while Spurl unfortunately doesn&amp;#8217;t. It also seems to be less tag-centric than the others (except for Furl of course). It is multi-language and offers a 18+ filter &amp;#8211; but if you forget to mark a bookmark as &amp;#8220;explicit&amp;#8221; it won&amp;#8217;t work, and as result you can get porn links on the homepage&amp;#8230;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Suitable for:&lt;/strong&gt; Anyone, del.icio.us users who would like to try something new without losing sync with their favourite service.&lt;/p&gt;
&lt;h3&gt;&lt;a href="http://myweb2.search.yahoo.com/"&gt;Yahoo MyWeb 2.0&lt;/a&gt;&lt;br /&gt;
&lt;img src="/img/pictures/socbook/myweb2.0.jpg" alt="" /&gt;&lt;/h3&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;strong&gt;Speed:&lt;/strong&gt; 6 &amp;#8211; Not too fast, like other sites in the Yahoo network.&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Features:&lt;/strong&gt; 5 &amp;#8211; &amp;#8220;Web 2.0&amp;#8221;? Well, yes, it has tag clouds and allows bookmark sharing, but that&amp;#8217;s about it.&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Simplicity:&lt;/strong&gt; 7 &amp;#8211; Integrated with Yahoo services (and toolbar), fairly easy to use, if you don&amp;#8217;t know something the FAQs are handy.&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Interface/Design:&lt;/strong&gt; 6 &amp;#8211; Clean, simple and a bit boring &amp;#8211; perhaps I&amp;#8217;m just to used to the rest of the sites in the Yahoo network&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Userbase:&lt;/strong&gt; 8 &amp;#8211; Grab some random users and a big chunk of Yahoo enthusiasts: not bad!&lt;/li&gt;
	&lt;li&gt;&lt;em&gt;&lt;strong&gt;Overall Rating: 6.4&lt;/strong&gt;&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Overview&lt;/strong&gt;&lt;br /&gt;
When I first read about it, I though: &lt;em&gt;look, Yahoo is ready to embrace the Web 2.0 philosophy&lt;/em&gt;, then I tried it and changed my mind: it has tags, tag clouds, it allows sharing but nothing more than that. The interface is still Web 1.0, and &lt;span class="caps"&gt;AJAX&lt;/span&gt; methodologies are not used at all. &lt;br /&gt;
Basically this service grasps the basic concepts from del.icio.us &amp;amp; C., simplifies them and re-presents them in a form which can be easily understood by the majority of Internet users of the planet (and primarly Yahoo users) and &lt;em&gt;yet&lt;/em&gt; look innovative. Excellent marketing work, perhaps, but nothing too new or particularly useful there.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Suitable for&lt;/strong&gt;: Anyone, in particular Yahoo users for the excellent integration with the rest of Yahoo services.&lt;/p&gt;
&lt;h3&gt;&lt;a href="http://www.blinklist.com/"&gt;Blinklist&lt;/a&gt;&lt;br /&gt;
&lt;img src="/img/pictures/socbook/blinklist.gif" alt="" /&gt;&lt;/h3&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;strong&gt;Speed:&lt;/strong&gt; 7 &amp;#8211; Fast, especially considering the type of interface&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Features:&lt;/strong&gt; 10 &amp;#8211; The service which offers more features than anyone else, simply that. Ratings, quit bookmarks, video tutorials, &lt;span class="caps"&gt;AJAX&lt;/span&gt; where needed, tabs, starred links, message board etc. etc.&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Simplicity:&lt;/strong&gt; 7 &amp;#8211; Considering the amount of features it offers, it&amp;#8217;s simple enough to use. Impressive Help section.&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Interface/Design:&lt;/strong&gt; 9 &amp;#8211; I really like its interface, the scary amount of &lt;span class="caps"&gt;AJAX&lt;/span&gt; code it uses et al. Not a 10 because the five icons at the top (Gnome-like?) don&amp;#8217;t go well with the rest of the design, only that.&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Userbase:&lt;/strong&gt; 7 &amp;#8211; Not too popular, and new to the scene&lt;/li&gt;
	&lt;li&gt;&lt;em&gt;&lt;strong&gt;Overall Rating: 8&lt;/strong&gt;&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Overview&lt;/strong&gt;&lt;br /&gt;
This should technically be the winner. These guys truly did their best trying to build perhaps the most &amp;#8220;Web 2.0 compliant&amp;#8221; social bookmarking service ever. The downside of it is just the huge amount of &lt;span class="caps"&gt;AJAX&lt;/span&gt; involved in all this, but if you&amp;#8217;re fine with that, Blinklist is truly amazing. It uses a digg-like approach to &lt;em&gt;blink&lt;/em&gt; the urls which appear on the site instantly: an &lt;span class="caps"&gt;AJAX&lt;/span&gt; div fades in allowing you to fill in the bookmark&amp;#8217;s details and then it fades away incrementing the &lt;em&gt;blink&lt;/em&gt; count and adding it to your collection. The private area has a quadri-tabbed sidebar with: 1) real-time chat, 2) popular tags view, 3) recent tags used, 4) cloud view. It supports site thumbnails but not saved copies unfortunately, advanced profiles, avatars, ratings&amp;#8230; &lt;br /&gt;
Advanced, &amp;#8220;cool&amp;#8221; and (perhaps too much) on the edge. In Italian we have a word for things like this, but I won&amp;#8217;t mention it here. Just think about &lt;em&gt;Fast and Furious&lt;/em&gt;, the feeling when browsing this site can be similar to driving an heavily modded car: if you like the way it works, it&amp;#8217;s the best thing ever &amp;#8211; if not, well, del.icio.us does the job alright.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Suitable for&lt;/strong&gt;: Web 2.0 lovers, geeks, anyone brave enough to try it without getting too shocked&lt;/p&gt;
&lt;h3&gt;&lt;a href="http://smarking.com/"&gt;Smarking&lt;/a&gt;&lt;br /&gt;
&lt;img src="/img/pictures/socbook/smarking.jpg" alt="" /&gt;&lt;/h3&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;strong&gt;Speed:&lt;/strong&gt; 7 &amp;#8211; Nothing superfluous in the interface, but it could be faster&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Features:&lt;/strong&gt; 8 &amp;#8211; Proper messaging, advanced profiles, &lt;span class="caps"&gt;STATS&lt;/span&gt;!&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Simplicity:&lt;/strong&gt; 7 &amp;#8211; Easy to learn and use, has a &lt;span class="caps"&gt;FAQ&lt;/span&gt; and a wiki&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Interface/Design:&lt;/strong&gt; 7 &amp;#8211; Very traditional but functional interface. Not too fancy or advanced, but does the job&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Userbase:&lt;/strong&gt; 4 &amp;#8211; About 300 users&lt;/li&gt;
	&lt;li&gt;&lt;em&gt;&lt;strong&gt;Overall Rating: 6.8&lt;/strong&gt;&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Overview&lt;/strong&gt;&lt;br /&gt;
Don&amp;#8217;t expect anything too fancy from Smarking, but a few features caught my attention. For one, it supports a proper messaging system: other services allow you to send notes and a link to other users, while this one has a proper, built-in private messaging system&amp;#8230; OK, not a big thing but nice to have. The design is not too great: it does the job but there&amp;#8217;s hardly any image, nevermind &lt;span class="caps"&gt;AJAX&lt;/span&gt; effects or similar.&lt;br /&gt;
What really impressed me (hence the 8 in features), are the detailed stats that this service makes available publicly: detailed domain stats, tag stats, user stats and more while others simply don&amp;#8217;t bother.&lt;br /&gt;
It was developed using Python and PostgreSQL by an Italian student of Computer Science &amp;#8211; apparently there&amp;#8217;s someone who is able to program properly in my country as well. Good job: nothing too exceptional as social bookmarking service, but an exemplary work.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Suitable for&lt;/strong&gt;: Italians in particular and everybody else as well.&lt;/p&gt;
&lt;h3&gt;&lt;a href="http://www.shadows.com/"&gt;Shadows&lt;/a&gt;&lt;br /&gt;
&lt;img src="/img/pictures/socbook/shadows.gif" alt="" /&gt;&lt;/h3&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;strong&gt;Speed:&lt;/strong&gt; 5 &amp;#8211; I don&amp;#8217;t know if it&amp;#8217;s because of Rails or the interface, but this site doesn&amp;#8217;s seem to perform as well as the others&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Features:&lt;/strong&gt; 7 &amp;#8211; enhanced commenting, saved copies, thumbnails, groups&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Simplicity:&lt;/strong&gt; 6 &amp;#8211; The usual FAQs are there, but other than that there&amp;#8217;s no particular effort to make newbie&amp;#8217;s life easier&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Interface/Design:&lt;/strong&gt; 5 &amp;#8211; Simple but not quite pretty interface, no graphic effor whatsoever, &lt;span class="caps"&gt;AJAX&lt;/span&gt; for adding and editing comments&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Userbase:&lt;/strong&gt; 6 &amp;#8211; Not a tiny userbase but not huge either&lt;/li&gt;
	&lt;li&gt;&lt;em&gt;&lt;strong&gt;Overall Rating: 6&lt;/strong&gt;&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Overview&lt;/strong&gt;&lt;br /&gt;
Maybe it&amp;#8217;s just me, but I wasn&amp;#8217;t too impressed by Shadows: it doesn&amp;#8217;t offer any particular innovative feature other than enhanced commenting. You can start real discussions about your bookmarks and interact with other users fairly well, but the question is: do you really want to? Perhaps an interesting way to build communities, but other than that nothing special. &lt;br /&gt;
The interface is not too pretty, unlike Ma.gnolia it looks like they didn&amp;#8217;t make a terrible effort trying to design something pleasant to look at and the final result is quite boring. They seem to support thumbnails, but clearly they use a third party service like Alexa because there&amp;#8217;s hardly any thumbnail displayed, generally: wrong choice &amp;#8211; see Blogmarks below for a better thumbnail support.&lt;br /&gt;
And yes, the default green smily default avatar is terribly cheesy and truly annoying (not that the others are any better&amp;#8230;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Suitable for&lt;/strong&gt;: Anybody? Nobody? Maybe people who like a more community-like approach&lt;/p&gt;
&lt;h3&gt;&lt;a href="http://www.simpy.com/"&gt;Simpy&lt;/a&gt;&lt;br /&gt;
&lt;img src="/img/pictures/socbook/simpy.png" alt="" /&gt;&lt;/h3&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;strong&gt;Speed:&lt;/strong&gt; 7 &amp;#8211; It&amp;#8217;s fast, but again, its interface is not anything fancy&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Features:&lt;/strong&gt; 7 &amp;#8211; Detects broken links and redirections, notes, groups&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Simplicity:&lt;/strong&gt; 6 &amp;#8211; It has FAQs but it could look confusing for inexperienced users&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Interface/Design:&lt;/strong&gt; 6 &amp;#8211; Nothing special, no eye candy, no &lt;span class="caps"&gt;AJAX&lt;/span&gt; even where it would be appreciated&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Userbase:&lt;/strong&gt; 7 &amp;#8211; Medium-sized userbase&lt;/li&gt;
	&lt;li&gt;&lt;em&gt;&lt;strong&gt;Overall Rating: 6.6&lt;/strong&gt;&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Overview&lt;/strong&gt;&lt;br /&gt;
The best feature offered by Simpy is the link detection service, able to detect broken links, duplicates and redirections. Everything else looks pretty normal and nothing special: it offers tag management, groups, notes, the usual tools. Copies of your bookmarks are &lt;span class="caps"&gt;NOT&lt;/span&gt; cached, and clicking on the &lt;em&gt;cached&lt;/em&gt; link will take you to web.archive.org, hoping that it cached the page you&amp;#8217;re looking for (hell even I could do that!).&lt;br /&gt;
No &lt;span class="caps"&gt;AJAX&lt;/span&gt;, nothing too pretty. Boring? Well, no, let&amp;#8217;s call it functional and essential.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Suitable for&lt;/strong&gt;: Anybody, moderate experience required&lt;/p&gt;
&lt;h3&gt;&lt;a href="http://blogmarks.net"&gt;Blogmarks&lt;/a&gt;&lt;br /&gt;
&lt;img src="/img/pictures/socbook/blogmarks.jpg" alt="" /&gt;&lt;/h3&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;strong&gt;Speed:&lt;/strong&gt; 5 &amp;#8211; It&amp;#8217;s slow. One of the main reasons ought to be the thumbnails: every bookmark has an associated image!&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Features:&lt;/strong&gt; 7 &amp;#8211; Excellent thumbnail support, Private tags, usual things&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Simplicity:&lt;/strong&gt; 6 &amp;#8211; It&amp;#8217;s pretty straightforward, but there&amp;#8217;s only one page to help new users&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Interface/Design:&lt;/strong&gt; 7 &amp;#8211; Simple and essential, no &lt;span class="caps"&gt;AJAX&lt;/span&gt;, not too fancy&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Userbase:&lt;/strong&gt; 7 &amp;#8211; One year old, medium userbase&lt;/li&gt;
	&lt;li&gt;&lt;em&gt;&lt;strong&gt;Overall Rating: 6.4&lt;/strong&gt;&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Overview&lt;/strong&gt;&lt;br /&gt;
Again, nothing too special &amp;#8211; except, of course, that &lt;em&gt;all&lt;/em&gt; bookmarks have a thumbnail: a good thing which made me feel popular for about 0.7 seconds when I noticed a little picture showing my own site when someone bookmarked it, but on the other hand quite annoying and pointless for dialup users.&lt;br /&gt;
No Web 2.0 interface, just plain old stuff which does the job but is not particularly pleasant or innovative. Private tags? A good thing maybe, and probably the only real innovation compared to other similar services.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Suitable for&lt;/strong&gt;: Anybody, moderate experience required&lt;/p&gt;
&lt;h3&gt;Conclusions&lt;/h3&gt;
&lt;p&gt;Although del.icio.us is still the leading service for social bookmarking, its competitors are obviously getting better. Among the ones I reviewed today, at least some of them look promising: Blinklist is definitely the most advanced in terms of features offered and technology used, and I think I&amp;#8217;ll try it out a bit more and see if it can be better than del.icio.us in the long run. Spurls is also tempting especially because it offers various interesting features without &lt;em&gt;forcing&lt;/em&gt; you to abandon your del.icio.us account &amp;#8211; and that was an excellent (and wise) feature Spurl developers chose to implement, without any doubt. Regarding my old favourite, Ma.gnolia, it still deserves a mention, mainly for being a succesful blend of latest technology and class design, without being too extreme.&lt;/p&gt;
&lt;p&gt;So&amp;#8230; what&amp;#8217;s &lt;em&gt;your&lt;/em&gt; favorite then?&lt;/p&gt;
&lt;h3&gt;Notes and Resources&lt;/h3&gt;
&lt;p class="footnote" id="fn1"&gt;&lt;a href="#fnr1"&gt;&lt;sup&gt;1&lt;/sup&gt;&lt;/a&gt; Social Bookmarking, &lt;a href="http://en.wikipedia.org/wiki/Social_bookmarking"&gt;Wikipedia Page&lt;/a&gt;&lt;/p&gt;
&lt;p class="footnote" id="fn2"&gt;&lt;a href="#fnr2"&gt;&lt;sup&gt;2&lt;/sup&gt;&lt;/a&gt; &lt;a href="http://del.icio.us/"&gt;del.icio.us&lt;/a&gt;, the first social bookmarking service&lt;/p&gt;
&lt;p class="footnote" id="fn3"&gt;&lt;a href="#fnr3"&gt;&lt;sup&gt;3&lt;/sup&gt;&lt;/a&gt; &lt;a href="http://www.oreillynet.com/pub/a/oreilly/tim/news/2005/09/30/what-is-web-20.html"&gt;What is Web 2.0?&lt;/a&gt; &amp;#8211; O&amp;#8217;Reilly article&lt;/p&gt;
&lt;p class="footnote" id="fn4"&gt;&lt;a href="#fnr4"&gt;&lt;sup&gt;4&lt;/sup&gt;&lt;/a&gt; &lt;a href="http://shakk.wordpress.com/2006/04/20/mother-of-all-social-bookmarking-services-icons/"&gt;Mother of all social bookmarking services icons&lt;/a&gt; &amp;#8211; A cool mosaic of all the social bookmarking sites&amp;#8217; icons.&lt;/p&gt;
&lt;p class="footnote" id="fn5"&gt;&lt;a href="#fnr5"&gt;&lt;sup&gt;5&lt;/sup&gt;&lt;/a&gt; Other reviews and comparisons of social bookmarking services:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Social bookmarking &lt;a href="http://h2obeta.law.harvard.edu/64211"&gt;resources&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://www.irox.de/roxomatic/616/social-bookmarks-review"&gt;Comparison charts&lt;/a&gt; of the most popular social bookmarking systems [&lt;span class="caps"&gt;PDF&lt;/span&gt;]&lt;/li&gt;
	&lt;li&gt;PCmag &lt;a href="http://www.pcmag.com/article2/0,1895,1875208,00.asp"&gt;round-up&lt;/a&gt; of various social bookmarking sites&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://www.dlib.org/dlib/april05/hammond/04hammond.html"&gt;Social Bookmarking Tools (I) &amp;#8211; A general review&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://3spots.blogspot.com/2006/01/all-social-that-can-bookmark.html"&gt;&lt;span class="caps"&gt;ALL&lt;/span&gt; Social that &lt;span class="caps"&gt;CAN&lt;/span&gt; bookmark&lt;/a&gt; &amp;#8211; The most comprehensive review of social bookmarking sites.&lt;/li&gt;
&lt;/ul&gt;
&lt;p class="footnote" id="fn6"&gt;&lt;a href="#fnr6"&gt;&lt;sup&gt;6&lt;/sup&gt;&lt;/a&gt; &lt;a href="http://www.h3rald.com/articles/view/ma.gnolia/"&gt;Ma.gnolia &amp;#8211; Social bookmarking made (extremely) easy&lt;/a&gt;&lt;/p&gt;
&lt;p class="footnote" id="fn7"&gt;&lt;a href="#fnr7"&gt;&lt;sup&gt;7&lt;/sup&gt;&lt;/a&gt; &lt;a href="http://ma.gnolia.com/"&gt;Ma.gnolia&lt;/a&gt; &amp;#8211; Social bookmarking service&lt;/p&gt;
&lt;p class="footnote" id="fn8"&gt;&lt;a href="#fnr8"&gt;&lt;sup&gt;8&lt;/sup&gt;&lt;/a&gt; &lt;a href="http://www.furl.net/"&gt;Furl&lt;/a&gt; &amp;#8211; Social bookmarking service&lt;/p&gt;
&lt;p class="footnote" id="fn9"&gt;&lt;a href="#fnr9"&gt;&lt;sup&gt;9&lt;/sup&gt;&lt;/a&gt; &lt;a href="http://www.spurl.net/"&gt;Spurl&lt;/a&gt; &amp;#8211; Social bookmarking service&lt;/p&gt;
&lt;p class="footnote" id="fn10"&gt;&lt;a href="#fnr10"&gt;&lt;sup&gt;10&lt;/sup&gt;&lt;/a&gt; &lt;a href="http://myweb2.search.yahoo.com/"&gt;Yahoo MyWeb 2.0&lt;/a&gt; &amp;#8211; Social bookmarking service&lt;/p&gt;
&lt;p class="footnote" id="fn11"&gt;&lt;a href="#fnr11"&gt;&lt;sup&gt;11&lt;/sup&gt;&lt;/a&gt; &lt;a href="http://www.blinklist.com/"&gt;Blinklist&lt;/a&gt; &amp;#8211; Social bookmarking service&lt;/p&gt;
&lt;p class="footnote" id="fn12"&gt;&lt;a href="#fnr12"&gt;&lt;sup&gt;12&lt;/sup&gt;&lt;/a&gt; &lt;a href="http://smarking.com/"&gt;Smarking&lt;/a&gt; &amp;#8211; Social bookmarking service&lt;/p&gt;
&lt;p class="footnote" id="fn13"&gt;&lt;a href="#fnr13"&gt;&lt;sup&gt;13&lt;/sup&gt;&lt;/a&gt; &lt;a href="http://www.shadows.com/"&gt;Shadows&lt;/a&gt; &amp;#8211; Social bookmarking service&lt;/p&gt;
&lt;p class="footnote" id="fn14"&gt;&lt;a href="#fnr14"&gt;&lt;sup&gt;14&lt;/sup&gt;&lt;/a&gt; &lt;a href="http://www.simpy.com/"&gt;Simpy&lt;/a&gt; &amp;#8211; Social bookmarking service&lt;/p&gt;
&lt;p class="footnote" id="fn15"&gt;&lt;a href="#fnr15"&gt;&lt;sup&gt;15&lt;/sup&gt;&lt;/a&gt; &lt;a href="http://blogmarks.net/"&gt;Blogmarks&lt;/a&gt; &amp;#8211; Social bookmarking service&lt;/p&gt;</description>
      <pubDate>Sat, 13 May 2006 13:06:27 -0000</pubDate>
      <guid>http://www.h3rald.com/articles/social-bookmarking-services/</guid>
      <link>http://www.h3rald.com/articles/social-bookmarking-services/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/social-bookmarking-services/#comments</comments>
      <category>web20</category>
      <category>review</category>
      <category>internet</category>
    </item>
    <item>
      <title>Rails-inspired PHP frameworks</title>
      <description>&lt;p&gt;There are various articles online examining many &lt;span class="caps"&gt;PHP&lt;/span&gt; frameworks, providing short reviews or comparative charts, but I could not find yet an article  examining the so called &lt;em&gt;&amp;#8220;Rails-inspired frameworks&amp;#8221;&lt;/em&gt; anywhere on the web, so I decided to write my own&amp;#8230;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;span class="caps"&gt;IMPORTANT&lt;/span&gt; &lt;span class="caps"&gt;UPDATE&lt;/span&gt;:&lt;/strong&gt; I do no longer recommend the CakePHP framework anymore due to the &lt;a href="http://www.h3rald.com/blog/42"&gt;unprofessionalism of some member of its development team&lt;/a&gt;. My site is now powered by Ruby on Rails and I totally lost interest in &lt;span class="caps"&gt;PHP&lt;/span&gt; and any &lt;span class="caps"&gt;PHP&lt;/span&gt; framework. If you are looking for a decent web framework, try &lt;a href="http://www.rubyonrails.org"&gt;Ruby on Rails&lt;/a&gt; (for Ruby), &lt;a href="http://www.djangoproject.com/"&gt;Django&lt;/a&gt; (for Python) or &lt;a href="http://catalyst.perl.org/"&gt;Catalyst&lt;/a&gt; (for Perl).&lt;br /&gt;
I&amp;#8217;m talking about those &lt;span class="caps"&gt;PHP&lt;/span&gt; frameworks who give at least part of their success to Ruby on Rails&lt;sup class="footnote" id="fnr2"&gt;&lt;a href="#fn2"&gt;2&lt;/a&gt;&lt;/sup&gt;, but don&amp;#8217;t call them &lt;em&gt;clones&lt;/em&gt; or &lt;em&gt;ports&lt;/em&gt; as some of their creators may get offended.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p style="float:left;"&gt;&lt;img src="/img/pictures/rails.gif" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Since Rails shocked the world with an easy-to-use, powerful and semi-sentient web development framework, web development is not the same anymore: everything must be done efficiently, quickly and you &lt;em&gt;have&lt;/em&gt; to produce a Web 2.0 compliant public beta after X days/weeks/months or your work is simply not useful to anybody. Try doing that with the traditional &lt;span class="caps"&gt;PHP&lt;/span&gt; spaghetti code: you can&amp;#8217;t, it&amp;#8217;s too much, it will be too tangled up and in the end you&amp;#8217;ll lose your mind trying to find that &lt;em&gt;small insignificant bug&lt;/em&gt; which makes your web application completely useless.&lt;/p&gt;
&lt;p&gt;Yes, you could use Rails, but maybe you don&amp;#8217;t know or don&amp;#8217;t want to learn Ruby, your host doesn&amp;#8217;t support it, your boss loves &lt;span class="caps"&gt;PHP&lt;/span&gt; etc. etc. If you&amp;#8217;re in this situation or you simply would like to know what&amp;#8217;s going on at the &lt;span class="caps"&gt;PHP&lt;/span&gt; front of the Rails Clone War, you should keep reading this article.&lt;/p&gt;
&lt;p&gt;I&amp;#8217;d like to introduce &amp;#8211; briefly &amp;#8211; six Rails-inspired &lt;span class="caps"&gt;PHP&lt;/span&gt; frameworks and compare them with each other, to point out their features, their pros and cons.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Disclaimer:&lt;/strong&gt; I&amp;#8217;m a CakePHP&lt;sup class="footnote" id="fnr3"&gt;&lt;a href="#fn3"&gt;3&lt;/a&gt;&lt;/sup&gt; fan, this site has been built with CakePHP and I even wrote something&lt;sup class="footnote" id="fnr4"&gt;&lt;a href="#fn4"&gt;4&lt;/a&gt;&lt;/sup&gt; about it in the past. This makes me inevitably partial and more familiar with this particular framework, but I&amp;#8217;ll try my very best to provide a relatively objective analysis. Obviously frameworks which are not based on the &lt;span class="caps"&gt;MVC&lt;/span&gt; architechture and that weren&amp;#8217;t inspired by Ruby on Rails have not been included, so forget things like &lt;span class="caps"&gt;PRADO&lt;/span&gt;, Qcodo, eZComponents, or even Mojavi: it&amp;#8217;s not that they are &amp;#8220;bad&amp;#8221;, they&amp;#8217;ve just been left out because they are not pertinent to this article&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;CakePHP&lt;/h3&gt;
&lt;p style="float:right;"&gt;&lt;img src="/img/pictures/CakePHP_1.0.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Website:&lt;/strong&gt; &lt;a href="http://www.cakephp.org/"&gt;www.cakephp.org&lt;/a&gt;&lt;br /&gt;
&lt;strong&gt;&lt;span class="caps"&gt;PHP&lt;/span&gt; version:&lt;/strong&gt; PHP4 and PHP5&lt;br /&gt;
&lt;strong&gt;License:&lt;/strong&gt; &lt;span class="caps"&gt;MIT&lt;/span&gt;&lt;sup class="footnote" id="fnr5"&gt;&lt;a href="#fn5"&gt;5&lt;/a&gt;&lt;/sup&gt;&lt;br /&gt;
&lt;strong&gt;Download size (.tar.gz):&lt;/strong&gt; 184KB&lt;br /&gt;
&lt;strong&gt;Supported Databases:&lt;/strong&gt; MySQL, PostgreSQL, SQlite, MS &lt;span class="caps"&gt;SQL&lt;/span&gt; + any other supported by ADOdb or &lt;span class="caps"&gt;PEAR&lt;/span&gt;::DB database abstraction layers&lt;br /&gt;
&lt;strong&gt;Beginner&amp;#8217;s Tutorial&lt;/strong&gt;: &lt;a href="http://wiki.cakephp.org/tutorials:blog_tutorial_-_1"&gt;Blog Tutorial&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Official Description:&lt;/strong&gt;&lt;br /&gt;
&lt;em&gt;&amp;#8220;Cake is a rapid development framework for &lt;span class="caps"&gt;PHP&lt;/span&gt; which uses commonly known design patterns like ActiveRecord, Association Data Mapping, Front Controller and &lt;span class="caps"&gt;MVC&lt;/span&gt;. Our primary goal is to provide a structured framework that enables &lt;span class="caps"&gt;PHP&lt;/span&gt; users at all levels to rapidly develop robust web applications, without any loss to flexibility.&amp;#8221;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PROs:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Lightweight, not bloated, containing only essential code&lt;/li&gt;
	&lt;li&gt;Runs both on PHP4 and PHP5&lt;/li&gt;
	&lt;li&gt;No configuration needed &amp;#8211; except for a stupidly short database configuration file and a few constants which &lt;em&gt;can&lt;/em&gt; be modified. You can literally start baking in less than five minutes&lt;/li&gt;
	&lt;li&gt;Extended table association support, allowing the creation of complex database architechtures&lt;/li&gt;
	&lt;li&gt;Extremely logical and functional directory structure: better than Rails, if you ask me.&lt;/li&gt;
	&lt;li&gt;Enhanced &lt;span class="caps"&gt;AJAX&lt;/span&gt; support through the &lt;span class="caps"&gt;AJAX&lt;/span&gt; and Javascript view helpers&lt;/li&gt;
	&lt;li&gt;useful &amp;#8220;bake&amp;#8221; command line script to generate parts of the  code automatically&lt;/li&gt;
	&lt;li&gt;Very active community and plenty of &lt;em&gt;satellite sites&lt;/em&gt;&lt;/li&gt;
	&lt;li&gt;Suitable for every kind of website, from the small personal site to the advanced e-business application.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;CONs:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;No &amp;#8220;official&amp;#8221; internationalization support for now, but it will be included in the next milestone.&lt;/li&gt;
	&lt;li&gt;It does not take fully advantage of PHP5 features&lt;/li&gt;
	&lt;li&gt;Official documentation still needs some some improvement, although now it seems pretty complete and exhaustive.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Comments:&lt;/strong&gt;&lt;br /&gt;
CakePHP is my personal favorite: easy to learn, easy to use,multi-purpose and not bloated. Cake&amp;#8217;s philosophy is not to include unnecessary code in the framework unless it&amp;#8217;s absolutely necessary for the framework itself, as a result, 3rd-party libraries are not included in the official releases, but may be seamlessly integrated with the framework &lt;em&gt;if developers need them&lt;/em&gt;. &lt;br /&gt;
Cake&amp;#8217;s success is partly determined &amp;#8211; at least initially &amp;#8211; by the fact that it can run fine with no limitations on PHP4, while other similar frameworks don&amp;#8217;t. Although this may still be one of its most obvious strengths, it must be said that Cake seems to go in the right direction, taking only the best from Rails, without forcing developers into complex and pointless adaptations, and evolving into a great framework created &lt;em&gt;in &lt;span class="caps"&gt;PHP&lt;/span&gt;, for &lt;span class="caps"&gt;PHP&lt;/span&gt;&lt;/em&gt;.&lt;/p&gt;
&lt;h3&gt;Symfony&lt;/h3&gt;
&lt;p style="float:right;"&gt;&lt;img src="/img/pictures/symfony.gif" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Website:&lt;/strong&gt; &lt;a href="http://www.symfony-project.com/"&gt;www.synfony.project.com&lt;/a&gt;&lt;br /&gt;
&lt;strong&gt;&lt;span class="caps"&gt;PHP&lt;/span&gt; version:&lt;/strong&gt; PHP5&lt;br /&gt;
&lt;strong&gt;License:&lt;/strong&gt; Symfony&lt;sup class="footnote" id="fnr6"&gt;&lt;a href="#fn6"&gt;6&lt;/a&gt;&lt;/sup&gt;&lt;br /&gt;
&lt;strong&gt;Download size (.tgz):&lt;/strong&gt; 1255KB&lt;br /&gt;
&lt;strong&gt;Supported Databases:&lt;/strong&gt; MySQL, PostgreSQL, SQLite, Oracle, MS &lt;span class="caps"&gt;SQL&lt;/span&gt; + any other supported by Creole database abstraction layer&lt;br /&gt;
&lt;strong&gt;Beginner&amp;#8217;s Tutorial&lt;/strong&gt;: &lt;a href="http://www.symfony-project.com/tutorial/my_first_project.html"&gt;My first project&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Official Description:&lt;/strong&gt;&lt;br /&gt;
&lt;em&gt;&amp;#8220;Based on the best practices of web development, thoroughly tried on several active websites, symfony aims to speed up the creation and maintenance of web applications, and to replace the repetitive coding tasks by power, control and pleasure. [&amp;#8230;]&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;Symfony is an object-oriented PHP5 framework based on the &lt;span class="caps"&gt;MVC&lt;/span&gt; model. Symfony allows for the separation of business rules, server logic and presentation views of a web application. It also contains numerous tools and classes aimed at shortening the development time of a complex web application.&amp;quot;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PROs:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Fully featured framework, includes everything you might ever need (see CONs, below)&lt;/li&gt;
	&lt;li&gt;Full native internationalization support&lt;/li&gt;
	&lt;li&gt;Truly excellent documentation, tutorials, wiki, book, screencasts, &lt;span class="caps"&gt;API&lt;/span&gt;, real-world examples, etc. etc.&lt;/li&gt;
	&lt;li&gt;Code generators&lt;/li&gt;
	&lt;li&gt;Various &amp;#8220;pre-built&amp;#8221; modules/libraries for the most common tasks&lt;/li&gt;
	&lt;li&gt;It was not inspired only by Rails, but borrows concepts and practices from various other frameworks&lt;/li&gt;
	&lt;li&gt;Good community support&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;CONs:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Seems too big compared to the others, too many &amp;#8220;extras&amp;#8221; which may not be useful to &lt;em&gt;all&lt;/em&gt; developers&lt;/li&gt;
	&lt;li&gt;PHP5 only&lt;/li&gt;
	&lt;li&gt;Confusing and disorganized directory structure&lt;/li&gt;
	&lt;li&gt;Uses too many configuration files, not suitable for &lt;em&gt;simple&lt;/em&gt; projects&lt;/li&gt;
	&lt;li&gt;Steep learning curve&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Comments:&lt;/strong&gt;&lt;br /&gt;
Symfony is really an interesting framework: it&amp;#8217;s perhaps the most &lt;em&gt;complete&lt;/em&gt; in terms for features and documentation. The only problem I have with it is that it just seems too complex and rather difficult to learn if compared to the others, which can do &lt;em&gt;almost&lt;/em&gt; the same things (or will soon be able to) in a &lt;em&gt;&lt;span class="caps"&gt;MUCH&lt;/span&gt;&lt;/em&gt; simpler way. A nice blend of &lt;span class="caps"&gt;MVC&lt;/span&gt;, pre-built components, command line generators and &lt;span class="caps"&gt;YAML&lt;/span&gt;/Propel configuration files, but perhaps a bit &lt;em&gt;disorganized&lt;/em&gt; in its internal structure, unlike its wonderful documentation and support section.&lt;/p&gt;
&lt;h3&gt;&lt;span class="caps"&gt;PHP&lt;/span&gt; on Trax&lt;/h3&gt;
&lt;p style="float:right;"&gt;&lt;img src="/img/pictures/phpontrax.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Website:&lt;/strong&gt; &lt;a href="http://www.phpontrax.com/"&gt;www.phpontrax.com&lt;/a&gt;&lt;br /&gt;
&lt;strong&gt;&lt;span class="caps"&gt;PHP&lt;/span&gt; version:&lt;/strong&gt; PHP5&lt;br /&gt;
&lt;strong&gt;License:&lt;/strong&gt; &lt;span class="caps"&gt;MIT&lt;/span&gt;&lt;br /&gt;
&lt;strong&gt;Download size (.tgz):&lt;/strong&gt; 843KB&lt;br /&gt;
&lt;strong&gt;Supported Databases:&lt;/strong&gt; Any database supported by &lt;span class="caps"&gt;PEAR&lt;/span&gt;::DB&lt;br /&gt;
&lt;strong&gt;Beginner&amp;#8217;s Tutorial&lt;/strong&gt;: &lt;a href="http://svn.phpontrax.com/wiki/HowToCreateATraxApplication"&gt;How to create a Trax application&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Official Description:&lt;/strong&gt;&lt;br /&gt;
&lt;em&gt;&amp;#8220;Php On Trax (formerly Php On Rails) is a web-application and persistance framework that is based on Ruby on Rails and includes everything needed to create database-backed web-applications according to the Model-View-Control pattern of separation.&amp;#8221;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PROs:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Simple, logical, essential: a true RoR port to PHP5&lt;/li&gt;
	&lt;li&gt;Code generators, like Rails&lt;/li&gt;
	&lt;li&gt;Zero configuration (like Rails and Cake&lt;/li&gt;
	&lt;li&gt;Easy and logical directory structure (the same as Rails)&lt;/li&gt;
	&lt;li&gt;Supports table associations, but more in a way which is more similar to Ruby on Rails than Cake.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;CONs:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Lack of documentation compared to the others&lt;/li&gt;
	&lt;li&gt;Trying to port Ruby on Rails to &lt;span class="caps"&gt;PHP&lt;/span&gt;, ignoring why RoR was not built in &lt;span class="caps"&gt;PHP&lt;/span&gt; in the first place&lt;sup class="footnote" id="fnr7"&gt;&lt;a href="#fn7"&gt;7&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
	&lt;li&gt;No internationalization or other advanced functionalities&lt;/li&gt;
	&lt;li&gt;PHP5 only&lt;/li&gt;
	&lt;li&gt;Small community&lt;/li&gt;
	&lt;li&gt;&lt;span class="caps"&gt;DBO&lt;/span&gt; class based only on &lt;span class="caps"&gt;PEAR&lt;/span&gt;::DB&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Comments:&lt;/strong&gt;&lt;br /&gt;
In my opinion this project aims too much to be a Rails-clone to acquire a proper consensus. Trying to port something to another language is not good, especially in the case of Rails and Ruby. This framework looks somehow like an old version of CakePHP, which evolved slightly but always remained anchored to its beliefs of building a Rails port for &lt;span class="caps"&gt;PHP&lt;/span&gt; (even in the name!). Some may say that this is a lost battle since the beginning &amp;#8211; or better, since before it started &amp;#8211; but others found that &lt;span class="caps"&gt;PHP&lt;/span&gt; on Trax can be the easiest way to switch from Ruby on Rails to a &lt;span class="caps"&gt;PHP&lt;/span&gt; equivalent. Who is going to do that? Well, Ruby programmers &lt;em&gt;forced&lt;/em&gt; to develop in &lt;span class="caps"&gt;PHP&lt;/span&gt;, maybe. Not too good, but not too bad either.&lt;/p&gt;
&lt;h3&gt;Code Igniter&lt;/h3&gt;
&lt;p style="float:right;"&gt;&lt;img src="/img/pictures/codeigniter.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Website:&lt;/strong&gt; &lt;a href="http://www.codeigniter.com/"&gt;www.codeigniter.org&lt;/a&gt;&lt;br /&gt;
&lt;strong&gt;&lt;span class="caps"&gt;PHP&lt;/span&gt; version:&lt;/strong&gt; PHP4 and PHP5&lt;br /&gt;
&lt;strong&gt;License:&lt;/strong&gt; CodeIgniter&lt;sup class="footnote" id="fnr8"&gt;&lt;a href="#fn8"&gt;8&lt;/a&gt;&lt;/sup&gt;&lt;br /&gt;
&lt;strong&gt;Download size (.zip):&lt;/strong&gt; 609KB&lt;br /&gt;
&lt;strong&gt;Supported Databases:&lt;/strong&gt; MySQL, PostgreSQL, SQLite, MySQLi, MS &lt;span class="caps"&gt;SQL&lt;/span&gt; + &lt;span class="caps"&gt;ODBC&lt;/span&gt;&lt;br /&gt;
&lt;strong&gt;Beginner&amp;#8217;s Tutorial&lt;/strong&gt;: &lt;a href="http://www.codeigniter.com/videos/ci_intro.mov"&gt;Hello World! Introduction to Code Igniter&lt;/a&gt; [video]&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Official Description:&lt;/strong&gt;&lt;br /&gt;
&lt;em&gt;&amp;#8220;Code Igniter is an Open Source Web Application Framework that makes writing kick-ass &lt;span class="caps"&gt;PHP&lt;/span&gt; programs simple as apple pie. [&amp;#8230;] Designed to enable, not overwhelm, Code Igniter is a powerful &lt;span class="caps"&gt;PHP&lt;/span&gt; framework with a very small footprint, built for &lt;span class="caps"&gt;PHP&lt;/span&gt; coders who need a simple and elegant toolkit to create full-featured web applications.&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;If you&amp;#8217;re a developer who lives in the real world of shared hosting accounts and clients with deadlines, and if you&amp;#8217;re tired of ponderously large and thoroughly undocumented frameworks that require rocket science to understand, Code Igniter might just be the right tool for you.&amp;quot;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PROs:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Good and organized documentation&lt;/li&gt;
	&lt;li&gt;Zero configuration (like Rails and Cake)&lt;/li&gt;
	&lt;li&gt;Includes various classes and libraries for common tasks&lt;/li&gt;
	&lt;li&gt;Compatible with PHP4 and PHP5&lt;/li&gt;
	&lt;li&gt;Medium-sized community&lt;/li&gt;
	&lt;li&gt;Intuitive directory structure&lt;/li&gt;
	&lt;li&gt;Ships with the full user guide included in separate &lt;span class="caps"&gt;HTML&lt;/span&gt; files&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;CONs:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;No full (&amp;#8220;written&amp;#8221;) tutorials except the videos!&lt;/li&gt;
	&lt;li&gt;Relatively new to the scene, but growing&lt;/li&gt;
	&lt;li&gt;Does not seem to support table associations.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Comments:&lt;/strong&gt;&lt;br /&gt;
People on the Net seem to be rather enthusiastic about this framework: where there&amp;#8217;s a thread about the &lt;em&gt;big ones&lt;/em&gt; (Cake and Symfony), there&amp;#8217;s always, someone who pops in suggesting to try out Code Igniter. I personally think this can be a true bless for small/medium sized projects, however, I&amp;#8217;d opt for CakePHP or Symfony for a large scale application: something is missing, e.g., most notably, table associations.&lt;/p&gt;
&lt;h3&gt;Biscuit&lt;/h3&gt;
&lt;p style="float:right;"&gt;&lt;img src="/img/pictures/biscuit.gif" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Website:&lt;/strong&gt; &lt;a href="http://biscuitproject.tigris.org/"&gt;biscuitproject.tigris.org&lt;/a&gt;&lt;br /&gt;
&lt;strong&gt;&lt;span class="caps"&gt;PHP&lt;/span&gt; version:&lt;/strong&gt; PHP4 and PHP5&lt;br /&gt;
&lt;strong&gt;License:&lt;/strong&gt; &lt;span class="caps"&gt;MIT&lt;/span&gt;&lt;sup class="footnote" id="fnr5"&gt;&lt;a href="#fn5"&gt;5&lt;/a&gt;&lt;/sup&gt;  &lt;br /&gt;
&lt;strong&gt;Download size (.zip):&lt;/strong&gt; 240KB&lt;br /&gt;
&lt;strong&gt;Supported Databases:&lt;/strong&gt; Any database supported by &lt;span class="caps"&gt;PEAR&lt;/span&gt;::DB&lt;br /&gt;
&lt;strong&gt;Beginner&amp;#8217;s Tutorial&lt;/strong&gt;: &lt;a href="http://bennolan.com/biscuit/tutorial.html"&gt;Creating a simple application using the Biscuit &lt;span class="caps"&gt;MVC&lt;/span&gt; framework&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Official Description:&lt;/strong&gt;&lt;br /&gt;
&lt;em&gt;&amp;#8220;The mission of this project is to port Ruby on Rails to PHP5 (minus the Ruby part ;-)&amp;#8221;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PROs:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Zero configuration, easy to deploy&lt;/li&gt;
	&lt;li&gt;Runs both on PHP4 and PHP5&lt;/li&gt;
	&lt;li&gt;Simple to learn&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;CONs:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Still under development and incomplete&lt;/li&gt;
	&lt;li&gt;Offers a limited subset of the features and functionalities offered by competitors: no internationalization, no table associations, no scaffolding&amp;#8230;&lt;/li&gt;
	&lt;li&gt;&lt;em&gt;&amp;#8220;Documentation coming soon&amp;#8221;&lt;/em&gt;&lt;/li&gt;
	&lt;li&gt;Almost non-existent community&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Comments:&lt;/strong&gt;&lt;br /&gt;
This project started as an attempt to create something simpler than CakePHP and more similar to Rails. I&amp;#8217;m not sure whether the project is still active or not, since the last &amp;#8220;release&amp;#8221; on the former&amp;#8217;s developer site is dated August 2005. Still in early stage &amp;#8211; or dead.&lt;/p&gt;
&lt;h3&gt;Pipeline&lt;/h3&gt;
&lt;p style="float:right;"&gt;&lt;img src="/img/pictures/livepipe.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Website:&lt;/strong&gt; &lt;a href="http://livepipe.net/pipeline/"&gt;livepipe.net/pipeline/&lt;/a&gt;&lt;br /&gt;
&lt;strong&gt;&lt;span class="caps"&gt;PHP&lt;/span&gt; version:&lt;/strong&gt; PHP5&lt;br /&gt;
&lt;strong&gt;License:&lt;/strong&gt; Pipeline&lt;sup class="footnote" id="fnr9"&gt;&lt;a href="#fn9"&gt;9&lt;/a&gt;&lt;/sup&gt;&lt;br /&gt;
&lt;strong&gt;Download size (.zip):&lt;/strong&gt; 288KB&lt;br /&gt;
&lt;strong&gt;Supported Databases:&lt;/strong&gt; SQLite&lt;br /&gt;
&lt;strong&gt;Beginner&amp;#8217;s Tutorial&lt;/strong&gt;: none&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PROs:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Simple directory structure&lt;/li&gt;
	&lt;li&gt;Suitable for small projects&lt;/li&gt;
	&lt;li&gt;Comes with various ready-made components&lt;/li&gt;
	&lt;li&gt;Supports table relationships&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;CONs:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;PHP5-only&lt;/li&gt;
	&lt;li&gt;Too restrictive: only SQLite supported, &lt;em&gt;kindly suggests&lt;/em&gt; developers to use its built-in features only&lt;/li&gt;
	&lt;li&gt;No documentation or tutorials, just the &lt;span class="caps"&gt;API&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;Not suitable for large projects&lt;/li&gt;
	&lt;li&gt;Almost non-existent community&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Comments:&lt;/strong&gt;&lt;br /&gt;
This project mainly borrowed the &lt;span class="caps"&gt;MVC&lt;/span&gt; architecture and some basic concepts from Rails, creating a simple PHP5 framework with personal/small websites in mind: it offers various built-in components which can be handy to most of us, supports &lt;em&gt;only&lt;/em&gt; SQLite, and basically tells developers what to do. In my opinion it&amp;#8217;s not flexible enough to be compared to the others, and it&amp;#8217;s simply not suitable for anything other than small websites.&lt;/p&gt;
&lt;h3&gt;Conclusions&lt;/h3&gt;
&lt;p&gt;My favorite framework still remains CakePHP, it&amp;#8217;s simple and yet powerful, easy to learn and use, mature, well supported and continuously improving. Symfony &amp;#8211; at the moment &amp;#8211; seems to be the one with most features and the best documentation, and it is an excellent and well supported project. The only problem I have with it is the scary amount of configuration files necessary to create an application: CakePHP doesn&amp;#8217;t need any and can be used for (almost?) equally complex projects.&lt;br /&gt;
Although I didn&amp;#8217;t have a chance to try them out, &lt;span class="caps"&gt;PHP&lt;/span&gt; on Trax is certainly the most faithful port of Ruby on Rails to &lt;span class="caps"&gt;PHP&lt;/span&gt;, but it lacks some of the features CakePHP and Symfony offer. Code Igniter may not be as advanced as the others, but its community seems to grow and its simplicity may appeal more users in the future&amp;#8230;&lt;/p&gt;
&lt;p&gt;At any rate, developers should &lt;em&gt;always&lt;/em&gt; choose the best framework for their needs: I tried to write a quick comparative analysis of these six Rails&amp;#8217; &amp;#8220;&lt;span class="caps"&gt;PHP&lt;/span&gt; children&amp;#8221;, now it&amp;#8217;s &lt;em&gt;your&lt;/em&gt; turn, try out some of them, if you choose wisely you won&amp;#8217;t be disappointed.&lt;/p&gt;
&lt;h3&gt;Notes&lt;/h3&gt;
&lt;p class="footnote" id="fn1"&gt;&lt;a href="#fnr1"&gt;&lt;sup&gt;1&lt;/sup&gt;&lt;/a&gt; They are all distributed according to various Open Source licenses.&lt;/p&gt;
&lt;p class="footnote" id="fn2"&gt;&lt;a href="#fnr2"&gt;&lt;sup&gt;2&lt;/sup&gt;&lt;/a&gt; &lt;a href="http://www.rubyonrails.org"&gt;Ruby on Rails&lt;/a&gt; &amp;#8211; Ruby framework for web development&lt;/p&gt;
&lt;p class="footnote" id="fn3"&gt;&lt;a href="#fnr3"&gt;&lt;sup&gt;3&lt;/sup&gt;&lt;/a&gt; &lt;a href="http://www.cakephp.org"&gt;CakePHP&lt;/a&gt; &amp;#8211; Rapid [&lt;span class="caps"&gt;PHP&lt;/span&gt;] Development Framework&lt;/p&gt;
&lt;p class="footnote" id="fn4"&gt;&lt;a href="#fnr4"&gt;&lt;sup&gt;4&lt;/sup&gt;&lt;/a&gt; &lt;a href="/articles/view/cakephp"&gt;CakePHP &amp;#8211; A &amp;#8216;tasty&amp;#8217; solution for &lt;span class="caps"&gt;PHP&lt;/span&gt; programming&lt;/a&gt;, originally published on &lt;a href="http://www.zzine.org/articles/cakephp"&gt;zZine Magazine&lt;/a&gt;&lt;/p&gt;
&lt;p class="footnote" id="fn5"&gt;&lt;a href="#fnr5"&gt;&lt;sup&gt;5&lt;/sup&gt;&lt;/a&gt; Open Source &lt;a href="http://www.opensource.org/licenses/mit-license.php"&gt;&lt;span class="caps"&gt;MIT&lt;/span&gt; License&lt;/a&gt;.&lt;/p&gt;
&lt;p class="footnote" id="fn6"&gt;&lt;a href="#fnr6"&gt;&lt;sup&gt;6&lt;/sup&gt;&lt;/a&gt; Symfony License:&lt;br /&gt;
&lt;small&gt;&lt;br /&gt;
&lt;blockquote&gt;&lt;br /&gt;
Copyright &amp;#169; 2004-2006 Fabien Potencier&lt;br /&gt;
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the &amp;#8220;Software&amp;#8221;), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:&lt;/p&gt;
&lt;p&gt;The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.&lt;/p&gt;
&lt;p&gt;&lt;span class="caps"&gt;THE&lt;/span&gt; &lt;span class="caps"&gt;SOFTWARE&lt;/span&gt; IS &lt;span class="caps"&gt;PROVIDED&lt;/span&gt; &amp;#8220;AS IS&amp;#8221;, &lt;span class="caps"&gt;WITHOUT&lt;/span&gt; &lt;span class="caps"&gt;WARRANTY&lt;/span&gt; OF &lt;span class="caps"&gt;ANY&lt;/span&gt; &lt;span class="caps"&gt;KIND&lt;/span&gt;, &lt;span class="caps"&gt;EXPRESS&lt;/span&gt; OR &lt;span class="caps"&gt;IMPLIED&lt;/span&gt;, &lt;span class="caps"&gt;INCLUDING&lt;/span&gt; &lt;span class="caps"&gt;BUT&lt;/span&gt; &lt;span class="caps"&gt;NOT&lt;/span&gt; &lt;span class="caps"&gt;LIMITED&lt;/span&gt; TO &lt;span class="caps"&gt;THE&lt;/span&gt; &lt;span class="caps"&gt;WARRANTIES&lt;/span&gt; OF &lt;span class="caps"&gt;MERCHANTABILITY&lt;/span&gt;, &lt;span class="caps"&gt;FITNESS&lt;/span&gt; &lt;span class="caps"&gt;FOR&lt;/span&gt; A &lt;span class="caps"&gt;PARTICULAR&lt;/span&gt; &lt;span class="caps"&gt;PURPOSE&lt;/span&gt; &lt;span class="caps"&gt;AND&lt;/span&gt; &lt;span class="caps"&gt;NONINFRINGEMENT&lt;/span&gt;. IN NO &lt;span class="caps"&gt;EVENT&lt;/span&gt; &lt;span class="caps"&gt;SHALL&lt;/span&gt; &lt;span class="caps"&gt;THE&lt;/span&gt; &lt;span class="caps"&gt;AUTHORS&lt;/span&gt; OR &lt;span class="caps"&gt;COPYRIGHT&lt;/span&gt; &lt;span class="caps"&gt;HOLDERS&lt;/span&gt; BE &lt;span class="caps"&gt;LIABLE&lt;/span&gt; &lt;span class="caps"&gt;FOR&lt;/span&gt; &lt;span class="caps"&gt;ANY&lt;/span&gt; &lt;span class="caps"&gt;CLAIM&lt;/span&gt;, &lt;span class="caps"&gt;DAMAGES&lt;/span&gt; OR &lt;span class="caps"&gt;OTHER&lt;/span&gt; &lt;span class="caps"&gt;LIABILITY&lt;/span&gt;, &lt;span class="caps"&gt;WHETHER&lt;/span&gt; IN AN &lt;span class="caps"&gt;ACTION&lt;/span&gt; OF &lt;span class="caps"&gt;CONTRACT&lt;/span&gt;, &lt;span class="caps"&gt;TORT&lt;/span&gt; OR &lt;span class="caps"&gt;OTHERWISE&lt;/span&gt;, &lt;span class="caps"&gt;ARISING&lt;/span&gt; &lt;span class="caps"&gt;FROM&lt;/span&gt;, &lt;span class="caps"&gt;OUT&lt;/span&gt; OF OR IN &lt;span class="caps"&gt;CONNECTION&lt;/span&gt; &lt;span class="caps"&gt;WITH&lt;/span&gt; &lt;span class="caps"&gt;THE&lt;/span&gt; &lt;span class="caps"&gt;SOFTWARE&lt;/span&gt; OR &lt;span class="caps"&gt;THE&lt;/span&gt; &lt;span class="caps"&gt;USE&lt;/span&gt; OR &lt;span class="caps"&gt;OTHER&lt;/span&gt; &lt;span class="caps"&gt;DEALINGS&lt;/span&gt; IN &lt;span class="caps"&gt;THE&lt;/span&gt; &lt;span class="caps"&gt;SOFTWARE&lt;/span&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;/small&gt;&lt;/p&gt;
&lt;p class="footnote" id="fn7"&gt;&lt;a href="#fnr7"&gt;&lt;sup&gt;7&lt;/sup&gt;&lt;/a&gt; Read the comments by David Heinemeier Hansson on &lt;a href="http://www.37signals.com/svn/archives/000606.php"&gt;Ruby on Rails to Basecamp&lt;/a&gt;&lt;/p&gt;
&lt;p class="footnote" id="fn8"&gt;&lt;a href="#fnr8"&gt;&lt;sup&gt;8&lt;/sup&gt;&lt;/a&gt; CodeIgniter &lt;a href="http://www.codeigniter.com/user_guide/license.html"&gt;License Agreement&lt;/a&gt;&lt;/p&gt;
&lt;p class="footnote" id="fn9"&gt;&lt;a href="#fnr9"&gt;&lt;sup&gt;9&lt;/sup&gt;&lt;/a&gt; Pipeline is licensed under the same terms as the Symfony framework [Copyright &amp;#169; 2006 Picora Pipeworks &lt;span class="caps"&gt;LLC&lt;/span&gt;].&lt;/p&gt;</description>
      <pubDate>Wed, 03 May 2006 12:57:00 -0000</pubDate>
      <guid>http://www.h3rald.com/articles/rails-inspired-php-frameworks/</guid>
      <link>http://www.h3rald.com/articles/rails-inspired-php-frameworks/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/rails-inspired-php-frameworks/#comments</comments>
      <category>frameworks</category>
      <category>review</category>
      <category>cakephp</category>
      <category>rails</category>
    </item>
    <item>
      <title>Birthday present? Web space, please...</title>
      <description>&lt;p&gt;Today is my birthday! &lt;a href="http://base--/blog/view/20/"&gt;Not too happy&lt;/a&gt;, 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&amp;#8230; &lt;em&gt;&amp;#8220;What? Didn&amp;#8217;t you have the hosting sorted out?&amp;#8221;&lt;/em&gt;&lt;br /&gt;
Well, I had, up to a few days ago when my friends and hosting provider, DeWayne Lehman, decided to close down his &lt;a href="http://www.block-house.com"&gt;company&lt;/a&gt;. The reason being, to cut a long story short, that he can&amp;#8217;t keep up with competition: he doesn&amp;#8217;t have enough customers, and he can&amp;#8217;t afford server upgrades, while other companies are literally giving space away.&lt;br /&gt;
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.&lt;/p&gt;
&lt;p&gt;Anyhow, in the end I&amp;#8217;ll have to transfer all five of my sites to a new host, so here we go again: &lt;em&gt;what&amp;#8217;s the best hosting company?&lt;/em&gt;&lt;br /&gt;
Obviously it depends a lot on what you&amp;#8217;re looking for, and here&amp;#8217;s what I need:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;At least 4GB of space&lt;/li&gt;
	&lt;li&gt;At least 30GB/month bandwidth&lt;/li&gt;
	&lt;li&gt;&lt;span class="caps"&gt;PHP&lt;/span&gt; of course, but also other languages like Perl, Python and Ruby (+ Rails support)&lt;/li&gt;
	&lt;li&gt;MySQL databases&amp;#8230; at least 10-20&lt;/li&gt;
	&lt;li&gt;Be able to host 5-6 sites minimum&lt;/li&gt;
	&lt;li&gt;Subdomains allowed (10 in total?)&lt;/li&gt;
	&lt;li&gt;&lt;span class="caps"&gt;FTP&lt;/span&gt; &lt;em&gt;and &lt;span class="caps"&gt;SSH&lt;/span&gt;&lt;/em&gt; access&lt;/li&gt;
	&lt;li&gt;Subversion, if possible&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All this for less than 10$/month, ideally 5$, on shared hosting. I already made my choice and if you&amp;#8217;re reading this post it means everything worked fine, but anyway, let&amp;#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.&lt;/p&gt;
&lt;p style="float:left;"&gt;&lt;img src="http://base--/img/pictures/dreamhost.gif" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;The first hosting company I was tempted by was &lt;a href="http://www.dreamhost.com"&gt;DreamHost&lt;/a&gt;. They can literally sell you anything but their mother, at stupidly cheap rates for what you get (apparently):&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;20GB of space&lt;/li&gt;
	&lt;li&gt;1TB (!) bandwidth&lt;/li&gt;
	&lt;li&gt;PHP4, PHP5 Perl, Python and Ruby + RoR support&lt;/li&gt;
	&lt;li&gt;Unlimited databases&lt;/li&gt;
	&lt;li&gt;Unlimited hosted domains&lt;/li&gt;
	&lt;li&gt;Unlimited hosted subdomains&lt;/li&gt;
	&lt;li&gt;&lt;span class="caps"&gt;FTP&lt;/span&gt; and &lt;span class="caps"&gt;SSH&lt;/span&gt; access&lt;/li&gt;
	&lt;li&gt;Subversion and &lt;span class="caps"&gt;CVS&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;&amp;#8230;and more&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;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&amp;#8217;s coupons available on the net. OK, where&amp;#8217;s the catch? Well, there&amp;#8217;s a &lt;a href="http://futurosity.com/231/why-dreamhost-sucks"&gt;bad review&lt;/a&gt; about them which points out that their reliability is not too great, for example, and that the seem to be rather dodgy in general. &amp;#8220;They are overselling, they&amp;#8217;ll soon enforce &lt;span class="caps"&gt;CPU&lt;/span&gt; restrictions&amp;#8221; etc. etc. &lt;br /&gt;
&lt;em&gt;&amp;#8230;let&amp;#8217;s move along&lt;/em&gt;&lt;/p&gt;
&lt;p style="float:right;"&gt;&lt;img src="http://base--/img/pictures/rails.gif" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;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 &lt;a href="http://www.railsplayground.org"&gt;RailsPlayground&lt;/a&gt;, which started off as &lt;span class="caps"&gt;FREE&lt;/span&gt; Rails host and then ended up offering interesting commercial hosting plans. They are not bad, and I&amp;#8217;d have probably gone with them if I had only one site to manage: for 60$ a year you get:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;3GB of space&lt;/li&gt;
	&lt;li&gt;30GB bandwidth&lt;/li&gt;
	&lt;li&gt;PHP4, PHP5 Perl, Python and Ruby + RoR support&lt;/li&gt;
	&lt;li&gt;Unlimited databases&lt;/li&gt;
	&lt;li&gt;Unlimited add-on domains&lt;/li&gt;
	&lt;li&gt;Unlimited hosted subdomains&lt;/li&gt;
	&lt;li&gt;&lt;span class="caps"&gt;FTP&lt;/span&gt; and &lt;span class="caps"&gt;SSH&lt;/span&gt; access&lt;/li&gt;
	&lt;li&gt;Subversion and &lt;span class="caps"&gt;CVS&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;&amp;#8230;and more&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Well, the only reason why I didn&amp;#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.&lt;/p&gt;
&lt;p style="float:left;"&gt;&lt;img src="http://base--/img/pictures/textdrive.gif" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Since we&amp;#8217;re talking about Rails, why not &lt;a href="http://www.textdrive.com"&gt;Textdrive&lt;/a&gt;? Founded by 200 IT professional, hosts high quality sites, it&amp;#8217;s the official Rails host&amp;#8230; An &amp;#8220;elite&amp;#8221; solution, here&amp;#8217;s what you get:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Use Apache and Lighttpd web servers side-by-side&lt;/li&gt;
	&lt;li&gt;Host PHP4 and PHP5 web pages and applications&lt;/li&gt;
	&lt;li&gt;Host a weblog using Textpattern, Wordpress, MovableType, Typo, etc&lt;/li&gt;
	&lt;li&gt;Host Ruby and Ruby on Rails applications (including &lt;span class="caps"&gt;FCGI&lt;/span&gt; and hundreds of gems)&lt;/li&gt;
	&lt;li&gt;Host Perl applications (including 100&amp;#8217;s of Perl modules)&lt;/li&gt;
	&lt;li&gt;Host Python applications like Django&lt;/li&gt;
	&lt;li&gt;Manage your code base with version control (Subversion, &lt;span class="caps"&gt;SVK&lt;/span&gt;, Darcs, Monotone &amp;amp; Arch)&lt;/li&gt;
	&lt;li&gt;Share iCal files over WebDAV&lt;/li&gt;
	&lt;li&gt;Mount a WebDAV drive on your desktop (like iDisk)&lt;/li&gt;
	&lt;li&gt;Easily create free subdomains with wildcard &lt;span class="caps"&gt;DNS&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;Store your Basecamp file uploads over &lt;span class="caps"&gt;SFTP&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;Access your account via &lt;span class="caps"&gt;SFTP&lt;/span&gt; and &lt;span class="caps"&gt;SSH&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;Add domains, unlimited &lt;span class="caps"&gt;IMAP&lt;/span&gt; and &lt;span class="caps"&gt;POP&lt;/span&gt; mail boxes and mail aliases through a control panel&lt;/li&gt;
	&lt;li&gt;Check your email through Webmail&lt;/li&gt;
	&lt;li&gt;Host Mailman mailing lists complete with archives&lt;/li&gt;
	&lt;li&gt;Use MySQL (default), PostgreSQL, SQLite and Berkeley databases&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Plans start at 12$/month for 1GB of space and one website&amp;#8230; The 3GB one is 40$/month, for 20 sites in total. Too bad it&amp;#8217;s too expensive for me as they are truly the top for shared hosting &amp;#8211; I think.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.hostgator.com/"&gt;Host Gator&lt;/a&gt;, which seems to be one of the most frequently recommended at SitePoint.com forums, is not bad either. They have a &amp;#8220;hatchling&amp;#8221; plan for 3,5GB at 6.95, which wasn&amp;#8217;t bad, but it only allows one domain to be hosted. The &amp;#8220;Baby&amp;#8221; plan allows unlimited domains and is 9.95$/month, which is kinda dear. You get:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;5GB of space&lt;/li&gt;
	&lt;li&gt;75GB bandwidth&lt;/li&gt;
	&lt;li&gt;PHP4, PHP5 Perl and Python&lt;/li&gt;
	&lt;li&gt;Unlimited databases&lt;/li&gt;
	&lt;li&gt;Unlimited add-on domains&lt;/li&gt;
	&lt;li&gt;Unlimited hosted subdomains&lt;/li&gt;
	&lt;li&gt;&lt;span class="caps"&gt;FTP&lt;/span&gt; access&lt;/li&gt;
	&lt;li&gt;&amp;#8230;and more&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;No &lt;span class="caps"&gt;SSH&lt;/span&gt;, no &lt;span class="caps"&gt;SVN&lt;/span&gt; and no Rails: out.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.site5.com/"&gt;Site5&lt;/a&gt; is also one of SitePoint&amp;#8217;s favourite, but still has limitations on the number of sites. I would have got the SuperHosting &lt;span class="caps"&gt;XTREME&lt;/span&gt;, for 7,77$/month:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;11GB of space&lt;/li&gt;
	&lt;li&gt;400GB bandwidth&lt;/li&gt;
	&lt;li&gt;PHP4, PHP5 Perl, Python, Ruby + RoR support&lt;/li&gt;
	&lt;li&gt;Unlimited databases&lt;/li&gt;
	&lt;li&gt;5 domains hosted&lt;/li&gt;
	&lt;li&gt;Unlimited hosted subdomains&lt;/li&gt;
	&lt;li&gt;&lt;span class="caps"&gt;FTP&lt;/span&gt; and &lt;span class="caps"&gt;SSH&lt;/span&gt; access&lt;/li&gt;
	&lt;li&gt;&amp;#8230;and more&lt;/li&gt;
&lt;/ul&gt;
Not bad, a little bit too much for only 5 sites&amp;#8230; I needed 6, too bad :/
&lt;div style="float:right; padding:3px;"&gt;&lt;script src="http://www.bluehost.com/src/js/h3rald/CODE2/488x160/1.jpg"&gt;&lt;/script&gt; &lt;/div&gt; &lt;p&gt;This site is currently hosted on &lt;a href="http://www.bluehost.com"&gt;BlueHost&lt;/a&gt;, a hosting company established in 1996, which seems to be reliable enough (not many complaints on the net) and seems serious enough. They don&amp;#8217;t offer subversion and WebDAV for &amp;#8220;security reasons&amp;#8221; and in order to get a shell account you have to send them a copy of an ID card. Annoying? Well, perhaps for some: this made me understand that they don&amp;#8217;t allow just anybody to get &lt;span class="caps"&gt;SSH&lt;/span&gt; access unconditionally, and I didn&amp;#8217;t mind. I sent them a scansion of my ID card and I got a friendly support email after a few minutes, confirming that it was activated. Here&amp;#8217;s what I got:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;15GB of space&lt;/li&gt;
	&lt;li&gt;400GB bandwidth&lt;/li&gt;
	&lt;li&gt;PHP4, PHP5 Perl, Python, Ruby + RoR support&lt;/li&gt;
	&lt;li&gt;20 MySQL databases + 10 PostgreSQL databases&lt;/li&gt;
	&lt;li&gt;6 domains hosted in one account (easier for me!)&lt;/li&gt;
	&lt;li&gt;20 subdomains + 20 parked domains&lt;/li&gt;
	&lt;li&gt;&lt;span class="caps"&gt;FTP&lt;/span&gt; and &lt;span class="caps"&gt;SSH&lt;/span&gt; access&lt;/li&gt;
	&lt;li&gt;&amp;#8230;and more&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;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&amp;#8230; let&amp;#8217;s hope for the best, so far, so good.&lt;/p&gt;</description>
      <pubDate>Thu, 27 Apr 2006 12:47:00 -0000</pubDate>
      <guid>http://www.h3rald.com/articles/21/</guid>
      <link>http://www.h3rald.com/articles/21/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/21/#comments</comments>
      <category>website</category>
      <category>review</category>
    </item>
    <item>
      <title>Ma.gnolia - Social bookmarking made (extremely) easy</title>
      <description>Social Bookmarking[1] is not something &lt;em&gt;new&lt;/em&gt; 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 &lt;em&gt;many, many more&lt;/em&gt; web pages created everyday by literally &lt;em&gt;anyone&lt;/em&gt;, from web developers to total newcomers to the Web, to amateurs who just want to share their content because it's 'cool'.&lt;br /&gt;
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?&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
I remember when I first read about social bookmarking: people were screaming here and there that you &lt;em&gt;had to&lt;/em&gt; 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 &lt;em&gt;better&lt;/em&gt;, because it also meant &lt;em&gt;free&lt;/em&gt;...then the shadows[5] came...&lt;br /&gt;
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 &lt;em&gt;Rails&lt;/em&gt;[7]: a new social bookmarking service, simple to use and free: ma.gnolia[8].&lt;br /&gt;
I immediately felt the impulse to reply (as this happened on IRC[9])&lt;em&gt;"i.dont.give.a.sh.**"&lt;/em&gt;.  I really didn't want to try &lt;em&gt;yet another&lt;/em&gt; 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.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;A website which &lt;em&gt;smells good&lt;/em&gt;&lt;/strong&gt;&lt;br /&gt;
One of the things any Web 2.0 business cannot afford to overlook is the design and user interface of their product. It &lt;em&gt;does&lt;/em&gt; 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.&lt;br /&gt;
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: &lt;em&gt;code is poetry&lt;/em&gt;. 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.&lt;br /&gt;
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?&lt;br /&gt;
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: &lt;em&gt;De gustibus non est disputandum&lt;/em&gt; (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.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Quick features overview&lt;/strong&gt;	&lt;br /&gt;
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 &lt;em&gt;and&lt;/em&gt; not require registration. Makes perfect sense.&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;&lt;u&gt;Adding bookmarks&lt;/u&gt;&lt;/em&gt;&lt;br /&gt;
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 &lt;em&gt;favorites&lt;/em&gt; 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.&lt;br /&gt;
 &lt;br /&gt;
'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]:&lt;br /&gt;
&lt;br /&gt;
&lt;fieldset&gt;&lt;blockquote&gt;&lt;br /&gt;
&lt;em&gt;[...] 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. &lt;/em&gt;&lt;br /&gt;
&lt;/blockquote&gt;&lt;/fieldset&gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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 &lt;img src="http://ma.gnolia.com/images/icons/privacy-on.gif" alt="" /&gt; or &lt;img src="http://ma.gnolia.com/images/icons/privacy-off.gif" alt="" /&gt;, whenever you like: the magic of Ajax[14] will do the rest. &lt;br /&gt;
You can also rate your bookmarks from one to five stars, but &lt;em&gt;only&lt;/em&gt; yours: ma.gnolia is not a pointless competition to be the one who links the most and best websites.&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;What if I want to delete a bookmark?&lt;/em&gt; Quick hint: &lt;img src="http://ma.gnolia.com/images/icons/delete.gif" alt="" /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;&lt;u&gt;Yes, you can tag as much as you like&lt;/u&gt;&lt;/em&gt;&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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 &lt;em&gt;bookmarklet&lt;/em&gt; 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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;&lt;u&gt;Connecting people&lt;/u&gt;&lt;/em&gt;&lt;br /&gt;
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.&lt;br /&gt;
Furthermore, Ma.gnolia allows &lt;em&gt;groups&lt;/em&gt;: 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 (&lt;img src="http://ma.gnolia.com/images/icons/send-to-group.gif" alt="" /&gt;), or at least that's that ideal; if you just want to send a particular address to only one person you can do so (&lt;img src="http://ma.gnolia.com/images/icons/send-to-contact.gif" alt="" /&gt;), 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. &lt;br /&gt;
You'll notice a &lt;em&gt;Messages&lt;/em&gt; 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 &lt;em&gt;cannot&lt;/em&gt; 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.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;&lt;u&gt;Pages, stats and search&lt;/u&gt;&lt;/em&gt;&lt;br /&gt;
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!&lt;br /&gt;
Two things need to be said - and yes, they might be obvious for some people:&lt;br /&gt;
1) Pages which require some sort of authentication cannot be saved; and&lt;br /&gt;
2) Saved copies cannot be viewed by people other than yourself.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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:&lt;br /&gt;
&lt;fieldset&gt;&lt;blockquote&gt;[...]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.&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;/blockquote&gt;&lt;/fieldset&gt;&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
ASP.NET AJAX framework comparison [18]&lt;br /&gt;
&lt;br /&gt;
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 &lt;em&gt;must&lt;/em&gt; happen: if someone saved &lt;a href="www.zzine.org"&gt;www.zzine.org&lt;/a&gt; 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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;&lt;u&gt;Tools to play with&lt;/u&gt;&lt;/em&gt;&lt;br /&gt;
There's a whole section of the site devoted to &lt;em&gt;Support and Tools&lt;/em&gt;, 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: &lt;em&gt;geeks stay out of this section&lt;/em&gt; - it will save pointless rants.&lt;br /&gt;
The upside of this is that if I send someone who has &lt;em&gt;never&lt;/em&gt; 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.&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
- a del.icio.us importer&lt;br /&gt;
- del.icio.us to ma.gnolia GreaseMonkey script - to keep your del.icio.us and ma.gnolia synchronized&lt;br /&gt;
- a link roll generator, to share your bookmarks on your blog or page&lt;br /&gt;
- a universal bookmark exporter&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Conclusions&lt;/strong&gt;&lt;br /&gt;
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...&lt;br /&gt;
&lt;br /&gt;
...or perhaps the website is just so easy to use and nice to navigate that makes it harder to browse away!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Notes&lt;/strong&gt; &lt;br /&gt;
[1]Social Bookmarking, Wkipedia: &lt;a href="http://en.wikipedia.org/wiki/Social_bookmarking"&gt;http://en.wikipedia.org/wiki/Social_bookmarking&lt;/a&gt;&lt;br /&gt;
[2]Web 2.0, Wikipedia: &lt;a href="http://en.wikipedia.org/wiki/Web_2.0"&gt;http://en.wikipedia.org/wiki/Web_2.0&lt;/a&gt;&lt;br /&gt;
[3]del.icio.us Social bookmarking: &lt;a href="http://del.icio.us"&gt;http://del.icio.us&lt;/a&gt;&lt;br /&gt;
[4]de.lirio.us Social bookmarking: &lt;a href="http://de.lirio.us"&gt;http://de.lirio.us&lt;/a&gt;&lt;br /&gt;
[5]Shadows Social Bookmarking: &lt;a href="http://www.shadows.com"&gt;http://www.shadows.com&lt;/a&gt;&lt;br /&gt;
[6]CyberArmy Community: &lt;a href="http://www.cyberarmy.net"&gt;http://www.cyberarmy.net&lt;/a&gt;&lt;br /&gt;
[7]Ruby on Rails framework: &lt;a href="http://www.rubyonrails.org"&gt;http://www.rubyonrails.org&lt;/a&gt;&lt;br /&gt;
[8]Ma.gnolia Social Bookmarking: &lt;a href="http://ma.gnolia.com"&gt;http://ma.gnolia.com&lt;/a&gt;&lt;br /&gt;
[9]Internet Relay Chat, wikipedia: &lt;a href="http://en.wikipedia.org/wiki/Internet_Relay_Chat"&gt;http://en.wikipedia.org/wiki/Internet_Relay_Chat&lt;/a&gt;&lt;br /&gt;
[11]Windows XP Official Page: &lt;a href="http://www.microsoft.com/windowsxp/default.mspx"&gt;http://www.microsoft.com/windowsxp/default.mspx&lt;/a&gt;&lt;br /&gt;
[12]CSSZenGarden: &lt;a href="http://www.csszengarden.com/"&gt;http://www.csszengarden.com/&lt;/a&gt;&lt;br /&gt;
[13]Darren Barefoot's Blog, Sugar Ma.gnolia, Blossoms Blooming:&lt;br /&gt;
 &lt;a href="http://www.darrenbarefoot.com/archives/2006/02/sugar-magnolia-blossoms-blooming.html"&gt;http://www.darrenbarefoot.com/archives/2006/02/sugar-magnolia-blossoms-blooming.html&lt;/a&gt;&lt;br /&gt;
[14]Ajax, Wikipedia: &lt;a href="http://en.wikipedia.org/wiki/Ajax_%28programming%29"&gt;http://en.wikipedia.org/wiki/Ajax_%28programming%29&lt;/a&gt;&lt;br /&gt;
[15]Google Mail: &lt;a href="http://mail.google.com/"&gt;http://mail.google.com/&lt;/a&gt;&lt;br /&gt;
[16]Archive.org: &lt;a href="http://www.archive.org/"&gt;http://www.archive.org/&lt;/a&gt;&lt;br /&gt;
[17]Ma.gnolia - About: &lt;a href="http://ma.gnolia.com/about"&gt;http://ma.gnolia.com/about&lt;/a&gt;&lt;br /&gt;
[18] Daniel Zeiss, "ASP.NET AJAX framework comparison":  &lt;a href="http://www.daniel-zeiss.de/AJAXComparison/Results.htm"&gt;http://www.daniel-zeiss.de/AJAXComparison/Results.htm&lt;/a&gt;&lt;br /&gt;
[19]Ma.gnolia - Bookmarkles directory: &lt;a href="http://ma.gnolia.com/support/bookmarklets"&gt;http://ma.gnolia.com/support/bookmarklets&lt;/a&gt;</description>
      <pubDate>Sat, 04 Mar 2006 12:53:33 -0000</pubDate>
      <guid>http://www.h3rald.com/articles/ma/</guid>
      <link>http://www.h3rald.com/articles/ma/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/ma/#comments</comments>
      <category>internet</category>
      <category>review</category>
      <category>web20</category>
    </item>
    <item>
      <title>SQLyog 5 - a fast and reliable MySQL front-end</title>
      <description>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...&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;Alright, which one is the best?&lt;/em&gt;&lt;br /&gt;
&lt;br /&gt;
There are many different criteria available to choose a winner among these three products. The easiest for me was simply: "which one is free?"&lt;br /&gt;
&lt;br /&gt;
- 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.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;First impressions&lt;/strong&gt;&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Main Features&lt;/strong&gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;So when I click on a database or a table the corresponding structure is displayed, right?&lt;/em&gt;&lt;br /&gt;
&lt;br /&gt;
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 &lt;em&gt;Result&lt;/em&gt; column by default, so if you want to display the database or table structure you need to click on the &lt;em&gt;Objects&lt;/em&gt; table, and voil&#239;&#191;&#189; , the structure appears. Fortunately this behaviour can be changed by  modifying the program's options, through the Tools menu.&lt;br /&gt;
 &lt;br /&gt;
Clicking on &lt;em&gt;Table data&lt;/em&gt; will display the first 50 records of the selected table, while the &lt;em&gt;Result&lt;/em&gt; and &lt;em&gt;Messages&lt;/em&gt; 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.&lt;br /&gt;
&lt;br /&gt;
The most interesting feature from an educational point of view, so far, is actually the &lt;em&gt;History&lt;/em&gt; tab, which is just one click away and shows the following:&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
/*[11:11:11 AM][   0 ms]*/ show variables like '%character%'&lt;br /&gt;
/*[11:11:11 AM][   0 ms]*/ Set character_set_connection=latin1&lt;br /&gt;
/*[11:11:11 AM][   0 ms]*/ Set character_set_results=latin1&lt;br /&gt;
/*[11:11:11 AM][   0 ms]*/ Set character_set_client=latin1&lt;br /&gt;
/*[11:11:11 AM][   0 ms]*/ set sql_mode=''&lt;br /&gt;
/*[11:11:11 AM][  15 ms]*/ show databases&lt;br /&gt;
/*[11:11:22 AM][   0 ms]*/ use `zzine_drupal`&lt;br /&gt;
/*[11:11:23 AM][ 203 ms]*/ select `TABLE_NAME` from `INFORMATION_SCHEMA`.`TABLES` &lt;br /&gt;
                           where `TABLE_SCHEMA` = 'zzine_drupal' and `TABLE_TYPE` = 'BASE TABLE'&lt;br /&gt;
/*[11:11:32 AM][  47 ms]*/ show full fields from `zzine_drupal`.`node`&lt;br /&gt;
/*[11:11:32 AM][ 140 ms]*/ show keys from `zzine_drupal`.`node`&lt;br /&gt;
/*[11:11:32 AM][   0 ms]*/ select * from `zzine_drupal`.`node` limit 0, 50&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
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 &lt;em&gt;node&lt;/em&gt; 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.&lt;br /&gt;
&lt;br /&gt;
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]: &lt;em&gt;"[it] uses native MySQL C API - the fastest way to communicate with MySQL server"&lt;/em&gt; - and they do mean it.&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;What else does SQLYog offer?&lt;/em&gt;&lt;br /&gt;
&lt;br /&gt;
 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.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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!&lt;br /&gt;
&lt;br /&gt;
Let's examine each dropdown menu and the functions listed in them.&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;&lt;u&gt;File&lt;/u&gt;&lt;/em&gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;&lt;u&gt;Edit&lt;/u&gt;&lt;/em&gt;&lt;br /&gt;
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 &lt;em&gt;Find &amp;lt;something&amp;gt; in &amp;lt;somewhere&amp;gt;&lt;/em&gt; 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.&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;&lt;u&gt;DB&lt;/u&gt;&lt;/em&gt;&lt;br /&gt;
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 &lt;em&gt;table&lt;/em&gt; 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...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;&lt;u&gt;Tables&lt;/u&gt;&lt;/em&gt;&lt;br /&gt;
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) &lt;em&gt;trigger&lt;/em&gt; named &lt;em&gt;test[i] on the [i]node&lt;/em&gt; table of the aforementioned zzine_drupal database.  For this, SQLyog prepares the following query template: &lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
DELIMITER $$;&lt;br /&gt;
&lt;br /&gt;
DROP TRIGGER `zzine_drupal`.`test`$$&lt;br /&gt;
&lt;br /&gt;
CREATE TRIGGER `zzine_drupal`.`test` BEFORE/AFTER INSERT/UPDATE/DELETE on `zzine_drupal`.`node`&lt;br /&gt;
FOR EACH ROW BEGIN&lt;br /&gt;
&lt;br /&gt;
END$$&lt;br /&gt;
&lt;br /&gt;
DELIMITER ;$$&lt;br /&gt;
&lt;/code&gt; &lt;br /&gt;
&lt;br /&gt;
...just remember to modify it according to your needs!&lt;br /&gt;
Do you like SQLyog's query templates? Check out Edit-&amp;gt;Insert Templates and there's almost everything for every taste.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;&lt;u&gt;Objects&lt;/u&gt;&lt;/em&gt;&lt;br /&gt;
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 &lt;em&gt;Drop Column&lt;/em&gt; action, which is only available under this menu.&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;&lt;u&gt;Tools&lt;/u&gt;&lt;/em&gt;&lt;br /&gt;
This menu also lists two actions which we already saw under the &lt;em&gt;DB&lt;/em&gt; menu, which is exporting or importing a database.  however, there is also an &lt;em&gt;Export resultset&lt;/em&gt; wizard, as well as a very handy user management tool, information about the current database, and the program preferences.&lt;br /&gt;
&lt;br /&gt;
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".&lt;br /&gt;
&lt;br /&gt;
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!&lt;br /&gt;
&lt;br /&gt;
What's in the &lt;em&gt;Professional&lt;/em&gt; and in the &lt;em&gt;Enterprise&lt;/em&gt; edition then? Nothing much, and &lt;em&gt;Power tools&lt;/em&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;"Power Tools"&lt;/strong&gt;&lt;br /&gt;
When I wrote &lt;em&gt;nothing much&lt;/em&gt; 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...&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;&lt;u&gt;Tunneling&lt;/u&gt;&lt;/em&gt;&lt;br /&gt;
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 &lt;em&gt;tunnelling&lt;/em&gt;. 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. &amp;lt;user&amp;gt;@% instead of &amp;lt;user&amp;gt;@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.&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;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!&lt;/em&gt;&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
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: &lt;em&gt;stick with PHPMyAdmin&lt;/em&gt;. 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.&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;&lt;u&gt;Database Synchronization and Migration&lt;/u&gt;&lt;/em&gt;&lt;br /&gt;
A common and useful feature you should expect from a MySQL front-end is a synchronization utility, and SQLyog has one: by clicking on &lt;em&gt;Database Synchronization&lt;/em&gt; 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 &lt;em&gt;structure synchronization&lt;/em&gt;, 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.&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;&lt;u&gt;Periodic Tasks and Management&lt;/u&gt;&lt;/em&gt;  &lt;br /&gt;
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 &lt;em&gt;Notification Services&lt;/em&gt; 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 &lt;em&gt;Scheduled Backups&lt;/em&gt; 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 &lt;em&gt;job manager&lt;/em&gt; located in the &lt;em&gt;Powertools&lt;/em&gt; menu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Final Judgement&lt;/strong&gt;&lt;br /&gt;
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 &lt;em&gt;without&lt;/em&gt; the icons and without repeating the same function anywhere.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
SQLyog is just a few clicks away[11], only 7 Megabytes, and ready to install! &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Notes&lt;/strong&gt;&lt;br /&gt;
[small][1]MySQL - Official Site: &lt;a href="http://www.mysql.com/"&gt;http://www.mysql.com/&lt;/a&gt; &lt;br /&gt;
[2]PHPMyAdmin - Official Site: &lt;a href="http://www.phpmyadmin.net/home_page/index.php"&gt;http://www.phpmyadmin.net/home_page/index.php&lt;/a&gt;&lt;br /&gt;
[3]MySQL-Front: &lt;a href="http://www.mysqlfront.de/"&gt;http://www.mysqlfront.de/&lt;/a&gt;&lt;br /&gt;
[4]Navicat MySQL: &lt;a href="http://www.navicat.com/"&gt;http://www.navicat.com/&lt;/a&gt;&lt;br /&gt;
[5]Webyog Website: &lt;a href="http://www.webyog.com/"&gt;http://www.webyog.com/&lt;/a&gt;&lt;br /&gt;
[6]SQLyog, feature page: &lt;a href="http://www.webyog.com/sqlyog/index.php "&gt;http://www.webyog.com/sqlyog/index.php &lt;/a&gt;&lt;br /&gt;
[7]SQLyog, features matrix: &lt;a href="http://www.webyog.com/sqlyog/featurematrix.html"&gt;http://www.webyog.com/sqlyog/featurematrix.html&lt;/a&gt;&lt;br /&gt;
[8] Peter Laursen &amp;amp; Quy Ton,  "Using SQLyog Enterprise to Effectively Synchronize MySQL Databases" (PDF):&lt;br /&gt;
&lt;a href="http://www.webyog.com/articles/Using_SQLyog_Enterprise_to_Effectively_Synchronize_MySQL_Databases.pdf"&gt;http://www.webyog.com/articles/Using_SQLyog_Enterprise_to_Effectively_Synchronize_MySQL_Databases.pdf&lt;/a&gt;&lt;br /&gt;
[9] Peter Laursen, "Migration to MySQL with SQLyog ver 4.1" : &lt;a href="http://www.databasejournal.com/features/mysql/article.php/10897_3550146"&gt;http://www.databasejournal.com/features/mysql/article.php/10897_3550146&lt;/a&gt;&lt;br /&gt;
[10]Webyog, "How to use Scheduled Backups with SQLyog": &lt;a href="http://www.webyog.com/articles/how_to_use_scheduled_backup.html"&gt;http://www.webyog.com/articles/how_to_use_scheduled_backup.html&lt;/a&gt;&lt;br /&gt;
[/small]</description>
      <pubDate>Tue, 28 Feb 2006 12:50:00 -0000</pubDate>
      <guid>http://www.h3rald.com/articles/sqlyog5-review/</guid>
      <link>http://www.h3rald.com/articles/sqlyog5-review/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/sqlyog5-review/#comments</comments>
      <category>databases</category>
      <category>review</category>
    </item>
    <item>
      <title>Slax - A small, complete and 'nice-looking' Linux live distribution</title>
      <description>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 &lt;em&gt;live CDs&lt;/em&gt; before installing &lt;em&gt;the real deal&lt;/em&gt; 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...&lt;br /&gt;
&lt;br /&gt;
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 &lt;em&gt;ram disk &lt;/em&gt; 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.&lt;br /&gt;
&lt;br /&gt;
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 &lt;em&gt;live&lt;/em&gt; counterpart, mostly to allow new users to preview their product.&lt;br /&gt;
&lt;br /&gt;
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 &lt;em&gt;squeezed&lt;/em&gt; 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 &lt;em&gt;best&lt;/em&gt; (arguably) multi-purpose linux Live distribution ever made.&lt;br /&gt;
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 &lt;em&gt;customized&lt;/em&gt; distros followed[6]...&lt;br /&gt;
&lt;br /&gt;
This is another story, I'd like focus my attention on perhaps the most valid Knoppix-alternative out there: Slax[7].&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Size vs. Features&lt;/strong&gt;&lt;br /&gt;
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. &lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
I decided that I wanted something more than that, also because I was planning to burn the live-linux distro on a &lt;em&gt;brand new&lt;/em&gt; (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].&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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 &lt;em&gt;stable&lt;/em&gt; packages, Slax does quite the opposite, including more recent applications and solutions. &lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Overview&lt;/strong&gt;&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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 &lt;em&gt;personal challenge&lt;/em&gt; of using &lt;em&gt;only&lt;/em&gt; 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.&lt;br /&gt;
&lt;br /&gt;
Slax is also &lt;em&gt;very&lt;/em&gt; fast: normally some other live CDs compress &lt;em&gt;the whole&lt;/em&gt; 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 &lt;em&gt;separately&lt;/em&gt; 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 &lt;em&gt;just&lt;/em&gt; the KWord module on the disk, without touching other modules. &lt;br /&gt;
&lt;em&gt;Surely there's a way to add/remove modules...&lt;/em&gt; - Yes, there is, and this will be discussed later on.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Some of the most interesting codes include:&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
boot: slax webconfig=passphrase&lt;br /&gt;
boot: slax webconfig=ask&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
boot: slax toram (just alias for copy2ram)&lt;br /&gt;
boot: slax copy2ram&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
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)&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
boot: slax changes=/dev/device&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
Saves changes to a specified device using any linux filesystem, like a hard drive or a usb stick.&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
boot: slax load=module&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
Load optional modules stored in the /optional/ directory. For further information about modules, see the "Make your own!" section below.&lt;br /&gt;
&lt;br /&gt;
For a full list of all Slax cheat codes, see the cheatcodes page[13] on Slax website.  &lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Different flavors&lt;/strong&gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
That's why Slax developers decided to start creating different &lt;em&gt;flavors&lt;/em&gt; 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].&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;Slax "Kill Bill"&lt;/u&gt; - This is the first Slax customization which became available, and came out more or less at the same time as Tarantino's movie. &lt;em&gt;Bill&lt;/em&gt; Gates didn't seem to mind at all, even if this version actually allows users to run &lt;em&gt;some&lt;/em&gt; 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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;Slax "Server"&lt;/u&gt;&lt;br /&gt;
&lt;fieldset&gt;&lt;blockquote&gt;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.&lt;/blockquote&gt;&lt;/fieldset&gt;&lt;br /&gt;
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]:&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;SE: mysql up and running &lt;br /&gt;
SE: httpd up and running, with PHP with MySQL &lt;br /&gt;
SE: DNS server up and running as a cache server &lt;br /&gt;
SE: DHCP server included but not started automatically, could confuse local network &lt;br /&gt;
SE: SSH server up and running &lt;br /&gt;
SE: MAIL server up and running, needs testing &lt;br /&gt;
SE: FTP server up and running&lt;/em&gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;Slax "Popcorn"&lt;/u&gt;&lt;br /&gt;
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 &lt;em&gt;KDE counterparts&lt;/em&gt; (Konqueror and Kword). &lt;br /&gt;
Very fast, simple, and fits 128MB: suitable for small USB keys more than anything. &lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;Slax "Frodo"&lt;/u&gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Make your own!&lt;/strong&gt;&lt;br /&gt;
&lt;em&gt;Nice! But I'd have included X instead of Y, then added Z as well, perhaps...&lt;/em&gt;&lt;br /&gt;
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 &lt;em&gt;Slax-based&lt;/em&gt; 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:&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;tgz2mo application.tgz application.mo&lt;/code&gt;	&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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!&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Conclusions&lt;/strong&gt;&lt;br /&gt;
Slax is exactly how advertised on its website: &lt;em&gt;"[a] fast and beautiful Linux operating system which fits on small (3.14") CD-ROM disc"&lt;/em&gt;, 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 &lt;em&gt;as many applications as possible&lt;/em&gt; which could confuse Linux neophytes but, just a bunch of useful programs for everyday use to give users a &lt;em&gt;taste&lt;/em&gt; of what Linux is capable to do.&lt;br /&gt;
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 &lt;em&gt;just came out&lt;/em&gt; 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...&lt;br /&gt;
&lt;br /&gt;
Happy Sla&lt;em&gt;x&lt;/em&gt;ing!   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1]Linux Live CD - Wikipedia: &lt;a href="http://en.wikipedia.org/wiki/Linux_live_cd"&gt;http://en.wikipedia.org/wiki/Linux_live_cd&lt;/a&gt;&lt;br /&gt;
[2]DrozenTech's LiveCD List: &lt;a href="http://www.frozentech.com/content/livecd.php"&gt;http://www.frozentech.com/content/livecd.php&lt;/a&gt;&lt;br /&gt;
[3]Knoppix Official Site: &lt;a href="http://www.knoppix.org/"&gt;http://www.knoppix.org/&lt;/a&gt;&lt;br /&gt;
[4]Debian Official Site: &lt;a href="http://www.debian.org/"&gt;http://www.debian.org/&lt;/a&gt;&lt;br /&gt;
[5]K Desktop Environment: &lt;a href=" &lt;a href="http://www.kde.org/"&gt; &lt;a href="http://www.kde.org/&lt;/a&gt;"&gt;http://www.kde.org/[/url]&lt;/a&gt;&lt;br /&gt;
[6]Knoppix Customizations: &lt;a href=" &lt;a href="http://www.knoppix.net/wiki/Knoppix_Customisations"&gt; &lt;a href="http://www.knoppix.net/wiki/Knoppix_Customisations&lt;/a&gt;"&gt;http://www.knoppix.net/wiki/Knoppix_Customisations[/url]&lt;/a&gt;&lt;br /&gt;
[7]Slax Live CD: &lt;a href="http://slax.linux-live.org"&gt;http://slax.linux-live.org&lt;/a&gt;&lt;br /&gt;
[8]Damn Small Linux - Official Page: &lt;a href="http://www.damnsmalllinux.org/"&gt;http://www.damnsmalllinux.org/&lt;/a&gt;&lt;br /&gt;
[9]Dillo Browser, Official Page: &lt;a href="http://www.dillo.org/"&gt;http://www.dillo.org/&lt;/a&gt;&lt;br /&gt;
[10]Slackware Linux, Official Page: &lt;a href="http://www.slackware.com/"&gt;http://www.slackware.com/&lt;/a&gt;&lt;br /&gt;
[11]Slax - Developer's page: &lt;a href="http://slax.linux-live.org/credits.php"&gt;http://slax.linux-live.org/credits.php&lt;/a&gt;&lt;br /&gt;
[12]Barney Matthews, "A week with Slax 4.1.4" - Tuxs.org: &lt;a href="http://www.tuxs.org/slax.htm"&gt;http://www.tuxs.org/slax.htm&lt;/a&gt;&lt;br /&gt;
[13]Slax cheatcodes: &lt;a href="http://slax.linux-live.org/cheatcodes.php"&gt;http://slax.linux-live.org/cheatcodes.php&lt;/a&gt;&lt;br /&gt;
[14]Wine HQ: &lt;a href="http://www.winehq.com/"&gt;http://www.winehq.com/&lt;/a&gt; &lt;br /&gt;
[15]Slax download page: &lt;a href="http://slax.linux-live.org/download.php"&gt;http://slax.linux-live.org/download.php&lt;/a&gt;&lt;br /&gt;
[16]Dosbox Project: &lt;a href="http://dosbox.sourceforge.net/news.php?show_news=1"&gt;http://dosbox.sourceforge.net/news.php?show_news=1&lt;/a&gt;&lt;br /&gt;
[17]Qemu Project: &lt;a href="http://fabrice.bellard.free.fr/qemu/"&gt;http://fabrice.bellard.free.fr/qemu/&lt;/a&gt;&lt;br /&gt;
[18]Slax TODO list: &lt;a href="http://slax.linux-live.org/todo.php"&gt;http://slax.linux-live.org/todo.php&lt;/a&gt;&lt;br /&gt;
[19]Slampp Official Page: &lt;a href="http://slampp.abangadek.com/wiki/wikka.php?wakka=HomePage"&gt;http://slampp.abangadek.com/wiki/wikka.php?wakka=HomePage&lt;/a&gt;&lt;br /&gt;
[20]Slampp Lite page: &lt;a href="http://slampp.abangadek.com/wiki/wikka.php?wakka=SlamppLite"&gt;http://slampp.abangadek.com/wiki/wikka.php?wakka=SlamppLite&lt;/a&gt;&lt;br /&gt;
[21]XAMPP for Linux: &lt;a href="http://www.apachefriends.org/en/xampp-linux.html"&gt;http://www.apachefriends.org/en/xampp-linux.html&lt;/a&gt;&lt;br /&gt;
[22]Xfce desktop environment, official page: &lt;a href="http://www.xfce.org"&gt;http://www.xfce.org&lt;/a&gt;&lt;br /&gt;
[23]Slax Documentation - Modules: &lt;a href="http://slax.linux-live.org/doc_modules.php"&gt;http://slax.linux-live.org/doc_modules.php&lt;/a&gt;&lt;br /&gt;
[24]Slax modules page: &lt;a href="http://slax.linux-live.org/modules.php"&gt;http://slax.linux-live.org/modules.php&lt;/a&gt;&lt;br /&gt;
[25]MySlax Projects: &lt;a href="http://myslax.bonsonno.org/"&gt;http://myslax.bonsonno.org/&lt;/a&gt;&lt;br /&gt;
[26]Slax - installed packages: &lt;a href="http://slax.linux-live.org/installed_packages.txt"&gt;http://slax.linux-live.org/installed_packages.txt&lt;/a&gt;&lt;br /&gt;
[27]Slax - Webconfig: &lt;a href="http://slax.linux-live.org/webconfig.php"&gt;http://slax.linux-live.org/webconfig.php&lt;/a&gt;</description>
      <pubDate>Sun, 05 Feb 2006 16:17:46 -0000</pubDate>
      <guid>http://www.h3rald.com/articles/slax/</guid>
      <link>http://www.h3rald.com/articles/slax/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/slax/#comments</comments>
      <category>review</category>
    </item>
    <item>
      <title>A look at Drupal</title>
      <description>&lt;em&gt;&lt;strong&gt;Important Notice:&lt;/strong&gt; This article is about changes occurring to zZine Magazine's site[1]. At the time of writing, &lt;a href="www.zzine.org"&gt;www.zzine.org&lt;/a&gt; uses the old site, and not the Drupal-based one presented in this article, which is currently under construction[18].&lt;/em&gt;&lt;br /&gt;
&lt;br /&gt;
"Why can't we log who edits the articles?"&lt;br /&gt;
"Can we send newsletters?"&lt;br /&gt;
"We should really have a members' area..."&lt;br /&gt;
&lt;br /&gt;
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?&lt;strong&gt;Case Study: zZine Magazine&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
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 &lt;em&gt;Content Management Systems&lt;/em&gt;[3]: ready-made, fully-featured administrative back-ends for creating and managing almost any kind of website, from blogs to eCommerce portals.&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;
 	&lt;li&gt;Add, delete, edit and publish articles&lt;br /&gt;
 	&lt;/li&gt;&lt;li&gt;Customizable user permissions, ideally role-based &lt;/li&gt;(writer, editor, publisher, etc.)&lt;br /&gt;
 	&lt;li&gt;Creating and managing monthly publications&lt;br /&gt;
 	&lt;/li&gt;&lt;li&gt;Editor's tests&lt;br /&gt;
 	&lt;/li&gt;&lt;li&gt;User signups, notifications, etc.&lt;br /&gt;
 	&lt;/li&gt;&lt;li&gt;RSS feed generation&lt;br /&gt;
 	&lt;/li&gt;&lt;li&gt;Sending newsletters to subscribers&lt;br /&gt;
 	&lt;/li&gt;&lt;li&gt;Logging user actions&lt;br /&gt;
&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;
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 &lt;em&gt;had&lt;/em&gt; to choose the &lt;em&gt;best&lt;/em&gt; 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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Making the right choice&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
The first site is CMS Matrix[6] which - as the name implies - provides a really handy &lt;em&gt;matrix&lt;/em&gt;, or chart, to compare the various features offered by nearly all CMS available, both proprietary and open-source.&lt;br /&gt;
&lt;br /&gt;
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 &lt;em&gt;not&lt;/em&gt; 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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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 &lt;em&gt;part of Drupal's documentation team&lt;/em&gt; and involved with Drupal development[10].&lt;br /&gt;
&lt;br /&gt;
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 &lt;em&gt;stable&lt;/em&gt; API![12]  &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Installation&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
Drupal needs three things to run:&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;
 	&lt;li&gt;A web server  -  Apache is fine, and ISS is reported to be working&lt;br /&gt;
 	&lt;/li&gt;&lt;li&gt;PHP - Either version 4 or 5, Drupal started supporting PHP5 since 4.6.0 release&lt;br /&gt;
 	&lt;/li&gt;&lt;li&gt;A PHP-compatible database - MySQL or PostgreSQL is recommended&lt;br /&gt;
&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;
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 &lt;em&gt;database&lt;/em&gt; directory under the installation directory and modified the configuration settings (sites/default/settings.php) to allow Drupal to access the database.  Installation complete.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
 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 &lt;em&gt;http://www.yoursite.com/cron.php&lt;/em&gt; 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 &lt;em&gt;cron&lt;/em&gt; task manually) is the poorman's &lt;em&gt;cron&lt;/em&gt; module[15], which I used myself and found to be workable. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Keeping your site under control&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
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 &lt;em&gt;custom&lt;/em&gt; role-based user accounts and access permissions for &lt;em&gt;everything&lt;/em&gt;: 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.&lt;br /&gt;
&lt;br /&gt;
For zZine, I created four types of accounts:&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;
 	[*]&lt;em&gt;Administrator&lt;/em&gt; - Able to access everything and change every setting of the site&lt;br /&gt;
 	[*]&lt;em&gt;Publisher&lt;/em&gt; - 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.&lt;br /&gt;
 	[*]&lt;em&gt;Editor&lt;/em&gt; - Able to write and edit anything on the site, but not to publish it.&lt;br /&gt;
 	[*]&lt;em&gt;Writer&lt;/em&gt; - Able to write articles, blogs and similar content, but in some cases not allowed to edit it.&lt;br /&gt;
&lt;/ul&gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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 &lt;em&gt;watchdog&lt;/em&gt; 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. &lt;br /&gt;
&lt;br /&gt;
Themes &amp;amp; Templates&lt;br /&gt;
&lt;br /&gt;
"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. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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 &lt;em&gt;very&lt;/em&gt; 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]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;To switch or not to switch?&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
When creating a new site for an organization which already has one, there's something very important to consider: &lt;em&gt;what happens to the old data&lt;/em&gt;?&lt;br /&gt;
Assuming the old site was dynamic and using a database of some sort, there are three possibilities:&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;
 	&lt;li&gt;Don't bother doing anything: any data on the old site will not be transferred to the new one.&lt;br /&gt;
 	&lt;/li&gt;&lt;li&gt;Make the old website available somewhere else as an &lt;/li&gt;&lt;em&gt;archive&lt;/em&gt; of old documents.&lt;br /&gt;
 	&lt;li&gt;Import all the data from the old site to the new one. &lt;br /&gt;
&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;
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-&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
After this initial difficulty, importing articles was relatively easy. Pretty much every type of content in Drupal is, in its simplest form, a &lt;em&gt;node&lt;/em&gt;. 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 &lt;em&gt;stories&lt;/em&gt; and &lt;em&gt;pages&lt;/em&gt; write data to this table only.  The most important thing to understand about Drupal is that almost every module used to create &lt;em&gt;something&lt;/em&gt; 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 &lt;em&gt;in any way&lt;/em&gt; by third party modules!  &lt;br /&gt;
&lt;br /&gt;
What about categories? Well, Drupal has become famous for its taxonomy module: whereas most CMSes only support, or in fact &lt;em&gt;impose&lt;/em&gt;, 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 &lt;em&gt;any&lt;/em&gt; node, and since almost everything is a node-) can belong to none or &lt;em&gt;n&lt;/em&gt; different categories, which can be nested in a &lt;em&gt;n&lt;/em&gt;-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.&lt;br /&gt;
&lt;br /&gt;
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 &lt;em&gt;epublish&lt;/em&gt;[19] module seemed like it was tailored specifically for our needs.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Drupal API and Modules&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
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 &lt;em&gt;exactly&lt;/em&gt; what you're looking for.&lt;br /&gt;
 &lt;br /&gt;
In our case, even if we could have used the &lt;em&gt;story&lt;/em&gt; 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.&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;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.&lt;/em&gt;&lt;br /&gt;
&lt;br /&gt;
All I found in the story module was a bunch of functions like:&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
/**&lt;br /&gt;
 * Implementation of hook_node_name().&lt;br /&gt;
 */&lt;br /&gt;
function story_node_name($node) {&lt;br /&gt;
  return t('story');&lt;br /&gt;
}&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
  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 "&lt;em&gt;story_&lt;/em&gt;", so I created a new file named &lt;em&gt;zzarticle.module&lt;/em&gt;, copied and pasted the story module code into it, and changed every function accordingly, like this:&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
/**&lt;br /&gt;
 * Implementation of hook_node_name().&lt;br /&gt;
 */&lt;br /&gt;
function zzarticle_node_name($node) {&lt;br /&gt;
  return t('zZine Article');&lt;br /&gt;
} &lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
At this point I decided to have a proper look at the API, and read about hooks:&lt;br /&gt;
&lt;br /&gt;
&lt;fieldset&gt;&lt;blockquote&gt;&lt;em&gt;"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.&lt;br /&gt;
 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. [-]"&lt;/em&gt;&lt;/blockquote&gt;&lt;/fieldset&gt;&lt;br /&gt;
A &lt;em&gt;hook&lt;/em&gt; was used for the previously mentioned function, and this was diligently commented:&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
/**&lt;br /&gt;
 * Implementation of hook_node_name().&lt;br /&gt;
 */&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;
&lt;br /&gt;
 	[*]&lt;em&gt;Webform&lt;/em&gt; - 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.&lt;br /&gt;
 	[*]&lt;em&gt;Flexynode&lt;/em&gt; - 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 &lt;em&gt;flexynode&lt;/em&gt; module. I actually used this module for our podcast section[20], and it did an excellent job.&lt;br /&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Conclusions&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
&lt;strong&gt;Notes&lt;/strong&gt;&lt;br /&gt;
[small]&lt;br /&gt;
[1] zZine Magazine: &lt;a href="http://www.zzine.org"&gt;http://www.zzine.org&lt;/a&gt;&lt;br /&gt;
[2] CyberArmy Community: &lt;a href="http://www.cyberarmy.net"&gt;http://www.cyberarmy.net&lt;/a&gt;&lt;br /&gt;
[3] Content Management System, Wikipedia page: &lt;a href="http://en.wikipedia.org/wiki/Content_management_system"&gt;http://en.wikipedia.org/wiki/Content_management_system&lt;/a&gt;&lt;br /&gt;
[4] Xoops - Official Page &lt;a href="http://www.xoops.org/"&gt;http://www.xoops.org/&lt;/a&gt;&lt;br /&gt;
[5] Mambo - Official Page: &lt;a href="http://www.mamboserver.com"&gt;http://www.mamboserver.com&lt;/a&gt;&lt;br /&gt;
[6]CMS Matrix: &lt;a href="http://cmsmatrix.org/"&gt;http://cmsmatrix.org/&lt;/a&gt;&lt;br /&gt;
[7] Open Source CMS:  &lt;a href="http://opensourcecms.com/"&gt;http://opensourcecms.com/&lt;/a&gt;&lt;br /&gt;
[8] Snarkles's CyberArmy Profile: &lt;a href="http://www.cyberarmy.net/~snarkles"&gt;http://www.cyberarmy.net/~snarkles&lt;/a&gt;&lt;br /&gt;
[9] Drupal - Official Page: &lt;a href="http://www.drupal.org"&gt;http://www.drupal.org&lt;/a&gt;&lt;br /&gt;
[10]Webchick's Drupal Profile: &lt;a href="http://drupal.org/user/24967"&gt;http://drupal.org/user/24967&lt;/a&gt;&lt;br /&gt;
[11] Drupal - Handbooks: &lt;a href="http://www.drupal.org/handbooks/"&gt;http://www.drupal.org/handbooks/&lt;/a&gt;&lt;br /&gt;
[12] Drupal API: &lt;a href="http://drupaldocs.org/api/head"&gt;http://drupaldocs.org/api/head&lt;/a&gt;&lt;br /&gt;
[13] Drupal Downloads: &lt;a href="http://www.drupal.org/project/"&gt;http://www.drupal.org/project/&lt;/a&gt;&lt;br /&gt;
[14] WAMP Server Package: &lt;a href="http://www.wampserver.com"&gt;http://www.wampserver.com&lt;/a&gt;&lt;br /&gt;
[15] Drupal - Installing and Upgrading documentation: &lt;a href=" &lt;a href="http://drupal.org/node/258"&gt; &lt;a href="http://drupal.org/node/258&lt;/a&gt;"&gt;http://drupal.org/node/258[/url]&lt;/a&gt;&lt;br /&gt;
[16] Drupal - Themes: &lt;a href="http://drupal.org/project/Themes"&gt;http://drupal.org/project/Themes&lt;/a&gt;&lt;br /&gt;
[17] Drupal - Theme Engines: &lt;a href="http://drupal.org/node/509"&gt;http://drupal.org/node/509&lt;/a&gt;&lt;br /&gt;
[18] zZine Beta site: &lt;a href="http://beta.zzine.org"&gt;http://beta.zzine.org&lt;/a&gt;&lt;br /&gt;
[19] Drupal - ePublish module: &lt;a href="http://drupal.org/project/epublish"&gt;http://drupal.org/project/epublish&lt;/a&gt;&lt;br /&gt;
[20] zZine Podcasts: &lt;a href="http://beta.zzine.org/podcasts"&gt;http://beta.zzine.org/podcasts&lt;/a&gt;&lt;br /&gt;
[/small]</description>
      <pubDate>Thu, 12 Jan 2006 06:42:44 -0000</pubDate>
      <guid>http://www.h3rald.com/articles/a-look-at-drupal/</guid>
      <link>http://www.h3rald.com/articles/a-look-at-drupal/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/a-look-at-drupal/#comments</comments>
      <category>php</category>
      <category>webdevelopment</category>
      <category>review</category>
    </item>
    <item>
      <title>Next generation DVDs</title>
      <description>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! &lt;br /&gt;
&lt;strong&gt;The endless quest for space&lt;/strong&gt;&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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.  &lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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 &lt;em&gt;per layer&lt;/em&gt;, which will come to the aid of High Definition TeleVision (&lt;a href="http://en.wikipedia.org/wiki/HDTV"&gt;HDTV&lt;/a&gt;) 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 &lt;em&gt;&lt;a href="http://www.imdb.com/title/tt0401792/"&gt;Sin City&lt;/a&gt;&lt;/em&gt; 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!&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;A New War has Begun&lt;/strong&gt;&lt;br /&gt;
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 &lt;em&gt;de facto&lt;/em&gt; 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. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
However, once again, Sony is proposing its own format for next generation DVDs, called &lt;a href="http://en.wikipedia.org/wiki/Blu-ray_Disc"&gt;Blu-Ray Disc&lt;/a&gt; (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 &lt;a href="http://www.cdfreaks.com/article/186/"&gt;article&lt;/a&gt; that appeared on CDfreaks.com.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;The Contenders: HD-DVD&lt;/strong&gt;&lt;br /&gt;
Let's now examine the first of the two contenders to the "throne": High Density Digital Versatile Disk (&lt;a href="http://www.hddvd.org/hddvd/"&gt;HD-DVD&lt;/a&gt;). 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. &lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;&lt;u&gt;Disk structure&lt;/u&gt;&lt;/em&gt;&lt;br /&gt;
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 &lt;em&gt;Track Pitch&lt;/em&gt;) 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 &lt;em&gt;Numerical Amplitude&lt;/em&gt;: 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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;&lt;u&gt;Information processing and error correction&lt;/u&gt;&lt;/em&gt;&lt;br /&gt;
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).&lt;br /&gt;
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!&lt;br /&gt;
HD-DVD has the same correction techniques and data containers as the DVD format, the only exception being that the &lt;a href="http://en.wikipedia.org/wiki/Error-correcting_code"&gt;ECC&lt;/a&gt; blocks on HD-DVDs are twice as large, resulting in a longer correctable burst error length (7.1mm, where DVD is about 6mm).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;&lt;u&gt;Writing formats and copy protection&lt;/u&gt;&lt;/em&gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
 &lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;The Contenders: Blu-Ray Disks&lt;/strong&gt; &lt;br /&gt;
&lt;br /&gt;
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 &lt;a href="http://www.bluraydisc.com/"&gt;Blu-Ray&lt;/a&gt; (BD) format, which appears to be more technologically advanced and offer even more space. &lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;&lt;u&gt;Disk structure&lt;/u&gt;&lt;/em&gt;&lt;br /&gt;
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 &lt;em&gt;Numeric Amplitude&lt;/em&gt; of the lens has been increased to 0.85 (vs. 0.65 on HD-DVD), and the &lt;em&gt;Track Pitch&lt;/em&gt; has been decreased to 320nm, so the additional space is explained by noting that the distance between the spiral rows is even smaller!&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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!&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;&lt;u&gt;Information processing and error correction&lt;/u&gt;&lt;/em&gt;&lt;br /&gt;
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.&lt;br /&gt;
Error correction is then achieved using two codes similar to the &lt;a href="http://en.wikipedia.org/wiki/Reed-Solomon_code"&gt;Reed-Solomon&lt;/a&gt; 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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;&lt;u&gt;Copy protection&lt;/u&gt;&lt;/em&gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
As another anti-piracy method, both formats also introduce a sort of "signature" called a &lt;em&gt;Volume Identifier&lt;/em&gt; which will be very difficult to duplicate on a cloned disk.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;The World Takes Sides&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
After discussing the two formats sufficiently in depth, it's now possible to itemize the pros and cons of each format:&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;&lt;u&gt;HD-DVD&lt;/u&gt;&lt;/em&gt;&lt;br /&gt;
Pros:&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;
&lt;li&gt;Backward compatibility with CD/DVD will be available soon&lt;br /&gt;
&lt;/li&gt;&lt;li&gt;Reduced production costs, both for disks and players - cheaper to buy&lt;br /&gt;
&lt;/li&gt;&lt;li&gt;Improved durability&lt;br /&gt;
&lt;/li&gt;&lt;li&gt;Available relatively soon on the market&lt;br /&gt;
&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;
Cons:&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;
&lt;li&gt;Incompatible with the competitor's format&lt;br /&gt;
&lt;/li&gt;&lt;li&gt;Less space than competitor's format&lt;br /&gt;
&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;&lt;u&gt;Blu-Ray&lt;/u&gt;&lt;/em&gt;&lt;br /&gt;
Pros:&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;
&lt;li&gt;Backward compatibility with CD/DVD will be available soon&lt;br /&gt;
&lt;/li&gt;&lt;li&gt;More space than competitor's format&lt;br /&gt;
&lt;/li&gt;&lt;li&gt;Technologically more advanced, longer life-span&lt;br /&gt;
&lt;/li&gt;&lt;li&gt;Higher recording speed&lt;br /&gt;
&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;
Cons:&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;
&lt;li&gt;Incompatible with the competitor's format&lt;br /&gt;
&lt;/li&gt;&lt;li&gt;More expensive to produce and to buy&lt;br /&gt;
&lt;/li&gt;&lt;li&gt;More vulnerable to scratches &lt;/li&gt;(the TDK solution notwithstanding)&lt;br /&gt;
&lt;li&gt;Still relatively experimental&lt;br /&gt;
&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Obviously, all the industries with interests in these new magnetic supports took sides with one or the other format:&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;HD-DVD:&lt;/em&gt;Toshiba, Sanyo, NEC, Paramount Pictures, Universal Pictures, New Line Cinema, Warner Bros Studios, Time Warner, and, apparently, &lt;em&gt;&lt;strong&gt;Microsoft&lt;/strong&gt;&lt;/em&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;Blu-Ray:&lt;/em&gt; 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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Microsoft recently seemed to &lt;a href="http://news.softpedia.com/news/Microsoft-Sides-With-Toshiba-Against-Sony-s-Blu-ray-3798.shtml"&gt;support HD-DVD&lt;/a&gt; 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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;The End of the War&lt;/strong&gt;&lt;br /&gt;
So a new &lt;em&gt;Standards War&lt;/em&gt; 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 &lt;a href="http://www.pcpro.co.uk/news/73241/hddvd-bluray-marriage-back-on.html"&gt;single standard&lt;/a&gt;, but seems also keen on &lt;em&gt;seeing how it goes&lt;/em&gt; first, when both the two products are on the market. &lt;br /&gt;
&lt;br /&gt;
Actually there's &lt;a href="http://news.softpedia.com/news/The-chronicles-of-a-futile-battle-Blu-Ray-vs-HD-DVD-631.shtml"&gt;someone&lt;/a&gt; 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 &lt;a href="http://www.techtree.com/techtree/jsp/article.jsp?article_id=57500"&gt;Holographic Versatile Disks&lt;/a&gt; (HVD) will eventually destroy both contenders by offering, on the same disk, 1TB of space at 1Gbps transfer speed! &lt;br /&gt;
As a matter of fact, Japan's &lt;a href="http://www.optware.co.jp/english/what_040823.htm"&gt;Optware Corp.&lt;/a&gt; might be the revelation that &lt;em&gt;saves the world&lt;/em&gt;...</description>
      <pubDate>Sat, 10 Dec 2005 11:53:46 -0000</pubDate>
      <guid>http://www.h3rald.com/articles/next-generation-dvds/</guid>
      <link>http://www.h3rald.com/articles/next-generation-dvds/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/next-generation-dvds/#comments</comments>
      <category>review</category>
    </item>
    <item>
      <title>Software Review: Google Earth</title>
      <description>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!&lt;strong&gt;In the beginning...&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.nasa.gov/home/index.html?skipIntro=1"&gt;Nasa.gov&lt;/a&gt; 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. &lt;br /&gt;
Perhaps one of the most wonderful things NASA did software-wise was the realization of an open source software called &lt;a href="http://worldwind.arc.nasa.gov/index.html"&gt;WorldWind&lt;/a&gt;: &lt;em&gt;"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."&lt;/em&gt;&lt;br /&gt;
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?&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Google enters the scene&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
"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 &lt;a href="http://www.kuro5hin.org/story/2005/6/12/143721/743"&gt;here&lt;/a&gt;).&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Anyhow, Google &lt;a href="http://www.google.com/press/pressrel/keyhole.html"&gt;purchased&lt;/a&gt; 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.&lt;br /&gt;
&lt;br /&gt;
Then everything went (almost) silent, until June 18th, 2005, seven months and one day since the acquisition of Keyhole,  Google officially &lt;a href="http://slashdot.org/article.pl?sid=05/06/28/1733229&amp;amp;amp;from=rss"&gt;released&lt;/a&gt; a new product, called &lt;a href="http://earth.google.com/"&gt;Google Earth&lt;/a&gt;. &lt;em&gt;"Thus the heavens and the earth were finished, and all the host of them" [Gen. 2:1]&lt;/em&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Welcome to a brand new world&lt;/strong&gt;&lt;br /&gt;
Pseudo-biblical jokes apart, Google's new Earth can be downloaded and installed FOR FREE! Go and &lt;a href="http://desktop.google.com/download/earth/index.html"&gt;get it&lt;/a&gt; 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... &lt;br /&gt;
So that's why, also thanks to Google, I found some &lt;a href="http://www.majorgeeks.com/download4659.html"&gt;Major Geeks&lt;/a&gt; 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.&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;Minimal Configuration&lt;/em&gt;&lt;br /&gt;
    * Operating system: Windows 2000, Windows XP&lt;br /&gt;
    * CPU speed: Intel? Pentium? PIII 500 MHz&lt;br /&gt;
    * System memory (RAM): 128MB&lt;br /&gt;
    * 200MB hard-disk space&lt;br /&gt;
    * 3D graphics card: 3D-capable video card with 16MB VRAM&lt;br /&gt;
    * 1024x768, 32-bit true color screen&lt;br /&gt;
    * Network speed: 128 kbps ("Broadband/Cable Internet")&lt;br /&gt;
    &lt;br /&gt;
&lt;em&gt;Recommended Configuration&lt;/em&gt;    &lt;br /&gt;
    * Operating system: Windows XP&lt;br /&gt;
    * CPU speed: Intel? Pentium? P4 2.4GHz+ or AMD 2400xp+&lt;br /&gt;
    * System memory (RAM): 512MB&lt;br /&gt;
    * 2GB hard-disk space&lt;br /&gt;
    * 3D graphics card: 3D-capable video card with 32MB VRAM or greater&lt;br /&gt;
    * 1280x1024, 32-bit true color screen&lt;br /&gt;
    * Network speed: 128 kbps ("Broadband/Cable Internet")&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;h3raLd's crappy PC's Configuration&lt;/em&gt;    &lt;br /&gt;
    * Operating system: Windows XP&lt;br /&gt;
    * CPU speed: Intel? Pentium? PII 350 MHz&lt;br /&gt;
    * System memory (RAM): 256MB&lt;br /&gt;
    * 30 GB hard-disk space&lt;br /&gt;
    * 3D graphics card: nVidia GeForce II MX 32MB VRAM&lt;br /&gt;
    * 1024x768, 32-bit true color screen&lt;br /&gt;
    * Network speed: 1240 kbps&lt;br /&gt;
 &lt;br /&gt;
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 &lt;a href="http://appdb.winehq.org/appview.php?versionId=3254"&gt;wine&lt;/a&gt; (rated "bronze").&lt;br /&gt;
&lt;br /&gt;
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 &lt;a href="http://newrecruit.org/archives/2005/may/googlekeyhole"&gt;article&lt;/a&gt;, and in particular at the screenshots. &lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Limitations and Opinions&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
 &lt;br /&gt;
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 &lt;a href="http://earth.google.com/product_comparison.html"&gt;features&lt;/a&gt; and support. &lt;br /&gt;
What of Microsoft? Well, Microsoft is said to be planning to "strike back" during this summer, with &lt;a href="http://www.google.com/url?sa=U&amp;amp;amp;start=1&amp;amp;amp;q=http%3A//blog.searchenginewatch.com/blog/050523-125208&amp;amp;amp;ei=hy3EQpqoGcmciALB8vinCw&amp;amp;amp;sig2=ZNIj3_KWXuDMr4_2WmrCNA"&gt;MS Virtual Earth&lt;/a&gt;, let's just wait and see...</description>
      <pubDate>Sat, 10 Dec 2005 11:48:59 -0000</pubDate>
      <guid>http://www.h3rald.com/articles/google-earth/</guid>
      <link>http://www.h3rald.com/articles/google-earth/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/google-earth/#comments</comments>
      <category>review</category>
      <category>google</category>
    </item>
    <item>
      <title>CakePHP - A 'tasty' solution for PHP programming</title>
      <description>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".&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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 &lt;em&gt;very limited&lt;/em&gt; range of functionality.  Its main purpose was to make life easier for web developers who wanted to do simple tasks,  like manipulating form data.&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
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 "&lt;em&gt;too dangerous to use in 'proper' applications&lt;/em&gt;". The danger, however, lies not in the language itself, but rather in the &lt;em&gt;way&lt;/em&gt; 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.&lt;br /&gt;
&lt;br /&gt;
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]. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Bringing Order to Chaos&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
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 &lt;em&gt;framework&lt;/em&gt; 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 &lt;em&gt;bring order to chaos&lt;/em&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;fieldset&gt;&lt;blockquote&gt;&lt;br /&gt;
[...] 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. [...]&lt;br /&gt;
&lt;/blockquote&gt;&lt;/fieldset&gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;The Rails Phenomenon&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;fieldset&gt;&lt;blockquote&gt;&lt;br /&gt;
"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."&lt;br /&gt;
&lt;/blockquote&gt;&lt;/fieldset&gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
MVC stands for &lt;strong&gt;M&lt;/strong&gt;odel &lt;strong&gt;V&lt;/strong&gt;iew &lt;strong&gt;C&lt;/strong&gt;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 &lt;em&gt;should&lt;/em&gt; 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:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;
[*]&lt;strong&gt;Model&lt;/strong&gt;: The model represents the very essence of the &lt;em&gt;information&lt;/em&gt; and &lt;em&gt;content&lt;/em&gt; 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.&lt;br /&gt;
[*]&lt;strong&gt;View&lt;/strong&gt;: 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 (X)HTML code, and mostly only that. They can therefore be changed &lt;em&gt;at any time&lt;/em&gt; without having to touch a single line of the business logic of your application.&lt;br /&gt;
[*]&lt;strong&gt;Controller&lt;/strong&gt;: 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 &lt;em&gt;order&lt;/em&gt; the Model to gather information and then pass the information obtained to the view for display.  &lt;br /&gt;
&lt;/ul&gt; &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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 &lt;em&gt;clones&lt;/em&gt; or ports of it to another language.  To my knowledge, the &lt;em&gt;Rails disease&lt;/em&gt; contaminated the following programming languages:&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;
&lt;li&gt;PHP&lt;/li&gt;[12]&lt;br /&gt;
&lt;li&gt;Python&lt;/li&gt;[13]&lt;br /&gt;
&lt;li&gt;Java &lt;/li&gt;[14]&lt;br /&gt;
&lt;li&gt;Perl &lt;/li&gt;[15]&lt;br /&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;br /&gt;
I said &lt;em&gt;disease&lt;/em&gt; 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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;CakePHP: Just Another Rails Clone?&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
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]: &lt;br /&gt;
&lt;br /&gt;
&lt;fieldset&gt;&lt;blockquote&gt;&lt;br /&gt;
"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."&lt;br /&gt;
&lt;/blockquote&gt;&lt;/fieldset&gt;&lt;br /&gt;
&lt;br /&gt;
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 "&amp;lt;insert language here&amp;gt;-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".&lt;br /&gt;
&lt;br /&gt;
Quoting from CakePHP's website:&lt;br /&gt;
&lt;br /&gt;
&lt;fieldset&gt;&lt;blockquote&gt;&lt;br /&gt;
"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." &lt;br /&gt;
&lt;/blockquote&gt;&lt;/fieldset&gt;&lt;br /&gt;
&lt;br /&gt;
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?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;The Ingredients&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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 &lt;em&gt;conventions&lt;/em&gt; over &lt;em&gt;configuration&lt;/em&gt;. 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.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;&lt;em&gt;/&lt;br /&gt;
---app/&lt;br /&gt;
------config/&lt;br /&gt;
------controllers/&lt;br /&gt;
---------components/&lt;br /&gt;
------models/&lt;br /&gt;
------plugins/&lt;br /&gt;
------views/&lt;br /&gt;
---------elements/&lt;br /&gt;
---------errors/&lt;br /&gt;
---------helpers/&lt;br /&gt;
---------layouts/&lt;br /&gt;
---------pages/&lt;br /&gt;
------webroot/&lt;br /&gt;
---------css/&lt;br /&gt;
---------files/&lt;br /&gt;
---------img/&lt;br /&gt;
---------js/&lt;br /&gt;
&lt;/strong&gt;---cake/&lt;br /&gt;
------config/&lt;br /&gt;
---------inflections/&lt;br /&gt;
------docs/&lt;br /&gt;
------libs/&lt;br /&gt;
---------controller/&lt;br /&gt;
---------generator/&lt;br /&gt;
---------model/&lt;br /&gt;
---------view/&lt;br /&gt;
------scripts/&lt;br /&gt;
---tmp/&lt;br /&gt;
------cache/&lt;br /&gt;
------distro/&lt;br /&gt;
------logs/&lt;br /&gt;
------tests/&lt;br /&gt;
---vendors/&lt;/em&gt;&lt;br /&gt;
&lt;br /&gt;
I expanded only the first three levels of the tree, although there are more levels in the &lt;em&gt;/cake/&lt;/em&gt; directory.  They won't be considered here simply because the &lt;em&gt;/cake/&lt;/em&gt; directory contains CakePHP's internal libraries, which normally will not be modified when developing an application.  The &lt;em&gt;/tmp/&lt;/em&gt; directory also will not be elaborated upon either, because it is only used to store temporary files. However, the &lt;em&gt;/vendor/&lt;/em&gt; 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 &lt;em&gt;/app/&lt;/em&gt; directory, which we therefore need to examine in greater detail.&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;&lt;em&gt;/config/&lt;/em&gt;&lt;/u&gt;&lt;br /&gt;
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 &lt;em&gt;might&lt;/em&gt; need to be configured. &lt;br /&gt;
&lt;br /&gt;
[list]&lt;br /&gt;
[*]&lt;strong&gt;acl.ini.php&lt;/strong&gt;: This file must be edited only if you plan to use Cake's default ACL (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.   &lt;br /&gt;
[*]&lt;strong&gt;core.php&lt;/strong&gt;: 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.&lt;br /&gt;
[*]&lt;strong&gt;database.php.default&lt;/strong&gt;: 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 (mysql, postrgres, sqlite, or any other supported by the AdoDB library[18]), username, password and database name.&lt;br /&gt;
[*]&lt;strong&gt;paths.php&lt;/strong&gt;: 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.&lt;br /&gt;
[*]&lt;strong&gt;routes.php&lt;/strong&gt;: Following Rails' example, CakePHP features a "routing system" for user-friendly URLs. By default, your URLs will look like this: &lt;em&gt;http://sitename/controller-name/action-name/eventual/action/parameters&lt;/em&gt;, which is a really nice way to organize a site, but you may want to change something if you have particular requirements. &lt;br /&gt;
[/list]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;&lt;em&gt;Controllers&lt;/em&gt;&lt;/u&gt;&lt;br /&gt;
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 &amp;lt;something&amp;gt;_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 &lt;em&gt;index&lt;/em&gt; (the default action called when you access the &lt;a href="http://sitename/controller/"&gt;http://sitename/controller/&lt;/a&gt; page) or other user-defined ones like &lt;em&gt;add&lt;/em&gt; or &lt;em&gt;list&lt;/em&gt; or &lt;em&gt;admin&lt;/em&gt;, 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. &lt;em&gt;Then&lt;/em&gt; once all the mess is done, the result (usually an array or a variable) is passed to the view (see &lt;em&gt;views&lt;/em&gt; below). &lt;br /&gt;
 &lt;br /&gt;
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 &lt;em&gt;($this-set('variableNameInView', $variable))&lt;/em&gt; and other useful things.&lt;br /&gt;
&lt;br /&gt;
Recently &lt;em&gt;Components&lt;/em&gt; have been added to CakePHP, and quoting from the corresponding wiki page[20]:&lt;br /&gt;
&lt;fieldset&gt;&lt;blockquote&gt;&lt;br /&gt;
"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."&lt;br /&gt;
&lt;/blockquote&gt;&lt;/fieldset&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;&lt;em&gt;Models&lt;/em&gt;&lt;/u&gt;&lt;br /&gt;
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 &lt;em&gt;/cake/&lt;/em&gt; directory (along with the previously mentioned AppController class), and can be moved to the &lt;em&gt;/app/&lt;/em&gt; directory and modified if you want to add some particular site-wide behavior to it which will be inherited by all models extending it.&lt;br /&gt;
&lt;br /&gt;
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 &lt;em&gt;Inflector&lt;/em&gt; class.&lt;br /&gt;
&lt;br /&gt;
Creating a model class for basic use is trivial:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class Post extends AppModel&lt;br /&gt;
{&lt;br /&gt;
    var $name = 'Post';&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then you'll be able to access the model (and therefore the database) from a controller via simple instructions like $this-&amp;gt;Post-&amp;gt;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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;&lt;em&gt;Views&lt;/em&gt;&lt;/u&gt;&lt;br /&gt;
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 &lt;em&gt;foreach&lt;/em&gt; loops. Nothing more than that should be used in a view!&lt;br /&gt;
&lt;br /&gt;
Views must be placed in this directory and obey the following conventions:&lt;br /&gt;
&lt;br /&gt;
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).&lt;br /&gt;
2. Views referring to an action of a particular controller must be placed under a subfolder named after the controller.&lt;br /&gt;
3. All views must have a .thtml extension.&lt;br /&gt;
&lt;br /&gt;
Any site-wide view, like the site's template, must be placed under the &lt;em&gt;layouts&lt;/em&gt; 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.&lt;br /&gt;
&lt;br /&gt;
Similarly to what was said about components, &lt;em&gt;helpers&lt;/em&gt; can be used to extend views functionalities[20]:&lt;br /&gt;
&lt;br /&gt;
&lt;fieldset&gt;&lt;blockquote&gt;&lt;br /&gt;
"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').&lt;br /&gt;
&lt;br /&gt;
Now, throw your myhelper.php file into the /app/views/helpers/, create the class MyHelper, and $myHelper is available in the view." &lt;br /&gt;
&lt;/blockquote&gt;&lt;/fieldset&gt;   &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;&lt;em&gt;Plugins&lt;/em&gt;&lt;/u&gt;&lt;br /&gt;
&lt;br /&gt;
Plugins are user-developed enhancements for Cake. Unlike the files placed under the &lt;em&gt;vendor&lt;/em&gt; directory, a plugin is an application specifically made to be used within the CakePHP environment. At the moment this feature is still under development.&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;&lt;em&gt;Webroot&lt;/em&gt;&lt;/u&gt;&lt;br /&gt;
&lt;br /&gt;
If you read carefully what I wrote above about routes, you might be wondering if &lt;em&gt;every&lt;/em&gt; 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 &lt;em&gt;/css&lt;/em&gt; folder, Javascript under &lt;em&gt;/js&lt;/em&gt;, and so on. Additionally, some helpers can provide a easier way to access or display images, scripts, CSS, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;&lt;em&gt;Other Features&lt;/em&gt;&lt;/u&gt;&lt;br /&gt;
Cake offers even more than this; the latest releases have introduced a few more Rails-inspired features:&lt;br /&gt;
&lt;br /&gt;
[list]&lt;br /&gt;
[*]&lt;strong&gt;Scaffolding&lt;/strong&gt;: Do you want to test your application without spending time writing all the CRUD (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.&lt;br /&gt;
[*]&lt;strong&gt;Bake&lt;/strong&gt;: Another Rails-inspired feature revisited in PHP. Rails uses a set of scripts and in particular the &lt;em&gt;rake&lt;/em&gt; utility to instantaneously create the foundation for a Rails application with scaffolds already in place.  CakePHP offers the same functionality through the &lt;em&gt;bake&lt;/em&gt; utility, which is currently available as either a batch file or a PHP script.&lt;br /&gt;
[*]&lt;strong&gt;ACL&lt;/strong&gt;: As previously mentioned, Cake comes with a ready-made Access Control List (ACL) system, which can be extended and used to restrict particular areas of a Cake application to certain users or user groups.&lt;br /&gt;
[*]&lt;strong&gt;Compatibility&lt;/strong&gt;: CakePHP is fully compatible with both PHP and PHP5.&lt;br /&gt;
[/list]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Meet the Bakers&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;&lt;u&gt;h3rald&lt;/u&gt;:&lt;/em&gt; Thanks to both of you for allowing me to interview you about your project, CakePHP. Where did the name come from, anyway?&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;PHPnut:&lt;/em&gt; 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. &lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;&lt;u&gt;h3raLd&lt;/u&gt;:&lt;/em&gt; Is Cake released under the GPL? How many developers are helping out?&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;gwoo:&lt;/em&gt; 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.&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;PHPnut:&lt;/em&gt; 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.&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;&lt;u&gt;h3raLd&lt;/u&gt;:&lt;/em&gt; 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?&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;PHPnut:&lt;/em&gt; 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.&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;&lt;u&gt;h3raLd&lt;/u&gt;:&lt;/em&gt; I read once that Rails was developed in Ruby because only Ruby can offer certain functionalities and features...&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;gwoo:&lt;/em&gt; 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.&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;&lt;u&gt;h3raLd&lt;/u&gt;:&lt;/em&gt; Some developers, especially Perl programmers, tend to consider PHP an "inferior" language sometimes.  What do you think of that?&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;PHPnut:&lt;/em&gt; My name says what I think about them all.&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;gwoo:&lt;/em&gt; 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.&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;&lt;u&gt;h3raLd&lt;/u&gt;:&lt;/em&gt; 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?&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;gwoo:&lt;/em&gt; 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.&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;&lt;u&gt;h3raLd&lt;/u&gt;:&lt;/em&gt; 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?&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;gwoo:&lt;/em&gt; You forgot Symfony[27], a PHP5-only port: I tried it but it seems much harder to learn than Cake.&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;PHPnut:&lt;/em&gt; 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.&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;gwoo:&lt;/em&gt; 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.&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;&lt;u&gt;h3raLd&lt;/u&gt;:&lt;/em&gt; Why don't you consider CakePHP a port? In what way is it evolving from Rails?&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;PHPnut:&lt;/em&gt; 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.&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;&lt;u&gt;h3raLd&lt;/u&gt;:&lt;/em&gt; What can Cake be used for? What kind of projects? Are there any limitations?&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;gwoo:&lt;/em&gt; 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!&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;PHPnut:&lt;/em&gt; 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.&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;&lt;u&gt;h3raLd&lt;/u&gt;:&lt;/em&gt; 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?&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;gwoo:&lt;/em&gt; 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.&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;&lt;u&gt;h3raLd&lt;/u&gt;:&lt;/em&gt; 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?&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;PHPnut:&lt;/em&gt; Come and enjoy: we are here to help...&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;gwoo:&lt;/em&gt; ...And plan to be here for a very long time!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Let's cook...&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
Anybody can contribute to the framework or simply test it and share their experiences.&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;&lt;em&gt;CakePHP Wiki&lt;/em&gt;&lt;/u&gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;&lt;em&gt;CakePHP User Group&lt;/em&gt;&lt;/u&gt;&lt;br /&gt;
&lt;br /&gt;
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 &lt;em&gt;do&lt;/em&gt; listen to user suggestions.&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;&lt;em&gt;CakePHP IRC Channel&lt;/em&gt;&lt;/u&gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;&lt;em&gt;CakePHP Development&lt;/em&gt;&lt;/u&gt;&lt;br /&gt;
&lt;br /&gt;
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].  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;...Or Just Eat&lt;/strong&gt; [small]&lt;em&gt; by Marc Abramowitz&lt;/em&gt;[/small]&lt;br /&gt;
&lt;br /&gt;
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  &lt;em&gt;release&lt;/em&gt; or a &lt;em&gt;nightly&lt;/em&gt; build: the zip file is less than 300KB.&lt;br /&gt;
&lt;br /&gt;
I wanted to include a &lt;em&gt;success story&lt;/em&gt; 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:&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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):&lt;br /&gt;
&lt;br /&gt;
1. Create the database table. Cake requires tables to have some extra&lt;br /&gt;
fields:&lt;br /&gt;
  - id, an auto_increment primary key&lt;br /&gt;
  - created, a datetime&lt;br /&gt;
  - updated, a datetime&lt;br /&gt;
2. Configure Cake to access the database by editing the config/database.php file&lt;br /&gt;
3. Create a model class which extends AppModel (a Cake provided class)&lt;br /&gt;
4. Create a controller class which extends AppController (a Cake provided class) and write one or more controller methods&lt;br /&gt;
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 [i]foreach&lt;/em&gt;.&lt;br /&gt;
Cake also provides some simple convenience methods that write out certain HTML constructs for you.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
function index(){&lt;br /&gt;
           return $this-findBySql(&lt;br /&gt;
               "SELECT id, title, AVG(rating) avg_rating, MIN(rating) min_rating, MAX(rating) max_rating, COUNT(rating) num_ratings " .&lt;br /&gt;
               "FROM ideas LEFT JOIN ratings ON ideas.id =&lt;br /&gt;
ratings.skill_id " .&lt;br /&gt;
               "GROUP BY id " .&lt;br /&gt;
               "ORDER BY title");&lt;br /&gt;
       }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
So what I have is a model that does &lt;em&gt;not&lt;/em&gt; have a one-to-one mapping with a single table. It actually retrieves data from more than one table.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Then one day I realized that Cake had a concept of layouts, which are high level templates in  &lt;em&gt;app/views/layouts&lt;/em&gt; 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 &lt;em&gt;apps/views/elements/tabs.thtml&lt;/em&gt;.  Then the tabs could be displayed in any template using:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php echo $this-renderElement('tabs') ?&lt;br /&gt;
&lt;br /&gt;
Rather than stick the above statement in all of the many pages that were supposed to display tabs, I created a new layout in &lt;em&gt;apps/views/layouts/tabbed.thtml&lt;/em&gt; (which uses renderElement to render the tabs). Then I used&lt;br /&gt;
&lt;br /&gt;
$this-layout = "tabbed"&lt;br /&gt;
&lt;br /&gt;
in the controller to tell it to use the tabbed layout rather than the default (non-tabbed) layout.&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
1. Cake is very lightweight and productive&lt;br /&gt;
2. Cake might be very beneficial to your career&lt;br /&gt;
&lt;br /&gt;
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,&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[/i]&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;...And the icing?&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;
&lt;li&gt;Cake's built-in &lt;/li&gt;&lt;strong&gt;data-validation&lt;/strong&gt; 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. &lt;br /&gt;
&lt;li&gt;A new default &lt;/li&gt;&lt;strong&gt;ACL system&lt;/strong&gt; will be included and will support database access and .ini files as well. &lt;br /&gt;
&lt;li&gt; The &lt;/li&gt;&lt;strong&gt;AJAX&lt;/strong&gt; helper class and AJAX support will be enhanced, featuring unobtrusive JavaScript and ALA behavior[28].&lt;br /&gt;
&lt;li&gt; &lt;/li&gt;&lt;strong&gt;Multiple applications&lt;/strong&gt; 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.&lt;br /&gt;
&lt;/ul&gt;   &lt;br /&gt;
&lt;br /&gt;
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]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Notes and Related Resources&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
Special thanks to:&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;
[*]&lt;strong&gt;Larry E. Masters aka &lt;em&gt;PhpNut&lt;/em&gt;&lt;/strong&gt; and  Garrett J. Woodworth &lt;strong&gt;gwoo&lt;/strong&gt; for providing all the answers to my questions and contributing to create such a wonderful tool for the PHP community.&lt;br /&gt;
[*]&lt;strong&gt;Marc Abramowitz&lt;/strong&gt; for sharing his experiences with the CakePHP framework and providing the content for the '...let's eat' section.&lt;br /&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;br /&gt;
[small]&lt;br /&gt;
[1] PHP functions reference, &lt;a href="http://www.php.net/manual/en/funcref.php"&gt;http://www.php.net/manual/en/funcref.php&lt;/a&gt;&lt;br /&gt;
[2] Framework, Wikipedia Page - &lt;a href="http://en.wikipedia.org/wiki/Framework"&gt;http://en.wikipedia.org/wiki/Framework&lt;/a&gt;&lt;br /&gt;
[3] .NET framework overview - &lt;a href="http://msdn.microsoft.com/netframework/technologyinfo/default.aspx"&gt;http://msdn.microsoft.com/netframework/technologyinfo/default.aspx&lt;/a&gt;&lt;br /&gt;
[4] "PHP Framework", delorian's blog, PHP Community - &lt;a href="http://www.phpcommunity.org/node/100"&gt;http://www.phpcommunity.org/node/100&lt;/a&gt;&lt;br /&gt;
[5]Some popular PHP frameworks: Mojavi (&lt;a href="http://www.mojavi.org/"&gt;http://www.mojavi.org/&lt;/a&gt;), phpMVC (&lt;a href="http://www.phpmvc.net/"&gt;http://www.phpmvc.net/&lt;/a&gt;), BlueShoes (&lt;a href="http://www.blueshoes.org/"&gt;http://www.blueshoes.org/&lt;/a&gt;), Seagull (&lt;a href="http://seagull.phpkitchen.com/"&gt;http://seagull.phpkitchen.com/&lt;/a&gt;).&lt;br /&gt;
[6] PEAR - &lt;a href="http://pear.php.net/"&gt;http://pear.php.net/&lt;/a&gt;&lt;br /&gt;
[7] Prado - PHP Rapid Application Development Object-Oriented, &lt;a href="http://www.xisc.com/"&gt;http://www.xisc.com/&lt;/a&gt;&lt;br /&gt;
[8] Event Driven Programming, Wikipedia Page -  &lt;a href="http://en.wikipedia.org/w/index.php?title=Event_driven_programming"&gt;http://en.wikipedia.org/w/index.php?title=Event_driven_programming&lt;/a&gt;&lt;br /&gt;
[9] Ruby on Rails, Official Page - &lt;a href="http://www.rubyonrails.org/"&gt;http://www.rubyonrails.org/&lt;/a&gt;&lt;br /&gt;
[10] Ruby on Rails, Doumentation - &lt;a href="http://documentation.rubyonrails.com/"&gt;http://documentation.rubyonrails.com/&lt;/a&gt;&lt;br /&gt;
[11] Model View Controller, Wikipedia Page - &lt;a href="http://en.wikipedia.org/w/index.php?title=Model-View-Controller"&gt;http://en.wikipedia.org/w/index.php?title=Model-View-Controller&lt;/a&gt;&lt;br /&gt;
[12] PHP frameworks inspired by Rails: &lt;a href="http://phpontrax.com/"&gt;http://phpontrax.com/&lt;/a&gt;, &lt;a href="http://flinn.activeintra.net/biscuit/"&gt;http://flinn.activeintra.net/biscuit/&lt;/a&gt;, &lt;a href="http://www.cakephp.org/"&gt;http://www.cakephp.org/&lt;/a&gt;&lt;br /&gt;
[13]Python frameworks inspired by Rails: &lt;a href="http://fanery.sourceforge.net/"&gt;http://fanery.sourceforge.net/&lt;/a&gt;, &lt;a href="http://fanery.sourceforge.net/"&gt;http://fanery.sourceforge.net/&lt;/a&gt;, &lt;a href="http://subway.python-hosting.com/"&gt;http://subway.python-hosting.com/&lt;/a&gt;&lt;br /&gt;
[14]Java framework inspired by Rails: &lt;a href="https://trails.dev.java.net/"&gt;https://trails.dev.java.net/&lt;/a&gt;&lt;br /&gt;
[15]Perl frameworks inspired by Rails:&lt;br /&gt;
&lt;a href="http://search.cpan.org/dist/Catalyst/lib/Catalyst/Manual/Intro.pod"&gt;http://search.cpan.org/dist/Catalyst/lib/Catalyst/Manual/Intro.pod&lt;/a&gt;, &lt;a href="http://perlonrails.org/index.php/Main_Page"&gt;http://perlonrails.org/index.php/Main_Page&lt;/a&gt; &lt;br /&gt;
[16] "Rails Clones: Blood suckers or useful drones?", RedHanded - &lt;a href="http://redhanded.hobix.com/cult/railsClonesBloodsuckersOrUsefulDrones.html"&gt;http://redhanded.hobix.com/cult/railsClonesBloodsuckersOrUsefulDrones.html&lt;/a&gt;&lt;br /&gt;
[17] CakePHP - Rails-inpired PHP framework, &lt;a href="http://www.cakephp.org/"&gt;http://www.cakephp.org/&lt;/a&gt;&lt;br /&gt;
[18] AdoDB, PHP Database Abstraction Layer - &lt;a href="http://adodb.sourceforge.net/"&gt;http://adodb.sourceforge.net/&lt;/a&gt;&lt;br /&gt;
[19] CakePHP blog tutorial - &lt;a href="http://wiki.cakephp.org/tutorials:blog_tutorial_-_1"&gt;http://wiki.cakephp.org/tutorials:blog_tutorial_-_1&lt;/a&gt;&lt;br /&gt;
[20] Extending CakePHP -  &lt;a href="http://wiki.cakephp.org/tutorials:extending_cake"&gt;http://wiki.cakephp.org/tutorials:extending_cake&lt;/a&gt;&lt;br /&gt;
[21] Smarty, PHP Template Engine - &lt;a href="http://smarty.php.net/"&gt;http://smarty.php.net/&lt;/a&gt;&lt;br /&gt;
[22] Scaffolding a Blog, CakePHP Wiki - &lt;a href="http://wiki.cakephp.org/tutorials:scaffolding_a_blog"&gt;http://wiki.cakephp.org/tutorials:scaffolding_a_blog&lt;/a&gt;&lt;br /&gt;
[23] CakePHP Wiki - &lt;a href="http://wiki.cakephp.org/"&gt;http://wiki.cakephp.org/&lt;/a&gt;&lt;br /&gt;
[24] CakePHP Google User Group - &lt;a href="http://groups.google.com/group/cake-php"&gt;http://groups.google.com/group/cake-php&lt;/a&gt;&lt;br /&gt;
[25] CakeForge - &lt;a href="http://cakeforge.org/"&gt;http://cakeforge.org/&lt;/a&gt;&lt;br /&gt;
[26] CakePHP Downloads Page - &lt;a href="http://cakephp.org/downloads/"&gt;http://cakephp.org/downloads/&lt;/a&gt;&lt;br /&gt;
[27] Simfony, PHP5 framework - &lt;a href="http://www.symfony-project.com/"&gt;http://www.symfony-project.com/&lt;/a&gt;&lt;br /&gt;
[28] ALA behavior - &lt;a href="http://bennolan.com/behaviour/"&gt;http://bennolan.com/behaviour/&lt;/a&gt;&lt;br /&gt;
[/small]</description>
      <pubDate>Thu, 08 Dec 2005 16:03:39 -0000</pubDate>
      <guid>http://www.h3rald.com/articles/cakephp/</guid>
      <link>http://www.h3rald.com/articles/cakephp/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/cakephp/#comments</comments>
      <category>cakephp</category>
      <category>review</category>
      <category>frameworks</category>
      <category>webdevelopment</category>
    </item>
    <item>
      <title>A Quick Overview of SQLite</title>
      <description>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..." &lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;What is SQLite?&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
When PHP5 was first released, I discovered SQLite: &lt;em&gt;"...a small C library that implements a self-contained, embeddable, zero-configuration SQL database engine"&lt;/em&gt; (as quoted from the &lt;a href="http://www.sqlite.org"&gt;official site&lt;/a&gt;). 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.&lt;br /&gt;
 &lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Let's examine the pros and cons of using SQLite in your web applications.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Features&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
- SQLite is FREE &amp;amp;quot;for any purpose&amp;amp;quot;, &lt;a href="http://www.sqlite.org/copyright.html"&gt;they say&lt;/a&gt;.&lt;br /&gt;
- It doesn't rely on a server process to run&lt;br /&gt;
- You don't need to spend time configuring your installation, because there's nothing to configure!&lt;br /&gt;
- As there's no client-server negotiation, accesses to the database are much faster (2-3 times faster than a MySQL database)&lt;br /&gt;
&lt;br /&gt;
As a consequence of all this, there's actually no concept of &amp;amp;quot;users&amp;amp;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.&lt;br /&gt;
&lt;br /&gt;
- 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.&lt;br /&gt;
- SQLite can handle files up to 2 terabytes in size.&lt;br /&gt;
- 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).&lt;br /&gt;
- 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  &amp;amp;quot;integer&amp;amp;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. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Limitations&lt;/strong&gt;&lt;br /&gt;
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?&lt;br /&gt;
&lt;br /&gt;
Well, the developers themselves decided to devote &lt;a href="http://www.sqlite.org/whentouse.html"&gt;a page&lt;/a&gt; to discuss when you should use SQLite and where you'd be better off sticking with your &amp;amp;quot;old&amp;amp;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:&lt;br /&gt;
&lt;br /&gt;
- Not all SQL queries and syntax are supported. For a full list, have a look &lt;a href="http://www.sqlite.org/omitted.html"&gt;here&lt;/a&gt;. The most notable things you'll miss in SQLite are: the inability (for now) to &amp;amp;quot;ALTER TABLE&amp;amp;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 &amp;amp;quot;parsed but not enforced&amp;amp;quot;).&lt;br /&gt;
&lt;br /&gt;
- 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 &amp;amp;lt;table&amp;amp;gt;.&amp;amp;lt;column&amp;amp;gt;, whereas MySQL doesn't complain if there's ambiguity.&lt;br /&gt;
&lt;br /&gt;
- 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. &lt;br /&gt;
&lt;br /&gt;
- 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).&lt;br /&gt;
&lt;br /&gt;
- 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...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Conclusions&lt;/strong&gt;&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
Last but not least, if you're used to phpMyAdmin for administering your MySQL databases, there are similar tools for SQLite, such as &lt;a href="http://www.sqlitemanager.org"&gt;sqlitemanager&lt;/a&gt;.</description>
      <pubDate>Fri, 25 Nov 2005 16:52:38 -0000</pubDate>
      <guid>http://www.h3rald.com/articles/quick-overview-of-sqlite/</guid>
      <link>http://www.h3rald.com/articles/quick-overview-of-sqlite/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/quick-overview-of-sqlite/#comments</comments>
      <category>review</category>
      <category>databases</category>
    </item>
    <item>
      <title>From Firefox to... Deer Park?</title>
      <description>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 &lt;a href="http://www.mozilla.org/projects/firefox/"&gt;roadmap&lt;/a&gt;, and we're already in July). Anyhow, this developer-oriented preview release can be &lt;a href="http://www.mozilla.org/projects/firefox/"&gt;downloaded&lt;/a&gt; and installed on Windows, Linux, and Mac OS X systems plus eventually, &lt;a href="http://ftp.mozilla.org/pub/mozilla.org/firefox/releases/deerpark/alpha1/contrib/"&gt;Solaris and others&lt;/a&gt;. 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.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Fixed bugs&lt;/strong&gt;&lt;br /&gt;
Like any other Firefox Release, Deer Park comes with several &lt;a href="http://www.squarefree.com/burningedge/releases/1.1a1.html"&gt;&lt;strong&gt;&lt;em&gt;Bug Fixes&lt;/em&gt;&lt;/strong&gt;&lt;/a&gt;. 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:&lt;br /&gt;
&lt;br /&gt;
- &lt;a href="https://bugzilla.mozilla.org/show_bug.cgi?id=103638"&gt;103638&lt;/a&gt; - Targets with same name in different windows open in wrong window with javascript.&lt;br /&gt;
- &lt;a href="https://bugzilla.mozilla.org/show_bug.cgi?id=97283"&gt;97283&lt;/a&gt; - Mouse wheel scrolling does not work for elements such as div using overflow - auto or scroll.&lt;br /&gt;
- &lt;a href="https://bugzilla.mozilla.org/show_bug.cgi?id=251986"&gt;251986&lt;/a&gt; - Keyboard scrolling does not work for elements such as div using overflow - auto or scroll.&lt;br /&gt;
- &lt;a href="https://bugzilla.mozilla.org/show_bug.cgi?id=245829"&gt;245829&lt;/a&gt; - Download manager progress and title do not update correctly, wrong number of files and percentage after finishing or cancelling a download.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;New Features&lt;/strong&gt;&lt;br /&gt;
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 &lt;em&gt;&lt;strong&gt;Sanitize Deer Park&lt;/strong&gt;&lt;/em&gt; and the &lt;em&gt;&lt;strong&gt;Report Broken Sites&lt;/strong&gt;&lt;/em&gt; 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-&amp;gt;privacy, but with Sanitize you need just one click. Convenience I suppose?&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Additional features included are also &lt;em&gt;Image thumbnails as Tab icons&lt;/em&gt;, 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.&lt;br /&gt;
&lt;br /&gt;
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 &lt;a href="https://addons.mozilla.org/extensions/moreinfo.php?id=158&amp;amp;application=firefox"&gt;tabbrowser preferences&lt;/a&gt; extension is still necessary to achieve certain behaviours).&lt;br /&gt;
&lt;br /&gt;
Regarding something more technical, among the so-called developers features there are various improvements regarding CSS support, in particular CSS2's &lt;a href="http://www.w3.org/TR/CSS21/generate.html#quotes-specify"&gt;quotes nesting&lt;/a&gt; and even some new CSS3 (!) features, like &lt;a href="http://www.w3.org/TR/css3-multicol/"&gt;Multi-column layouts&lt;/a&gt; the :only-child selector, overflow-x and overflow-y properties and even various new &lt;a href="http://www.w3.org/TR/css3-ui/#cursor"&gt;cursors names&lt;/a&gt;.&lt;br /&gt;
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 (&lt;a href="http://developer-test.mozilla.org/docs/Drawing_Graphics_with_Canvas"&gt;&lt;/a&gt;). Last but not least, even support for &lt;a href="http://www.w3.org/MarkUp/Forms/"&gt;Xforms&lt;/a&gt; is already possible in Deer Park through a &lt;a href="http://www.mozilla.org/projects/xforms/"&gt;related project/extension&lt;/a&gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Final Thoughs&lt;/strong&gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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 &lt;em&gt;some other product&lt;/em&gt; instead of Firefox or Deer Park... But that's another story!</description>
      <pubDate>Sun, 20 Nov 2005 18:05:30 -0000</pubDate>
      <guid>http://www.h3rald.com/articles/from-firefox-to-deer-park/</guid>
      <link>http://www.h3rald.com/articles/from-firefox-to-deer-park/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/from-firefox-to-deer-park/#comments</comments>
      <category>firefox</category>
      <category>browsers</category>
      <category>review</category>
    </item>
    <item>
      <title>Easy-to-install server packages</title>
      <description>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. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Preliminary considerations&lt;/strong&gt;&lt;br /&gt;
Let's assume that you just want to have a server set up on your computer for &lt;em&gt;internal use&lt;/em&gt; 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. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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 &lt;em&gt;maximum&lt;/em&gt; 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 &lt;a href="http://www.apache.org"&gt;Apache&lt;/a&gt; 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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;WAMPserver&lt;/strong&gt;&lt;br /&gt;
&lt;a href="http://www.wampserver.com"&gt;WAMP&lt;/a&gt; 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:&lt;br /&gt;
&lt;br /&gt;
- PHP 5.0.4&lt;br /&gt;
- Apache 1.3.33&lt;br /&gt;
- MySQL 4.1.10a&lt;br /&gt;
- phpMyadmin 2.6.1-pl3&lt;br /&gt;
- SQLitemanager 1.0.4&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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, &lt;a href="http://localhost"&gt;http://localhost&lt;/a&gt; in your favourite browser.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;EasyPHP&lt;/strong&gt;&lt;br /&gt;
The second suite I will briefly describe is &lt;a href="http://www.easyphp.org"&gt;EasyPHP&lt;/a&gt;. 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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;XAMPP&lt;/strong&gt;&lt;br /&gt;
This is by far the most complete distribution of the three I am focusing on. This project is developed by &lt;a href="http://www.apachefriends.org"&gt;Apache Friends&lt;/a&gt; and has a lot of features and flavours. XAMPP currently includes:&lt;br /&gt;
&lt;br /&gt;
- Apache HTTPD 2.0.54&lt;br /&gt;
- MySQL 4.1.12&lt;br /&gt;
- PHP 5.0.4 + 4.3.11 + PEAR + Switch&lt;br /&gt;
- MiniPerl 5.8.6&lt;br /&gt;
- Openssl 0.9.7g&lt;br /&gt;
- PHPMyAdmin 2.6.2-pl1&lt;br /&gt;
- XAMPP Control Panel 1.0&lt;br /&gt;
- eAccelerator 0.9.3&lt;br /&gt;
- Webalizer 2.01-10&lt;br /&gt;
- Mercury Mail Transport System for Win32 and NetWare Systems v4.01a&lt;br /&gt;
- FileZilla FTP Server 0.9.8a&lt;br /&gt;
- SQLite 2.8.15&lt;br /&gt;
- ADODB 4.63&lt;br /&gt;
- Zend Optimizer 2.5.7&lt;br /&gt;
- XAMPP Security for Windows 98, 2000, XP&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Unfortunately (or fortunately), there's no icon on the system tray, so you need to actually access &lt;a href="http://localhost"&gt;http://localhost&lt;/a&gt; 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).&lt;br /&gt;
&lt;br /&gt;
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!&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.</description>
      <pubDate>Tue, 28 Jun 2005 20:12:19 -0000</pubDate>
      <guid>http://www.h3rald.com/articles/server-packages/</guid>
      <link>http://www.h3rald.com/articles/server-packages/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/server-packages/#comments</comments>
      <category>review</category>
      <category>webdevelopment</category>
      <category>php</category>
      <category>databases</category>
    </item>
  </channel>
</rss>
