Ruby Cookbook(影印版)
Ruby Cookbook(影印版)
Lucas Carlson, Leonard Richardson
出版时间:2006年10月
页数:873
你想探究Ruby的极致吗?Ruby Cookbook就是关于这一当今最热门编程语言的最全面的问题求解指南。本书使用清晰的阐述和数千行可以在你的项目中使用的源代码,来为在实际应用中可能碰到的数百个问题提供解决方法。从数据结构到集成前沿技术的算法,Ruby Cookbook为每一位编程人员都准备了一些专题。初学者和资深的Ruby专家都可以从本书学习到下列专题中有关Ruby编程的知识和技巧:
●字符串和数字
●数据库
●数组和哈希表
●图像
●类、模块和命名空间
●互联网服务,如电子邮件、SSH和BitTorrent
●反射机制和元编程
●XML和HTML处理
●多任务
●Ruby on Rails(包括Ajax 集成)
●图形界面和终端界面
如果你需要一个网络应用程序,本书将向你展示如何使用Rails来开始进行开发。假设你需要重命名数以千计的文件,本书将告诉你如何使用Ruby来完成诸如此类的日常任务。你还可以学习如何使用Ruby读写微软Excel表格文件,如何使用贝叶斯(Bayesian)过滤器进行文本归类以及如何创建PDF文件。甚至本书还将介绍一些冒傻气的把戏,比如如何让你的键盘灯闪烁不停。
总而言之,在目前已写成的关于Ruby的书中,Ruby Cookbook是最有用的一本。如果你需要解决一个Ruby问题,大可不必进行重复劳动,就直接在本书中寻找现成答案吧。
Lucas Carlson是一位专注于使用Rails进行网络开发的专业Ruby程序员。他是6个Ruby库程序的作者,也对其他很多库程序有所贡献,其中包括Rails以及RedCloth。
Leonard Richardson负责为多种编程语言开发和维护库程序,其中包括Rubyful Soup。
“程序员并不是仅仅靠语法知识就可以生存的,而是要靠他们所编写的每一行实际的代码。本书充满了实用的方法、技巧、知识和智慧。我希望它将读者的Ruby编程带入更高境界。”
- Yukihiro(Matz)Matsumoto,Ruby的作者
“你认为书中各个主题不过是些传统的日常菜谱,错,其实它们全都是被涂上了粘稠的荷兰奶酪酱的美味。哦,伙计,这就是实例:杂凑的版本系统,几个BitTorrent的客户端以及你走失的恐龙的寻物启事。有关各种协议的这一章好有趣。好像大快朵颐后浓稠香甜的酱汁将从你的嘴边流下来!对了,还有些大块的咸肉。”
-why the lucky stiff
  1. Preface
  2. 1. Strings
  3. 1.1 Building a String from Parts
  4. 1.2 Substituting Variables into Strings
  5. 1.3 Substituting Variables into an Existing String
  6. 1.4 Reversing a String by Words or Characters
  7. 1.5 Representing Unprintable Characters
  8. 1.6 Converting Between Characters and Values
  9. 1.7 Converting Between Strings and Symbols
  10. 1.8 Processing a String One Character at a Time
  11. 1.9 Processing a String One Word at a Time
  12. 1.10 Changing the Case of a String
  13. 1.11 Managing Whitespace
  14. 1.12 Testing Whether an Object Is String-Like
  15. 1.13 Getting the Parts of a String You Want
  16. 1.14 Handling International Encodings
  17. 1.15 Word-Wrapping Lines of Text
  18. 1.16 Generating a Succession of Strings
  19. 1.17 Matching Strings with Regular Expressions
  20. 1.18 Replacing Multiple Patterns in a Single Pass
  21. 1.19 Validating an Email Address
  22. 1.20 Classifying Text with a Bayesian Analyzer
  23. 2. Numbers
  24. 2.1 Parsing a Number from a String
  25. 2.2 Comparing Floating-Point Numbers
  26. 2.3 Representing Numbers to Arbitrary Precision
  27. 2.4 Representing Rational Numbers
  28. 2.5 Generating Random Numbers
  29. 2.6 Converting Between Numeric Bases
  30. 2.7 Taking Logarithms
  31. 2.8 Finding Mean,Median,and Mode
  32. 2.9 Converting Between Degrees and Radians
  33. 2.10 Multiplying Matrices
  34. 2.11 Solving a System of Linear Equations
  35. 2.12 Using Complex Numbers
  36. 2.13 Simulating a Subclass of Fixnum
  37. 2.14 Doing Math with Roman Numbers
  38. 2.15 Generating a Sequence of Numbers
  39. 2.16 Generating Prime Numbers
  40. 2.17 Checking a Credit Card Checksum
  41. 3. Date and Time
  42. 3.1 Finding Today ’s Date
  43. 3.2 Parsing Dates,Precisely or Fuzzily
  44. 3.3 Printing a Date
  45. 3.4 Iterating Over Dates
  46. 3.5 Doing Date Arithmetic
  47. 3.6 Counting the Days Since an Arbitrary Date
  48. 3.7 Converting Between Time Zones
  49. 3.8 Checking Whether Daylight Saving Time Is in Effect
  50. 3.9 Converting Between Time and DateTime Objects
  51. 3.10 Finding the Day of the Week
  52. 3.11 Handling Commercial Dates
  53. 3.12 Running a Code Block Periodically
  54. 3.13 Waiting a Certain Amount of Time
  55. 3.14 Adding a Timeout to a Long-Running Operation
  56. 4. Arrays
  57. 4.1 Iterating Over an Array
  58. 4.2 Rearranging Values Without Using Temporary Variables
  59. 4.3 Stripping Duplicate Elements from an Array
  60. 4.4 Reversing an Array
  61. 4.5 Sorting an Array
  62. 4.6 Ignoring Case When Sorting Strings
  63. 4.7 Making Sure a Sorted Array Stays Sorted
  64. 4.8 Summing the Items of an Array
  65. 4.9 Sorting an Array by Frequency of Appearance
  66. 4.10 Shuffling an Array
  67. 4.11 Getting the N Smallest Items of an Array
  68. 4.12 Building Up a Hash Using Injection
  69. 4.13 Extracting Portions of Arrays
  70. 4.14 Computing Set Operations on Arrays
  71. 4.15 Partitioning or Classifying a Set
  72. 5. Hashes
  73. 5.1 Using Symbols as Hash Keys
  74. 5.2 Creating a Hash with a Default Value
  75. 5.3 Adding Elements to a Hash
  76. 5.4 Removing Elements from a Hash
  77. 5.5 Using an Array or Other Modifiable Object as a Hash Key
  78. 5.6 Keeping Multiple Values for the Same Hash Key
  79. 5.7 Iterating Over a Hash
  80. 5.8 Iterating Over a Hash in Insertion Order
  81. 5.9 Printing a Hash
  82. 5.10 Inverting a Hash
  83. 5.11 Choosing Randomly from a Weighted List
  84. 5.12 Building a Histogram
  85. 5.13 Remapping the Keys and Values of a Hash
  86. 5.14 Extracting Portions of Hashes
  87. 5.15 Searching a Hash with Regular Expressions
  88. 6. Files and Directories
  89. 6.1 Checking to See If a File Exists
  90. 6.2 Checking Your Access to a File
  91. 6.3 Changing the Permissions on a File
  92. 6.4 Seeing When a File Was Last Used
  93. 6.5 Listing a Directory
  94. 6.6 Reading the Contents of a File
  95. 6.7 Writing to a File
  96. 6.8 Writing to a Temporary File
  97. 6.9 Picking a Random Line from a File
  98. 6.10 Comparing Two Files
  99. 6.11 Performing Random Access on “Read-Once ” Input Streams
  100. 6.12 Walking a Directory Tree
  101. 6.13 Locking a File
  102. 6.14 Backing Up to Versioned Filenames
  103. 6.15 Pretending a String Is a File
  104. 6.16 Redirecting Standard Input or Output
  105. 6.17 Processing a Binary File
  106. 6.18 Deleting a File
  107. 6.19 Truncating a File
  108. 6.20 Finding the Files You Want
  109. 6.21 Finding and Changing the Current Working Directory
  110. 7. Code Blocks and Iteration
  111. 7.1 Creating and Invoking a Block
  112. 7.2 Writing a Method That Accepts a Block
  113. 7.3 Binding a Block Argument to a Variable
  114. 7.4 Blocks as Closures:Using Outside Variables Within a Code Block
  115. 7.5 Writing an Iterator Over a Data Structure
  116. 7.6 Changing the Way an Object Iterates
  117. 7.7 Writing Block Methods That Classify or Collect
  118. 7.8 Stopping an Iteration
  119. 7.9 Looping Through Multiple Iterables in Parallel
  120. 7.10 Hiding Setup and Cleanup in a Block Method
  121. 7.11 Coupling Systems Loosely with Callbacks
  122. 8. Objects and Classes
  123. 8.1 Managing Instance Data
  124. 8.2 Managing Class Data
  125. 8.3 Checking Class or Module Membership
  126. 8.4 Writing an Inherited Class
  127. 8.5 Overloading Methods
  128. 8.6 Validating and Modifying Attribute Values
  129. 8.7 Defining a Virtual Attribute
  130. 8.8 Delegating Method Calls to Another Object
  131. 8.9 Converting and Coercing Objects to Different Types
  132. 8.10 Getting a Human-Readable Printout of AnyObject
  133. 8.11 Accepting or Passing a Variable Number of Arguments
  134. 8.12 Simulating Keyword Arguments
  135. 8.13 Calling a Superclass ’s Method
  136. 8.14 Creating an Abstract Method
  137. 8.15 Freezing an Object to Prevent Changes
  138. 8.16 Making a Copy of an Object
  139. 8.17 Declaring Constants
  140. 8.18 Implementing Class and Singleton Methods
  141. 8.19 Controlling Access by Making Methods Private
  142. 9. Modules and Namespaces
  143. 9.1 Simulating Multiple Inheritance with Mixins
  144. 9.2 Extending Specific Objects with Modules
  145. 9.3 Mixing in Class Methods
  146. 9.4 Implementing Enumerable:Write One Method,Get 22 Free
  147. 9.5 Avoiding Naming Collisions with Namespaces
  148. 9.6 Automatically Loading Libraries as Needed
  149. 9.7 Including Namespaces
  150. 9.8 Initializing Instance Variables Defined bya Module
  151. 9.9 Automatically Initializing Mixed-In Modules
  152. 10. Reflection and Metaprogramming
  153. 10.1 Finding an Object ’s Class and Superclass
  154. 10.2 Listing an Object ’s Methods
  155. 10.3 Listing Methods Unique to an Object
  156. 10.4 Getting a Reference to a Method
  157. 10.5 Fixing Bugs in Someone Else ’s Class
  158. 10.6 Listening for Changes to a Class
  159. 10.7 Checking Whether an Object Has Necessary Attributes
  160. 10.8 Responding to Calls to Undefined Methods
  161. 10.9 Automatically Initializing Instance Variables
  162. 10.10 Avoiding Boilerplate Code with Metaprogramming
  163. 10.11 Metaprogramming with String Evaluations
  164. 10.12 Evaluating Code in an Earlier Context
  165. 10.13 Undefining a Method
  166. 10.14 Aliasing Methods
  167. 10.15 Doing Aspect-Oriented Programming
  168. 10.16 Enforcing Software Contracts
  169. 11. XML and HTML
  170. 11.1 Checking XML Well-Formedness
  171. 11.2 Extracting Data from a Document ’s Tree Structure
  172. 11.3 Extracting Data While Parsing a Document
  173. 11.4 Navigating a Document with XPath
  174. 11.5 Parsing Invalid Markup
  175. 11.6 Converting an XML Document into a Hash
  176. 11.7 Validating an XML Document
  177. 11.8 Substituting XML Entities
  178. 11.9 Creating and Modifying XML Documents
  179. 11.10 Compressing Whitespace in an XML Document
  180. 11.11 Guessing a Document ’s Encoding
  181. 11.12 Converting from One Encoding to Another
  182. 11.13 Extracting All the URLs from an HTML Document
  183. 11.14 Transforming Plain Text to HTML
  184. 11.15 Converting HTML Documents from the Web into Text
  185. 11.16 A Simple Feed Aggregator
  186. 12. Graphics and Other File Formats
  187. 12.1 Thumbnailing Images
  188. 12.2 Adding Text to an Image
  189. 12.3 Converting One Image Format to Another
  190. 12.4 Graphing Data
  191. 12.5 Adding Graphical Context with Sparklines
  192. 12.6 Strongly Encrypting Data
  193. 12.7 Parsing Comma-Separated Data
  194. 12.8 Parsing Not-Quite-Comma-Separated Data
  195. 12.9 Generating and Parsing Excel Spreadsheets
  196. 12.10 Compressing and Archiving Files with Gzip and Tar
  197. 12.11 Reading and Writing ZIP Files
  198. 12.12 Reading and Writing Configuration Files
  199. 12.13 Generating PDF Files
  200. 12.14 Representing Data as MIDI Music
  201. 13. Databases and Persistence
  202. 13.1 Serializing Data with YAML
  203. 13.2 Serializing Data with Marshal
  204. 13.3 Persisting Objects with Madeleine
  205. 13.4 Indexing Unstructured Text with SimpleSearch
  206. 13.5 Indexing Structured Text with Ferret
  207. 13.6 Using Berkeley DB Databases
  208. 13.7 Controlling MySQL on Unix
  209. 13.8 Finding the Number of Rows Returned bya Query
  210. 13.9 Talking Directly to a MySQL Database
  211. 13.10 Talking Directly to a PostgreSQL Database
  212. 13.11 Using Object Relational Mapping with ActiveRecord
  213. 13.12 Using Object Relational Mapping with Og
  214. 13.13 Building Queries Programmatically
  215. 13.14 Validating Data with ActiveRecord
  216. 13.15 Preventing SQL Injection Attacks
  217. 13.16 Using Transactions in ActiveRecord
  218. 13.17 Adding Hooks to Table Events
  219. 13.18 Adding Taggability with a Database Mixin
  220. 14. Internet Services
  221. 14.1 Grabbing the Contents of a Web Page
  222. 14.2 Making an HTTPS Web Request
  223. 14.3 Customizing HTTP Request Headers
  224. 14.4 Performing DNS Queries
  225. 14.5 Sending Mail
  226. 14.6 Reading Mail with IMAP
  227. 14.7 Reading Mail with POP3
  228. 14.8 Being an FTP Client
  229. 14.9 Being a Telnet Client
  230. 14.10 Being an SSH Client
  231. 14.11 Copying a File to Another Machine
  232. 14.12 Being a BitTorrent Client
  233. 14.13 Pinging a Machine
  234. 14.14 Writing an Internet Server
  235. 14.15 Parsing URLs
  236. 14.16 Writing a CGI Script
  237. 14.17 Setting Cookies and Other HTTP Response Headers
  238. 14.18 Handling File Uploads via CGI
  239. 14.19 Running Servlets with WEBrick
  240. 14.20 A Real-World HTTP Client
  241. 15. Web Development: Ruby on Rails
  242. 15.1 Writing a Simple Rails Application to Show System Status
  243. 15.2 Passing Data from the Controller to the View
  244. 15.3 Creating a Layout for Your Header and Footer
  245. 15.4 Redirecting to a Different Location
  246. 15.5 Displaying Templates with Render
  247. 15.6 Integrating a Database with Your Rails Application
  248. 15.7 Understanding Pluralization Rules
  249. 15.8 Creating a Login System
  250. 15.9 Storing Hashed User Passwords in the Database
  251. 15.10 Escaping HTML and JavaScript for Display
  252. 15.11 Setting and Retrieving Session Information
  253. 15.12 Setting and Retrieving Cookies
  254. 15.13 Extracting Code into Helper Functions
  255. 15.14 Refactoring the View into Partial Snippets of Views
  256. 15.15 Adding DHTML Effects with script.aculo.us
  257. 15.16 Generating Forms for Manipulating Model Objects
  258. 15.17 Creating an Ajax Form
  259. 15.18 Exposing Web Services on Your Web Site
  260. 15.19 Sending Mail with Rails
  261. 15.20 Automatically Sending Error Messages to Your Email
  262. 15.21 Documenting Your Web Site
  263. 15.22 Unit Testing Your Web Site
  264. 15.23 Using breakpoint in Your Web Application
  265. 16. Web Services and Distributed Programming
  266. 16.1 Searching for Books on Amazon
  267. 16.2 Finding Photos on Flickr
  268. 16.3 Writing an XML-RPC Client
  269. 16.4 Writing a SOAP Client
  270. 16.5 Writing a SOAP Server
  271. 16.6 Searching the Web with Google ’s SOAP Service
  272. 16.7 Using a WSDL File to Make SOAP Calls Easier
  273. 16.8 Charging a Credit Card
  274. 16.9 Finding the Cost to Ship Packages via UPS or FedEx
  275. 16.10 Sharing a Hash Between Any Number of Computers
  276. 16.11 Implementing a Distributed Queue
  277. 16.12 Creating a Shared “Whiteboard ”
  278. 16.13 Securing DRb Services with Access Control Lists
  279. 16.14 Automatically Discovering DRb Services with Rinda
  280. 16.15 Proxying Objects That Can ’t Be Distributed
  281. 16.16 Storing Data on Distributed RAM with MemCached
  282. 16.17 Caching Expensive Results with MemCached
  283. 16.18 A Remote-Controlled Jukebox
  284. 17. Testing, Debugging, Optimizing, and Documenting
  285. 17.1 Running Code Only in Debug Mode
  286. 17.2 Raising an Exception
  287. 17.3 Handling an Exception
  288. 17.4 Rerunning After an Exception
  289. 17.5 Adding Logging to Your Application
  290. 17.6 Creating and Understanding Tracebacks
  291. 17.7 Writing Unit Tests
  292. 17.8 Running Unit Tests
  293. 17.9 Testing Code That Uses External Resources
  294. 17.10 Using breakpoint to Inspect and Change the State of Your Application
  295. 17.11 Documenting Your Application
  296. 17.12 Profiling Your Application
  297. 17.13 Benchmarking Competing Solutions
  298. 17.14 Running Multiple Analysis Tools at Once
  299. 17.15 Who ’s Calling That Method?A Call Graph Analyzer
  300. 18. Packaging and Distributing Software
  301. 18.1 Finding Libraries by Querying Gem Respositories
  302. 18.2 Installing and Using a Gem
  303. 18.3 Requiring a Specific Version of a Gem
  304. 18.4 Uninstalling a Gem
  305. 18.5 Reading Documentation for Installed Gems
  306. 18.6 Packaging Your Code as a Gem
  307. 18.7 Distributing Your Gems
  308. 18.8 Installing and Creating Standalone Packages with setup.rb
  309. 19. Automating Tasks with Rake
  310. 19.1 Automatically Running Unit Tests
  311. 19.2 Automatically Generating Documentation
  312. 19.3 Cleaning Up Generated Files
  313. 19.4 Automatically Building a Gem
  314. 19.5 Gathering Statistics About Your Code
  315. 19.6 Publishing Your Documentation
  316. 19.7 Running Multiple Tasks in Parallel
  317. 19.8 A Generic Project Rakefile
  318. 20. Multitasking and Multithreading
  319. 20.1 Running a Daemon Process on Unix
  320. 20.2 Creating a Windows Service
  321. 20.3 Doing Two Things at Once with Threads
  322. 20.4 Synchronizing Access to an Object
  323. 20.5 Terminating a Thread
  324. 20.6 Running a Code Block on Many Objects Simultaneously
  325. 20.7 Limiting Multithreading with a Thread Pool
  326. 20.8 Driving an External Process with popen
  327. 20.9 Capturing the Output and Error Streams
  328. from a Unix Shell Command
  329. 20.10 Controlling a Process on Another Machine
  330. 20.11 Avoiding Deadlock
  331. 21. User Interface
  332. 21.1 Getting Input One Line at a Time
  333. 21.2 Getting Input One Character at a Time
  334. 21.3 Parsing Command-Line Arguments
  335. 21.4 Testing Whether a Program Is Running Interactively
  336. 21.5 Setting Up and Tearing Down a Curses Program
  337. 21.6 Clearing the Screen
  338. 21.7 Determining Terminal Size
  339. 21.8 Changing Text Color
  340. 21.9 Reading a Password
  341. 21.10 Allowing Input Editing with Readline
  342. 21.11 Making Your Keyboard Lights Blink
  343. 21.12 Creating a GUI Application with Tk
  344. 21.13 Creating a GUI Application with wxRuby
  345. 21.14 Creating a GUI Application with Ruby/GTK
  346. 21.15 Creating a Mac OS X Application with RubyCocoa
  347. 21.16 Using AppleScript to Get User Input
  348. 22. Extending Ruby with Other Languages
  349. 22.1 Writing a C Extension for Ruby
  350. 22.2 Using a C Library from Ruby
  351. 22.3 Calling a C Library Through SWIG
  352. 22.4 Writing Inline C in Your Ruby Code
  353. 22.5 Using Java Libraries with JRuby
  354. 23. System Administration
  355. 23.1 Scripting an External Program
  356. 23.2 Managing Windows Services
  357. 23.3 Running Code as Another User
  358. 23.4 Running Periodic Tasks Without cron or at
  359. 23.5 Deleting Files That Match a Regular Expression
  360. 23.6 Renaming Files in Bulk
  361. 23.7 Finding Duplicate Files
  362. 23.8 Automating Backups
  363. 23.9 Normalizing Ownership and Permissions in User Directories
  364. 23.10 Killing All Processes for a Given User
  365. Index
书名:Ruby Cookbook(影印版)
国内出版社:东南大学出版社
出版时间:2006年10月
页数:873
书号:7-5641-0596-8
原版书出版商:O'Reilly Media
Lucas Carlson
 
Lucas Carlson创建了AppFog,这是一家采用Cloud Foundry的PaaS公司,该公司于2013年被CenturyLink收购。Lucas是一位有着10年开发经验的专业开发者,专注于Ruby on Rails的开发工作。Lucas还与他人共同编写了《Ruby大全》(http://shop.oreilly.com/product/9780596523695.do)。他还用不同的编程语言编写了数十个库,并且为其他很多库共享过代码,包括Rails以及RedCloth。他的个人网站为rufy.com(http://rufy.com/)。
 
 
Leonard Richardson
 
Leonard Richardson, 《Ruby Cookbook》 (O’Reilly)一书的作者,曾 创建了包括Beautiful Soup在内 的多个开源代码库。
 
 
The animal on the cover of Ruby Cookbook is a side-striped jackal (Canis adustus),
found mostly in central and southern Africa. These jackals avoid the open, prefer-
ring thickly wooded areas on the edge of savannas and forests. They occasionally
make their way into cities. Side-striped jackals are rare but not considered endan-
gered. There are reserves for these jackals at the Serengeti National Park in Tanzania
and at the Akagera National Park in Rwanda.
Side-striped jackals are about 15 inches tall and weigh between 16 and 26 pounds.
This jackal has a light grey coat with a white stripe from shoulder to hip, and a
white-tipped tail. The diet of side-striped jackals consists largely of wild fruits, small
mammals, and insects. They also eat carrion and are adept scavengers; they will
follow a lion or other big cat to a kill. The jackals usually live singly or in pairs, but
they sometimes gather in family units of up to six members. Their lifespan is about
10 to 12 years.
Jackals have been an object of superstition because of their association with carrion
and death, and and because of their eerie nocturnal noises: they hoot, yap, and make a
kind of screaming yell. Perhaps because jackals were often found prowling and
hunting the edges of the desert near cemeteries, the ancient Egyptian god of
embalming and gatekeeper of the path of the dead, Anubis, was depicted as a jackal-
headed man. Anubis served as a psychopomp, conducting souls to the underworld,
where he weighed their hearts on a scale to determine whether they would be
admitted to the underworld or cast to the crocodile-headed demon, Ammit.