前言 1
第1章 字符串 13
1.1 根据部分构建字符串 16
1.2 将变量代入字符串 18
1.3 将变量代入现有的字符串 20
1.4 按字或字符逆转字符串 22
1.5 表示不可打印字符 23
1.6 字符与值的相互转换 26
1.7 字符串与符号之间的相互转换 27
1.8 每次处理字符串中的一个字符 28
1.9 每次处理字符串中的一个字 30
1.10 修改字符串的大小写 32
1.11 管理空白 34
1.12 测试对象是否类似于字符串 35
1.13 获得想要的字符串部分 36
1.14 处理国际编码 38
1.15 带自动换行的文本 39
1.16 生成字符串的后继 41
1.17 使用正则表达式匹配字符串 44
1.18 一遍替换多种模式 46
1.19 验证电子邮箱地址 47
1.20 使用贝叶斯分析器对文本进行分类 50
第2章 数字 53
2.1 由字符串分析数字 54
2.2 浮点数的比较 57
2.3 表示数字至任意精度 59
2.4 有理数的表示 62
2.5 随机数的生成 64
2.6 数字基之间的转换 66
2.7 获取对数 67
2.8 确定平均数、中值和模 69
2.9 度数与弧度之间的转换 72
2.10 矩阵乘法 74
2.11 求解线性方程组 79
2.12 复数的使用 81
2.13 模拟Fixnum的子类 84
2.14 使用罗马数字进行数学运算 88
2.15 生成数字序列 93
2.16 生成素数 96
2.17 检查信用卡校验和 99
第3章 日期与时间 102
3.1 查找当前日期 105
3.2 精确或模糊地分析日期 108
3.3 打印日期 111
3.4 日期上的迭代 117
3.5 计算日期 119
3.6 从任意日期开始计算天数 121
3.7 时区转换 123
3.8 检查夏令时是否起效 126
3.9 Time与DateTime对象之间的转换 127
3.10 查找周日期 130
3.11 处理商用日期 132
3.12 周期性运行代码块 133
3.13 等待固定长度的时间 135
3.14 为长期运行的操作添加超时 138
第4章 数组 140
4.1 在数组上迭代 142
4.2 不使用临时变量重排值 146
4.3 去除数组中的重复元素 148
4.4 逆转数组 149
4.5 数组排序 150
4.6 排序字符串时忽略大小写 152
4.7 确保已排序数组保持有序 153
4.8 数组项求和 158
4.9 按出现率排序数组 159
4.10 打乱数组 161
4.11 获取数组的N个最小项 163
4.12 使用Injection构建散列 165
4.13 提取部分数组 167
4.14 在数组上处理集合运算 170
4.15 集合划分或分类 173
第5章 散列 177
5.1 使用符号作为散列键 179
5.2 创建带默认值的散列 181
5.3 向散列添加元素 182
5.4 从散列中去除元素 185
5.5 使用数组或其他可修改对象作为散列键 186
5.6 为相同散列键保持重复值 188
5.7 在散列上迭代 190
5.8 按插入顺序在散列上迭代 192
5.9 散列打印 193
5.10 反转散列 196
5.11 随机选择加权列表 197
5.12 构建柱状图 200
5.13 重新映射散列的键与值 202
5.14 提取部分散列 203
5.15 使用正则表达式搜索散列 204
第6章 文件与目录 206
6.1 检查文件是否存在 209
6.2 检查对文件的访问 210
6.3 更改文件权限 212
6.4 查看上次使用文件的时间 216
6.5 目录清单 217
6.6 读取文件内容 220
6.7 写文件 224
6.8 写临时文件 225
6.9 从文件中挑选随机行 227
6.10 比较两个文件 228
6.11 在“只读一次”输入流上执行随机访问 232
6.12 遍历目录树 234
6.13 文件加锁 237
6.14 备份至带版本号的文件名 240
6.15 伪装字符串为文件 242
6.16 重定向标准输出或输出 245
6.17 处理二进制文件 247
6.18 删除文件 251
6.19 截短文件 252
6.20 查找所需文件 253
6.21 查找并修改当前工作目录 255
第7章 代码块与迭代 257
7.1 代码块的创建与调用 260
7.2 编写接收代码块的方法 262
7.3 将代码块参数与变量绑定 264
7.4 作为闭包的代码块:在代码块内使用外部变量 267
7.5 在数据结构上编写迭代器 268
7.6 更改对象的迭代方式 271
7.7 编写分类或收集的代码块方法 273
7.8 停止迭代 275
7.9 并行地在多个迭代变量上循环 277
7.10 隐藏块方法中的设置与清除 281
7.11 使用回调的松耦合系统 284
第8章 对象与类 288
8.1 管理实例数据 290
8.2 管理类数据 293
8.3 检查类或模块的成员 296
8.4 编写一个继承类 298
8.5 方法重载 300
8.6 验证并修改属性值 302
8.7 定义虚属性 304
8.8 授权对另一对象的方法调用 305
8.9 对象到不同类型的转换与强制转换 308
8.10 从任意对象获取人类可读的打印输出 312
8.11 接收或传递参数的变量数目 315
8.12 模拟关键字参数 317
8.13 调用超类的方法 319
8.14 创建抽象方法 321
8.15 冻结对象以防修改 324
8.16 生成对象的副本 326
8.17 声明常量 329
8.18 实现类方法和singleton方法 331
8.19 通过私有化方法控制访问 333
第9章 模块与命名空间 337
9.1 使用混入模拟多重继承 337
9.2 使用模块扩展特定对象 341
9.3 混用类方法 343
9.4 实现Enumerable:编写一个方法,获得22种免费方法 345
9.5 使用命名空间避免名字冲突 347
9.6 按需自动加载库 349
9.7 包括命名空间 351
9.8 初始化模块定义的实例变量 352
9.9 自动初始化混合插入的模块 353
第10章 反射与元编程 357
10.1 查找对象的类和超类 358
10.2 列出对象的方法 359
10.3 列出对象独有的方法 362
10.4 获得方法的引用 363
10.5 修正别人类中的错误 365
10.6 侦听类的变化 367
10.7 检查对象是否具有必需的属性 369
10.8 响应对未定义方法的调用 371
10.9 自动初始化实例变量 375
10.10 使用元编程避免刻板代码 377
10.11 带字符串计算的元编程 379
10.12 计算早先上下文中的代码 382
10.13 取消定义方法 383
10.14 为方法起别名 386
10.15 面向方面的编程 389
10.16 强制实施软件契约 391
第11章 XM L和HTM L 396
11.1 检查XML的良构性 397
11.2 从文档的树结构中提取数据 399
11.3 解析文档时提取数据 401
11.4 使用XPath导航文档 403
11.5 解析不合法标记 405
11.6 将一个XML文档转换为一个散列 408
11.7 验证XML文档 411
11.8 取代XML实体 414
11.9 创建并修改XML文档 417
11.10 压缩XML文档中的空白 420
11.11 猜解文档的编码 422
11.12 从一种编码转换为另一种编码 423
11.13 从HTML文档中提取所有URL 424
11.14 将纯文本转换为HTML 428
11.15 将HTML文档从Web转换为文本 429
11.16 一个简单的提要聚合器 432
第12章 图形与其他文件格式 437
12.1 缩略图形 437
12.2 句图形中添加文本 440
12.3 将一个图形格式转换为另一种 443
12.4 用图表示数据 446
12.5 使用Sparkline添加图形化上下文 449
12.6 强加密数据 453
12.7 解析逗号分隔的数据 455
12.8 解析非完全逗号分隔的数据 457
12.9 生成并分析Excel电子数据表 459
12.10 使用Gzip和Tar压缩并存档文件 462
12.11 读写ZIP文件 465
12.12 读写配置文件 467
12.13 生成PDF文件 468
12.14 将数据表示为MIDI音乐 473
第13章 数据库和持久性 477
13.1 用YAML串行化数据 480
13.2 用Marshal串行化数据 484
13.3 用Madeleine保持对象 485
13.4 用SimpleSearch索引结构化文本 488
13.5 用Ferret索引结构化文本 490
13.6 使用Berkeley DB数据库 493
13.7 在Unix上控制MySQL 495
13.8 找到查询返回的行数 496
13.9 与MySQL数据库直接对话 499
13.10 和PostgreSQL数据库直接对话 501
13.11 用ActiveRecord使用对象相关映射 504
13.12 使用对象相关映射Og 508
13.13 以编程方式构建查询 512
13.14 用ActiveRecord确认数据 516
13.15 阻止SQL注入攻击 519
13.16 在ActiveRecord里使用交易 522
13.17 添加挂钩程序到表事件中 524
13.18 用数据库Minxin添加标签 526
第14章 Internet服务 531
14.1 抓取Web页面的内容 532
14.2 发送HTTPS Web请求 534
14.3 自定义HTTP的请求头文件 536
14.4 执行DNS查询 539
14.5 发送邮件 541
14.6 用IMAP阅读邮件 545
14.7 用POP3阅读邮件 549
14.8 作为FTP客户端 552
14.9 作为Telnet客户端 554
14.10 作为SSH客户端 558
14.11 复制文件到其他机器 560
14.12 作为BitTorrent客户端 561
14.13 ping机器 564
14.14 编写Internet服务器 565
14.15 分析URL 567
14.16 编写CGI脚本 570
14.17 设置cookie和其他HTTP响应头文件 573
14.18 用CGI处理文件上传 575
14.19 用WEBrick运行servlet 578
14.20 真实世界的HTTP客户端 584
第15章 Web开发:Ruby on Rails 588
15.1 编写简单的Rails应用程序显示系统状态 590
15.2 从控制器传递数据到视图 593
15.3 创建页眉和页脚的布局 596
15.4 重新定位不同的位置 599
15.5 用render显示模板 601
15.6 集成数据库到Rails应用程序中 604
15.7 理解复数规则 607
15.8 创建登录系统 609
15.9 保存散列化的用户密码到数据库中 613
15.10 转义显示用的HTML和JavaScript 615
15.11 设置并找回会话信息 616
15.12 设置并找回Cookie 619
15.13 提取代码到辅助函数中 621
15.14 重构视图为视图的部分片断 623
15.15 用script.aculo.us添加DHTML效果 627
15.16 生成操作模型对象的表格 629
15.17 创建Ajax表格 633
15.18 在Web站点上发布Web服务 636
15.19 用Rails发送邮件 639
15.20 自动发送错误信息到邮箱 641
15.21 文档化Web站点 643
15.22 Web站点的单元测试 645
15.23 在Web应用程序中使用断点 648
第16章 Web服务及分布式编程 652
16.1 搜索Amazon上的书 653
16.2 找到Flickr上的照片 656
16.3 编写XML-RPC客户端 659
16.4 编写SOAP客户端 662
16.5 编写SOAP服务器 663
16.6 用Google的SOAP服务搜索Web 665
16.7 使用WSDL文件更简单地构建SOAP调用 667
16.8 用信用卡支付 669
16.9 通过UPS或FedEx找到装运包的费用 671
16.10 在任意数目的计算机间共享散列 672
16.11 实现分布式查询 676
16.12 创建共享的“白板” 678
16.13 通过访问控制列表保障DRb服务的安全 682
16.14 通过Rinda自动发现DRb服务 683
16.15 代理无法分布的对象 685
16.16 用MemCached在分布式RAM上保存数据 688
16.17 用MemCached高速缓存重要结果 690
16.18 远程控制的Jukebox 694
第17章 测试、调试、优化以及文档化 700
17.1 只在调试模式下运行代码 701
17.2 发出异常 703
17.3 处理异常 705
17.4 在异常后重新运行 707
17.5 添加日志到应用程序中 709
17.6 创建并理解Traceback 711
17.7 编写单元测试 714
17.8 运行单元测试 717
17.9 测试使用外部资源的代码 720
17.10 使用断点审查并改变应用程序的状态 724
17.11 文档化应用程序 727
17.12 记录应用程序 731
17.13 Benchmark竞争性解决方案 734
17.14 一次运行多个分析工具 736
17.15 谁调用了该方法?调用图形分析器 738
第18章 打包和发布软件 741
18.1 通过查询gem知识库寻找库 742
18.2 安装并使用gem 745
18.3 要求gem的某个特定版本 748
18.4 卸载gem 751
18.5 为已安装的gem读入文档 752
18.6 打包代码为gem 754
18.7 发布gem 757
18.8 用setup.rb安装并创建独立Ruby程序包 760
第19章 用Rake自动执行任务 763
19.1 自动运行单元测试 765
19.3 清除生成的文件 770
19.4 自动构建gem 771
19.5 收集代码的统计信息 773
19.6 发布文档 776
19.7 并行运行多个任务 778
19.8 通用的项目Rakefile 779
第20章 多任务和多线程 787
20.1 在Unix上运行守护进程 788
20.2 创建Windows服务 791
20.3 用线程一次做两件事情 795
20.4 同步访问一个对象 797
20.5 中止线程 800
20.6 在很多对象上同时运行代码块 802
20.7 用线程池限制多线程 805
20.8 用popen驱动外部进程 808
20.9 通过Unix shell命令抓取输出和错误流 810
20.10 控制其他机器上的进程 811
20.11 避免死锁 812
第21章 用户界面 816
21.1 一次得到输入中的一行 817
21.2 一次得到输入的一个字符 819
21.3 分析命令行参数 822
21.4 测试程序是否交互运行 825
21.5 设置和卸载Curses程序 825
21.6 清空屏幕 828
21.7 决定终端大小 829
21.8 改变文本的颜色 831
21.9 读入密码 834
21.10 允许用Readline编辑输入 835
21.11 使得键盘指示灯闪烁 836
21.12 用Tk创建一个GUI应用程序 839
21.13 用wxRuby创建一个GUI应用程序 843
21.14 用Ruby/GTK创建一个GUI应用程序 847
21.15 用RubyCocoa创建一个Mac OS X应用程序 851
21.16 用AppleScript得到用户输入 859
第22章 用其他语言扩展Ruby 861
22.1 为Ruby编写C扩展程序 862
22.2 在Ruby中使用C库 865
22.3 通过SWIG调用C库 869
22.4 通过SWIG调用C库 871
22.5 用JRuby使用Java库 874
第23章 系统管理 878
23.1 脚本化外部程序 879
23.2 管理Windows服务 880
23.3 作为另一个用户运行代码 882
23.4 不用cron或at运行周期性任务 884
23.5 删除匹配正则表达式的文件 885
23.6 批量重命名文件 888
23.7 找到复制的文件 891
23.8 自动备份 894
23.9 在用户目录下规范化所有权和权限 895
23.10 为给定用户杀死所有进程 898