A Day in the Life

2005-10-27

script.aculo.usのダメなところ

名前が激しく覚えにくいところ

prototype.jsのマウスホイールイベント

あーいまだにパッチ投げてないや…。英語かくのたいへんpqpq

Greasemonkeyって

一時期のproxomitronっぽいなぁ。proxomitronもフィルタのパッケージ化ができ、簡単に導入削除できてればもっと流行ったんだろうけど。

benchmaker

毎回ベンチマーク(Benchmark.bm うんちゃら)を書くのがめんどくさくなったので作った。benchmarkerとか名前を付けて下記を保存。

#!/usr/bin/env ruby

require 'benchmark'

module Benchmark
  class Benchmarker
    Times = 1

    def setup; end

    def teardown; end

    def __run(n)
      methods = self.class.bm_methods
      unless methods.empty?
        ::Benchmark.bm( methods.map{|c| c.length}.max ) do |bench|
          methods.each do |method|
            bench.report(method) do
              setup
              n.times { self.__send__(method) }
              teardown
            end
          end
        end

      end
    end

    def self.bm
      self.new.__run self::Times
    end

    def self.benchmark
      self.bm
    end

    private
    def self.bm_methods
      self.self_methods.reject {|m| m[0..0] == '_' }
    end

    def self.self_methods
      self.instance_methods - self.superclass.instance_methods
    end
  end
end

if __FILE__ == $0 && File.exists?(ARGV[0])
  load ARGV[0]
  ObjectSpace.each_object(Class) do |klass|
    klass.bm if klass < Benchmark::Benchmarker
  end
end

で、どっかのpath通ったところに置いて(置かなくてもいいけど)+xして

benchmark foobench.rb

で。foobench.rbの内容は

class FooBench < Benchmark::Benchmarker
  Times = 100000

  def setup
    @hash = {}
    @hash['a'] = 1
    @hash[:a] = 1
  end

  def hash_string
    @hash['a']
  end

  def hash_symbol
    @hash[:a]
  end

  def teardown
  end
end

結果は

$ benchmarker foo_bench.rb
                 user     system      total        real
hash_string  0.370000   0.120000   0.490000 (  0.489491)
hash_symbol  0.340000   0.110000   0.450000 (  0.450113)

な感じ。

String#first

げ、ActiveSupportのだったのか。ActiveSupport依存症だわぁ。

TextHelper#strip_tags

Edge Railsに入った。それなりに使えるかも。HTML::Tokenizerとかってaction_controller/vender(たしか)にあるんだけど、単体パッケージじゃないのかしら。

# Strips all HTML tags from the input, including comments.  This uses the html-scanner
      # tokenizer and so it's HTML parsing ability is limited by that of html-scanner.
      #
      # Returns the tag free text.
      def strip_tags(html)
        if html.index("<")
          text = ""
          tokenizer = HTML::Tokenizer.new(html)

          while token = tokenizer.next
            node = HTML::Node.parse(nil, 0, 0, token, false)
            # result is only the content of any Text nodes
            text << node.to_s if node.class == HTML::Text
          end
          # strip any comments, and if they have a newline at the end (ie. line with
          # only a comment) strip that too
          text.gsub(/[\n]?/m, "")
        else
          html # already plain text
        end
      end

blog査定


My blog is worth $51,373.14.
How much is your blog worth?

売る売る!(そういうものではない)

食間に服用して下さい

食事と食事の間だったのか!!!普通に食事中に服用していたよ…。

食間に服用して下さいと言われたので、食事の最中に薬を服用してしまったという笑い話がありますが

もはや笑い話。

石油ストーブの臭い

がしてきた。冬だなぁ。こたつ入ってみかんくいたい。

記事の一覧 >