• 毫无内容。帖子对社区没有意义。

    今天晚上吃猪肉还是羊肉?猪肉的烧法比较多,羊肉没怎么尝试过。

    你如果还有机会来这里的话,不妨自己想想看。

    如果你花 5 秒钟时间写了一个问题发出来,那么管理员用 5 秒钟时间把帖子扔进回收站毫不过分。

  • 现在我们公司就是没有测试代码,所有的修改都是人测。 五六万行的代码,每次完整测试一次都要三周。

    举个刚遇到的问题。 Ticket 1: Windows 服务器用户名不应该接受非法的字符,例如 " ' / \ ? 等等特殊字符。

    于是我加了代码,在 3 个 model 的 5 个判断处加上了 raise error if username =~ /.../.

    Ticket 完成了,QA 输入了一个非法字符,成功拿到了错误提示,搞定。

    真搞定了吗?没有。

    第二周客户拿新版本去用,然后就遇到问题了。 Windows 服务器的用户名可以用反斜线分割域名和账号。 ↑看上面,我们把反斜线禁用了。 客户非常愤怒,让我们赶紧修。 Ticket 2: Windows 服务器用户名处无法输入 域名\用户名

    于是我打开源代码,找到了正则表达式,去掉了反斜线。 随便测了一下,哦可以用了,搞定。

    真搞定了吗?没有。

    过了两天我们一个 Dev 来找我,说你这正则出现了 5 次却只改了 3 个地方啊……

    噫 Ticket 3: ……

  • about LeetCode at 2015年12月12日

    这帖子里我既没有看到代码,也没有看到错误信息,更没有看到题目和思路。

  • 多花那 1 份的时间值在哪里

    不值。但是如果你不写测试,你会多花 10 份时间,更不值。

  • 标准的网吧式办公室(

    A good command of English will be an added advantage

    能请你把这句话写正确吗?

  • 没有横向对比啊,和 nginx+lua+redis 比不知道性能如何。 反正一般应用也不只是读写 redis,还要考虑到业务本身的效率问题。

  • 隔壁 V 站的号被封了 at 2015年12月10日

    #15 楼 @sharking Access Denied Please retry after 29571 seconds. Cost: 9ms

  • #5 楼 @crazyjin 首先,性能是绑定到版本的。 MRI 与 JRuby 性能就不一样,Ruby1.8 与 Ruby2.2 又可能会不一样。

    然后,map 和 map! 之间就差一个 replace 吧,这么说 map! 会慢 0.0000x 秒。

    另外这并不是什么技术问题。 首先这可以通过源代码分析;其次追求性能应该用汇编写。 用 Ruby 写代码,就是为了把这些无所谓的性能问题扔到一边去。

    Premature optimization is the root of all evil.

  • where语句,包括limit order这些语句,都是在「构造查询」而非「查询」。 只有在最后使用的时候才会去真的查询这些数据,比如当你用first to_a each map count的时候,才会真正地向服务器发出请求。

    data = Model.where(...) # SELECT * FROM model WHERE ...
    data = data.order(...)  # SELECT * FROM model WHERE ... ORDER BY ...
    data = data.where(...)  # SELECT * FROM model WHERE ... AND ... ORDER BY ...
    data = data.select(...) # SELECT ... FROM model WHERE ... AND ... ORDER BY ...
    data = data.limit(...)  # SELECT ... FROM model WHERE ... AND ... ORDER BY ... LIMIT ...
    p data                  # <-- 这里才执行了查询
    
  • 然而多表关联查询已经在被淘汰了。 多语句查询在有查询缓存的情况下性能说不定会更高。 思考问题不要只停留在表面现象,要深入下去,探究事物的本质,你才能搞懂为什么这技术或者那技术会流行起来。

    你说的 NodeJS 也是这样。JS 语言框架的优势就在于事件驱动。 所以你会很惊讶地发现一个原生连多线程都不支持的环境竟然能做到这样的性能。 新技术流行起来是有道理的,因为这些新技术解决了某一些问题。 你提到的那些应该算作滥用技术,万事提 NoSQL 或者 NodeJS,没意义。 但是在特定场景上,比如高并发高流量的环境下,这些技术轻松吊打那些你认为成熟稳定的老技术。 再借助前端的 V8 引擎,Node 要演变成一个成熟的高并发环境并不难。 (连最难搞的运行时编译器都有人白送了,还有什么不满意的。)

    最后提醒你一句,生成静态博客最流行的工具之一 jekyll,是基于 ruby 的。

  • 这应该已经不算是新手问题了。得去读 rails 源码才行。

  • 隔壁 V 站的号被封了 at 2015年12月09日

    #13 楼 @ywencn IP 也被封了,慢慢等解封呢。 而且换账号也没什么意思,开小号本来就会被抓。

  • 隔壁 V 站的号被封了 at 2015年12月08日

    #11 楼 @matsuijurina 说得很有道理于是我机智地去改了头像

    #6 楼 @sharking 也说不定是你看到了带着我头像的别人。 之前看到有人直接把我的头像拿去自用的……

  • 真心说一句,测试,请用测试框架,rspec rack-test 走起。

  • 隔壁 V 站的号被封了 at 2015年12月08日

    #6 楼 @sharking 不可能吧,我 ip 都被 ban 了,怎么上…

  • 隔壁 V 站的号被封了 at 2015年12月08日

    前面给 Livid 发了邮件说账号被锁,2 分钟后得到回信问哪个号。 于是我把账号和情况说了一下,2 个小时过去了,杳无音信。

  • 隔壁 V 站的号被封了 at 2015年12月07日

    不过好处是上班效率大大提高了 w

  • #6 楼 @xiaoronglv 然而人家的表不一定会很大。 几千几万的数据做好缓存的话硬搜没问题。

  • 《提问的智慧》 学习一下怎么提问吧。 说了 20 多层楼还没把提问问题的上下文搞清楚,这感觉没法回答了。

  • 很严肃地告诉你,你还是没说清楚你要的是什么。 你说要流,但是却不说流是什么。


    如果你要和 Java 的 API 对接,那么首先 MRI Ruby 就不合适了,因为底层是 C 接口实现。 如果你用 JRuby 的话,我不熟,但是我觉得应该也不能直接在二进制层面上交流。

  • DSL 相对于用类来组织,个人觉得清晰很多。 至于速度,我倒是不知道有什么影响,反正只是测试,又不会影响运行速度,扔在 CI 上跑就好了。 这个我觉得就是个人口味不同吧。 反正做 feature test 我是一直用 rspec 的也就这么用下去了,minitest 没用过。

  • 别的倒是无所谓,主要是我觉得喷子变多了,随便点几个帖子就能发现一群人喷来喷去也是醉了。

  • #2 楼 @dw512 Ruby 里的文件不是文件流么……? 还是不明白你想要什么

  • Ruby 应该不会出现这种问题吧。继承的话可以 super,重写的话可以重命名方法。

  • 你说的文件流,和直接打开文件有什么本质区别?

  • #14 楼 @fsword 是很久很久了。照我说的话,起码 4、5 年前就应该重构了。 而且代码质量很差,一个方法几百行,一个累几千行,而且写得很粗糙。 然而我自己又是个 Entry Level 的职位,经验少,也不可能带着公司团队干活…… 现在有几个方向。一个是拆分业务逻辑,也就是帖子里说到的,改造成 Microservice。 另一种就是先想办法迁移到比较新的平台,然后再逐渐把垃圾代码替换成高质量的。 不管哪个方向都难哪 😢

  • 看介绍很心动,然而坐标不对……

  • #12 楼 @fsword 感谢解答。 因为最近公司里就一直在讨论这个问题。我们的系统非常古老,Rails 1.2,代码庞大杂乱,又想要赶着继续演化增加功能换取投资,所以这方面我也是无比纠结。现在已经到了写一个新的小功能就会引入一堆 bug 的状态,一个 ticket 要做俩星期。然而又没机会重构重写甚至拆分,连测试代码都上不了……(因为系统开发的时候 RSpec 还没发明……然后就完蛋了)

    另外我最近倒是在玩 systemd-nspawn,感觉用系统自带的 container 可能会比 docker 来得更方便一些?

  • 我倒是很想知道,业务逻辑拆分过程中带来的开发进度流失问题怎么解决。

  • #6 楼 @realsatan 这时候就需要 staging server 试运行。