• 如何升级 Ruby 项目 at 2011年12月09日

    加上 data-disable-with 就不会暴机了

  • 那些技术名词的读音问题 at 2011年12月09日

    @andor_chen

    lib 就念 [lib], 缩写和全写读音不一样的 ...

    mongoid 好像中国人都念 [moƞgou aidi:] , 但是外国人都念 ['moƞgoid] ... 你们都被 @flyerhzm 骗了!

    intridea 要问 @lgn21st , 他说了好多次读音不一样的我都弄不懂了...

    • 是 hyphen, 连字符 ...
  • 上次被你们弄成台球 Tuesday 了,损失各种惨重: 小兰丢了一 iphone,准备的可乐全让可乐哥喝了

  • 可以啊... 连 markdown parser 都改掉了也可以...

  • ack 也有点问题的, 它默认不搜索 Gemfile 和 Gemfile.lock, 各种 sass, coffee 也不在搜索列表中, 在 ~/.ackrc 里加上 --text 就可以了.

    ack2 以后就默认带 --text 了.

  • 搜出一堆日志中的记录很不爽的

    git grep 忽略不在版本控制中的文件 (如 log) 和 .git 目录中的文件 ackmate 可以用 ackrc 限制搜索的文件类型

  • 鸭眼网的 git pull 使用法 at 2011年12月03日

    大胡子也说过 pull 一定要 rebase...

    如果 merge 没有 no-ff 而且 merge 时没冲突的话, 就没有 merge commit 了, github network 上就会把两个分支的标签叠在一起, 没有反映平行开发的真实情况 ...

    小心处理的一个好处是清晰的路线图: 同样的 commit 不重复出现, merge 可以看到箭头, 有箭头的地方一定是 merge.

    另一个好处是 github 的 pull request. pull request 界面中, 点 merge 按钮和 merge --no-ff 是等价的, 如果本地 merge --no-ff, 也会自动关闭 github 上的 pull request.

    不小心处理的话, 可能会发生一些奇怪的事情, 例如:

    1. 在路线图中同样的 commit 出现在两个地方, 但是 hash 不一样
    2. merge 的时候同一个冲突很奇怪的要解决很多遍
    3. git blame 发现弄坏代码的人是自己, 但那段其实是另一个人写的, 比窦娥还冤...

    这里面有些和 rebase 的机制有关 (我不敢说全部...). rebase 会将本分支中所有冲突的 commit 都挨个修改一遍, 从冲突点开始, 本地 commit 的 sha1 hash 都变了. 所以只适合在 pull 同一分支时用: 这些 commit 只在本地有一份, 就不会产生 1 和 3 的情况了.

    git 太多内容了, 有时出 rp 问题了还觉得自己完全不懂 git, git 也一直在出新功能, 可以一直学下去...

    附带分享一下我的 ~/.gitconfig , git gl 可以在命令行看到路线图

    [alias]
      s = status
      c = commit
      b = branch
      co = checkout
      d = diff
      lg = log -p
      gl = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr,%an)%Creset' --abbrev-commit --date=relative
      l = shortlog -s --
      merge = merge --no-ff
    

    @Rei 是我没写清楚, 这里假设本地修改都 commit 了而且处于 rebase 中途...

  • textmate 对很多强迫症有良好支持:

    ctrl + ' 切换单双引号 ctrl + : 切换字符串和符号 ctrl + [ 切换花括号和 do block opt + cmd + ] 对齐等号 ...

  • 打开 copy-on-write friendly gc 以后, 很多 gem 占用的内存其实只有一份

  • 然后再改成

    if current_user.respond_to?(message_type)
      @messages = current_user.send message_type
    else
      redirect_to my_message_inbox_path(:inbox_messages)
    end
    
  • 我的强迫症是看见长的代码就一定要改成短的...

    例如看见 :a => 就一定要改成 a:

    我的 case ... when 一定要这样... :

    @messages =\
      case message_type
      when :inbox_messages     then current_user.inbox_messages
      when :sent_messages      then current_user.sent_messages
      when :archived_messages  then current_user.archived_messages
      when :inbox_proposals    then current_user.inbox_proposals
      when :sent_proposals     then current_user.sent_proposals
      when :archived_proposals then current_user.archived_proposals
      else redirect_to my_message_inbox_path(:inbox_messages)
      end
    
  • git grep

  • 用 compass 不要用 bootstrap, 用 css3PIE 让 ie6-8 支持部分 css3

  • unicorn.rb : 为什么既 listen port 又 listen socket, 其中一个可以去掉吧, 和 nginx 的配置对应就可以了

    timeout 设短一点, 假如 6 个人同时点了用 google 登录, 每个进程都在 wait google response, 就要死 120 秒了

  • 其实 task_id 读写是在 field :task_ids, type: Array ,:default => [] 定义的, 这里没必要用 method_missing ...

    其实规则很简单 ... a = x 总是赋值语句而不是方法调用 a.b = x 总是方法调用

  • 不是一定要写 self 的, 例如

    task_ids=([1,2,3])
    
  • Rails 怎么排好 HTML 代码 at 2011年11月25日

    slim 自带 vim 和 emacs 插件 https://github.com/stonean/slim/tree/master/extra

    slim 的 textmate bundle 是 Fred Wu 写的

  • 因为每次请求之前把代码都重载了一遍, 和 rails 相比, sinatra-reloader 只重载变化的文件就非常快... 有个 gem 可以在请求之前重载代码, 可能会快点...

  • query in view 在 asset pipeline 下用户体验很好...

  • 大家用 git rebase 频繁吗? at 2011年11月23日

    这样的 network 最漂亮: 同分支总是 git pull --rebase origin xxx, 合并分支总是 git merge --no-ff xxx 禁止 rebase

    柱子之前还向我推销 grb 的 pull 可以少打 rebase ...

  • 多服务器的话挨个杀了重启也无缝...

    蛋疼的"内存占用也平滑"法: 让发减员信号给老 master, 起进程数稍少的新 master, 起来后杀老 master, 然后发增员信号给新 master

  • 杭州 Ruby Tuesday (11 月 29) at 2011年11月23日

    同求活动