• 其实补基础有个好办法呀。看 @happypeter 的视频

  • 杭州 Ruby Tuesday at 2012年10月29日

    我也加入了。

    好吧。我承认,我是来灌水的。不过没办法,偶像的力量呀。

  • 楼主的代码真蛋疼,问问题以前,先把你的代码格式化一下呀。让大家好看点。

    我不知道你在那里看到代码,很明显执行结果不是你说的那样,因为对 10 个数字迭代,太快了,Thread.pass 来不及执行完毕,迭代器已经返回。所以输出结果在我的电脑上总是: 01234567890123456789

    改成下面这样才是你想要的结果:

    thread1 = Thread.new{ 10.times {|i| print i;$stdout.flush; sleep(0.1); Thread.pass }}
    thread2 = Thread.new{ 10.times {|i| print i;$stdout.flush; sleep(0.1); Thread.pass }}
    thread1.join
    thread2.join
    # => 112233445566778899
    
  • 一定要看,上上次 Ruby Tuesday 的时候,Daniel 已经介绍过啦。

  • [ Ruby on Rails ] 重構經驗談 at 2012年10月24日

    打不开,赞美我们伟大的 DANG, 早死早超生吧~

  • 楼主辛苦了~

  • 看到这个用法的确有点吃惊...

    • 叫做 splat 操作符,在定义一个方法形参的情景,它明确的告诉解释器,我接受任意多个参数, 并且将这些参数作为一个数组, 传入方法定义内'. 既然 * 后面没有提供一个明确的数组名称, 那就是作为空名称的数组` 被传入,这也就意味着,你输入任何参数,无论多少个,都作为一个没名字的数组,其实就是忽略所有的参数

    可惜不是所有的字符都可以这样,我刚刚试了下

    def hello(&)         # => 期望这个方法无法接受 任何代码块.
     end
    

    不过不成功,因为语法本身就是错误的。: )

  • Rails3.2.8 Route 源码分析 at 2012年10月22日

    #1 楼 @xiaolai

    长见识了,在咱社区,我也常常有这种感觉 ...

  • 首先可以肯定,性能的损失来自于调用 define_method 方法 block, 如果没有这个 block 的调用,它们所花的时间一定是一样的。

    一个是关键字直接定义方法,方法名作为原义被直接定义。 另一个是方法调用,而且需要通过符号获取方法名,最后内部还要完成类似于 使用关键字定义一个方法 的过程,多了一道流程,速度慢一些,但是允许通过符号动态的生成方法名称,有得有失。

  • #11 楼 @fsword

    对,其实我想讲的就是:无论做什么事,方法很重要。在计算机领域下面,这个所谓的方法,是需要积累的,而且可能给你带来的好处不是那么太明显的。只有真正做事的时候,才能看出高下。

    总的来说,计算机领域有很多 放之四海而皆准 的 事情,或者说惯例,只有首先把这些这些基础打好,再做 具体的不知道对错的事, 才可能以最小的代价来判断现在再做的事是否是正确的。

    就像我的签名里写的:当好习惯成为一个习惯,那才是个好习惯!

  • 我是属于那种 有点极端的 首先要 正确的做事 那种人。

    不过目前为止,我并没有太大的工作压力,如果真在那种氛围下,也许我会首先做正确的事,然后稍后一定会再补上正确的方法,我绝对不会因为要做正确的事,而反复的,一而再再而三的,使用不正确的方式做事,那对我来说是不可忍受的,总的来说,正确的方法做事是非常有 Feeling 的,错误的方法做事,虽然可能会有一些短期效益,但是最终一定会得不偿失。

    所以,为了养成正确做事的习惯,我宁可在金钱上,或时间上暂时牺牲,来换取未来最高效率,最短时间最好正确的事。这其实有点像开发软件的时候,存在 bug, 这个 bug 越晚发现,修复起来肯定会越困难,后期所做的修补工作所花费的工作,会几何级的增长,总体上看,绝对是得不偿失的。

  • DHH 的公开课 at 2012年10月22日

    知道 DHH 靠什么了解并学习 Ruby , 并最终写出 Rails 吗??

    好吧。算是我做广告吧。`The Ruby way', 这本书第二版,DHH 和 Matz 写的序,DHH 自己说的。

    这里有我制作的 英文 PDF 版。http://ruby-china.org/topics/6061

  • #9 楼 @camel

    那是自然啦。一定要去滴~

    有什么需要帮忙,社区通知我或者发邮件即可,急事儿打我电话也行。

  • #2 楼 @knwang

    哈,换头像了,好象是和 Matz 在一起吧?

    #3 楼 @reus

    其实参数也封装成方法才好,除了构造函数必须的实例变量,全是小方法,方便写测试,也便于重构。

  • @fsword , 你有没有那些温度的文件呢?

    有的话,打包给我发一份。[email protected], 我也好实际测试下效果如何。

  • 我也来个 OO 版,甚至有点为了过分追求 OO 以及软件的重构而 OO.

    不过代码还算清晰,基本上都是不可再分的小方法,也没有太多的参数传递,在几个月后再看代码,比单行脚本易懂一些。

    (好吧,我承认,使用单行的方式来解决这么复杂的应用,我还真写不出来呢)

    class City
      def initialize(city_path)
        @city_path = city_path
      end
    
      def average_arrays
        month_days_hash.map {|month, days| [name, month, Parser.parse_temperature(days)/days.length] }
      end
    
      def month_days_hash
        date_files.group_by do |date_file|
          File.basename(date_file, ".txt").slice(/(\d{4}-\d{2})-\d{2}/, 1)
        end
      end
    
      def date_files
        Dir["#{@city_path}????-??-??.txt"]
      end
    
      def name
        File.basename(@city_path)
      end
    
      class Parser
    
        def self.parse_temperature(arrays)
          arrays.inject(0) do |sum, file|
            string = File.read(file)
            sum += parse(string)
          end
        end
    
        def self.parse(string)
          string =~ /max:(.+) min:(.+)/
          ($1.to_f - $2.to_f).abs
        end
      end
    
    end
    
    city_directorys = Dir['city/*/']
    
    report = city_directorys.map do |city_directory|
    city = City.new(city_directory)
    # 一个二维数组, 每个元素是 ["城市名", "年-月", 月平均温差(浮点数)] 形式
    city.average_arrays.max_by {|e| e[2] }
    end
    
    report.each {|city|  printf "%-10s在 %5s 拥有最高温差: %0.1f", *city }
    

    下面是补上的测试,使用 Minitest.

    require 'minitest/autorun'
    require 'awesome_print'
    require 'minitest/pride'
    
    require_relative "test3"
    
    describe City do
      before do
        @city = City.new("city/hangzhou/")
      end
    
      it "must return city name" do
        @city.name.must_equal "hangzhou"
      end
    
      it "must return a month_days_hash" do
        def @city.date_files
          ["city/hangzhou/1996-01-03.txt",
           "city/hangzhou/1996-01-02.txt",
           "city/hangzhou/1996-02-02.txt",
           "city/hangzhou/1996-02-03.txt",
           "city/hangzhou/1999-12-25.txt",
           "city/hangzhou/1996-01-01.txt"]
        end
    
        @city.month_days_hash.must_equal({"1996-01"=>["city/hangzhou/1996-01-03.txt", "city/hangzhou/1996-01-02.txt", "city/hangzhou/1996-01-01.txt"], "1996-02"=>["city/hangzhou/1996-02-02.txt", "city/hangzhou/1996-02-03.txt"], "1999-12"=>["city/hangzhou/1999-12-25.txt"]})
      end
    
      specify { City::Parser.parse("max:20 min: -5").must_equal 25 }
    
    end
    
  • 个人的兴趣第一,体面的尊严第二。

  • 关于 “0 基础” at 2012年10月15日

    #31 楼 @gaicitadie

    不赞同你的观点

    你所谓的 Rails中的很多理念' 除了极少部分来自于除了RESTful 和 , 真没啥东西了. 剩下的理念, 几乎全部都是来自于Ruby` (MVC, SQL 例外), 除了以上我说的部分,剩下的只有概念了,大量的概念,头晕~~

    还有你 2 楼的观点,前面扯的内容和最后的论据 所以ruby也被当成了rails的爸爸, 根本不搭调呀。为了精通 Java 去学 C 语言,为了精通 C 语言去研究汇编,这是假爸爸, 但是 `Ruby 是 Rails 的真爸爸'.

  • 强烈推荐一本 Ruby 书籍 at 2012年10月15日

    #4 楼 @Teddy

    没啥憋屈的,第二版挺好呀。Ruby 1.9 的东西其实不多。

    近似的,这本书是讲 方法学' 的, 或者说Ruby 之道', 虽然玄幻了点,跟 Ruby 版本关系不大。

  • 强烈推荐一本 Ruby 书籍 at 2012年10月15日

    看完才发现,The Ruby Way 第三版去年也出来了。这老兄也算厚道,5 年才出一个新版。

    有个网站叫做博学网有下载,不过需要注册,有帐号的 XD 分享下吧。

    http://boxuesky.com/viewthread.php?tid=170396

    不过这种类型的书,不似 Rails 工具书籍,我翻了下新版的目录,貌似第二版和第三版差别不大。

  • 我的意见:

    用最甜美的,字正腔圆的中文讲出来 ... 哈~

  • 支持~~ 真是规模好大~ 咱社区有的很有名的公司团队共才两三个人。

  • @lgn21st , 你终于回来啦~

    我也是周二上午回上海,应该可以赶上。+1

  • 超 jiong 的女程序员 at 2012年10月05日

    快笑死了!!

  • #5 楼 @yedingding

    你在开玩笑吗?维基百科呀。

  • #1 楼 @lgn21st #30 楼 @miclle

    正逢佳节,这次 Ruby Tuesday 是不是不举办了?