• Sidekiq 代码中发现的 at 2013年05月18日

    哈哈

  • 服务器自动监控并报警. at 2013年05月17日

    监控宝

  • 好好笑 at 2013年05月02日

    笑了

  • 通常可以要求 CDN 服务商转发客户端 IP 过来,就像@mojidong 说的通过 x-forwarded-for

  • 跟阿里云没关系,检查一下剩余内存够不够

  • 几个月前就要求新审核 APP 必须支持 iPhone5 了

  • 发现酷站是一个鸡肋 at 2013年04月28日

    意义不在于点击,而是让不了解 ruby 的人知道还有那么多网站是基于 ruby 的

  • RubyConfChina 2013 计划 at 2013年04月21日

    支持在北京办一次

  • ios 教程强推斯坦福的公开课,但是要找合适的翻译版本

  • Starlogs at 2013年04月13日

    真帅气

  • 这个问题也能纠结... 开机打开 term 后就不关闭了,然后几周一个月才重启一次电脑

  • #4 楼 @quakewang 太坏了,哈哈

  • 罗恩哈伯特的科幻小说《地球杀场》里,外星人的数学是 11 进制

  • 贴段跟 objc 不一样的

    连续动画

    UIView.animation_chain {
      view.slide(:left, 20)
    }.and_then {
      view.slide(:up, 20)
    }.and_then {
      view.slide(:right, 20)
    }.and_then {
      view.slide(:down, 20)
    }.and_then {
      view.fade_out
    }.start
    

    模型

    class User
      PROPERTIES = [:id, :email, :password, :name,
                    :birthday,  :sex, :location, :memo,
                    :apps, :device_uuid, :authentication_token, :avatar]
    
    
      USER_KEY = "user"
    
    
      PROPERTIES.each do |prop|
        attr_accessor prop
      end
    
    
      def initialize(properties = {})
        properties.each do |key, value|
          if PROPERTIES.member? key.to_sym
            self.send("#{key}=", value)
          end
        end
      end
    
    
      def update_attributes(properties = {})
        properties.each do |key, value|
          if PROPERTIES.member? key.to_sym
            self.send("#{key}=", value)
          end
        end
      end
    
    
      def initWithCoder(decoder)
        self.init
        PROPERTIES.each do |prop|
          saved_value = decoder.decodeObjectForKey(prop.to_s)
          self.send("#{prop}=", saved_value)
        end
        self
      end
    
    
      def encodeWithCoder(encoder)
        PROPERTIES.each do |prop|
          encoder.encodeObject(self.send(prop), forKey: prop.to_s)
        end
      end
    
    
      def save
        defaults = NSUserDefaults.standardUserDefaults
        defaults[USER_KEY] = NSKeyedArchiver.archivedDataWithRootObject(self)
      end
    
    end
    
  • 我觉得以后这里看不到猎头了

  • 摘录一段:

    总结来说,ORM缓存的基本理念是:
    
    
    以减少数据库服务器磁盘IO为最终目的,而不是减少发送到数据库的SQL条数。实际上使用ORM,会显著增加SQL条数,有时候会成倍增加SQL。
    
    
    数据库schema设计的取向是尽量设计 细颗粒度 的表,表和表之间用外键关联,颗粒度越细,缓存对象的单位越小,缓存的应用场景越广泛
    
    
    尽量避免多表关联查询,尽量拆成多个表单独的主键查询,尽量多制造 n + 1 条查询,不要害怕“臭名昭著”的 n + 1 问题,实际上 n + 1 才能有效利用ORM缓存
    
  • 通常的想法是查询多导致效率低,但 robbin 最近写的 blog 谈到这个问题,有不一样的见解 http://robbinfan.com/blog/38/orm-cache-sumup

  • chinacache 市场份额是国内第一

  • #4 楼 @sailtsao 这两周正在试用,我的感觉

    1、性能不提,开发效率比 objc 高

    2、shell 工具没有 rails 那么强大,功能有限,目前只能通过点击页面的 UI 元素来选取对象(不太好选),或使用 AppDelegate 等全局可以读取的东西,也许我使用方法不对?但调试简单代码,尤其是试验一些 api,有 shell 要方便得多

    3、长语句输入其实不是问题,比如 sublime text 也有针对 rubymotion 的代码提示插件,基本够用。rubymotion 的好处是可以简化语法、不用太操心对象类型、不用在 h 和 m 文件里折腾、不考虑 strong、retain、weak 之类的问题。语法精简以后,可读性更好

    4、cocoa 的学习不管是用 objc 还是 rubymotion 都是一样的,只需要简单了解 objc,就可以在两种语言间转换,这个体验就好像 javascript 和 coffeescript。这个转换非常容易,我在拿到 rubymotion 的第一天看了看文档,第二天就开始重写之前的小程序了,没有什么额外的学习成本,目前也没遇到什么 rubymotion 特有的坑

    5、rubymotion 的最有价值特性还是源自 ruby 元编程,靠 DSL 把复杂的操作变得非常简单。目前已经有一些 rubymotion 的 wrapper(http://rubymotion-wrappers.com/) 可以与 objc 对比来看。比如 AFNetworking vs AFMotion,AFMotion 简洁的要死。比如 bubble-wrap 和 sugarcube,把大量常用功能都封装起来。再比如 MotionModel,虽然我还没试用,但是看文档描述,已经可以秒杀 objc 下任何相关项目了

    我认为 rubymotion 很有前景、非常值得一试 IOS 开发火了这么几年,也没一个可以让人快速开发的框架出现,将来很可能会由 rubymotion 实现

  • #31 楼 @ranmocy rvmrc 的 example 文件里的参数,之前看到顺手打开了

  • 我这里 rails console 启动速度从 1.9 的 15 秒提高到 4 秒

  • 已解决:因为手欠多加了在 rvmrc 里把 rvm_configure_flags 打开了,多了几个无效参数,注释掉即可

    export rvm_configure_flags="--with-openssl-dir=$rvm_path/usr --with-readline-dir=$rvm_path/usr"
    

    我也掉坑里了,暂时无解,有人遇到过么? 错误信息: .rvm/log/openssl/configure.log

     ./Configure
    Usage: Configure [no-<cipher> ...] [enable-<cipher> ...] [experimental-<cipher> ...] [-Dxxx] [-lxxx] [-Lxxx] [-fxxx] [-Kxxx] [no-hw-xxx|no-hw] [[no-]threads] [[no-]shared] [[no-]zlib|zlib-dynamic] [no-asm] [no-dso] [no-krb5] [sctp] [386] [--prefix=DIR] [--openssldir=OPENSSLDIR] [--with-xxx[=vvv]] [--test-sanity] os/compiler[:flags]
    

    .rvm/log/openssl/make.log

    cc -I.. -I../.. -I../modes -I../asn1 -I../evp -I../../include  -O   -c -o set_key.o set_key.c
    set_key.c:399:17: error: unsupported inline asm: input with type 'unsigned long' matching output with type 'unsigned int'
                    *(k++)=ROTATE(t2,30)&0xffffffffL;
                           ~~~~~~~^~~~~~
    ./des_locl.h:170:19: note: expanded from macro 'ROTATE'
                                            : "I"(n),"0"(a) \
                                                         ^
    set_key.c:402:17: error: unsupported inline asm: input with type 'unsigned long' matching output with type 'unsigned int'
                    *(k++)=ROTATE(t2,26)&0xffffffffL;
                           ~~~~~~~^~~~~~
    ./des_locl.h:170:19: note: expanded from macro 'ROTATE'
                                            : "I"(n),"0"(a) \
                                                         ^
    2 errors generated.
    make[2]: *** [set_key.o] Error 1
    make[1]: *** [subdirs] Error 1
    make: *** [build_crypto] Error 1
    
  • Espresso Framework at 2013年02月22日

    action 和 controller 的设计看起来很爽

  • devise 正常情况更新资料需要验证当前密码,你的表单里没有密码字段 提交的话需要参考 devise 的 controller 代码自己添一个 controller,并且用 update_without_password 来更新记录

  • #4 楼 @lgn21st #2 楼 @leeboqiang

    克拉玛依人路过,不过目前在北京

  • confluence +1