• ubuntu at 2013年05月01日

    #1 楼 @luikore 吕哥,人家只是不能输入中文,又不是不能读中文。。。 :)

  • @bydmm 插件的 js 有一个自己的运行环境的,不会导致重复加载的 bug

  • XahLee 你们还认识吗? at 2013年04月23日

    我还买过他的 Emacs Tutorial ......

  • 我预约了,没有抢到。。。

    乐视 C1S 看起来不错。。。已经设定好闹钟了。。。。

  • #108 楼 @hysios 一个不能中键复制 (跨程序) 的终端都不是好终端...

  • 作为一个一天都在终端 + 浏览器下度过的纯键盘流的开发者的话,我感觉 Thinkpad+Linux 已经无敌了... 秒杀 Mac...

    ----- Linux 脑残粉

  • 标题讲不清呀我操... at 2013年01月30日

    在大多情况下下面一句话测试不了 create 这个 action 吧,应该会有些其它的情形 (针对非法数据之类的), 所以针对 create 的测试是肯定要再写一次的

    post :create, content: 'Lorem lipsm' 
    

    那么,你喜欢 create 这个 action 有 bug 后,出一堆错误呢?还是只想让测试 create 的测试出错?

  • 这样的 dsl 怎么写? at 2013年01月22日

    然后这样子写就好了

    class Server::Configuration 
      include Qor::Dsl
    
      node :build_after do
        node :my_service
      end
    end
    
  • 这样的 dsl 怎么写? at 2013年01月22日

    用 qor_dsl .... ;-)

    https://github.com/qor/qor_dsl

  • @hoowolf ping

  • 基本步骤就是生成 params -> 加签名 -> 发送请求 -> 处理

    然后再根据自己的需要加上 key 轮换啊,错误处理,一些 helper 之类的就好了

    他官方的文档也蛮好了,可以看一下,不难的

  • 类别可以复写吗? at 2013年01月17日

    肯定可以的。。。测试错了吧

  • 总结教训 at 2013年01月06日

    我以前写过一个 gem 用来做备份服务器的

    https://github.com/jinzhu/backupit

  • 库存不要减

    例如:product.available_quantities 是 10 吧,然后下了 5 个订单,但是没有发货,结果你这边又有补货了,手头有 15 个产品了,怎么办?available_quantities 肯定不能写 15, 要写 available_quantities - 5 个订单的数量,这样子的话维护起来很容易出错,加上取消订单的同时在补货这种情况更会出错

    可以维护双个字段,一个是现有库存,一个是已卖产品数量,在发货的同时,将已卖产品数量 -1, 现有库存 -1

  • 关于 DSL 的问题 at 2012年12月12日

    可以看下我的 slides http://jinzhu.me/2012rubyconf

  • 如何创建远程软链接? at 2012年12月06日

    软链接不能远程,考虑 mount 文件服务器

  • #14 楼 @yzhrain 嗯,是的。。。。缓存更新,失效是个麻烦的事情,不过 qor_cache 就可以帮助你简化这部分,可以参看下 6 楼的那个例子

    这个 Product 的实例方法和 Order 相关的情况下,怎么缓存方法,失效缓存

  • #9 楼 @hooopo 嗯,不过即使 json 可以 fragment 缓存,如果你要缓存 Product.hot_products 的话,view 的缓存如果 html 一份,json 一份。。。还是有点麻烦的。。。。。。而直接缓存 Product.hot_products 的值的话,简单一些

  • #5 楼 @hozaka 如果把结果放实例方法的话,每个请求还会要重新计算的么。。。。其实上面那个例子还好点

    我们实际项目中,有个更重的方法,就是取出所有在当前季节下有库存的产品分类,这个方法横跨四,五张表取数据,计算一下都要近 1s,这样子只能做持久性的缓存比较适合

  • #3 楼 @huacnlee #4 楼 @ywencn

    这样子的话,我要改好多的现有代码,例如把 post.find(1) 改成 post.find_cached(1) ,有个缺点就是,如果我深度依赖这个库的话,可能就被他吊死了,例如 cache_money 不支持 rails 3

    而像我这样子的话,我可以随时删掉这个库,一切还是都正常工作的

    并且,重写方法有一个好处就是在开发中,我只要修改这个 model,所有的缓存都会失效了,因为 rails 会重新加载你更新后的方法

  • @vkill 其实你的程序中,类似这种 find Product.find(1),占用的时间应该是比较少数的,而占用时间最多的是 Product.on_selling, Product.find(1).related_products , Product.find(1).hot_comments 这些方法,qor_cache 要解决的主要问题也是缓存这些执行时间比较久的方法。

    例如下面这个 我随手写的一个方法:

    class Product def recommend_products order_ids = OrderItem.where(:product_id => id).map(&:order_id).uniq product_ids = OrderItem.where(:order_id => order_ids).map(&:product_id) Product.where(:id => product_ids) end end

    这个方法是用来根据一个产品推荐其它产品,他依赖的规则就是其它购买这个产品用户购买的其它产品,这个方法的结果不只是根据 Product 相关,还根据 OrderItem 相关

    如果用 qor_cache 的话,你可以这样写

    cache_key :orders do [Order, OrderItem] end

    cache_key :products do Product end

    scope :product do cache_method :recommend_products, 'orders', 'products' end

    上面的配置文件的意思就是说,我把 recommend_products 这个实例方法给缓存起来了,但是,如果 Product 有任何更新,Order, OrderItem 有任何更新,我都要重新取 recommend_products 的值

  • 两个冒号 at 2012年11月21日

    其实双冒号也可以用来调用方法

    例如:

    class B
      def b
        puts 'hello'
      end
    end
    
    B:: new::b  (去掉new前面的空格)
    B.new.b
    

    效果是等价的

  • "DSl For DSL" slides at 2012年11月20日

    #9 楼 @AReverie

    嗯,用起来挺节省时间的,以前我们一个项目的配置文件用 DSL 实现了差不多两天左右,然后在做完 Qor DSL 后,一个小时内就迁移成基于它的新版本了,相关代码也减少了差不多 10 倍。。。

    讲的时候紧张过度,不善于在好多人面前说话 XD。。。。。。

  • "DSl For DSL" slides at 2012年11月19日

    #6 楼 @huacnlee 嗯。。。这个地址在 slides 里有提过,所以忘记在这里列出来了。。。

  • "DSl For DSL" slides at 2012年11月19日

    #5 楼 @zw963

    估计这里有点小误会了。。。这个 github 地址(https://github.com/qor)是我们项目 Qor 的 Organization

    我个人的 github 地址是: https://github.com/jinzhu

    这个 gem 是 100% 的 Made in China 呢 ;)

  • "DSl For DSL" slides at 2012年11月19日

    #2 楼 @zw963

    第一个问题:以第一个 Gemfile 为例,貌似 slide 没有讲解,如何 load Gemfile 这个配置文件中的内容?就直接开始 Gemfile.find(:gem) 获取结果了??

    如果你的配置的文件名是 Gemfile 的话,或者是 BUNDLER_GEMFILE 的 ENV 值话都会自动加载这个配置文件,就是下面这句话的作用,实现了默认配置文件的功能: default_configs [ENV['BUNDLE_GEMFILE'], 'Gemfile']

    如果没有定义默认配置文件的话也可以通过下面的两种方法加载 Gemfile::Configuration.load('文件名') 或者通过 block Gemfile::Configuration.load do #文件内容 end

    第二个问题:楼主是这个 Gem 的作者吗?

    嗯,是的,最近我在整这方面的事情,希望通过 Qor 平台,把我们开发过程中的一些经验,教训分享一下,并提升下我们的基础库的代码质量。

  • "DSl For DSL" slides at 2012年11月19日

    嗯。。。slides 写的不够好。。。讲的时候也是前后跳着来的。。。

    Qor 只是个通用名称,是很多工具的合集,QorDSl 也是其中的一个小工具,Qor 总的来说就是一个开发平台,会包含一些工具来解决我们日常开发过程中是一些问题:

    例如: 1, 我们平时写的 gem,engine 或者 rails application 会依赖外部 gem,但可能会有一个版本兼容性问题,例如可以用在 rails 3.1 下,但升级 3.2 出错之类的问题,我们写了个 Qor Test 来解决这一系列的问题(还没有完全完成,不过基本成形 https://github.com/qor/qor_test

    2, 我们的一些缓存策略,解决我们缓存过程中遇到的一些问题。现在只有一个简单的 readme,写了一部分代码还没有 push 上去,等完成度再高一些再 push。 https://github.com/qor/qor_cache

    3, 多服务器的监控,进程维护,已经有一个做完的方案了 Nagios.rb,不过现在代码有些私有信息,要整理下才能开源。。。

    4, 一个应用在多服务器上 log,数据分析之类的

    等等其它的常见问题。。。

  • net/http 的超时的问题 at 2012年11月14日

    @jiek85

    通用解决方案

    require 'timeout' timeout(2) { sleep 3 }

  • @saberma shopqi 有个漏洞,只要把“加入购物车”这个按钮的 disable 给去掉,就可以下单买票了。。。库存没有做校验。。。

  • Transaction 就是存款,付款的所有操作的记录