all repos — h3rald @ 6ed04d62656d222df819ecfd406a5afb3166d316

The sources of https://h3rald.com

Finished writing book review; updating tags and archives.
h3rald h3rald@h3rald.com
Tue, 22 Jun 2010 10:24:04 +0200
commit

6ed04d62656d222df819ecfd406a5afb3166d316

parent

b5555060ecf07f71d1482dff01243e44fe4e175f

50 files changed, 90 insertions(+), 102 deletions(-)

jump to
M content/archives/april-2006.textilecontent/archives/april-2006.textile

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

----- -:type: page :filters_pre: - erb +:type: page :permalink: april-2006 :title: "Archive: April 2006" -----
M content/archives/april-2008.textilecontent/archives/april-2008.textile

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

----- -:type: page :filters_pre: - erb +:type: page :permalink: april-2008 :title: "Archive: April 2008" -----
M content/archives/april-2009.textilecontent/archives/april-2009.textile

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

----- -:type: page :filters_pre: - erb +:type: page :permalink: april-2009 :title: "Archive: April 2009" -----
M content/archives/april-2010.textilecontent/archives/april-2010.textile

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

----- -:type: page :filters_pre: - erb +:type: page :permalink: april-2010 :title: "Archive: April 2010" -----
M content/archives/august-2006.textilecontent/archives/august-2006.textile

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

----- -:type: page :filters_pre: - erb +:type: page :permalink: august-2006 :title: "Archive: August 2006" -----
M content/archives/august-2007.textilecontent/archives/august-2007.textile

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

----- -:type: page :filters_pre: - erb +:type: page :permalink: august-2007 :title: "Archive: August 2007" -----
M content/archives/august-2008.textilecontent/archives/august-2008.textile

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

----- -:type: page :filters_pre: - erb +:type: page :permalink: august-2008 :title: "Archive: August 2008" -----
M content/archives/december-2005.textilecontent/archives/december-2005.textile

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

----- -:type: page :filters_pre: - erb +:type: page :permalink: december-2005 :title: "Archive: December 2005" -----
M content/archives/december-2007.textilecontent/archives/december-2007.textile

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

----- -:type: page :filters_pre: - erb +:type: page :permalink: december-2007 :title: "Archive: December 2007" -----
M content/archives/december-2008.textilecontent/archives/december-2008.textile

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

----- -:type: page :filters_pre: - erb +:type: page :permalink: december-2008 :title: "Archive: December 2008" -----
M content/archives/february-2006.textilecontent/archives/february-2006.textile

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

----- -:type: page :filters_pre: - erb +:type: page :permalink: february-2006 :title: "Archive: February 2006" -----
M content/archives/february-2009.textilecontent/archives/february-2009.textile

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

----- -:type: page :filters_pre: - erb +:type: page :permalink: february-2009 :title: "Archive: February 2009" -----
M content/archives/january-2006.textilecontent/archives/january-2006.textile

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

----- -:type: page :filters_pre: - erb +:type: page :permalink: january-2006 :title: "Archive: January 2006" -----
M content/archives/january-2007.textilecontent/archives/january-2007.textile

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

----- -:type: page :filters_pre: - erb +:type: page :permalink: january-2007 :title: "Archive: January 2007" -----
M content/archives/january-2008.textilecontent/archives/january-2008.textile

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

----- -:type: page :filters_pre: - erb +:type: page :permalink: january-2008 :title: "Archive: January 2008" -----
M content/archives/january-2009.textilecontent/archives/january-2009.textile

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

----- -:type: page :filters_pre: - erb +:type: page :permalink: january-2009 :title: "Archive: January 2009" -----
M content/archives/january-2010.textilecontent/archives/january-2010.textile

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

----- -:type: page :filters_pre: - erb +:type: page :permalink: january-2010 :title: "Archive: January 2010" -----
M content/archives/july-2006.textilecontent/archives/july-2006.textile

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

----- -:type: page :filters_pre: - erb +:type: page :permalink: july-2006 :title: "Archive: July 2006" -----
M content/archives/july-2007.textilecontent/archives/july-2007.textile

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

----- -:type: page :filters_pre: - erb +:type: page :permalink: july-2007 :title: "Archive: July 2007" -----
M content/archives/july-2008.textilecontent/archives/july-2008.textile

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

----- -:type: page :filters_pre: - erb +:type: page :permalink: july-2008 :title: "Archive: July 2008" -----
M content/archives/july-2009.textilecontent/archives/july-2009.textile

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

----- -:type: page :filters_pre: - erb +:type: page :permalink: july-2009 :title: "Archive: July 2009" -----
M content/archives/june-2005.textilecontent/archives/june-2005.textile

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

----- -:type: page :filters_pre: - erb +:type: page :permalink: june-2005 :title: "Archive: June 2005" -----
M content/archives/june-2006.textilecontent/archives/june-2006.textile

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

----- -:type: page :filters_pre: - erb +:type: page :permalink: june-2006 :title: "Archive: June 2006" -----
M content/archives/june-2007.textilecontent/archives/june-2007.textile

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

----- -:type: page :filters_pre: - erb +:type: page :permalink: june-2007 :title: "Archive: June 2007" -----
M content/archives/june-2008.textilecontent/archives/june-2008.textile

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

----- -:type: page :filters_pre: - erb +:type: page :permalink: june-2008 :title: "Archive: June 2008" -----
M content/archives/june-2009.textilecontent/archives/june-2009.textile

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

----- -:type: page :filters_pre: - erb +:type: page :permalink: june-2009 :title: "Archive: June 2009" -----
M content/archives/june-2010.textilecontent/archives/june-2010.textile

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

----- -:type: page :filters_pre: - erb +:type: page :permalink: june-2010 :title: "Archive: June 2010" ----- -<p>1 item was written in <em>June 2010</em>:</p> +<p>2 items were written in <em>June 2010</em>:</p> <ul> <% articles_by_month.select{|i| i[0] == "June 2010"}[0][1].each do |a|%> <%= render 'dated_article', :article => a %>
M content/archives/march-2006.textilecontent/archives/march-2006.textile

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

----- -:type: page :filters_pre: - erb +:type: page :permalink: march-2006 :title: "Archive: March 2006" -----
M content/archives/march-2007.textilecontent/archives/march-2007.textile

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

----- -:type: page :filters_pre: - erb +:type: page :permalink: march-2007 :title: "Archive: March 2007" -----
M content/archives/march-2008.textilecontent/archives/march-2008.textile

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

----- -:type: page :filters_pre: - erb +:type: page :permalink: march-2008 :title: "Archive: March 2008" -----
M content/archives/march-2009.textilecontent/archives/march-2009.textile

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

----- -:type: page :filters_pre: - erb +:type: page :permalink: march-2009 :title: "Archive: March 2009" -----
M content/archives/may-2006.textilecontent/archives/may-2006.textile

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

----- -:type: page :filters_pre: - erb +:type: page :permalink: may-2006 :title: "Archive: May 2006" -----
M content/archives/may-2008.textilecontent/archives/may-2008.textile

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

----- -:type: page :filters_pre: - erb +:type: page :permalink: may-2008 :title: "Archive: May 2008" -----
M content/archives/may-2009.textilecontent/archives/may-2009.textile

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

----- -:type: page :filters_pre: - erb +:type: page :permalink: may-2009 :title: "Archive: May 2009" -----
M content/archives/may-2010.textilecontent/archives/may-2010.textile

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

----- -:type: page :filters_pre: - erb +:type: page :permalink: may-2010 :title: "Archive: May 2010" -----
M content/archives/november-2005.textilecontent/archives/november-2005.textile

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

----- -:type: page :filters_pre: - erb +:type: page :permalink: november-2005 :title: "Archive: November 2005" -----
M content/archives/november-2006.textilecontent/archives/november-2006.textile

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

----- -:type: page :filters_pre: - erb +:type: page :permalink: november-2006 :title: "Archive: November 2006" -----
M content/archives/november-2007.textilecontent/archives/november-2007.textile

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

----- -:type: page :filters_pre: - erb +:type: page :permalink: november-2007 :title: "Archive: November 2007" -----
M content/archives/november-2008.textilecontent/archives/november-2008.textile

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

----- -:type: page :filters_pre: - erb +:type: page :permalink: november-2008 :title: "Archive: November 2008" -----
M content/archives/november-2009.textilecontent/archives/november-2009.textile

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

----- -:type: page :filters_pre: - erb +:type: page :permalink: november-2009 :title: "Archive: November 2009" -----
M content/archives/october-2007.textilecontent/archives/october-2007.textile

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

----- -:type: page :filters_pre: - erb +:type: page :permalink: october-2007 :title: "Archive: October 2007" -----
M content/archives/october-2008.textilecontent/archives/october-2008.textile

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

----- -:type: page :filters_pre: - erb +:type: page :permalink: october-2008 :title: "Archive: October 2008" -----
M content/archives/october-2009.textilecontent/archives/october-2009.textile

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

----- -:type: page :filters_pre: - erb +:type: page :permalink: october-2009 :title: "Archive: October 2009" -----
M content/archives/september-2006.textilecontent/archives/september-2006.textile

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

----- -:type: page :filters_pre: - erb +:type: page :permalink: september-2006 :title: "Archive: September 2006" -----
M content/archives/september-2007.textilecontent/archives/september-2007.textile

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

----- -:type: page :filters_pre: - erb +:type: page :permalink: september-2007 :title: "Archive: September 2007" -----
M content/archives/september-2008.textilecontent/archives/september-2008.textile

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

----- -:type: page :filters_pre: - erb +:type: page :permalink: september-2008 :title: "Archive: September 2008" -----
M content/archives/september-2009.textilecontent/archives/september-2009.textile

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

----- -:type: page :filters_pre: - erb +:type: page :permalink: september-2009 :title: "Archive: September 2009" -----
M content/articles/distributed-programming-with-ruby-review.glyphcontent/articles/distributed-programming-with-ruby-review.glyph

@@ -2,20 +2,21 @@ -----

type: article tags: - review +- books - ruby permalink: distributed-programming-with-ruby-review title: "Book Review: Distributed Programming with Ruby" toc: true pdf: true -summary: "A review of Mark Bates' Distributed Programming with Ruby. All you need to get started with the right tools to build large and scalable applications in Ruby." -date: 2010-06-21 08:53:15.139000 +02:00 +summary: "A review of Mark Bates' Distributed Programming with Ruby. Just what you need to get started with the right tools to build large and scalable applications in Ruby." +date: 2010-06-22 13:30:00.000000 +02:00 ----- &:[book|_Distributed Programming with Ruby_] &:[author|Mark Bates] &:[url|http://www.informit.com/store/product.aspx?isbn=0321638360] &:[linkedbook|=>[&[url]|&[book]]] &:[image|$[site.root]/img/pictures/distributed-programming-with-ruby.jpg] -&:[drb|=>[http://ruby-doc.org/stdlib/libdoc/drb/rdoc/index.html]dRuby] +&:[drb|=>[http://ruby-doc.org/stdlib/libdoc/drb/rdoc/index.html|DRb]] &:[rinda|=>[http://ruby-doc.org/stdlib/libdoc/rinda/rdoc/index.html|Rinda]] &:[pickaxe|=>[#unkwnown#|_Programming Ruby_]] rw:[pt|

@@ -25,15 +26,15 @@ ]

] --[--------------------------------------------------] textile[ -Back when I read &[pickaxe] for the first time, I distinctly remember a short reference to &[drb], the strong[d]istributed strong[r]u\.strong[b]y library included in the Standard Library. +Back when I read &[pickaxe] for the first time, I distinctly remember a short reference to &[drb], the strong[D]istributed strong[R]u\.strong[b]y library included in the Standard Library. _"Cool!"_ -- I thought -...and that was pretty much it. The documentation for drb was pretty much nonexistent (at the time), I didn't need it, so I pretty much forgot about it altogether until this book came out. +...and that was pretty much it. The documentation for DRb was pretty much nonexistent (at the time), I didn't need it, so I pretty much forgot about it altogether until this book came out. &[linkedbook] fills a very particular niche of the Ruby programming world: _distributed_ programming. Moreover, this book is somehow _justified_ by the scarce documentation on the subject: -bq. 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 FUD +bq. 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 FUD (fear, uncertainty, and doubt) about what these libraries can and cannot do, and when they are appropriate to use (if at all). p(((((. -- &[author], &[book]

@@ -43,18 +44,18 @@ ]

section[ @title[Overview] + image[@style[float:right;]&[image]] txt[ -The book is organized into five parts, each dealing with a particular set of Ruby libraries related in some ways to distributed programming. +The book is organized into four parts, each dealing with a particular set of Ruby libraries related to distributed programming. -The author, Mark Bates, does a good job maintaining a sort of continuity in the examples throughout the book: you'll get accustomed to a _Logger_ class of some kind being punctually re-implemented more or less once per chapter, using a different library. +The author, "Mark Bates":http://www.metabates.com/, does a good job maintaining a sort of continuity in the examples throughout the book: you'll get accustomed to a _Logger_ class of some kind being punctually re-implemented more or less once per chapter, using a different library. Additionally, the libraries described in the book are ordered by "reverse preference" 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. ] - image[@style[float:left;]&[image]] pt[I|Standard Library| -This part is the most important of all: it gives you the very basics about Distributed Programming and it describes the "building blocks" 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; if you don't know what &[drb] and &[rinda] are, that it. +This part is the most important of all: it gives you the very basics about Distributed Programming and it describes the "building blocks" (\.&[drb] and &[rinda]) 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. ] pt[II|Third-Party Frameworks and Libraries| If you read part I, you're probably a bit disappointed by DRb and Rinda and the amount of code you have to write to make simple things work in a distributed environment. The good news is that there are some Ruby gems out there that can make life simpler:

@@ -66,73 +67,59 @@ ]

pt[III|Distributed Message Queues| 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: * =>[http://rubyforge.org/projects/starling/|Starling], originally used by Twitter. -* =>[http://github.com/tmm1/amqp|AMQP], an implementation of the =>[http://www.amqp.org/|AMQP] protocol in Ruby, that can be used in conjunction with =>[http://www.rabbitmq.com/|RabbitMQ] an Erlang-based messaging system. +* =>[http://github.com/tmm1/amqp|AMQP], an implementation of the =>[http://www.amqp.org/|AMQP] protocol in Ruby, that can be used in conjunction with =>[http://www.rabbitmq.com/|RabbitMQ], an Erlang-based messaging system. ] pt[IV|Distributed Programming with Ruby on Rails| -Finally, the book ends somewhat abruptly with this 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 =>[http://backgroundrb.rubyforge.org/|BackgrounDRb] and =>[http://github.com/tobi/delayed_job|Delayed Job]. +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 =>[http://backgroundrb.rubyforge.org/|BackgrounDRb] and =>[http://github.com/tobi/delayed_job|Delayed Job]. ] ] section[ @title[Technical Analysis] + txt[ 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 "cons" are solved in the following chapter by another library, and so on... -The book is not meant to contain a full technical reference of each library, and it's quite short (256 pages), so you really get the most out of it if you read it all, from start to finish. I didn't realize there are so many different libraries in this particular niche of Ruby programming, and Mark does a good job "demistifying" some of them. +The book is not meant to contain a full technical reference of each library, and it's quite short (256 pages), so you really get the most out of it if you read it all, from start to finish. I didn't realize there were so many different libraries in this particular niche of Ruby programming, and Mark does a good job demistifying some of them. -One thing that really struck me out of this book is the focus on gems. We're not talking about "mainstream" frameworks like Rails or Merb here, but rather of some rather specialized, smaller libraries that fullfill very specific tasks. Personally, I don't remember any other Ruby book doing this in the same way, and I was quite happy about it. +One thing that really struck me out of this book is the focus on gems. We're not talking about _mainstream_ frameworks like Rails or Merb here, but rather of some rather specialized, smaller libraries that fullfill very specific tasks. Personally, I don't remember any other Ruby book doing this in the same way, and I was quite happy about it. -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. +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 _quirks_ of these gems documented in the book: + +*p91*: _"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."_ + +Really? Hasn't it be fixed now? Apparently not, that's the way it works, so no, you can't blame the author of the book for this. + ] section[ @title[Formatting and Readability] + txt[ +As I pointed out earlier, this book is somehow meant to be read sequentially, and Mark does a good job making sure you don't get bored. Chapters and sections are quite short and there's a good text/code ratio: the examples are short and clear, and you don't have to try them out yourself, because most of the time the author does it for you. It's not infrequent for the author to tell you to run "wrong" code, but that's a great way to show you how to do the right thing right afterwards. + +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't stand were the _endnotes_. I must say I don't like endnotes at the best of times, but when they are pointless I just can't suffer them. Each chapter has its own fair share of endnotes, but unfortunately most of them are just URLs to Wikipedia pages or RubyForce/GitHub projects: I would have preferred the URLs inline with the rest of the text, but that's just me. + ] ] section[ @title[Style and Contents] + txt[ +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: + +*p86*: _"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't make any grand promises about what the library can and cannot do in regards to expiring/renewing registrations."_ + +Although this is not something you'd see in a professional book everyday, it definitely helps to connect with the reader: Mark is one of us after all, even if he happens to have created quite a few "interesting projects":http://github.com/markbates, 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's neither one of those rockstar developers nor one of those famous authors who just writes books for a living: he's a competent programmer who knows quite a bit about a particular, but relevant, niche of Ruby programming. + ] ] ] section[ @title[Final Thoughts] -] - ---[ -Missing: =>[http://github.com/kwi/BrB|BrB] - -Endnotes at the end of each chapter can be annoying, mostly pointing to Wikipedia Articles. - -Page 86: i think I understand ... I have not been able to ... ???!!!! - -P91 architechtural flaw in Starfish? - -Too much trial and error, workarounds to fix apparent Starfish errors. No mentions on gem versions: maybe those errors are fixed now? - -Introduction to Starfish's MapReduce implementation -- interesting, easy and practical + txt[ +This is one of those books I'd like to see a second edition of. Partly because there are some relatively new gems which have been left out (\.=>[http://github.com/kwi/BrB|BrB], for example), partly because this is a rather hot topic at the moment, and different solutions are popping out at a rather extreme rate. -"begs" starfish author to fix his library, although fixes are easy... +The decision to write about mainly about gems was bold but necessary, and I'd really like to see more authors doing that, but with extra care. From reading this book, you understand that there's no _silver bullet_ when it comes to Distributed Programming, but rather different tools to do different jobs. -5. Distribunaut: spawned from Mack (both creations of the author?!!) +The thing I missed the most? A proper conclusion to the book. You're left with two chapter about Rails-specific libraries which could have easily become appendixes, and nothing else. I would have liked a sort of "summing up" end chapter (re-)highlighting the pros and cons of each library and a sort of feature matrix. +Nevertheless, it was well worth my time and it proved to be a very good resource to get started in writing distributed Ruby programs. + ] +] -P123 D. performs a lot of magic to keep us from writing as much code -- c'mon, we're all grown-ups and we know Ruby can do wonders - -D uses proper Ruby idioms, nice 'borrow' method - - ----- there's no silver bullet on distr. Ruby programmig! - ------ teaches you bits about other necessary technologies like memcached or amqp protocols - ------ evolution of the same logger example: bonus points for continuity - ------ conclusion sections nearly always highlight pros and cons; cons solved by the next library - ------ diagrams where necessary - ------ missing: a good cheat sheet about what's best for what/feature matrix - ----- see p. 168 about documentation! Useful for the review intro - ----- plenty of useful sidebars - ------ No conclusion to the book!!!! -]
M content/articles/succeeding-with-agile-review.glyphcontent/articles/succeeding-with-agile-review.glyph

@@ -3,6 +3,7 @@ :type: article

:tags: - review - productivity +- books - software :permalink: succeeding-with-agile-review :title: "Book Review: Succeeding with Agile"