Ruby China
  • Topics
  • 招聘
  • Wiki
  • 酷站
  • Gems
  • Sign Up
  • Sign In
Zete
@luikore
VIP
NO. 2880 / 2012-07-16

55 Topics / 3423 Replies
245 Followers
6 Following
32 Favorites
GitHub Public Repos
  • triez 140

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

  • nyara 82

    Fast and fuzzy ruby web framework + server

  • rsec 78

    Parser / Regexp Combinator For Ruby

  • hat-trie 16

    An efficient trie implementation.

  • regexp_optimized_union 11

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

  • stimulus-bind 9

    Enable simple data binding for stimulusjs

  • zscan 9

    Improved string scanner

  • lzss 6

    LZSS compress algorithm for Ruby

  • bk201 4

    In-memory asm to binary compiler, so you can use asm in ruby !

  • scala-gvim-accessories 4

    scala gvim accessories

More on GitHub
  • Overview
  • Topics
  • Replies
  • Favorites
  • Following
  • Followers
  • bool 可能造成的坑 at September 09, 2015

    h.has_key? :enabled

  • puts 和 print 打印数组元素的区别? at September 07, 2015

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

    安装 pry-doc, 然后

    show-method $stdout.puts
    

    可以看到其 C 实现

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

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

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

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

  • 大学新生请问 Java 和 iOS 中优先学哪个好一点? at September 01, 2015

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

  • RubyConfChina 2015 大会官网,报名网址,博客上线 at August 28, 2015

    #42 楼 @TingTing 哇这么多人来

  • [已解决] 怎么生成 UUID?用 Gem?用 Rails 自带的?用 Ruby 自带的? at August 27, 2015

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

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

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

  • 为什么都说 Devise 很慢? at August 27, 2015

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

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

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

  • 大家来看看这种场景算是因为单线程引起的吗 at August 25, 2015

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

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

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

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

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

  • Rails 中如何实现登录次数尝试过多锁定十分钟 at August 24, 2015

    正确的做法是漏水桶模型 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 August 22, 2015

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

  • 请教: 写 Gem 的时候如何方便调试? at August 22, 2015

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

    例如

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

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

  • 请教更简洁的写法 at August 21, 2015

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

  • 请教更简洁的写法 at August 21, 2015

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

  • 请教更简洁的写法 at August 21, 2015

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

  • 请教更简洁的写法 at August 21, 2015

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

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

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

    #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 August 21, 2015

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

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

    其实 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 August 19, 2015

    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 August 19, 2015

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

  • 用 RC4 加密出现乱码,但可被解密。 at August 19, 2015

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

  • 用 RC4 加密出现乱码,但可被解密。 at August 19, 2015

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

  • 用 RC4 加密出现乱码,但可被解密。 at August 19, 2015

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

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

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

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

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

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

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

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