トップ «前の日(01-26) 最新 次の日(01-28)» 追記

日々の流転


2002-01-27

λ. 明日3科目もテストがあると思うと、気が重い。

λ. mingw32でのRuby/Gtkのextconf.rb

こないだファイルを添付しようとして失敗したのが怖かったので、今度は本文に直接パッチを書いたら……やってもうた。いい加減SourceForgeの使い方を覚えねば。[ #509066 ]

--- ruby-gnome.orig/gtk/extconf.rb	Tue Oct  9 02:30:10 2001
+++ ruby-gnome/gtk/extconf.rb	Fri Jan 18 13:49:48 2002
@@ -63,7 +63,7 @@
 
   lib_ary = []
   if /cygwin/ =~ PLATFORM
-  elsif /mswin32/ !~ PLATFORM
+  elsif /mswin32|mingw/ !~ PLATFORM
     lib_ary = [ ["X11", "XOpenDisplay"],
                 ["Xext", "XShmQueryVersion"],
                 ["Xi", "XOpenDevice"],
Tags: ruby

λ. 鏡と首輪

.

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

ψ 石原 和音 [あっちむいてもテストこっちむいてもレポート]

ψ さかい [ほんと、こういう時期はシンドイ……]


2003-01-27

λ. 称賛なんかよりも心暖まる言葉が欲しい

λ. 雨が冷たい。凍えそう。君は今一体何処で何をしているの?

λ. テスト

コンパイラ構成論は特に準備していなかったけど(予想通り)何とかなった。知的財産権論は……どうなんだろ? 企業会計論は決算を何故するのかが書けなかったのが悔しい。「会計公準に基づいて」という事で無ければ書けたかもしれない。ともあれ、今学期のテストは一応これでお仕舞い。残る敵は——

λ. 『キノの旅 Ⅴ』 時雨沢恵一[著] 黒星紅白[イラスト]

キノの旅〈5〉the Beautiful World (電撃文庫)(時雨沢 恵一) を読んだ。

Tags:

2004-01-27

λ. 土曜から風邪ひいてました。まだ少しダルイっす。

λ. 博麗神社 例大祭

キター!!

Tags: 東方

λ. javascript初心者

rubyで書いた

require 'win32ole'
messenger = WIN32OLE.new('Messenger.UIAutomation.1')
contacts = messenger.MyContacts
nick = messenger.MyFriendlyName

は動くのに、javascriptで書いた

var messenger = new ActiveXObject('Messenger.UIAutomation.1');
var contacts = messenger.MyContacts;
var nick = messenger.MyFriendlyName;

はMyFriendlyNameのところで「このオブジェクトではサポートされていない操作です」となる。なんでだろぅ〜!?

Tags: javascript

λ. 『声に出して読めないネット掲示板』, 荷宮 和子

某氏の机の上にあったのでパラパラめくってみたのだけど、なんつーか、イタイな。こんなイタイ本を見るのは久しぶり。

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

ψ たむら [messenger.['MyFriendlyName']; にしてみるとか、 # znzさんもツッコんでたけど、JS..]

ψ さかい [試してみたところ、messenger.['MyFriendlyName']; だと「識別子がありません」というエラー..]


2005-01-27

λ. Bayesian Networks for Lossless Dataset Compression, Scott Davies and Andrew Moore

を読んだ。レコードの列を圧縮する際に、レコードのフィールド間の関係をベイジアンネットワークとして学習し、その確率分布の情報を使って算術符号化や(改良した)ハフマン符号化を行うことで、高い圧縮率を達成できるという話。こんなのにもベイジアンネットワークを使えるんだという点で私には新鮮だった。

Tags: 論文

λ. Probabilistic Logic Programming and Bayesian Networks, Liem Ngo and Peter Haddawy

を読んだ。

Tags: 論文

λ. Announce: 圏論勉強会(第三回)

そうそう。今週末は圏論勉強会の三回目がありますよ。堅苦しい集まりではないし、特に前提知識は必要ないので、圏論に興味のある人は是非お気軽に御参加下さい。(初参加の方は mixi:圏論勉強会(第三回)haskell-jpメーリングリスト で参加を表明しておくと良いと思います)

日時
2005年1月29日(土曜) 13:00〜
場所
タイムインターメディア様 2階会議室 (地図)
テキスト
Conceptual Mathematics: A First Introduction to Categories
Tags: 圏論

λ. GHC 6.4 の ライブラリ

多少変わっているようなので、ちょっと覗いてみた。

Data.FiniteMap
deprecated。Data.Mapを推奨。
Data.Map
DDataから取り込まれた
Data.Set
DDataのそれに置き換わった。古いインターフェースはdeprecated。
Data.Queue
DDataから取り込まれた
Data.IntSet
Data.IntMap
DData.IntSetとDData.IntMapが取り込まれた。Int限定だけど、性能は汎用のものより結構良かったはず。以前あるプログラムで(DData.Setの実装になる前の)Data.FiniteSetとDData.IntSetを比較したときはこんな感じだった。
あるプログラムでの比較
Data.FiniteMap DData.IntSet
total time 3.94 secs
(197 ticks @ 20 ms)
2.88 secs
(144 ticks @ 20 ms)
total alloc
(excludes profiling overheads)
245,779,276 bytes 127,081,744 bytes
Data.FunctorM
mapをfmapに一般化するように、mapMをfmapMに一般化するクラス。 個人的には以下のように分配則(?)として表現するほうが好みかな。
class Functor f => DistOverM f where
    dist :: Monad m => f (m a) -> m (f a)
 
fmapM :: (DistOverM f, Monad m) => (a -> m b) -> f a -> m (f b)
fmapM f = dist . fmap f
Data.Version
ソフトウェアのバージョン番号を表すデータ型。Cabelで使ってる。
Tags: haskell

2006-01-27

λ. 『国家の罠―外務省のラスプーチンと呼ばれて』, 佐藤優

国家の罠 外務省のラスプーチンと呼ばれて(佐藤 優)

読了。これはすごい本である。 感想は後でちゃんと書きたい。

Tags:

λ. RDスタイルでプラグイン引数がエスケープされる問題へのパッチ

プラグイン呼び出しの引数がエスケープされてプラグインに渡されてしまうのを避けるためのパッチ。 [tDiary-devel] RDスタイルでプラグインの引数がエスケープされてしまう で報告、2006-09-13に取り込まれた。

Tags: tDiary

λ. Haskell is not not ML. Ben Rudiak-Gould, Alan Mycroft, and Simon Peyton Jones.

<URL:http://lambda-the-ultimate.org/node/1248> より。

継続が否定の計算的解釈というのはもちろん知ってはいたけど、二重否定がliftingに対応するということには気づいてなかったし、call-by-name CPS translation と call-by-value CPS translation についても知らなかった。知らないことばかりで勉強になった。それにしても、こういう理論的な話と実装寄りの低レベルな話とがうまく結びついているのは好きだな。

IL は paraconsitent だという話があったが、paraconsistent logic というものがあるようだ。


2007-01-27

λ. HaskellでのPTQ実装

HaskellでPTQを実装しました。 英語の簡単な平叙文を内包論理ILの論理式に翻訳します。 まだ若干問題はありますが、PTQの例の多くを試すことが出来ます。


2008-01-27

λ. MiniSat binding for GHC

ちょっとSATソルバを使って遊んでみたいことがあったのと、ku-ma-meさんのruby-minisat とパズルのソルバ に触発されたのとで、MiniSatのバインディングを作成してみた。

C-SourcesにC++のファイルを指定しているので、GHCの使っているGCCがC++に対応していない場合、ビルドできないはず。 C-SourcesにC++のファイルを指定するというのもどうかと思うが、Distribution.Makeモジュールを使う方法は面倒くさすぎるし。

あと、インターフェースはRubyバインディングに比べてイマイチ。 特に、変数からリテラルに明示的に変換しなくてはいけないのが面倒くさい。 リテラルを変数のスーパータイプとして定義できると良いのだが……

【追記】 Githubにレポジトリを作成しました。 <URL:https://github.com/msakai/haskell-minisat>

Tags: haskell

2009-01-27

λ. 『ビートのディシプリン』 上遠野 浩平

読了。

ビートのディシプリン〈SIDE1〉 (電撃文庫)(上遠野 浩平/緒方 剛志) ビートのディシプリン〈SIDE2〉 (電撃文庫)(上遠野 浩平/緒方 剛志) ビートのディシプリン〈SIDE3〉 (電撃文庫)(上遠野 浩平/緒方 剛志) ビートのディシプリン〈SIDE4〉 (電撃文庫)(上遠野 浩平)

Tags:

2010-01-27

λ. “Stream fusion: from lists to streams to nothing at all” by Duncan Coutts, Roman Leshchinskiy, Don Stewart

リスト処理を、以下のようなストリーム型*1に対する処理に置き換えることによって、foldl等の最終的にリストを消費する関数以外は非再帰的な定義にする。そして、通常の最適化によって、中間データ構造を削除する。

data Stream a = ∃s. Stream (s -> Step a s) s
data Step a s = Done
              | Yield a s
              | Skip s

例えば、sum (xs ++ ys) は、 sumの定義の展開と書き換え規則の適用によって foldl_s (+) 0 (append_s (stream xs) (stream ys)) となり、 定義を展開することで以下のようになる。

let next_stream xs =
      case xs of
        [] -> Done
        x : xs' -> Yield x xs'
    next_append (Left xs) =
      case next_stream xs of
        Done -> Skip (Right ys)
        Skip xs' -> Skip (Left xs')
        Yield x xs' -> Yield x (Left xs')
    next_append (Right ys) =
      case next_stream ys of
        Done -> Done
        Skip ys' -> Skip (Right ys')
        Yield y ys' -> Yield (Right ys')
    go z s =
      case next_append s of
        Done -> z
        Skip s' -> go z s'
        Yield x s' -> go (z + x) s'
in go 0 (Left xs)

そして、ここからGHCのごく普通の最適化によって以下と同等のプログラムになる。

let go z (Left xs) =
      case xs of
        [] -> go z (Right ys)
        x:xs' -> go (z+x) (Left xs')
    go z (Right ys) =
      case ys of
        [] -> z
        y:ys' -> go (z+y) (Right ys')
in go 0 (Left xs)

さらに、Constructor Specialization (Call-pattern specialisation) と呼ばれる最適化を用いると、以下と同等になる。

let go1 z xs =
      case xs of
        [] -> go2 z ys
        x:xs' -> go1 (z+x) xs'
    go2 z ys =
      case ys of
        [] -> z
        y:ys' -> go2 (z+y) ys'
in go1 0 xs

簡単な書き換え規則とごく普通の最適化機能だけで、中間データ構造を除去できているのが素晴らしい。 また、foldr/build の short-cut fusion と比べても、zipWithのような複数引数のものや、concatMapのようなネストしたリスト構造を扱うものも融合出来ると。

*1 Haskell的には∃じゃなくて∀が正しいけど