Ruby China
  • 社区
  • 招聘
  • Wiki
  • 酷站
  • Gems
  • 注册
  • 登录
Zete
@luikore
高级会员
第 2880 位会员 / 2012-07-16

55 篇帖子 / 3423 条回帖
245 关注者
6 正在关注
32 收藏
GitHub Public Repos
  • triez 140

    fast, efficient, unicode aware HAT trie with prefix / suffix support for Ruby

  • rsec 78

    Parser / Regexp Combinator For Ruby

  • regexp_optimized_union 11

    Regexp.optimized_union(word_list, regexp_options) generates optimized regexp for matching union o...

  • zscan 9

    Improved string scanner

  • stimulus-bind 9

    Enable simple data binding for stimulusjs

  • vscode-hypertab 3

    The Missing Tab Completion for VS Code

  • property-list 1

    Property list (plist) library with all formats support

  • keycap 1

    1.5u keycap for Kailh low profile switch

  • ffi-clang 0

    Ruby FFI bindings for libclang 3.4+.

  • llvm-node 0

    Node LLVM 4.0+ Bindings

More on GitHub
  • 概况
  • 话题
  • 回帖
  • 收藏
  • 正在关注
  • 关注者
  • bool 可能造成的坑 at 2015年09月09日

    h.has_key? :enabled

  • puts 和 print 打印数组元素的区别? at 2015年09月07日

    是的,puts 会判断参数是否为数组,如果是的话 puts a 相当于 puts *a

    安装 pry-doc, 然后

    show-method $stdout.puts
    

    可以看到其 C 实现

  • 在 Rails 中,数据库查出的数据是怎么组装成对象的? at 2015年09月07日

    各数据库的组装方式不同,代码在它们的 driver 中

  • 征集大家意见,关于回帖用树形方式展示,类似 HackerNews at 2015年09月07日

    挖到一个坟... https://ruby-china.org/topics/9333

  • 大学新生请问 Java 和 iOS 中优先学哪个好一点? at 2015年09月01日

    不用急,学点基础课再做东西,不然做了几年发现基础不好又多花时间回去补

  • RubyConfChina 2015 大会官网,报名网址,博客上线 at 2015年08月28日

    #42 楼 @TingTing 哇这么多人来

  • [已解决] 怎么生成 UUID?用 Gem?用 Rails 自带的?用 Ruby 自带的? at 2015年08月27日

    数据库 pg/mysql/mongodb 都可自己生成 , pg/mongodb 有专门的 uuid 类型,占用存储空间少一半

    但数据库其实往往用的 uuid-ossp, ruby 也有这个 gem, 不需要和数据库通信生成速度自然快很多

    如果要保证全局唯一性,得自己来制定生成规则

  • 为什么都说 Devise 很慢? at 2015年08月27日

    存储或检查密码的瓶颈在 bcrypt, 因为 bcrypt 的 feature 就是慢,快就不安全了... 非密码请求的一大瓶颈在 session 的验证和签名,慢在 OpenSSL 和 Rack 里

    devise 管得太宽 (last_login_at 这些东西其实让专门的用户行为追踪去做更好) 从前到后入侵太严重 (为啥要做一套模板?还要载入我不需要的模板引擎,和我不需要的 i18n 数据) 处理过程太黑箱,调用栈过深,定制只能通读 devise 源码并且复制修改 devise 源码,你还得熟悉 warden, 定制完了要升级 devise 自然兼容很有问题

    我觉得最适合 devise 和 warden 的场景是只有搭 demo

  • 大家来看看这种场景算是因为单线程引起的吗 at 2015年08月25日

    把接口 1 提出一个方法,接口 2 直接调用这个方法,不要自己通过网络请求自己

  • Ruby 方法的执行结果默认为 “最后一条语句的结果”*3 (重要的事情要说三遍!) at 2015年08月25日

    你对自己说三遍好了为什么要对别人说多余的那两遍...

  • 显示转换二进制字符串怎么用前导 0 补齐 at 2015年08月24日
    "abcd123".unpack('B*').first.scan /(.{4})(.{4})/ do |a,b|
      print "#{a} #{b}     "
    end
    
  • Rails 中如何实现登录次数尝试过多锁定十分钟 at 2015年08月24日

    #10 楼 @jasonpu 针对 ip 和 id 可以有不同策略,更高级点的做请求行为聚类...

  • Rails 中如何实现登录次数尝试过多锁定十分钟 at 2015年08月24日

    正确的做法是漏水桶模型 https://en.wikipedia.org/wiki/Leaky_bucket

    nginx 的 http_limit_req 模块就是这么做的 http://nginx.org/en/docs/http/ngx_http_limit_req_module.html 但是不好配置成针对单用户 id 的

    简单的做法可以用 https://github.com/bendiken/rack-throttle 然后设置 client_identifier 不过就不是 leaky bucket 了

    自己实现可以更灵活更核心一点

    每个用户保存两个字段

    bucket:float
    bucket_updated_at:time
    

    每次请求的时候

    user.bucket = user.bucket - (Time.now - user.bucket_updated_at) * leaking_rate + 1
    user.bucket = 0 if user.bucket < 0
    user.bucket_updated_at = Time.now
    

    如果 bucket 满 (大于一个设定值) 就拒绝请求


    如果只是不管时间间隔,三次就锁定,在用户表中加个连续失败计数字段就可以,并且在成功登录时清空

  • 请教: 写 Gem 的时候如何方便调试? at 2015年08月22日

    这个是生成的你不用管它,你写的 bin 文件直接用 require_relative 引用 lib 的文件就可以了

  • 请教: 写 Gem 的时候如何方便调试? at 2015年08月22日

    修改 load path 就可以,不用 install 一次

    例如

    $:.unshift "./lib"
    require 'yourgem'
    

    至于可执行文件的情况,你说的是 extension?

  • 请教更简洁的写法 at 2015年08月21日

    #8 楼 @rei :thumbsup: 用 join 多简单... 数据库也可以根据匹配的 membership 数量多少来选择优化方法

  • 请教更简洁的写法 at 2015年08月21日

    #5 楼 @blacktulip false 和 nil 都是 false-y, 其他都是 true-y

  • 请教更简洁的写法 at 2015年08月21日

    #3 楼 @blacktulip 他的逻辑没检查 nil 就照抄了...

  • 请教更简洁的写法 at 2015年08月21日

    不能再简单了吧... 最多挤成一行但逻辑并没有简化

    另外,可以用 nested select 减少一个查询?

    Circle.in id: (status ? memberships.where(status: status) : memberships).select(:circle_id)
    
  • Rails 会因为 Crystal 而快三倍吗? at 2015年08月21日

    #5 楼 @deathking 是好是坏得看使用者... 如果重载的各个函数定义在了不同的地方会不会坑?

    class A
      def foo x
        x
      end
    end
    
    module B
      def foo x, y=nil
        y
      end
    end
    
    class C < A
      include B
      def foo x
        x
      end
    end
    

    Crystal 应该是限制最宽松的静态语言了... 但要成功,得把 method name resolution 的规则做好,和加上 pattern match

  • Rails 会因为 Crystal 而快三倍吗? at 2015年08月21日

    可是 Ruby 代码一般不是右边那么写的...

    def sum x, y=nil
      x.to_i + y.to_i
    end
    
  • 几道有趣的 leetcode 题目 at 2015年08月19日

    其实 Ruby 的 bignum 实现用到的一个 bitset 的函数 nlz 可以调用 GCC 的 __builtin_clz, 而 __builtin_clz 会转换成处理器的 bsr/clz 指令,用 bitset 做这个运算,就可以少用很多内存,降低程序的 memory bandwidth. 而且 128 bit 的 clz 指令可以把第二次遍历的最后一次运算降低到 1/128

    不过 bignum 并没有暴露 "set nth bit" 的 interface... 就做不到 C 的程度了

    bitset + __builtin_clz:

    #include <stdlib.h>
    #include <memory.h>
    
    typedef unsigned long l;
    int firstMissingPositive(int* nums, int numsSize) {
        if (!numsSize) {
          return 1;
        }
    
        int llen = ((numsSize + sizeof(l) - 1) / sizeof(l));
        int lbits = sizeof(l) * 8;
        l* arr = malloc((llen + 1) * sizeof(l));
    
        // unset first bit
        memset(arr, 0xFF, (llen + 1) * sizeof(l));
        arr[0] &= ~(1UL << (lbits - 1));
    
        for (int i = 0; i < numsSize; i++) {
            if (nums[i] > 0) {
              int j = nums[i] / lbits;
              int k = nums[i] % lbits;
              arr[j] &= ~(1UL << ((lbits - 1) - k));
            }
        }
    
        int res = 0;
        for (int i = 0; i < llen; i++) {
          if (arr[i]) {
            res += __builtin_clzl(arr[i]);
            break;
          } else {
            res += lbits;
          }
        }
        free(arr);
        return res;
    }
    
  • 几道有趣的 leetcode 题目 at 2015年08月19日

    3.2 这样比较简单

    def first_missing_positive(nums)
      b = Array.new nums.size + 1
      b[0] = true
      nums.each do |n|
        b[n] = true if n > 0
      end
      b.index nil or b.size
    end
    

    循环体内尽量少做运算就可以

  • 几道有趣的 leetcode 题目 at 2015年08月19日

    变量名用 snake case 更好些...

  • 用 RC4 加密出现乱码,但可被解密。 at 2015年08月19日

    #10 楼 @killernova [s].pack('H*')

  • 用 RC4 加密出现乱码,但可被解密。 at 2015年08月19日

    #8 楼 @killernova 写错了... 是 unpack

  • 用 RC4 加密出现乱码,但可被解密。 at 2015年08月19日

    #6 楼 @killernova 这个不是 base64, 是 hex 表示,两个十六进制字符表示一个字节 (16*16=256)

    "5\xD564\xCC\rf\xC4\xEE\x9A\xDB\x03".pack('h*')[0]
    
  • 用 RC4 加密出现乱码,但可被解密。 at 2015年08月19日

    不是乱码,程序没问题,想好看点就 base64 呗

    def encrypt64 s
      Base64.encode64 encrypt s
    end
    
    def decrypt64 s
      encrypt Base64.decode64 s
    end
    
  • Crystal:一个类似于 Ruby 语法的编程语言,这个。。。。。。 at 2015年08月18日

    #1 楼 @tini8 没有虚拟机,编译结果和 C/C++ 一样

  • 折腾了两天,终于用 Elasticsearch + elasticsearch-rails 实现了搜索功能 at 2015年08月18日

    #8 楼 @ywjno http://textsearch-ja.projects.pgfoundry.org/textsearch_ja.html ?

  • 上一页
  • 1
  • 2
  • …
  • 13
  • 14
  • 15
  • 16
  • 17
  • …
  • 111
  • 112
  • 下一页
关于 / RubyConf / Ruby 镜像 / RubyGems 镜像 / 活跃会员 / 组织 / API / 贡献者
由众多爱好者共同维护的 Ruby 中文社区,本站使用 Homeland 构建,并采用 Docker 部署。
服务器由 赞助 CDN 由 赞助
iOS 客户端 / Android 客户端 简体中文 / English