• #31 楼 @huacnlee 刚打去广发冻结 35+ 换卡工本 15...

  • 已经打电话冻结换卡

  • 我想问信用卡还有分期欠款可以换卡吗?

  • 在 gzruby 官网见到你们的友情链接了:)

  • 楼主有没参加过 gzruby 的聚会?

  • 绝赞啊!!!

  • Rails Assets Pipeline 的价值 at 2013年03月23日

    前端 mvc 比 rails pjax 好

  • Great! See u next Wednesday!

  • 先把订阅数据移到 feedly 了,不明 google 的意途

  • 小更新一下,学徒的名额已招满

  • #16 楼 @xfstart07 朋友你好,我们公司全体这两天都在户外活动,可能同事未有时间回邮件

    你的信息我们已收到,会尽快给你一个答复

  • 如何调试 ActionMailer at 2013年01月23日

    和楼主一样,qq 企业邮发不出去,gmail 则无问题,坑爹啊这是

  • rabl or jbuilder 之类的 json 模板可以解决问题

    查询性能问题可以通过缓存解决

  • #13 楼 @xfstart07 可以,发邮件来跟我们 leader 聊聊嘛!

  • #10 楼 @chankaward 有兴趣的同学请发邮件,多多交流:)

    另公司还有只 93 的漂亮妹:D

  • bootstrap 似乎很简单 at 2013年01月17日

    不用 gem 就用不到很多 customize 的东西

  • 奇怪怎么 markdown 的标题出不来?是屏蔽了吗?

  • #2 楼 @xdite 很想知道你们不用 it 的原因,能分享下你们的测试经验吗?

  • 现在暂时的解决方法

    #90 楼 @yedingding 本来 cherry 的键盘比较大,置在 mac 上很别扭...并且没有白色那手托的话长期用也是不舒服

    #92 楼 @HungYuHei 没数字键没关系的

    刚才本来打算拍萌购的 HHKB pro2,一看他们留言板最近 N 多单都有问题,然后问了家淘宝价钱比较合理的(比萌购贵 200 多)就没有无刻的,唉

  • 不论我把桌面收拾得多好,macbook 放桌上就没法子把机械键盘放上桌,经常要切手换去 trackpad 都很麻烦,不能轻松从键盘转移到鼠标的话长期来说很难用,看来 HHKB 才是解决之道

    P.S 以后买桌子一定要大

  • 即使是默认的 data-confirm 标记的行为,也可以通过重写 js 方法去实现自己的样式,实现自己的 ajax 行为更不在话下

  • #9 楼 @puras html5 的 js 接口可以预览,用 FileReader 就行

  • jcrop

  • 本来静态语言当宝的各种设计模式要解决的问题,在动态语言的鸭子和匿名闭包等特性下都不是问题…

  • dash 是我第一个花钱买的 mac 软件

  • Ruby 2.0 新功能演示 at 2012年11月04日

    翻了下,正则的地方不太清晰望能指正下

    ##1 Refinements 在 module 命名空间里面使用这东西,那么之下定义的方法只有在命名空间内才有效,在命名空间之外会失败

    module NumberQuery
      refine String do #关键字refine
        def number?
          match(/^[1-9][0-9]+$/) ? true : false
        end
      end
    end
    
    begin
      "123".number?
    rescue => e
      p e   #=> #<NoMethodError: undefined method `number?' for "123":String>
    end
    

    在 module 命名空间内则随便用,好处是不会污染到外面已存在的对象

    module NumberQuery
      p "123".number?   #=> true
    end
    

    想在其他已存在的 module 命名空间里面用到的话,可以用 using 关键字

    module MyApp
      using NumberQuery#个人觉得 using这名取得一般...
    
      p "123".number?   #=> true
      p "foo".number?   #=> false
    end
    

    ##2)Keyword Arguments

    def wrap(string, before: "<", after: ">")
      "#{before}#{string}#{after}" # no need to retrieve options from a hash
    end
    
    # optional
    p wrap("foo")                                  #=> "<foo>"
    # one or the other,可以只设其中一个值
    p wrap("foo", before: "#<")                    #=> "#<foo>"
    p wrap("foo", after: "]")                      #=> "<foo]"
    # order not important, 顺序可以随便放
    p wrap("foo", after: "]", before: "[")         #=> "[foo]"
    
    # double splat to capture all keyword arguments, or use as hash as keyword, 两个星号表示可以把整个keyword arguments抓下来
    # arguments
    def capture(**opts)
      opts
    end
    p capture(foo: "bar")                          #=> {:foo=>"bar"} 返回的是hash
    
    # keys must be symbols 传进的key一定要是hash 
    opts = {:before => "(", :after => ")"}
    p wrap("foo", **opts)         #=> "(foo)"  注意这里的**opts, 代表把上面的opts当做keyword arguments
    
    #旧的hash传参数方法继续支持,其实用起来不会有太大的不同
    p wrap("foo", :before => "{", :after => "}")   #=> "{foo}"
    

    ##3)Enumerator lazy 可以遍历无限大集合的新方式

    require "timeout"
    begin
      timeout(1) {[1,2,3].cycle.map {|x| x * 10}} #cycle()函数里面不指定次数的话就是无限次完全遍历当前集合,指定次数就是遍历多少次
    rescue => e
      p e   #=> #<Timeout::Error: execution expired>
    end
    
    p [1,2,3].lazy.cycle.map {|x| x * 10}.take(5).to_a   #=> [10, 20, 30, 10, 20] 本应不断循环,但是用了lazy后会一次扒出来
    #A lazy enumerable will evaluate the entire chain for each element at a time, rather than all elements at each stage of the chain, so the following will output at 1 second intervals. Without #lazy all output would come after 3 seconds
    

    ##4)Enumerator prepend

    module A
      def foo
        "A"
      end
    end
    
    class B
      include A
    
      def foo
        "B"
      end
    end
    
    p B.new.foo   #=> "B"
    

    以前在 class 里面写的同名方法会覆盖掉 module 里面的方法,可以用回 super 去调用复写了的 module 方法 现在用 prepend 的话

    class C
      prepend A
    
      def foo
        "B"
      end
    end
    
    p C.new.foo   #=> "A" 这种情况还是可以用super访问到class里面定义的foo方法,ruby就是要提供更多选择给我们...
    

    ##5) 新的 to_hash 方法 to_h

    p({:foo => 1}.to_h)   #=> {:foo=>1}
    Baz = Struct.new(:foo)
    baz = Baz.new(1)
    p baz.to_h            #=> {:foo=>1}
    

    所以以前的写法

    def foo(opts)
      raise ArgumentError, "opts must be a Hash" unless opts.is_a?(Hash)
      # do stuff with opts
    end
    

    可以变成这样:

    def foo(options)
      if options.respond_to?(:to_h)
        opts = options.to_h
      else
        raise TypeError, "can't convert #{options.inspect} into Hash"
      end
      # do stuff with opts
    end
    

    ##6)symbol array 的方便写法%i()

    p %i{hurray huzzah whoop}   #=> [:hurray, :huzzah, :whoop]
    

    ##7) 正则表达式的引擎转成 Onigmo (?(cond)yes|no) #有点像三目运算符,如果 cond 先 match 的话,就再去 match yes,否则就去 match no

    例子

    regexp = /^([A-Z])?[a-z]+(?(1)[A-Z]|[a-z])$/
    #开头大小写字母都可以,中间要都是小写字母, 然后引用回括号1,前面的大写match到吗?match到再看看是否A-Z结尾,否则是a-z结尾
    #这例子只会检测到前后都是大写或都是小写 并且中间要是小写 的例子
    regexp =~ "foo"   #=> 0  
    regexp =~ "foO"   #=> nil
    regexp =~ "FoO"   #=> 0
    
  • 现在转用差不多的 agnoster,原来显示的东西太长了,改一下 theme 下面的 prompt 就可以有自己想要的效果