• Erlang 真的很好! at 2014年09月14日

    11 年的时候加了一个 erlang 的邮件列表,joe 大 经常在里面回答各类问题,让人感动,joe 大即是一位学富五车的学者,同时也是一位非常牛逼的程序员,他希望自己设计实现的 erlang 能被更多的人使用,这种心态就和我们大部分的程序员一样,希望自己开发的产品能被广大的人民群众使用,我读过两本 erlang 的书,<>(封面是只袋鼠) 和 <> http://learnyousomeerlang.com, 读的很吃力,一是因为我是边敲代码边读,二是因为 erlang 确实和以前学的 c, java, ruby 等语言有很大的不同对我来说有种颠覆的感觉,所以现在推荐由 joe 大 亲自写的书 <>,已经有第二版了,读这本书时你可以感觉到 joe 大 就好像站在你的面前教你写 erlang 一样,想不会都难,不管怎样学学 erlang 开阔下视野,拓展下思维都是件很有意义的事情。

  • 说说 Rails 的套娃缓存机制 at 2014年09月12日

    来自实战经验,接地气,图文并茂,逻辑清晰,叙事有条不紊,可以看出作者写这篇博文非常用心,心态非常平和,点赞收藏。

  • 真实的困难都隐藏在具体的实现细节中,用 sinatra 的话,你会在下面的地方觉得难受,

    1. 刚开始创建一个新项目时

    2. 构建项目的结构

    3. 构建标准的开发,测试,生产三套环境

    4. 数据库连接

    5. gem 包管理

    6. 创建模型,加载模型,或者加载其他任何你新创建的文件

    7. database migration

    8. 管理 rake 任务

    9. 管理定时任务

    10. 写测试

    11. 问题求助,遇到问题得不到充分的帮助

    12. 后台管理

    13. 日志

    14. 想要一个类似 rails console 的 console

    15. 部署

    16. 编辑器

    17. 后期维护

    18. 项目交接

  • 佩服楼主的勇气和决心

  • rails respond_to 的问题 at 2014年04月24日

    #8 楼 @luliangshu 应该不用开 setInterval,iframe 有个 load 事件,你试试监听这个事件就行了

    $('#my-iframe').load(fucntion(){
       // 在这里获取你要的内容
    })
    
  • rails respond_to 的问题 at 2014年04月24日

    #6 楼 @luliangshu 提交成功后,rails 返回的内容会跑到 iframe 中,你用 js 从 iframe 中把你需要的内容拿出来放到前台显示出来就可以了。

  • rails respond_to 的问题 at 2014年04月23日

    #4 楼 @luliangshu 这个和是否使用了 iframe 没有关系,使用 iframe 的目的是为了在 form 表单提交后,把 form 表单的 target 属性指向 iframe,这样避免了页面刷新,看起来像 ajax,其实还是普通的 form 表单提交。而你要使用 form 表单上传文件,这又必须依赖普通的 form 表单提交。浏览器不支持 form 的 accept 属性,所以你应该别用 format.js 了,用默认的 format.html 就行了

  • rails respond_to 的问题 at 2014年04月23日

    你要设置对应的请求头才行,比如curl --header "Accept: application/javascript" url这样 rails 才能知道你要的格式是 javascript

  • rake assets:precompile 报错 at 2014年04月23日

    Asset logical path has no extension: pa 这句话的意思是 pa 这个文件在资源的编译路径中,但是 pa 没有扩展名,所以产生了异常。 rails 里 sprockets 默认会把所有的包含在 Asset logical path 中的非 JS 或 CSS 文件编译,所以你到 app/assets/, lib/assets/, vendor/assets下找找看有没有pa这个文件,有的话给它加个扩展名,或者干脆把这个文件移除。

  • assets pipeline at 2014年04月17日

    感觉你的这个配置写的有点不好,

    config.assets.precompile += %w(projects.js projects.css jquery.min.js jquery.fileupload.js 
                                     jquery.iframe-transport.js jquery.ui.widget.js)
    

    jquery.min.js jquery.fileupload.js jquery.iframe-transport.js jquery.ui.widget.js 这些资源不应该单独编译的,应该是在你的 params[:controller] 或者 application.js 文件里包含 (require),然后你只需要编译 params[:controller] 这个资源文件,这样的话就能把 jquery.min.js jquery.fileupload.js jquery.iframe-transport.js jquery.ui.widget.js 合并到 params[:controller] 文件里了,否则 jquery.min.js,jquery.fileupload.js 等等这些文件你还是要单独产生 http 请求的。

  • 翻译的很好

  • 支持开源 [email protected]

  • @ytwman 你看下 development.rb 这个文件,如果 config.assets.debug = true,那么改成 config.assets.debug = false,这个改动能够减少大量的 http request

  • 一步一步 DSL at 2014年01月06日

    #1 楼 @bhuztez 你说的这句话肯定是正确的,DSL 用滥的话害处还非常大,但是还有用处的,至少它会督促我们这些程序员去使用一些比较优雅的方法去解决问题,提醒我们使用合适的变量名,方法名,类名等,至少这些名字要与我们要解决的问题域相融合。比如 sinatra,

    get '/' do
      'Hello world!'
    end
    

    它就用了 get 方法,而不是随便起名字:got, gain, obtain 等虽然这些单词都有获得的意思,这里就有一种 DSL 的思想。

  • #4 楼 @xlaok web 可用性还好吧,至少能够跨平台,Alfred 只支持 mac os,并且还需要掏钱买 powerpack。

  • #3 楼 @ywjno 嗯 github 对 api 的调用确实有限制,http://developer.github.com/v3/#rate-limiting,这个我还没有考虑过,如果你的应用确实需要大量调用 api 时,可以和 github 联系叫他们帮你提高调用限制

  • #1 楼 @nightire 哈哈我也是当作备份

  • respond_to 方法求解 at 2013年08月31日

    @francistm render json: @person 应该是相当于 render json: @person.to_json

  • @hooopo 有 star 这个项目,但是一直没有用。我接手过的一些老项目 (没有任何的独立的数据库文档,也没有使用类似 schema_comments 的 gem),就是把 comment 写在 migration 文件里,所以为了能从这些老项目中提取出一些文档,我就写了这样一个小工具

  • #38 楼 @zputee 呵呵,不玩了,实际开发一般用不了这些东西,代码不能写的让别人看不懂

  • #36 楼 @zputee 这个例子不错,如果这样改下效果可能更好些,可以排除 def 的干扰

      @name = "li 4"
      cc.instance_eval{
        p @name          #输出zhong 3
      }
    
     p = Proc.new { @name }
    
     puts p.call                        #输出的是 li 4
    
     cc.instance_eval &p           # 输出的是zhong 3,把proc的闭包特性直接无视了
    
    
    class C
      def initialize
        @name = "zhong 3"
      end
    
      def hi(p)
         puts p.call
      end
    
       def hi2(&p)
          puts p.call
       end
    
    end
    
    C.new.hi(p)                 # 此时不能简单的认为proc会嵌入到hi方法中,实际输出的是 li 4
                                     # 如果proc在call的时候能嵌入到hi方法中,那么输出的应该是 zhong 3
    
    C.new.hi2 do
       @name                    # 输出的是li 4
    end
    
    

    instance_eval 是一个比较特殊的方法,感觉它可以无视 proc 的闭包性 在 ruby1.9 中,instance_eval 不能挂 lambda 转换过来的 proc,估计 lambda 的闭包性是强制的,无法无视了哈哈

  • #33 楼 @zputee 呵呵,你这个例子不是很好,%{p name}是一个字符串,类似于

    def m(mimic) 
      name="zhang 3"
      eval(mimic) 
    end 
    name = "li 4"
    m "p name"
    

    这等同于

    def m
      name = "zhang 3"
      p name
    end
    name = "li 4"
    m
    

    这明摆着会输出 "zhang 3"。

  • #27 楼 @ericguo 呵呵,用 Proc 还是 lambda 与起什么名没有关系,你创建一个 BlockValidator 的实例对象试试。贴上你的代码

  • #23 楼 @ericguo 它的例子里确实是用 Proc,可能看起来更加面向对象,不过这些例子用 lambda 也没有问题,还是看编程习惯吧,尽量做到风格统一

  • #6 楼 @hpyhacking 帖子的很多内容在《Ruby 编程语言》都有讲到,我算是做了一次搬运工,然后做了些试验

  • #12 楼 @wxianfeng 好啊,我也是这么想的

  • #1 楼 @iBachue Proc 中的 ruturn 之所以如此表现是为了和 block 保持一致,所以我们平时写代码不要去碰 Proc 这颗雷,因为它形式上像 lambda,里子却是 block

  • #2 楼 @siriuszhuang 由 lz 的那个比如,我猜测 lz 可能还没有在实际的生产活动中遇到由并发引起的问题,lz 可能是出于职业习惯在预估一些可能由并发引起的问题。 对于 lz 提到的 16 个 workers 和那个比如,我们可以想像一下银行的存款业务。 比如我今天打算去工行存 5 毛钱,工行丫的给我开了 16 个窗口,结果一并发,工行给我同时存了两份 5 毛,当然这种事情是不会发生的,要不然我就不会只存 5 毛钱了。其实你的 master 启再多的 workers 也没有关系,因为一个用户创建城市的请求最终会分发到某一个 worker 去完成的,而不是同时交给多个 worker 去做的。 对于并发可能引起的问题,lz 得先问问自己,我的应用里是否有多个消费者同时竞争同一个资源. 其实 lz 举的例子里是一个用户创建一个城市,没有竞争的情况出现,所以在这个例子里是不用担心并发的问题。