goodreads 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,24 @@
1
+ *.gem
2
+ *.rbc
3
+ *.swp
4
+ *.tmproj
5
+ *~
6
+ .DS_Store
7
+ .\#*
8
+ .bundle
9
+ .config
10
+ .yardoc
11
+ Gemfile.lock
12
+ InstalledFiles
13
+ \#*
14
+ _yardoc
15
+ coverage
16
+ doc/
17
+ lib/bundler/man
18
+ pkg
19
+ rdoc
20
+ spec/reports
21
+ test/tmp
22
+ test/version_tmp
23
+ tmp
24
+ tmtags
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --color
2
+ --format=nested
3
+ --backtrace
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'http://rubygems.org'
2
+
3
+ gemspec
4
+
data/README.rdoc ADDED
@@ -0,0 +1,66 @@
1
+ = Goodreads -- simple client for Goodreads.com API
2
+
3
+ A simple API client to pull book information and reviews from Goodreads.com.
4
+ Wrapper uses XML feed and transforms it into the object model.
5
+
6
+ * Main page: http://github.com/sosedoff/goodreads
7
+ * Goodreads API: http://goodreads.com/api
8
+
9
+ == Getting Started
10
+
11
+ First, you need to provide your API token
12
+
13
+ Goodreads.configure('API_TOKEN')
14
+
15
+ client = Goodreads::Client.new
16
+
17
+ == Usage
18
+
19
+ === Lookup books
20
+
21
+ Find a book by ISBN:
22
+
23
+ book = client.book_by_isbn('ISBN')
24
+
25
+ Find a book by Goodreads ID:
26
+
27
+ book = client.book('id')
28
+
29
+ Find a book by title:
30
+
31
+ book = client.book_by_title('Book title')
32
+
33
+ Search for books (by title, isbn, genre)
34
+
35
+ search = client.search_books('Your search query')
36
+ search.results.work.each do |book|
37
+ book.id # => book ID
38
+ book.title # => book title
39
+ end
40
+
41
+ === Pull recent reviews
42
+
43
+ client.recent_reviews.each do |r|
44
+ r.id # => review id
45
+ r.book.title # => review book title
46
+ r.body # => review message
47
+ r.user.name # => review user name
48
+ end
49
+
50
+ === Get review Details
51
+
52
+ review = client.review('id')
53
+ review.id # => review ID
54
+ review.user # => review user information
55
+ review.book # => review book information
56
+ review.reting # => review rating
57
+
58
+ == Limitation
59
+
60
+ * According to Goodreads API there is a limit of 60 RPM (requests per minute)
61
+ * Provided data cannot be stored for any usage
62
+ * Please check original documentation for additional object fields and properties
63
+
64
+ == Authors
65
+
66
+ * Dan Sosedoff [http://github.com/sosedoff]
data/Rakefile ADDED
@@ -0,0 +1,9 @@
1
+ require 'bundler'
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:test) do |t|
5
+ t.pattern = 'spec/*_spec.rb'
6
+ t.verbose = false
7
+ end
8
+
9
+ task :default => :test
data/goodreads.gemspec ADDED
@@ -0,0 +1,31 @@
1
+ require File.expand_path('../lib/goodreads/version', __FILE__)
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = "goodreads"
5
+ s.version = Goodreads::VERSION.dup
6
+ s.summary = "Goodreads API wrapper"
7
+ s.description = "Simple wrapper for the Goodreads API"
8
+ s.homepage = "http://github.com/sosedoff/goodreads"
9
+ s.authors = ["Dan Sosedoff"]
10
+ s.email = ["dan.sosedoff@gmail.com"]
11
+
12
+ s.add_development_dependency 'webmock', '~> 1.6'
13
+ s.add_development_dependency 'rake', '~> 0.8'
14
+ s.add_development_dependency 'rspec', '~> 2.5'
15
+ s.add_development_dependency 'ZenTest', '~> 4.5'
16
+ s.add_development_dependency 'simplecov', '~> 0.4'
17
+ s.add_development_dependency 'yard', '~> 0.6'
18
+
19
+ s.add_runtime_dependency 'rest-client', '~> 1.6.1'
20
+ s.add_runtime_dependency 'hashie', '~> 1.0.0'
21
+ s.add_runtime_dependency 'activesupport', '~> 3.0.0'
22
+ s.add_runtime_dependency 'i18n', '~> 0.5'
23
+
24
+ s.files = `git ls-files`.split("\n")
25
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
26
+ s.executables = `git ls-files -- bin/*`.split("\n").map{|f| File.basename(f)}
27
+ s.require_paths = ["lib"]
28
+
29
+ s.platform = Gem::Platform::RUBY
30
+ s.required_rubygems_version = Gem::Requirement.new('>= 1.3.6') if s.respond_to? :required_rubygems_version=
31
+ end
data/lib/goodreads.rb CHANGED
@@ -1,7 +1,6 @@
1
1
  require 'rest-client'
2
- require 'xmlsimple'
3
- require 'active_support/all'
2
+ require 'active_support/core_ext'
3
+ require 'hashie'
4
4
 
5
5
  require 'goodreads/goodreads'
6
- require 'goodreads/client'
7
- require 'goodreads/record'
6
+ require 'goodreads/client'
@@ -4,49 +4,91 @@ module Goodreads
4
4
 
5
5
  # Initialize the API client
6
6
  # You must specify the API key given by goodreads in order to make requests
7
- # :api_key - Your api key
8
- def initialize(opts={})
9
- raise ArgumentError, 'API key required!' unless opts.key?(:api_key)
7
+ # :api_key - Your api key
8
+ def self.configure(opts={})
9
+ key = opts[:api_key].to_s
10
+ raise ArgumentError, 'API key required!' if key.empty?
10
11
  @@config[:api_key] = opts[:api_key]
11
12
  end
12
13
 
13
- # Get most recent reviews
14
- # :skip_cropped - Select only non-cropped reviews
14
+ # Search for books
15
+ # q => The query text to match against book title, author, and ISBN fields.
16
+ # params => Optional search parameters
17
+ # :page => Which page to return (default 1, optional)
18
+ # :field => Field to search, one of title, author, or genre (default is all)
19
+ def search_books(q, params={})
20
+ params[:q] = q.to_s.strip
21
+ data = request('/search/index', params)
22
+ Hashie::Mash.new(data['search'])
23
+ end
24
+
25
+ # Get book details by Goodreads book ID
26
+ def book(id)
27
+ Hashie::Mash.new(request('/book/show', :id => id)['book'])
28
+ end
29
+
30
+ # Get book details by book ISBN
31
+ def book_by_isbn(isbn)
32
+ Hashie::Mash.new(request('/book/isbn', :isbn => isbn)['book'])
33
+ end
34
+
35
+ # Get book details by book title
36
+ def book_by_title(title)
37
+ Hashie::Mash.new(request('/book/title', :title => title)['book'])
38
+ end
39
+
40
+ # Recent reviews from all members.
41
+ # :skip_cropped - Select only non-cropped reviews
15
42
  def recent_reviews(params={})
43
+ skip_cropped = params.delete(:skip_cropped) || false
16
44
  data = request('/review/recent_reviews', params)
17
- reviews = data['reviews']['review'].collect { |r| Goodreads::Record.new(r) }
18
- reviews = reviews.select { |r| !r.body.include?(r.url) } if params.key?(:skip_cropped)
19
- return reviews
20
- end
21
-
22
- # Get book (including reviews) by ISBN.
23
- # :skip_cropped_reviews - Select only non-cropped book reviews
24
- # :page - Reviews page
25
- # :per_page - Reviews per page (default to 30)
26
- def book_by_isbn(isbn, params={})
27
- params.merge!(:isbn => isbn)
28
- data = request('/book/isbn', params)
29
- record = Goodreads::Record.new(data['book'])
30
- if params.key?(:skip_cropped_reviews)
31
- record.reviews['review'] = record.reviews.review.select { |r| !r.body.include?(r.url) }
45
+ if data['reviews'] && data['reviews'].key?('review')
46
+ reviews = data['reviews']['review'].map { |r| Hashie::Mash.new(r) }
47
+ reviews = reviews.select { |r| !r.body.include?(r.url) } if skip_cropped
48
+ reviews
32
49
  end
33
- return record
50
+ end
51
+
52
+ # Get review details
53
+ def review(id)
54
+ data = request('/review/show', :id => id)
55
+ Hashie::Mash.new(data['review'])
56
+ end
57
+
58
+ # Get author details
59
+ def author(id, params={})
60
+ params[:id] = id
61
+ data = request('/author/show', params)
62
+ Hashie::Mash.new(data['author'])
63
+ end
64
+
65
+ # Get user details
66
+ def user(id)
67
+ data = request('/user/show', :id => id)
68
+ Hashie::Mash.new(data['user'])
34
69
  end
35
70
 
36
71
  private
37
72
 
38
73
  # Perform an API request
39
74
  def request(path, params={})
75
+ raise 'API key required!' unless @@config.key?(:api_key)
40
76
  params.merge!(:format => 'xml', :key => @@config[:api_key])
41
- begin
42
- resp = RestClient.get("#{API_URL}#{path}", :params => params)
43
- Hash.from_xml(resp)['GoodreadsResponse']
44
- rescue RestClient::Unauthorized
45
- raise AuthError, 'Invalid API token!'
46
- rescue Exception => ex
47
- raise NotFound, 'Resource was not found!' if ex.http_code == 404
48
- raise GeneralError, ex.message
49
- end
77
+
78
+ resp = RestClient.get("#{API_URL}#{path}", :params => params) { |response, request, result, &block|
79
+ case response.code
80
+ when 200
81
+ response.return!(request, result, &block)
82
+ when 401
83
+ raise Goodreads::Unauthorized
84
+ when 404
85
+ raise Goodreads::NotFound
86
+ end
87
+ }
88
+
89
+ hash = Hash.from_xml(resp)['GoodreadsResponse']
90
+ hash.delete('Request')
91
+ hash
50
92
  end
51
93
  end
52
94
  end
@@ -2,7 +2,11 @@ module Goodreads
2
2
  API_URL = 'http://www.goodreads.com'
3
3
  API_FORMAT = 'xml'
4
4
 
5
- class AuthError < Exception ; end
6
- class NotFound < Exception ; end
7
- class GeneralError < Exception ; end
5
+ class Error < StandardError; end
6
+ class Unauthorized < Error ; end
7
+ class NotFound < Error ; end
8
+
9
+ def self.configure(api_key)
10
+ Goodreads::Client.configure({:api_key => api_key})
11
+ end
8
12
  end
@@ -0,0 +1,3 @@
1
+ module Goodreads
2
+ VERSION = '0.1.1'.freeze
3
+ end
@@ -0,0 +1,20 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Client' do
4
+ before :each do
5
+ @client = Goodreads::Client.new
6
+ end
7
+
8
+ it 'should raise exception if API key was not provided' do
9
+ proc { @client.book_by_isbn('0307463745') }.should raise_error Exception, 'API key required!'
10
+ end
11
+
12
+ it 'should raise Goodreads::Unauthorized if API key is not valid' do
13
+ Goodreads.configure('INVALID_KEY')
14
+ stub_request(:get, "http://www.goodreads.com/book/isbn?format=xml&isbn=054748250711&key=INVALID_KEY").
15
+ to_return(:status => 401)
16
+
17
+ proc { @client.book_by_isbn('054748250711') }.should raise_error Goodreads::Unauthorized
18
+ end
19
+ end
20
+
@@ -0,0 +1,120 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Client' do
4
+ before :each do
5
+ Goodreads.configure('SECRET_KEY')
6
+ @client = Goodreads::Client.new
7
+ end
8
+
9
+ it 'should return a book found by isbn' do
10
+ stub_with_key_get('/book/isbn', {:isbn => '0307463745'}, 'book.xml')
11
+
12
+ proc { @book = @client.book_by_isbn('0307463745') }.should_not raise_error
13
+ @book.respond_to?(:id).should == true
14
+ @book.respond_to?(:title).should == true
15
+ end
16
+
17
+ it 'should return a book found by goodreads id' do
18
+ stub_with_key_get('/book/show', {:id => '6732019'}, 'book.xml')
19
+ proc { @client.book('6732019') }.should_not raise_error
20
+ end
21
+
22
+ it 'should return a book found by title' do
23
+ stub_with_key_get('/book/title', {:title => 'Rework'}, 'book.xml')
24
+ proc { @client.book_by_title('Rework') }.should_not raise_error
25
+ end
26
+
27
+ it 'should raise Goodreads::NotFound if book was not found' do
28
+ stub_request(:get, "http://www.goodreads.com/book/isbn?format=xml&isbn=123456789&key=SECRET_KEY").
29
+ to_return(:status => 404, :body => "", :headers => {})
30
+
31
+ proc { @client.book_by_isbn('123456789') }.should raise_error Goodreads::NotFound
32
+ end
33
+
34
+ it 'should return recent reviews' do
35
+ stub_with_key_get('/review/recent_reviews', {}, 'recent_reviews.xml')
36
+
37
+ proc { @reviews = @client.recent_reviews }.should_not raise_error
38
+ @reviews.should be_an_instance_of Array
39
+ @reviews.size.should_not == 0
40
+ @reviews.each do |r|
41
+ r.respond_to?(:id).should == true
42
+ end
43
+ end
44
+
45
+ it 'should return recent reviews with clean reviews' do
46
+ stub_with_key_get('/review/recent_reviews', {}, 'recent_reviews.xml')
47
+
48
+ proc { @reviews = @client.recent_reviews(:skip_cropped => true) }.should_not raise_error
49
+ @reviews.should be_an_instance_of Array
50
+ @reviews.size.should_not == 0
51
+ @reviews.each do |r|
52
+ r.respond_to?(:id).should == true
53
+ end
54
+ end
55
+
56
+ it 'should return single review details' do
57
+ stub_with_key_get('/review/show', {:id => '166204831'}, 'review.xml')
58
+
59
+ proc { @review = @client.review('166204831') }.should_not raise_error
60
+ @review.should be_an_instance_of Hashie::Mash
61
+ @review.respond_to?(:id).should == true
62
+ @review.id.should == '166204831'
63
+ end
64
+
65
+ it 'should raise Goodreads::NotFound if review was not found' do
66
+ stub_request(:get, "http://www.goodreads.com/review/show?format=xml&id=12345&key=SECRET_KEY").
67
+ to_return(:status => 404, :body => "", :headers => {})
68
+
69
+ proc { @client.review('12345') }.should raise_error Goodreads::NotFound
70
+ end
71
+
72
+ it 'should return author details' do
73
+ stub_with_key_get('/author/show', {:id => '18541'}, 'author.xml')
74
+
75
+ proc { @author = @client.author('18541') }.should_not raise_error
76
+ @author.should be_an_instance_of Hashie::Mash
77
+ @author.respond_to?(:id).should == true
78
+ @author.id.should == '18541'
79
+ @author.name.should == "Tim O'Reilly"
80
+ end
81
+
82
+ it 'should raise Goodreads::NotFound if author was not found' do
83
+ stub_request(:get, "http://www.goodreads.com/author/show?format=xml&id=12345&key=SECRET_KEY").
84
+ to_return(:status => 404, :body => "", :headers => {})
85
+
86
+ proc { @client.author('12345') }.should raise_error Goodreads::NotFound
87
+ end
88
+
89
+ it 'should return user details' do
90
+ stub_with_key_get('/user/show', {:id => '878044'}, 'user.xml')
91
+
92
+ proc { @user = @client.user('878044') }.should_not raise_error
93
+ @user.should be_an_instance_of Hashie::Mash
94
+ @user.respond_to?(:id).should == true
95
+ @user.id.should == '878044'
96
+ @user.name.should == 'Jan'
97
+ @user.user_name.should == 'janmt'
98
+ end
99
+
100
+ it 'should raise Goodreads::NotFound if user was not found' do
101
+ stub_request(:get, "http://www.goodreads.com/user/show?format=xml&id=12345&key=SECRET_KEY").
102
+ to_return(:status => 404, :body => "", :headers => {})
103
+
104
+ proc { @client.user('12345') }.should raise_error Goodreads::NotFound
105
+ end
106
+
107
+ it 'should return book search results' do
108
+ stub_with_key_get('/search/index', {:q => 'Rework'}, 'search_books_by_name.xml')
109
+
110
+ proc { @search = @client.search_books('Rework') }.should_not raise_error
111
+ @search.should be_an_instance_of Hashie::Mash
112
+ @search.respond_to?(:query).should == true
113
+ @search.respond_to?(:total_results).should == true
114
+ @search.respond_to?(:results).should == true
115
+ @search.results.respond_to?(:work).should == true
116
+ @search.query.should == 'Rework'
117
+ @search.results.work.size.should == 3
118
+ @search.results.work.first.id.should == 6928276
119
+ end
120
+ end
@@ -0,0 +1,716 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <GoodreadsResponse>
3
+ <Request>
4
+ <authentication>true</authentication>
5
+ <key><![CDATA[SECRET_KEY]]></key>
6
+ <method><![CDATA[author_show]]></method>
7
+ </Request>
8
+ <author>
9
+
10
+ <id>18541</id>
11
+ <name><![CDATA[Tim O'Reilly]]></name>
12
+ <link><![CDATA[http://www.goodreads.com/author/show/18541.Tim_O_Reilly]]></link>
13
+ <fans_count type="integer">109</fans_count>
14
+ <image_url><![CDATA[http://photo.goodreads.com/authors/1199698411p5/18541.jpg]]></image_url>
15
+ <small_image_url><![CDATA[http://photo.goodreads.com/authors/1199698411p2/18541.jpg]]></small_image_url>
16
+ <about><![CDATA[]]></about>
17
+ <influences><![CDATA[]]></influences>
18
+ <works_count>34</works_count>
19
+ <gender>male</gender>
20
+ <hometown>Cork</hometown>
21
+ <born_at>1954/06/06</born_at>
22
+ <died_at></died_at>
23
+
24
+ <user>
25
+ <id type="integer">549570</id>
26
+ </user>
27
+
28
+
29
+ <books>
30
+ <book>
31
+ <id type="integer">6356381</id>
32
+ <isbn>0596802811</isbn>
33
+ <isbn13>9780596802813</isbn13>
34
+ <publication_day type="integer">15</publication_day>
35
+ <publication_month type="integer">6</publication_month>
36
+ <publication_year type="integer">2009</publication_year>
37
+ <publisher>O'Reilly Media, Inc.</publisher>
38
+ <text_reviews_count type="integer">26</text_reviews_count>
39
+ <title>
40
+ <![CDATA[The Twitter Book]]>
41
+ </title>
42
+ <image_url>http://photo.goodreads.com/books/1256146862m/6356381.jpg</image_url>
43
+ <small_image_url>http://photo.goodreads.com/books/1256146862s/6356381.jpg</small_image_url>
44
+ <link>http://www.goodreads.com/book/show/6356381-the-twitter-book</link>
45
+ <num_pages>240</num_pages>
46
+ <average_rating>3.69</average_rating>
47
+ <ratings_count>80</ratings_count>
48
+ <description>
49
+ <![CDATA[&quot;Media organizations should take note of Twitter's power to quickly reach their target consumers.&quot; -- Tim O'Reilly (@timoreilly), in a Los Angeles Times interview, March 2009 Why is Twitter so popular? How can you get involved? And, most importantly, how can it benefit you or your business? The Twitter Book answers those questions and more, in a fun, full-color format that's packed with helpful examples and clear explanations that won't tangle you up in technical jargon. Twitter represents an evolution in Internet participation. With a maximum of 140 characters per message, it's easy to stay connected to friends and family, meet new people, track news, and market your company. However, despite its flexibility, Twitter can be somewhat difficult to figure out -- The Twitter Book provides a clear, user-friendly introduction. Co-written by Tim O'Reilly, CEO of O'Reilly Media, and one of Twitter's most-followed thought leaders, with more than over 250,000 followers, this practical guide will help you: Get comfortable using Twitter, whether you're a new user or already have some experience with it Learn all aspects of this service quickly, with full-color illustrations on every spread Make the most of Twitter, with advice and ideas for using the best third-party tools Determine how Twitter can help your business, with a special chapter on viral marketing If you're new to the Web 2.0 phenomenon, and want to know exactly what Twitter is and what micro-blogging can do for you, this is the authoritative guide you're looking for.]]>
50
+ </description>
51
+ <authors>
52
+ <author>
53
+ <id>18541</id>
54
+ <name><![CDATA[Tim O'Reilly]]></name>
55
+ <image_url><![CDATA[http://photo.goodreads.com/authors/1199698411p5/18541.jpg]]></image_url>
56
+ <small_image_url><![CDATA[http://photo.goodreads.com/authors/1199698411p2/18541.jpg]]></small_image_url>
57
+ <link><![CDATA[http://www.goodreads.com/author/show/18541.Tim_O_Reilly]]></link>
58
+ <average_rating>4.00</average_rating>
59
+ <ratings_count>267</ratings_count>
60
+ <text_reviews_count>58</text_reviews_count>
61
+ </author>
62
+ </authors> <published>2009</published>
63
+ </book>
64
+
65
+
66
+ <book>
67
+ <id type="integer">2126293</id>
68
+ <isbn>1885211198</isbn>
69
+ <isbn13>9781885211194</isbn13>
70
+ <publication_day type="integer">1</publication_day>
71
+ <publication_month type="integer">11</publication_month>
72
+ <publication_year type="integer">1997</publication_year>
73
+ <publisher>Traveler's Tales</publisher>
74
+ <text_reviews_count type="integer">1</text_reviews_count>
75
+ <title>
76
+ <![CDATA[Travelers' Tales: The Road Within: True Stories of Transformation]]>
77
+ </title>
78
+ <image_url>http://photo.goodreads.com/books/1266565033m/2126293.jpg</image_url>
79
+ <small_image_url>http://photo.goodreads.com/books/1266565033s/2126293.jpg</small_image_url>
80
+ <link>http://www.goodreads.com/book/show/2126293.Travelers_Tales</link>
81
+ <num_pages>435</num_pages>
82
+ <average_rating>3.47</average_rating>
83
+ <ratings_count>19</ratings_count>
84
+ <description>
85
+ <![CDATA[The Road Within is a very different kind of travel book, a venture into the hidden territories of the human spirit and heart. It is a book of transformation, of lessons learned, maps drawn and burned, and spiritual blessings bestowed by that great and hard teacher: travel. It will show you what the great mystics and saints have always known - that you are closer to yourself, the world, and God, than you can possibly imagine, and that wondrous things await you on your journeys.]]>
86
+ </description>
87
+ <authors>
88
+ <author>
89
+ <id>18541</id>
90
+ <name><![CDATA[Tim O'Reilly]]></name>
91
+ <image_url><![CDATA[http://photo.goodreads.com/authors/1199698411p5/18541.jpg]]></image_url>
92
+ <small_image_url><![CDATA[http://photo.goodreads.com/authors/1199698411p2/18541.jpg]]></small_image_url>
93
+ <link><![CDATA[http://www.goodreads.com/author/show/18541.Tim_O_Reilly]]></link>
94
+ <average_rating>4.00</average_rating>
95
+ <ratings_count>267</ratings_count>
96
+ <text_reviews_count>58</text_reviews_count>
97
+ </author>
98
+ </authors> <published>1997</published>
99
+ </book>
100
+
101
+
102
+ <book>
103
+ <id type="integer">7670623</id>
104
+ <isbn>3897219425</isbn>
105
+ <isbn13>9783897219427</isbn13>
106
+ <publication_day type="integer">28</publication_day>
107
+ <publication_month type="integer">8</publication_month>
108
+ <publication_year type="integer">2009</publication_year>
109
+ <publisher>O'Reilly</publisher>
110
+ <text_reviews_count type="integer">0</text_reviews_count>
111
+ <title>
112
+ <![CDATA[Das Twitter-Buch]]>
113
+ </title>
114
+ <image_url>http://www.goodreads.com/images/nocover-111x148.jpg</image_url>
115
+ <small_image_url>http://www.goodreads.com/images/nocover-60x80.jpg</small_image_url>
116
+ <link>http://www.goodreads.com/book/show/7670623-das-twitter-buch</link>
117
+ <num_pages>266</num_pages>
118
+ <average_rating>4.00</average_rating>
119
+ <ratings_count>3</ratings_count>
120
+ <description>
121
+ <![CDATA[]]>
122
+ </description>
123
+ <authors>
124
+ <author>
125
+ <id>18541</id>
126
+ <name><![CDATA[Tim O'Reilly]]></name>
127
+ <image_url><![CDATA[http://photo.goodreads.com/authors/1199698411p5/18541.jpg]]></image_url>
128
+ <small_image_url><![CDATA[http://photo.goodreads.com/authors/1199698411p2/18541.jpg]]></small_image_url>
129
+ <link><![CDATA[http://www.goodreads.com/author/show/18541.Tim_O_Reilly]]></link>
130
+ <average_rating>4.00</average_rating>
131
+ <ratings_count>267</ratings_count>
132
+ <text_reviews_count>58</text_reviews_count>
133
+ </author>
134
+ </authors> <published>2009</published>
135
+ </book>
136
+
137
+
138
+ <book>
139
+ <id type="integer">2443857</id>
140
+ <isbn>156592486X</isbn>
141
+ <isbn13>9781565924864</isbn13>
142
+ <publication_day type="integer">26</publication_day>
143
+ <publication_month type="integer">8</publication_month>
144
+ <publication_year type="integer">1999</publication_year>
145
+ <publisher>O'Reilly Media, Inc.</publisher>
146
+ <text_reviews_count type="integer">0</text_reviews_count>
147
+ <title>
148
+ <![CDATA[Windows 98 in a Nutshell (In a Nutshell]]>
149
+ </title>
150
+ <image_url>http://photo.goodreads.com/books/1266828346m/2443857.jpg</image_url>
151
+ <small_image_url>http://photo.goodreads.com/books/1266828346s/2443857.jpg</small_image_url>
152
+ <link>http://www.goodreads.com/book/show/2443857.Windows_98_in_a_Nutshell_In_a_Nutshell</link>
153
+ <num_pages>634</num_pages>
154
+ <average_rating>3.67</average_rating>
155
+ <ratings_count>3</ratings_count>
156
+ <description>
157
+ <![CDATA[Any user who wants to make the most of Windows 98 will love this book. It follows the commonsense O'Reilly approach, cutting through the hype and giving practical details you can use every day.]]>
158
+ </description>
159
+ <authors>
160
+ <author>
161
+ <id>18541</id>
162
+ <name><![CDATA[Tim O'Reilly]]></name>
163
+ <image_url><![CDATA[http://photo.goodreads.com/authors/1199698411p5/18541.jpg]]></image_url>
164
+ <small_image_url><![CDATA[http://photo.goodreads.com/authors/1199698411p2/18541.jpg]]></small_image_url>
165
+ <link><![CDATA[http://www.goodreads.com/author/show/18541.Tim_O_Reilly]]></link>
166
+ <average_rating>4.00</average_rating>
167
+ <ratings_count>267</ratings_count>
168
+ <text_reviews_count>58</text_reviews_count>
169
+ </author>
170
+ </authors> <published>1998</published>
171
+ </book>
172
+
173
+
174
+ <book>
175
+ <id type="integer">1551276</id>
176
+ <isbn>0937175935</isbn>
177
+ <isbn13>9780937175934</isbn13>
178
+ <publication_day type="integer">28</publication_day>
179
+ <publication_month type="integer">1</publication_month>
180
+ <publication_year type="integer">1992</publication_year>
181
+ <publisher>O'Reilly</publisher>
182
+ <text_reviews_count type="integer">0</text_reviews_count>
183
+ <title>
184
+ <![CDATA[Managing UUCP and Usenet]]>
185
+ </title>
186
+ <image_url>http://photo.goodreads.com/books/1185081084m/1551276.jpg</image_url>
187
+ <small_image_url>http://photo.goodreads.com/books/1185081084s/1551276.jpg</small_image_url>
188
+ <link>http://www.goodreads.com/book/show/1551276.Managing_UUCP_and_Usenet</link>
189
+ <num_pages>368</num_pages>
190
+ <average_rating>4.00</average_rating>
191
+ <ratings_count>2</ratings_count>
192
+ <description>
193
+ <![CDATA[<p>For all its widespread use, UUCP is one of the most difficult UNIX utilities to master. Poor documentation, cryptic messages, and differences between various implementations make setting up UUCP links a nightmare for many a system administrator.<p>This handbook is meant for system administrators who want to install and manage the UUCP and Usenet software. It covers HoneyDanBer UUCP as well as standard Version 2 UUCP, with special notes on Xenix. As one reader noted over the Net, &quot;Don't even TRY to install UUCP without it!&quot;<p>Topics covered in <em>Managing UUCP</em> include&#58; <p>&lt;ul&gt;&lt;li&gt;How UUCP works. &lt;li&gt;RS-232 cabling. &lt;li&gt;Talking with modems. &lt;li&gt;Setting up a UUCP link. &lt;li&gt;Security considerations. &lt;li&gt;UUCP administration. &lt;li&gt;Introduction to Usenet. &lt;li&gt;Installing Netnews. &lt;li&gt;Administering Netnews. <p>The tenth edition of this classic work has been revised and expanded to include descriptions of&#58; <p>&lt;ul&gt;&lt;li&gt;How to use NNTP (Network News Transfer Protocol) to transfer Usenet news over TCP/IP and other high-speed networks. &lt;li&gt;How to get DOS versions of UUCP. &lt;li&gt;How to set up DOS-based laptop computers as traveling UUCP nodes. &lt;li&gt;How the UUCP 'g' protocol works. <p></p></p></p></p></p></p></p>]]>
194
+ </description>
195
+ <authors>
196
+ <author>
197
+ <id>18541</id>
198
+ <name><![CDATA[Tim O'Reilly]]></name>
199
+ <image_url><![CDATA[http://photo.goodreads.com/authors/1199698411p5/18541.jpg]]></image_url>
200
+ <small_image_url><![CDATA[http://photo.goodreads.com/authors/1199698411p2/18541.jpg]]></small_image_url>
201
+ <link><![CDATA[http://www.goodreads.com/author/show/18541.Tim_O_Reilly]]></link>
202
+ <average_rating>4.00</average_rating>
203
+ <ratings_count>267</ratings_count>
204
+ <text_reviews_count>58</text_reviews_count>
205
+ </author>
206
+ </authors> <published>1990</published>
207
+ </book>
208
+
209
+
210
+ <book>
211
+ <id type="integer">9972052</id>
212
+ <isbn>8441527458</isbn>
213
+ <isbn13>9788441527454</isbn13>
214
+ <publication_day type="integer">30</publication_day>
215
+ <publication_month type="integer">3</publication_month>
216
+ <publication_year type="integer">2010</publication_year>
217
+ <publisher>Grupo Anaya Comercial</publisher>
218
+ <text_reviews_count type="integer">0</text_reviews_count>
219
+ <title>
220
+ <![CDATA[Exprime Twitter / The Twitter Book]]>
221
+ </title>
222
+ <image_url>http://www.goodreads.com/images/nocover-111x148.jpg</image_url>
223
+ <small_image_url>http://www.goodreads.com/images/nocover-60x80.jpg</small_image_url>
224
+ <link>http://www.goodreads.com/book/show/9972052-exprime-twitter-the-twitter-book</link>
225
+ <num_pages>0</num_pages>
226
+ <average_rating>0.0</average_rating>
227
+ <ratings_count>0</ratings_count>
228
+ <description>
229
+ <![CDATA[]]>
230
+ </description>
231
+ <authors>
232
+ <author>
233
+ <id>18541</id>
234
+ <name><![CDATA[Tim O'Reilly]]></name>
235
+ <image_url><![CDATA[http://photo.goodreads.com/authors/1199698411p5/18541.jpg]]></image_url>
236
+ <small_image_url><![CDATA[http://photo.goodreads.com/authors/1199698411p2/18541.jpg]]></small_image_url>
237
+ <link><![CDATA[http://www.goodreads.com/author/show/18541.Tim_O_Reilly]]></link>
238
+ <average_rating>4.00</average_rating>
239
+ <ratings_count>267</ratings_count>
240
+ <text_reviews_count>58</text_reviews_count>
241
+ </author>
242
+ </authors> <published>2010</published>
243
+ </book>
244
+
245
+
246
+ <book>
247
+ <id type="integer">10494193</id>
248
+ <isbn>1177114879</isbn>
249
+ <isbn13>9781177114875</isbn13>
250
+ <publication_day type="integer">9</publication_day>
251
+ <publication_month type="integer">8</publication_month>
252
+ <publication_year type="integer">2010</publication_year>
253
+ <publisher>Nabu Press</publisher>
254
+ <text_reviews_count type="integer">0</text_reviews_count>
255
+ <title>
256
+ <![CDATA[X toolkit intrinsics reference manual: for version 11 of the X window system]]>
257
+ </title>
258
+ <image_url>http://photo.goodreads.com/books/1297994888m/10494193.jpg</image_url>
259
+ <small_image_url>http://photo.goodreads.com/books/1297994888s/10494193.jpg</small_image_url>
260
+ <link>http://www.goodreads.com/book/show/10494193-x-toolkit-intrinsics-reference-manual</link>
261
+ <num_pages>560</num_pages>
262
+ <average_rating>0.0</average_rating>
263
+ <ratings_count>0</ratings_count>
264
+ <description>
265
+ <![CDATA[]]>
266
+ </description>
267
+ <authors>
268
+ <author>
269
+ <id>18541</id>
270
+ <name><![CDATA[Tim O'Reilly]]></name>
271
+ <image_url><![CDATA[http://photo.goodreads.com/authors/1199698411p5/18541.jpg]]></image_url>
272
+ <small_image_url><![CDATA[http://photo.goodreads.com/authors/1199698411p2/18541.jpg]]></small_image_url>
273
+ <link><![CDATA[http://www.goodreads.com/author/show/18541.Tim_O_Reilly]]></link>
274
+ <average_rating>4.00</average_rating>
275
+ <ratings_count>267</ratings_count>
276
+ <text_reviews_count>58</text_reviews_count>
277
+ </author>
278
+ </authors> <published>2010</published>
279
+ </book>
280
+
281
+
282
+ <book>
283
+ <id type="integer">1305153</id>
284
+ <isbn>0937175366</isbn>
285
+ <isbn13>9780937175361</isbn13>
286
+ <publication_day nil="true" type="integer"></publication_day>
287
+ <publication_month type="integer">7</publication_month>
288
+ <publication_year type="integer">1989</publication_year>
289
+ <publisher>Orient Book Distribution</publisher>
290
+ <text_reviews_count type="integer">0</text_reviews_count>
291
+ <title>
292
+ <![CDATA[X Window Sys Users Gd]]>
293
+ </title>
294
+ <image_url>http://www.goodreads.com/images/nocover-111x148.jpg</image_url>
295
+ <small_image_url>http://www.goodreads.com/images/nocover-60x80.jpg</small_image_url>
296
+ <link>http://www.goodreads.com/book/show/1305153.X_Window_Sys_Users_Gd</link>
297
+ <num_pages>567</num_pages>
298
+ <average_rating>0.0</average_rating>
299
+ <ratings_count>0</ratings_count>
300
+ <description>
301
+ <![CDATA[]]>
302
+ </description>
303
+ <authors>
304
+ <author>
305
+ <id>18541</id>
306
+ <name><![CDATA[Tim O'Reilly]]></name>
307
+ <image_url><![CDATA[http://photo.goodreads.com/authors/1199698411p5/18541.jpg]]></image_url>
308
+ <small_image_url><![CDATA[http://photo.goodreads.com/authors/1199698411p2/18541.jpg]]></small_image_url>
309
+ <link><![CDATA[http://www.goodreads.com/author/show/18541.Tim_O_Reilly]]></link>
310
+ <average_rating>4.00</average_rating>
311
+ <ratings_count>267</ratings_count>
312
+ <text_reviews_count>58</text_reviews_count>
313
+ </author>
314
+ </authors> <published>1988</published>
315
+ </book>
316
+
317
+
318
+ <book>
319
+ <id type="integer">1071226</id>
320
+ <isbn>0937175358</isbn>
321
+ <isbn13>9780937175354</isbn13>
322
+ <publication_day nil="true" type="integer"></publication_day>
323
+ <publication_month type="integer">1</publication_month>
324
+ <publication_year type="integer">1920</publication_year>
325
+ <publisher>Orient Book Distribution</publisher>
326
+ <text_reviews_count type="integer">0</text_reviews_count>
327
+ <title>
328
+ <![CDATA[X Toolkit Intrinsics Reference Manual]]>
329
+ </title>
330
+ <image_url>http://www.goodreads.com/images/nocover-111x148.jpg</image_url>
331
+ <small_image_url>http://www.goodreads.com/images/nocover-60x80.jpg</small_image_url>
332
+ <link>http://www.goodreads.com/book/show/1071226.X_Toolkit_Intrinsics_Reference_Manual</link>
333
+ <num_pages></num_pages>
334
+ <average_rating>0.0</average_rating>
335
+ <ratings_count>0</ratings_count>
336
+ <description>
337
+ <![CDATA[]]>
338
+ </description>
339
+ <authors>
340
+ <author>
341
+ <id>18541</id>
342
+ <name><![CDATA[Tim O'Reilly]]></name>
343
+ <image_url><![CDATA[http://photo.goodreads.com/authors/1199698411p5/18541.jpg]]></image_url>
344
+ <small_image_url><![CDATA[http://photo.goodreads.com/authors/1199698411p2/18541.jpg]]></small_image_url>
345
+ <link><![CDATA[http://www.goodreads.com/author/show/18541.Tim_O_Reilly]]></link>
346
+ <average_rating>4.00</average_rating>
347
+ <ratings_count>267</ratings_count>
348
+ <text_reviews_count>58</text_reviews_count>
349
+ </author>
350
+ </authors> <published>1920</published>
351
+ </book>
352
+
353
+
354
+ <book>
355
+ <id type="integer">104744</id>
356
+ <isbn>1565927249</isbn>
357
+ <isbn13>9781565927247</isbn13>
358
+ <publication_day type="integer">28</publication_day>
359
+ <publication_month type="integer">10</publication_month>
360
+ <publication_year type="integer">1999</publication_year>
361
+ <publisher>O'Reilly</publisher>
362
+ <text_reviews_count type="integer">3</text_reviews_count>
363
+ <title>
364
+ <![CDATA[The Cathedral and the Bazaar: Musings on Linux and Open Source by an Accidental Revolutionary]]>
365
+ </title>
366
+ <image_url>http://photo.goodreads.com/books/1171524687m/104744.jpg</image_url>
367
+ <small_image_url>http://photo.goodreads.com/books/1171524687s/104744.jpg</small_image_url>
368
+ <link>http://www.goodreads.com/book/show/104744.The_Cathedral_and_the_Bazaar</link>
369
+ <num_pages>288</num_pages>
370
+ <average_rating>3.75</average_rating>
371
+ <ratings_count>324</ratings_count>
372
+ <description>
373
+ <![CDATA[<blockquote>&quot;This is how we did it.&quot;<br/><br/>-Linus Torvalds, creator of the Linux kernel</blockquote><br/><br/><p><br/>It all started with a series of odd statistics. The leading challenger to<br/>Microsoft's stranglehold on the computer industry is an operating system<br/>called Linux, the product of thousands of volunteer programmers who<br/>collaborate over the Internet. The software behind a majority of all the<br/>world's web sites doesn't come from a big company either, but from a<br/>loosely coordinated group of volunteer programmers called the Apache Group.<br/>The Internet itself, and much of its core software, was developed through a<br/>process of networked collaboration.<br/><br/><p><br/>The key to these stunning successes is a movement that has come to be<br/>called open source, because it depends on the ability of programmers to<br/>freely share their program source code so that others can improve it. In<br/>1997, Eric S. Raymond outlined the core principles of this movement in a<br/>manifesto called The Cathedral and the Bazaar, which was published and<br/>freely redistributed over the Internet.<br/><br/><p><br/>Mr. Raymond's thinking electrified the computer industry. He argues that<br/>the development of the Linux operating system by a loose confederation of<br/>thousands of programmers-without central project management or<br/>control-turns on its head everything we thought we knew about software<br/>project management. Internet-enabled collaboration and free information<br/>sharing, not monopolistic control, is the key to innovation and product<br/>quality.<br/><br/><p><br/>This idea was interesting to more than programmers and software project<br/>leaders. It suggested a whole new way of doing business, and the<br/>possibility of unprecedented shifts in the power structures of the computer<br/><br/><p><br/>industry.<br/><br/><p><br/>The rush to capitalize on the idea of open source started with Netscape's<br/>decision to release its flagship Netscape Navigator product under open<br/>source licensing terms in early 1998. Before long, Fortune 500 companies<br/>like Intel, IBM, and Oracle were joining the party. By August 1999, when<br/>the leading Linux distributor, Red Hat Software, made its hugely successful<br/>public stock offering, it had become clear that open source was &quot;the next<br/>big thing&quot; in the computer industry.<br/><br/><p><br/>This revolutionary book starts out with A Brief History of Hackerdom-the<br/>historical roots of the open-source movement-and details the events that<br/>led to the recognition of the power of open source. It contains the full<br/>text of The Cathedral and the Bazaar, updated and expanded for this book,<br/>plus Mr. Raymond's other key essays on the social and economic dynamics of<br/>open-source software development.<br/><br/><p><br/>Open source is the competitive advantage in the Internet Age. The Cathedral<br/>and the Bazaar is a must for anyone who cares about the computer industry<br/>or the dynamics of the information economy. Already, billions of dollars<br/>have been made and lost based on the ideas in this book. Its conclusions<br/>will be studied, debated, and implemented for years to come.<br/></p></p></p></p></p></p></p></p>]]>
374
+ </description>
375
+ <authors>
376
+ <author>
377
+ <id>18542</id>
378
+ <name><![CDATA[Eric S. Raymond]]></name>
379
+ <image_url><![CDATA[http://photo.goodreads.com/authors/1265508525p5/18542.jpg]]></image_url>
380
+ <small_image_url><![CDATA[http://photo.goodreads.com/authors/1265508525p2/18542.jpg]]></small_image_url>
381
+ <link><![CDATA[http://www.goodreads.com/author/show/18542.Eric_S_Raymond]]></link>
382
+ <average_rating>3.80</average_rating>
383
+ <ratings_count>449</ratings_count>
384
+ <text_reviews_count>50</text_reviews_count>
385
+ </author>
386
+ </authors> <published>1999</published>
387
+ </book>
388
+
389
+
390
+ <book>
391
+ <id type="integer">172314</id>
392
+ <isbn>1565922603</isbn>
393
+ <isbn13>9781565922600</isbn13>
394
+ <publication_day type="integer">1</publication_day>
395
+ <publication_month type="integer">10</publication_month>
396
+ <publication_year type="integer">1997</publication_year>
397
+ <publisher>O'Reilly</publisher>
398
+ <text_reviews_count type="integer">11</text_reviews_count>
399
+ <title>
400
+ <![CDATA[UNIX Power Tools]]>
401
+ </title>
402
+ <image_url>http://photo.goodreads.com/books/1172401017m/172314.jpg</image_url>
403
+ <small_image_url>http://photo.goodreads.com/books/1172401017s/172314.jpg</small_image_url>
404
+ <link>http://www.goodreads.com/book/show/172314.UNIX_Power_Tools</link>
405
+ <num_pages>1116</num_pages>
406
+ <average_rating>4.40</average_rating>
407
+ <ratings_count>60</ratings_count>
408
+ <description>
409
+ <![CDATA[<br/> &lt;H3&gt;Fatbrain Review&lt;/H3&gt; The classic publication on &quot;... the best free software for UNIX power users&quot; has been updated and expanded with POSIX utilities, more &#39;bash&#39; and &#39;tsch&#39; tools, updated scripts and programs. Software is pre-compiled for common UNIX platforms and Linux. This densely packed user&#39;s guide and programming reference leads you through the logical progression of in/out logging, home directory organization and terminal setup. In each case provides scripts, techniques, optimization pointers, code, very good explanations and rationale. Explains the shell environment, variables and relationships, shows how shells interpret your input, then guides you through optimized and customized shell prompts. Includes the most extensive discussion of command line use and optimization we have seen to date. Examines aliasing, job control and I/O redirection. Very good focus on file system navigation, wild cards, finding files with &#39;find&#39;, renaming, linking, archiving, backup, and of course answers the eternal question, &quot;Where did I put that?&quot; One entire chapter deals with file security, ownership and sharing, very good. Continues to emphasize file management with searching and pattern matching techniques (regular expressions), file compare and count utilities. Provides vi tips and custom command techniques, includes Emacs, sed and batch editing.<p>Needless to say, we also have utilities and programs for the &#39;Pathologically Eclectic Rubbish Lister&#39; (a.k.a. Perl 5). Concludes with an excellent exposition of process management techniques, delayed execution, time and performance issues, terminal problems, printing utilities, shell script programming anddebugging &#39;gotchas&#39;. Has a nice chapter on useful programs and curiosities that don&#39;t seem to fit anywhere else. CD-ROM contains source code and pre-compiled binaries, complete listing runs to 20 pages. <p>Publication is based on the knowledge, wisdom, expertise and technical excellence of UNIX programmers and contributors, we commend them and certainly recommend this publication.</p></p>]]>
410
+ </description>
411
+ <authors>
412
+ <author>
413
+ <id>49587</id>
414
+ <name><![CDATA[Jerry Peek]]></name>
415
+ <image_url><![CDATA[http://www.goodreads.com/images/nophoto/nophoto-U-200x266.jpg]]></image_url>
416
+ <small_image_url><![CDATA[http://www.goodreads.com/images/nophoto/nophoto-U-50x66.jpg]]></small_image_url>
417
+ <link><![CDATA[http://www.goodreads.com/author/show/49587.Jerry_Peek]]></link>
418
+ <average_rating>4.03</average_rating>
419
+ <ratings_count>91</ratings_count>
420
+ <text_reviews_count>14</text_reviews_count>
421
+ </author>
422
+ </authors> <published>1993</published>
423
+ </book>
424
+
425
+
426
+ <book>
427
+ <id type="integer">86591</id>
428
+ <isbn>0596003307</isbn>
429
+ <isbn13>9780596003302</isbn13>
430
+ <publication_day type="integer">1</publication_day>
431
+ <publication_month type="integer">10</publication_month>
432
+ <publication_year type="integer">2002</publication_year>
433
+ <publisher>O'Reilly Media</publisher>
434
+ <text_reviews_count type="integer">3</text_reviews_count>
435
+ <title>
436
+ <![CDATA[Unix Power Tools, Third Edition]]>
437
+ </title>
438
+ <image_url>http://photo.goodreads.com/books/1171070000m/86591.jpg</image_url>
439
+ <small_image_url>http://photo.goodreads.com/books/1171070000s/86591.jpg</small_image_url>
440
+ <link>http://www.goodreads.com/book/show/86591.Unix_Power_Tools_Third_Edition</link>
441
+ <num_pages>1200</num_pages>
442
+ <average_rating>4.36</average_rating>
443
+ <ratings_count>22</ratings_count>
444
+ <description>
445
+ <![CDATA[<p>With the growing popularity of Linux and the advent of Darwin, Unix has metamorphosed into something new and exciting. No longer perceived as a difficult operating system, more and more users are discovering the advantages of Unix for the first time. But whether you are a newcomer or a Unix power user, you'll find yourself thumbing through the goldmine of information in the new edition of <em>Unix Power Tools</em> to add to your store of knowledge. Want to try something new? Check this book first, and you're sure to find a tip or trick that will prevent you from learning things the hard way.<p>The latest edition of this best-selling favorite is loaded with advice about almost every aspect of Unix, covering all the new technologies that users need to know. In addition to vital information on Linux, Darwin, and BSD, <em>Unix Power Tools</em> 3rd Edition now offers more coverage of bash, zsh, and other new shells, along with discussions about modern utilities and applications. Several sections focus on security and Internet access. And there is a new chapter on access to Unix from Windows, addressing the heterogeneous nature of systems today. You'll also find expanded coverage of software installation and packaging, as well as basic information on Perl and Python.<p><em>Unix Power Tools</em> 3rd Edition is a browser's book...like a magazine that you don't read from start to finish, but leaf through repeatedly until you realize that you've read it all. Bursting with cross-references, interesting sidebars explore syntax or point out other directions for exploration, including relevant technical details that might not be immediately apparent. The book includes articles abstracted from other O'Reilly books, new information that highlights program tricks and gotchas, tips posted to the Net over the years, and other accumulated wisdom. <p>Affectionately referred to by readers as &quot;the&quot; Unix book, UNIX Power Tools provides access to information every Unix user is going to need to know. It will help you think creatively about UNIX, and will help you get to the point where you can analyze your own problems. Your own solutions won't be far behind.</p></p></p></p>]]>
446
+ </description>
447
+ <authors>
448
+ <author>
449
+ <id>49586</id>
450
+ <name><![CDATA[Shelley Powers]]></name>
451
+ <image_url><![CDATA[http://www.goodreads.com/images/nophoto/nophoto-U-200x266.jpg]]></image_url>
452
+ <small_image_url><![CDATA[http://www.goodreads.com/images/nophoto/nophoto-U-50x66.jpg]]></small_image_url>
453
+ <link><![CDATA[http://www.goodreads.com/author/show/49586.Shelley_Powers]]></link>
454
+ <average_rating>3.50</average_rating>
455
+ <ratings_count>88</ratings_count>
456
+ <text_reviews_count>23</text_reviews_count>
457
+ </author>
458
+ </authors> <published>2002</published>
459
+ </book>
460
+
461
+
462
+ <book>
463
+ <id type="integer">6438581</id>
464
+ <isbn>0596522304</isbn>
465
+ <isbn13>9780596522308</isbn13>
466
+ <publication_day type="integer">15</publication_day>
467
+ <publication_month type="integer">6</publication_month>
468
+ <publication_year type="integer">2009</publication_year>
469
+ <publisher>O'Reilly Media, Inc.</publisher>
470
+ <text_reviews_count type="integer">6</text_reviews_count>
471
+ <title>
472
+ <![CDATA[Even Faster Web Sites: Performance Best Practices for Web Developers]]>
473
+ </title>
474
+ <image_url>http://photo.goodreads.com/books/1266697921m/6438581.jpg</image_url>
475
+ <small_image_url>http://photo.goodreads.com/books/1266697921s/6438581.jpg</small_image_url>
476
+ <link>http://www.goodreads.com/book/show/6438581-even-faster-web-sites</link>
477
+ <num_pages>200</num_pages>
478
+ <average_rating>4.32</average_rating>
479
+ <ratings_count>22</ratings_count>
480
+ <description>
481
+ <![CDATA[As an important follow-up to O'Reilly's bestselling High Performance Web Sites, this second edition offers additional rules for speeding up web page loading and responsiveness. High Performance Web Sites demonstrated that 80% of the time it takes for a web page to load is due to inefficient browser activity, and the book provided 14 rules to cut 20% to 25% off the response time. Now, Even Faster Web Sites presents 15 more rules that author Steve Souders has developed from his work as web operations manager at Yahoo! and Google. Completely practical, and easy to understand and apply, the rules in this book show you how to shave precious seconds off display and response times for web pages. Even Faster Web Sites includes contributions from guest authors on hot-button issues such as dynamic JavaScript, event handling, and images.]]>
482
+ </description>
483
+ <authors>
484
+ <author>
485
+ <id>775693</id>
486
+ <name><![CDATA[Steve Souders]]></name>
487
+ <image_url><![CDATA[http://www.goodreads.com/images/nophoto/nophoto-U-200x266.jpg]]></image_url>
488
+ <small_image_url><![CDATA[http://www.goodreads.com/images/nophoto/nophoto-U-50x66.jpg]]></small_image_url>
489
+ <link><![CDATA[http://www.goodreads.com/author/show/775693.Steve_Souders]]></link>
490
+ <average_rating>4.23</average_rating>
491
+ <ratings_count>113</ratings_count>
492
+ <text_reviews_count>28</text_reviews_count>
493
+ </author>
494
+ </authors> <published>2009</published>
495
+ </book>
496
+
497
+
498
+ <book>
499
+ <id type="integer">53751</id>
500
+ <isbn>0425097854</isbn>
501
+ <isbn13>9780425097854</isbn13>
502
+ <publication_day type="integer">1</publication_day>
503
+ <publication_month type="integer">5</publication_month>
504
+ <publication_year type="integer">1987</publication_year>
505
+ <publisher>Berkley Trade</publisher>
506
+ <text_reviews_count type="integer">1</text_reviews_count>
507
+ <title>
508
+ <![CDATA[Maker of Dune]]>
509
+ </title>
510
+ <image_url>http://www.goodreads.com/images/nocover-111x148.jpg</image_url>
511
+ <small_image_url>http://www.goodreads.com/images/nocover-60x80.jpg</small_image_url>
512
+ <link>http://www.goodreads.com/book/show/53751.Maker_of_Dune</link>
513
+ <num_pages>279</num_pages>
514
+ <average_rating>4.15</average_rating>
515
+ <ratings_count>20</ratings_count>
516
+ <description>
517
+ <![CDATA[]]>
518
+ </description>
519
+ <authors>
520
+ <author>
521
+ <id>58</id>
522
+ <name><![CDATA[Frank Herbert]]></name>
523
+ <image_url><![CDATA[http://photo.goodreads.com/authors/1168661521p5/58.jpg]]></image_url>
524
+ <small_image_url><![CDATA[http://photo.goodreads.com/authors/1168661521p2/58.jpg]]></small_image_url>
525
+ <link><![CDATA[http://www.goodreads.com/author/show/58.Frank_Herbert]]></link>
526
+ <average_rating>3.83</average_rating>
527
+ <ratings_count>189447</ratings_count>
528
+ <text_reviews_count>5551</text_reviews_count>
529
+ </author>
530
+ </authors> <published>1985</published>
531
+ </book>
532
+
533
+
534
+ <book>
535
+ <id type="integer">265506</id>
536
+ <isbn>1565920902</isbn>
537
+ <isbn13>9781565920903</isbn13>
538
+ <publication_day type="integer">1</publication_day>
539
+ <publication_month type="integer">12</publication_month>
540
+ <publication_year type="integer">1994</publication_year>
541
+ <publisher>O'Reilly Media</publisher>
542
+ <text_reviews_count type="integer">1</text_reviews_count>
543
+ <title>
544
+ <![CDATA[Exploring Expect (Nutshell Handbooks)]]>
545
+ </title>
546
+ <image_url>http://photo.goodreads.com/books/1173255577m/265506.jpg</image_url>
547
+ <small_image_url>http://photo.goodreads.com/books/1173255577s/265506.jpg</small_image_url>
548
+ <link>http://www.goodreads.com/book/show/265506.Exploring_Expect</link>
549
+ <num_pages>602</num_pages>
550
+ <average_rating>4.33</average_rating>
551
+ <ratings_count>6</ratings_count>
552
+ <description>
553
+ <![CDATA[<br/> &lt;H3&gt;Fatbrain Review&lt;/H3&gt; Expect is a commercial software suite specifically optimized to help automate interactive programs. It is a Tcl-based toolkit and uses Tcl, the powerful and extensible scripting language developed by Dr. Ousterhout. This tutorial and user&#39;s guide is based on the man page documentation bundled with the product, but enhanced and expanded from 25 to 566 pages. Discusses the Expect basics, regular expressions, pattern, action and limits. Explains process, multiple process, background processing and simultaneous multiple process handling and interaction. Debugging information is logically presented, a very good chapter explains C/C++ function calls (Expect can also be used without Tcl). Information is presented in a logical and eminently readable style with very good examples throughout. <em>Tcl and the Tk Toolkit</em>, by John K. Ousterhout was reviewed on pp 7 of our Summer &#39;94 New Book Bulletin and is a highly recommended companion volume for <em>Exploring Expect</em>.]]>
554
+ </description>
555
+ <authors>
556
+ <author>
557
+ <id>155064</id>
558
+ <name><![CDATA[Don Libes]]></name>
559
+ <image_url><![CDATA[http://www.goodreads.com/images/nophoto/nophoto-U-200x266.jpg]]></image_url>
560
+ <small_image_url><![CDATA[http://www.goodreads.com/images/nophoto/nophoto-U-50x66.jpg]]></small_image_url>
561
+ <link><![CDATA[http://www.goodreads.com/author/show/155064.Don_Libes]]></link>
562
+ <average_rating>3.88</average_rating>
563
+ <ratings_count>8</ratings_count>
564
+ <text_reviews_count>2</text_reviews_count>
565
+ </author>
566
+ </authors> <published>1994</published>
567
+ </book>
568
+
569
+
570
+ <book>
571
+ <id type="integer">583674</id>
572
+ <isbn>0937175226</isbn>
573
+ <isbn13>9780937175224</isbn13>
574
+ <publication_day type="integer">3</publication_day>
575
+ <publication_month type="integer">4</publication_month>
576
+ <publication_year type="integer">1988</publication_year>
577
+ <publisher>O'Reilly Media</publisher>
578
+ <text_reviews_count type="integer">0</text_reviews_count>
579
+ <title>
580
+ <![CDATA[termcap & terminfo]]>
581
+ </title>
582
+ <image_url>http://photo.goodreads.com/books/1176009629m/583674.jpg</image_url>
583
+ <small_image_url>http://photo.goodreads.com/books/1176009629s/583674.jpg</small_image_url>
584
+ <link>http://www.goodreads.com/book/show/583674.termcap_terminfo</link>
585
+ <num_pages>261</num_pages>
586
+ <average_rating>4.00</average_rating>
587
+ <ratings_count>4</ratings_count>
588
+ <description>
589
+ <![CDATA[<p>While termcap and terminfo are no longer as important as they once were, due to the growth of the X terminal market and increased standardization among ASCII terminals, handling different terminal types can still be a headache for system administrators. The termcap and terminfo databases are UNIX's solution to the difficulty of supporting many terminals without writing special drivers for each terminal. Termcap (BSD) and terminfo (System V) describe the features of hundreds of terminals, together with a library of routines that allow programs to use those capabilities.<p>This book documents hundreds of capabilities and syntax for termcap and terminfo, writing and debugging terminal descriptions, and terminal initialization.<p>Contents include&#58; <p>&lt;ul&gt;&lt;li&gt;Terminal independence&#58; the need for termcap and terminfo. &lt;li&gt;Reading termcap and terminfo entries. &lt;li&gt;Capability syntax. &lt;li&gt;Initializing the terminal environment. &lt;li&gt;Writing termcap and terminfo entries. &lt;li&gt;Converting between termcap and terminfo. &lt;li&gt;Detailed descriptions of the capabilities. &lt;li&gt;Screen dimensions and cursor movement. &lt;li&gt;Initialization and reset. &lt;li&gt;Special and equivalent terminals. &lt;li&gt;Many useful appendices.<p>Linda Mui started working for O'Reilly &amp; Associates in 1986. She was first hired as a production assistant, later became an apprentice system administrator, and now is a writer. Her first writing job was for termcap and terminfo, which she co-authored with John Strang and Tim O'Reilly. She also wrote Pick BASIC, on programming applications for Pick systems. In between writing jobs, Linda works on troff macros and tools for the O'Reilly &amp; Associates production staff. Linda was raised in the Bronx, New York and now lives in Cambridge, Massachusetts. Lately she has been trying to improve herself by learning how to swim, play billiards, and accessorize.<p>Tim O'Reilly is the founder and CEO of O'Reilly &amp; Associates, thought by many to be the best computer book publisher in the world. O'Reilly also publishes online through the O'Reilly Network (<a rel="nofollow" target="_blank" href="http://www.oreillynet.com">www.oreillynet.com</a>) and hosts conferences on technology topics. Tim is an activist for open source and open standards, and an opponent of software patents and other incursions of new intellectual property laws into the public domain. Tim's long term vision for his company is to help change the world by capturing and transmitting the knowledge of innovators.<p>John Strang now finds himself &quot;a consumer&#151;rather than a producer of Nutshells.&quot; He is currently a diagnostic radiologist (MD) at Stanford University. He is married to a pediatrician, Susie, and they have two children, Katie and Alex. John enjoys hiking, bicycling, and dabbling in other sciences. He plans to use his experience as an author at ORA to write his own book on radiology.</p></p></p></p></p></p></p>]]>
590
+ </description>
591
+ <authors>
592
+ <author>
593
+ <id>65081</id>
594
+ <name><![CDATA[John Strang]]></name>
595
+ <image_url><![CDATA[http://www.goodreads.com/images/nophoto/nophoto-U-200x266.jpg]]></image_url>
596
+ <small_image_url><![CDATA[http://www.goodreads.com/images/nophoto/nophoto-U-50x66.jpg]]></small_image_url>
597
+ <link><![CDATA[http://www.goodreads.com/author/show/65081.John_Strang]]></link>
598
+ <average_rating>3.60</average_rating>
599
+ <ratings_count>25</ratings_count>
600
+ <text_reviews_count>2</text_reviews_count>
601
+ </author>
602
+ </authors> <published>1988</published>
603
+ </book>
604
+
605
+
606
+ <book>
607
+ <id type="integer">2918269</id>
608
+ <isbn>0596527691</isbn>
609
+ <isbn13>9780596527693</isbn13>
610
+ <publication_day type="integer">1</publication_day>
611
+ <publication_month type="integer">11</publication_month>
612
+ <publication_year type="integer">2006</publication_year>
613
+ <publisher>O'Reilly Media</publisher>
614
+ <text_reviews_count type="integer">0</text_reviews_count>
615
+ <title>
616
+ <![CDATA[Web 2.0 Report]]>
617
+ </title>
618
+ <image_url>http://photo.goodreads.com/books/1267369299m/2918269.jpg</image_url>
619
+ <small_image_url>http://photo.goodreads.com/books/1267369299s/2918269.jpg</small_image_url>
620
+ <link>http://www.goodreads.com/book/show/2918269-web-2-0-report</link>
621
+ <num_pages>101</num_pages>
622
+ <average_rating>5.00</average_rating>
623
+ <ratings_count>3</ratings_count>
624
+ <description>
625
+ <![CDATA[Web 2.0 is here today and yet its vast, disruptive impact is just beginning. More than just the latest technology buzzword, it's a transformative force that's propelling companies across all industries towards a new way of doing business characterized by user participation, openness, and network effects. What does Web 2.0 mean to your company and products? What are the risks and opportunities? What are the proven strategies for successfully capitalizing on these changes? O'Reilly Radar's Web 2.0 Principles and Best Practices lays out the answers the why, what, who, and how of Web 2.0. It's an indispensable guide for technology decision-makers executives, product strategists, entrepreneurs, and thought leaders who are ready to compete and prosper in today's Web 2.0 world.]]>
626
+ </description>
627
+ <authors>
628
+ <author>
629
+ <id>919529</id>
630
+ <name><![CDATA[John Musser]]></name>
631
+ <image_url><![CDATA[http://www.goodreads.com/images/nophoto/nophoto-U-200x266.jpg]]></image_url>
632
+ <small_image_url><![CDATA[http://www.goodreads.com/images/nophoto/nophoto-U-50x66.jpg]]></small_image_url>
633
+ <link><![CDATA[http://www.goodreads.com/author/show/919529.John_Musser]]></link>
634
+ <average_rating>5.00</average_rating>
635
+ <ratings_count>3</ratings_count>
636
+ <text_reviews_count>0</text_reviews_count>
637
+ </author>
638
+ </authors> <published>2006</published>
639
+ </book>
640
+
641
+
642
+ <book>
643
+ <id type="integer">7634612</id>
644
+ <isbn>1565927214</isbn>
645
+ <isbn13>9781565927216</isbn13>
646
+ <publication_day type="integer">1</publication_day>
647
+ <publication_month type="integer">2</publication_month>
648
+ <publication_year type="integer">2000</publication_year>
649
+ <publisher>O'Reilly Media, Incorporated</publisher>
650
+ <text_reviews_count type="integer">0</text_reviews_count>
651
+ <title>
652
+ <![CDATA[MCSE the Core Exams in a Nutshell]]>
653
+ </title>
654
+ <image_url>http://photo.goodreads.com/books/1266822388m/7634612.jpg</image_url>
655
+ <small_image_url>http://photo.goodreads.com/books/1266822388s/7634612.jpg</small_image_url>
656
+ <link>http://www.goodreads.com/book/show/7634612-mcse-the-core-exams-in-a-nutshell</link>
657
+ <num_pages>486</num_pages>
658
+ <average_rating>5.00</average_rating>
659
+ <ratings_count>1</ratings_count>
660
+ <description>
661
+ <![CDATA[]]>
662
+ </description>
663
+ <authors>
664
+ <author>
665
+ <id>334022</id>
666
+ <name><![CDATA[Michael Moncur]]></name>
667
+ <image_url><![CDATA[http://www.goodreads.com/images/nophoto/nophoto-U-200x266.jpg]]></image_url>
668
+ <small_image_url><![CDATA[http://www.goodreads.com/images/nophoto/nophoto-U-50x66.jpg]]></small_image_url>
669
+ <link><![CDATA[http://www.goodreads.com/author/show/334022.Michael_Moncur]]></link>
670
+ <average_rating>3.05</average_rating>
671
+ <ratings_count>20</ratings_count>
672
+ <text_reviews_count>3</text_reviews_count>
673
+ </author>
674
+ </authors> <published>2000</published>
675
+ </book>
676
+
677
+
678
+ <book>
679
+ <id type="integer">2218653</id>
680
+ <isbn>1565920139</isbn>
681
+ <isbn13>9781565920132</isbn13>
682
+ <publication_day type="integer">2</publication_day>
683
+ <publication_month type="integer">8</publication_month>
684
+ <publication_year type="integer">1992</publication_year>
685
+ <publisher>O'Reilly Media, Inc.</publisher>
686
+ <text_reviews_count type="integer">0</text_reviews_count>
687
+ <title>
688
+ <![CDATA[X Toolkit Intrinsics Prog Vol 4M: Motif Edition]]>
689
+ </title>
690
+ <image_url>http://photo.goodreads.com/books/1266645433m/2218653.jpg</image_url>
691
+ <small_image_url>http://photo.goodreads.com/books/1266645433s/2218653.jpg</small_image_url>
692
+ <link>http://www.goodreads.com/book/show/2218653.X_Toolkit_Intrinsics_Prog_Vol_4M</link>
693
+ <num_pages>712</num_pages>
694
+ <average_rating>3.00</average_rating>
695
+ <ratings_count>1</ratings_count>
696
+ <description>
697
+ <![CDATA[<p>Volume 4 is a complete guide to programming with the X Toolkit Intrinsics, the library of C language routines that facilitates the design of user interfaces with reusable components called widgets. It provides concepts and examples that show how to use the various X Toolkit routines. The first few chapters are devoted to using widgets; the remainder of the book covers the more complex task of writing new widgets.<p>Uses the Motif 1.2 widget set in examples and covers X11 Release 5. <p>Volume 4 includes&#58; <p> &lt;ul&gt;&lt;li&gt;Introduction to the X Window System. &lt;li&gt;Building applications with widgets. &lt;li&gt;Constructing a bitmap editor with widgets. &lt;li&gt;An overview of each widget in the widget set. &lt;li&gt;Basic widget methods. &lt;li&gt;Events, translations, and accelerators. &lt;li&gt;Event handlers, timeouts, and work procedures. &lt;li&gt;Resource management and type conversion. &lt;li&gt;Selections and window manager interaction. &lt;li&gt;Geometry management. &lt;li&gt;Menus, gadgets, and cascaded pop-ups. &lt;li&gt;Miscellaneous techniques. &lt;li&gt;Comparison of Athena, OSF/Motif, and AT&amp;T OPEN LOOK widgets.<p>This book is designed to be used with Volume 5, <em>X Toolkit Intrinsics Reference Manual</em>, which provides reference pages for each of the Xt functions, the widget classes defined by Xt, and the Athena widget set.<p><p>Adrian Nye is the author or editor of several volumes in the X Window System Series from O'Reilly &amp; Associates. Adrian has worked as a programmer writing educational software in C and as a mechanical engineer designing offshore oil spill cleanup equipment. He has interests in the environment and the impact of people and technology. He graduated from the Massachusetts Institute of Technology in 1984 with a B.S. in mechanical engineering.<p>Tim O'Reilly is the founder and CEO of O'Reilly &amp; Associates, thought by many to be the best computer book publisher in the world. O'Reilly also publishes online through the O'Reilly Network (<a rel="nofollow" target="_blank" href="http://www.oreillynet.com">www.oreillynet.com</a>) and hosts conferences on technology topics. Tim is an activist for open source and open standards, and an opponent of software patents and other incursions of new intellectual property laws into the public domain. Tim's long term vision for his company is to help change the world by capturing and transmitting the knowledge of innovators.</p></p></p></p></p></p></p></p>]]>
698
+ </description>
699
+ <authors>
700
+ <author>
701
+ <id>100491</id>
702
+ <name><![CDATA[Adrian Nye]]></name>
703
+ <image_url><![CDATA[http://www.goodreads.com/images/nophoto/nophoto-U-200x266.jpg]]></image_url>
704
+ <small_image_url><![CDATA[http://www.goodreads.com/images/nophoto/nophoto-U-50x66.jpg]]></small_image_url>
705
+ <link><![CDATA[http://www.goodreads.com/author/show/100491.Adrian_Nye]]></link>
706
+ <average_rating>3.14</average_rating>
707
+ <ratings_count>7</ratings_count>
708
+ <text_reviews_count>0</text_reviews_count>
709
+ </author>
710
+ </authors> <published>1992</published>
711
+ </book>
712
+
713
+
714
+ </books>
715
+ </author>
716
+ </GoodreadsResponse>