Ruby Cookbook中文版
Ruby Cookbook中文版
Lucas Carlson, Leonard Richardson
郑路长 译
出版时间:2007年04月
页数:901
你想让Ruby的能力发挥到极限吗?Ruby Cookbook是针对今天最热门的编程语言最全面的问题解决指南。它为真实世界的问题提供了上百种解决方案,并带有清楚的解释和上千行可用于用户自己项目中的代码。从数据结构和算法到对最前沿技术的集成,本书可适用于每位程序员。初学者与高级Ruby程序员同样能学到如何使用下列内容进行编程:
● 字符串与数字
● 数据库
● 数组与散列
● 图形
● 类、模块与命名空间
● 诸如电子邮件、SSH和BitTorrent之类的Internet服务
● 反射与元编程
● 多任务
● XML与HTML处理
● 图形与终端界面
● Ruby on Rails(包括Ajax集成)
如果你需要一个Web应用程序,那么本书可向你展示如何从头使用Rails。如果你需要重新命名数千个文件,那么你就会知道如何使用Ruby完成这一工作及其他日常任务。你将学会如何读写Excel电子数据表,如何使用Bayesian过滤器对文本进行分类,以及如何创建PDF文件。我们甚至包括了一些傻瓜式的窍门,例如,如何让键盘上的灯闪烁。
Ruby Cookbook是目前编写的关于Ruby的最有用的一本书。当你需要解决某个问题时,不要从头开始:可在本书中查找。
Lucas Carlson是一名专业Ruby程序员,专门研究Rails Web开发。他已经编写了6个库并对许多其他库有所贡献,包括Rails和RedCloth。
Leonard Richardson负责以多种语言创建和维护库,包括Rubyful Soup在内。
“程序员不能单独以语言语法为生,而是要以他们所编写的每行具体的代码为生。为此,本书的内容全部都是实用秘诀、技巧、知识和智慧。我希望它能够引导读者到达Ruby编程的下一阶段。”
——Yukihiro(Matz) Matsumoto,Ruby的创造者
“你也许认为它们不过是传统的普通秘诀,但不是这样,它上面涂满了厚厚的蛋黄奶油酸辣酱。哦,棒极了,例如:专门的版本控制系统、BitTorent客户以及丢失恐龙的广告。协议章节恰恰非常有趣。粘稠甜美的琼浆玉液正在你面前流淌!是的,还有大块的熏肉。”
——Why the lucky stiff
  1. 前言
  2. 第1章 字符串
  3. 1.1 根据部分构建字符串
  4. 1.2 将变量代入字符串
  5. 1.3 将变量代入现有的字符串
  6. 1.4 按字或字符逆转字符串
  7. 1.5 表示不可打印字符
  8. 1.6 字符与值的相互转换
  9. 1.7 字符串与符号之间的相互转换
  10. 1.8 每次处理字符串中的一个字符
  11. 1.9 每次处理字符串中的一个字
  12. 1.10 修改字符串的大小写
  13. 1.11 管理空白
  14. 1.12 测试对象是否类似于字符串
  15. 1.13 获得想要的字符串部分
  16. 1.14 处理国际编码
  17. 1.15 带自动换行的文本
  18. 1.16 生成字符串的后继
  19. 1.17 使用正则表达式匹配字符串
  20. 1.18 一遍替换多种模式
  21. 1.19 验证电子邮箱地址
  22. 1.20 使用贝叶斯分析器对文本进行分类
  23. 第2章 数字
  24. 2.1 由字符串分析数字
  25. 2.2 浮点数的比较
  26. 2.3 表示数字至任意精度
  27. 2.4 有理数的表示
  28. 2.5 随机数的生成
  29. 2.6 数字基之间的转换
  30. 2.7 获取对数
  31. 2.8 确定平均数、中值和模
  32. 2.9 度数与弧度之间的转换
  33. 2.10 矩阵乘法
  34. 2.11 求解线性方程组
  35. 2.12 复数的使用
  36. 2.13 模拟Fixnum的子类
  37. 2.14 使用罗马数字进行数学运算
  38. 2.15 生成数字序列
  39. 2.16 生成素数
  40. 2.17 检查信用卡校验和
  41. 第3章 日期与时间
  42. 3.1 查找当前日期
  43. 3.2 精确或模糊地分析日期
  44. 3.3 打印日期
  45. 3.4 日期上的迭代
  46. 3.5 计算日期
  47. 3.6 从任意日期开始计算天数
  48. 3.7 时区转换
  49. 3.8 检查夏令时是否起效
  50. 3.9 Time与DateTime对象之间的转换
  51. 3.10 查找周日期
  52. 3.11 处理商用日期
  53. 3.12 周期性运行代码块
  54. 3.13 等待固定长度的时间
  55. 3.14 为长期运行的操作添加超时
  56. 第4章 数组
  57. 4.1 在数组上迭代
  58. 4.2 不使用临时变量重排值
  59. 4.3 去除数组中的重复元素
  60. 4.4 逆转数组
  61. 4.5 数组排序
  62. 4.6 排序字符串时忽略大小写
  63. 4.7 确保已排序数组保持有序
  64. 4.8 数组项求和
  65. 4.9 按出现率排序数组
  66. 4.10 打乱数组
  67. 4.11 获取数组的N个最小项
  68. 4.12 使用Injection构建散列
  69. 4.13 提取部分数组
  70. 4.14 在数组上处理集合运算
  71. 4.15 集合划分或分类
  72. 第5章 散列
  73. 5.1 使用符号作为散列键
  74. 5.2 创建带默认值的散列
  75. 5.3 向散列添加元素
  76. 5.4 从散列中去除元素
  77. 5.5 使用数组或其他可修改对象作为散列键
  78. 5.6 为相同散列键保持重复值
  79. 5.7 在散列上迭代
  80. 5.8 按插入顺序在散列上迭代
  81. 5.9 散列打印
  82. 5.10 反转散列
  83. 5.11 随机选择加权列表
  84. 5.12 构建柱状图
  85. 5.13 重新映射散列的键与值
  86. 5.14 提取部分散列
  87. 5.15 使用正则表达式搜索散列
  88. 第6章 文件与目录
  89. 6.1 检查文件是否存在
  90. 6.2 检查对文件的访问
  91. 6.3 更改文件权限
  92. 6.4 查看上次使用文件的时间
  93. 6.5 目录清单
  94. 6.6 读取文件内容
  95. 6.7 写文件
  96. 6.8 写临时文件
  97. 6.9 从文件中挑选随机行
  98. 6.10 比较两个文件
  99. 6.11 在“只读一次”输入流上执行随机访问
  100. 6.12 遍历目录树
  101. 6.13 文件加锁
  102. 6.14 备份至带版本号的文件名
  103. 6.15 伪装字符串为文件
  104. 6.16 重定向标准输出或输出
  105. 6.17 处理二进制文件
  106. 6.18 删除文件
  107. 6.19 截短文件
  108. 6.20 查找所需文件
  109. 6.21 查找并修改当前工作目录
  110. 第7章 代码块与迭代
  111. 7.1 代码块的创建与调用
  112. 7.2 编写接收代码块的方法
  113. 7.3 将代码块参数与变量绑定
  114. 7.4 作为闭包的代码块:在代码块内使用外部变量
  115. 7.5 在数据结构上编写迭代器
  116. 7.6 更改对象的迭代方式
  117. 7.7 编写分类或收集的代码块方法
  118. 7.8 停止迭代
  119. 7.9 并行地在多个迭代变量上循环
  120. 7.10 隐藏块方法中的设置与清除
  121. 7.11 使用回调的松耦合系统
  122. 第8章 对象与类
  123. 8.1 管理实例数据
  124. 8.2 管理类数据
  125. 8.3 检查类或模块的成员
  126. 8.4 编写一个继承类
  127. 8.5 方法重载
  128. 8.6 验证并修改属性值
  129. 8.7 定义虚属性
  130. 8.8 授权对另一对象的方法调用
  131. 8.9 对象到不同类型的转换与强制转换
  132. 8.10 从任意对象获取人类可读的打印输出
  133. 8.11 接收或传递参数的变量数目
  134. 8.12 模拟关键字参数
  135. 8.13 调用超类的方法
  136. 8.14 创建抽象方法
  137. 8.15 冻结对象以防修改
  138. 8.16 生成对象的副本
  139. 8.17 声明常量
  140. 8.18 实现类方法和singleton方法
  141. 8.19 通过私有化方法控制访问
  142. 第9章 模块与命名空间
  143. 9.1 使用混入模拟多重继承
  144. 9.2 使用模块扩展特定对象
  145. 9.3 混用类方法
  146. 9.4 实现Enumerable:编写一个方法,获得22种免费方法
  147. 9.5 使用命名空间避免名字冲突
  148. 9.6 按需自动加载库
  149. 9.7 包括命名空间
  150. 9.8 初始化模块定义的实例变量
  151. 9.9 自动初始化混合插入的模块
  152. 第10章 反射与元编程
  153. 10.1 查找对象的类和超类
  154. 10.2 列出对象的方法
  155. 10.3 列出对象独有的方法
  156. 10.4 获得方法的引用
  157. 10.5 修正别人类中的错误
  158. 10.6 侦听类的变化
  159. 10.7 检查对象是否具有必需的属性
  160. 10.8 响应对未定义方法的调用
  161. 10.9 自动初始化实例变量
  162. 10.10 使用元编程避免刻板代码
  163. 10.11 带字符串计算的元编程
  164. 10.12 计算早先上下文中的代码
  165. 10.13 取消定义方法
  166. 10.14 为方法起别名
  167. 10.15 面向方面的编程
  168. 10.16 强制实施软件契约
  169. 第11章 XML和HTML
  170. 11.1 检查XML的良构性
  171. 11.2 从文档的树结构中提取数据
  172. 11.3 解析文档时提取数据
  173. 11.4 使用XPath导航文档
  174. 11.5 解析不合法标记
  175. 11.6 将一个XML文档转换为一个散列
  176. 11.7 验证XML文档
  177. 11.8 取代XML实体
  178. 11.9 创建并修改XML文档
  179. 11.10 压缩XML文档中的空白
  180. 11.11 猜解文档的编码
  181. 11.12 从一种编码转换为另一种编码
  182. 11.13 从HTML文档中提取所有URL
  183. 11.14 将纯文本转换为HTML
  184. 11.15 将HTML文档从Web转换为文本
  185. 11.16 一个简单的提要聚合器
  186. 第12章 图形与其他文件格式
  187. 12.1 缩略图形
  188. 12.2 向图形中添加文本
  189. 12.3 将一个图形格式转换为另一种
  190. 12.4 用图表示数据
  191. 12.5 使用Sparkline添加图形化上下文
  192. 12.6 强加密数据
  193. 12.7 解析逗号分隔的数据
  194. 12.8 解析非完全逗号分隔的数据
  195. 12.9 生成并分析Excel电子数据表
  196. 12.10 使用Gzip和Tar压缩并存档文件
  197. 12.11 读写ZIP文件
  198. 12.12 读写配置文件
  199. 12.13 生成PDF文件
  200. 12.14 将数据表示为MIDI音乐
  201. 第13章 数据库和持久性
  202. 13.1 用YAML串行化数据
  203. 13.2 用Marshal串行化数据
  204. 13.3 用Madeleine保持对象
  205. 13.4 用SimpleSearch索引结构化文本
  206. 13.5 用Ferret索引结构化文本
  207. 13.6 使用Berkeley DB数据库
  208. 13.7 在Unix上控制MySQL
  209. 13.8 找到查询返回的行数
  210. 13.9 与MySQL数据库直接对话
  211. 13.10 和PostgreSQL数据库直接对话
  212. 13.11 用ActiveRecord使用对象相关映射
  213. 13.12 使用对象相关映射Og
  214. 13.13 以编程方式构建查询
  215. 13.14 用ActiveRecord确认数据
  216. 13.15 阻止SQL注入攻击
  217. 13.16 在ActiveRecord里使用交易
  218. 13.17 添加挂钩程序到表事件中
  219. 13.18 用数据库Minxin添加标签
  220. 第14章 Internet服务
  221. 14.1 抓取Web页面的内容
  222. 14.2 发送HTTPS Web请求
  223. 14.3 自定义HTTP的请求头文件
  224. 14.4 执行DNS查询
  225. 14.5 发送邮件
  226. 14.6 用IMAP阅读邮件
  227. 14.7 用POP3阅读邮件
  228. 14.8 作为FTP客户端
  229. 14.9 作为Telnet客户端
  230. 14.10 作为SSH客户端
  231. 14.11 复制文件到其他机器
  232. 14.12 作为BitTorrent客户端
  233. 14.13 ping机器
  234. 14.14 编写Internet服务器
  235. 14.15 分析URL
  236. 14.16 编写CGI脚本
  237. 14.17 设置cookie和其他HTTP响应头文件
  238. 14.18 用CGI处理文件上传
  239. 14.19 用WEBrick运行servlet
  240. 14.20 真实世界的HTTP客户端
  241. 第15章 Web开发:Ruby on Rails
  242. 15.1 编写简单的Rails应用程序显示系统状态
  243. 15.2 从控制器传递数据到视图
  244. 15.3 创建页眉和页脚的布局
  245. 15.4 重新定位不同的位置
  246. 15.5 用render显示模板
  247. 15.6 集成数据库到Rails应用程序中
  248. 15.7 理解复数规则
  249. 15.8 创建登录系统
  250. 15.9 保存散列化的用户密码到数据库中
  251. 15.10 转义显示用的HTML和JavaScript
  252. 15.11 设置并找回会话信息
  253. 15.12 设置并找回Cookie
  254. 15.13 提取代码到辅助函数中
  255. 15.14 重构视图为视图的部分片断
  256. 15.15 用script.aculo.us添加DHTML效果
  257. 15.16 生成操作模型对象的表格
  258. 15.17 创建Ajax表格
  259. 15.18 在Web站点上发布Web服务
  260. 15.19 用Rails发送邮件
  261. 15.20 自动发送错误信息到邮箱
  262. 15.21 文档化Web站点
  263. 15.22 Web站点的单元测试
  264. 15.23 在Web应用程序中使用断点
  265. 第16章 Web服务及分布式编程
  266. 16.1 搜索Amazon上的书
  267. 16.2 找到Flickr上的照片
  268. 16.3 编写XML-RPC客户端
  269. 16.4 编写SOAP客户端
  270. 16.5 编写SOAP服务器
  271. 16.6 用Google的SOAP服务搜索Web
  272. 16.7 使用WSDL文件更简单地构建SOAP调用
  273. 16.8 用信用卡支付
  274. 16.9 通过UPS或FedEx找到装运包的费用
  275. 16.10 在任意数目的计算机间共享散列
  276. 16.11 实现分布式查询
  277. 16.12 创建共享的“白板”
  278. 16.13 通过访问控制列表保障DRb服务的安全
  279. 16.14 通过Rinda自动发现DRb服务
  280. 16.15 代理无法分布的对象
  281. 16.16 用MemCached在分布式RAM上保存数据
  282. 16.17 用MemCached高速缓存重要结果
  283. 16.18 远程控制的Jukebox
  284. 第17章 测试、调试、优化以及文档化
  285. 17.1 只在调试模式下运行代码
  286. 17.2 发出异常
  287. 17.3 处理异常
  288. 17.4 在异常后重新运行
  289. 17.5 添加日志到应用程序中
  290. 17.6 创建并理解Traceback
  291. 17.7 编写单元测试
  292. 17.8 运行单元测试
  293. 17.9 测试使用外部资源的代码
  294. 17.10 使用断点审查并改变应用程序的状态
  295. 17.11 文档化应用程序
  296. 17.12 记录应用程序
  297. 17.13 Benchmark竞争性解决方案
  298. 17.14 一次运行多个分析工具
  299. 17.15 谁调用了该方法?调用图形分析器
  300. 第18章 打包和发布软件
  301. 18.1 通过查询gem知识库寻找库
  302. 18.2 安装并使用gem
  303. 18.3 要求gem的某个特定版本
  304. 18.4 卸载gem
  305. 18.5 为已安装的gem读入文档
  306. 18.6 打包代码为gem
  307. 18.7 发布gem
  308. 18.8 用setup.rb安装并创建独立Ruby程序包
  309. 第19章 用Rake自动执行任务
  310. 19.1 自动运行单元测试
  311. 19.3 清除生成的文件
  312. 19.4 自动构建gem
  313. 19.5 收集代码的统计信息
  314. 19.6 发布文档
  315. 19.7 并行运行多个任务
  316. 19.8 通用的项目Rakefile
  317. 第20章 多任务和多线程
  318. 20.1 在Unix上运行守护进程
  319. 20.2 创建Windows服务
  320. 20.3 用线程一次做两件事情
  321. 20.4 同步访问一个对象
  322. 20.5 中止线程
  323. 20.6 在很多对象上同时运行代码块
  324. 20.7 用线程池限制多线程
  325. 20.8 用popen驱动外部进程
  326. 20.9 通过Unix shell命令抓取输出和错误流
  327. 20.10 控制其他机器上的进程
  328. 20.11 避免死锁
  329. 第21章 用户界面
  330. 21.1 一次得到输入中的一行
  331. 21.2 一次得到输入的一个字符
  332. 21.3 分析命令行参数
  333. 21.4 测试程序是否交互运行
  334. 21.5 设置和卸载Curses程序
  335. 21.6 清空屏幕
  336. 21.7 决定终端大小
  337. 21.8 改变文本的颜色
  338. 21.9 读入密码
  339. 21.10 允许用Readline编辑输入
  340. 21.11 使得键盘指示灯闪烁
  341. 21.12 用Tk创建一个GUI应用程序
  342. 21.13 用wxRuby创建一个GUI应用程序
  343. 21.14 用Ruby/GTK创建一个GUI应用程序
  344. 21.15 用RubyCocoa创建一个Mac OS X应用程序
  345. 21.16 用AppleScript得到用户输入
  346. 第22章 用其他语言扩展Ruby
  347. 22.1 为Ruby编写C扩展程序
  348. 22.2 在Ruby中使用C库
  349. 22.3 通过SWIG调用C库
  350. 22.4 通过SWIG调用C库
  351. 22.5 用JRuby使用Java库
  352. 第23章 系统管理
  353. 23.1 脚本化外部程序
  354. 23.2 管理Windows服务
  355. 23.3 作为另一个用户运行代码
  356. 23.4 不用cron或at运行周期性任务
  357. 23.5 删除匹配正则表达式的文件
  358. 23.6 批量重命名文件
  359. 23.7 找到复制的文件
  360. 23.8 自动备份
  361. 23.9 在用户目录下规范化所有权和权限
  362. 23.10 为给定用户杀死所有进程
书名:Ruby Cookbook中文版
译者:郑路长 译
国内出版社:清华大学出版社
出版时间:2007年04月
页数:901
书号:9787-302-14770-1
原版书出版商: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在内 的多个开源代码库。
 
 
本书的封面动物是侧面有斑点的豺(犬属),是一种在非洲中部和南部很常见的动物。豺是不喜开阔的,它们更喜欢热带(或亚热带)稀树大草原和森林边缘的隐蔽丛林地带。它们有时会潜入城市。侧面有斑点的豺很少见但也并非濒临灭绝。在坦桑尼亚的Serengeti国家公园和卢旺达的Akagera国家公园里专门为它们提供了保护地。
侧面有斑点的豺大约15英寸高,16~26镑重。这种豺身着从肩到臀有着白色斑点的浅灰上衣,有一条白色尖头的尾巴。侧面有斑点的豺的食谱包括大量野生水果、小型哺乳动物以及昆虫。它们也吃腐肉,是熟练的清道夫。它们跟随狮子或其他大型猫科动物找到死尸。豺通常独身或成对居住,但有时也会组成六个成员的家庭单元。它们的寿命大约在10~12年。
豺曾经是迷信的对象,因为它们和腐肉以及死亡联系在一起,也因为它们夜间的怪异叫声:它们发出猫头鹰般的叫声,狂吠,并且尖叫。或许由于豺通常巡游并且活动在墓地附近的荒地边缘,所以古代埃及的神灵以及死亡之路的看门人,Anubis,被称为豺首人。Anubis类似于精神开导师,他处理来到极乐世界的灵魂。在这里,他称量人们的心脏,决定他们应该被极乐世界接收还是该转给鳄鱼首的魔鬼,Ammit。