就你的例子而言,我们做一个测试
require 'benchmark'
n = 100_000
arr = 1.upto(n).to_a
index = n / 2
puts index
Benchmark.bm do |x|
x.report { 100.times { arr.index(index) } }
x.report { 100.times { arr[2..].index(index) } }
end
在 ruby 2.7.1p83 (2020-03-31 revision a0c7c23c9c) [x86_64-darwin19]
上的结果
user system total real
0.036552 0.000022 0.036574 ( 0.036579)
0.035222 0.000063 0.035285 ( 0.035303)
user system total real
0.034097 0.000060 0.034157 ( 0.034210)
0.030318 0.000049 0.030367 ( 0.030414)
user system total real
0.039931 0.000083 0.040014 ( 0.040158)
0.035147 0.000157 0.035304 ( 0.035333)
后者比前者性能略高(考虑误差性能大致一致)
换一种 benchmark 做法
require 'benchmark/ips'
n = 100_000
arr = 1.upto(n).to_a
index = n / 2
puts index
Benchmark.ips do |x|
x.config(time: 10, warmup: 2)
x.report("arr.index(index)") { arr.index(index) }
x.report("arr[2..].index(index)") { arr[2..].index(index) }
x.compare!
end
结果
Warming up --------------------------------------
arr.index(index) 329.000 i/100ms
arr[2..].index(index)
317.000 i/100ms
Calculating -------------------------------------
arr.index(index) 3.486k (± 3.5%) i/s - 34.874k in 10.018586s
arr[2..].index(index)
3.455k (± 1.6%) i/s - 34.553k in 10.002732s
Comparison:
arr.index(index): 3485.6 i/s
arr[2..].index(index): 3455.3 i/s - same-ish: difference falls within error
两种写法的性能表现几乎相同(考虑误差)
结果来看两种写法的性能并无差别,你的假设证伪。
更新:
换了 Float 一样成立
require 'benchmark'
n = 100_000.0
arr = 1.upto(n).to_a
index = n / 2
puts index
Benchmark.bm do |x|
x.report { 100.times { arr.index(index) } }
x.report { 100.times { arr[2..].index(index) } }
end
user system total real
0.196415 0.000087 0.196502 ( 0.196542)
0.188249 0.000104 0.188353 ( 0.188391)
更新了有奖互动相关的信息
更新了几件 T 恤图案的渲染图~
更新了自动加入参会群的二维码~
没 不过群里有发设计稿,我看看能不能把图案放到这里来。
因为这个周边制作有点特殊性,目前还没做样子
已改
这已经拖延症晚期,再不发就不用发了...
说来小扎的基金会网站也是 Rails 写的...
编译前端资源很消耗 CPU 的,我记得有 Cap 的 recipe 在本地编译传到服务器的
The parameters are passed on the stack. If there are too many parameters, you'll exhaust stack space and get the mentioned error.
据说 Hey 的技术成果过阵子要回馈社区,Turbolinks 6、Stimulus 2 还有 Rails 的一些组件
Redmine 的样式还是上个世纪的思路,就用浏览器调试器来做就好了...
好吧,我申请个 up 主去
蛋疼... 那有啥地方上传视频比较方便的...
发了个推展示一下 Dummy App 可以做到的效果
https://twitter.com/jasl9187/status/1270304483923259393
有空还可以搞一下表单字段的访问控制(FormCore 本来就有的功能)、会签、动态指派
加油!!!!!!!!!!!!!!!!!
如果没装烂七八糟常驻的程序的话,很可能是电池老化,这个很正常,可以自己搜一下怎么看电池健康度,如果过低花钱换(在保的话,低于 85% 是免费更换的)
不耗电啊
G 家肯定是 Angular 了,应该不开源,市面上收费免费的 MD UI 框架确实都有各自的小毛病不尽如人意
10.15 自带 Ruby 2.6,你用 RVM 或者 RBENV 装 2.6.6 吧
如果是单复数词汇的映射错误,可以添加例外列表到 config/initializers/inflections.rb
加 source 显式指明也不错
Ruby 这里比较灵活,因为决定puts 'hi'; 7 if (a<6)
这句话的返回值的是 7 if (a<6)
这部分,显然返回值是 7
,接着 7==7
成立,于是满足 puts 'good'
的条件,得到了你描述的结果
不过灵活归灵活,这种做法或许可以实现某些非常奇妙的效果,但是,可读性永远是第一位的,也就是,虽然你可以,但是尽量还是不要这样做。
Python 的设计哲学是希望一个事情只有一种做法,所以有时候会显得过于死板了。
这是人的问题,跟技术一点儿关系都没,富士康开工物美价廉的工人得给足
那么我的上一条已经回答过你了。Ruby 在 Web 领域,生态完善、案例众多、技术有效、并非冷门。
不过中文资料少、Windows 下极不友好确实影响在国内的传播
Ruby 主要应用在 Web 后端领域,你如果看综合语言排行榜,那么单一领域语言还是很吃亏的,当然也比不过 PHP,那个上手确实容易(从工作经历,我其实是 PHP 转 Ruby),Wordpress 这种杀手应用也太强。
如果你放眼世界
Programming Language Usage Distribution in the Top 1 Million Sites Ruby 排第三位(1%)
Programming Language Usage Distribution in the Top 100k Sites Ruby 还是第三位,但是占比显著提高(4%)
Programming Language Usage Distribution in the Top 10k Sites Ruby 还是第三位,占比(6%)
Identify technology on websites Ruby(主要是 Rails)在 Web 框架领域排名第三位
6 of the Top 10 YCombinator companies use Ruby
这个市占比,普及率很低么?
此外国内外有个很明显的差别,朋友进了 AWS,对我讲:“我看了代码仓库,一半的项目都是 Ruby”,可是,你听过 AWS 招 Ruby 么?(我那个朋友是一个 PHP 爱好者,进公司写 Java 和维护一点儿 Ruby 项目)
Aribnb、苹果,也是大量的 Ruby 系统,你看 Linkedin 上的 JD,招的都是 Software Engineer,某些岗位下会有 Ruby、Rails 是加分项。
国内其实闷声发大财的公司挺多的,比如听说过商汤有一个 Ruby 团队(之前喝酒有人给我透露过有 30+ 人),没见过他们出来宣传,组织 RubyConf 的时候我一直有一个遗憾(我执行力太差),把那些用 Ruby 但是不声张的公司全炸出来
另外对于国内 Ruby 市占疲软嘛,我有点得罪人的话,对于公司,能靠堆人和加班就能解决问题的时候,需要谈技术的生产力吗?公司会因为你工作效率高干得多奖励你么?我甚至还过有人对我讲:“你是效率高,但我找 50 个实习生,你拼得过他们么?我找 100 个,你肯定不行了”
这是对我职业生涯影响最重的一次经历,曾经我的理念是为公司降低成本提高产出,结合国内的经济形势疲软,我就下定决心不再靠依附于公司谋生,自由职业后,我要为工作时间的每一分每一秒负责,此时生产力才真的是问题。
另外啊,这几年有几阵突然急招 Ruby 工程师,我知道的两次,第一次魔改 GitLab,自主研发代码托管服务,第二次,魔改貔貅,自主研发数字货币交易所。
其实销售能力才是最重要的,不过前端是产品的窗户...
其实你这里 sex 可以用 enum 来做的,然后自动就生成 male
和 female
两个 scope 了,rails 6 加了 not_male 这样的 scope,但没有的话你可以自己实现(当然这样就没必要用 enum 了)
!"male"
这种做法没法搞,这样写必定等价于 false,你可以改写成 by_sex(:not_male)
把 symbol 当 枚举 去用,更改你的 scope 实现做一个 case...when 就好了
Ruby/Rails 的生产力高过 Java、Py 等语言我觉得在 RubyChina 应该是有共识的。
就我提的那个案例的话,从 0 搭一整套 OA(核心功能多租多项目、审批流程、组织结构、动态表单、带全部界面),我一个人实施(其实还是有俩朋友分担了一些工作),工期三个月、期间我还有两个别的合同在同时进行、组织 RubyConf、顺带结了个婚、保证八个小时睡眠和两个小时 山口山 和 SC2 的游戏时间。
做 Web 或者业务系统都不是什么高精尖的事情,搬砖做体力活要时薪足够高,就只能在效率上找方法(当然把事情做对也很重要),到我描述的这个水平的效率至少我相信只有 Ruby 能带来。我也学习了一些语言,但目的是储备起来配合 Ruby 解决他不擅长的问题,而不是取代它。
另外的例子,我之前分享过表单引擎 FormCore,能力跟金数据那种商业产品持平,原型版本一个通宵开发完,后来我和 hooopo 做了个带后端存储的商业版本(百万数据表单的过滤聚合查询演示),大概的过程就是吃了个饭聊了方案,然后我花了三个晚上写出来的。 界面虽然丑陋,但是很多公司就靠这种产品就能经营下去了。
(不会写前端就是不能发财的原罪啊!)
如果你不相信 Ruby/Rails 的生产力,这些项目代码都是公开的,可以比比看?
当然有条件的话 虚拟机镜像 或者 Docker 分发还是最靠谱的选择