标签 Ruby 下的文章

Ruby on Rails 作者称其新版本是“一个人的框架”

Ruby on Rails 上周三发布了 7.0 版本,作者称这是他“一直渴望的版本,……是多年来在五个不同方面取得进展的高潮。”不过,作者最兴奋的是,7.0 更接近“一个人的框架”的理想,“可以让一个人创建现代应用程序,并在此基础上建立一个有竞争力的业务”。Ruby on Rails 在官网宣传其可以让你边学边提高,“从入门到上市”。

老王点评:Ruby 和 Rails 相得益彰,虽然现在不是很流行了,但是 Ruby 的一些理念非常有趣,这个版本的理念也很有趣。

2021 年至少有六起超过 1 亿美元的加密货币盗窃案

据报道,在过去 12 个月中,至少有 20 次超过 1000 万美元从加密货币交易所或项目中被盗的案件,其中 6 起超过了 1 亿美元。这些窃案大多数没有抓住窃贼。有的交易所提前计划好了应急基金,如果被黑客攻击,它可以对客户进行赔偿,而有的干脆就倒闭跑路了。作为对比的是,根据美国联邦调查局的年度犯罪统计,去年银行抢劫案平均每次抢劫不到 5000 美元。

老王点评:以后的惊天大劫案就不再是抢银行了,而是在线抢劫了。

云计算使互联网更脆弱

在过去的三周里,亚马逊的云计算服务出现了两次重大故障,这导致了其他在线服务的广泛中断,比如视频流瘫痪、与互联网连接的吸尘器停止工作,甚至连宠物喂食器都关闭了。这些事情打破几十年来稳步提高的互联网速度和可靠性所强化的幻想。专家认为,“‘云’从来就不是可持续的,它只是一个由集中式实体控制的集中式网络资源的委婉说法。”在短时间内出现多次故障,这是一个值得警惕的事情。企业在“云服务是有弹性的”假设前提上投入了很多,而一些公司现在正在考虑使用多云解决方案。

老王点评:确实,现在的云,其实更多是一个集中计算中心,其弹性并没有得到足够的保证。

一个底层组件的许可证发生变化后,导致大量 Ruby 软件无法构建

有一个名为 mimemagic 的 Ruby GEM 被广泛使用于包括 Rails 在内的 Ruby 软件中。该组件 是以 MIT 许可证发布的,但它又依赖于一个以 GPLv2 许可证发布的 shared-mime-info,因此,按照许可证要求,mimemagic 也应该使用 GPLv2 许可证。在发现了这一错误之后,该组件作者马上撤回了其 MIT 许可证的版本,重新发布了使用 GPLv2 许可证的新版本,这当即导致许多依赖于该组件的软件构建失败。

这对于 Rails 和其他喜欢或需要 MIT 许可证的项目来说是不可接受的,虽然 mimemagic 后来发布了修订版,去除了对 GPLv2 组件的依赖,回到了 MIT 许可证,但是一些软件已经对 mimemagic (或者说对他的作者的草率行为)失望了,决定采用另外的 MIT 组件来替代它。最终 Rails 发布了新版本,放弃了 mimemagic

这件事说起来不复杂,但是目前这种叠床架屋的软件依赖架构,已经屡屡出现因为底层某个很小的组件的一些变化而导致很多上层组件和软件出现构建问题。我觉得是时候反思这种组件构建模式了。

Linux Mint 改进通知系统以敦促用户升级以保障安全

之前我们报道过,Linux Mint 的更新相对保守,以便用户可以完全控制何时、如何以及安装哪些更新;但这种思路导致一些用户运行过时的、存在缺陷的软件。Mint 称,“为了补救这个问题,我们创建了一个新的弹出式窗口,它可以让用户知道有多少更新,为什么需要应用更新,它让用户可以查看可用的更新,并为用户提供打开自动更新的选项。如果用户驳回通知,它将在两天后再次出现,所以它并不霸道。”

Mint 在小心翼翼地平衡用户体验和安全,为这个态度点赞。

微软正式发布支持树莓派 OS 的 VS Code 的新版本

VS Code 发布了 1.55,在此版本中,微软正式支持了树莓派 OS。其实,在几周前它就已经出现在了树莓派 OS 的 APT 仓库中了,当时还因为树莓派基金会在未通知用户的情况下,悄悄加入了微软的 APT 库而引发了一些争议,因为这使得每个运行树莓派 OS 的用户在更新时都会 “ping” 一下微软。

但对另外一些人来说,只是在意 VS Code 在树莓派上不多的内存上是否能好好运行。

今天,我开始了一个 Recurse Center 的班次学习!我认识了一些人,并开始了一个小小的有趣的 Rails 项目。我想我今天不会谈太多关于这个项目的实际内容,但这里有一些关于 Rails 一天的快速笔记。

一些关于开始的笔记

在建立 Rails 项目的过程中,我学到的主要是:

  1. 它默认使用 sqlite,你必须告诉它使用 Postgres。
  2. Rails 默认包含了大量的东西,你可以禁用。

我安装并 rm -rf Rails 大概 7 次后才满意,最后用了这个咒语:

rails new . -d postgresql --skip-sprockets --skip-javascript

主要是因为我想用 Postgres 而不是 sqlite,而且跳过 sprockets 和 javascript 似乎能让安装 Rails 的速度更快,而且我想如果我决定要它们的话,我可以在以后再安装。

官方的 Rails 指南真的很不错

我在创建我的 Rails 入门应用时主要参考了 2 个资源:

一个神秘的错误信息:undefined method 'user'

我喜欢 bug,所以今天我遇到了一个奇怪的 Rails 错误! 我有一些看起来像这样的代码:

@user = User.new(user_params)
@user.save

很简单吧?但当这段代码运行时,我得到了这个令人费解的错误信息:

undefined method `user' for #<User:0x00007fb6f4012ab8> Did you mean? super

我对这里发生的事情感到超级困惑,因为我没有调用一个叫做 user 的方法。我调用的是 .save。什么嘛?!我对此感到困惑和沮丧,大概呆了 20 分钟,最后我看了看我的 User 模型,发现了这段代码:

class User < ApplicationRecord
  has_secure_password

  validates :user, presence: true, uniqueness: true
end

validates :user... 应该是一些 Rails 魔法,验证每个 User 都有一个 username,而且用户名必须是唯一的。但我犯了一个错,我写的是 user 而不是 username。我把这个问题解决了,然后一切都正常了!万岁。

我仍然不明白我应该如何调试这个问题:堆栈跟踪告诉我问题出在 @user.save 行,根本没有提到 validates :user 的事情。我觉得一定有办法调试这个问题,但我不知道是什么办法。

我学 Rails 的目的就是想看看 Rails 的魔力在实践中是如何发挥的,所以这是个很有意思的 bug,早早的就掉坑里了。

一个简单的用户管理系统

我决定在我的玩具应用中加入用户。我在网上搜索了一下,发现有一个非常流行的叫做 devise 的工具可以处理用户。我发现它的 README 有点让人不知所措,而且我知道想要在我的玩具应用中建立一个非常简陋的用户管理系统,所以我遵循了这个名为《Rails 5.2 中从零开始进行用户验证》的指南,到目前为止,这个指南似乎还不错。Rails 似乎已经有了一大堆管理用户的内置东西,我真的很惊讶于这本指南的短小和我需要写的代码之少。

我在实现用户功能的时候了解到,Rails 有一个内置的神奇的会话管理系统(参见 Rails 会话如何工作。默认情况下,所有的会话数据似乎都存储在用户电脑上的 cookie 中,不过我想如果 cookie 太大了,你也可以把会话数据存储在数据库中。

已经有了会话管理系统,有了 cookie 和用户,却不太清楚到底发生了什么,这肯定是有点奇怪的,但也是挺好玩的!我们会看看情况如何。我们将拭目以待。

明天:更多的 Rails!

也许明天我可以在实现我的有趣的 rails 应用的想法上取得一些进展!


via: https://jvns.ca/blog/2020/11/09/day-1--a-little-rails-/

作者:Julia Evans 选题:lujun9972 译者:wxy 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

尽管我很难说清楚为什么,但 Ruby 一直是我最喜爱的一门编程语言。如果用音乐来类比的话,Python 给我的感觉像是 朋克摇滚 punk rock ,简单、直接,但略显单调,而 Ruby 则像是爵士乐,从根本上赋予了程序员表达自我的自由,虽然这可能会让代码变复杂,编写出来的程序对其他人来说不直观。

Ruby 社区一直将 灵活表达 freedom of expression 视为其核心价值。可我不认同这对于 Ruby 的开发和普及是最重要的。创建一门编程语言也许是为了更高的性能,也许是为了在抽象上节省更多的时间,可 Ruby 就有趣在它并不关心这些,从它诞生之初,它的目标就是让程序员更快乐。

松本·行弘

松本·行弘 Yukihiro Matsumoto ,亦称为 “Matz”,于 1990 年毕业于筑波大学。筑波是东京东北方向上的一个小城市,是科学研究与技术开发的中心之一。筑波大学以其 STEM 计划广为流传。松本·行弘在筑波大学的信息科学专业学习过,且专攻编程语言。他也在 Ikuo Nakata 的编程语言实验室工作过。(LCTT 译注:STEM 是 科学 Science 技术 Technology 工程 Engineering 数学 Mathematics 四门学科英文首字母的缩写。)

松本从 1993 年开始制作 Ruby,那时他才刚毕业几年。他制作 Ruby 的起因是觉得那时的脚本语言缺乏一些特性。他在使用 Perl 的时候觉得这门语言过于“玩具”,此外 Python 也有点弱,用他自己的话说:

我那时就知道 Python 了,但我不喜欢它,因为我认为它不是一门真正的面向对象的语言。面向对象就像是 Python 的一个附件。作为一个编程语言狂热者,我在 15 年里一直是面向对象的忠实粉丝。我真的想要一门生来就面向对象而且易用的脚本语言。我为此特地寻找过,可事实并不如愿。 1

所以一种解释松本创造 Ruby 的动机就是他想要创造一门更好,且面向对象的 Perl。

但在其他场合,松本说他创造 Ruby 主要是为了让他自己和别人更快乐。2008 年,松本在谷歌技术讲座结束时放映了这张幻灯片:

他对听众说到,

我希望 Ruby 能帮助世界上的每一个程序员更有效率地工作,享受编程并感到快乐。这也是制作 Ruby 语言的主要意图。 2

松本开玩笑的说他制作 Ruby 的原因很自私,因为他觉得其它的语言乏味,所以需要创造一点让自己开心的东西。

这张幻灯片展现了松本谦虚的一面。其实,松本是一位摩门教践行者,因此我很好奇他传奇般的友善有多少归功于他的宗教信仰。无论如何,他的友善在 Ruby 社区广为流传,甚至有一条称为 MINASWAN 的原则,即“ 松本人很好,我们也一样 Matz Is Nice And So We Are Nice ”。我想那张幻灯片一定震惊了来自 Google 的观众。我想谷歌技术讲座上的每张幻灯片都充满着代码和运行效率的指标,来说明一个方案比另一个更快更有效,可仅仅放映崇高的目标的幻灯片却寥寥无几。

Ruby 主要受到 Perl 的影响。Perl 则是由 Larry Wall 于 20 世纪 80 年代晚期创造的语言,主要用于处理和转换基于文本的数据。Perl 因其文本处理和正则表达式而闻名于世。对于 Ruby 程序员,Perl 程序中的很多语法元素都不陌生,例如符号 $、符号 @elsif 等等。虽然我觉得,这些不是 Ruby 应该具有的特征。除了这些符号外,Ruby 还借鉴了 Perl 中的正则表达式的处理和标准库。

但影响了 Ruby 的不仅仅只有 Perl 。在 Ruby 之前,松本制作过一个仅用 Emacs Lisp 编写的邮件客户端。这一经历让他对 Emacs 和 Lisp 语言运行的内部原理有了更多的认识。松本说 Ruby 底层的对象模型也受其启发。在那之上,松本添加了一个 Smalltalk 风格的信息传递系统,这一系统随后成为了 Ruby 中任何依赖 #method_missing 的操作的基石。松本也表示过 Ada 和 Eiffel 也影响了 Ruby 的设计。

当时间来到了给这门新语言命名的时候,松本和他的同事 Keiju Ishitsuka 挑选了很多个名字。他们希望名字能够体现新语言和 Perl、shell 脚本间的联系。在这一段非常值得一读的即时消息记录中,Ishitsuka 和 松本也许花了太多的时间来思考 shell 贝壳 clam 蛤蛎 oyster 牡蛎 pearl 珍珠 之间的关系了,以至于差点把 Ruby 命名为“ Coral 珊瑚虫 ”或“ Bisque 贝类浓汤 ”。幸好,他们决定使用 Ruby,因为它就像 pearl 一样,是一种珍贵的宝石。此外, Ruby 红宝石 还是 7 月的生辰石,而 Pearl 珍珠 则是 6 月的生辰石,采用了类似 C++ 和 C# 的隐喻,暗示着她们是改进自前辈的编程语言。(LCTT 译注:Perl 和 Pearl 发音相同,所以也常以“珍珠”来借喻 Perl;shell 是操作系统提供的用户界面,这里指的是命令行界面;更多有关生辰石的信息。)

Ruby 西渐

Ruby 在日本的普及很快。1995 年 Ruby 刚刚发布后不久后,松本就被一家名为 Netlab 的日本软件咨询财团(全名 Network Applied Communication Laboratory)雇用,并全职为 Ruby 工作。到 2000 年时,在 Ruby 发布仅仅 5 年后,Ruby 在日本的流行度就超过了 Python。可这时的 Ruby 才刚刚进入英语国家。虽然从 Ruby 的诞生之初就存在讨论它的日语邮件列表,但是英语的邮件列表直到 1998 年才建立起来。起初,在英语的邮件列表中交流的大多是日本的 Ruby 狂热者,可随着 Ruby 在西方的逐渐普及而得以改变。

在 2000 年,Dave Thomas 出版了第一本涵盖 Ruby 的英文书籍《Programming Ruby》。因为它的封面上画着一把锄头,所以这本书也被称为锄头书。这是第一次向身处西方的程序员们介绍了 Ruby。就像在日本那样,Ruby 的普及很快,到 2002 年时,英语的 Ruby 邮件列表的通信量就超过了日语邮件列表。

时间来到了 2005 年,Ruby 更流行了,但它仍然不是主流的编程语言。然而,Ruby on Rails 的发布让一切都不一样了。Ruby on Rails 是 Ruby 的“杀手级应用”,没有别的什么项目能比它更推动 Ruby 的普及了。在 Ruby on Rails 发布后,人们对 Ruby 的兴趣爆发式的增长,看看 TIOBE 监测的语言排行:

有时人们开玩笑的说,Ruby 程序全是基于 Ruby-on-Rails 的网站。虽然这听起来就像是 Ruby on Rails 占领了整个 Ruby 社区,但在一定程度上,这是事实。因为编写 Rails 应用时使用的语言正是 Ruby。Rails 欠 Ruby 的和 Ruby 欠 Rails 的一样多。

Ruby 的设计哲学也深深地影响了 Rails 的设计与开发。Rails 之父 David Heinemeier Hansson 常常提起他第一次与 Ruby 的接触的情形,那简直就是一次传教。他说,那种经历简直太有感召力了,让他感受到要为松本的杰作(指 Ruby)“传教”的使命。 3 对于 Hansson 来说,Ruby 的灵活性简直就是对 Python 或 Java 语言中自上而下的设计哲学的反抗。他很欣赏 Ruby 这门能够信任自己的语言,Ruby 赋予了他自由选择 程序表达方式 express his programs 的权力。

就像松本那样,Hansson 声称他创造 Rails 时因为对现状的不满并想让自己能更开心。他也认同让程序员更快乐高于一切的观点,所以检验 Rails 是否需要添加一项新特性的标准是“ 更灿烂的笑容标准 The Principle of The Bigger Smile ”。什么功能能让 Hansson 更开心就给 Rails 添加什么。因此,Rails 中包括了很多非正统的功能,例如 “Inflector” 类和 Time 扩展(“Inflector”类试图将单个类的名字映射到多个数据库表的名字;Time 扩展允许程序员使用 2.days.ago 这样的表达式)。可能会有人觉得这些功能太奇怪了,但 Rails 的成功表明它的确能让很多人的生活得更快乐。

因此,虽然 Rails 的火热带动了 Ruby 的普及看起来是一个偶然,但事实上 Rails 体现了 Ruby 的很多核心准则。此外,很难看到使用其他语言开发的 Rails,正是因为 Rails 的实现依赖于 Ruby 中 类似于宏的类方法调用 macro-like class method calls 来实现模型关联这样的功能。一些人认为这么多的 Ruby 开发需要基于 Ruby on Rails 是 Ruby 生态不健康的表现,但 Ruby 和 Ruby on Rails 结合的如此紧密并不是没有道理的。

Ruby 之未来

人们似乎对 Ruby(及 Ruby on Rails)是否正在消亡有着异常的兴趣。早在 2011 年,Stack Overflow 和 Quora 上就充斥着程序员在咨询“如果几年后不再使用 Ruby 那么现在是否有必要学它”的话题。这些担忧对 Ruby 并非没有道理,根据 TIOBE 指数和 Stack Overflow 趋势,Ruby 和 Ruby on Rails 的人气一直在萎缩,虽然它也曾是热门新事物,但在更新更热的框架面前它已经黯然失色。

一种解释这种趋势的理论是程序员们正在舍弃动态类型的语言转而选择静态类型的。TIOBE 指数的趋势中可以看出对软件质量的需求在上升,这意味着出现在运行时的异常变得难以接受。他们引用 TypeScript 来说明这一趋势,TypeScript 是 JavaScript 的全新版本,而创造它的目的正是为了保证客户端运行的代码能受益于编译所提供的安全保障。

我认为另一个更可能的原因是比起 Ruby on Rails 推出的时候,现在存在着更多有竞争力的框架。2005 年它刚刚发布的时候,还没有那么多用于创建 Web 程序的框架,其主要的替代者还是 Java。可在今天,你可以使用为 Go、Javascript 或者 Python 开发的各种优秀的框架,而这还仅仅是主流的选择。Web 的世界似乎正走向更加分布式的结构,与其使用一块代码来完成从数据库读取到页面渲染所有事务,不如将事务拆分到多个组件,其中每个组件专注于一项事务并将其做到最好。在这种趋势下,Rails 相较于那些专攻于 JavaScript 前端通信的 JSON API 就显得过于宽泛和臃肿。

总而言之,我们有理由对 Ruby 的未来持乐观态度。因为不管是 Ruby 还是 Rails 的开发都还很活跃。松本和其他的贡献者们都在努力开发 Ruby 的第三个主要版本。新的版本将比现在的版本快上 3 倍,以减轻制约着 Ruby 发展的性能问题。虽然从 2005 年起,越来越多的 Web 框架被开发出来,但这并不意味着 Ruby on Rails 就失去了其生存空间。Rails 是一个富有大量功能的成熟的工具,对于一些特定类型的应用开发一直是非常好的选择。

但就算 Ruby 和 Rails 走上了消亡的道路,Ruby 让程序员更快乐的信条一定会存活下来。Ruby 已经深远的影响了许多新的编程语言的设计,这些语言的设计中能够看到来自 Ruby 的很多理念。而其他的新生语言则试着变成 Ruby 更现代的实现,例如 Elixir 是一个强调函数式编程范例的语言,仍在开发中的 Crystal 目标是成为使用静态类型的 Ruby 。世界上许多程序员都喜欢上了 Ruby 及其语法,因此它的影响必将会在未来持续很长一段时间。

喜欢这篇文章吗?这里每两周都会发表一篇这样的文章。请在推特上关注我们 @TwoBitHistory 或者订阅我们的 RSS,这样新文章发布的第一时间你就能得到通知。


  1. http://ruby-doc.org/docs/ruby-doc-bundle/FAQ/FAQ.html
  2. https://www.youtube.com/watch?v=oEkJvvGEtB4?t=30m55s
  3. http://rubyonrails.org/doctrine/

via: https://twobithistory.org/2017/11/19/the-ruby-story.html

作者:Two-Bit History 选题:lujun9972 译者:wwhio 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

开源的 Ruby 书籍

Ruby 是由 Yukihiro “Matz” Matsumoto 开发的一门通用目的、脚本化、结构化、灵活且完全面向对象的编程语言。它具有一个完全动态类型系统,这意味着它的大多数类型检查是在运行的时候进行,而非编译的时候。因此程序员不必过分担心是整数类型还是字符串类型。Ruby 会自动进行内存管理,它具有许多和 Python、Perl、Lisp、Ada、Eiffel 和 Smalltalk 相同的特性。

Ruby on Rails 框架对于 Ruby 的流行起到了重要作用,它是一个全栈 Web 框架,目前已被用来创建许多受欢迎的应用,包括 Basecamp、GitHub、Shopify、Airbnb、Twitch、SoundCloud、Hulu、Zendesk、Square 和 Highise 。

Ruby 具有很高的可移植性性,在 Linux、Windows、Mac OS X、Cygwin、FreeBSD、NetBSD、OpenBSD、BSD/OS、Solaris、Tru64 UNIX、HP-UX 以及其他许多系统上均可运行。目前,Ruby 在 TIOBE 编程社区排名 12 。

这篇文章有 9 本很优秀的推荐书籍,有针对包括初学者、中级程序员和高级程序员的书籍。当然,所有的书籍都是在开源许可下发布的。

这篇文章是 OSSBlog 的系列文章开源编程书籍的一部分。

Ruby Best Practices

作者: Gregory Brown (328 页)

《Ruby Best Practices》适合那些希望像有经验的 Ruby 专家一样使用 Ruby 的程序员。本书是由 Ruby 项目 Prawn 的开发者所撰写的,它阐述了如何使用 Ruby 设计美丽的 API 和特定领域语言,以及如何利用函数式编程想法和技术,从而简化代码,提高效率。

《Ruby Best Practices》 更多的内容是关于如何使用 Ruby 来解决问题,它阐述的是你应该使用的最佳解决方案。这本书不是针对 Ruby 初学者的,所以对于编程新手也不会有太多帮助。这本书的假想读者应该对 Ruby 的相应技术有一定理解,并且拥有一些使用 Ruby 来开发软件的经验。

这本书分为两部分,前八章组成本书的核心部分,后三章附录作为补充材料。

这本书提供了大量的信息:

  • 通过测试驱动代码 - 涉及了大量的测试哲学和技术。使用 mocks 和 stubs
  • 通过利用 Ruby 神秘的力量来设计漂亮的 API:灵活的参数处理和代码块
  • 利用动态工具包向开发者展示如何构建灵活的界面,实现单对象行为,扩展和修改已有代码,以及程序化地构建类和模块
  • 文本处理和文件管理集中于正则表达式,文件、临时文件标准库以及文本处理策略实战
  • 函数式编程技术优化了模块代码组织、存储、无穷目录以及更高顺序程序。
  • 理解代码如何出错以及为什么会出错,阐述如何处理日志记录
  • 通过利用 Ruby 的多语言能力削弱文化屏障
  • 熟练的项目维护

本书为开源书籍,在 CC NC-SA 许可证下发布。

在此下载《Ruby Best Practices》

I Love Ruby

作者: Karthikeyan A K (246 页)

《I Love Ruby》以比传统的介绍更高的深度阐述了基本概念和技术。该方法为编写有用、正确、易维护和高效的 Ruby 代码提供了一个坚实的基础。

章节内容涵盖:

  • 变量
  • 字符串
  • 比较和逻辑
  • 循环
  • 数组
  • 哈希和符号
  • Ranges
  • 函数
  • 变量作用域
  • 类 & 对象
  • Rdoc
  • 模块和 Mixins
  • 日期和时间
  • 文件
  • Proc、匿名 和 块
  • 多线程
  • 异常处理
  • 正则表达式
  • Gems
  • 元编程

在 GNU 自由文档许可证之下,你可以复制、发布和修改本书,1.3 或任何之后版本由自由软件基金会发布。

点此下载《I Love Ruby》

Programming Ruby – The Pragmatic Programmer’s Guide

作者: David Thomas, Andrew Hunt (HTML)

《Programming Ruby – The Pragmatic Programmer’s Guide》是一本 Ruby 编程语言的教程和参考书。使用 Ruby,你将能够写出更好的代码,更加有效率,并且使编程变成更加享受的体验。

内容涵盖以下部分:

  • 类、对象和变量
  • 容器、块和迭代器
  • 标准类型
  • 更多方法
  • 表达式
  • 异常、捕获和抛出
  • 模块
  • 基本输入和输出
  • 线程和进程
  • 何时抓取问题
  • Ruby 和它的世界、Web、Tk 和 微软 Windows
  • 扩展 Ruby
  • 映像、对象空间和分布式 Ruby
  • 标准库
  • 面向对象设计库
  • 网络和 Web 库
  • 嵌入式文件
  • 交互式 Ruby shell

这本书的第一版在开放发布许可证 1.0 版或更新版的许可下发布。本书更新后的第二版涉及 Ruby 1.8 ,并且包括所有可用新库的描述,但是它不是在免费发行许可证下发布的。

点此下载《Programming Ruby – The Pragmatic Programmer’s Guide》

Why’s (Poignant) Guide to Ruby

作者:why the lucky stiff (176 页)

《Why’s (poignant) Guide to Ruby》是一本 Ruby 编程语言的介绍书籍。该书包含一些冷幽默,偶尔也会出现一些和主题无关的内容。本书包含的笑话在 Ruby 社区和卡通角色中都很出名。

本书的内容包括:

  • 关于本书
  • Kon’nichi wa, Ruby
  • 一个快速(希望是无痛苦的)的 Ruby 浏览(伴随卡通角色):Ruby 核心概念的基本介绍
  • 代码浮动小叶:评估和值,哈希和列表
  • 组成规则的核心部分:case/when、while/until、变量作用域、块、方法、类定义、类属性、对象、模块、IRB 中的内省、dup、self 和 rbconfig 模块
  • 中心:元编程、正则表达式
  • 当你打算靠近胡须时:在已存在类中发送一个新方法
  • 天堂演奏

本书在 CC-SA 许可证许可下可用。

点此下载《Why’s (poignant) Guide to Ruby》

Ruby Hacking Guide

作者: Minero Aoki ,翻译自 Vincent Isambart 和 Clifford Escobar Caoille (HTML)

通过阅读本书可以达成下面的目标:

  • 拥有关于 Ruby 结构的知识
  • 掌握一般语言处理的知识
  • 收获阅读源代码的技能

本书分为四个部分:

  • 对象
  • 动态分析
  • 评估
  • 外部评估

要想从本书中收获最多的东西,需要具备一定 C 语言的知识和基本的面向对象编程知识。本书在 CC-NC-SA 许可证许可下发布。

原书的官方支持网站为 i.loveruby.net/ja/rhg/

点此下载《Ruby Hacking Guide》

The Book Of Ruby

作者: How Collingbourne (425 页)

《The Book Of Ruby》是一本免费的 Ruby 编程高级教程。

《The Book Of Ruby》以 PDF 文件格式提供,并且每一个章节的所有例子都伴有可运行的源代码。同时,也有一个介绍来阐述如何在 Steel 或其他任何你喜欢的编辑器/IDE 中运行这些 Ruby 代码。它主要集中于 Ruby 语言的 1.8.x 版本。

本书被分成很小的块。每一个章节介绍一个主题,并且分成几个不同的子话题。每一个编程主题由一个或多个小的自包含、可运行的 Ruby 程序构成。

  • 字符串、数字、类和对象 - 获取输入和输出、字符串和外部评估、数字和条件测试:if ... then、局部变量和全局变量、类和对象、实例变量、消息、方法、多态性、构造器和检属性和类变量 - 超类和子类,超类传参,访问器方法,’set‘ 访问器,属性读写器、超类的方法调用,以及类变量
  • 类等级、属性和类变量 - 超类和子类,超类传参,访问器方法,’set‘ 访问器,属性读写器、超类的方法调用,以及类变量
  • 字符串和 Ranges - 用户自定义字符串定界符、引号等更多
  • 数组和哈希 - 展示如何创建一系列对象
  • 循环和迭代器 - for 循环、代码块、while 循环、while 修改器以及 until 循环
  • 条件语句 - If..Then..Else、And..Or..Not、If..Elsif、unless、if 和 unless 修改器、以及 case 语句
  • 方法 - 类方法、类变量、类方法是用来干什么的、Ruby 构造器、单例方法、单例类、重载方法以及更多
  • 传递参数和返回值 - 实例方法、类方法、单例方法、返回值、返回多重值、默认参数和多重参数、赋值和常量传递以及更多
  • 异常处理 - 涉及 rescue、ensure、else、错误数量、retry 和 raise
  • 块、Procs 和 匿名 - 阐述为什么它们对 Ruby 来说很特殊
  • 符号 - 符号和字符串、符号和变量以及为什么应该使用符号
  • 模块和 Mixins
  • 文件和 IO - 打开和关闭文件、文件和目录、复制文件、目录询问、一个关于递归的讨论以及按大小排序
  • YAML - 包括嵌套序列,保存 YAML 数据以及更多
  • Marshal - 提供一个保存和加载数据的可选择方式
  • 正则表达式 - 进行匹配、匹配群组以及更多
  • 线程 - 向你展示如何同时运行多个任务
  • 调试和测试 - 涉及交互式 Ruby shell(IRB.exe)、debugging 和 单元测试
  • Ruby on Rails - 浏览一个创建博客的实践指南
  • 动态编程 - 自修改程序、重运算魔法、特殊类型的运算、添加变量和方法以及更多

本书由 SapphireSteel Software 发布,SapphireSteel Software 是用于 Visual Studio 的 Ruby In Steel 集成开发环境的开发者。读者可以复制和发布本书的文本和代码(免费版)

点此下载《The Book Of Ruby》

The Little Book Of Ruby

作者: Huw Collingbourne (87 页)

《The Little Book of Ruby》是一本一步接一步的 Ruby 编程教程。它指导读者浏览 Ruby 的基础。另外,它分享了《The Book of Ruby》一书的内容,但是它旨在作为一个简化的教程来阐述 Ruby 的主要特性。

章节内容涵盖:

  • 字符串和方法 - 包括外部评估。详细描述了 Ruby 方法的语法
  • 类和对象 - 阐述如何创建一个新类型的对象
  • 类等级 - 一个特殊类型的类,其为一些其他类的简化并且继承了其他一些类的特性
  • 访问器、属性、类变量 - 访问器方法,属性读写器,属性创建变量,调用超类方法以及类变量探索
  • 数组 - 学习如何创建一系列对象:数组包括多维数组
  • 哈希 - 涉及创建哈希表,为哈希表建立索引以及哈希操作等
  • 循环和迭代器 - for 循环、块、while 循环、while 修饰器以及 until 循环
  • 条件语句 - If..Then..Else、And..Or..Not、If..Elsif、unless、if 和 unless 修饰器以及 case 语句
  • 模块和 Mixins - 包括模块方法、模块作为名字空间模块实例方法、模块或 'mixins'、来自文件的模块和预定义模块
  • 保存文件以及更多内容

本书可免费复制和发布,只需保留原始文本且注明版权信息。

点此下载《The Little Book of Ruby》

Kestrels, Quirky Birds, and Hopeless Egocentricity

作者: Reg “raganwald” Braithwaite (123 页)

《Kestrels, Quirky Birds, and Hopeless Egocentricity》是通过收集 “Raganwald” Braithwaite 的关于组合逻辑、Method Combinators 以及 Ruby 元编程的系列文章而形成的一本方便的电子书。

本书提供了通过使用 Ruby 编程语言来应用组合逻辑的一个基本介绍。组合逻辑是一种数学表示方法,它足够强大,从而用于解决集合论问题以及计算中的问题。

在这本书中,读者会会探讨到一些标准的 Combinators,并且对于每一个 Combinators,书中都用 Ruby 编程语言写程序探讨了它的一些结果。在组合逻辑上,Combinators 之间组合并相互改变,书中的 Ruby 例子注重组合和修改 Ruby 代码。通过像 K Combinator 和 .tap 方法这样的简单例子,本书阐述了元编程的理念和递归 Combinators 。

本书在 MIT 许可证许可下发布。

点此下载《Kestrels, Quirky Birds, and Hopeless Egocentricity》

Ruby Programming

作者: Wikibooks.org (261 页)

Ruby 是一种解释性、面向对象的编程语言。

本书被分为几个部分,从而方便按顺序阅读。

  • 开始 - 向读者展示如何在其中一个操作系统环境中安装并开始使用 Ruby
  • Ruby 基础 - 阐述 Ruby 语法的主要特性。它涵盖了字符串、编码、写方法、类和对象以及异常等内容
  • Ruby 语义参考
  • 内建类
  • 可用模块,涵盖一些标准库
  • 中级 Ruby 涉及一些稍微高级的话题

本书在 CC-SA 3.0 本地化许可证许可下发布。

点此下载《Ruby Programming》


无特定顺序,我将在结束前推荐一些没有在开源许可证下发布但可以免费下载的 Ruby 编程书籍。


via: https://www.ossblog.org/study-ruby-programming-with-open-source-books/

作者:Steve Emms 译者:ucasFL 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

经过了六个月的努力,发布了 4 个 beta 版本、2 个 RC 版本,Rails 5.0 终于正式发布了!

Rails 社区的公告中说,“这是由数百位贡献者,历经上千次提交而达成的一个新的里程碑,Rails 5.0 无疑是迄今为止最好、最完善的 Rails 版本。 经过了这么久的发展,社区依然具有如此活力,感谢每一位帮助过我们的人们!”

Ruby on Rails

在本次发布的 Rails 5.0 中,有两大亮点:

Action Cable

Action Cable 是一个重新打造的框架,用于在 Rails 中控制 WebSocket。它是一个完全整合的解决方案,包括了连接管理、用于服务器端处理的 channel 层以及客户端交互的 JavaScript 层。它增加了易用性,让设计类似聊天、提示、现场等实时功能更加容易。如果你想看看它的具体表现,你可以看看它在 Basecamp 3 强大的表现。

Action Cable 中最棒的地方是你可以在你的 WebSocket 里面访问你的整个 Active Record 和 PORO 域模型。如果你想为 WebSocket 响应复用服务器端模板的话,甚至还有一个全新打造的 ActionController::Renderer 系统可以使你在控制器之外渲染你的模板。

在开发模式时,Action Cable 可以运行在你的应用内部,你只需要将默认的开发服务器从 Webrick 切换到 Puma 即可。在产品环境中,你也可以让 Action Cable 运行自己的服务器。

API 模式

Rails 不仅是你使用服务器端 HTML 模板渲染来构建全栈应用的最佳选择,而且也是开发客户端 JavaScript 或原生应用的好伴侣,只需要用 JSON 和后端通讯即可。新推出的 -api 模式可以让你使用 rails new backend --api 创建一个新的 Rails 应用,这样会采用 JSON 而不是 HTML 作为应用骨架和配置。

这个功能还需要更多的完善,不过这是一个良好的开端。

其它亮点

  • 不用再使用 rake 命令了,统一采用一个 rails 命令即可。比如现在用 bin/rails db:migrate 取代了 bin/rake db:migrate
  • 新的属性 API
  • 生成器创建的所有模型都以 ApplicationRecord 为默认父类。
  • 等等……

具体你应该看看各个部分的变更日志,都有不少变化:

更多的细节,你可以看看完整的 Rails 5.0 发布公告,Claudio B. 做了一篇简短的演示来介绍了他喜欢的一些改进(和一些功能的去除),DHH 本人也录制了一段基础性的介绍视频: 让我们用 Rails 5 打造一个博客

此外要注意,根据 Rails 的维护策略,Rails 5.0 的发布代表着以后将只会对 5.0.x 进行错误修复,安全问题的修复会包括 5.0.x 和 4.2.x,(如果 5.1 出来了就是 5.1.x、5.0.x 和 4.2.x)。也就是说,4.1.x 及其以下版本原则上不支持了!而且,Ruby 2.2.2 及以上版本也将仅支持 Rails 5.0 及以上版本。

(题图来自:mobiloitte.com)