• 遇到的 ruby 问题总结 at 2017年10月18日

    不要觉得“改个名字就可以避免被当作是泄题的纠纷”了。泄题就是泄题。

    假如我为了避免自己设计的面试题被泄漏,在面试开始时就签保密协议,这会向面试人传达出一种“这家公司默认不怎么信任我”的潜台词,使面试人心理紧张,容易造成发挥失常。所以在:

    • 默认面试人会泄题于是要签协议施压
    • 默认面试人会在道义上坚持不泄题,不签协议可以使面试过程不那么紧张

    两者间取舍,我是会选后者的。但话又说回来,假如面试一次就泄一次题,时间久了我也会觉得“既然面试过的都不值得信任那么还是签保密协议吧”。

    类似的话题还包括上班要不要打卡,绩效考核要不要做(以及该如何做),代码上线是要由开发者自己灵活掌控还是搞层层验收签字制度(或者怎样找到折中的灵活又安全的制度)。如果合作中的双方能默认互相信任,解决问题的效率能高很多。

  • 没有完美的最佳,只有满足限制条件下的最合适。

    如果换我来做这个需求,就会直接把生成的结果写入到新文件了事。上传的旧文件扔在那不管,直到硬盘空间吃紧了再考虑清理。

  • “生成临时文件”这件事目前有什么问题么?性能?还是硬盘空间?

  • 简单来说,不建议这么做。

    展开来说,把新生成的文件改名覆盖旧文件,这个操作按照 man 3 rename 里的描述是可以做到原子化的。这很可能比你自己实现的原子化方案要靠谱。

    具体来说,因为我不知道你要这么做的目的是什么,这个帖子很可能是个 XY Problem:https://ruby-china.org/topics/7154

  • 简单来说,不建议这么做。

    详细来说,因为我不知道 LZ 原本面对的问题具体是怎样的,所以不便直接给出答案。这很有可能是个 XY Problem:https://ruby-china.org/topics/7154

  • Here is what I think:

    • This is practically a job ad posted in a wrong category with a nonsensical title.
    • It's not even a proper job ad. You probably haven't read the rules at all: https://ruby-china.org/topics/25579
    • The English... well actually it smells more like Chinglish to me. You probably need to put some work into it if you really want to keep your job as an international recruiter (assuming you are, that is). 或者如果你懂中文,就直接说中文好了。Ruby China 上的人应该都懂中文的。
  • 这种标题太容易给人造成一种“只有大神才有资格回答问题”的错觉。然而实际上问出来的问题水平实在太低,根本不需要大神来回答。

    关于 : 语法的问题,论坛第一页就有入门级的资料可以看:https://ruby-china.org/topics/34066 form_for 的用法在 Rails API 文档里查:http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-form_for

  • 这么说吧,由业务需求带来的软件复杂度没法消除,只能尝试管理起来。不同的功能向不同的客户可见,这件事肯定是要在某个层面上解决。要么在代码库层面上做拆分,要么在运行时判断。如果你不想在代码里留十几个开关,而是选择用分支 / 分仓库方案,那么就意味着会有十几个分支 / 仓库需要提交代码。而且每个分支至少要有一个部署实例,每个部署实例都可能需要运维方面的开销。如果你的团队能 handle 得了这些问题,当然也可以。

    如果你想找更新颖的,更趋近完美的解决方案,那我实在是帮不上忙了。我自身的经验是在功能开关的应用上尝到过甜头,所以会有这方面的偏好。

    不过话又说回来,如果你的业务真的是每个客户都有定制的且不能相容的功能需求,那么你的业务会从 SaaS 方向逐渐向外包方向倾斜。这个事我只能说:但愿你从客户手里拿到的钱能满足得了为了应对这样的业务扩展所带来的复杂度而被迫增加的人力成本(这句话好长)。

  • Python 标准库里的 sqlite3 底层实现是直接动态加载 libsqlite3.so 的,所以底层逻辑是由 sqlite 决定的。

    那么这样直接去读 sqlite 的文档,应该就有答案: https://sqlite.org/search?s=d&q=hot+journal

  • 因为在 Ruby 中数组是可变对象,而且赋值 / 作为参数传递时,传递的都是引用。 关于 Ruby 的引用: https://en.wikibooks.org/wiki/Ruby_Programming/Introduction_to_objects

    再就是 Array.new 方法的不同用法的语义,官方文档也是有介绍的: http://ruby-doc.org/core-2.4.1/Array.html#method-c-new