トップ «前の日(11-06) 最新 次の日(11-08)» 追記

日々の流転


2001-11-07

λ. wstring

mbとwcの変換部分がイケてない気がする。

  • NULを含む文字列を正しく扱えない
  • こっちは微妙なんで後でちゃんと調べようと思うけど、結論から書くと、変換時にはterminating NULを含めて変換した上で、変換結果のterminating NULをRubyから隠すべきだと思う。どっちでも同じように思えるかもしれないけど、statefulなエンコーディングを扱う際に差が出る。たとえば、mbがISO-2022-JPだとすると「ほげほげ」という文字列は「ESC $ B 0x24 0x5b 0x24 0x32 0x24 0x5b 0x24 0x32 ESC ( B」で表され、Cで扱う際の対応関係は次のようになる。
    mbESC$B0x240x5b0x240x320x240x5b0x240x32ESC(BNUL
    wcNUL
    この場合のmbからwcへの変換では、terminating NULを含めずに変換しても実質的に問題ないが、wcからmbへの変換ではterminating NULを変換しないと「ESC ( B」が落ちてしまう。
Tags: ruby
本日のツッコミ(全4件) [ツッコミを入れる]

ψ 小澤 [前者は特に問題があるわけでもなさそうなので、このままで行きたいと思います。 後者は修正しましたが、問題なのは引数が..]

ψ さかい [自分で話をruby-extに振っておいて、忙しくて反応できなくてすいませんでした。 で、この変換の件ですが、僕がm..]

ψ 小澤 [get_wcs_sizeとget_mbs_sizeはterminating NULを除いたサイズを返すので、mbs_..]

ψ さかい [なるほど。 確かにこれでも問題ないですね。 # Cも以外と奥が深いんだなぁ # Opaqueなデータ構造をそういう..]


2002-11-07

λ. 過去の自分はいつだって愚かなものだ。

λ. 雨がポツポツと。今日は雨は降らないかと思ったのに……

λ. この寒空は今の僕の気分か……

λ. ミクロ経済Ⅱ

レポート提出。

まぁ、どうでも良いのだけど「労働者が1時間あたりに生産できるTシャツの枚数を、労働時間の長さごとに求めよ」という文を見たら、普通「限界生産性」ではなくて「平均生産性」の事だと思いますよーー

λ. 沈没

沈没中...

λ. Lexical File Names in Plan 9, or, Getting Dot-Dot Right

UNIX Magazine 2001年5月号に載っていた日本語訳「Plan 9 における字句的なファイル名 — ".."の正しい把握」を読んだ。

Tags: 論文

λ. Re: 比重

なるほど。やっぱりコンクリートは人間の2倍以上重いのですね。そういわれてみれば、確かに森博嗣の小説で読んだ事があるような気もします。……『詩的私的ジャック』だったかな。

λ. Enumerable#with_index

Enumerable#each_with_indexって使える場面が極端に限られている気がする。例えばインデックスに依存するような関数でmapしたい時なんかには使うことが出来ないし。いっそのこと、こんな感じなら扱いやすかったのに。

module Enumerable
  class WithIndex
    include Enumerable
 
    def initialize(orig, from = 0)
      @orig = orig
      @from = from
    end
 
    def each
      index = @from
      @orig.each{|item|
        yield(item, index)
        index = index.succ
      }
    end
  end
 
  def with_index(*args)
    WithIndex.new(self, *args)
  end
end
 
data = [11,18,24,30,35,39,43]
data.with_index(1).map{|item,index| item.to_f / index }
#=> [11.0, 9.0, 8.0, 7.5, 7.0, 6.5, 6.142857143]

あ、わざわざこんなのを作らなくても、generator.rbのSyncEnumeratorでこないだのFromと同期させてやれば良いか。

……とか書いていたら、[ruby-dev:18651]でzipの話が出ているのに気が付いて驚いた。zipってHaskellのしか知らなかったけどPythonやPerl6にもあるんですね。

Tags: ruby
本日のツッコミ(全2件) [ツッコミを入れる]

ψ Shiro [Schemeにもあります>zip。srfi-1ですが。Schemeのは一番短いリストに合わせてますな。]

ψ さかい [Schemeにもあるのですか。 ——と思ったら、割と色々な言語にあるのですね。 Haskell, Scheme, ..]


2003-11-07

λ. Ruby/TCC

Ruby/FFCall 0.0.2 をリリースしたら、Mitchell N Charity さんという方が Tiny C Compiler というコンパイラがライブラリとしても使えると教えてくれたので、ちょっと試しに拡張ライブラリにしてみた。以下は Tiny C Compiler の付属サンプルをRubyに移植したもの。

require 'tcc'
 
tcc = TCC.new
tcc.set_output_type(TCC::OUTPUT_MEMORY)
 
tcc.compile_string <<END
int fib(int n)
{
    if (n <= 2)
        return 1;
    else
        return fib(n-1) + fib(n-2);
}
 
int foo(int n)
{
    printf("Hello World!\n");
    printf("fib(%d) = %d\n", n, fib(n));
    printf("add(%d, %d) = %d\n", n, 2 * n, add(n, 2 * n));
    return 0;
};
END
 
tcc.add_symbol("add", DL.callback("III"){|a,b| a + b })
tcc.relocate
foo = tcc.get_symbol("foo", "II")
foo.call(32)

このスクリプトを実行すると以下のような出力が得られる。

Hello World!
fib(32) = 2178309
add(32, 64) = 96

結構面白いかも。

それから、TinyCCはTinyCC-Win32というWin32移植版もあるそうだ。えとせとら(2003-11-03)シュッ・シュッ(2003-10-29) より

Tags: ruby

λ. 知識ベース論

やべー、レポートの提出って今日だったのか。うわー、やってもうた。欝だ。何が最悪かって、わたしゃ昨日日付を確認して来週だなと思っていたのですよ。何を確認してたんだろね俺は。あー、気分最悪。

λ. OBJは等式論理を使ってるらしい。

subtree が有限であるような木を rational tree というそうだ。

λ. 借りた本

『経済学を知らないエコノミストたち』
野口 旭 [著]
Tags:
本日のツッコミ(全5件) [ツッコミを入れる]

ψ たむら [げ。やろうと思ったら先越された(藁]

ψ 青木 [面白いですね。これを使ってJITコンパイラ作れるかな。]

ψ さかい [JITいいっすねー そういえば、rubyjitやrb2cというのもありましたね。 http://easter.ku..]

ψ やいざわ@清木研 [先日はお世話になりますた。 清木先生の授業は期限を多少遅れても見てくれるのである程度は大丈夫という説がありますので。]

ψ さかい [どうもありがとうございます。 何とか出してみます。]


2004-11-07

λ. Fireman vs Bass

ラブ・ファミコン より。ロックマン懐かしいなぁ。「Pest Exterminator」というランクにちと笑った。スクリーンショット

λ. 圏論勉強会開催予定が決定

[haskell-jp:471] 圏論勉強会開催(第一回)によると、圏論勉強会の日取りが決まったそうですよ。

Tags: 圏論

2005-11-07

λ. 久しぶりに参加中

久しぶりに人狼に参加中。二ヶ月ぶりくらいだろうか。 二連敗中だから今回は勝てるといいなぁ、と思っていたら(以下略。

Tags: 人狼

2007-11-07

λ. Twitterにメールから投稿するスクリプト

最近Twitterを始めたyaizawaさん「なんとたった27行」とか行数自慢(?)していたので、対抗して自分の使っている手抜きスクリプトも晒してみる(^^;

require 'net/http'
Net::HTTP.version_1_2
require 'uri'
require 'tmail'
require 'iconv'

mail = TMail::Mail.parse(STDIN.read)
status = mail.body
status = Iconv.conv('utf-8', mail.charset, status) if mail.charset
status.chomp!

Net::HTTP.start('twitter.com', 80) {|http|
  req = Net::HTTP::Post.new('/statuses/update.json')
  req.basic_auth(ID, PASSWORD)
  req.body = "status=" + URI.escape(status)
  res = http.request(req)
}
Tags: ruby

2008-11-07

λ. 『統計・確率のしくみ』 郡山 彬, 和泉沢 正隆

読了。

統計・確率のしくみ (入門ビジュアルサイエンス)(郡山 彬/和泉沢 正隆)

Tags:

2009-11-07

λ. “A semantics for imprecise exceptions” by Simon Peyton Jones, Alastair Reid, Tony Hoare, Simon Marlow and Fergus Henderson

こないだのPLDIr#3稲葉さんが簡単に紹介していた論文。

CPUによってはアウトオブオーダー実行によって、単純に逐次実行する場合とは発生するエラーが異なってしまう場合がある。同様にHaskellのような純粋関数型言語でも、プログラム変換によって発生するエラーが異なってしまう場合がある。これがタイトルの imprecise exception の意味。

アウトオブオーダー実行やプログラム変換のような最適化によって意味が変わってしまうのは問題だけど、だからといってこれらを諦めるたり制限することは最適化のための大きな機会を逃すことになる。そこで、そのような変換によって意味が変わらないような意味論をかんがえるというのがこの論文。

まず、ゼロ除算エラーのような、起こる原因と場所がわかっているような例外(同期的例外)は、Haskellでは(手続き型言語における例外とは異なり)浮動少数点数のNaNのように式の値として伝播される(概念的には)。 そこで、式の表示的意味を通常の値もしくは起こり得る(同期的)例外の集合とする。その上で、例外の観察はIOアクションの中でしか出来なくして、この例外の集合から非決定的に一個取り出すという解釈をする。IOアクションの実行の意味論は神託を用いることを許しているので、これは問題ない。

このようにすることで、意味論上の問題もほぼ解決できて、かつ実装上も起こり得る例外を実際に全部集めたりする必要がなく効率的に実装できる。

起こり得る例外の集合を考える際の領域は Smyth Powerdomain の構成を利用しているのだけど、普通の関数型言語の意味論だとPowerdomainはなかなか見かけないので、「おーっ」と思った。

それから、Conclusion が As usual, implementation is ahead of theory: で始まっていて 笑った。

関連