Cover image for Ruby Cookbook

Book description

Do you want to push Ruby to its limits? The Ruby Cookbook is the most comprehensive problem-solving guide to today's hottest programming language. It gives you hundreds of solutions to real-world problems, with clear explanations and thousands of lines of code you can use in your own projects.

From data structures and algorithms, to integration with cutting-edge technologies, the Ruby Cookbook has something for every programmer. Beginners and advanced Rubyists alike will learn how to program with:

  • Strings and numbers

  • Arrays and hashes

  • Classes, modules, and namespaces

  • Reflection and metaprogramming

  • XML and HTML processing

  • Ruby on Rails (including Ajax integration)

  • Databases

  • Graphics

  • Internet services like email, SSH, and BitTorrent

  • Web services

  • Multitasking

  • Graphical and terminal interfaces

If you need to write a web application, this book shows you how to get started with Rails. If you're a system administrator who needs to rename thousands of files, you'll see how to use Ruby for this and other everyday tasks. You'll learn how to read and write Excel spreadsheets, classify text with Bayesian filters, and create PDF files. We've even included a few silly tricks that were too cool to leave out, like how to blink the lights on your keyboard.

The Ruby Cookbook is the most useful book yet written about Ruby. When you need to solve a problem, don't reinvent the wheel: look it up in the Cookbook.

Table of Contents

  1. Ruby Cookbook
    1. SPECIAL OFFER: Upgrade this ebook with O’Reilly
    2. A Note Regarding Supplemental Files
    3. Preface
      1. 1. Life Is Short
      2. 2. Audience
      3. 3. The Structure of This Book
      4. 4. How the Code Listings Work
      5. 5. Installing the Software
      6. 6. Platform Differences, Version Differences, and Other Headaches
      7. 7. Other Resources
      8. 8. Conventions Used in This Book
      9. 9. Using Code Examples
      10. 10. Comments and Questions
      11. 11. Acknowledgments
    4. 1. Strings
      1. 1.1. Building a String from Parts
        1. Problem
        2. Solution
        3. Discussion
      2. 1.2. Substituting Variables into Strings
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      3. 1.3. Substituting Variables into an Existing String
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      4. 1.4. Reversing a String by Words or Characters
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      5. 1.5. Representing Unprintable Characters
        1. Problem
        2. Solution
        3. Discussion
      6. 1.6. Converting Between Characters and Values
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      7. 1.7. Converting Between Strings and Symbols
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      8. 1.8. Processing a String One Character at a Time
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      9. 1.9. Processing a String One Word at a Time
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      10. 1.10. Changing the Case of a String
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      11. 1.11. Managing Whitespace
        1. Problem
        2. Solution
        3. Discussion
      12. 1.12. Testing Whether an Object Is String-Like
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      13. 1.13. Getting the Parts of a String You Want
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      14. 1.14. Handling International Encodings
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      15. 1.15. Word-Wrapping Lines of Text
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      16. 1.16. Generating a Succession of Strings
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      17. 1.17. Matching Strings with Regular Expressions
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      18. 1.18. Replacing Multiple Patterns in a Single Pass
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      19. 1.19. Validating an Email Address
        1. Problem
        2. Solution
        3. Discussion
          1. Check validity, not correctness
        4. See Also
      20. 1.20. Classifying Text with a Bayesian Analyzer
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
    5. 2. Numbers
      1. 2.1. Parsing a Number from a String
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      2. 2.2. Comparing Floating-Point Numbers
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      3. 2.3. Representing Numbers to Arbitrary Precision
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      4. 2.4. Representing Rational Numbers
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      5. 2.5. Generating Random Numbers
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      6. 2.6. Converting Between Numeric Bases
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      7. 2.7. Taking Logarithms
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      8. 2.8. Finding Mean, Median, and Mode
        1. Problem
        2. Solution
        3. Discussion
          1. The standard deviation
        4. See Also
      9. 2.9. Converting Between Degrees and Radians
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      10. 2.10. Multiplying Matrices
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      11. 2.11. Solving a System of Linear Equations
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      12. 2.12. Using Complex Numbers
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      13. 2.13. Simulating a Subclass of Fixnum
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      14. 2.14. Doing Math with Roman Numbers
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      15. 2.15. Generating a Sequence of Numbers
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      16. 2.16. Generating Prime Numbers
        1. Problem
        2. Solution
        3. Discussion
          1. Checking primality
        4. See Also
      17. 2.17. Checking a Credit Card Checksum
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
    6. 3. Date and Time
      1. 3.1. Finding Today's Date
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      2. 3.2. Parsing Dates, Precisely or Fuzzily
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      3. 3.3. Printing a Date
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      4. 3.4. Iterating Over Dates
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      5. 3.5. Doing Date Arithmetic
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      6. 3.6. Counting the Days Since an Arbitrary Date
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      7. 3.7. Converting Between Time Zones
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      8. 3.8. Checking Whether Daylight Saving Time Is in Effect
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      9. 3.9. Converting Between Time and DateTime Objects
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      10. 3.10. Finding the Day of the Week
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      11. 3.11. Handling Commercial Dates
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      12. 3.12. Running a Code Block Periodically
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      13. 3.13. Waiting a Certain Amount of Time
        1. Problem
        2. Solution
        3. Discussion
          1. Waking up early
        4. See Also
      14. 3.14. Adding a Timeout to a Long-Running Operation
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
    7. 4. Arrays
      1. 4.1. Iterating Over an Array
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      2. 4.2. Rearranging Values Without Using Temporary Variables
        1. Problem
        2. Solution
        3. Discussion
      3. 4.3. Stripping Duplicate Elements from an Array
        1. Problem
        2. Solution
        3. Discussion
      4. 4.4. Reversing an Array
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      5. 4.5. Sorting an Array
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      6. 4.6. Ignoring Case When Sorting Strings
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      7. 4.7. Making Sure a Sorted Array Stays Sorted
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      8. 4.8. Summing the Items of an Array
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      9. 4.9. Sorting an Array by Frequency of Appearance
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      10. 4.10. Shuffling an Array
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      11. 4.11. Getting the N Smallest Items of an Array
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      12. 4.12. Building Up a Hash Using Injection
        1. Problem
        2. Solution
        3. Discussion
        4. References
      13. 4.13. Extracting Portions of Arrays
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      14. 4.14. Computing Set Operations on Arrays
        1. Problem
        2. Solution
        3. Discussion
          1. Complement
          2. Cartesian product
        4. See Also
      15. 4.15. Partitioning or Classifying a Set
        1. Problem
        2. Solution
        3. Discussion
          1. Implementation for arrays
    8. 5. Hashes
      1. 5.1. Using Symbols as Hash Keys
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      2. 5.2. Creating a Hash with a Default Value
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      3. 5.3. Adding Elements to a Hash
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      4. 5.4. Removing Elements from a Hash
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      5. 5.5. Using an Array or Other Modifiable Object as a Hash Key
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      6. 5.6. Keeping Multiple Values for the Same Hash Key
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      7. 5.7. Iterating Over a Hash
        1. Problem
        2. Solution
        3. Discussion
          1. Using an array as intermediary
        4. See Also
      8. 5.8. Iterating Over a Hash in Insertion Order
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      9. 5.9. Printing a Hash
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      10. 5.10. Inverting a Hash
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      11. 5.11. Choosing Randomly from a Weighted List
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      12. 5.12. Building a Histogram
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      13. 5.13. Remapping the Keys and Values of a Hash
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      14. 5.14. Extracting Portions of Hashes
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      15. 5.15. Searching a Hash with Regular Expressions
        1. Problem
        2. Solution
        3. Discussion
    9. 6. Files and Directories
      1. 6.1. Checking to See If a File Exists
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      2. 6.2. Checking Your Access to a File
        1. Problem
        2. Solution
        3. Discussion
        4. Setuid and setgid scripts
        5. See Also
      3. 6.3. Changing the Permissions on a File
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      4. 6.4. Seeing When a File Was Last Used Problem
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      5. 6.5. Listing a Directory
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      6. 6.6. Reading the Contents of a File
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      7. 6.7. Writing to a File
        1. Problem
        2. Solution
        3. Discussion
        4. Buffered I/O
        5. See Also
      8. 6.8. Writing to a Temporary File
        1. Problem
        2. Solution
        3. Discussion
      9. 6.9. Picking a Random Line from a File
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      10. 6.10. Comparing Two Files
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      11. 6.11. Performing Random Access on "Read-Once" Input Streams
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      12. 6.12. Walking a Directory Tree
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      13. 6.13. Locking a File
        1. Problem
        2. Solution
        3. Discussion
        4. Nonblocking locks
        5. See Also
      14. 6.14. Backing Up to Versioned Filenames
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      15. 6.15. Pretending a String Is a File
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      16. 6.16. Redirecting Standard Input or Output
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      17. 6.17. Processing a Binary File
        1. Problem
        2. Solution
        3. Discussion
        4. An MP3 example
        5. See Also
      18. 6.18. Deleting a File
        1. Problem
        2. Solution
        3. Discussion
      19. 6.19. Truncating a File
        1. Problem
        2. Solution
        3. Discussion
      20. 6.20. Finding the Files You Want
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      21. 6.21. Finding and Changing the Current Working Directory
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
    10. 7. Code Blocks and Iteration
      1. 7.1. Creating and Invoking a Block
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      2. 7.2. Writing a Method That Accepts a Block
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      3. 7.3. Binding a Block Argument to a Variable
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      4. 7.4. Blocks as Closures: Using Outside Variables Within a Code Block
        1. Problem
        2. Solution
        3. Discussion
      5. 7.5. Writing an Iterator Over a Data Structure
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      6. 7.6. Changing the Way an Object Iterates
        1. Problem
        2. Discussion
        3. Discussion
        4. See Also
      7. 7.7. Writing Block Methods That Classify or Collect
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      8. 7.8. Stopping an Iteration
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      9. 7.9. Looping Through Multiple Iterables in Parallel
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      10. 7.10. Hiding Setup and Cleanup in a Block Method
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      11. 7.11. Coupling Systems Loosely with Callbacks
        1. Problem
        2. Solution
        3. Discussion
    11. 8. Objects and Classes
      1. 8.1. Managing Instance Data
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      2. 8.2. Managing Class Data
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      3. 8.3. Checking Class or Module Membership
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      4. 8.4. Writing an Inherited Class
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      5. 8.5. Overloading Methods
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      6. 8.6. Validating and Modifying Attribute Values
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      7. 8.7. Defining a Virtual Attribute
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      8. 8.8. Delegating Method Calls to Another Object
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      9. 8.9. Converting and Coercing Objects to Different Types
        1. Problem
        2. Solution
        3. Discussion
          1. Number conversion and coercion
          2. Other conversion methods
        4. See Also
      10. 8.10. Getting a Human-Readable Printout of Any Object
        1. Problem
        2. Solution
        3. Discussion
      11. 8.11. Accepting or Passing a Variable Number of Arguments
        1. Problem
        2. Solution
        3. Discussion
      12. 8.12. Simulating Keyword Arguments
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      13. 8.13. Calling a Superclass's Method
        1. Problem
        2. Solution
        3. Discussion
      14. 8.14. Creating an Abstract Method
        1. Problem
        2. Solution
        3. Discussion
      15. 8.15. Freezing an Object to Prevent Changes
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      16. 8.16. Making a Copy of an Object
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      17. 8.17. Declaring Constants
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      18. 8.18. Implementing Class and Singleton Methods
        1. Problem
        2. Solution
        3. Discussion
      19. 8.19. Controlling Access by Making Methods Private
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
    12. 9. Modules and Namespaces
      1. 9.1. Simulating Multiple Inheritance with Mixins
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      2. 9.2. Extending Specific Objects with Modules
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      3. 9.3. Mixing in Class Methods
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      4. 9.4. Implementing Enumerable: Write One Method, Get 22 Free
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      5. 9.5. Avoiding Naming Collisions with Namespaces
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      6. 9.6. Automatically Loading Libraries as Needed
        1. Problem
        2. Solution
        3. Discussion
      7. 9.7. Including Namespaces
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      8. 9.8. Initializing Instance Variables Defined by a Module
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      9. 9.9. Automatically Initializing Mixed-In Modules
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
    13. 10. Reflection and Metaprogramming
      1. 10.1. Finding an Object's Class and Superclass
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      2. 10.2. Listing an Object's Methods
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      3. 10.3. Listing Methods Unique to an Object
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      4. 10.4. Getting a Reference to a Method
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      5. 10.5. Fixing Bugs in Someone Else's Class
        1. Problem
        2. Solutions
        3. Discussion
        4. See Also
      6. 10.6. Listening for Changes to a Class
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      7. 10.7. Checking Whether an Object Has Necessary Attributes
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      8. 10.8. Responding to Calls to Undefined Methods
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      9. 10.9. Automatically Initializing Instance Variables
        1. Problem
        2. Solution
        3. Discussion
      10. 10.10. Avoiding Boilerplate Code with Metaprogramming
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      11. 10.11. Metaprogramming with String Evaluations
        1. Problem
        2. Solution
        3. Discussion
      12. 10.12. Evaluating Code in an Earlier Context
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      13. 10.13. Undefining a Method
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      14. 10.14. Aliasing Methods
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      15. 10.15. Doing Aspect-Oriented Programming
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      16. 10.16. Enforcing Software Contracts
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
    14. 11. XML and HTML
      1. 11.1. Checking XML Well-Formedness
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      2. 11.2. Extracting Data from a Document's Tree Structure
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      3. 11.3. Extracting Data While Parsing a Document
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      4. 11.4. Navigating a Document with XPath
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      5. 11.5. Parsing Invalid Markup
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      6. 11.6. Converting an XML Document into a Hash
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      7. 11.7. Validating an XML Document
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      8. 11.8. Substituting XML Entities
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      9. 11.9. Creating and Modifying XML Documents
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      10. 11.10. Compressing Whitespace in an XML Document
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      11. 11.11. Guessing a Document's Encoding
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      12. 11.12. Converting from One Encoding to Another
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      13. 11.13. Extracting All the URLs from an HTML Document
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      14. 11.14. Transforming Plain Text to HTML
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      15. 11.15. Converting HTML Documents from the Web into Text
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      16. 11.16. A Simple Feed Aggregator
        1. See Also
    15. 12. Graphics and Other File Formats
      1. 12.1. Thumbnailing Images
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      2. 12.2. Adding Text to an Image
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      3. 12.3. Converting One Image Format to Another
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      4. 12.4. Graphing Data
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      5. 12.5. Adding Graphical Context with Sparklines
        1. Problem
        2. Solution
        3. Discussion
          1. Sparklines in Rails Views
        4. See Also
      6. 12.6. Strongly Encrypting Data
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      7. 12.7. Parsing Comma-Separated Data
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      8. 12.8. Parsing Not-Quite-Comma-Separated Data
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      9. 12.9. Generating and Parsing Excel Spreadsheets
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      10. 12.10. Compressing and Archiving Files with Gzip and Tar
        1. Problem
        2. Solution
        3. Discussion
          1. Tar files
        4. See Also
      11. 12.11. Reading and Writing ZIP Files
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      12. 12.12. Reading and Writing Configuration Files
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      13. 12.13. Generating PDF Files
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      14. 12.14. Representing Data as MIDI Music
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
    16. 13. Databases and Persistence
      1. 13.1. Serializing Data with YAML
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      2. 13.2. Serializing Data with Marshal
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      3. 13.3. Persisting Objects with Madeleine
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      4. 13.4. Indexing Unstructured Text with SimpleSearch
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      5. 13.5. Indexing Structured Text with Ferret
        1. Problem
        2. Discussion
        3. Discussion
        4. See Also
      6. 13.6. Using Berkeley DB Databases
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      7. 13.7. Controlling MySQL on Unix
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      8. 13.8. Finding the Number of Rows Returned by a Query
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      9. 13.9. Talking Directly to a MySQL Database
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      10. 13.10. Talking Directly to a PostgreSQL Database
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      11. 13.11. Using Object Relational Mapping with ActiveRecord
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      12. 13.12. Using Object Relational Mapping with Og
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      13. 13.13. Building Queries Programmatically
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      14. 13.14. Validating Data with ActiveRecord
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      15. 13.15. Preventing SQL Injection Attacks
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      16. 13.16. Using Transactions in ActiveRecord
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      17. 13.17. Adding Hooks to Table Events
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      18. 13.18. Adding Taggability with a Database Mixin
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
    17. 14. Internet Services
      1. 14.1. Grabbing the Contents of a Web Page
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      2. 14.2. Making an HTTPS Web Request
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      3. 14.3. Customizing HTTP Request Headers
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      4. 14.4. Performing DNS Queries
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      5. 14.5. Sending Mail
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      6. 14.6. Reading Mail with IMAP
        1. Problem
        2. Solution
        3. Discussion
          1. Check for new mail
          2. Retrieve a UID for a particular message
          3. Reading headers made easy
          4. Forwarding mail to a cell phone
        4. See Also
      7. 14.7. Reading Mail with POP3
        1. Problem
        2. Solution
        3. Discussion
          1. Forwarding mail to a cell phone
        4. See Also
      8. 14.8. Being an FTP Client
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      9. 14.9. Being a Telnet Client
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      10. 14.10. Being an SSH Client
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      11. 14.11. Copying a File to Another Machine
        1. Problem
        2. Solution
        3. Discussion
      12. 14.12. Being a BitTorrent Client
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      13. 14.13. Pinging a Machine
        1. Problem
        2. Solution
        3. Discussion
      14. 14.14. Writing an Internet Server
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      15. 14.15. Parsing URLs
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      16. 14.16. Writing a CGI Script
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      17. 14.17. Setting Cookies and Other HTTP Response Headers
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      18. 14.18. Handling File Uploads via CGI
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      19. 14.19. Running Servlets with WEBrick
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      20. 14.20. A Real-World HTTP Client
        1. See Also
    18. 15. Web Development: Ruby on Rails
      1. 15.1. Writing a Simple Rails Application to Show System Status
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      2. 15.2. Passing Data from the Controller to the View
        1. Problem
        2. Solution
        3. Discussion
      3. 15.3. Creating a Layout for Your Header and Footer
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      4. 15.4. Redirecting to a Different Location
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      5. 15.5. Displaying Templates with Render
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      6. 15.6. Integrating a Database with Your Rails Application
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      7. 15.7. Understanding Pluralization Rules
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      8. 15.8. Creating a Login System
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      9. 15.9. Storing Hashed User Passwords in the Database
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      10. 15.10. Escaping HTML and JavaScript for Display
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      11. 15.11. Setting and Retrieving Session Information
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      12. 15.12. Setting and Retrieving Cookies
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      13. 15.13. Extracting Code into Helper Functions
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      14. 15.14. Refactoring the View into Partial Snippets of Views
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      15. 15.15. Adding DHTML Effects with script.aculo.us
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      16. 15.16. Generating Forms for Manipulating Model Objects
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      17. 15.17. Creating an Ajax Form
        1. Problem
        2. Solution
        3. Discussion
      18. 15.18. Exposing Web Services on Your Web Site
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      19. 15.19. Sending Mail with Rails
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      20. 15.20. Automatically Sending Error Messages to Your Email
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      21. 15.21. Documenting Your Web Site
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      22. 15.22. Unit Testing Your Web Site
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      23. 15.23. Using breakpoint in Your Web Application
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
    19. 16. Web Services and Distributed Programming
      1. 16.1. Searching for Books on Amazon
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      2. 16.2. Finding Photos on Flickr
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      3. 16.3. Writing an XML-RPC Client
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      4. 16.4. Writing a SOAP Client
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      5. 16.5. Writing a SOAP Server
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      6. 16.6. Searching the Web with Google's SOAP Service
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      7. 16.7. Using a WSDL File to Make SOAP Calls Easier
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      8. 16.8. Charging a Credit Card
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      9. 16.9. Finding the Cost to Ship Packages via UPS or FedEx
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      10. 16.10. Sharing a Hash Between Any Number of Computers
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      11. 16.11. Implementing a Distributed Queue
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      12. 16.12. Creating a Shared "Whiteboard"
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      13. 16.13. Securing DRb Services with Access Control Lists
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      14. 16.14. Automatically Discovering DRb Services with Rinda
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      15. 16.15. Proxying Objects That Can't Be Distributed
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      16. 16.16. Storing Data on Distributed RAM with MemCached
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      17. 16.17. Caching Expensive Results with MemCached
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      18. 16.18. A Remote-Controlled Jukebox
        1. See Also
    20. 17. Testing, Debugging, Optimizing, and Documenting
      1. 17.1. Running Code Only in Debug Mode
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      2. 17.2. Raising an Exception
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      3. 17.3. Handling an Exception
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      4. 17.4. Rerunning After an Exception
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      5. 17.5. Adding Logging to Your Application
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      6. 17.6. Creating and Understanding Tracebacks
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      7. 17.7. Writing Unit Tests
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      8. 17.8. Running Unit Tests
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      9. 17.9. Testing Code That Uses External Resources
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      10. 17.10. Using breakpoint to Inspect and Change the State of Your Application
        1. Problem
        2. Solution
        3. Discussion
      11. 17.11. Documenting Your Application
        1. Problem
        2. Solution
        3. Discussion
          1. Other ways of creating RDoc
        4. See Also
      12. 17.12. Profiling Your Application
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      13. 17.13. Benchmarking Competing Solutions
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      14. 17.14. Running Multiple Analysis Tools at Once
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      15. 17.15. Who's Calling That Method? A Call Graph Analyzer
        1. See Also
    21. 18. Packaging and Distributing Software
      1. 18.1. Finding Libraries by Querying Gem Respositories
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      2. 18.2. Installing and Using a Gem
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      3. 18.3. Requiring a Specific Version of a Gem
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      4. 18.4. Uninstalling a Gem
        1. Problem
        2. Solution
        3. Discussion
      5. 18.5. Reading Documentation for Installed Gems
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      6. 18.6. Packaging Your Code as a Gem
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      7. 18.7. Distributing Your Gems
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      8. 18.8. Installing and Creating Standalone Packages with setup.rb
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
    22. 19. Automating Tasks with Rake
      1. 19.1. Automatically Running Unit Tests
        1. Problem
        2. Solution
        3. Discussion
          1. Test suites
        4. See Also
      2. 19.2. Automatically Generating Documentation
        1. Problem
        2. Solution
        3. Discussion
          1. Available attributes
        4. See Also
      3. 19.3. Cleaning Up Generated Files
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      4. 19.4. Automatically Building a Gem
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      5. 19.5. Gathering Statistics About Your Code
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      6. 19.6. Publishing Your Documentation
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      7. 19.7. Running Multiple Tasks in Parallel
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      8. 19.8. A Generic Project Rakefile
        1. See Also
    23. 20. Multitasking and Multithreading
      1. 20.1. Running a Daemon Process on Unix
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      2. 20.2. Creating a Windows Service
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      3. 20.3. Doing Two Things at Once with Threads
        1. Problem
        2. Solution
        3. Discussion
      4. 20.4. Synchronizing Access to an Object
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      5. 20.5. Terminating a Thread
        1. Problem
        2. Solution
        3. Discussion
      6. 20.6. Running a Code Block on Many Objects Simultaneously
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      7. 20.7. Limiting Multithreading with a Thread Pool
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      8. 20.8. Driving an External Process with popen
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      9. 20.9. Capturing the Output and Error Streams from a Unix Shell Command
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      10. 20.10. Controlling a Process on Another Machine
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      11. 20.11. Avoiding Deadlock
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
    24. 21. User Interface
      1. 21.1.
        1. Resources
      2. 21.2. Getting Input One Line at a Time
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      3. 21.3. Getting Input One Character at a Time
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      4. 21.4. Parsing Command-Line Arguments
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      5. 21.5. Testing Whether a Program Is Running Interactively
        1. Problem
        2. Solution
        3. Discussion
      6. 21.6. Setting Up and Tearing Down a Curses Program
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      7. 21.7. Clearing the Screen
        1. Problem
        2. Solution
        3. Discussion
      8. 21.8. Determining Terminal Size
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      9. 21.9. Changing Text Color
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      10. 21.10. Reading a Password
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      11. 21.11. Allowing Input Editing with Readline
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      12. 21.12. Making Your Keyboard Lights Blink
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      13. 21.13. Creating a GUI Application with Tk
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      14. 21.14. Creating a GUI Application with wxRuby
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      15. 21.15. Creating a GUI Application with Ruby/GTK
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      16. 21.16. Creating a Mac OS X Application with RubyCocoa
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      17. 21.17. Using AppleScript to Get User Input
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
    25. 22. Extending Ruby with Other Languages
      1. 22.1. Writing a C Extension for Ruby
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      2. 22.2. Using a C Library from Ruby
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      3. 22.3. Calling a C Library Through SWIG
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      4. 22.4. Writing Inline C in Your Ruby Code
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      5. 22.5. Using Java Libraries with JRuby
        1. Problem
        2. Solution
        3. Discussion
          1. Convenience methods
        4. See Also
    26. 23. System Administration
      1. 23.1. Scripting an External Program
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      2. 23.2. Managing Windows Services
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      3. 23.3. Running Code as Another User
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      4. 23.4. Running Periodic Tasks Without cron or at
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      5. 23.5. Deleting Files That Match a Regular Expression
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      6. 23.6. Renaming Files in Bulk
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      7. 23.7. Finding Duplicate Files
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      8. 23.8. Automating Backups
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      9. 23.9. Normalizing Ownership and Permissions in User Directories
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
      10. 23.10. Killing All Processes for a Given User
        1. Problem
        2. Solution
        3. Discussion
        4. See Also
    27. Index
    28. About the Authors
    29. Colophon
    30. SPECIAL OFFER: Upgrade this ebook with O’Reilly