Ruby China
  • Topics
  • 招聘
  • Wiki
  • 酷站
  • Gems
  • Sign Up
  • Sign In
cichol
@cichol
Member
NO. 11628 / 2014-02-19

24 Topics / 87 Replies
10 Followers
1 Following
25 Favorites
我也想找工作
GitHub Public Repos
  • associationist 67

    A gem to define virtual associations on Rails models

  • godot-ruby 38

    ruby language binding for godot game engine

  • smart_collection 21

    rails plugin for shopify style smart collection

  • camille 17

    Type-safe data exchange between front-end and Rails

  • tiny-c 7

    tiny c compiler written in ruby

  • toho-like-rb 4

    a danmaku game demo (一个tan幕游戏)

  • camille-tutorial 2

  • tricks 2

    一些好玩的片段

  • mastodon-export-viewer 1

  • mailbreaker_blog 0

More on GitHub
  • Overview
  • Topics
  • Replies
  • Favorites
  • Following
  • Followers
  • 想法:一个更彻底的去中心化社交网络 at May 06, 2020

    区块链只是去中心化的一种方式

  • 想法:一个更彻底的去中心化社交网络 at May 05, 2020

    不知道有没有人能帮我 up 一下😕 https://news.ycombinator.com/item?id=23076877

  • 解决了用户名大小写支持的问题 at March 25, 2020

    @huacnlee 能不能帮我把 id 改成 @cichol ?

    本来我这个长长的是对应 github 上长长的 id,也有大小写变化的,现在 github 改了 id 也不想在这边用那么长的了。

    谢过!

  • 关于数据自有的讨论 at March 16, 2020

    雖然帶頭人很牛逼,但是這個東西要怎麼用還是很迷糊。。

  • 关于数据自有的讨论 at March 08, 2020

    發現目前有唯一一家做了 uid 的是 hubzilla,這裡有一些機制的介紹 https://github.com/pixelfed/pixelfed/issues/216 https://zotlabs.org/help/en/developer/zot_protocol#Technical_Introduction

    依賴於公私鑰對鑒權,但是我感覺這個會很依賴不同節點的節操,看上去不是很靠譜。

  • 关于数据自有的讨论 at March 08, 2020

    因为目前考虑的只是要达到数据自有的目的,就是在想这个中心服务器是不是不可避免的或者有没有其他取代方式,是不是也有 namecoin 类似的区块链方案?

    uid 的形式我倒是觉得没有特别有所谓,邮箱和钱包其实差的就是能不能 revoke,私钥如果丢失了或者被盗用了,就是永远丢失了,或者只能等过期,邮箱对保护用户安全更好。

  • 使用 associationist 玩转 Rails 虚拟关联 at March 07, 2020

    确实不行,应该提示一下的,我建个 issue 先

  • 使用 associationist 玩转 Rails 虚拟关联 at November 12, 2019

    回复晚了不好意思,添加的关联是 post has_many people,没有定义反向关联,应该是不需要你说的 post_id 的,或者可以试试升级一下 gem 的版本再试试,如果有问题可以在 github 上发个 issue 具体看看

  • 使用 associationist 玩转 Rails 虚拟关联 at June 22, 2019

    嗯,在打理一下可以发个 feature request 看看他们喜不喜欢

  • 自己写的 Gem, VueRails,让 Vue 在 Rails 里服务端渲染!并支持 vue-router 和 vuex at May 27, 2019

    👍

  • 使用 associationist 玩转 Rails 虚拟关联 at May 27, 2019

    是的

  • Ruby 2.6 无限 Range at April 26, 2018

    要说的话 ary[1..-1] 其实是个很神奇的思路,直接把 begin 和 end 拿来用了,1..-1 和 1..Infinity 看上去是完全不等价的两个东西……

  • 在 Rails 中使用 React 并实现 SSR 的一种实践 at April 26, 2018

    非常赞,ssr 和 webpacker 结合在我看来是完美的方案,可以避开前端各种状态管理,路由的坑。之前看 webpacker 的 react ssr 好像有人在 WIP,原来 react-rails 就已经支持了。

  • [已截止][Rust 周边] 胸章预订结束 at April 25, 2018

    cichol#live.cn 两个 古银 古金

  • 在多域名系统中同步 session - 坑与解决方案 at March 27, 2018

    这样是可解的,就是得用户打密码登录,另外苹果的 ITP 把 google sign in 都搞的不能用了。。https://github.com/google/google-api-javascript-client/issues/342

  • 分享一个新做的 gem:smart_collection at January 10, 2018

    是的,用缓存的话等过期就好,读取和 preload 会更新缓存,不用手动

  • 做了个使用前缀树的 router,可供 mruby 使用 at October 11, 2017

    这些是可以的:

    router = Mrouter.new
    router.add_route '(/page/:page)(/per_page/:per_page)', '233'
    
    p router.match '' # => {:tag=>"233"}
    p router.match '/page' # => false
    p router.match '/page/12' # => {:page=>"12", :tag=>"233"}
    p router.match '/per_page/12' # => {:per_page=>"12", :tag=>"233"}
    p router.match '/page/12/per_page/34' # => {:page=>"12", :per_page=>"34", :tag=>"233"}
    

    我在遇到 ( 的时候直接让 trie 分叉了,然后匹配的时候是深度优先匹的。这样做可能 trie 重复的部分多一点,不过匹配是没问题的。

  • 做了个使用前缀树的 router,可供 mruby 使用 at October 11, 2017

    是指匹配不到 /per_page/34/page/12?
    这个可能得反过来加个定义,毕竟定义本身也没表达出可以反过来,别的应该还好吧

  • 做了个使用前缀树的 router,可供 mruby 使用 at October 11, 2017

    是的,不得不用啊。。手机和 pc 一定要相同的 url,就是读 session 也得用 mruby 了。。感觉很头疼

  • Ruby marshal dump 的东西自己也不认得 at October 11, 2015

    #2 楼 @windwiny 看来确实是,以前 binary 和普通读混用没注意这点。。 啊,兜了好大的圈子

  • Ruby marshal dump 的东西自己也不认得 at October 11, 2015

    好吧,我解决了

    def process obj
      case obj
      when String
        obj.chars.map{|x| x.ord}.join('.')
      when Array
        obj.map{|x| process x}
      when Hash
        new_hash = {}
        obj.each do |k,v|
          new_hash[process k] = process v
        end
        new_hash
      else obj
      end
    end
    
    def recover obj
      case obj
      when String
        obj.split('.').map{|x| x.to_i.chr(Encoding.find('utf-8'))}.join
      when Array
        obj.map{|x| recover x}
      when Hash
        new_hash = {}
        obj.each do |k,v|
          new_hash[recover k] = recover v
        end
        new_hash
      else obj
      end
    end
    

    dump 之前 process load 之后 recover

    本质是把字符串改成数字的字符串,虽然应该也会有隐患,但是目前看来还没有问题

    这 BUG 真是太坑爹,5 个小时就这么没了

  • Ruby 数组只是一种方法? at September 19, 2015

    数组还真是一个方法

    array = lambda{|x| x+1}
    p array[0]  #=> 1
    

    以上是声明一个自然数数组

  • 大家觉得把传统分页去掉如何 at September 17, 2015

    #8 楼 @coooldfarmer 推特才叫恶心。。根本没有翻页

  • 用 WebSocket 把前端的 View Model 双向绑定到后端,将 Web App 做成持久会话如何? at September 11, 2015

    #3 楼 @crazyjin 还真不知道,phoneix 我以为和 rails 差不多的,不过 volt 已经很棒了

  • 用 WebSocket 把前端的 View Model 双向绑定到后端,将 Web App 做成持久会话如何? at September 09, 2015

    #1 楼 @rei /.\

  • 想了解下行业内的一些情况。 at September 08, 2015

    我觉得我还是很能理解 lz 的感受的,虽然理解并没有什么用

    不过拼了却没什么回报的例子是比比皆是的,一神带四腿翻不了盘就是翻不了盘,单纯是运气不好也不奇怪,毕竟人的一生是抗争的一生

  • 如何获取 local variable 的名字 at September 03, 2015

    因为 Ruby 没办法监听 local_variable 的赋值行为,所以原则上是无解的

    但是有一些黑科技。。 打个比方你可以分析源代码里对这个函数的调用,把参数拿出来

    var1 = 1
    
    def func(params)
      line_num = caller[0].match(/#{$0}:(\d+):/)[1].to_i
      param_name = File.open($0).readlines[line_num-1].match(/func\((.+)\)/)[1]
    end
    
    p func(var1)  # => "var1"
    

    大概就是这样,其实取参数用这个正则肯定不行。。但是我不会写正则,就糊弄一下


    还有一种方法是看参数的 object_id 或地址,因为 Ruby 传参都是传引用 比对一下 local_variables 的 object_id 就好了,但是在方法内拿外面的 binding 是很麻烦的。。而且有同值不同变量名的话也会 GG

    也举一个例子

    var1 = 1
    
    $bindings = {}
    set_trace_func proc{|*e| $bindings[e[2]] = e[4] if e[0] == "line"}
    
    def func(params)
      line_num = caller[0].match(/#{$0}:(\d+):/)[1].to_i
      params_binding = $bindings[line_num]
      param_name = params_binding.eval("local_variables").first{|x| params_binding.eval("#{x}.object_id") == params.object_id }
    end
    
    p func(var1)  # => :var1
    

    不过这种不可控的 set_trace_func 会严重拖慢程序的执行

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

    #21 楼 @douxiance

    require 'ripper'
    require 'pp'
    
    def test=(n)
      2
    end
    
    code1 = "self.test=1"
    code2 = "self.send(:test=, 1)"
    
    p eval code1 # =是assign,返回值永远是用于assign的值
    p eval code2 # send是方法调用,调用test=方法,返回值就是这个方法的返回值
    
    # 两段代码解析后的语法树,详见《Ruby Under A Microscope》
    pp Ripper.sexp(code1)
    pp Ripper.sexp(code2)
    
  • Ruby 方法的执行结果默认为 “最后一条语句的结果”*3 (重要的事情要说三遍!) at August 27, 2015

    #3 楼 @martin91 印象中 send 是不走 assign 的,assign 的返回值必定是 assign 的值 但 send 的返回值是那个函数的返回值

  • Ruby 的 private method 以"="结尾时的疑惑 at August 15, 2015

    #2 楼 @ziu =属于 assign,确实是特殊的,和普通私有方法不同

    require 'ripper'
    require 'pp'
    
    def test= n
      puts 1
    end
    
    def test n
      puts 2
    end
    
    private :test=, :test
    
    code =<<EOF
    self.test= 12
    self.test 15
    EOF
    
    pp Ripper::sexp(code)
    
    [:program,
     [[:assign,
       [:field,
        [:var_ref, [:@kw, "self", [1, 0]]],
        :".",
        [:@ident, "test", [1, 5]]],
       [:@int, "12", [1, 11]]],
      [:command_call,
       [:var_ref, [:@kw, "self", [2, 0]]],
       :".",
       [:@ident, "test", [2, 5]],
       [:args_add_block, [[:@int, "15", [2, 10]]], false]]]]
    

    test= 解析出来的操作是把参数 assign 给对象的属性

    私有方法为=结尾,如果不显式调用,就和局部变量赋值产生歧义,所以只有对象的属性能自定义 assign 的方法

    关于 ruby 比较底层的机制,推荐书籍 Ruby Under A Microscope,很快有中文版【貌似

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