A Day in the Life

2006-06-13

YARV はユーザスレッドじゃない

というのをきいたので適当なの書いて ruby 1.8.4 と比べようとおもった。

require 'thread'
require 'webrick/utils'

include WEBrick::Utils

threads = []
10000.times do
  threads.push(Thread.start(random_string(16)) {|filename|
    File.open("tmp/#{filename}", 'w') {|f| f.write random_string(1024) }
  })
  while Thread.list.size > 100
    sleep 0.01
  end
end

threads.each {|t| t.join }

実行してみる。

gorou[1]$ time ruby-yarv test.rb
test.rb:8:in `start': failed to allocate memory (NoMemoryError)
        from test.rb:8:in `block in '
        from test.rb:7:in `times'
        from test.rb:7:in `'
[2]    11333 segmentation fault  ruby-yarv test.rb
ruby-yarv test.rb  4.02s user 1.02s system 99% cpu 5.059 total

落ちた。ふつうの ruby

gorou[1]$ time ruby test.rb
ruby test.rb  15.07s user 3.95s system 94% cpu 20.051 total

とおった。YARV

gorou[1]$ time ruby-yarv test.rb
test.rb:8:in `start': failed to allocate memory (NoMemoryError)
        from test.rb:8:in `block in '
        from test.rb:7:in `times'
        from test.rb:7:in `'
[2]    16978 segmentation fault  ruby-yarv test.rb
ruby-yarv test.rb  4.04s user 1.07s system 86% cpu 5.909 total

落ちた。

えーん、YARV だと落ちる><ノ。ちなみに

$ ruby-yarv -v
ruby 2.0.0 (Base: Ruby 1.9.0 2006-04-08) [i686-linux]
YARVCore 0.4.0 Rev: 504 (2006-05-31) [opts: ]

な環境。

シンメトリー化するブックマークレット

ログあさってたら出てきたよ。WinIE 専用。うまくいくページは結構それっぽくなるな。こことかこことか。CSSじゃなくて table なレイアウトだとうまくいくことがおおいぽ。

javascript:(function(){w=document.body.clientWidth/2;document.body.insertAdjacentHTML("BeforeEnd","<\/iframe><\/div>");})();
</pre><p>from <a class="okeyword" href="http://d.hatena.ne.jp/keyword/%B2%F7%C2%AE">快速</a><a class="okeyword" href="http://d.hatena.ne.jp/keyword/%B2%BD%B3%D8">化学</a>の<a class="okeyword" href="http://d.hatena.ne.jp/keyword/wiki">wiki</a>の<a class="okeyword" href="http://d.hatena.ne.jp/keyword/google">google</a><a class="okeyword" href="http://d.hatena.ne.jp/keyword/%A5%AD%A5%E3%A5%C3%A5%B7%A5%E5">キャッシュ</a>より。<p class="share-button sectionfooter">
  <iframe allowtransparency="true" frameborder="0" scrolling="no" src="http://www.facebook.com/plugins/like.php?href=https%3A%2F%2Fsubtech.g.hatena.ne.jp%2Fsecondlife%2F20060613%2F1150205016&layout=button_count&show_faces=false&width=100&action=like&colorscheme=light&height=21" style="border:none; overflow:hidden; width:100px; height:21px;">
  


  aとかbとかcの話
 先日ふつハスに青木さんのサインを頂いたんだけど、Haskell は一度置いておいて、これまた青木さんサイン入りのふつリナを途中からもう一度読み始めようかなぁ。やっと ruby の拡張ライブラリのコードがほんのちょっとづつ読めるようになってきて楽しくなってきたし。なので RHG 読みたいし。
  
  


  vim script
 ちょこっとだけ書き方解った。それはそうと vim-ruby でもうちょっと組み込みで便利メソッドが定義されてるとイイナー、と思った。今はこんなん付け足して使ってる。module VIM
  class Buffer
    def clean!
      count.times {|l| delete(l + 1) }
    end

    def write(str)
      str.each_line {|s| append(count, s.chomp) }
    end

    def read
      (1..count).inject([]) {|a, l| a << self[l] }.join("\n")
    end

    def self.bdall!
      self.count.times { VIM.command "bd!" }
    end
  end
end

  
  


  vim メモ:mes
メッセージ履歴
  
  


  randam_string$ ruby -rwebrick/utils -e 'puts WEBrick::Utils.random_string(8)'
TZPzPj2s
nrhd
  
  


  fub に user.js ができた記念
 Ctrl + Enter 必須!つーことで。// ==UserScript==
// @name	    	Submit on Ctrl-Enter for WinIE
// @namespace   	http://tokyoenvious.xrea.jp/
// @description 	Submit form when you pressed  in textarea.
// ==/UserScript==

(function() {
	var forms = document.getElementsByTagName('form');
	for (var i = 0, form; form = forms[i]; ++i)
	{
		var textareas = form.getElementsByTagName('textarea');
		for (var j = 0, textarea; textarea = textareas[j]; ++j)
		{
			textarea.attachEvent(
				'onkeydown',
				(function(form) {
					return function(event) {
						if (event.ctrlKey && event.keyCode == 13)
							form.submit();
					}
				})(form)
			);
		}
	}
})();
http://tokyoenvious.xrea.jp/b/javascript/submit-on-c-enter-greasemonkey.htmlほとんど元のコードまんまでいけたよ。んでも毎回 keydown イベントで関数呼ばれるからめっちゃおそいよIE。Firefox じゃこんなことないんだけどな。。
  
  


  Logger
 ruby の Logger で昔の世代は gzip にして、つーのをやりたかったんだけど Logger::LogDevice の差し替えってできないのね。Logger::LogDeviceGzip とかに差し替えたかったのに。というよりオプションでLogger.new('foo.log', :age => 10, :size => 1.megabyte, :gzip => true)
とかするために initialize が  def initialize(logdev, *args)
    @progname = nil
    @level = DEBUG
    @default_formatter = Formatter.new
    @formatter = nil
    @logdev = nil
    if logdev.kind_of?(LogDevice)
      @logdev = logdev
    elsif logdev
      @logdev = LogDevice.new(logdev, *args)
    end
  end
とかならいいのなぁ。というわけで override して対処。これじゃ DHH に文句いえないよ><begin
  require 'zlib'
  class Logger
    class LogDevice
      def shift_log_age
        (@shift_age-3).downto(0) do |i|
          if FileTest.exist?("#{@filename}.#{i}.gz")
            File.rename("#{@filename}.#{i}.gz", "#{@filename}.#{i+1}.gz")
          end
        end
        @dev.close
        Zlib::GzipWriter.open("#{@filename}.0.gz") do |gz|
          gz.write IO.read(@filename)
          File.unlink(@filename)
        end
        @dev = create_logfile(@filename)
        return true
      end
    end
  end
rescue LoadError
end

  
  


  しょこたん
 はましょーのブログってみたことなかったんだけどタイトルから配色からレイアウトから…
  
  


  miv
 
  Line completion: 
 File や Omni はよく使うから知ってたけど Line はしらんかった。あんま使うことなさそうだけど。
  
  


  サッカーを見てないのは非国民!
 奄美は問題ないのか!
記事の一覧 >