KDr2

但知无为为奥妙,岂知有作是根基.

Archive for the ‘development’ Category

Hash#merge也可以接收block

Hash#merge被广泛用来在ruby中模拟keyword arguments,大家已经很熟练了:

  1. def func(given_opt)
  2.    opt={:opt_1=>"v1",:opt_2=>"v2"}
  3.    opt=opt.merge(given_opt)
  4.    #blahblah...
  5. end

这样given_opt就能把opt里面的内容进行扩充或覆盖,rails framework里面那些help方法广泛采用了这个写法。
(more…)

  • 0 Comments
  • Filed under: development
  • 计算 A/B,假设 B 是一个已知的数字,如果 B 是 2 的整数次幂的话,直接移动就可以完成除法,如果不是,按下面的步骤做:

    1. 找 B 最高位, 也就是求最大的 b 令 2^b < B
    2. 令 r = 32 + b
    3. 计算 f = 2^r / B,
      如果 f 的小数部分 < 0.5,将 f 向下取整, A/B 的结果为 ((A+1) * f) >> r
      如果 f 的小数部分 > 0.5,将 f 向上取整, A/B 的结果为 (A * f) >> r
      如果 f 的小数部分 = 0.5, 可能么?

    例子:

    对于x/7
    b = 2
    r = 34
    f = 2^34 / 7 = 2454267026.28
    f 向下取整为 f = 2454267026
    计算整型除法的公式为 x / 7 = (x * 2454267026) >> 34

  • 0 Comments
  • Filed under: development
  • ActiveRecord Tips

    通过through多对多的结构联合查询的时候尽量用中间表的find,然后include其他两个Entity:
    (more…)

  • 0 Comments
  • Filed under: development
  • About ruby’s “open class”

    [本文发出的第二天,我不得不对此文进行修改 :(]
    Ruby的open class算是是他众多优秀特性中最耀眼的一个,active_support就用这个特性玩出了众多花样,但是今天有人提出了这格特性给ruby带来的安全问题,我在同一个名字空间下写一个跟你的类同名的类覆盖或者添加一个方法,然后在你的类加载之后加载(能出现这个过程的情况估计也很少,有这个条件和功力可以直接改你的source了),岂不是很危险,想想有点道理,怎么才能把某些类的open class给禁了呢?
    (more…)

  • 2 Comments
  • Filed under: development
  • Unicode in Ruby

    Ruby的Unicode支持确实是一个问题,尽管$KCODE=’u'可以解决一些字符串打印之类的问题,但是进行Unicode字符串的截取之类稍微复杂点操作就不行了,以前我的办法是,不论什么编码,先用iconv转换成UTF-16,之后截取,再转换回来,能在一定范围内解决一些小问题,现在activerecord (>=1.15.1)提供了 ActiveSupport::Multibyte::Chars类,很好的解决了Unicode的问题,下面是ActiveSupport::Multibyte::Chars用法的一点小例子:
    (more…)

  • 0 Comments
  • Filed under: development
  • Rails REST的一个小Tip

    To make IE(6.0) happy, place “want.html” the first block please…

    1. respond_to do |want|
    2.   want.html{
    3.     render :text=>"html"
    4.     return
    5.   }
    6.   want.xml{
    7.     render :text=>"xml"
    8.     return
    9.   }
    10.   want.js{
    11.     render :text=>"js"
    12.     return
    13.   }
    14. end

    今天把xml放到了第一位,同事用IE(6.0)的返回了xml,应该是因为IE(6.0)请求的时候没有设置accept,这样就会进入第一个block…我手头没IE(6.0),也懒得抓包分析了,记住把html放第一位好了,IE(主要是7.0啦,低版本肯定更没有)的其他版本情况未知。

  • 0 Comments
  • Filed under: development
  • 也许在处理用户密码的时候会用到 :)

    Ruby代码:

    1. require "digest/sha1"
    2.  
    3. def sha1_hexdigest(src)
    4.    Digest::SHA1.hexdigest(src)
    5. end

    Java代码:
    (more…)

  • 1 Comment
  • Filed under: development