• puma 在 MRI 上体现的优势并不明显,ActionCabel/Websocket 的直接支持倒是它的特性优势。在我们自己的应用上对比了 puma 和 unicorn,并发能力差别不是很大。

    其并发优势需要在真正多线程环境上 (JRuby Rubinius) 上才能体现出来。

    题外话:JRuby 作为 ruby 与 java 的胶水也是个不错的方式。我也很好奇有多少人在生产环境上使用 Rubinius.

  • 如果能来深圳设点就好了

  • PHP 是宇宙最好的语言

  • 我会选择 Elixir PhoenixFramework

  • 是 SQL 本身执行慢,把这条 SQL 直接在 psql 中执行看看是否依然这么慢?可以用执行计划查看数据库慢在那一步,按你这种写法是使用全表扫描了。

    ref: http://blog.chinaunix.net/uid-1925643-id-2791346.html

    避免在等号左边用转换函数,例如to_char,to_date等,索引为发挥作用
    
    select count(*) from stock_begin a
    where  to_char(inputdt,'yyyy-mm-dd')=to_char(sysdate,'yyyy-mm-dd') 
    //耗时19m
    
    
    可以优化为一下语句,这样充分用到索引了
    select count(*) from stock_begin a   //耗时0.03m
       where  a.inputdt >=to_date(to_char(sysdate,'yyyy-mm-dd')||' 00:00:00','yyyy-mm-dd hh24:mi:ss') 
             and a.inputdt <=to_date(to_char(sysdate,'yyyy-mm-dd')||' 23:59:59','yyyy-mm-dd hh24:mi:ss')
    
  • 期待 :)

  • Scenario 的行数越多,说明步骤越多,场景越复杂 (或繁琐),应当避免这种情况。

    行数比较多的 Scenario 我找了几个

    Feature: US063 个人中心-旧密码修改密码方式
      作为一名已登录用户,我需要有一个修改密码的接口
      使得我能够重新更换密码
    
      @reset_driver
      Scenario: AC_US063_01 修改密码
        Given 清除数据
        And 我已使用 "[email protected]" 登录
        And 我在 "主页面"
        When 我点击按钮 "左上"
        And 我点击按钮 "设置"
        And 我点击按钮 "账号安全"
        And 我点击按钮 "修改密码"
        Then 我应当到达 "通过密码修改密码界面"
        And 我在 "旧密码" 输入 "old123"
        And 我在 "新密码" 输入 "new123"
        And 我点击按钮 "确定"
        Then 我应当看到浮动提示 "用户密码不匹配"
    
    Feature: US071 更多赛事-类型筛选
      可通过主办方筛选赛事
    
      @reset_driver
      Scenario: AC_US071_01 更多赛事-类型筛选
        Given 创建主办方为wpt的赛事 (创建数据)
          |ac      |clear|host_name|race_name|
          |AC_US071|true |wpt|2017-WPT启航站  |
        When 我点击按钮 "更多赛事"
        And 我应当到达 "更多赛事界面"
        And 我点击按钮 "筛选主办方"
        And 我点击按钮 "第一个主办方"
        And 我点击按钮 "完成筛选主办方"
        Then  "第一个赛事" 可匹配到 "2017-WPT启航站"
    
    
      Scenario: AC_US071_02 更多赛事-类型筛选 + 日期筛选
        Given 创建主办方为wpt的赛事 (创建数据)
          |ac      |clear|host_name|race_name|begin_date|end_date|
          |AC_US071|true |wpt|2017-WPT启航站  |2017-01-01|2111-02-02|
        And 我按下按钮 "回到主页"
        When 我点击按钮 "更多赛事"
        And 我应当到达 "更多赛事界面"
        And 我点击按钮 "筛选主办方"
        And 我点击按钮 "第一个主办方"
        And 我点击按钮 "完成筛选主办方"
        Then  "第一个赛事" 可匹配到 "2017-WPT启航站"
        And 我点击 "日历按钮" 进入 "日历界面"
        And 点击原生button "18"
        And 我点击按钮 "日历按钮"
        Then  "第一个赛事" 可匹配到 "2017.01.01-2111.02.02"
        Then  "第一个赛事" 可匹配到 "2017-WPT启航站"
    

    提交代码库、调试、数据准备这些事是他们做吗?

    产品或 UI 通常并不具备“提交代码库、调试、数据准备”的能力,也不要苛求他们能做到这个。说服他们试着写一些简单用例,是为了让他们更好的体验自己的产品需求设计。并且,实际上,极少产品或 UI 愿意做这个事情。如果能碰到愿意做的产品或 UI,请好好珍惜 😀

    “提交代码库、调试、数据准备”都有开发团队完成。

    这种情况有经历过一次较大的 UI 变动吗?或者持续半年以上?

    一旦 UI 发生变动,不是简单的位置调整,样式调整,而是,交互发生变化的 (如输入空间,按钮,流程等),测试脚本都需要同步更新。交互方式发生变化的原因来自于需求发生变化,实现也就需要跟着变化,那么,测试脚本也就需要跟着调整。

    测试脚本也是需要同步更新维护的,不是一写完,就万事大吉,一成不变。测试脚本的维护成本需要计入需求变更中,产品经理需要背这个锅,这样 Ta 才能意识到变更的成本,就不会乱变。

  • 什么时候添加控制器 at 2017年07月25日

    建议创建新的控制器来处理这个事情。单一职责原则 一个控制器只实现一个目的,不要同时支持太多的功能。

    同时我比较认同 DHH 的观点,避免为控制器添加新的 Action,仅使用 CRUD。当要添加 Action 时,先问问自己,是否可以通过一个新的 controller 来处理。当然,这样做的弊端时 controller 爆炸。

  • 求科普 Rspec 是如何让测试代码快速膨胀的,MiniTest 就不会吗?

  • erlang 与状态机 at 2017年07月23日

    这个问题,据说是 mac 输入法和 chrome 有兼容 bug,而且这个 bug 一年多了两边都不管。就这么挂着。简书的编辑器更严重,搞得每次编辑,都切换到 Safari 才行。

  • 加微信 edwardzhq 聊

  • 周末 meetup 介绍他们给你们

  • 我有两个名全栈 Ruby 且最近在学 Elixir 的小伙伴,需要我推荐吗?

  • 深圳区域,如果你们想玩 Scrum,TDD/BDD/自动化持续集成,我有兴趣。 😄

  • 2013 年的时候,我们当时就用了 Ruby 做斗地主棋牌后端,那时 rails 还是 4.2.x, 用 WebSocketRails 做通讯。 再后来,我们又用 pomelo 重写了后端。

  • 阿里有“云数据库 PostgreSQL 版”么?

  • 支持,去学习。

  • 昨天试了下投稿

  • 坐等。。。😀

  • #13 楼 @oneapm 如果你们能与 NewRelic 一样按 Server 数量计费,我们还是愿意切换回 OneAPM。

  • #7 楼 @jasl 聊过了,价格可以打折,但计费方式无法改变。按照我们的架构方式,一个系统由多个应用集成,总使用费用计算下来,OneAPM 的还是要高一大截。最近上了新三板,估计是有盈利压力,居然取消了免费的基本版。果断卸载,换到 NewRelic.

  • #4 楼 @jasl OneAPM 并没有价格优势,其定价策略是 每应用/每服务器/每月; 假比你有在一台机器上部署两个应用(或者一个应用部署在两个机器),就按 2 个许可/月算;如果有两个应用分别部署到两个机器,则按 4 个许可/月计算。说白了就是 N * M / 月(N 是应用数,M 是部署的机器数)。

    NewRelic 采用按机器数量算,也就是说,你在一台机器上部署多个应用,也是按照 1 许可/月 计算。人性多了。