history

青木日記 RSS

<前月 | 最新 | 次月>

2007-02-01

論文

論文出せた……。いや本当によかった。

一部のかたには多大な御迷惑をおかけしました。 たまってることをこれから一気にやっていきます。

(11:24)

MacBook でコマンドキーを増やす

MacBook に右コマンドキーがなくて不便すぎる。 しばらく耐えていたが、ついにキレて解決策を探す。

とりあえず、モディファイアをいじるには kext を使わなくてはいけないらしいことがわかった。

どうも、目的のものはありそうにないなあ。 そもそも日本語キーボードでないとカナキーがないので、 その時点でかなり数が減ってしまう。しょうがないので、 一番ソースコードが新しくていじりやすそうだった KeyRemap4MacBook をさくっとパチッて、 かな/カナキーと英数キーを Command に変えた。

いま使ってるんだけど、動いているような気がするな。

それにしても、カーネルモードのコードをいじるのは 恐ろしいものだ。

(00:55)

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

ただただし [おめでとう〜]

酒井 [おめでとー
理解できるか分からないですけど、読んでみたいです。]

n [乙]

青木 [ありがとうございます。終わってよかったですホント。
内容は……ちょっと、アレかも。]


2007-02-03

るびま本 (1) 添削ポイント

論文も終わったので心穏やかにるびま本の原稿を進める。 実に気楽だ。

書籍化するにあたり、 添削ポイントに全体を通した 通し番号を付けることにした。例えば 「[style01] コーディングスタイルはライブラリ全体で統一する」 と付くわけだ。 また巻末付録のポイント一覧には逆に そのポイントが参照されているページが書いてあり、 相互にたどることができる。

で、それの処理をする。 Ruby だとこういう処理が本当に書きやすい。

るびま本 (2) 図

次に図を書く。

これまでは Linux で X で tgif だったわけだが、 なんかいろいろと嫌になってきたので、 Mac で何か探すことにする。

OmniGraffle というのと LineForm というのが 比較的安くてよさそうだ。 しかし LineForm は機能的に 「絵」を描くほうが得意そうな感じがする。 俺が書きたいのは とにかく箱と線がつながってる図なので、 OmniGraffle を買うことにする。 ダウンロード版 OmniGraffle standard で 9800 円。 安くていいですな。

最初に起動したとき「ライセンスがありません」 とか言われて何だそりゃと思ったけど、 実は買ったときのメールにライセンスキーが書いてあった。 そういうことはちゃんと README に書いとけ。

(19:07)

OmniGraffle

一日目から落ちるなよ! いやまあ新しいのを書き始めた直後だったからいいけどさ。 せっかくだからエラーレポートも詳細に送っておいた。

あと一枚で終わり……。

(04:08)


2007-02-04

るびま本

本体 (自分の分) をとりあえず脱稿。 もうちょいだな。

で、次はふつぱいらだ。

(05:39)

Amazon ……

だーから Amazon は、

Amazon.co.jpで、 以前に青木 峰郎の著書をチェックされたお客様に、 このご案内をお送りしています。 『Rubyレシピブック 第2版 268の技』、好評発売中です。 ご注文は以下をクリック。

って俺に送ってくんなー!

(16:06)

Mail.app への移行

すっかり Mac に移行する気になったので、 メール環境も Mac に移行することにした。 かといって Mac だけでしか見られないのも不便なので、 IMAP を使うことに。

サーバは何使ったらいいのか迷ったけど、 特別な機能が欲しいわけでもないので、 無難に courier-imap を使うことにする。 設定も (ログインパスワードを忘れていたことを除けば) 何事もなく済んでしまった。

ところが IMAP サーバ側にメールボックスを作るところでちょっ とつまづく。 何度やっても "invalid mailbox name" とかなんとか言われて作 れない。 どうも、新しいメールボックスを作るときに Mail.app で「受信 箱」を 選択しておかなければいけなかったようだ。

この問題に気付いてからは順調に進んだ。 まず ML ごとにメールボックスを作って振り分けルールを設定す る。 それから Trash と Draft と Sent を作って、 「メールボックス」>「このメールボックスの用途」 でゴミ箱と草稿と送信済みを割り当てる。

次にちょっと悩んだ点が既存メールの移行だ。 これまでは Mew なのでメールボックスが Mh だが、 インポートできるリストはアプリケーション名が並んでいる だけで、mbox とか Mh とかのジェネリックな名前がない。

しかし、どうも「その他」が mbox のことらしいので、 これを利用することに決める。 まず TMail を使ってこんなスクリプトを書き、 Mh から mbox へ変換する。

require 'tmail'
 
mh = TMail::MhMailbox.new(ARGV[0])
mbox = TMail::UNIXMbox.new(ARGV[1])
mh.each_port do |port|
   port.copy_to mbox.new_port
end

と、書いてから思ったけど、 TMail::Mailbox#copy があれば ワンライナーで書けるな。 追加しておこう。

で、mbox に変換できたらそれを Mail.app に読み込む。 最初 mbox ファイルを見付けてくれなくて苦しんだが、 ~/Mail とかのありがちなところに置いとかないとダメみたい。

読み込みが終わると (けっこう時間がかかる)、 「読み込み」というメールボックスの下に 読んだやつが出てくるので、それをごっそりと IMAP のメールボックスに移動して終わり。

さいしょ、個人宛のメールがかたっぱしから SPAM に分類されてちょっとゲンナリしたが、 すべて選択してまとめて「SPAMじゃない」 チェックができたので特に実害はなかった。 そのうち学習してくれることを期待しよう。

(22:07)

Mac / 目下の問題

なんだかんだでわりと快適な Mac 生活が送れるようになってきた。 残る懸念は端末のバックスペース問題である。

ssh で Linux マシンにログインすると バックスペースが効かなくなる。 これが重症で、stty では直らない。 bash だと大丈夫で zsh がダメというのが 嫌すぎる。

これを回避しようとすると、 Terminal.app の 「delete キーで backspace を送信」 を使わなければならない。 しかし、これをオンにすると今度は ssh 先の less とか vi でバックスペースが 使えなくなるという悲惨な事態が待っている。 ムゴい。

(23:02)

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

Takayama Fumihiko [はじめまして。
Emacs な人が Mail.app に移行しようと思うと
エディタがネックになっていたと思うのですが、
そこら辺はいかがなさったのでしょうか?]

zunda [バックスペースはCtrl+Hでどうでそ?(また二本指か]

青木 [わたしはあんまり Emacs を深く使うわけじゃないので、
カーソル移動のキーバインドがだいたい使えれば満足なんですよ。
Mail.app は Ctrl-b, f, p, n, と Ctrl-k, o くらいは使えるので、
ほとんど違和感なく使えています。]

青木 [いや、Ctrl-h でもダメなところが今回の悲惨なとこでして。
zsh か、vi/less か、どっちかが必ず犠牲になる構造になってるんです。
具体的にどういう理由でそうなるのかはもうちょい調べてみないとなんとも。]

Takayama Fumihiko [なるほど、納得です。ありがとうございました。

ちなみに backspace は screen を挟むと問題なく扱えるので、
そこら辺から原因をさぐると良いかもしれませんね。]

青木 [なるほど。screen を使えば通るんですか。
とりあえずそれで試してみます。]


2007-02-05

Ruby会議とか

あ、そういえば、結局 Ruby 会議のプレゼンは出さなかった。 ちょっと、今年はちゃんと出られるのかどうかわかんないので。 まあ、出すとすればリファレンスマニュアルなんだけども、 リファレンスマニュアルは 8 月が目標だからなあ。 きっと来年くらいのほうが、 いろいろ成果が出ていて (あるいは出ていなくて) おもしろいさ (と自分で納得する)。

(02:07)

リファレンスマニュアル刷新計画

で、そのリファレンスマニュアル刷新計画だけど、 9 日あたりから第三段階を開始する予定。 こんどは第二段階よりもさらに手間がかかるので、 あらためて ruby-list と日本 Ruby の会 ML で 人材を追加募集する予定。

Mail.app

メールの移行がだいたい完了。 とちゅう、大量に (1 万通くらい) メールを読み込んで 移動しまくってたらすげー重くなったので、 いったん Mail.app を再起動した。

さて、ML のメールが 1 万通くらいたまったときに どうなるのか見ものだな。

(02:47)


2007-02-06

TextEditで文字数を数える (1) AppleScript

簡単なレポートくらいなら TextEdit で書けるなあ。 ……と思って書いてたら文字数が数えられないことに気付く。 なんかないのか?

あった。

http://blogs.dion.ne.jp/fujidana/archives/517367.html

なるほどね、AppleScript というのを使うと 動いているプロセスにちょっかいを出せるんだ。 Mac における COM みたいなもんか。

TextEditで文字数を数える (2) RubyCocoa

しかしこの AppleScript って コードの字面が実にかったるいな。 Ruby で書けるとよいのだが。 なんか書けそうだな。 RubyCocoa という単語をなんとなく思い出すんだが、 もしかしてこういうことに使えるのだろうか。

使えそうな気がするな。 NSApplication のあたりが怪しい。 これで TextEdit を操作できるんじゃないだろか。

とりあえずインストールしとこ。 1.9 (YARV前) で動くかなあ。

だめだった。追究するのもめんどいので (というかレポート書かなきゃいかんので) あきらめてバイナリを使う。

rb-appscript というのを一緒に使うと いろいろ楽に書けるようだ。こうか。

~ % cat textedit-wc.rb
require 'appscript'
p Appscript.app('TextEdit').documents[1].characters.get.size
~ % ruby-1.8.2 textedit-wc.rb
80

動いた〜。

ていうか 80 字しか書いてないのに AppleScript 書き始めるのってどうよ。

ん? もしかしてこれって文字数じゃなくてバイト数かな。 いやそんなことはなかった、文字の配列だった。 それはそれでなんか気になるが、とりあえずはこれでいいや。

(05:38)

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

hisa [AppleScriptの代わりとしては、rb-appscriptとかぶってますが、RubyOSAというものもあります。実際どう違うのかよく知らないのですが、rubyosaの方は、将来のMac OS Xにのっかっる可能性も高そうだし友人が作ってるし、ということで推しておきます。

RubyCocoaに関しては、SIMBLプラグインとしてアプリにへばりつくという方法で使えるようになりつつあります(開発中)。

RubyOSA - http://rubyosa.rubyforge.org/
SIMBL - http://www.culater.net/software/SIMBL/SIMBL.php]

青木 [あ、そうか、RubyCocoa と rb-appscript は別ものなんですね。
このへんは何がなにやらわからないので、勉強してみます。]


2007-02-08

RubyCocoa で Hello, World

ちょっと GUI なアプリケーションが 作りたくなったので RubyCocoa を 使ってみることにする。

まあ、とりあえず Hello, World。

require 'osx/cocoa'
 
class HelloApp <  OSX::NSObject
   def quit(notifier)
     exit
   end
end
 
app = OSX::NSApplication.sharedApplication
app.setDelegate HelloApp.alloc.init
win = OSX::NSWindow.alloc.initWithContentRect_styleMask_backing_defer([200.0, 300.0, 250.0, 60.0], 15, 2, 0)
win.setTitle 'Hello RubyCocoa'
win.setLevel(3)   # floating window
win.orderFrontRegardless
button = OSX::NSButton.alloc.initWithFrame([10.0, 10.0, 210.0, 40.0])
win.contentView.addSubview button
button.setBezelStyle 4
button.setTitle 'Hello, World!'
button.setTarget app.delegate
button.setAction 'quit:'
button.setEnabled true
app.run

NSWindow の initWith なんたらという メソッド名がやたら長い。 これはなんか理由を聞いたことあるなあ。 RHG 読書会で聞いたんだっけ。 キーワード引数名がエンコードされてるので ハッシュだと順番が変わってしまってだめ、 というやつだな。

(05:12)

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

hisa [長いメソッド名は、とても説明的なので意味をつかみやすいのがメリットだと思うのですが、引数のラベルと実引数をObjective-Cのように対で書けない場合には、むしろ読みにくくてデメリットになってしまいます。ということで、RubyCocoaではobjc_sendというメソッド (0.10.1以降)でそこのところをサポートしています。
http://www.fobj.com/hisa/d/20070209.html#p01]

青木 [お、その話も以前聞いたような気がします。
もう実装されてたんですね。ありがとうございます。
ついでに、alloc.objc_send(:initXXX, ...) が
new(...) にできたりはしませんか?]

青木 [ああそうか単純な変換じゃだめなんだ。
「With」がうまくないですね。
なんかいい方法ないのかなあ。]

青木 [全部 with だったら無条件で
with を付けてしまえばいいのかなあ……。]


2007-02-09

MacBook / メモリが足りない?

メモリが足りないような気がする。

しばらくコード書いたり Xcode 動かしたり ダラダラ巡回したりしてから ふとダッシュボードを呼び出すと、 3, 4 秒すべてが停止している。 expose もカクカクする。

アクティビティモニターで見てみると、 Safari と iPhoto が 200MB ずつ使っていた。 それからダッシュボードが全部まとめて 100MB、 Emacs が 80MB、 Xcode と Mail がそれぞれ 50MB などなど。 これだけで 700MB 近い。 システム自体のメモリ使用量と VRAM 割り当て分と、 この他に Terminal.app とかいろいろで 完璧に埋まってるわけだ。うーむ。

じゃあメモリ増設するかって思うけど、 MacBook は 2GB が最大なんだよなあ。 しかもスロットが 2 本しかないので、 全部交換になる。 1GB 増やすためだけに 1GB 捨てるのはなんか惜しい。 それに、2GB に増えてもなあ。 1GB でもときどき動作が ひっかかるくらいだから、 めちゃくちゃ足りない というわけではないんだよなあ。 いっそ 4GB に増やせるならいいんだけど。

そういや MacBook Pro はどうなんだろう。 ……最大 3GB? なんだその微妙な最大容量は。 MacBook Pro だってデュアルチャネルなんだから、 2 の倍数にすりゃいいのに。 32 ビットモードで 4GB 付近になると 何か問題があるのだろうか。

やっぱソフトウェア的な問題があるらしい。

http://blog.japan.zdnet.com/apple/a/2006/10/core_2_duo_macbook_pro3gb.html

4GB 越えは 64 ビットを待てということかな。

(23:21)

MacBook / メモリが足りない? (2)

MacBook に戻る。

Safari はタブを閉じたあとにメモリを戻さない、 という話があるけど、これは微妙だよなあ意味的に。 free (release) してもカーネルに メモリを返さないって意味なら、 そりゃありうるよな。 malloc の実装次第だ。 free してないって話なら酷すぎだが、 さすがにそれはないと思うので たぶん前者だろう。

まあとりあえずは Safari がデカくなってきたら いったん終了させる、でしのごうかな。 メモリをたくさん積める 64 ビット Mac が出たら買い換えよう。

(23:43)


2007-02-10

RHG 読書会

今日は著者の久野先生に来ていただいて JavaScript 読書会。いや面白かった。 今日はクライアントスクリプティングとか DOM とかの話だったので俺は そのへんの知識を利用してこそこそ REPL ページを作っていた。 えらい苦労した。

飲み会方面では、(主に) 藤本さんに Mac OS X 方面のことを教えてもらった。 勉強になりました。 ずっと Mac 方面は見ないふりをしてきただけに、 なにもかも新鮮で楽しいな。

ReFe ウィジェット

『Programming Dashboard』ていう本を買ったので 何かのウィジェットを作りたくなった (フツー逆だろ)。 とりあえず ReFe ウィジェットあたりが 手頃なのではなかろうか。

ダッシュボードウィジェットは HTML と JavaScript でできているので、 表示はそのへんでがんばればよいらしい。 あとは Ruby (ReFe) にアクセスする方法を 探せばよいわけだ。

最も簡単な手段を選ぶなら、widget.system で refe コマンドを呼ぶだけでよい。 しかしどうせなら dRuby で ReFe サーバに アクセスしてインクリメンタルなサーチを 実装してみたい気がする。 いやまあもちろん、 1 文字ごとに ReFe 呼んでもいいけど、 さすがに重そうだからなあ。

となるとウィジェットから Ruby を動かす必要がある。 Objective C のライブラリは プラグインできるみたいなので、 このへんの仕組みをどうにか利用すればよいわけだ。 組み込み Ruby API を使って mod_ruby みたいなものを作ればいけそうな気がする。 Windows で言えば ActiveScriptRuby だな。

ウィジェットから dRuby アクセス?

それはそれとして、Ruby を動かさずに 済ます方法もあるような気がする。 dRuby プロトコルを Ruby を使わずに 実装すればよいのだ。 JavaScript オブジェクトを 直接 Marshal フォーマットでマーシャルすれば Ruby を使わずに dRuby にアクセスできるのでは ないだろうか。試してないけど。できるかなあ。 うーん? dRuby ってクライアントも オブジェクトをエクスポートしないといけないから、 そこが難しいかもしれないね。

net/http 拡張案

net/http の拡張案、というか、 俺的にはほとんど導入確定の変更について。

  • http_proxy 環境変数を見てプロクシセット (これはコードをちゃんと考えてないので まともに実装できるかどうかわからない)
  • deflate/inflate 対応
  • redirect 対応
  • digest auth 対応 (とっくにやったつもりだったが、 やってなかった)

[ruby-core:08383] の NTLM てのも できれば入れたいんだけど、 そのままでは使えないパッチなので ちょっとねえ。

(00:08)

ReFe ウィジェット? (2)

だめだやはり酒飲むとだめだ。 dRuby 使う必要ないじゃん。 Ruby がインプロセスで動いてるんだったら、 その Ruby で直接データベースを叩けばいい。

(00:15)

まにゅあるとか

あああ、リファレンスマニュアルのこと すっかり忘れてた。 今日はもう遅いから……えーと、 明日で大丈夫かなあ……。 なんか忘れてるような気がするな。

(00:16)

Cocoa Browser

http://numata.designed.jp/programming/cocoabrowser/index.html

Cocoa その他のリファレンスを コラム形式で検索できるツール。 かなり便利そう。 さっそくインストールした。

(00:45)


2007-02-11

ReFe ウィジェット? (3)

はっ! そうか! Ruby を組み込むよりもフツーに XMLHttpRequest 使ったほうが楽じゃん。

(21:07)

Terminal.app から Linux へ ssh ログインしたときの BS

Mac OS X の Terminal.app から Linux へ ssh でログインしたときに backspace が効かないことがあるよ問題について。

前回 screen を使うとうまくいくというツッコミをもらったので試してみた。 すると vi は動いた。すばらすい。 しかし jless がどうしても backspace を deleteと認識してくれない。 もう、なんなんだよ jless……。 Linux を使いはじめたころにも同じ問題に遭遇したことがあるけど、 まだあのポリシーは変わっていなかったのか。

ものは試しで TERM=xterm にしてみると、 screen なしでも vi で backspace が動いた。 しかし jless がやっぱりダメ。

じゃあ Terminal.app の「delete キーでbackspace キーを送る」 をオフにして TERM=xterm ではどうなんだろう。 すると、vi と jless はいけるんだが、今度はzsh がダメ。 むき〜〜〜〜〜。

くくく、それじゃ 「delete キーで backspace キーを送る」オフ、 TERM=xtermにして screen 起動でどうだ。 よおおおおおしこれで全部通ったあああ!

まとめると、どうやら zsh, vim, jless のそれぞれにバラバラの条件があるらしい。

  • zsh は「delete で backspace」か screen が必要。
  • vi (vim) は xterm-color じゃない $TERM が必要。
  • jless は本物の delete キーを欲しがる。 「delete で backspace」を付けてはいけない。

結論。まず jless をまともに動かすためには 「delete で backspace」を付けてはいけない。 しかしそれだと zsh と vim で困るので、 TERM=xterm にして、さらに screen を起動。 マジでうざい……。

(00:03)

Terminal.app から以下略 (2)

.zshrc の先頭に以下のコードを入れて全自動になった。

if [ $TERM = xterm-color ]   # remote login from Mac OS X
then
     export TERM=xterm
     screen
fi

当然ながら、家では Mac 以外に xterm-color を送ってくる端末がいないことが前提である。

(00:25)


2007-02-12

1964年の池袋

http://phoenix.mo-blog.jp/cafegoraku/2006/01/post_edc3.html

わけあって池袋の歴史を調べてたら、 東京オリンピック当時の池袋東口の写真を載せてるブログが見付かった。 あまりに雰囲気が変わってなくてギョッとした。

(04:55)


2007-02-14

net/http の NTLM パッチ

net/http の NTLM パッチをくれた人からメールが来たので、 とりあえず返事書いた。要約すると、 「sspi.rb を自分でメンテしてくれるなら別にいいよ」 ってことで。

ところで、この日記で愚痴ってたのを 連絡してくれた人がいるそうで、助かりました。 どうも最近 ruby-core で英語メール書くのが きつくて…… (自分宛なら結局返事を書くんだけどさ)。

ruby-talk は流量多すぎてもはやついていけず。 いちおうスレッドの Subject だけは見てるけど、 全然関係ない Subject はさくっと無視します。

(21:09)

パソコン?リサイクル

いいかげん動かないコンピュータくらいは捨てようと決意して パソコンリサイクルについて調べた。

回収はメーカーごとなのか。 DEC のパソコンは誰が回収してくれるんだろう。 合併されたら責任は合併した会社になるのかな。 ということで hp にメールを書いてみた。

メーカーが回収できない場合には パソコン 3R 推進センター http://www.pc3r.jp/home.html というところが回収してくれるらしいのだが、 サーバ・ワークステーションは対象外って書いてあるんだよな。 ワークステーションを捨てたくなったらどこに頼めばいいんだろう。

富士通の回収スキーム http://azby.fmworld.net/recycle/about_recycle.html によると、サーバ・ワークステーションは 「廃棄方法は市区町村にご相談ください」らしい。 つまり粗大ゴミってことかなあ。 まあ、それも聞いてみるか。

(21:29)

パソコン?リサイクル (2)

むっ!

http://www.city.inuyama.aichi.jp/kurasu/gomi/recycle/002.html

DEC・COMPAQ については hp に連絡しろって書いてあるな。 やっぱ買収・合併のときは買収したほうに責任が移るようだ。

サーバ・ワークステーションについてはこんな記述があった。

http://www.city.nanto.toyama.jp/webapps/www/service/detail.jsp?id=2289

> ただし、プリンターなどの周辺機器、ワープロ専用機、PDA、
> ワークステーション、サーバーなどは対象となっていません。
> (小型家電品として「燃えないごみ」の日に出せます。)

どうやらサーバ・ワークステーションには回収義務がないようである。 いえーい。

(21:40)

Mail.appの行折り返し

Mail.app の format=flowed による行折り返しをやめさせるべく、 もういっかい StopFold を試す。

えーと、Mail.app を終了して、 ~/Library/Mail/Bundles に StopFold.mailbundle をコピーして、

~/src/stopfold-0.3 % defaults write com.apple.mail EnableBundles YES
~/src/stopfold-0.3 % defaults write com.apple.mail BundleCompatibilityVersion 2

で、起動と。うあー、やっぱだめだ。 なんでだめなんだよう。

ざくざく検索してると、EnableBundles を書き込むときに

% defaults write com.apple.mail EnableBundles -bool True

としてる例もあった。 これも念のため試してみたが、やっぱダメ。 もしかしてこの値がちゃんと書き込まれてないのかなあと思ったけど、

~/src/stopfold-0.3 % defaults read com.apple.mail | grep -i bundle
    BundleCompatibilityVersion = 2;
    EnableBundles = 1;

と、いう出力を見る限り、ちゃんと書き込まれてるし。

API が変わったのかとも思ったんだけど、 class-dump で見る限り、 StopFold が置き換えてるあたり (NSAttributedString) は何も変わってないんだよな。 なんなんだろういったい。

そもそも、コンソールを眺めていると、 StopFold がロードされたっていうメッセージが出てない。 どうやらロードすらされてないらしい。ということは、 どうにかしてロードさせられれば勝てるかもしれん。

あああ、いったいどうしてなんだろう……って、 StopFold.mailbundle を ls してもディレクトリになってないな。 なんだこれ。

……おや?

あれ?!

えええ? なんだこれ? Finder だとディレクトリに見えるのに ls だと空ファイルに見えてる。 なんだこれは。どうしてこんなことになってんの? よくわからないが、とりあえず rm して cp -r でコピーしてみよう。

げっ、今度は動いた。マジかよ。

なんか原因がよくわからない。 Xcode から DnD したのがダメなのかーと思ったけど、 いま試すとシンボリックリンクになる。 少なくとも空ファイルにはならないな。 シンボリックリンクになってるのを ロードしようとするとダメとかそういうことか?

うーん、まあ最終的に動いたからいいか。 これで安心して Mail.app が使えるよ……。

(23:51)

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

ささだ [すげぇ。Subjectも見てるのか。]

青木 [いやそりゃSubjectくらいは見るでしょ。
Subjectだけなら1日5分で終わるよ。]


2007-02-15

パソコンリサイクル (3)

やっぱ DEC のパソコンは hp で回収してくれるらしい。 でもってサーバ・ワークステーションはダメ (粗大ゴミ) らしい。

(10:22)


2007-02-16

Ruby/SDL on Mac OS X (1)

わけあって Mac OS X 上で Ruby/SDL のインストールを試みる。

……げっ、X が必要なのか。 くそう、できるだけ X は入れたくなかったのだが、しょうがない。 Mac Ports で入れて、Ruby/SDL のテストしたら消そう。

[参考になりそうなページ]

うーむ、なんか激しくめんどくさそうだな。 なんでこんなに面倒なんだろう。 上記のページを見ていった感じ、 原因は二つありそうだ。

一つめは、Mac OS X のウィンドウシステム (というか Cocoa かな) とのインタラクションのために特殊な初期化が必要なこと。 そのためにはパッチを当てて特殊な Ruby を作る必要がある。 これは Windows で言う ruby (エントリポイントが main) と rubyw (エントリポイントが WinMain) の違いに対応している。

二つめは、SDL ライブラリ自体が特殊な初期化を必要としていること。 エラーメッセージから見て、 おそらく Cocoa に接続してるんだと思うんだけど。 C レベルだと SDL は main をマクロで置き換えて独自の初期化を入れているが、 Ruby だとそういうことができないので死ぬと。

ただ、一つめの問題と二つめの問題は 重複しているような気がするんだよな。 拡張ライブラリか、せめて組み込み Ruby インターフェイスでどうにかできんのかこれ。 だいたい SDL にしても、 main をマクロで置き換えるしか手段がないというのは酷い。 なんか代替手段はないのかよこれ。

Ruby/SDL on Mac OS X (2)

SDL のソースコードを見てみた。……うーん、ほとんど当たってる。 そもそも、rubyw を作るパッチてのが SDL から切り出したように見えるな。 関数の名前が全部同じだ。

これで SDL の関数を呼んでいなければ 単純に rubyw で置き換えられるわけだが、 そういうわけにもいかなそうだなあ。 そもそも rubyw パッチはちゃんと動いてたのか? 見る限り、src/main/macosx/SDLmain.m には SDL アプリケーションを終了させる専用コードが入ってるから、 これを省略しちゃったらまずいんではなかろうか。 それとも SDL の quit イベントというのは Cocoa の終了イベントそのものなのかな。 それなら実際には問題は起こらないけど。

うーん。とりあえず、rubyw パッチをパッチじゃなくて 組み込み Ruby アプリケーションにしてみようかな。 いまどき 1.8.2 なんて使いたくないし。

(22:05)

Ruby/SDL on Mac OS X (3)

パッチをファイルに戻して、 1.9 でも rubyw を作れるようになった。 ……と思ったけど、なぜか 1.8.2 の libruby にリンクされている。 cc に -L を付けるのを忘れてた。

動いた。ちゃんと Dock に出てくるなあ。 でも終了ハンドラがないので強制終了しかできない。

うーむ、作ってみてわかったんだが、 これは RubyCocoa の処理とかなり重なってるような気がする。 うまく組み合わせれば pure Ruby + RubyCocoa + Ruby/SDL で行けるのではないか。 見た感じ、SDL の独自の初期化のほとんどは RubyCocoa で書けそうである。 いまのところ足りないことがわかってるのはプログラム終了部分で、 SDL のイベントを送らなければいけないように見える。 ここを Ruby/SDL のコードで (Rubyで) 書けば パッチも拡張ライブラリも組み込み Ruby もなしで行けるのではないか (もちろん RubyCocoa と Ruby/SDL は拡張モジュールだけど)。

(23:47)

Ruby/SDL on Mac OS X (4)

うーん、やっぱ当面は rsdl を使うのがてっとりばやいな。 もうちょっと俺の RubyCocoa での経験値があがったらどうにかできるやもしれん。

(02:37)


2007-02-17

Mail.appのエディタに関する問題

日常的に使いはじめるとやっぱけっこう問題があるなあ。

まず、ファイルをテキストとして挿入する手段が見付からない。 diff をその場にはっつけたいのに。 しょうがないから一回 Emacs で読み込んでコピペしてるけど、 めんどくさくてしょうがない。 端末からコピペだとタブが消えるし。最低だ。

もいっぱつコピペがらみの問題。 Wiki から (ブラウザから) 長い文章をコピペしたら、行間情報までコピーしてくれた。 標準テキストなのにも関わらず。どうにかしてこれを元に戻そうとしたが、 リッチテキストにしてもそもそも行間を制御する設定が存在せず、何やっても元に戻らない。 しかも最低なのが、送信するメールにまで情報が残ることだ。 なぜか行の間に空行が入ってる。これは完璧にバグだろ。

ついでに Mail.app じゃないけどコピペにまつわる問題その3。 あ、いや、Adobe reader から Mail.app だから関係はあるか。 Adobe reader から数式とかルビ混じりの文章をコピペすると激しく化ける。 まあ、これはたぶん文字コードがらみもあると思うので、 しょうがないって言えばしょうがないんだけどさ、 もうちょっと素直にコピペしてくれてもいいと思うんだよなあ。 なんで Π (ギリシャ文字の大文字 π) が Q になるんだよう。

行の折り返しもそうだけど、Mail.app はどうも文章作成側がヘボい。 表示関係とか SPAM フィルタとか検索は気に入ってるので なんとか Mail.app を使いたいんだが、このままではEmacs で文章を作って Mail.app に貼り付けるというアホなことになってしまう……。

もうなんか、あまりにムカついてきたんでフィードバックを送信しまくっておいた。

(20:08)

Mail.appでファイルをテキストとして挿入 (1)

嘆いていてもしょうがないな。 TextEdit でテキストの文字数を数えられるなら、 Mail でファイルをテキストとして挿入することもできるのではなかろうか。 メールを複数編集してたときが問題だけど、それはあとで考えよう。

(20:22)

Mail.appでファイルをテキストとして挿入 (2)

はっ! そうだ! Finder からファイル (の内容) をコピーできれば、 ペーストするだけでうまくいくな。 この方向で考えてみよう。

(20:27)

Mail.appでファイルをテキストとして挿入 (3)

ファイルやクリップボードの内容をテキストとして読み込んで、 他のアプリケーションにテキストを再エクスポートするアプリケーションを作ればいいのかな。 結局 xclipstr みたいのだよな。 俺はどこに行っても似たようなもんを作ることになるんだなあ。

いちから作るのもアレだしな。テキストエディットで開いて、 標準テキストに変換して、すべて選択してコピー、でいけるだろうか。

(21:07)

Mail.appでファイルをテキストとして挿入 (4)

……というか、こんなのはすでになんかあるような気がしてきた。 お、Change into Plain Text というソフトを使うとプレーンテキストへの変換はできるっぽいな。

……なにい! pbcopy / pbpaste ってコマンドがあるのか! これでいいじゃん!

(21:35)

tDiaryのaccesskeyではまる

普段この日記はメール経由で書いてるんだけど、 ときたまウェブから更新するときもある。 で、Safari は普通のテキストエリアだと Emacs キーバインドになるんだけど、 なぜか tDiary のときだけ Ctrl-a, e, p, とかがinput に奪われるんだよね。 行の先頭に戻ろうと思って Ctrl-a 押したら更新されたりとか。 BitChannel だとそういうことはないので、 なんでだろうと気になっていた。

で、今日ようやく理由がわかった。 input に accesskey が指定されてると、 Ctrl + accesskey がそっちに取られる。 やってくれたよ Safari。

こんなのやってらんないので、 tDiary のテンプレートからあらゆる accesskey を抹殺しておいた。

(23:09)

tDiaryのaccesskeyではまる (2)

「tdiary accesskey safari」で検索したら、 けっこう同じ事例が出てくる。 みんなハマってるんだなあ。

(23:17)

日記のデザインを変えてみた

accesskey をいじったら止まらなくなり、結局デザインをかなり変えた。 まあ、見たところ h1 が出たことくらいしかわからんと思うけど。 コードもかなりいじっている。

(04:22)


2007-02-18

日記のデザインなど変更

いろいろ変えた。

  • 日ごとのページのナビゲーションバーから「この月」にリンク(独自実装)
  • 月ごとのページのナビゲーションバーから「前月」「次月」にリンク (独自実装)
  • tdiarygrep の History ボタンを左に移してみた
  • アイコンちりばめてみた
  • 日付ごとに「この日の日記を編集」ボタンを設置 (これは俺にしか関係ない)

(07:05)

Mail.appでファイルをテキストとして挿入 (5)

あああ、すっかり tDiary モードになっていた。 何してたんだっけ俺。 そうか Mail でファイル挿入しようとしてたんだ。

なんか pbcopy でいけそうだな。

% pbcopy < ec.diff

で、CMD-V でメールに貼り付けられる。 diff の出力をこれでつっこめばいいな。

……と、思ったら問題起きた。 マルチバイト文字 (EUC-JP) が入ってるとうまく動かない。

ううむ。UTF-8 に変換したらいけたりするのか? → だめぽい。超期待したのに。

お、JIS だといけた! しかし今度は Mail への貼り付けで化ける。 なんだそれは。

ということは残るは SJIS か。 おお! SJIS だと大丈夫だあー。 これをシェルスクリプトにしておこう。

#!/bin/sh
nkf -s ${@+"$@"} | pbcopy

ペーストボードの中身を強制的にプレーンテキストにするのもpbcopy と pbpaste でいけるな。

#!/bin/sh
pbpaste -Prefer ascii | pbcopy

これで OK。なんだ、できてみれば簡単だったな。

(09:12)

元々の元

そもそもなんで Mail のコピペがどーのこーのと言い始めたかと言えば、 リファレンスマニュアル第三段階はじめるよーというメールを書こうとして Wiki から作業手順をコピペしたら酷いことになったというのが今日の最初の事件であった。

そんなわけで今日もまた第三段階は始まりそこねたのであった、まる。 いまから寝るとたぶん夜に起きるから、たぶんそのころ書くよ!

(09:49)


2007-02-19

予定ツメツメ

るびま本の校正が来ることをすっかり忘れていた。 22 日から松江だから、それまでに終わらせないと……。

はやいとこリファレンスマニュアルも進めないといけないし、 ふつぱいらもあるし、プライベートなタスクもあるし。 やっばいなー、全然暇ないじゃん。 論文が終わったら余裕ができると思ってたんだけど、大間違いであった。

うーん、リファレンスマニュアルの #@todo 入れは自分でやろうと思ってたけど、 これも誰かに任せようかなあ。

(10:05)

Amazonギフト券

Amazon のギフト券、安くなってないか? 確かこの前まで 10000 円買ったら 1000 円のギフトカードをくれたと思うんだけど、 12 月は 500 円だった。

1 月は (論文のために) 6 万も使ったけど、やっぱ500 円なのだろうか。 そういやポイント制になるのはいつからだっけ。 ……2 月か。ということは 1 月分はまだギフト券なのかな。

(10:21)


2007-02-20

メール環境の SSL 化

外出に備えて、超大急ぎで SMTP と IMAP を SSL 化する。

とりあえず止まっても被害の少ない IMAP のほうからやってみる。

% sudo aptitude install courier-imap-ssl

完。

もうちょっとだけ書く。 実際にはこんな素直にはいかなくて、 そもそも courier-imap-ssl パッケージが必要ということがわからんかった。 だって courier-imap の設定に SSL なんたらって書いてあるんだもん。 そうしたら、いかにもその項目を設定すればよさそうに見えるじゃん。 で実際サーバも上がってくるんだけど、それではいかんらしい。 実に紛らわしい。

この勢いで exim のほうもやってしまおう。 STARTTLS と plain auth を使う。

設定はテンプレそのままで行けたので特に問題なし。 ただし /etc/exim4/exim.key とか exim.crt とか passwd のオーナーを Debian-exim に変える必要があった。

……うう、Mail.app からつなぐと "A TLS packet with unexpected length was received" と言われて接続が切れる。なんだこれは。

そういえば net/smtp が STARTTLS に対応していたなあと (作者なのに) 思い出し、試してみると、サクッと通ってしまった。 ううむ、これはむしろ嫌すぎる。

そもそも Mail.app は STARTTLS なんだろうか。 実は SMTPS でしたとかいうオチはいやだぞ。 なんかこのへんの情報が全然ないなあ。

うーん、もういい。 あきらめて外から送信するときは IMAP の Outbox を使うよ。

(07:31)

リファレンスマニュアル刷新計画

重い腰を上げてようやく各方面にメールを投げた。

さて第三段階はガシガシとドキュメントを書くわけだが、 具体的にどのくらいあるのだろうか。

~/c/bitclust % ruby tools/stattodo.rb ~/c/rubydoc/refm/api/src
14349 / 14349 (100.0%)

15000 エントリだそーですよ。うはー。 ちなみにそのうち tk が 5000 エントリくらい。

(09:22)

雨だ

ダッシュボードの天気予報ウィジェットを見て、 外で雨が降っていることを知るという不健全っぷり

(09:38)

i686-darwin8

スタックのアラインメントが憎い

(10:27)

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

ささだ [ssh portforwarding じゃだめなの? 俺は全部そういう環境。]

青木 [ポートフォワーディングかあ。そっちはあまり考えてなかった。
できればコンポーネントが少ないほうが管理は楽だしなあ。]

青木 [ツッコミメールが死んでいた。ツッコミテスト。]


2007-02-21

SSHでSMTPを転送

ささださんのツッコミに従って SSH ポートフォワーディングを試してみた。

~ % ssh -f -2 -N -L localhost:10025:mail.loveruby.net:25 mail.loveruby.net

と実行しといて、 Mail.app から localhost の 10025 番に接続する。

あれ? なんで失敗するんだろう。 telnet だとちゃんと exim が出てくるのだが。 いやログイン失敗だから接続はできてるんだな。 パスワードが違う? そんなことないよな昨日このパスワードで試したばっかりだし。

わかった! SMTP/TLS 以外のときには SMTP AUTH がオフになるように設定してたのが裏目に出たんだ。 ポートフォワーディング時はローカルホストからの接続になるんだから SMTP AUTH はいらないな。認証なしにすればいい。

よっしゃ通ったー。

(17:27)


2007-02-23

松江開発合宿

松江のオープンソースラボに来ております。 参加者は、まつもとさん、笹田さん、前田さん、うささん、中田さん、青木。 まあ、わたしはオマケなんですが。

昨日の話題アラカルト。

新しい仕様を入れるのは延期して、12 月ごろの仕様で1.9 を出すらしい。

M17N をその 1.9 に (本当に) 入れるらしい。 M17N を入れたとして -K や環境変数をどのくらい影響させるかいろいろ検討した。 File は -K を反映すればよさげ。 stdin, stdout, stderr だけは環境変数も反映? (Python もそうらしい) Windows で Dir.glob すると encoding がユニコードになったりする? ソケットはデフォルト binary のがいいかも。 その他の文字列を返すシステムコールは binary か。 StringIO は最初に与えた文字列のエンコーディングとかか。 #string で文字列を得るときに渡す方法もありうるかも。

文字列のエンコーディングが決まるのは読み出し時のみで、 書き出し時にはエンコーディングのことは何も気にしない。 勝手にエンコーディングを統一したりしない。 エンコーディングを変換してくれるストリームみたいなものはあってもよい。

ヒアドキュメントの、文字列本体のインデントを削る文法を導入したい。 どこまで削るか。 終端記号のインデントまで? 本体 1 行目のインデントまで? 本体中の一番浅いインデントまで? タブは 8 スペースか。

private メソッドの仕様どうするか。 いずれにしても 1.9 には入らないので好き勝手な案が乱れ飛ぶ。 ちなみに俺は 「もう protected なんて廃止して今の private 相当にしちゃえばいいんだよ! (代わりに private がクラスプライベートになる)」 という互換性なんてまるで考えてない案を挙げてみた。

(09:55)

Mac OS X でのダイナミックロード

Mac OS X で Ruby をコンパイルしたときの警告を見ていて、 Mac OS X で dlopen が使われていないことに気付く。 OS X 10.3 以降は dlopen が推奨らしいので、 dlopen を使わせるように変更した。 オープンソースラボから記念コミット。

(10:32)

Ripper on 1.9

1.9 で make test-all すると ripper が死ぬ、 ということでデバッグ。

新しく追加された規則に Ripper 用アクションがなくて、 $$ で変なふうにアクセスしてしまっていたのが原因だった。

(12:29)

松江合宿 (2)

まつもとさん、笹田さん、中田さんが 3 人で多重代入まわりの NODE の構造について (キーワード引数をみすえたりみすえなかったりしつつ) 議論していたのがようやく終わった模様。

そのかたわらで俺は yarvtest 以下のテストをひたすら test/ruby にポート。 何も失敗しなくてつまらない……とか言ってたら、

a, *b, c = 1, 2, 3, 4

で testrb が戻ってこない。 test_assignment.rb は 2 つエラーか。

TDD (two-channel driven development)。

おんせんにはいりたいなあ

(16:28)

松江合宿 (3)

マシン移動のアレで ruby-cvs ML が止まっていたらしい (いまは復活してる)。

Windows 関係でシグナルハンドラが全然動いてなかった疑惑。

今日はみんなコミットする日らしい。

__FILE__ が毎回違うオブジェクトを返すということを初めて知る。

(16:31)


2007-02-24

松江合宿 (4)

夕食時の話題。

キーワード代入。 実はキーワード引数ってキーワード代入があればいいんじゃね? という話。

(verbose