• 马太效应的牺牲品

  • 其实就是污染当前的作用域,

    本来你的作用域里面只有这几行代码,定义了哪些变量,清清楚楚,但是你 load 了以后相当于在这个作用域了多了几行代码,结果就是,你 load 里面定了一个方法,和这个作用域里的方法重名了,导致某些变量和预期不一致,比如本来应该继承来的方法,有可能被 load 进来的方法名给覆盖了

  • 语言只是工具,你随便招一个愿意转的让他转 ruby 就好了,毕竟大部分招 ruby 开发的岗位 其实招的的是并不是 ruby 开发 而是 ruby 使用者

  • https://3cwork.com/discussions/12759 下给了 薪资范围为:8k-15k

  • 知道怎么 自动给 PR 添加标签吗,我看到有自动给 issue 添加 label 的,但是不知道 PR 行不行

  • 写了个 benchmark,如果只判断存在的话 present 最慢。 判断完存在还要做别的事的话,present? 其实是最快的。因为 exists any 需要额外 hit 数据库,所以 present 基本上好用一些,只判断存在性而不做其他操作的情况很少。

    Benchmark.ips do |x|
          x.report("present?") do
            10000.times do
              obj = Employee.where.not(deleted_at: nil)
              obj.present?
            end
          end
          x.report("any?") do
            10000.times do
              obj = Employee.where.not(deleted_at: nil)
              obj.any?
            end
          end
          x.report("exists?") do
            10000.times do
              obj = Employee.where.not(deleted_at: nil)
              obj.exists?
            end
          end
          x.report("present? and pluck id") do
            10000.times do
              obj = Employee.where.not(deleted_at: nil)
              obj.present?
              obj.pluck(:id)
            end
    
          end
          x.report("any? and pluck id") do
            10000.times do
              obj = Employee.where.not(deleted_at: nil)
              obj.any?
              obj.pluck(:id)
            end
          end
          x.report("exists? and pluck id") do
            10000.times do
              obj = Employee.where.not(deleted_at: nil)
              obj.exists?
              obj.pluck(:id)
            end
          end
          x.compare!
        end
    
    

  • 安装 Homeland 启动报错 at 2019年04月07日

    Error starting userland proxy: listen tcp 0.0.0.0:80: bind: address already in use 看样子你本机的 80 端口已经被别的服务给占用了

  • 投了简历 没有回应,感觉像是雾件

  • 😏 ruby 最开始就是 matz 自己玩的语言,被别人拿来做生产工具 他也没想到

  • 那个 是 In deamand 不是需求量大,而是岗位少,做的人更少的必然结果,要说流行,国内 golang 怎么也不可能超过 java php 的

  • 😅 真讨厌,付费 + 邀请好友,我既没有钱,也没有朋友

  • 😅 问一下 ruby 的工作是全栈 还是前后端分离的

  • 😅 我差点以为是招聘帖,白激动了一下午

  • 签合同是和哪个单位签

  • 是否可改造成递归方法 at 2019年02月21日

    😄 假设你有一个 children 方法,可以返回当前节点的所有子节点

    def descendants
          children.each_with_object(children.to_a) {|child, arr|
            arr.concat child.descendants
          }.uniq
        end
    # 假设当前借点是root 调用方法就是 root.descendants,这里返回的对象是AR数组,所以可以继续调用rails的方法
    

    其实这里你没有必要自己做 有一个 gem acts_as_tree 帮你做这个功能

    或者你觉得在内存里面做这个不是很效率,如果你用的是 PGSQL 的话,也可以直接用 WITH RECURSIVE 方法来把查询的事交给数据库去做

    #
    def descendants(*fields)
        subfields = fields.map { |e| "tablename.#{e}" }
    
        ApplicationRecord.connection.execute("
          WITH RECURSIVE descendants(#{fields.join(',')}) AS (
            SELECT #{fields.join(',')} FROM tablename WHERE id = #{id}
            UNION
            SELECT #{subfields.join(',')} FROM tablename JOIN descendants ON tablename.parent_id = descendants.id
          )
          SELECT * FROM descendants;
        ")
      end
    
    # 传入的参数是你需要返回的字段,假设你用parent_id 去表示你的employee 的父子关系 ,这个方法返回的数组,所以不能调用rails的方法
    
  • 请教接口设计规范问题 at 2019年02月18日

    😄 规范主要是为了风格统一,让后来的人能够更轻易的理解代码,所以一套项目里面只要一套规范就好了,

  • 按天领,黑的漂亮啊,难道工资是日结的吗

  • 
    def itoa(num)
        arr = (1...2*num).map do |e|
            i = e > num ? 2 * num - e : e
        end
        arr.shift
        arr.cycle
    
    end
    arrr = itoa 5
    counter = 0
    
    str = "*"
    puts str
    loop do
        counter += 1
        puts str * arrr.next     
        break if counter == 20
    end
    
  • str = '*
    **
    ***
    ****
    *****
    ****
    ***
    **
    *
    '
    puts str
    

    拿去用吧,清晰明了。绝对不存在看不懂的问题

  • to_s = lambda { |x| x + 1}
    b = [1,2,3].map(&to_s)
    p b
    
    
  • 😄 因为 A 开头的单词会排在列表前面

  • 不行,下划线在 ruby 里面代替可被忽略的参数,用来让你的代码更具有可读性 但是你可以

    
    [1,2,3].map {|_| _+1}
    
    [1,2,3].map(&:to_s)
    
  • 不加班的公司配不上我

  • 招聘困难 at 2018年06月27日

    http://www.10tiao.com/html/262/201707/2651375318/1.html 你看看这个,国外的程序员工资做的统计,结果一样是不喜欢跳槽的员工 工资相对于喜欢跳槽的员工的工资的一半

  • Let's GO 语言吧 at 2018年06月26日

    😀 如果能完美的代替 C++ go 肯定能火起来的,可惜 GO 在一些很底层的地方,没有进行足够的抽象。好处是你上手的,你开发的很快。但是当你成为一个老手,你的开发速度和刚开始的时候,生成的还是一样快

  • 招聘困难 at 2018年06月21日

    跳槽加薪快,是因为程序员会成长,工作内容在老板眼里却没有变化。大部分老板觉得不主动给员工加薪是最符合团队利益的,团队里面工资是有一个结构,加薪的话,要维持结构稳定,大多数调整是全部都加。员工不提加薪,老板就是纯赚的。员工主动离开岗位,老板再招一个,那增加的成本也只是单个人的成本而不是整个公司运营的成本

  • 招聘困难 at 2018年06月21日

    招人哪有那么困难,两个月都招不到人,多半是老板仗着自己懂点技术所以看不起面试者的工作内容,心里想法“不就是干个啥啥啥 的怎么还要那么多钱”,结果钱少活多别人才不愿意来啊,愿意来的又通不过你们老板考核,所以才 2 个月都招不到人。 你女朋友也是啥都不懂,别人都不愿意去做,就让你去,这不是为了自己工作顺心,把男友往火坑里推么。我觉得她智商有问题,估计结婚以后也不会少坑你

  • 😀 -1 以后就和下标一样了 读起来更容易懂

  • 拆数组的时候根本没有用到数组元素

    (0..a.size-1).map { |index| a[0,index+1].join("/")}
    
  • 😀 以此贴为例 1713 次阅读,23 次回复。 说明什么?说明根本不存在“一般”找喷点先喷为敬,事实是一般人都是看完默默的撤。沉默的是大多数,回帖的才是特殊情况。

    所谓杠精很多是幸存者偏差导致的的错误认知,大家都懒得理你才是冰冷现实里的残酷真相。
    

    在这样一个比例下面,即使某些人回帖喷楼主,也不能证明他就是杠精。因为作为读者,每个人的视角都不一样的,

    一部红楼梦》,经学家看见''道学家看见淫才子看见缠绵革命家看见排满
    

    很可能别人恰好看到你的错误,而你却因为他没看到你对的地方觉得就觉得他是杠精。

    回帖动机是一个更重要的原因,在网络这个匿名的地方,喷人的代价和现实中相比微乎其微,而捧臭脚的好处也变得微乎其微,你可能觉得为什么网络上会有这么多人和你看法不一致,其实现实中也基本是这个比例,不过当你面对面交流的时候,别人如果不同意你,更多情况的时候倾向于敷衍你