all repos — h3rald @ b5555060ecf07f71d1482dff01243e44fe4e175f

The sources of https://h3rald.com

content/articles/distributed-programming-with-ruby-review.glyph

 1
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
 100
 101
 102
 103
 104
 105
 106
 107
 108
 109
 110
 111
 112
 113
 114
 115
 116
 117
 118
 119
 120
 121
 122
 123
 124
 125
 126
 127
 128
 129
 130
 131
 132
 133
 134
 135
 136
 137
 138
----- 
type: article
tags:
- review
- 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
-----
&:[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]
&:[rinda|=>[http://ruby-doc.org/stdlib/libdoc/rinda/rdoc/index.html|Rinda]]
&:[pickaxe|=>[#unkwnown#|_Programming Ruby_]]
rw:[pt|
	section[@title[Part {{0}}: {{1}}]
		txt[{{2}}]
	]
]
--[--------------------------------------------------]
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. 

_"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.

&[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
(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]

But there's more. This book gives the reader a complete overview of what's out there, in the Ruby world, to support distributed programming. This includes quite a few gems and libraries besides the ones provided in the standard library.
]
section[
	@title[Overview]

	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 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.

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.
	]	
	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:
* =>[http://seattlerb.rubyforge.org/RingyDingy/|RingyDingy]
* =>[http://rufy.com/starfish/doc/|Starfish]
* =>[http://github.com/markbates/distribunaut|Distribunaut] 
* =>[http://github.com/mperham/politics|Politics]
	]	
	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.
	]	
	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].
	]	
]

section[
	@title[Technical Analysis]
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.

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. 

	section[
		@title[Formatting and Readability]
	]
	section[
		@title[Style and Contents]
	]
]

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

"begs" starfish author to fix his library, although fixes are easy...

5. Distribunaut: spawned from Mack (both creations of the author?!!)


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!!!! 
]