<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Zen and the Art of Programming &#187; Reviews</title>
	<atom:link href="http://programmingzen.com/category/reviews/feed/" rel="self" type="application/rss+xml" />
	<link>http://programmingzen.com</link>
	<description>By Antonio Cangiano, Software Engineer &#38; Technical Evangelist at IBM</description>
	<lastBuildDate>Wed, 21 Jul 2010 22:12:55 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>In-Depth Book Review: Practical Clojure</title>
		<link>http://programmingzen.com/2010/07/16/in-depth-book-review-practical-clojure/</link>
		<comments>http://programmingzen.com/2010/07/16/in-depth-book-review-practical-clojure/#comments</comments>
		<pubDate>Fri, 16 Jul 2010 18:30:35 +0000</pubDate>
		<dc:creator>Antonio Cangiano</dc:creator>
				<category><![CDATA[Books]]></category>
		<category><![CDATA[Clojure]]></category>
		<category><![CDATA[In-Depth Book Reviews]]></category>

		<guid isPermaLink="false">http://programmingzen.com/?p=1230</guid>
		<description><![CDATA[Title: Practical ClojureAuthors: Luke VanderHart and Stuart SierraTrue pp.: 198Publisher: ApressPublished on: June 2010ISBN-13: 978-1430272311Rating: 6.5/10 Published in June 2010, Practical Clojure by Luke VanderHart and Stuart Sierra is the latest Clojure book to hit stores. Despite the Clojure 1.0 jar shown at the beginning of the book, this title tries to cover the current [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://programmingzen.com/recommends/?1430272317"><img src="http://programmingzen.com/wp-content/uploads/2010/07/41tKM6F53IL._SL160_.jpg" style="float: right; border:none;" alt="Practical Clojure" title="Practical Clojure" /></a><br/>Title: <a href="http://programmingzen.com/recommends/?1430272317"><strong>Practical Clojure</strong></a><br/>Authors: <strong>Luke VanderHart and Stuart Sierra</strong><br/>True pp.: <strong>198</strong><br/>Publisher: <strong>Apress</strong><br/>Published on: <strong>June 2010</strong><br/>ISBN-13: <a href="http://programmingzen.com/recommends/?1430272317"><strong>978-1430272311</strong></a><br/>Rating: <strong>6.5/10</strong></p>
<p><br/><br />
Published in June 2010, <a href="http://programmingzen.com/recommends/?1430272317">Practical Clojure</a> by Luke VanderHart and Stuart Sierra is the latest Clojure book to hit stores. Despite the Clojure 1.0 jar shown at the beginning of the book, this title tries to cover the current version of the language, including references to concepts that will be introduced by the upcoming 1.2 version.</p>
<p>The target audience of this book is programmers who are absolutely new to Clojure. It didn&#8217;t strike me as being particularly aimed at developers who are coming from the Java camp, or the Lisp camp; in this regard, the book is rather &#8220;background agnostic&#8221;, even though Lisp programmers will feel much more at home than Java programmers will, due to the nature of the language itself.</p>
<p>The authors of the book are clearly well versed in this new language (Sierra is part of <a href="http://clojure.com/">Clo<em>j</em>ure/core</a>, the equivalent of the A-Team in Clojureland) and their confidence with the concepts presented is demonstrated throughout the book. Their explanations tend to be clear and to the point. Longer discussions are occasionally included when required to introduce concepts that are novel to most programmers, like the Software Transactional Memory (STM), refs, atoms and agents.</p>
<p>The book starts out by presenting a short but well-argued case for why Clojure is a worthwhile language, and then focuses almost exclusively on the core of the language. I&#8217;m afraid they do so to the detriment of the ecosystem surrounding Clojure. The authors don&#8217;t talk about how to install Clojure, recommend editors and IDEs (albeit a few are casually mentioned), or how to use build tools like Ant, Maven or Leiningen.</p>
<p><code>clojure.contrib</code>, a fundamental extension library, is barely mentioned and there is no coverage of other important libraries or emerging frameworks. For instance, perhaps expectedly, Compojure (a web framework) and Incanter (a statistical and graphical environment) are only mentioned as examples of DSLs, however examples of their usage are not provided. (I believe the authors mistakenly refer to Compojure as Enclojure, which is a different project).</p>
<p>Despite the narrow focus, Practical Clojure doesn&#8217;t shy away from complex subjects and manages to include a chapter on Java interoperability, parallel programming, metaprogramming, and performance considerations. It does so briefly however, favoring a cursory presentation of the fundamental concepts rather than in-depth coverage, which would provide the reader with the degree of confidence required to approach real world problems.</p>
<p>The core language is covered in a manner that acts as both a tutorial and a reference. Major concepts, data structures, and common functions are presented to the reader with an endless supply of tiny examples. It&#8217;s easy to fly through them, but typing along in the REPL will be a far more valuable exercise for readers who hope to retain the information presented.</p>
<p>This leads us to another shortcoming of this book, which is the lack of more structured and complex examples. When I define their examples as &#8220;tiny&#8221;, with very few exceptions, I really mean it. For the first few chapters of the book the examples don&#8217;t get much larger than calculating the square root of a number through Newton&#8217;s method or adding contacts to an address book. Most of the other examples do a good job of illustrating the point they are trying to make with one, two, or just a handful of lines of code.</p>
<p>This is an actual sample of the kind of examples you&#8217;ll find throughout the book to illustrate many core API functions:</p>
<div class="highlight">
<pre><span class="nv">user=&gt;</span> <span class="p">(</span><span class="nb">reduce </span><span class="nv">+</span> <span class="p">[</span><span class="mi">1</span> <span class="mi">2</span> <span class="mi">3</span> <span class="mi">4</span> <span class="mi">5</span><span class="p">])</span>
<span class="mi">15</span>
</pre>
</div>
<p>Note that this approach is didactically valid, because it isolates the function to show exactly how it works. After dozens of these functions though, you may expect larger examples to show how to integrate the use of some of these functions and data structures you&#8217;ve learned about. Such examples are seldom included. Furthermore, the book lacks any exercise for the reader. Foundational books that fail to offer many articulated examples and that lack exercises, tend to make it hard for the reader to retain the information and get some hands-on practice.</p>
<p>I have lots of respect for short books that get to the point and avoid wasting the reader&#8217;s time. <a href="http://programmingzen.com/recommends/?0131103628">K&amp;R</a> is notoriously acclaimed thanks to its clear and concise nature. However, Clojure is not C, and I feel that the 198 pages fall a little short when it comes to introducing this wonderful language to new readers. There is more to Clojure than simply surveying the language itself, even though I suspect that certain readers may appreciate this extremely narrow focus.</p>
<p>Overall the book is well-edited, despite the presence of minor issues. Aside from a few typos (e.g., &#8220;becauseall&#8221; on page 79), readers may find the formatting to be slightly inconsistent at times. For example in chapter 5 when presenting sequences, after the <code>map</code> function has been introduced, the font for the subsequent functions is substantially decreased for no apparent reason. Readers may be misled into thinking that the functions presented afterwards are somehow different from the previous ones, when in fact they&#8217;re all defined in <code>clojure.core</code>. In Listing 6-3, at page 103, the authors present their first &#8220;complex&#8221; example (the address book) and they do so by using, among others, <code>doseq</code>. This macro was not introduced before that page nor is it really explained within the example.</p>
<p>From a physical standpoint, this book is a rather thin and wide paperback. A small font, coupled with small margins and a wide layout, imply that the readability of the book suffers a little. The paper itself is off-white, fairly thick and slightly textured, not as pleasant to the touch as other books by Apress or most other technical publishers, even though I recognize that this is a matter of taste (some people may actually love it because of these characteristics).</p>
<p>With two introductory Clojure books on the market, drawing comparisons is unavoidable. Stuart Halloway&#8217;s <a href="http://programmingzen.com/recommends/?1934356336">Programming Clojure</a> is a slightly older book (published in May 2009), which grants Practical Clojure a distinct advantage. This is not to say that Programming Clojure is obsolete, on the contrary it&#8217;s still a valid choice, but it doesn&#8217;t illustrate some of the new features that are available today. For example, in chapter 13 Practical Clojure introduces protocols and datatypes that will be available in Clojure 1.2 for the first time. Given that Halloway&#8217;s book was published more than a year ago, there was no possible way he could have included such powerful abstractions at the time.</p>
<p>Despite being older and less methodical than Practical Clojure, Programming Clojure tends to offer more complex examples. In the introduction of Programming Clojure you&#8217;ll see examples which Practical Clojure fails to include until much later in the book. Practical Clojure, the subject of this review, may leave you wanting for more practical examples of how all the language features fit together. Whereas Programming Clojure may leave you longing for more consistent explanations of how each part of the language works on its own.</p>
<p>Practical Clojure and Programming Clojure are competitors in the marketplace, but it wouldn&#8217;t be a bad idea to get ahold of both, because they complement each other quite well, in my opinion. Having to pick just one, I would probably recommend Practical Clojure, given its more consistent and up to date presentation. The sizzle offered by Programming Clojure, can be found to a much greater degree in upcoming and less introductory books, such as The Joy of Clojure. In this sense, reading Practical Clojure first followed by <a href="http://affiliate.manning.com/idevaffiliate.php?id=980&#038;url=4">The Joy of Clojure</a>, would be a solid learning path (<a href="http://affiliate.manning.com/idevaffiliate.php?id=980&#038;url=5">Clojure in Action</a> is another worthy addition, but it doesn&#8217;t replace The Joy of Clojure, which is a real gem).</p>
<p>In conclusion, Practical Clojure is not the Clojure equivalent of the highly praised <a href="http://programmingzen.com/recommends/?1590592395">Practical Common Lisp</a>, from the same publisher. Reading it cover to cover and typing all the snippets included within, will not give you enough knowledge to start writing complex, idiomatic Clojure programs out of the gate.</p>
<p>However, if you are learning Clojure today, I do recommend this book. It&#8217;s a clear, well thought-out, concise introduction to the language that will give you a solid foundation as you go on to learn more about Clojure and Lisp in general.</p>
]]></content:encoded>
			<wfw:commentRss>http://programmingzen.com/2010/07/16/in-depth-book-review-practical-clojure/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Ten recent programming books that will make you a better developer</title>
		<link>http://programmingzen.com/2010/06/21/ten-recent-programming-books-that-will-make-you-a-better-developer/</link>
		<comments>http://programmingzen.com/2010/06/21/ten-recent-programming-books-that-will-make-you-a-better-developer/#comments</comments>
		<pubDate>Mon, 21 Jun 2010 11:53:13 +0000</pubDate>
		<dc:creator>Antonio Cangiano</dc:creator>
				<category><![CDATA[Books]]></category>
		<category><![CDATA[Reviews]]></category>

		<guid isPermaLink="false">http://programmingzen.com/?p=1202</guid>
		<description><![CDATA[Programming is the type of discipline that requires countless hours of dedication to reading and writing code, rather than purely theoretical learning from books. Yet programming books can be enlightening and provide guidance while one attempts to hone their craft in the pursuit of mastery. In this post I&#8217;ll share a (necessarily incomplete) list of [...]]]></description>
			<content:encoded><![CDATA[<p>Programming is the type of discipline that requires countless hours of dedication to reading and writing code, rather than purely theoretical learning from books. Yet programming books can be enlightening and provide guidance while one attempts to hone their craft in the pursuit of mastery.</p>
<p>In this post I&#8217;ll share a (necessarily incomplete) list of relatively new books that I believe will make most developers better programmers. By &#8220;new&#8221;, I mean books that have been released recently (within the past three years), that haven&#8217;t become classics yet or appeared in everyone else&#8217;s list of recommended programming books. Hence, you won&#8217;t find <a href="http://programmingzen.com/recommends/?0262011530">SICP</a>, <a href="http://programmingzen.com/recommends/?0201485419">TAoCP</a>, <a href="http://programmingzen.com/recommends/?0521663504">PFDS</a>, etc.</p>
<p>Please note that each of them deserves (and probably will receive at some time) a lengthy review. Here I simply state in a brief manner why I think they are important.</p>
<div style="margin-bottom: 20px; border: 1px solid #ccc; padding: 5px 15px 5px 15px; height: 260px;">
<p><strong>1. <a href="http://programmingzen.com/recommends/?0262033844">Introduction to Algorithms, Third Edition</a></strong></p>
<p><a href="http://programmingzen.com/recommends/?0262033844"><img src="http://programmingzen.com/wp-content/uploads/2010/06/introduction-to-algorithms.jpg" alt="Introduction to Algorithms Image" align="left" style="float: left; margin-right: 10px;" /></a>OK, this is cheating a little. &#8220;Introduction to Algorithms&#8221; is both a classic and a book on everyone&#8217;s list. However, I opted to include it because not everyone knows that it was recently (September 2009) released in its third edition. The book received a major upgrade to the existing content and exercises, as well as including new, modern algorithms. Any programmer working through this book, or revisiting it, will learn valuable, foundational knowledge.</p>
</div>
<div style="margin-bottom: 20px; border: 1px solid #ccc; padding: 5px 15px 5px 15px; height: 350px;">
<p><strong>2. <a href="http://programmingzen.com/recommends/?0470229055">The Annotated Turing</a></strong></p>
<p><a href="http://programmingzen.com/recommends/?0470229055"><img src="http://programmingzen.com/wp-content/uploads/2010/06/the-annotated-turing.jpg" alt="The Annotated Turing Image" align="left" style="float: left; margin-right: 10px;" /></a>Alan Turing wrote a classic paper in 1936 with the title: &#8220;<a href="http://www.google.com/search?q=On+Computable+Numbers,+with+an+Application+to+the+Entscheidungsproblem">On Computable Numbers, with an Application to the Entscheidungsproblem</a>&#8220;. It was a paper on Turing machines and the limits of computability, which had a major impact on computer science and the development of the computer you are reading this post on. Every programmer/computer scientist should get ahold of this paper and read it. Unfortunately, it isn&#8217;t exactly easy to grasp if you are not used to reading research papers. In &#8220;The Annotated Turing&#8221;, Petzold does a marvelous job of dissecting the paper (and its errata), providing ample explanations and background information over 18 chapters (360 pages vs 36 of the original paper). It manages to be rigorous while still being accessible. If this book doesn&#8217;t arouse your interest in computer science, chances are nothing will.</p>
</div>
<div style="margin-bottom: 20px; border: 1px solid #ccc; padding: 5px 15px 5px 15px; height: 260px;">
<p><strong>3. <a href="http://programmingzen.com/recommends/?0321503627">Growing Object-Oriented Software, Guided by Tests</a></strong></p>
<p><a href="http://programmingzen.com/recommends/?0321503627"><img src="http://programmingzen.com/wp-content/uploads/2010/06/growing-oo-sw.jpg" alt="Growing OO Software Image" align="left" style="float: left; margin-right: 10px;" /></a>This book takes two fundamental pillars of modern software development, Object-Oriented Design and Test-Driven Development, and clearly illustrates how to apply the best practices of each to build and maintain complex software. I don&#8217;t know of many developers who couldn&#8217;t learn something new about TDD in the context of OOP from this book. A must read.</p>
</div>
<div style="margin-bottom: 20px; border: 1px solid #ccc; padding: 5px 15px 5px 15px; height: 260px;">
<p><strong>4. <a href="http://programmingzen.com/recommends/?0132350882">Clean Code</a></strong></p>
<p><a href="http://programmingzen.com/recommends/?0132350882"><img src="http://programmingzen.com/wp-content/uploads/2010/06/clean-code.jpg" alt="Clean Code Image" align="left" style="float: left; margin-right: 10px;" /></a>While on the subject of Agile development, I can&#8217;t help but recommend &#8220;Clean Code&#8221; by Uncle Bob. It compliments &#8220;Growing Object-Oriented Software, Guided by Tests&#8221; perfectly by focusing on how to improve and refractor code to get rid of code smells. You can think of it as a very succinct version of Code Complete 2, with a strong focus on Agile craftsmanship. The examples, as per the previous book, are in Java but that shouldn&#8217;t be much of an issue for the open-minded developer.</p>
</div>
<div style="margin-bottom: 20px; border: 1px solid #ccc; padding: 5px 15px 5px 15px; height: 275px;">
<p><strong>5. <a href="http://programmingzen.com/recommends/?0321620704">Leading Lean Software Development: Results Are not the Point</a></strong></p>
<p><a href="http://programmingzen.com/recommends/?0321620704"><img src="http://programmingzen.com/wp-content/uploads/2010/06/leading-lean-sw-dev.jpg" alt="Leading Lean Software Development Image" align="left" style="float: left; margin-right: 10px;" /></a>Lean principles deriving from the Lean manufacturing world have been effectively translated and adapted to the field of software development. This book explains how to lead a team to success through lean software development in detail to team leaders and mentors. Having obtained a Lean Six Sigma yellow belt many years ago, this book definitely gave me a few flashbacks. If you are not familiar with the concepts presented, you&#8217;ll definitely find it food for thought. Building software requires far more than just writing quality code, and the techniques presented here are valuable, even if you don&#8217;t fully buy into this methodology.</p>
</div>
<div style="margin-bottom: 20px; border: 1px solid #ccc; padding: 5px 15px 5px 15px; height: 260px;">
<p><strong>6. <a href="http://programmingzen.com/recommends/?1593271832">Growing Software</a></strong></p>
<p><a href="http://programmingzen.com/recommends/?1593271832"><img src="http://programmingzen.com/wp-content/uploads/2010/06/growing-software.jpg" alt="Growing Software Image" align="left" style="float: left; margin-right: 10px;" /></a>While on the subject of leadership, if you are in charge of software development at a small company or startup, you want to read this book. My interest in this title came from the fact that its author (Louis Testa) works as a Senior Engineering Manager at Galois, a company that uses Haskell as their technological advantage (and hired Don Stewart of Haskell fame). &#8220;Growing Software&#8221; delivered on my expectations and is full of hands-on advice on how to deal with the whole workflow surrounding the creation of software from the idea all the way to the sale and support of a product.</p>
</div>
<div style="margin-bottom: 20px; border: 1px solid #ccc; padding: 5px 15px 5px 15px; height: 260px;">
<p><strong>7. <a href="http://programmingzen.com/recommends/?1593271743">The Art of Debugging with GDB, DDD, and Eclipse</a></strong></p>
<p><a href="http://programmingzen.com/recommends/?1593271743"><img src="http://programmingzen.com/wp-content/uploads/2010/06/art-of-debugging.jpg" alt="The Art of Debugging Image" align="left" style="float: left; margin-right: 10px;" /></a>Debugging is an invaluable skill and one that is often left out from introductory programming books. Being able to effectively debug code is what separate professionals from beginners, and productive programmers from frustrated ones. This book is ruthlessly practical with many advanced techniques for debugging on Linux/Unix. It&#8217;s well worth its price in my opinion.</p>
</div>
<div style="margin-bottom: 20px; border: 1px solid #ccc; padding: 5px 15px 5px 15px; height: 260px;">
<p><strong>8. <a href="http://programmingzen.com/recommends/?1590597451">Applied Mathematics for Database Professionals</a></strong></p>
<p><a href="http://programmingzen.com/recommends/?1590597451"><img src="http://programmingzen.com/wp-content/uploads/2010/06/applied-math-db.jpg" alt="Applied Mathematics for Database Professionals Image" align="left" style="float: left; margin-right: 10px;" /></a>Assuming you already have a decent understanding of relational databases, and are not too scared of mathematics, this book will really bring your knowledge of how databases work to the next level, in turn improving the design, schema evolution, and SQL queries you&#8217;ll create afterwards.</p>
</div>
<div style="margin-bottom: 20px; border: 1px solid #ccc; padding: 5px 15px 5px 15px; height: 260px;">
<p><strong>9. <a href="http://programmingzen.com/recommends/?0596529325">Programming Collective Intelligence</a></strong></p>
<p><a href="http://programmingzen.com/recommends/?0596529325"><img src="http://programmingzen.com/wp-content/uploads/2010/06/collective-intelligence.jpg" alt="Programming Collective Intelligence Image" align="left" style="float: left; margin-right: 10px;" /></a>If you are building web applications that do more than simply CRUD operations on your data, you&#8217;ll want to read this book (with examples in Python). The motivated, intermediate developer will learn how to efficiently solve complex problems related to machine learning and intelligent web algorithms from this book. It&#8217;s a very accessible introduction to tough subjects and one of the most interesting books I&#8217;ve read in some time.</p>
</div>
<div style="margin-bottom: 20px; border: 1px solid #ccc; padding: 5px 15px 5px 15px; height: 260px;">
<p><strong>10. <a href="http://programmingzen.com/recommends/?1430219483">Coders at work</a></strong></p>
<p><a href="http://programmingzen.com/recommends/?1430219483"><img src="http://programmingzen.com/wp-content/uploads/2010/06/coders-at-work.jpg" alt="Coders at work Image" align="left" style="float: left; margin-right: 10px;" /></a>To conclude this list, I wanted to include a book that&#8217;s aimed at showing programmers how some of the best programmers and computer scientists do their work. I previously enjoyed <a href="http://programmingzen.com/recommends/?1430210788">Founders at Work</a>, and this version about programming is just as good. It&#8217;s inspiring, fun to read, and rich in insight and advice.</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://programmingzen.com/2010/06/21/ten-recent-programming-books-that-will-make-you-a-better-developer/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Upgrading to Rails 3</title>
		<link>http://programmingzen.com/2010/05/25/upgrading-to-rails-3/</link>
		<comments>http://programmingzen.com/2010/05/25/upgrading-to-rails-3/#comments</comments>
		<pubDate>Tue, 25 May 2010 07:12:12 +0000</pubDate>
		<dc:creator>Antonio Cangiano</dc:creator>
				<category><![CDATA[Books]]></category>
		<category><![CDATA[Featured Article]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[Screencasts]]></category>

		<guid isPermaLink="false">http://antoniocangiano.com/?p=1179</guid>
		<description><![CDATA[Rails 3 is a major upgrade; using it almost feels like working with an entirely new framework. Porting existing applications and acquiring the skills required to build new ones entails a significant amount of effort. You could scout the net for bits and pieces of information, but that would be time consuming and possibly frustrating. [...]]]></description>
			<content:encoded><![CDATA[<p>Rails 3 is a major upgrade; using it almost feels like working with an entirely new framework. Porting existing applications and acquiring the skills required to build new ones entails a significant amount of effort. You could scout the net for bits and pieces of information, but that would be time consuming and possibly frustrating. Thankfully there are resources available that have done the work for you, so you don&#8217;t have to waste time trying to figure out what&#8217;s new.</p>
<p>In this post, I&#8217;d like to point out a couple of resources that I think compliment each other well, and focus on how to upgrade applications, as opposed to simply providing you with a shopping list of features.</p>
<p>The first one is <a href="http://thinkcode.tv/catalog/upgrading-rails-3/">Upgrading applications to Rails 3</a>, a screencast that was just released by <a href="http://thinkcode.tv">ThinkCode.TV</a>. This screencast is almost an hour-long and shows you how to port a real world web application from Rails 2 to Rails 3. As such, it can be very useful if you have existing code that you&#8217;d like to port over to Rails 3. The author ported a few large applications to Rails 3, as he has solid experience with it. I&#8217;m biased of course, but I feel it&#8217;s well worth $8.99. (Today only, use the coupon <strong>RAILS3</strong> to purchase this Rails screencast for just $5.99.)</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="rails3.png" src="http://antoniocangiano.com/wp-content/uploads/2010/05/rails3.png" border="0" alt="rails3.png" width="550" height="323" /></p>
<p>The second resource is the <a href="http://www.railsupgradehandbook.com/">Rails 3 Upgrade Handbook</a> by&nbsp;Jeremy McAnally. It&#8217;s a beautiful PDF that succinctly explains what&#8217;s new in Rails 3, as well as how to upgrade your applications to the new edition of the framework. At 10c per page ($12 for 120 pages), it too is worth the money in my opinion.</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="rails3uh.png" src="http://antoniocangiano.com/wp-content/uploads/2010/05/rails3uh.png" border="0" alt="rails3uh.png" width="400" height="355" /></p>
<p>Regardless of whether you end up buying these resources or not, I sure hope you have extensive test coverage for your existing Rails 2 applications. In my experience this is a must, because porting complex applications to Rails 3 without solid test support is a definite challenge. Nevertheless, I feel that this major upgrade is truly worth it. Rails 3 really brings Rails to a whole new level and we, as a community, should be proud and excited about what lies ahead of us.</p>
]]></content:encoded>
			<wfw:commentRss>http://programmingzen.com/2010/05/25/upgrading-to-rails-3/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Recommended Ruby and Rails books (August 2009)</title>
		<link>http://programmingzen.com/2009/08/24/recommended-ruby-and-rails-books/</link>
		<comments>http://programmingzen.com/2009/08/24/recommended-ruby-and-rails-books/#comments</comments>
		<pubDate>Mon, 24 Aug 2009 12:46:10 +0000</pubDate>
		<dc:creator>Antonio Cangiano</dc:creator>
				<category><![CDATA[Books]]></category>
		<category><![CDATA[Merb]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Ruby on Rails]]></category>

		<guid isPermaLink="false">http://antoniocangiano.com/?p=1087</guid>
		<description><![CDATA[I finally got around to updating the Ruby and Rails book pages. The existing list was getting a bit obsolete and I didn&#8217;t like the idea of recommending old books to newcomers. I also had some interesting new entries. Without further ado: Recommended Ruby Books Recommended Rails Books A few people may disagree with the [...]]]></description>
			<content:encoded><![CDATA[<p>I finally got around to updating the Ruby and Rails book pages. The existing list was getting a bit obsolete and I didn&#8217;t like the idea of recommending old books to newcomers. I also had some interesting new entries.</p>
<p>Without further ado:</p>
<ul>
<li><big><a href="http://antoniocangiano.com/ruby-and-rails-recommended-books/">Recommended Ruby Books</a></big></li>
<li><big><a href="http://antoniocangiano.com/rails-books/">Recommended Rails Books</a></big></li>
</ul>
<p>A few people may disagree with the choices, but I think most experienced Ruby and Rails programmers, who&#8217;ve read those books, will concur with my recommendations. I&#8217;m quite confident that these are, all things considered, some of the best books available on the subject.</p>
<p><strong>A word to the publishers</strong></p>
<p>As tempting as it is to collect Ruby and Rails books, these days I don&#8217;t feel I can economically justify the act of purchasing every Ruby or Rails book put out there. So if you are a publisher or an author, and you&#8217;d like for me to consider your book, you are certainly welcome to <a href="mailto:info@antoniocangiano.com?subject=Review copy">send me a review copy</a>. I will definitely read it, but only include it on these lists if it&#8217;s either outstanding or as good as the existing ones. If it&#8217;s a programming book that&#8217;s not related to Ruby/Rails, yet is really good, I would consider reviewing it on my blog.</p>
]]></content:encoded>
			<wfw:commentRss>http://programmingzen.com/2009/08/24/recommended-ruby-and-rails-books/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Do programmers still buy printed books?</title>
		<link>http://programmingzen.com/2009/08/15/do-programmers-still-buy-printed-books/</link>
		<comments>http://programmingzen.com/2009/08/15/do-programmers-still-buy-printed-books/#comments</comments>
		<pubDate>Sat, 15 Aug 2009 16:11:57 +0000</pubDate>
		<dc:creator>Antonio Cangiano</dc:creator>
				<category><![CDATA[Books]]></category>
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://antoniocangiano.com/?p=1073</guid>
		<description><![CDATA[Yesterday I published a post titled My latest order of programming books, which received a fair number of comments both here and elsewhere online. Aside from a few good suggestions for other must-read books for programmers, there were several comments about how buying hard copies of books in this day and age is stupid. A [...]]]></description>
			<content:encoded><![CDATA[<p>Yesterday I published a post titled <a href="http://antoniocangiano.com/2009/08/14/my-latest-order-of-programming-books/">My latest order of programming books</a>, which received a fair number of comments both here and elsewhere online.</p>
<p>Aside from a few good suggestions for other must-read books for programmers, there were several comments about how buying hard copies of books in this day and age is stupid. A few advocated piracy as an alternative to buying books, printed or not. Aren&#8217;t we supposed to be a group of professionals? Do we really believe that pirating books is the right answer to our profession&#8217;s need for knowledge?</p>
<p>The most sensible recommendations concerned the use of legally free, available material online, as well as suggestions that the $250 could be spent on services like <a href="http://www.safaribooksonline.com/">Safari Books Online</a>.</p>
<p>I love Safari Books Online. I used to have an extended trial account for a few months, and utilized it constantly. I have access to <a href="http://www.books24x7.com/books24x7.asp">Books24&#215;7</a>, an alternative, less extensive service as well.</p>
<p>Safari Books is ideal when used as a reference. You have access to thousands of books from major publishers, so virtually any search will lead you to a few relevant volumes dealing with the subject you&#8217;re looking for. It&#8217;s also great for keeping up to date with technology, thanks to &#8220;Rough Cuts&#8221; which are books that haven&#8217;t been completed yet.</p>
<p>It&#8217;s an extremely valuable service and I would recommend it to anyone in a heart beat. However, there a few reasons why I still buy hard copies.</p>
<p>I spend long hours working and staring at the computer screen. A printed book is a chance to take a break at night, and let my eyes rest a little. I find it refreshing. And let&#8217;s face it, for extensive reading, paper is much easier to read from than the screen.</p>
<p>Likewise, when I&#8217;m holding a book or have it open on my desk, I&#8217;m in &#8220;book reading mode&#8221;, which makes it far easier to immerse myself in it. This means that I&#8217;m focused on the task and can proceed quickly. The only context switch that happens is between the book and the editor/shell, if it&#8217;s the kind of book that warrants typing along. If you are reading a book in a browser tab, it&#8217;s very easy to think, &#8220;I&#8217;ll just check my email for a second&#8221;, or introduce similar distractions. I&#8217;m sure I&#8217;m not alone in this respect.</p>
<p>When I buy a physical copy of a book, I feel psychologically more obliged to at least try to get through it. Online I experience a <a href="http://en.wikipedia.org/wiki/index.html?curid=14872453">paradox of choice</a> of sort. With hundreds of interesting books available there in front of me, I&#8217;m more inclined to excessively multitask, and end up checking out different books while I should still be reading the current one.</p>
<p>And let&#8217;s not forget that not all books are legally available online. I&#8217;ve found that many advanced computer science books are not yet available on Safari Books or Books24&#215;7. For example, <a href="http://www.amazon.com/gp/product/0201485419?ie=UTF8&#38;tag=zenruby-20&#38;linkCode=as2&#38;camp=1789&#38;creative=9325&#38;creativeASIN=0201485419">The Art of Computer Programming</a>, <a href="http://www.amazon.com/gp/product/0521663504?ie=UTF8&#38;tag=zenruby-20&#38;linkCode=as2&#38;camp=1789&#38;creative=9325&#38;creativeASIN=0521663504">Purely Functional Data Structures</a>, <a href="http://www.amazon.com/gp/product/0262162091?ie=UTF8&#38;tag=zenruby-20&#38;linkCode=as2&#38;camp=1789&#38;creative=9325&#38;creativeASIN=0262162091">Types and Programming Languages</a>, <a href="http://www.amazon.com/gp/product/0201657880?ie=UTF8&#38;tag=zenruby-20&#38;linkCode=as2&#38;camp=1789&#38;creative=9325&#38;creativeASIN=0201657880">Programming Pearls</a>, and other worthy suggestions that were made in response to my first post, are all not available on Safari Books. As well, mathematical books that can be of use to the serious/discerning programmer are also not included (understandably).</p>
<p>Lastly, and I realize that this is a &#8220;vanity point&#8221; and perhaps the most irrational one on this list, I like to have a beautiful collection of books on my bookshelves. If I&#8217;m going to spend $xxx a year on books, I&#8217;d prefer to have something to show for, beside my newly acquired knowledge.</p>
<p>However, the sheer volume of free available content has slowed down the number of books I&#8217;ve purchased in the past few years. And I&#8217;m thinking about re-joining Safari Books Online nevertheless, as I see it as being complementary to printed books. The <a href="https://ssl.safaribooksonline.com/subscribe">Safari Library</a> option is somewhat expensive ($42.99 per month), but for the price of an extra printed book per month, I gain full access to a huge catalog of programming books and a growing list of &#8220;Rough Cuts&#8221;.</p>
<p>With the amount of free knowledge available, useful paid services, research papers, and relatively good deals on printed copies from Amazon, the real constraint remains time not money. But claiming that purchasing hard copies is obsolete or worse, stupid, is&#8230; well, asinine, in my opinion.</p>
<p>What&#8217;s your take? Do you think Safari Books Online is worth it? Do you still buy printed copies of your professional books? Do you <a href="http://www.joelonsoftware.com/items/2008/04/16.html">even read programming books</a> at all these days?</p>
]]></content:encoded>
			<wfw:commentRss>http://programmingzen.com/2009/08/15/do-programmers-still-buy-printed-books/feed/</wfw:commentRss>
		<slash:comments>37</slash:comments>
		</item>
		<item>
		<title>My latest order of programming books</title>
		<link>http://programmingzen.com/2009/08/14/my-latest-order-of-programming-books/</link>
		<comments>http://programmingzen.com/2009/08/14/my-latest-order-of-programming-books/#comments</comments>
		<pubDate>Fri, 14 Aug 2009 15:23:26 +0000</pubDate>
		<dc:creator>Antonio Cangiano</dc:creator>
				<category><![CDATA[Books]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Reviews]]></category>

		<guid isPermaLink="false">http://antoniocangiano.com/?p=1063</guid>
		<description><![CDATA[A few days ago it was my birthday. This year I decided to reward my aging self with some books I&#8217;d had my eyes on. My budget was roughly $250, nothing to snicker at, but programming and computer science books aren&#8217;t exactly famous for being inexpensive. The hardest part was shortlisting only a few titles, [...]]]></description>
			<content:encoded><![CDATA[<p>A few days ago it was my birthday. This year I decided to reward my aging self with some books I&#8217;d had my eyes on. My budget was roughly $250, nothing to snicker at, but programming and computer science books aren&#8217;t exactly famous for being inexpensive.</p>
<p>The hardest part was shortlisting only a few titles, out of a substantial number of books that interest me. This ruthless streamlining was not solely motivated by cost either. Time is by far the most non-negotiable constraint, and as pretty as certain books may look on my shelves, I&#8217;d rather get titles that I know I will reference often or read cover to cover.</p>
<p>Last night I finally placed my order on Amazon. Narrowing down my choices wasn&#8217;t easy, but I think I was able to get a lot of bang for my buck, so to speak. I&#8217;m sharing the list of books I ordered, and my rationale behind selecting them, in the hope that some readers will find this information useful. You&#8217;ll probably find one book at least that tickles your fancy.</p>
<p align="center"><a href="http://www.amazon.com/gp/product/0735611319?ie=UTF8&#038;tag=zenruby-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=0735611319"><img border="0" src="/images/31t68r9K28L._SL160_.jpg"><br />1) Code: The Hidden Language of Computer Hardware and Software</a> by Charles Petzold</p>
<p>Very high-level languages have major advantages, but they tend to conceal many details. As a result these low-level details are often forgotten, overlooked or no longer taught. I&#8217;m talking about gates, bit manipulation, etcetera. Ten years have passed since I last sat in a computer architecture class or programmed in the MIPS assembly language, so I see this book as a refresher about this sort of interesting details that lay between hardware and software.</p>
<p align="center"><a href="http://www.amazon.com/gp/product/0321543726?ie=UTF8&#038;tag=zenruby-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=0321543726"><img border="0" src="/images/51TGVYzL%2BUL._SL160_.jpg"><br />2) Programming: Principles and Practice Using C++</a> by Bjarne Stroustrup</p>
<p>I&#8217;ve been meaning to get more serious about learning C++ for a while now. The fact that I chose this book may seem odd. After all, it&#8217;s a C++ book for CS 101. I&#8217;m fully aware that I won&#8217;t find many new concepts in it and that the pace will probably be very slow to me at time, as it&#8217;s aimed towards newcomers. I opted for this book, among other reasons, because it&#8217;s very recent and was written by Bjarne Stroustrup (C++&#8217;s creator) himself. It&#8217;s a modern overview of C++ today and should cover all the essentials of writing portable code with a slant towards real world work, including parts of the <abbr title="Standard Template Library">STL</abbr>. I&#8217;m interested in revisiting well known concepts from the perspective of C++, and this title should work as a good introduction before I switch to <a href="http://www.amazon.com/gp/product/0201700735?ie=UTF8&#038;tag=zenruby-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=0201700735">The C++ Programming Language</a>, <a href="http://www.amazon.com/gp/product/0321334876?ie=UTF8&#038;tag=zenruby-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=0321334876">Effective C++</a>, <a href="http://www.amazon.com/gp/product/020163371X?ie=UTF8&#038;tag=zenruby-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=020163371X">More Effective C++</a>, <a href="http://www.amazon.com/gp/product/0201615622?ie=UTF8&#038;tag=zenruby-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=0201615622">Exceptional C++</a>, and other advanced books. Lastly, I chose it because <a href="http://phusion.nl">a good friend</a> suggested it to me.</p>
<p align="center"><a href="http://www.amazon.com/gp/product/0262182629?ie=UTF8&#038;tag=zenruby-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=0262182629"><img border="0" src="/images/51UPLtYbwkL._SL160_.jpg"><br />3) Processing: A Programming Handbook for Visual Designers and Artists</a> by Casey Reas</p>
<p>Processing is another language I&#8217;m interested in. The idea of creating fancy visualizations of data is very appealing to my statistical side. This is probably another &#8220;basic&#8221; book, but I wanted to have a detailed tutorial on the subject. It&#8217;s also a very beautiful book. (Remember that deep down we are all hedonists.)</p>
<p align="center"><a href="http://www.amazon.com/gp/product/0132350882?ie=UTF8&#038;tag=zenruby-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=0132350882"><img border="0" src="/images/419EFaGEGvL._SL160_.jpg"><br />4) Clean Code: A Handbook of Agile Software Craftsmanship</a> by Robert C. Martin</p>
<p>I love &#8220;Uncle Bob&#8221;&#8216;s writing style and this book is, according to many, a wonderful addition to any software engineer&#8217;s collection. Apparently it&#8217;s <a href="http://www.amazon.com/gp/product/0735619670?ie=UTF8&#038;tag=zenruby-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=0735619670">Code Complete</a> meets <a href="http://www.amazon.com/gp/product/0201485672?ie=UTF8&#038;tag=zenruby-20&#038;linkCode=xm2&#038;camp=1789&#038;creativeASIN=0201485672">Refactoring</a> meets <a href="http://www.amazon.com/gp/product/0321146530?ie=UTF8&#038;tag=zenruby-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=0321146530">Test Driven Development: By Example</a>, all wrapped up in a single book. As much as that&#8217;s possible, naturally.</p>
<p align="center"><a href="http://www.amazon.com/gp/product/0262560992?ie=UTF8&#038;tag=zenruby-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=0262560992"><img border="0" src="/images/41RWS3BB0VL._SL160_.jpg"><br />5) The Little Schemer (4th Edition)</a> by Daniel P. Friedman</p>
<p>This is the first little volume in the &#8220;The * Schemer&#8221; trilogy. I&#8217;ve heard great things about this unusual Q&#038;A book that straddles the border of functional and logic programming. I&#8217;m not new to functional programming, but I&#8217;m certain that this book will be an eye-opener nevertheless. There should be plenty of fun exercises inside. If I enjoy it as much as I hope, I&#8217;ll also get <a href="http://www.amazon.com/gp/product/026256100X?ie=UTF8&#038;tag=zenruby-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=026256100X">The Seasoned Schemer</a> and <a href="http://www.amazon.com/gp/product/0262562146?ie=UTF8&#038;tag=zenruby-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=0262562146">The Reasoned Schemer</a>, down the line to bring my understanding to the next level.</p>
<p align="center"><a href="http://www.amazon.com/gp/product/0262033844?ie=UTF8&#038;tag=zenruby-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=0262033844"><img border="0" src="/images/41hJ7gLDOmL._SL160_.jpg"><br />6) Introduction to Algorithms, Third Edition</a> by Thomas H. Cormen</p>
<p>I own the second edition of this book, but guess what? They just released a revised edition with updated content, new algorithms and it&#8217;s been expanded to take the world of multiple processors into account. If you are not familiar with this classic, don&#8217;t let the title mislead you, this is no &#8220;introduction&#8221;. It&#8217;s an excellent, rigorous tutorial and reference that every programmer should own.</p>
<p align="center"><a href="http://www.amazon.com/Elements-Programming-Alexander-Stepanov/dp/032163537X/?ie=UTF8&#038;tag=zenruby-20"><img border="0" src="/images/41dJEbLUXeL._SL160_.jpg"><br />7) Elements of Programming</a> by by Alexander Stepanov</p>
<p>The toughest book of the lot. This newly released theory of computation book has incredible reviews. It should be a rigorous handbook of the mathematical foundations of programming. And at <a href="http://www.amazon.com/Elements-Programming-Alexander-Stepanov/dp/032163537X/?ie=UTF8&#038;tag=zenruby-20">this price</a> it&#8217;s a bargain, in my opinion. The examples are in C++, so I&#8217;ll quote part of the review by Bjarne Stroustrup.</p>
<blockquote><p>&#8220;Elements&#8221; is a great book in that it can change the way you think about programming in fundamental ways: If you &#8220;get it&#8221; programming will never be the same again for you.</p>
<p>Reading &#8220;Elements&#8221; requires maturity both with mathematics and with software development. Even then it is so different from most books on programming that it can be hard going. The frequent comparisons of &#8220;Elements&#8221; to Knuth&#8217;s &#8220;The Art of Programming&#8221; is well earned.<br />&mdash;  Bjarne Stroustrup</p></blockquote>
<p>What are your thoughts on this list? I think I could have done a lot worse with my modest $250 budget. And as you can imagine, I&#8217;m pretty excited about their arrival and am looking forward to diving into them.</p>
<p>On a side note, this reminds me that I should start writing detailed reviews for the most interesting books I&#8217;ve read over the past few years, not just for <a href="http://antoniocangiano.com/ruby-and-rails-recommended-books/">Ruby books</a> (recently updated) and <a href="http://antoniocangiano.com/rails-books/">Rails ones</a> (to be updated soon).</p>
<p><small>Disclaimer: The links to Amazon have my referral. It&#8217;s a small contribution to this blog that won&#8217;t cost you a dime. If you are opposed to me making a few cents from my posts, feel free to select, copy and then paste the title that interests you into Google.</small></p>
]]></content:encoded>
			<wfw:commentRss>http://programmingzen.com/2009/08/14/my-latest-order-of-programming-books/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Ruby 1.9 screencasts plus an announcement</title>
		<link>http://programmingzen.com/2009/05/14/ruby-19-screencasts-plus-an-announcement/</link>
		<comments>http://programmingzen.com/2009/05/14/ruby-19-screencasts-plus-an-announcement/#comments</comments>
		<pubDate>Fri, 15 May 2009 02:54:56 +0000</pubDate>
		<dc:creator>Antonio Cangiano</dc:creator>
				<category><![CDATA[Reviews]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Screencasts]]></category>
		<category><![CDATA[Startup]]></category>

		<guid isPermaLink="false">http://antoniocangiano.com/?p=755</guid>
		<description><![CDATA[Previously I mentioned the importance of migrating away from Ruby 1.8, in favor of 1.9. Before my business trip to Italy, I had a chance to watch David A. Black&#8217;s new videos for Envycast, in which he presents the essential concepts required to migrate from Ruby 1.8 to 1.9. This pair of videos totals roughly [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://antoniocangiano.com/2009/03/23/rubys-biggest-challenge-for-2009/">Previously</a> I mentioned the importance of migrating away from Ruby 1.8, in favor of 1.9. Before my business trip to Italy, I had a chance to watch <a href="http://envycasts.com/products/ruby-19-package-deal">David A. Black&#8217;s new videos for Envycast</a>, in which he presents the essential concepts required to migrate from Ruby 1.8 to 1.9. This pair of videos totals roughly an hour and a quarter, and can be purchased in a package deal for $16. You probably won&#8217;t find them to be as entertaining as the ones filled with gags by Gregg Pollack and Jason Seifer, but in my opinion these videos are well thought out and highly informative. The price is fair if you consider that they can bring you up to speed with Ruby 1.9 in no time at all and with very little effort on your part.</p>
<p><a href="http://ThinkCode.TV"><img src="http://antoniocangiano.com/images/tctv.png" alt="ThinkCode.TV: Video di programmazione" title="ThinkCode.TV: Video di programmazione" align="right" /></a>Speaking of screencasts, in Italy I had a chance to pre-announce my &#8220;startup on the side&#8221;. It&#8217;s called <a href="http://thinkcode.tv/">ThinkCode.TV</a> and will, you guessed it, create and sell high quality screencasts about programming. ThinkCode.TV was founded with a couple of friends of mine who are top notch programmers and teachers respectively in the Python and the XP/Agile world. Initially we&#8217;ll focus on the Italian market (the three of us are Italian) by producing screencasts in Italian about Ruby, Python and TDD. But we plan to expand our horizons, by covering more subjects, accepting external authors, and eventually expanding to the international market by migrating our best sellers to English versions, narrated by native English speakers (to save you the hassle of having to hear a foreign accent).</p>
<p>Should things go well, we may expand beyond the Italian and English markets. But for the time being, I invite Italian speakers to <a href="http://thinkcode.tv/">join our newsletter</a> (which is in Italian) to learn about the development of this project and be advised of when we release the first videos. When we branch out to the English speaking world, my readers who don&#8217;t speak Italian, will be able to learn about it through this blog.</p>
]]></content:encoded>
			<wfw:commentRss>http://programmingzen.com/2009/05/14/ruby-19-screencasts-plus-an-announcement/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>New look and feel. Do you like it?</title>
		<link>http://programmingzen.com/2009/03/16/new-look-and-feel-do-you-like-it/</link>
		<comments>http://programmingzen.com/2009/03/16/new-look-and-feel-do-you-like-it/#comments</comments>
		<pubDate>Mon, 16 Mar 2009 04:57:32 +0000</pubDate>
		<dc:creator>Antonio Cangiano</dc:creator>
				<category><![CDATA[Books]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Ruby on Rails]]></category>

		<guid isPermaLink="false">http://antoniocangiano.com/?p=659</guid>
		<description><![CDATA[Those who follow this blog through the feed, may not have noticed it, but over the weekend I had a chance to revamp the look of Zen and the Art of Programming. I used a WordPress theme I&#8217;d already employed on Math Blog and customized it, basing my changes on the suggestions of the participants [...]]]></description>
			<content:encoded><![CDATA[<p>Those who follow this blog through the <a href="http://feeds2.feedburner.com/ZenAndTheArtOfRubyProgramming">feed</a>, may not have noticed it, but over the weekend I had a chance to revamp the look of <a href="http://antoniocangiano.com/">Zen and the Art of Programming</a>. I used a WordPress theme I&#8217;d already employed on <a href="http://math-blog.com/">Math Blog</a> and customized it, basing my changes on the suggestions of the participants of <a href="http://antoniocangiano.com/2008/11/06/take-this-survey-and-win-a-free-ticket-for-the-professional-ruby-conference/">my earlier survey</a> on the subject. I&#8217;m not a web designer by any means, but I&#8217;m quite happy with the way it looks and the overall clean feel this new layout lends the site. What do you think about it?</p>
<p>While at it, I also updated my <a href="http://antoniocangiano.com/about/">About</a> page and added a thumbnail of the cover of my book to the sidebar. I finished writing <a href="http://www.amazon.com/gp/product/0470374950?ie=UTF8&#038;tag=zenruby-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=0470374950">Ruby on Rails for Microsoft Developers</a> a couple of months ago and am now waiting for Wrox to do their magic and get it into stores. The book should leave Wrox&#8217;s warehouse towards the end of this month and reach customers in early April. But I&#8217;ll talk about my book and the subject of writing a technical book more in future posts.</p>
]]></content:encoded>
			<wfw:commentRss>http://programmingzen.com/2009/03/16/new-look-and-feel-do-you-like-it/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Scaling Rails Screencasts</title>
		<link>http://programmingzen.com/2009/02/26/scaling-rails-screencasts/</link>
		<comments>http://programmingzen.com/2009/02/26/scaling-rails-screencasts/#comments</comments>
		<pubDate>Thu, 26 Feb 2009 22:48:37 +0000</pubDate>
		<dc:creator>Antonio Cangiano</dc:creator>
				<category><![CDATA[Reviews]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Ruby on Rails]]></category>

		<guid isPermaLink="false">http://antoniocangiano.com/?p=628</guid>
		<description><![CDATA[Within the Rails community, New Relic is a company that doesn&#8217;t need any introductions. They are synonymous with performance and reliability, thanks to their RPM product for monitoring, detecting, and fixing Rails application performance problems in real time. What everybody may not have noticed though, is that New Relic started something called RailsLab, a site [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://antoniocangiano.com/images/scalingrails.png" alt="Scaling Rails" align="right" />Within the Rails community, New Relic is a company that doesn&#8217;t need any introductions. They are synonymous with performance and reliability, thanks to their <a href="https://rpm.newrelic.com/affiliates/IBM521/signup">RPM product</a> for monitoring, detecting, and fixing Rails application performance problems in real time.</p>
<p>What everybody may not have noticed though, is that New Relic started something called <a href="http://railslab.newrelic.com">RailsLab</a>, a site in which they publish videos and other useful information about scaling and improving the performance of Rails applications.</p>
<p>The first series, known as <a href="http://railslab.newrelic.com/scaling-rails">Scaling Rails</a>, produced in collaboration with my friend <a href="http://envycasts.com/">Gregg Pollack</a>, is absolutely impressive. The following is a list of the videos they&#8217;ve posted so far (they&#8217;re also available through <a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=303252563">iTunes</a>):</p>
<ol>
<li><a href="http://railslab.newrelic.com/2009/01/22/introduction">Introduction</a></li>
<li><a href="http://railslab.newrelic.com/2009/01/22/page-responsiveness">Page Responsiveness</a></li>
<li><a href="http://railslab.newrelic.com/2009/01/22/page-caching">Page Caching</a></li>
<li><a href="http://railslab.newrelic.com/2009/01/22/cache-expiration">Chache Expiration</a></li>
<li><a href="http://railslab.newrelic.com/2009/01/22/new-relic-rpm">New Relic RPM</a></li>
<li><a href="http://railslab.newrelic.com/2009/02/05/episode-5-advanced-page-caching">Advanced Page Caching</a></li>
<li><a href="http://railslab.newrelic.com/2009/02/09/episode-6-action-caching">Action Caching</a></li>
<li><a href="http://railslab.newrelic.com/2009/02/09/episode-7-fragment-caching">Fragment Caching</a></li>
<li><a href="http://railslab.newrelic.com/2009/02/19/episode-8-memcached">Memcahed</a></li>
<li><a href="http://railslab.newrelic.com/2009/02/19/episode-9-taylor-weibley-databases">Taylor Weibley &#038; Databases</a></li>
<li><a href="http://railslab.newrelic.com/2009/02/25/episode-10-client-side-caching">Client-side Caching</a></li>
<li><a href="http://railslab.newrelic.com/2009/02/26/episode-11-advanced-http-caching">Additional HTTP Caching</a></li>
</ol>
<p>I was surprised to see so little mention of these fantastic short tutorials in the blogosphere. These videos are a gold mine of information, which is made all the more better by the fact that they&#8217;re entirely free. Do yourself a favor and check out these awesome clips, they&#8217;re well worth your time.</p>
]]></content:encoded>
			<wfw:commentRss>http://programmingzen.com/2009/02/26/scaling-rails-screencasts/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Sony Vaio FW Series: A Developer&#8217;s Review</title>
		<link>http://programmingzen.com/2009/02/16/review-of-the-sony-vaio-fw-series/</link>
		<comments>http://programmingzen.com/2009/02/16/review-of-the-sony-vaio-fw-series/#comments</comments>
		<pubDate>Mon, 16 Feb 2009 11:03:21 +0000</pubDate>
		<dc:creator>Antonio Cangiano</dc:creator>
				<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Reviews]]></category>

		<guid isPermaLink="false">http://antoniocangiano.com/?p=565</guid>
		<description><![CDATA[For the past three months or so I haven&#8217;t had a computer of my own. This is not as bad as it sounds, because I&#8217;ve had work hardware, but such computers are intended to be used for work purposes only. Now that DB2 on Mac has been released, I&#8217;m waiting on the new 17&#8243; MacBook [...]]]></description>
			<content:encoded><![CDATA[<p>For the past three months or so I haven&#8217;t had a computer of my own. This is not as bad as it sounds, because I&#8217;ve had work hardware, but such computers are intended to be used for work purposes only. Now that <a href="http://www-01.ibm.com/software/data/db2/express/download.html?S_CMP=ECDDWW01&#038;S_TACT=ACDB201">DB2 on Mac</a> has been released, I&#8217;m waiting on the new 17&#8243; MacBook Pro, which will be added to the setup as well, but again, that&#8217;s a work machine and it won&#8217;t arrive for at least a month due to delays on Apple&#8217;s side. Long story short, I grew tired of being without a personal laptop after my own MacBook Pro died numerous weeks ago, so I decided to take the plunge and purchase a moderately priced replacement. What follows is a review of the laptop I ended up purchasing as my day-to-day personal model, after a lot of careful consideration, and a list of features I required (in order of priority).</p>
<h4>My requirements</h4>
<ul>
<li>My main operating system needs to be Ubuntu, so most components should work with Linux.</li>
<li>A relatively fast machine for development. It should be able to handle Aptana Studio, NetBeans and even Visual Studio occasionally (without breaking a sweat).</li>
<li>An entertainment laptop. I want to be able to watch hi-definition movies from the comfort of my bed at night. To do this a large, wide screen, high resolution, and a Blue-Ray reader were paramount.</li>
<li>It needed to be able to facilitate backups for several gigabytes of data, which means it needed to have a combo drive that&#8217;s able to burn DVDs.</li>
<li>Sturdy overall construction.</li>
<li>Look sleek and be relatively ergonomic.</li>
<li>It had to be affordable (my budget was roughly $1500/1600 CND).</li>
</ul>
<h4>My choice</h4>
<p>Believe it or not, there weren&#8217;t too many available choices that were able to satisfy my requirements and my budget. For a while I had a crush on the <a href="http://www1.ca.dell.com/content/products/productdetails.aspx/laptop-studio-xps-16?c=ca&#038;l=en&#038;s=dhs&#038;cs=cadhs1">Dell XPS 16</a>, but unfortunately the Full HD option and the Blue-Ray/DVD Burner combo jacked the cost up several hundred dollars over my budget. This model is also well known for its tendency to become extremely hot (e.g., 115° F) while on your lap, and after the problems with heat that my old MacBook Pro had, I decided that this model was definitely a no-go.</p>
<p>After researching numerous models, I finally came across the perfect match: the Sony Vaio VGN-FW285D/H for $1600 CND (listed price $1650 CND). The exact model names and configurations change from country to country, and even in Canada, several lower end models exist (and there&#8217;s also a &#8220;configure to order&#8221; option which ends up being slightly more expensive spec-by-spec).</p>
<p align="center"><a href="http://www.amazon.com/gp/product/B001F50K2M?ie=UTF8&#038;tag=antoniocangia-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=B001F50K2M"><img src="http://antoniocangiano.com/images/vaio1.jpg" alt="Sony Vaio FW285D/H" title="Sony Vaio FW285D/H" /></a></p>
<p>The titanium gray model I purchased has the following specifications:</p>
<ul>
<li>Intel Core 2 Duo Processor P8400, 2.26GHz FSB 1066MHz, 3MB L2 Cache</li>
<li>4GB RAM PC2-6400 (2GBx2) (Max 4GB)</li>
<li>320GB SATA disk (7200RPM)</li>
<li>ATI Mobility Radeon HD 3650 with 512MB dedicated VRAM (incorrectly listed as 256MB on the Canadian site)</li>
<li>16.4&#8243; Screen, XBRITE-Full HD (1920 x 1080), HDMI and VGA out with Smart Display Sensor</li>
<li>Blue-Ray Burner (Burns CDs, DVDs, and BDs, including dual layer)</li>
<li>Intel WiFi Link 5100AGN (802.11a/b/g/n)</li>
<li>Windows Vista Home Premium 64bit SP1</li>
</ul>
<p>And of course it comes with the usual yadda-yadda: 1.3MPix Motion Eye camera, Dolby Sound (pretty good), a bunch of media cards readers, 3 USB 2.0 ports, a Firewire port (IEEE 1394), Gigabit Ethernet, modem, Bluetooth, etcetera. If you are purchasing this laptop in the States, you can get <a href="http://www.amazon.com/gp/product/B001F50K2M?ie=UTF8&#038;tag=antoniocangia-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=B001F50K2M">the same model on Amazon.com</a> for only $1295.</p>
<h4>What I like about this computer</h4>
<p>There are many things that appeal to me about this laptop:</p>
<ul>
<li><b>Performance</b>: Talk about a fast laptop! Faster than my previous MacBook Pro. There are speedier processors on the market, but the P8400 is plenty quick as far as I can tell. This Vaio is also very snappy thanks to its large 7200rpm hard drive &#8211; something that I really appreciate as a developer and photography enthusiast. Despite Vista being Vista, it&#8217;s a very fast computer which boots up in a few seconds and can run heavy IDEs no questions asked. On Ubuntu (more on this later) it&#8217;s extremely fast. Finally, not being a heavy gamer, I find the ATI HD 3650 with 512MB VRAM more than adequate for everything I need to do.</li>
<li><b>Full HD Screen</b>: I find the screen on this laptop to be spectacular. Colors are crisp and vivid, with excellent antiglare control. The view angle is remarkable too, you could easily seat four people around the laptop and they would all see a nice, crisp picture. It&#8217;s ideal for presentations and demos when a projector isn&#8217;t on hand. The 16:9 aspect ratio is amazing for watching movies, and very useful when trying to have more than one window open on the screen simultaneously. My wife and I watched a blue-ray movie on it and were both blown away by how awesome the whole full-hd experience (on this laptop) was. As I switched from the notebook to a desktop that&#8217;s hooked up to a Samsung SyncMaster 275t, the external monitor felt dull all of a sudden.</li>
<li><b>Blue-Ray burner:</b> This is overkill &#8211; good overkill, that is. I would have been happy with a Blue-Ray reader and a DVD writer, but the presence of a Blue-Ray recorder really makes this laptop shine. Yes, blank Blue-Ray media is still expensive, but prices are coming down, and the ability to backup 25 or 50GB on a single disk is an extremely welcome bonus.</li>
<li><b>Cool and quiet</b>: Despite the size and processing power, this laptop is definitely on the quiet side and I must say that even under stress, it remains relatively cool. The heat exhaust is on the left side, so you can safely place the laptop on your lap or on a table, without experiencing a huge deal of heat or having it shut down like some laptops are prone to doing.</li>
<li><b>Construction and Ergonomics</b>: I find the notebook to be very well constructed. It&#8217;s sturdy and feels very solid, though it doesn&#8217;t feel quite as solid as a unibody MacBook Pro. I believe the lid chassis is made of metal, while the rest is constructed from durable plastic. The area where your wrists rest is made of plastic but almost feels like aluminium. There is also a slight slope between the touchpad and keyboard that makes typing very comfortable. Overall, despite the large screen, this laptop is not cumbersome, and it definitely packs a sleek, modern design which is likely to appeal to many. It sits comfortably on my laps and isn&#8217;t particularly heavy either. Sure, it&#8217;s not an ultra-portable sized computer, but considering its 16.4&#8243; screen, I think it&#8217;s still fairly easy to tote around. The keyboard is Mac-like, even though to be fair, this style of keyboard (wherein the keys are neatly separated from each other) was first adopted by Sony and later implemented by Apple. The touchpad is nice too with very smooth scrolling (always a plus).</li>
<li><b>Reliable wi-fi</b>: So far the wi-fi connection seems to be working very reliably. It has been connected with full signal since the first moment I provided credentials to my wireless network, and the speed appears to be great. Other laptops I&#8217;ve tried in my house have been far less reliable.</li>
<li><b>Compatible with Linux</b>: More on this topic below.</li>
<li><b>HDMI Output</b>: Having a single HDMI output (for both audio and video) made connecting the laptop to my HDTV a breeze.</li>
<li><b>Free Blue-Ray movies</b>: In Canada the laptop came with three Blue-Ray movies. This isn&#8217;t a big selling point, but it&#8217;s a nice bonus. In my case, I received Casino Royale, Hitch, and Surf&#8217;s Up.</li>
</ul>
<p align="center"><img src="http://antoniocangiano.com/images/vaio2.jpg" alt="Sony Vaio FW285D/H" title="Sony Vaio FW285D/H" /></p>
<h4>What I dislike about this laptop</h4>
<p>It is hard to find negative things to say about the FW285D/H, especially if you consider the wealth of features and its affordable price tag. But I&#8217;m going to nitpick a bit, so as to make the review more informative:</p>
<ul>
<li>The high resolution implies that fonts tend to be on the smaller side of things. This, depending on the user, can be a pro or a con, but be aware of it beforehand if you tend to like your font size on the hefty side.</li>
<li>On Windows the current drivers seem to only offer the spectacular 1920&#215;1080 resolution and two other very low resolutions. I don&#8217;t see intermediary resolutions like 1366×768, which would make the font larger for whenever you don&#8217;t need that extra bit of space on the screen. <strong>Update</strong>: I have blogged about a solution for this <a href="http://antoniocangiano.com/2009/02/16/unlocking-intermediate-resolutions-on-sony-vaio-fws/">here</a>.</li>
<li>A fair number of Sony software/utilities are preinstalled on the system. There is also a trial version of Microsoft Office and Windows Live OneCare, which I uninstalled and replaced with the home version of <a href="http://www.avast.com/eng/avast_4_home.html">Avast</a> instead.</li>
<li>Media for Windows Vista (or a recovery DVD) is not provided. The user is expected to burn their own recovery DVDs (3 regular DVDs or 2 double layers) through a Sony utility. These are copied from an EISA hidden partition (10.2GB) which can be deleted afterwards. To delete the partition you will need diskpart, <a href="http://forum.notebookreview.com/showthread.php?p=2367169">as explained here</a>.</li>
<li>The Canadian version came with a keyboard that has both English and French labels. The bi-lingual layout is slightly different than a regular US keyboard, so it takes a little while to get your mind used to having keys like this if you want touch type at full speed. Of course, if you are a French Canadian (or anyone else who types French), you&#8217;ll enjoy the bilingual nature of the keyboard. If you purchase the laptop from the States, you won&#8217;t encounter the dual language keyboard, of course.</li>
<li>Sony disables Intel VT support on most Vaios (I think it&#8217;s unbelievably stupid of them). This means that if you were to use a virtualization program like vmware, you&#8217;d obtain a 20/30% slower VM. This is not a huge deal for me (I run my VMs on a Quad-Core desktop) but it&#8217;s definitely something that has the potential to be annoying and which seems to be in place for no good reason (and, lastly, may or not be a deal breaker for you). I believe it can be enabled by patching a BIOS ROM dump, but it&#8217;s the kind of tinkering I&#8217;m not personally eager to do on the first day after my laptop purchase, especially since this point doesn&#8217;t really affect me. Should I develop an actual need for this, I will look into it and report my findings in this blog.</li>
</ul>
<p align="center"><img src="http://antoniocangiano.com/images/vaio3.jpg" alt="Sony Vaio FW285D/H vs MacBook Pro" title="Sony Vaio FW285D/H vs MacBook Pro"  /></p>
<h4>Linux compatibility</h4>
<p>On my laptop I have Vista and Ubuntu in dual boot. Ubuntu compatibility was very important to me because I intend to use Ubuntu as my main OS (particularly for development) and only use Vista when needed &#8211; or for entertainment purposes (e.g., playing Blue-Ray movies). The great news is that everything worked out of the box with Ubuntu 8.10 x64. And I mean everything that I could possibly test. Video, audio, wireless connection, bluetooth, hibernating, putting the laptop to sleep, you name it. Everything worked out of the box, which speaks volumes for both the compatibility of the <a href="http://www.amazon.com/gp/search?ie=UTF8&#038;keywords=Sony%20Vaio%20FW&#038;tag=antoniocangia-20&#038;index=pc-hardware&#038;linkCode=ur2&#038;camp=1789&#038;creative=9325">Sony Vaio FW Series</a> and the progress level of Ubuntu as a desktop operating system.</p>
<p>If you <a href="http://www.amazon.com/gp/product/B001F50K2M?ie=UTF8&#038;tag=antoniocangia-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=B001F50K2M">buy this laptop</a>, and plan to dual boot Ubuntu, you can save yourself a lot of headaches by paritioning your hard drive during the Ubuntu installation, from a live CD. You could use the hidden partition that you deleted as a swap partition, reduce the size of the Windows boot partition, and with all the free space left over create a partition for Ubuntu or add an extra Windows partition and an Ubuntu one. For example, I have a 60GB Windows Vista partition, a 190GB &#8220;media&#8221; NTFS partition which is accessed by both Windows and Linux, and then about 45GB allocated for Ubuntu. The first partition on the disk, which replaces the unallocated space created by deleting the EISA hidden partition, is a swap partition. Yes, with 4GB of RAM, I didn&#8217;t need such a big swap partition, but I had the free space all in one place and decided to go for it.</p>
<p>A word of caution for dual booters who are planning on having the Windows Vista partition as their second partition. You need to edit your menu.lst to change the Vista section from <code>root (hd0, 0)</code> to <code>root (hd0, 1)</code>. This correctly indicates where to find Vista when you select Windows from GRUB at boot time. If you don&#8217;t go through this step, you may face an Error 12: Invalid Disk Requested or similar messages.</p>
<h4>Conclusion</h4>
<p>The final verdict is more than positive. This is a very solid laptop with amazing features, for a reasonable price. Unless your budget is significantly larger than mine or your requirements wildly different, I think that the <a href="http://www.amazon.com/gp/search?ie=UTF8&#038;keywords=Sony%20Vaio%20FW&#038;tag=antoniocangia-20&#038;index=pc-hardware&#038;linkCode=ur2&#038;camp=1789&#038;creative=9325">Sony Vaio FW Series</a> won&#8217;t leave you disappointed. In particular, if you are looking for a development and entertainment laptop that will work with Ubuntu Linux, without any hassle, then this could be the answer for you, provided that the lack of virtualization is not a major issue (or you are willing to figure out how to enable it).</p>
<p>If you own this computer or end up buying it as well, definitely feel free to share your thoughts on it in the comment section.</p>
]]></content:encoded>
			<wfw:commentRss>http://programmingzen.com/2009/02/16/review-of-the-sony-vaio-fw-series/feed/</wfw:commentRss>
		<slash:comments>90</slash:comments>
		</item>
	</channel>
</rss>
