ここ数日のラッシュが終わって、 さて何をしようなあ……と気楽な気持ちで ToDo を整理していた、の、だが……
るびま本の再校が来てるじゃん (締め切り 3/5 内)。 ぜんぜん気楽じゃないっ。
しかしこれが終われば本当に楽に……ならねえ。 ふつぱいらを 3 月中に目途つけないといけないんだった。 諸々の事情でかなり放置してしまったから、 3 月内くらいは本格的にやろう。
(23:27)
いま MacBook に 15 枚ウィンドウを出してるんだけど、 この状態で expose を使うとすげー表示がカクカクする。 どうやら 10 枚くらいがきれいにアニメーションできる限界っぽい。 たぶんチップセット統合グラフィック (Intel GMA950 だっけ) がへぼいせいだろう。 メモリもかなり足りてなさげだけど。
確か MacBook Pro はチップセット別立てのグラフィックチップが載ってるんだよな。 モニタももうちょっと広いのが欲しいし、 次の MacBook も統合型だったら今度は Pro を買おうかな。
(23:16)
おれは秘かに fcgi.rb のメンテナでもあったのだー。はははははは
……メンテするプログラム多すぎだって、マジで。
fcgi.rb をマルチスレッド対応すんのは、確かすげー簡単なんだよ。 @default_parameters['FCGI_MAX_REQS'] に 1 以上の値を入れて、 FCGI#each_request の yield でスレッドを起こせばいい。
と思ってコードを眺めてたら、 マルチスレッドの話はその通りだったが、 graceful exit の条件が完璧に間違ってたことに気付いた。 これでは全然 graceful じゃない。
まあそれはあとで直すとして、スレッドのほうについて考える。 #each を使うのをあきらめて #finish を復活させると スレッド起動部分を外に出せるな。 そのほうがいいような気もする。 YARV 後だとスレッドプールを使いたいこともあるだろうし。 よし、思いたったが吉日で即導入。
(02:49)
いや、嘘だった。俺が嘘だった。 やっぱシングルスレッドの graceful exit はこれでいいんだ。 マルチスレッドになるとちょっと変える必要があるってだけだ。
(02:53)
ああそういえば、俺がメンテしてるのは pure Ruby なfcgi.rb だけね。 fcgi.so は別の話。 gem がどうなってるのか知らんのだけど、どっちなんだろうね。
(03:32)
あれ? libfcgi 2.4.0 は MAX_CONNS=1, MAX_REQS=1 に固定されてるな。 もしかしてネイティブの libfcgi ってマルチスレッド対応してないのか? なんかそれもちょっと考えづらいのだが。 どっか別のところにソースがあったりする?
(04:10)
クライアント側でマルチスレッドを実装しているライブラリが見付からない。
Perl はたぶん libfcgi の中にあるやつだよな。 これは libfcgi そのままなので、シングルスレッド。 標準添付の CGI::Fast.pm もいちおう見たけど同じ。
Python の FastCGI 実装の最新版はどこにあるんだ。 http://alldunn.com/python/fcgi.py でいいのかなあ。 last-modified が 2000 年なのがすごい気になるのだが。 少なくともこのファイルでは MAX_CONN=1, MAX_REQS=1 なので、 シングルスレッドだな。
Java も libfcgi の中にあるやつはシングルスレッド。
えええええ? もしかして本当にマルチスレッドクライアントなライブラリって存在しないの? マジかー。ちょっと信じられないんだけど。 誰かマルチスレッドな FastCGI クライアントライブラリを知ってたら教えてください。
(05:21)
なんでこういうことになったんだかよくわからないのだが、 net/smtp で自動 STARTTLS をサポートした。こんな感じで。
require 'net/smtp' s = Net::SMTP.new(host) s.enable_starttls_auto s.start(helo, user, pass) { s.open_message_stream(from, to) {|f| .... } }
TLS 系のメソッドはガッツリ変えました。 このへんはどれも 1.9 から追加されたメソッドなので、 後方互換性はいっさい保たれていません。 これが 1.9 の宿命なのであきらめてね。
なお net/pop も同様に変更予定。
(09:34)
文字列 str の 2 行目以降を取ろうとして str.lines[1..-1] と書いたら NoMethodError を食らった。 ああ、enumerator だからか。 これはちょっと、どうなのよ。
ということで ruby-dev にメールを投げる。
投げてから考えついたんだけど、 str.lines.drop(1) という逃げはありうるな。 しかし、だから aref がいらないかというと、うーむ。
やっぱり、本当の行配列を得る方法も必要なのではなかろうか。
(10:06)
今回は [1..-1] だったから drop でもよいが、 [0..-2] とかだと rdrop がないとうまくない。 やっぱ rdrop は欲しいな。
lines[1..-2] みたいな場合ってどれくらいあるだろう。 行指向の文法で、ターミネータが前後にある場合か。 いかにも必要になりそうだなあ。 やはり drop_both も入れといたほうがよいやもしれん。
あ、drop_both のメソッド名は、lrdrop というのはどうだろうな。 見にくいか。
(10:16)
前回の書きかたはちょっと誤解を招くなあ。
いま問題にしている fcgi.rb のマルチスレッド化というのは、 単にライブラリのコードをマルチスレッドセーフにするという話ではない。 アプリケーションに、複数の FastCGI リクエストを並列に処理させる話である。 まあ、その結果として並列にレスポンスを送り返す必要が出てくるので、 結局マルチスレッドセーフにもしないといけないんだけども。
で、俺が一番困ってるのは実装ではなく、 並列発行をオンオフするインターフェイスである。 もし前例があるんならそれの真似して済まそうと思ったんだけども、 それがないみたいなのでどうしようかなと。
でもまあ、ないんならないで勝手に都合のいいインターフェイスを 作っちまえばいいわけだから、それはそれで楽だ (それで実は前例があった、ということになると困るんだけど)。 いまんところ Hash 引数を使おっかなーという気分になっている。 こうね。
FCGI.each_request(multithreads: true) do |req| .... end
この場合、FCGI_MAX_CONNS と FCGI_MAX_REQS は適当なデフォルト値になる。 パラメータを細かく制御したいときは同様に
FCGI.each_request(multithreads: true, max_connections: 10,max_requests: 50) do |req| .... end
とする。MPXS はデフォルトで true なので必要ない。と思う。
(07:19)
リファレンスマニュアルでの返り値の記述について真面目に考える。
返り値について、何を書くべきだろうか。
……うん、まあ、こんなもんでしょう。 型は意味じゃないのかと問われると困るが。
では、どのように記述するか。 基本的に、意味は日本語で説明しなければならない。 で、それをどこに書くかだ。
うーん。俺としては、あんま @return 使いたくないんだよな。 既存のドキュメントを見るかぎり、 @return を導入してもあんまりうまく文章を分けられそうにない。
例えば String#index のように返り値が重要なメソッドの場合 (function 的なメソッドと呼んでおく)、 第一段落 (メソッドの要約) に書くべきだろう。 「パターン pattern を文字列から検索し、そのインデックスを返す。 パターンが見付からなかったら nil を返す」 で十分に返り値の説明になっていると思う。
また Array#each のように返り値なんてどーでもいいメソッドの場合 (procedure 的なメソッドと呼んでおく)、 そんなもんはどーでもいいので引数の説明のあとにでも 「self を返します」と一言書いておけば十分だろう。
それに対して引数の説明はけっこう繁雑であるし、 引数と違って複数ありうるので、 @param を導入する意味はあると考える。 例えば String#index の第一引数 pattern について 条件を詳しく説明したほうがよいだろう。
ということで、俺としては @return は導入せず、 引数の意味が重要なときだけ第一段落に書く、 というのがよいのではないかと思う。
(20:10)
返り値の型を書くべきだろうか。 また、書くとすればどう書くべきだろうか。
うーん。どうなんですかねえ。書く場合のデメリットを挙げると、
うう、なんかすでにこの時点でヤバいような気がしてきた。 ML にはいちおう型の記述方法の提案を出してはみたけど、 やっぱやめよっかなあ。
(20:15)
@param を導入した主な理由は、 チェックを自動化し、書き忘れを防ぐことである。 実はあんまり再利用については考慮していない。 したがって @return についても @param と同様の規準で考えてみよう。
@return を導入するとチェックが自動化できるか。 んー、まあ、できるよな。書いてあるかどうかはわかる。
しかし、@return がなかったら返り値について書き忘れるかというと、 それはどうなんだろう。 function 的なメソッドで返り値を面倒だからとか、 うっかりとかで書き忘れることってあるのだろうか。 procedure 的なメソッドで忘れることならありそうだけど。
うーん、そうか……。 procedure で書き忘れるのを防止するために @return を導入する、 というのは意味があるな。 でもって、書き忘れのないようにするために @return を導入するなら すべてのメソッドにつけることにしないとまずい。
付けたほうがいいという結論に傾いてまいりました。
(20:27)
■
Siena. [procedure 的なメソッドだと、事実上未定義、ということもありますよね。
self を返すのか、最後に評価した式を返すのか、意識してないコードとか。
後付けで self を返すことにする、と決まったり。
というわけで、@return 未定義、も許容するの希望。
あと、どんな例外が上がる可能性があるのかがリファマに書いてなくて、不便に思うことがしばしば。
いろいろテストして大丈夫だろうと思ったコードで、後になってから思いもよらぬメソッドから思わぬ例外が発生して、あちこち対処しなくちゃならなくなったり。
すごれんすまにゅあるでも、例外の記述は変わりません?]
■
青木 [このルールは標準添付ライブラリまでの範囲の話なので、返り値はすべて決まってる (決めてもらう) ものと考えてます。書いてなくても結局使う人がいるんだもん。
例外は @raise で書きます。]
■
Siena. [なる。@return は、それはそれで納得です。
書いてなくても使うひと対策で、「未定義」として決定を先送りする、というのは無しということですね。
えと、@raise で書けるのは分かるのですが。
果たして、発生する可能性のある例外を漏れなく網羅するという方針なのかしら、ということでして。]
■ 青木 [もちろん、全部書くのが前提です。ただ、SystemCallError の下位クラスとかは現実的に無理なような気もしています。あと、ArgumentError とか TypeError も頻度が高すぎるのでたぶん省略することになるでしょうね。フツー起きる、ってことで。]
■
Siena. [たびたびどうもです。ArgumentError や TypeError については御意。
正直なところ、コーディングの際に Errno::* が厄介に感じてます。
どのメソッドでどんなシステムコールを呼んでいて、どのシステムコールがどんなエラー番号を返す可能性があるのかを把握してないと例外安全なコードを書けないのは、低水準で大変ですよね。
思慮が足りない人なので、テストでカバーしきれなくて、思わぬところで思わぬ例外が上がってしまい。なかなかコードが安定したという安心感を得られず、何か潜んでいいないかと不安がつきまといます。
Ruby を変えて SystemCallError 以下を抽象化するなどは今回の本旨でないので、リファレンスマニュアルとしては、(完璧でなくても) できるだけ文書化されていて欲しいと思うのです。せめて依存するシステムコールの一覧くらいないと、man してとも言いにくいです。]
■ 青木 [書かないとは言ってません。「(OSごとに違う分まで) 全部書くことはできない」ってだけです。POSIXで決まってる分くらいはたぶん書けるでしょう。]
■
Siena. [とても手間がかかり過ぎるので善処するけれどカバーしきれない、ということと誤解していました。失礼しました。実際、それも仕方ない作業量かもしれませんが、できる範囲ででも検討していただければとても心強く思います。
しつこくなってしまってごめんなさい。ここらで退場させていただきます。]
さっきサーバに ssh ログインしたら SSHKeyChain が突然死した。 これはわりとよくあることなのだが、今回はそのあとがある。
「Appleにレポートを送信しますか」のダイアログが出るが、 このダイアログにカーソルを合わせるとずっとレインボーになっててボタンが押せない。 何が起きてんのかと思ってアクティビティモニターを起動したり ダッシュボードを呼んだりした (プロセスモニタが動いてるから) のだが、 どっちも動いてない。 それどころか、ウィンドウを切り替えてしまうと そのアプリケーションが連鎖的にまきぞえくらって止まっていくようだ。
やむをえず電源ボタンを押すと 「再起動しますか」のダイアログが出たが、 このダイアログもずっとレインボーになっててボタンが押せない。 やむをえず別のマシンから ssh で入って sudo shutdown -h now でようやく止められた。
ssh で入れるということはカーネルはちゃんと動いてるということだ。 ウィンドウシステムがどっかおかしくなってたぽいな。 ウィンドウシステムだけ再起動ってできるんだろうか。 launchd になんかシグナル送ればいけるか?
(17:18)
めどい。
現状でも Ruby で 4000 行だから Java だと1 万行は越えるよなあ……。 かったるいなあ……。
超久しぶりに Java 書いたら try 〜 catch の文法を忘れていた。
俺的には MacBook でもマウスである。 確かにトラックパッドも意外と使いやすいんだけども、 長時間使うならやっぱりマウスがいい。 Mighty Mouse はシンプルな外見に反して実は 4 つボタンがあり、 右クリックもできるし expose も呼び出せるしダッシュボードも起動できる。 かなり便利。
スクロールボタンとサイドボタンの割り当ては 「expose - すべてのウィンドウ」と 「expose - アプリケーションウィンドウ」の 組み合わせが気に入っている。
こないだ池袋 BIC で Mac 見てたら F9 が切ってあって愕然とした。 F12 は動くのに。全然ウリがわかってないんだなあと思った。 しかも一番でかいモニタの iMac では Windows XP を起動していた。 本当に何を考えているんだ。 そんなもん、小さいモニタのマシンでこっそり動かしとけ。
expose でけっこう満足してるんだけども、 やっぱりウィンドウ切り替えはキーボードだけでやりたいときもある。 そんなわけで QuickSilver というのと witch というのを入れてみた。 ……けど、けっきょく使ってなかったりして。
便利だとは思うのだが、なんかめどい。 どうも用途に合わない。
(16:01)
ようやく NTLM 認証パッチとやらをマージした。 ext/Win32API/lib/win32/sspi.rb が増えた。 エラーが全部 RuntimeError で rescue できんので 例外クラスを増やしてくれとリクエストしておいた。 あとは net/http 側で他の認証も合わせて もうちょいうまくマージしたいところだな。
(22:29)
長くなったんでこっちに。
F4 とかはだいたい試してみたんですが、 なんか微妙に望むものと違うんですよ。 普段は expose でいいんだけども、 原稿書きのときだけ Emacs と特定の端末だけを行き来したいんです。 でも Cmd+Tab だと端末が複数あるときに全部上がってきちゃうので困る。 witch だと option キーが小さすぎるし右にないので困る。 他のは手数が多すぎ。
ようするに Windows の Alt+Tab が欲しいってことか。 witch を Cmd+Tab に割り当てられればいいんだけども、 その設定方法がわからんのです。 普通に設定しようとすると Cmd+Tab が拾われちゃうし、 かといって Cmd+Tab を切る方法もわからない。 ~/Library 以下をいじるとどうにかできたりするのかなあ。
(23:47)
■
Takayama Fumihiko [Cmd + Tab が押されたときは適当なキーコード (Cmd + Shift + Option + Tab とか) を吐くように
KeyRemap4MacBook をいじるのはどうでしょうか。]
■ 青木 [うう、やっぱそうなっちゃいますかね。最後の手段はそれかなあ。]
■
りんごちゃん [http://www.youtube.com/watch?v=sWa3iuZnHJs
ここで、コマンド+タブに割り当てる方法やってますよ。]
■
さく [わたしはPullTabでCmd+Tabをカスタマイズ可能にしてWitchに割り当ててました。
と書きつつりんごちゃんさんのリンクを見たらまさにそれですね。]
マンガの単行本がいつ出るか知らせてくれる RSS フィードってないんかな。 自分の買ってるシリーズだけ限定で配信されるようなやつ。 こういうのは plagger でできるんだろうか。
http://plagger.g.hatena.ne.jp/SweetPotato/20061119/1163938121
あるらしい。 これは便利そうだなあ。
(11:37)
> ■ りんごちゃん [http://www.youtube.com/watch?v=sWa3iuZnHJs > ここで、コマンド+タブに割り当てる方法やってますよ。] > > ■ さく [わたしはPullTabでCmd+Tabをカスタマイズ可能にしてWitchに割り当ててました。 > と書きつつりんごちゃんさんのリンクを見たらまさにそれですね。]
そっか、PullTab というのを使うとできるんですね。 ありがとうございます。これか。
http://www.ragingmenace.com/software/pulltab/index.html
Dock のロードをフックして Cmd+Tab を取らせないようにするのか。 APE てのが必要らしいけど、 Cmd+Tab だけのために 3 つもソフトウェアを入れるって嫌だな。 もっと単純にできないのかなこれ。
手抜きプログラムで済ませられないか考えてみよう。 APE + PullTab をパラメータ決め打ちで書いたら短かくならないだろうか。 とりあえず APE のソースコードを見てみよ。
……オープンソースじゃないのか。困ったな。
でもまあ、あれだ、ようするに Dock の起動をフックすりゃいいんだから、 なんか手はありそうな気がする。 DYLD_INSERT_LIBRARIES あたりを使えばいいんかな。
(17:44)
そーいえば BitClust は YARV で動くんだろうかー、 と思って試してみたらあっさり動いた。 しかし微妙に遅くなっている。0.03 秒くらい。
~/c/bitclust % time ruby bin/refe.rb -d tmpdb strin index >/dev/null method expand: 0.055 (n_methods:3) class expand: 0.008 (n_classes:1) type expand: 0.009 ruby bin/refe.rb -d tmpdb strin index > /dev/null 0.19s user 0.07ssystem 68% cpu 0.368 total ~/c/bitclust % time ruby-yarv bin/refe.rb -d tmpdb strin index >/dev/null method expand: 0.062 (n_methods:3) class expand: 0.007 (n_classes:1) type expand: 0.008 ruby-yarv bin/refe.rb -d tmpdb strin index > /dev/null 0.22s user0.07s system 72% cpu 0.392 total
んー、でも、起動が遅くなっていることも考えると、 実行自体はそれなりに速くなってるんだろうな。 やはりもうちょっと時間のかかるプログラムでないとあまり意味がない。
パースのほうを計測すれば速度差が出るかもな。 ディスク書き込み直前までの実行時間を計測してみよう。
~/c/bitclust % time ruby =bitclust -d ./tmpdb3 update --stdlibtree=../rubydoc/refm/api/src ruby =bitclust -d ./tmpdb3 update --stdlibtree=../rubydoc/refm/api/src 6.04s user 0.18s system 98% cpu 6.333 total ~/c/bitclust % time ruby-yarv =bitclust -d ./tmpdb4 update --stdlibtree=../rubydoc/refm/api/src ruby-yarv =bitclust -d ./tmpdb4 update --stdlibtree=../rubydoc/refm/api/src 5.95s user 0.20s system 99% cpu 6.161 total
やっぱ微妙に速いな。0.1 秒くらい。 BitClust は I/O と (C レベルの) 文字列処理のかたまりだから、 こんなもんだろうね。
(17:05)
迎撃。フランスだもんなあ。フランスですよ。 気をつけて行ってきてください。
今回は、かずひこさんの壮大にして邪なる計画が明らかになった。 われわれはいかにしてこの強大な力に抗えばよいのであろうか。
akr さんから net/http が遅ぇー、 とのお達しがあったので手抜きコミット。 とりあえずバッファサイズを 1KB → 16KB にしてみた。 なんで select やめたのか調べて、問題なさそうならselect に戻すかな。
モテへの道:最初の飲み会でプロポーズしてはいけない。
(11:56)
リファレンスマニュアル計画。 @param とかの仕様を決めたまま実装してなかったので サクッと実装しますか、と思ったのだが、 refe s i とかやると無限ループかよ、 ってほど時間がかかることに気付いてしまった。
s で始まるクラスはすごい多いし、 i は Object のメソッドにひっかかるので、 組み合わせでものすごいたくさんのメソッドにマッチする。 で、そのものすごいたくさんのメソッドを 全部ロードして線型マッチするので遅い、 ということらしい。どちらかと言えば特にロードが遅い。 新 ReFe では、とにかくロードするエントリ数を押さえることが勝利への鍵である。
これで現状見付かっている最悪のケースでこのくらいまで抑えた。
~/c/bitclust % time refe2 -d db.big s i >/dev/null refe2 -d db.big s i > /dev/null 0.24s user 0.05s system 98% cpu0.290 total
普通はもっと候補が少ないので、もうちょい速い。
~/c/bitclust % time refe2 -d db.big arr map >/dev/null refe2 -d db.big arr map > /dev/null 0.13s user 0.05s system 97% cpu0.181 total
この速度はかなり限界っぽいよ。
(02:54)
http://doc.loveruby.net/refm/api/view/class/Array
全体的に見ためを変えて、一覧ページでは要約だけ出すようにしてみた。
継承したメソッドもいちおう表示してはみたけど、 private メソッドを削ってないせいでエントリが無駄に多い。 system とか出てるし。 コードを改善するまでは名前だけにしておこう。
……というか、同じクラスのメソッドまで出てるなこれ。 なんでだ。
Object のメソッドがえんえん継承されるのも微妙に不便だなあ。 しかしなければないで困るような気もする。
クラスごとにまとめるかなあ。
名前をキーにして継承したメソッドを 全部同列に並べるオプションも欲しいところだ。
結城さんの新作が発表されましたね。 ときどき結城さんの日記で連載されていたやつの書籍化です。 実はレビューさせてもらってたんですが、 一言で感想を言うのは難しいので印象に残ったところをピックアップしてみたい。
蹴りたいのは背中だけではなかった。 「よ?」(nil)。ミルカさんのツンデレ比率 9:1 (当社計測)。 フィボナッチ・サイン (なぜか ONE PIECE を思い出した)。 で、24 乗根。
てことで俺も買うから君も買え。
(15:02)
パーサジェネレータは悩んだすえに JavaCC + jjtree を使うことにした。
この記述の冗長さはどうにかしてほしい。 なんで nonterminal にカッコつけるんだよ?! "AST" + nonterminal 名がノード名っていう jjtree のデフォルトも気に入らねえし。 nonterminal のシンボルは小文字で始めさせてくれ。
値をとるときに val =
<TERM> <TERM> <TERM> a b c
って書くのがいいと思うんだ。
LL(k) はわりと便利。 でもやっぱ演算子優先順位の処理が面倒だな。
(12:44)
~/c/stdcompiler/src % cat test1.cb int main(int argc, char **argv) { printf("Hello, World!\n"); return 0; } ~/c/stdcompiler/src % java -classpath build/classes Compiler --dump-ast test1.cb ToplevelNode ListNode ListNode DefunNode TypeNode FixedParamsNode SlotNode TypeNode SlotNode TypeNode ScopeNode ListNode BlockNode FuncallNode VariableNode ListNode StringLiteralNode ReturnNode IntegerLiteralNode
← いまココ
(16:26)
■
みずしま [こんにちは。
> なんで nonterminal にカッコつけるんだよ?!
一応理由はあって、nonterminalの呼び出し時に引数を渡すためなんですが、
ほとんどの場合、引数なんか渡さないんだから括弧は省略させてくれよ!と
思ったことはあります。
> 二次元的に
> <TERM> <TERM> <TERM>
> a b c
> って書くのがいいと思うんだ。
これだと逆に、nonterminalの定義を変更して、TERMを追加したりしたとき、
<TERM> <NEWTERM> <TERM> <TERM>
a b c d
のようにいちいちそれにあわせて名前の位置をずらさなきゃならないという
デメリットがあるので、どっちがいいかは一概には言えないような。]
■ 青木 [書くほうの手間をとるか、読むほうの手間をとるかによるでしょうね。わたしは読みやすければちょっとくらい書く手間が増えてもいいと思います。それに、規則を変えたらどうせアクションとかも変わるんだろうし、そんなところでせせこましくタイプ量を節約してもしかたないんじゃないですか。]
http://www.falcom.com/info/index.html
とりあえず叫ぶよ! 俺は!
英雄伝説の新作きたあああああ―――――――――――!!
次はキャラとか変えてくると思ってたので空の続きになったのは意外だ。 さすがに次はリベールじゃないんだろうな。 おれ SC だけでもリベール 3 周したし。 やっぱ SC のラストの流れからして帝国の旅かな。 とするとオリビエは出てきそうだけどクローゼはどうなんだろう……。 ジンさんはどこでも来てくれそうだ。 アガット&ティータはギリギリか。 でもなんとか理屈をつけて出して全員出してくれそうな気もするね。
あれ? あと一人いたような。ジョゼットだ。 ……いやわかってますよシェラ姉ね。
というかそもそも主人公はエステルなのか。 SC でレベル 90 以上いったんだから 今回はその続きというわけにもいかないだろうし。 エステルヨシュアがレベル 1 からってのもなんか変だし。 遊撃士ランクももう上がない。 いや S 級が目標ってのもありうるのか。 ケビンが主人公だとしっくりこないしなあ。 一番前面の人もものすごく主人公っぽくないビジュアルだし。 つーか、SC のラストで父ちゃんが 「他の者たちが担うことになるだろう」 って言ってたのはどうなったんだ。
今回は「4th に続く」は勘弁してほしい。
いまからラスダン&ラスボスの音楽が楽しみでならない。 そういえば音楽はまた同じテーマを使うのかな。 また同じだとさすがに飽きそうだが、 しかし変わったらそれはそれでイメージが違うとかの不安が……。
リシャール大佐はどこで出てくるんだろう。 リベール外で出番があるのか。
もしかして別の国だと遊撃士ランクはリセットされる? いやそんなことないよな遊撃士協会はインターナショナルな組織だったはずだ。
そうか帝国だけじゃなくて各国を順番にまわるという可能性もあるか。 あ、これいいなあ。例のなんとか自治区に行けばティータも出せるし、 共和国に行けばジンさんが出せるじゃん。 んで最終章がリベール決戦とかだと燃える。 あーでもそれは二回やったしマンネリ感が出てしまうか。 むしろ帝国首都決戦かな。
FC で、グランセルに全員が集まってくるあたりがすごく好きなんだよなー。 あまりにベタだけどそれがよい。 王城突入からレーヴェ戦につづいてエレベータで降りていって ラストダンジョンの音楽がかかるあたりが最高です。
SC はグランセル襲撃からリベルアーク不時着までがいい。 アルセイユのムービーのあたりで燃えメーターが振り切れた。 でもあのムービー作ったところでスタッフが 力尽きたのかってくらいリベルアーク内部は残念な感じ。 というかその前の四輪の塔も残念な感じ。 執行者が 4 人いるからって同じことを 4 回やらなくてもいいのにさ。 そのへんのバリエーションは FC のほうがよくできていた。
そういや妙に操作しづらいメニューを改善してほしい。 いまどこにフォーカスが当たってるのかわかんないんだよね。
またフルブラン出ないかなあ。 なんかウェブのレビュー見てるとあのなぞなぞがすげー不評なんだけど、 俺はフルブラン大好きです。 敵を倒すだけの手配魔獣クエストより全然おもしろいじゃん。 遊撃士協会の看板を盗んでいくあたりがお茶目だし。
学園祭も大好きだけど。 あのイベントで空の軌跡を抜け出せなくなったんだよな。 そこまではチマチマやってたけど、 学園祭からは 1 日 1 章の勢いでクリアしたから。
その他に印象に残ってる依頼と言えばツァイスの部品探し、 ツァイスの「臨時司書の残業」シリーズ、 ツァイスのスニーカー試作……って、ツァイスばっかりかよ。
ま、何にしてもこれは買うね! たとえパソコン本体ごとでも買うよ俺は!
(00:59)
メモリ不足が限界。 Safari のウィンドウ切り替えが遅い、 ダッシュボード出るのが遅い、 アプリケーション切り替えで待たされる、 端末から Safari に切り替えて調べものして戻ってくると ruby の起動が遅い、javac の起動はもっと遅い遅い遅い。 もう我慢できん。 1GB 捨てるのがもったいねーとか言ってないで 2GB にする。
(20:32)
http://book.mycom.co.jp/book/978-4-8399-2320-4/978-4-8399-2320-4.shtml
るびま本、ようやく出ます。 この本は Rubyist Magazine の添削連載の書籍化です。 既存の記事すべてに加えて書き下ろしが一本入っています。 さらに、 まつもとさん、たださん、咳さん、角谷さん、西山さん、ささださん という豪華メンバーによるコラムもついて超おとく。 公式には 3 月 27 日発売ですが、年度末ゆえ、 店頭に並ぶのはもう少しあとになるようです。
サポートサイトはこちら。
http://i.loveruby.net/ja/rubimabook/
この本のウリは、ズバリ! コラムです。コラム。 このメンバーを集めた時点でほぼ勝ちは決まったようなもんです。
添削はウェブ版に加筆訂正したもの、ということになっていますが、 実際は訂正するばっかりでほとんど加筆していません。 いや、だって、 ただでさえ長い添削記事に加筆したら誰も読み切れないので。 代わりに、連載時はイマイチめだってなかった 「添削ポイント」を本文中で明示したうえ、ID を割り当てて、 本全体を通して相互参照できるようにしてあります。 これでかなりリファレンス的な価値は高まったんではないかと思います。 すえながーく使っていただければ。
(00:47)
Subversion のコミットメール (のログ) が化けるよー!
ということで、いったい何人が書きなおしてるのかわからんが Subversion のコミットメールスクリプトを書き直してみた。
メール送信は SMTP を使う。 レポジトリのエンコーディングとかの環境に依存する部分は 全部コマンドラインオプションから指定させる仕様にした。 詳しくは --help 見てね。
% svn-commit-mail.rb --help Usage: svn-commit-mail.rb [options] <repository> <rev> --svnlook=PATH svnlook command location.(default:/opt/local/bin/svnlook) --host=NAME SMTP server address. --port=NUM SMTP server port. --from=ADDR Mail from. --to=ADDR Mail to. --repository-encoding=NAME Character encoding ofrepository content. --mail-encoding=NAME Character encoding of the mail. --diff-deleted Create diff for deleted files --debug-smtp-mailer Dumps SMTP session. --help Prints this message and quit.
ちなみに --to は複数指定可能。
リファレンスマニュアルのソースコードは euc-jp で コミットログは UTF-8 だけども、 いまんとこ化けずに送れているようだ。
……よく考えると、メール送信は別のプログラムにして パイプでつないだほうが利便性が高いような気がするな。 まあ、それだと今度は --to と --from を二回指定するのがめどいか。 いや To: と From: だけ送信プログラムのほうに生成させればいいのか?
(11:38)
MacBook のメモリを増設して 2GB にしてみた。
2GHz, 2way, 2GB という「2」尽くしなスペックになった。 HDD も 200GB だとモアベターだが、残念なことに 80GBである。
空きメモリがガバッと増えて、 いまのところはかなりスカスカ動いている。 しかし 3 日くらい使い続けたあとでないと真価はわからない。
ちなみにメモリは秋葉原のドスパラで売っていた 1GB 9800 円のバルクモジュール。 チップも得体の知れない安物なのでちょっと心配だ。
(00:14)
MacBook を買って 2 ヶ月くらいたったいまになっても、 おれは次も Mac を買おうと心に決めている。 その原因は何なのか冷静に反省してみたところ、 テキスト入出力環境が主因ではないかと思う。 すなわち、
という 4 点だ。
おれがコンピュータを使う目的は ウェブとメールとプログラミングと原稿書きである。 その 4 つすべてにおいてテキスト表示は重要であり、 また 3 つにおいてテキスト入力が中心的な役割を占める。 したがってテキストの入力と表示の品質がコンピュータ全体の使い勝手を左右する。 その観点において、Mac OS X はおれの嗜好に激しく合っている。 どのような点でおれの嗜好に合っているのか、順番に詳しく述べる。
第一点。まともな端末エミュレータがあること。 シェルが使えない環境で作業するなんておれは無理だ。 プログラミングは端末で zsh と vi を使いたいし、 原稿書きには ReVIEW が動かないと困る。 Windows は「まっとうな」シェル環境を使えるようにするだけで 疲れるから嫌だ。
第二点。いろいろなところで Emacs バインドが使えること。 Mac OS X ではいろいろなウィジェットで Emacs バインドが使える。 構造的には、Cocoa (というか CoreFoundation?) のNSText なんたらの デフォルトが Emacs キーバインドになっているかららしい。 当然カスタマイズもできる。スゲー。
第三点。AquaSKK がヒジョーに、ヒジョーによくできてる。 Emacs のオリジナル SKK (と ddskk) 以外で おれの嗜好に合う SKK は AquaSKK が初めてであった。 具体的には、
この二つの機能がある。それだけ。 こんなの実装するのは超簡単なはずなんだけど、 なぜか実装してない SKK が多くて嫌になる。
あと、安定してることも重要。 Debian の skkinput は、AMD64 だからかもしんないけど、 しょっちゅう落ちてた。あれはいくらなんでも落ちすぎ。 Windows の SKK IME もときどき落ちてた。 しかもアプリケーションを切り替えてると挙動がおかしくなったり、 知らないうちに MS IME に切り替わってたりもした。 そういう変なトラブルが起きると追跡する気力も起きない。 AquaSKK はまだ一回もそういうウンザリゲンナリな 挙動を起こしてないので非常に印象がよい (これから悪くなるかもしれない)。
最後に第四点。フォント表示がきれい。 これは単にヒラギノの品質が高いということにとどまらず、 OS X のフォント描画エンジンまでひっくるめて品質が高いからこそだと思う。 メイリオを OS X で表示させるとけっこうきれいに描画されるって話もあるし。 おれも OS X を使い始めるまでは フォントなんてどうでもいいと思ってたけど、 この美しさは一回知ってしまったらもう戻れないね。 少なくとも、Windows や Linux の既存の表示で満足することはもう永久にない。 ちなみに「既存の表示」には Vista (メイリオ) も含む。
以上の四点が、おれが OS X を使い続けたいと思う理由である。 expose やダッシュボードも好きだけど、 「ぜひ使い続けたい」と思うほどの理由ではない。 逆に嫌な点もやっぱりあるけども、 「もう OS X は使いたくない」と思わせるほどには嫌ではない。
(01:27)
OS X の好きなところを書いたので、 嫌いなところもいちおう書いておきたい。
どう見ても片手落ちです。 Apple 日本支社はもっと強力に要求をねじこんでいただきたい。
enter とかいらないから give me Command
ようするに Alt-V な。 Command-V がペーストだから割り当てられないのはわかるけど、 本当に本当に本当にどうにかしてください。
Finder と Safari と iTerm で全部キーバインドが違うのはどーいうことよ。 こんなんだったら全部ブラウザに合わせて Alt + ← に統一した Windows のがいいよ。 こういうときこそ強権を発動して HIG で統一すべきだろ。
割り当てを変えられるか、 またはアプリごと / ウィンドウごとを選択させてほしい。
あれマジでやめてください。
(01:57)
Safari のキャッシュまわりがどっかおかしいような気がする。 アンテナのページをリロードすると文字化けしたり、 日記をリロードすると一部の画像が表示されなくなったりする。 んでキャッシュを捨てると直る。 なんだろうなこの症状は。 HTTP ヘッダの情報のキャッシュされかたがおかしいとか、 そういう感じなのかなあ。
(02:20)
携帯を変えてみた。W43HII という機種。 どうせメールしか使ってないから一番安いのでいいかなーと思ったんだけど、 1 万円出すとワンセグケータイが買えるというのでそれを買ってみた。
へー。けっこうきれいに見えるんだなあ。 ちゃんとワイド画面で表示されている。 映像が切れたりもしないし、たいしたもんだ。 地震以外でテレビを見るのは何ヶ月ぶりだろう。
それはそれとして、デフォルトのメニューが酷い。 何が酷いって、メニュー項目がフラフラ動いてんの。 わざわざ選択しにくくしてどうするんだよ。 速攻で別のメニューに変えたけど、シンプルなのがない。 アニメーションとかどうでもいいから、 シンプルで見やすいのをつけてほしい。
あとフォントも酷い。 この汚なさはありえない。 解像度が高くなってるくせにフォントの品質が上がってないから無惨だ。 しかも半角カナを使いまくってるから汚なさ倍増。 待ち受け画像とかより、フォントを変えられるようにすべきだな。
ついでに配色も酷いな。 どうしてフォントが汚なく見える配色しかないんだろうか。 待ち受け画像とかより、以下略
(12:20)
さっきから iPhoto でサムネイルを無駄にスクロールしたり 無駄に Safari でタブを大量に開いたり 何度も ruby をコンパイルしたりして空きメモリをなくしてみた (「非使用中」メモリはある) んだけど、全然遅くならないね。 すばらすい。2 万円分の効果はあったらしい。
(16:17)
ちょっと元気を出して net/http の 「Connection: ヘッダの扱いがなんかおかしいよバグ」 を修正しようと思ったら make test-all TESTS=net/http した瞬間にバスエラーで落ちた。 これはもう寝ろってことだよな。うん。しょうがないよバスエラーだし。
(16:19)
Q. 冷蔵庫の奥でキュウリが液状化していました。 これからの人生、なにに気をつけて生きていけばいいでしょうか。
A. 人生まで液状化しないように気をつけろ
(03:10)
Copyright (c) 2002-2007 青木峰郎 / Minero Aoki. All rights reserved.
■ MoonWolf [fcgi.soはネィティブな意味でのスレッドセーフにしたつもり。
fcgi.rbまではちょっと手がまわらない。
体調回復したらメンテナンスに復帰します。
もうちょっとの間お願いします。ほんとすみません。]
■ 青木 [いえいえ、fcgi.rb は自分でも使ってるので別に気にしませんよ。数が多すぎるのは自分の責任ですから。
それはともあれ、確かに fcgi.so はスレッドセーフにはなっているようですが、FastCGI プロセス自体が (まだ) マルチスレッドで動いていませんよね。ラップしている libfcgi が MAX_CONNS=1, MAX_REQS=1, MPXS_CONNS=0 固定ですから。]