トップ 最新 追記

日々の破片

著作一覧

2006-12-01

_ キャンセル待ち

そうか……登録しとけば良かった。

_ MacBookのデザイン

また、ポート類はすべて本体向かって左側に集められ、右側面から見るとさらにすっきりとした外観になっている。差し込んだUSBケーブルなどが、手のひらにあたるノートPCもあるが、MacBookでは、ポート類が集められた左側でも、ユーザーに不快感を与えないようにポート類は、すべてキーボードそのものより奥側に配置されている。

これで“買わない理由”がなくなった

でも、おれは、これは買ってはいけない理由だと思う。ある使い方においては。

実際には、iBook G4 14"がこれと同じデザインだったのだが(USBポートは左の奥)、何が問題かというと、マイクロソフトの比較的使いやすいノート用マウスは、(携帯用でコードが少し短めなので)キーボード上にケーブルをまたがらせないと右側にマウスを置くことができないってことだ。ポートが左奥という一番マウスを置きたい右手前の空間に一番遠い位置にあるので、どうにもならない。ポートが右にもあるPowerBook 15"や後ろにあるX31では使いやすいマウスなんだけど、iBookじゃ使い物にならないし、多分同じデザインのMacBookでも使えないだろう。

ノートPCにマウスを接続するというのは、それほど珍しいことではないように思うのだが、それをまったく考えてないと思えるデザインだ。

でも、もしかするとマカーは(iPodのイヤフォンケーブルとかから想像するに)すごく長いケーブルがついたマウスや、電池が入っているのでケーブル付きと比較すると重たいブルートゥースマウスとかを利用するのかも知れない(何しろ「詰め込んだのは重さではなくパワー」だとMacBookProの宣伝文で電源が入っていることを坦懐に認めているくらいだし)。だとすればこの問題には気づかないだろうな。

早く欲しいな。

_ レシピ

レシピ

レシピ

レシピ

レシピ

_ 神を捜せ(捜神記)

捜神記 (東洋文庫 (10))(干 宝)

(写真はイメージです)

八百万の神々」に納得して考えてみた。

デザインパターンを取り出して、と。

最初は、Abstract Factory、いきなり神じゃなくて向上心の顕れじゃなくて誤変換だが、最後がタとかがいいのでスキップすると、Builder だな。組立神じゃあんまりだ。組合紳士みたいだし。難しい。異物同程神とかどうだろう(とここまで書いてから、Fe2+さんは「カミ」、僕は「シン」と違う語彙圏と気付いたが気にせず先へ進めてしまう)

次はFactory Method……タじゃないからスキップするとPrototype、原初複合神、Singleton、単豚神で間違いあるまい。

どうも生成神たちは難しいな。で、次は構造神たちだ。

Adapterは異世界入出神、Bridgeは橋神(ガチだが異世界結合神として異世界入出神の兄弟にすべきかとも)、Compositeは樹老人、Decoratorは肌憑依神、Facadeは玄武神、Flyweightは3人で30人の身代わりになるような神なんだから身代神かなぁ、でProxyは当然至極に化神だろうか。でもこれこそ憑き神かも。

で振る舞い神は、とか一人でやってても虚空神なんでここまで。それぞれの神にはそれぞれの逸話があり、特に単豚神はおっちょこちょいなだけにエピソードも賑やかである。

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

Before...

_ ksh [あ、そういう意味ではそうですね。 写真を見たら、ヘッドフォンプラグを差すと、左手にガンガン当たりそうに感じたので、つ..]

_ ogijun [実はAppleの純正Mouseのケーブル長は他社と同じくらいだったのですが、白いiBookが出たタイミングで左側ポー..]

_ arton [そこまでして左にしたかったのか(確かに両側にあるPowerBookのほうがコストはかかるだろうからiBookじゃしょ..]


2006-12-02

_ ASRに更なる修正

URL系(今や良くわからないけど、とにかく/\w+:\w*/なやつ)モニカはなんでも認めるようにした(これまではnew:モニカとobjref:モニカだけ特別扱い)。WinNT:モニカとかいつの間に導入されたんだろう。

_ Win32OLEメモ

オプション引数のチェックをしていないので、VT_EMPTYとVE_ERROR+DISP_E_MEMBERNOTFOUNDの設定が曖昧なように思える。副作用があるメソッド呼び出しとかでまずいんじゃないだろうか?

(名前つき引数をASRに移植中)

追記:

  • IDL+C++でサーバ作りまくり
  • VB(4?,5,6)でインテリセンスかC++クライアントでデュアル

てな使い方ばかりなので名前付き引数を実際に使ったことがまったくなかった(位置を使うしな)。で、今回初めて知ったことがいっぱい。

  1. すべてのメソッドパラメータは名前を持つ
  2. DISPIDに入っているのは単なる連番
  3. VBScriptのVBAと異なる点というのには何も記述がなく、しかもオブジェクトは名前付き引数をサポートしていませんというエラーの説明は検索でいっぱい出てくる。が、VBScriptはサポートしていないのでコンパイルエラーになる。これ、なんかおかしいので本当のところを知りたい。
  4. 名前付き引数(named arguments)、名前による呼び出し(call by name)のどちらで検索してもまともな(仕様としての)情報には突き当たらない。
  5. INSIDE OLE second editionを読むと、ほんの少しだがcall by positionとの混在の場合の呼び方については記述してある。しかし名前付き引数自体の情報は少ない。
  6. 名前付き引数のDISPIDを取り出すには、GetIDsOfNamesを呼ぶのは良いとして、配列の先頭がメソッド名で残りがパラメータ名を記述するって、いったいどこにドキュメントされているんだ? と思ったらIDispatch::GetIDsOfNames の説明にほのかに匂わせているのか。これしかし意味が通じないんじゃないか。というか気付いてなかったなぁ。でも、確かに納得のいく仕様だ。以前、複数のメソッドのDISPIDを取得できるのかと思って(配列だから)ずらずら渡したらエラーになったのだが(たまたまそのサーバが1 by 1しかサポートしてないのかと思った)、あの時、ちゃんんと読まなかったのか(またはその時点のMSDNの記述内容がやわかったかどっちか。多分前者だろうけど)。
  7. なお、Win32OLE(ruby-1.8.5)用のパッチ。人によっては幸せかも。

    --- win32ole.c  Mon Jun 19 22:15:58 2006
    +++ win32ole.c.new      Sat Dec 02 15:13:09 2006
    @@ -1914,4 +1914,5 @@ hash2named_arg(pair, pOp)
         unsigned int index, i;
         VALUE key, value;
    +    char* name;
         index = pOp->dp.cNamedArgs;
     
    @@ -1920,5 +1921,9 @@ hash2named_arg(pair, pOp)
         ---------------------------------------*/
         key = rb_ary_entry(pair, 0);
    -    if(TYPE(key) != T_STRING) {
    +    if(SYMBOL_P(key)) {
    +        name = rb_id2name(SYM2ID(key));
    +    } else if (TYPE(key) == T_STRING) {
    +        name = StringValuePtr(key);
    +    } else {
             /* clear name of dispatch parameters */
             for(i = 1; i < index + 1; i++) {
    @@ -1934,5 +1939,5 @@ hash2named_arg(pair, pOp)
     
         /* pNamedArgs[0] is , so "index + 1" */
    -    pOp->pNamedArgs[index + 1] = ole_mb2wc(StringValuePtr(key), -1);
    +    pOp->pNamedArgs[index + 1] = ole_mb2wc(name);
     
         value = rb_ary_entry(pair, 1);
    

_ かっこいい

プログラミング言語の速度

おれもこういうことが言ってみたい。正しい考えだと思うし。が、けものみちがなければ進むこともできないわけで、目の前の熊笹を鎌でなぎはらいながらあっち行ったりこっち行ったりハイキング。それはそれで楽しいところが逆に問題なんだろうけど。

(抽象化の話なわけだから、ここでは速度をコードとそれを記述するための作業量に置き換えれば基幹系システム――に限定する必要すらない――もコンパイラも同じことが言えるだろうという意味において)

_ 老いを意識する

誰がアップルを買ってるか

って、ことは2年くらい前にマカーにもなったのは老いの兆候だったってことなのか!


2006-12-03

_ ASR-1.8.5.4

http://arton.hp.infoseek.co.jp/

RScript/GRScriptを1.2.1.0に更新。

-名前付引数のサポート(名前はシンボルでも可)

-WIN32OLE.connectに与えられたディスプレイ名に:が入っている場合は常にモニカを呼ぶ

(Ruby-1.8.5添付のWin32OLEの上記挙動に追従)

_ Visual C# 2005プログラミング入門

Visual C# 2005プログラミング入門(arton)

以前上梓したVisual C# .NETプログラミング入門の改訂版です。よろしければご購入ください(まだ予約だけど)。

VS2005と題には書いてありますが、Expressエディションでも動くように考慮はしてあります(というか、「Expressエディションで試すには」という形で囲みを入れている)。

VSの利用方法ではスマートタグについての情報を追加、コレクションクラスは全部ジェネリクスクラスに書き直し、イベントハンドラは必要に応じて匿名メソッドに書き直し、スレッドについてはWorkerThreadコンポーネントの利用に改訂など、VS2005、C#2.0、.NET Framework 2.0に合わせて書き直したものです(内容までは変わってないけど)。あと、XMLドキュメントコメントは実感としても重要なので今度は本文に含めています。

最初から書き直したものではないのでCOMとの対比のようなVS6を意識した部分はそのままです(が、それはそれで依然として重要なような気もする)ので、以前の版をお持ちの場合はちょっと微妙かも。

良く見ると最初の版が410ページ程度なのに、450ページに膨らんでたりするから、リプレースだけじゃ足りなくて、本文そのものにも足しまくったようですね。


2006-12-04

_ Atlasをいじる

とりあえず、MSDNからASP.NETサイトに入ると日本語ドキュメント参考訳があったのでダウンロードした。
ASP.NET Developer center

ところが、そのままではインストールに失敗する。権限の問題だ。MSIなのでそのままではsudoできない。しょうがないのでバッチファイルを作る(追記:っていうか、Vistaにインストールしている時点で負け犬の選択をしたような気がしてきた)。

cd ダウンロードディレクトリ
msiexec /i AtlasDocumentation.msi

このバッチファイルを管理者権限で実行してインストールする。

でもそのままでは読めない。VS2005を利用してWebサイトを開くで開く。そしてデバッグ実行する。するとビルドに失敗する。Extensionがないからだ。とりあえず以前のビルドで実行できるが、Extensionを入手する必要はある。

ajax.asp.netへ行き、ダウンロードページへ進む。

とりあえずASP.NET AJAXとASP.NET 2.0 AJAX FeatureとASP.NET AJAX Control Toolkitをダウンロードしてインストールする。ドキュメント参考訳と違ってsudoしなくても最後まで走りきった(途中VS2005が起動されるけど)。GACにインストールするはずなんだが、なんで大丈夫なんだろう? 良くわからないまま後はドキュメント読んでからどうするか決める。

追記:とりあえずインストールが終わったので参考訳のビルドを成功させてみようと試してみたが、やろうとすることすべてアクセス拒否になる……Microsoft.Atlas.Extension.DLLの参照の設定、web.configへの保存、このあたりが全滅。どうやって開発しろっていうんだ?(というかそこまでも行ってないし――XP環境を壊したくないのが問題なんだからVirtual PC上のXPに環境を作れば良いのだな、と思い当たったのでVistaを利用するのは中止)


2006-12-05

_ わからないこと

次の問題:

あるお菓子のおまけは3種類ある。お菓子1個につき1つのおまけが入っている。この時、3種類すべて揃うことが期待できる個数を求めよ。なお、おまけの数は同数とする。

食玩とかに応用させる問題だとは思うが、わからない。
最小は3個だということはわかる。最大(というか最悪)は、仮に1おまけにつき10000個製造されるとすれば20001個ということもわかる(ということは最大値はロットが不明な以上わからないということだし、それはしたがって設問に答えるのには考えなくても良いということだろう)。
ではどう考えるのか、がわからない。

答えはわかる。はず。

Target = ARGV.length == 0 ? 3 : ARGV[0].to_i
Try = ARGV.length < 2 ? 100000 : ARGV[1].to_i
Mask = (0...Target).inject(0) {|i, n| i |= 1 << n}
def buy
  r = 0
  c = 0
  while r != Mask
    r |= 1 << rand(Target)
    c += 1
  end
  c
end
puts "avg = #{(1..Try).inject(0) {|total, n| total += buy } * 1.0 / Try}"
5.5になる(回数をどんどん増やせば)。したがって6個買えば良い。でも、どういう計算で5.5になるんだ?
単純に最初は1個、次は2個、最後に3個で足せば6ということなのかな、とも思ったが数が増えると違った(追記している:最初はどれでも良いから1個買えば1個手に入る。次は2個のいずれかが手に入れば良いのだから3/2って計算するのかな? 最後は3個買えば1個は目当てのだから1 + 3/2 + 3/1 = 5.5で合ってるのかなぁ? でも4個の場合とかだとどう考えれば良いんだろうか。1+4/3+4/2+4/1かな? とか書いているうちにこれで合ってるような気がしてきたぞ。というか、これが答えかと思ったけど、どういう式で示せるんだ?)
(4種類だと8.3333...になるっぽい。良くある8種類だと22個買う必要があるみたいだ)
更に後から追記:最初の1っていうのは3/3とか4/4のことなのか。

最終的な追記:できた。

Target = ARGV.length == 0 ? 3 : ARGV[0].to_i
puts "#{(1..Target).inject(0) {|n, i| n += (Target * 1.0) / i}}"

最後の追記:これが期待値なのか(完膚なきまでに忘れきっていた)。再発見してしまいましたよ。yowaさんshinhさん、どうもありがとう。

蛇足:設問に期待って書いてあるね(期待値という言葉そのものを忘れてた)。

_ それにしても

(1.0 - done_prob - 1.0/(3.0**(i-2))) / 3

まったくわからないのが困ったところ。

最初の1.0は必ずそうなるの1.0かな。done_probは名前から試し終わったやつ、最初のグラフの縦軸の値と同じなのか? 次のはなんでi-2乗したもので割ってるのかわからないと書いたところで、これも引いているってことはiが現時点での値か。こういう式になるんだな。で、全体を3で割っているのは1つ当たりということか?

#注意:僕が種類を増やせるかな、と試しに変えてみたリスト。
#これは正しい値を出せない:shinhさんの解説参照
k = (ARGV.length == 0) ? 3 : ARGV[0].to_i
T=1000
expect=0.0
done_prob = 0.0
 
for i in k..T
  prob = (1.0 - done_prob - 1.0/((k * 1.0)**(i-(k-1)))) / k
  done_prob += prob
  expect += prob * i
end
 
p expect

Taeo分布のLisp版の解説と読み合わせてなんとなくわかった気になる(が、わかってないから説明できないし、自分じゃ書けない)。

人生の後になったら読み直す。

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

Before...

_ はら [あれ、スペースが飛んじゃった。書き換えたのは日本語のコメント部分だけです。]

_ arton [おお、(と最初に思ったのは)'shinh'と記述可能なお二人がツッコミ入れてくれているということ(うれしい)。 とい..]

_ はら [僕も最初、もう一人の自分だと思いました。(^^;) f(k,n)ですけど、これは「包除原理」を使った式です。 実は..]


2006-12-06

_ たんたんと失敗した作業を記録

サーバー用のマシンがやって来たのでWindows Server 2003をインストールしようとする。本当はSubversionサーバにしたかったのだが、SQL Server 2005マシンにせざるを得ないことになったのでしょうがない。

あう、もらったDVDは、VLS版のisoイメージのやつだからブートできないじゃん。

CD-Rを調達の旅に行く。

Sonicを起動。? isoの焼き付けプロジェクトが見つからない。

ユーザー登録してないからかな、とか思いながら、ネットワークにつないでユーザー登録しようとしたが、ネットワークにつながってない。ケーブルはクロスもストレートもあるけど。

といってもDHCPの割り当てもなければIPアドレスに空きもないので、困る。

XP開発マシンにNICが意味なく2枚挿ししてるの思い出したので、クロスケーブルがあるんだから接続共有にチャレンジ。……しばらく格闘……XPじゃだめだ。と思う。

しょうがないので、開発マシンを落としてIPアドレスをそれに設定してネットワークにつなぎ、ユーザー登録する。

やっぱりiso焼きプロジェクトはない。よく見ると買えと書いてあるのか。家用に買ったのとは同じSonicでも違うなぁ、とうんざりしながら、別のマシンを探してCD-Rへ焼く。

で、やっとインストールを始める。

F8押す画面に行く前にブルースクリーン。よ、久し振り。

良くわからんのでもう一度試す。よ。

ちょっと考える。SATAあたりかなぁ?

途方に暮れる。どっかにドライバーがあるかも知れないけど、諸般の事情から入手は無理そうに思える。しょうがないから、XPマシンを潰してこっちにServer 2003を入れて、そうすりゃゲートウェイにもなれるはずだから新しいマシンを開発マシンにしよう、と決める。

こちらは順調に完了。リモートアクセス/VPNサーバーを設定すりゃいいんだろうと当たりをつける。

なんとなく設定してみる。iptableと違ってmmcはわかりにくいなぁ(というかはじめて触るからだからだが)。

しかし、DNSは繋がるのに(nslookupは成功する)、HTTPが通らない(netstatで見るとSYN_WAITSYN_SENTで切れる止まる)。なんか設定がまずいようだ。というところまで。

というわけで明日はそのあたりから。

_ 肝心なことを忘れてた

[ルーティングとリモート アクセス] で、構成したサーバーをダブルクリックし、[リモート アクセス ポリシー] をクリックします。既定のリモート アクセス ポリシーは、すべてのアクセスを拒否するように設定されます。
これみたいだな。

_ 敗退

だめだった。名前解決はできる。だからサーバーとのインターフェイスはOK。だめなのは、あくまでもNATだ。

で、ドキュメントを読むと違うことが書いてある。TCP/UDPのポート変換なんてチェックボックスはどこにもない。なんでしょ?

(12/7追記:TrendMicroノPFWが事前にインストールされてて、かつこいつがルーティングの邪魔してたのか。とうんざりする結論。FWログには何も出てないが……とりあえずサービスで無効化したが厄介な話になってきたな)


2006-12-07

_ CodeZine

一日遅れになってしまいましたが、『CometとAjaxを利用したチャットサーバの実装』をCodeZineに寄稿しました。

前回(いつのことだとかのツッコミはなしということで)の『NIOを使ったHTTPサーバ』をちょっと変えてCometを扱えるようにして、prototype.jsを使ってチャットです。

5日ほど前、本屋さんで日経ソフトウェアを立ち読みしてたら結城さんが同じ題材でCometをJavaで実装していて眩暈がするほど衝撃を受けましたが(競作になるとはね)、そのくらいCometはホットで、かつリファクタリングと言えばStack、ペアプロと言えばStack、最初のプログラミングと言えばハローワールド、値オブジェクトと言えばMoney、AOPと言えばログ、Cometと言えばチャットということなんでしょう。

:参考資料が漢だよね。実際、参考にさせてもらったんだけど、タイトルを書くのは気恥ずかしかったよ(←妙な自意識が過剰にあるらしい)。

追記:今、見たら画像用にJudeで作ったファイル(シーケンス図の固まり)がダウンロード対象になってる。気付かずにpng出力したのと一緒に送ってしまったのか。もし内容を参照したい場合には(内容はページに貼られているシーケンス図の原画です)UML Modeling Tool - JUDE -から、Communityエディションをどうぞ。僕は起動速度、実行速度、使いやすさでJudeが好きです(Communityエディションは無料だから好きなんだろうと思うかも知れないけど、必要なツールは購入しているわけで―VisioとかGraffleとか―それらも利用できる環境にいるけれど、Judeを使っているということです)。

_ 明治のマッケター

なんと、とマッケターはぶったまげた。

みなさんは、その米百俵で学校を建てるですと。それだけでビジネスの難易度が上がりますぞ。しかもその学校とやらには士族の子弟だけではなく、学力さえあれば庶民の子供とやらも通うのですと。ぎょぎょぎょ。もう全くどこに勝算を見出そうとしているのか分からないんです。すみません、すみません。

ということか。

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

_ まつなが [『CometとAjaxを利用したチャットサーバの実装』面白いですね。Cometだクライアントがサーバにコネクションを..]

_ arton [継続の意味が実はいまいちわからないのですが(高井さんの説明が悪いというわけではないとは思うけど)、本来はリソースはF..]


2006-12-08

_ LDRの小人さん

泥棒が盗んだ物を開けゴマと呼ぶと開く洞窟に隠しているのか、それともサンタがプレゼントを配って回っているのか、どちらだろうか?

_ Subversion on Win32

単にWin32バイナリーをセットアップして、Apache 2.0のバイナリをセットアップして、httpd.confにmodule定義して(svn/binの下のmod_*svnはapacheのmodulesの下にコピーしたけどPATHが通ってれば不要なのかも。svnはセットアップでPATHを通してくれる)はい終わりと実に簡単なのであった。拍子抜け。


2006-12-09

_ どこに内容を持つべきか

ある程度は自律しているものに名前がついていて、さらにその名前に紐付く情報があるとする。

そのものを赤ん坊と考えると、情報は別の場所においておいたほうが良いかも知れない。つまり、名札を確認してその名札の情報から別の場所にある情報を取り出す。

幼稚園児だったらどうだろうか? お名前は? と聞くと吉野作造です、と答えられる程度にまでインテリジェンスがある。そこでその子にお父さんの年収は? と聞くとする。

1. 果たしてそこに至るまでの情報をこの子供は正しく答えることができるだろうか? たとえばすぐ横を水分たっぷりのタコ入道が通り過ぎたら気を取られて答えないかも知れない。

2. 誘拐されたとして、その情報をぺらぺら喋ることを許容して良いのか? 最初から教えておかないほうが望ましいのではないか?

3. 中央集権的に情報管理した場合、子供どうしで口裏合わせて名前を間違えて答えられる可能性は? 情報そのものを覚えこませておけば(情報の分散)必要となったとき=その子供がそこにいるとき、取り出せる。(1がクリアできることが条件)

4. なんのために脳みそがあるんだ? という根源的な問題。単に情報を引き出すための標識にするだけだったら人間の子供のようなインテリジェンスは不要ではないか? 単なる位牌でも置いておけばOKではないか?

いつ頃から大人(自律した上に、自分に関連する情報を自分の口でしゃべるし、当然その前提として知識を覚えることができている)になったとみなせるのか。すでに大人として扱っても良いのではないか?

というような世界。

_ 考えたぞ

中学生の問題なら、いくらなんでも解けないはずはあるまい。というか、ちゃんと求められなければさすがに悲しい。

で、なんでかな、とやっとしばらく考える時間がとれたので考えたら、残り1種類になったところで、3個買えば1つは買える算段だと直感的に考えたところをまじめに式にしてみれば良いわけか。なぜ、3種類のうちの1種類を手に入れるには3個買えば手に入ると考えることができるかと言えば、入手できた状態を示す1を3種類から目的の1種類が選ばれる確率の1/3で割ってやれば良い(1/3の確率のものを満たすには1にするわけだから、結果の1から割れば良い)からだ。したがって、1 / 1/3 で3/1となる。そこにいたるも同じなので結局、1種類を手に入れる(3種類の中から3種類のいずれかが得られる確率)の3/3、残り2種類から1種類を手に入れる(ではなく、3種類の中からいずれかの2種類が得られる確率)の2/3についても同様にそれを、1 / 3/3 、1 / 2/3 として求められる。それぞれの状態は(1種類集まった状態、2種類集まった状態)は、独立しているから和を取れば求める値が得られる。残り2種類から1種類を……と考えてしまうところがだめなんだな。あくまでも母数の3は固定しておいて、3種類の中から2種類のいずれかと考えれば、2/3で、そこから3/2で1.5回買えば良いと考えられたはずだ(が、最初はそうは考えられなかったということだ)。

(たぶん、1種類を手にすることで状態が変わったその状態に着目してしまい、2というところから出発しようとしたのがまずいはず――というか、固定化する対象を分子の1のほうに置いているとみることもできるかも知れない。どっちなんだろう――。で、このあたりの僕の思考方法は一般化できるように思う。つまり世の大半が手続き型プログラミング言語ではするするだけど、関数型プログラミング言語だと思考停止するとかありていに言えば広く利用されない理由、の根源に思う。でもまあ、それを訓練で身に付けることもできるところが、おもしろいところだ)

で、これはこれとして、大数の法則を使って平均値から求めたのが最初の僕のやり方で(これはこれでコンピュータを使えるからならではであるなあ、と思う)いかにもである。

というところまで考えてから、やっとTeao分布やshinhさんの方法を読む準備ができた。

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

_ はら [この問題は大学生でも難しいと思いますよ。 で、上の arton さんの解答を採点すると … 100 点かな。 特に..]

_ arton [わーい、100点もらった。ありがとうございます。(実際は数学には同じ100点でもスマートな100点と鈍い100点とか..]


2006-12-10

_ Amazonプラグイン

なんか、ちゃんと集計されなくなったような気がするんだけど(有り体に言えば2.0.3にして生成した後のリンクは常にゼロ。ためしに自分でクリックしてもゼロ)2.0.3をご利用の皆さんはいかがでしょうか?

(以前のリンク形式に変えればいいんだろうな、とは思うものの――そしてそれはそんな大した手間でもないし――、本当に現在のプラグインが生成するリンク形式が無効だとも信じられない)

_ Binary 2.0カンファレンス2006

1:30現在まだ締め切られていないのは、土曜日の夕方あたりから始めたからなのかな?

と不思議に思ったら、やはりそんなことはなくてShibuya Perl Mongersのトップページ告知では締め切りになっていた。それにしてもすさまじいTBスパムだなぁ。

_ オブジェクトイニシャライザ

それにつけても、JavaScriptの{x: a, y: b, ...}という記法はなんだろうとすごく疑問で、いくらprototype.jsのソースを読んでもわからない。

というか、いくらなんでもx: aというトークンを後ざしで作れるはずはない、と気づく。

で、ECMAの言語仕様とか見ればわかるだろうな、と思いながらもMSDNのJScriptの項を読んでいたら、{x:1, y:2} // Object literalという記述を発見。リテラルなのか。つまりは、var anonymous = new Object(); anonymous.x = 1; anonymous.y = 2;という意味だ。

ということは、CodeZineの記事のAjax.Requestの第2引数の説明は間違いだということだ。

というわけで修正。ここまで間違ったことを記事として書いたのは初めてだ。ごめんなさい。Ajax.Requestの第2引数はオプションパラメータをプロパティに持ったオブジェクトであって、それはprototype.jsが提供するハッシュではありません(冷静に考えればハッシュを作るには$H()という関数が必要になるのだから当然でした)。

修正は編集部のチェック後に反映されるので、来週の中ごろになります。それまでは、間違ったことが書かれていますのでご注意ください(と思ったら「編集中」という注釈付きで修正が反映されたページが公開されているようだ)。

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

Before...

_ arton [#ちょっと意味不明か。ECMAも規格屋で仕様書売ってなんぼという商売をしていると思い込んでいたので、当然、仕様は買う..]

_ mumurik [いや、だいたいわかります>意味不明 ANSIやIEEEはお高いですからねぇ。 RFCやW3C、ECMAあたりはありが..]

_ arton [確かに、ちょっと眺めただけでもおもしろそうでした。というか、書く前に読むべきだったよなぁ、と思いながら後で読む(おい]


2006-12-11

_ tDiaryメンテ

2.0.4へ更新。あと、trackbackプラグインの設定が不完全だったので修正(tb.rbをtDiaryのルートへコピー)。

_ ASP.NETで作成したテーブルアダプタの継承

ASP.NETでテーブルアダプタを作るとソース無しのXSDだけになる。

このため、ちょっと動作を変えようとするといささか不便(単なるComponent派生クラスだし)。でも、利用するとわかるが、C#でインテリセンスもきくし、内部的にはタイプは生成されている。

したがって、既知のメソッドを操作することは可能。

以下の例では、コマンドタイムアウトの時間を初期値の30から120に変えている。

// クェリーに時間がかかり、
//「タイムアウトが発生しました。操作が完了する前にタイムアウトの時間が経過したか、サーバーが応答していません」
// という例外になるのに対応。接続タイムアウトについては既定の15秒を利用するので
// ここに来た場合は、ほぼ接続はできている。
internal class DerivedTableAdapter : FooTableAdapters.BarTableAdapter
{
    // データベースデザイナで生成したメソッド
    public override BarDataTable GetData(...)
    {
        // CommandCollectionプロパティにSqlCommandが保持されている
        foreach (System.Data.SqlClient.SqlCommand c in CommandCollection)
        {
            c.CommandTimeout = 120;
        }
        return base.GetData(...);
    }
}

2006-12-12

_ 今週

土曜を除いて毎日イベントがある。こういうこともあるのは、忘年会のシーズンだからかな?


2006-12-13

_ IME2007

止まるよ止まる動きが止まる……(でもやっと覚えてくれたてんてん変換)。

使った人は誰でも暗インストーラに手が伸びるそれがIME2007。

辞書の並びはおかしいし、一番変換して欲しい言葉はすんなり出ない。たとえば1つ前の文章を書いたとき、「ほしいスペース」では「ほしい」のままだ。そこでもう一度スペースを叩いて「欲しい」にする。「ほしい」「ほしい」これに関しては学習がフリップフロップなのな。でもすべて平仮名にするなら^Uで済むわけだから取りあえずは漢字にしといて欲しい(これは最初平仮名だった。というか、入力直後は何もしなくても平仮名なんだからスペース叩いて最初が平仮名というのはなかなか素晴らしいアイディアだと思う)もんだよね。

というすばらしいIME2007だが今日のところはまだ固まりモードには入っていないのだけが救いだ。

で、最初にリンクしたKazzzさんのエントリのコメント欄でNyaRuRuさんが(末尾繰り返しパターンの名前が2つ続いた。artonon)「取材準備: IME開発」というChannel9のサポート記事を紹介してくれている。

IME2700とは直接は関係なさそうだが実に興味深い。

中でも新卒採用で入社した2名の開発者がIMEの開発において重要なポジションを任されていることです。

さすが、マイクロソフトだ。おもしろそうな仕事が経験に関係なく割り当てられるんだな。

どちらもタフな仕事でありながら、OJT (On the Job Training: 仕事を通じて学んでいくこと)により必要なスキルをつけていっているようです。

IMEの開発というなかなか大変そうな仕事をOJTで任せられるというのは技術者として相当な勉強になると思う。うらやましい。

IMEの開発の裏側を知っていただき、マイクロソフトがどう向き合っているのかをお伝えしたいものです。

なるほど。そういうふうに向き合っているのか。

追記:間違えた。日記書くときは、いらいらしたくないから、FirefoxではスタンダードIMEが動くようにしてたんだ。それで平仮名変換でうんざりはしたけど、止まったり考え込んだり引っかかったりはしなかったんだな、と大いに納得。

だから平仮名(と誉めてやろうとしたらいきなりスペース打ったら平仮名(まただ)に変換してくれたけど)についてはIME2007は無罪と思ったけど(平仮名(まただ3回目。やっぱり学習しない人だ))もっと悪かった。……(でも……はさすがに覚えてくれたらしい。ものすごく微妙なアルゴリズムで学習してるんだろう)。そしてちょっとでも難しい漢字を入れると考え込む(もちろん、その間にこちらはどの漢字/熟語を候補から選ぶか辞書をひけるわけだが)と思ったけど、漢字が難しいかどうかではなく、何か(なにかスペースでしばらく考え込んだわけだし)奥妙(おうみょうと読むのだがIME2007の辞書には無いらしい。でも「綯い」という言葉は登録されている)かつ玄妙(こちらはすぐ出た)な仕組み。僕もアンインストールしようかなぁ。と一瞬思わないでもないのだが、あまりに不可解な動きをするのでついつい使ってしまうのであった。でも、Firefox上ではスタンダードインプットにおそらく戻すかも。

追記:変換中に止まってしまい、ついリセットボタンに手が伸びる現象は、存在しないOutlookのアドレス帳がデフォルトで参照辞書に組み込まれているというバグ(だろう。存在しないんだから)が原因とわかったので、辞書からはずすと、相当ましになります(2007/6/5 追記)。

_ ちょっと待て

HTTPやFTPはダウンロードできるが、それだけだろ。

でも、あれは、共有できるんじゃなかったっけか?

ということだけは押さえておきたいスラドクォリティ。

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

Before...

_ NyaRuRu [IME 2007 のアルゴリズムについては,この辺りが参考になります. >VistaとOffice 2007、かな漢..]

_ arton [お、興味深い記事をありがとうございます。これを読むと僕の変換スタイル(ブレやノイズを避けるために、基本的に単語毎に変..]

_ arton [OJTの話はね……成功すれば本気で良いことなんだけど、パッケージソフトである以上、結果がすべてだと思うしなぁ。]


2006-12-14

_ メモ

LilyPond

沼の百合で睡蓮なのか?

_ test


2006-12-15

_ 甜菜とホウレン草はもういやだ

トリルはどう書くんだ?

_ LilyPondプラグイン(途中まで)

昨日のMonoミーティングで見せてもらったkawabataさんのRDハック(URLを紹介していいんだかどうだかわかんないのでリンクしない――追記:まとまったら公開するって書いてある=まだまとまってないから公開したくないってことだと思うからだけど)がえらくおもしろそうだったので、真似してtDiary用にLilyPondプラグインを作ってみた(と偉そうだが、単にLilyPondを呼んでるだけです)。

まだ、全然途中だけど。

上の楽譜は、こんな記述になる(実際はもっと長い。これは最初のレソラシドレッドシラの部分)。

<%= lilypond %{ \\key g \\major \\partial 8 d'8 g' a' b' c'' d'' c''16 b' a'8 r } %>

\\としないで済ます方法はないかなとか、エラーの場合の出力をどうするかとか、まだ悩みどころはたくさんあるけど。

で、なぜRWikiとかに組み込まないのか聞いたら、危険だからとか言われて、その理由がわからなかったわけだが、作ってみると(というかLilyPondをいじると)自明なことだった。でもtDiaryを個人で利用する分には問題ないはずなので、一応公開しておきます。ただ、不特定メンバのtDiaryをホストする場合は、jailを作る必要があります(--safeを使うとpng変換ができないのでそれはそれで困る。なんのことやらわからなければ、Command line options参照)。

あと、適当にamazon.rbとかmy-ex.rbとかの見よう見まねで作ったのでtDiaryプラグイン作成の正しい作法(ただし3タブ除く)に則ってない点があるかも知れないので(ディレクトリ、ファイル操作周り)、そのへんのポインタとかご教示くだされば参照して修正します。

リリポンプラグイン

(MIDIの生成と埋め込みまでサポートする予定ではある)

追記:なんか、既に洗練されたのを誰かが作ってそうな気がしてきたので、これから探してみるとするか。

(しばらくしてから)プラグインリストには無いみたいだけど、ここに登録すべきなのか?

追記:修正した場合、古いゴミになったファイルをどうやって判断して消すかってのは難しいな(というか消せない)。


2006-12-16

_ 遠い星への飛行(Scriabine Op.30)

ピアノ譜生成オプションとMIDI生成オプションを追加(リリポンプラグイン)(ロックも追加。tail -f error.txtとかやってたら、おそろしいことになっていた。そんなに同時アクセスがあるとは思えないんだが、ボットが来るからかな)

 <%= lilypond " \\new Staff { \\key fis \\major \\time 6/8 r4\\p r8 dis''4.\\tenuto ~ dis''4 dis''8 ~ <dis'' gis''>4. ~ <<{dis''4 cis''8} \\\\ {gis''8 dis''8 eis''8}>> <cis'' eis'' cis'''\\tenuto>4. ~ <cis'' eis'' cis'''>4. }   \\new Staff { \\clef bass \\key fis \\major \\clef treble <b fis' ais'>2. ~ << {a'4. gis'4. gis'4 ~ gis'16 cis'16 gis'4. ~ gis'4. } \\\\ {<b eis'>2. <ais eis'>4. <a cis'>4. ~ <a cis'>4.} >> } ", 

{:piano => true, :midi => true} %>

このレベルになるとLilyPondで記述するのも、結構、辛くなってくるようだ(スラー、楽想記号、テヌートとかそのあたりは力尽きたので省略)。プラグインに%||記法を使っても複数行を与えることはできないんだろうか。

使い方としては、メロディーだけを数小節書くくらいが精一杯かな。それでも、ライトモティーフの説明とか書くには十分に役立ちそうではある。

TODO:MIDI生成音色か……。そこまで終わったら簡単な記法の説明をWikiのほうに書いてtDiaryプラグインに登録予定

Complete Piano Sonatas(Alexander Scriabin)

(アムランはMIDIよりうまい。でもアシュケナージのどろんどろんべたんべたんの4番も好き。
うーむ、つい10回くらい聴き直しちまったが――1時間以上7分の曲を聴いているから計算上もあっているな。アムランの演奏ってぜんぜん、別の世界の話だ。アシュケナージの演奏をコンピュータに打ち込むのは間違いなく無理だ。細かなルバート、瞬間的なディナミークの変化、いわゆる表情ってやつにあふれまくった色彩感。浪花節とも言えるし、おおこれぞ後期も後期、しかも辺境の地のロマンティクとも言える。でもアムランはぜんぜん違う。やっぱり爽快感ってことなんだろう。第2楽章後半のばかばかしいほど激しく懐かしく輝かしい箇所(和音の連打の頂点を結んだところで第一楽章のメロディーが歌われる)、もっと表情たっぷりにメロディーを歌わせたくなるのが人間だものみつおなのにアムランはお前はMIDIの打ち込みかとツッコミたくなるほどのスピードで叩き去って行く。なんだこれは? こいつは人間か? だからロマンティクではなく即物主義的かと言えば、放っておいてもメロディは美しいからそうはならないのだが、そして響きはスクリアビンが計算し尽しているからいやおうなく鳴り響き……SFの世界ですな
と思う反面、左手連打のfffに移ってから10小節目と12小節目の後半のリズムの取り方って痙攣してるわけじゃなくて狙っているみたいでもあるな。3連目と4連目の間の詰め方が同じだし。というか、スクリアビン自身はどんな弾き方してたんだろう? 昔のプレイエルはやたらタッチがやわらかいから早弾きが楽だったとかかも知れないし――でもサロンじゃなくてホールで弾いてたと思うんだが)

_ UNSTERN! (Liszt)

(先頭20小節)
リストはシンプルでいい(この後はちょっと大変そうだけど)。
 <%= lilypond "\\new Staff { \\tempo 2=48 r2 r4 \\clef bass e4\\mf( f2 b2 c'2. b4 c'4) r4 c'2-> ~ <c' fis>1 r2 r4 \\clef bass e4\\mf( f2 b2 c'2. b4 c'4) r4 c'2-> ~ <c' fis>1 r2 r4 a4( bes2 e'2 f'2. e'4 f'4) r4 f'2-> ~ <b f'>1 r2 r4 a4( bes2 e'2 f'2. e'4 f'4) r4 f'2-> ~ <b f'>1 } \\new Staff { \\clef bass r2 r4 e,4( f,2 b,2 c2. b,4 c4) r4 c2-> ~ <fis, c>1 r2 r4 e,4( f,2 b,2 c2. b,4 c4) r4 c2-> ~ <fis, c>1 r2 r4 a,4( bes,2 e2 f2. e4 f4) r4 f2-> ~ <b, f>1 r2 r4 a,4( bes,2 e2 f2. e4 f4) r4 f2-> ~ <b, f>1 }", 
  { :midi => true, :piano => true }%>
リスト:ピアノ・ソナタ(ポリーニ(マウリチオ))

リストマニア(Whoでもケンラッセルでもないが)なら自分で弾きたい後期のトリスタン和音+増4度攻撃+宗教的静寂性の世界だけど、ロ短調ソナタはポリーニ(ポゴレリチも悪くないしホロヴィッツのどれれんどれれんなRCA最末期のも好きなんだけど)がやっぱり好きだ(というか自分で弾けるわけがない)。

_ わからん

次のリストの問題はなんでしょうか?
  def cleanup
    FileUtils.rm_f("#{@image_dir}#{@log}")
    ['.ly', '*.ps', '*.eps', '*.tex', '*.texi'].each do |ext|
      FileUtils.rm_f(Dir.glob("#{@image_dir}#{@name}#{ext}"))
    end
  end

最初の行の@logに相当するファイルは消える。でも、Dir.globのほうは消えない。@image_dirが/で終わる正しいディレクトリ名なのは、最初の行で@logが消えるから間違いない。でも、Dir.globのほうはだめ。@nameが怪しそうに見えるが、配列の並びを'*.ly'のように変えてもやはり消えない。

Dir.globがSAFELEVELを見ているというのはありそうにも思うけど、tDiaryの中は4ではないし、Dirがチェックしているのは4以上の場合(に読める)。

追記:4なのか。と思ったら1だな……

_ Office2007

素晴らしい考察

はじめて、Officeがらみの話で笑えました(リボンに慣れたものの余裕と言っても良いけど)。

それとは無関係に2007に頭を切り替えるにはこのあたりかな、とか感じてる。

・自動保存がまともに機能するので、Fileメニューいらないじゃん(名前を付けて保存はでも使うだろうというのは、もしかしておれだけの要望なのか)。

・おまいら10年も使っていればそろそろ老眼になってんじゃね? 640×480時代のデザインで、1600×1200使うの無駄だし読めないんじゃね?

・イルカに質問するためにキーボード叩く人より、アイコンで見えるほうがいいんじゃね? (いや、たまにしか使わない機能だからこそ、イルカとQ&Aが良いのだが、と思うのはおれだけなのかも知れない)

・初めて触った人が操作に慣れるまでの使い勝手と覚えやすさ: この論点だと多分、2007のほうが上だろうな、とは思う。

_ CLI

CLI→コンパイラの拡張

実際にCLIの実装を(Brew上に)してる人がそういうんだからそうなんだろうなぁ、と思いながらも、そうなのか? という疑問も持つ。WIN32API互換層とか、えらくつまらなそうだな、と思った。ポーティングだというところがミソなのかな? (というか、ポーティングというのもいまいち良くわからない話だな、とも思う)

それはそれとして、Brewの上でJVM(4月あたりだっけ)も動けばCLIも動くというのは楽しそうではある。

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

_ Kazzz [>初めて触った人が操作に慣れるまでの使い勝手と覚えやすさ 日記で書きましたが、私もこの点に関してOffice200..]

_ arton [ですね。こちらも初心に帰って評価すると確かに良くなったのだと思います(しかし断固としてIMEは除く)。 コンテキスト..]


2006-12-17

_ Binary 2.0 カンファレンス

Binary 2.0カンファレンス 2006 発表資料とレポート

一昨日になるが、Binary 2.0 カンファレンスに参加した(ご招待ありがとうございます)。

今回も滅法おもしろかった。僕にとっては、ネタ的/プレゼンインパクト的にはWiiリモコンでPS3をあやつった八重樫剛史さんの『tty hacks for PS3 Linux』と、あるある感が(あるのかよというツッコミはあるだろうけど)楽しかったakrさんの『getcontextの怪』と中村実さんの『マルチコア時代の並列プログラミング:ロックとメモリオーダリング』がベスト3かな。もちろん、「1か0かどちらかを選べと聞かれたら自由と答える」にはぐっと来たけどな。

で、上のはおいおいということで、残りからは本題に入る前に時間を食われてなにやら良くわからなかった竹迫良範さんの『Web2.0時代のAjax Binary Hacks 』が良く考えるとすごくおもしろかったのではないかとか、制約がすごいと会場からウケがとれる鴨志田良和さんの『携帯 Flash でバイナリ処理』とかのそれほどバイナリじゃないあたりから。

携帯FlashのActionScript(JavaScriptみたいなやつ)は、配列が無い(ここでおおっと会場がどよめく)、さらには忘れちゃったけど何かが無くて何とfunctonが無くて(追記:確かに無い)(もちろん会場がどよめく)、とにかく制約がきびしい。無ければ作れば良いじゃんといかないのは、メモリ制約も厳しいからとか。で、(数字は嘘かも)100Kのメモリに送り込むべきデータが圧縮しても95Kとか。でどう圧縮するかとか。そのあたりでIRCで一昔前のゲーム開発みたいじゃんというツッコミがあったりなかなか楽しい。そもそもデータを全部展開できないから取り出す位置だけをインデックスとして展開するということしたいけど、それをやるには辞書がランダムに配置されるgzipじゃだめだというような話もあったような気がするけど、ライトニングトークはメモしてないから間違ってるかも。で、データに文字列(ユニコード16ビットvalidなShift_JIS)を利用するんじゃなかったっけな(追記:利用する(と断言)。発表資料が公開されたので参照してください。おもしろいです)? 配列がないから。ところが文字列はビット透過じゃないから、利用できる範囲が限定されていてそれを外れると?に変換されてしまうだかトランケートされるとかなのでうまくおさまるようにマッピングして……というようなPCを相手にしている限りはまったく実用的な意味はないけどパズル的におもしろい話(バイナリな話だな)。

戻って、竹迫さんのは、クロスドメイン通信をするのにGIFを利用するという話だったようなんだけど原理説明が光速だったので良くわからなかった(LLリングの時と同じで前振りで笑いを取りに行きすぎてるわけだが、それはそれでおもしろいからいいんだろうけど(追記:「けど」は余計でした。おもしろかったです))。GIFのサイズはブラウザー経由でJavaScriptで取り出せるから(追記:大きくは外してないけど、onloadの中では取り出せるということらしい。竹迫さんの解説)、そこにデータを仕込めばクロスドメイン通信ができるというのが技術的要旨だと思うのだが。img src=は確かにクロスドメイン(href=もそうだけど読まれたデータを見ることはできないけど、imgについてはサイズが取り出せるということなのだと理解したけど違うかも)。で、GIFのヘッダのサイズとして任意のデータを埋め込めばそれを参照できる(なんか例のA4の紙にでっかなデータを連想したけどそういう話ではたぶんなくて、サイズが0x414243ならABCというデータというようなことなのかな?)。

野首さんのASCIIは、首がふっとぶをテーマにしたASCIIアート(といっていいのかどうか良くわからないけど)MSX BASICで昔昔に作った動画(なのか?)の回顧展。トリをつとめるのにふさわしい時間制限を無視した演目でえらく刺激を受けた。このネタをなんだっけな? 暗い洞窟症候群というのかな、つまりDirectXギンギンとかムービーですよ、ではできないだろう。抽象化とはすばらしいという温故知新。

鴨志田さんのは、PS3を使ったプレゼンで結構画像が粗い。で、諸般の事情からシートは6枚という。なぜ6枚なんだ? と思わせておいてどこでそれに気付くかもポイントなんだろう。僕は3回転目くらいで気付いた。OS Xのユーザー切り替えみたいなプレゼンキューブなのだな。

Wiiリモコンを振ると立方体がカシャーンという音とともに回転してシートが出てくるという仕組み。音が重要。

以下、#はおれのコメント。というかコメントはコメント。


佐藤祐介さんの『Hello Binary World』は、gccの__attributeを使ってint mainを外す技の披露。main変数にretを書き込むあたりが山場かな。普通におもしろかった。
なんとなく、テレビのゴールデンタイムにやってるバラエティショウみたいなのでこういうのをやるような時代って絶対に来ないよなというのが不思議に思える空間があのカンファレンス会場なのだった。


金田憲二さんの『X日で作る仮想マシンモニタ(に向けて)』は、固いプレゼン。ネタは軽量VMモニタで、以下、僕が理解した範囲。ほとんど知識がゼロな分野なので間違って理解している可能性が高いので眉唾で読むこと。

昨今のVMは大規模で複雑化しているので利用するのが大変。実装が正しいのかも不明。バグがあればゲストOSが破壊されるので致命的。(と書いていて、ここで昨今のXXというのがVMなのかVMMなのかおれはわからなくなっている事実に気付く。ゲストOSが……ということからVMのことだと思うがVMMのことなのかも)で、軽量なVMモニタ(=VMM)を作ることにして、現在3000行。

VMMは、プロセッサ/メモリを仮想化する。位置はプロセッサ/メモリの上、VMの下。モニタなんだからそれはそうだ。

仮想化とは:
 Sensitive命令の捕捉、割り込みの転送。メモリ割り当て(複数のVMの物理アドレスを個別に実機の物理アドレスに対応付ける)
#「メモリの仮想化:→Nested Paging」とメモしてあるけど、VMのページングをさらに割り当てするからnestedなのかな?
 AMD64には、VMRUN命令、VMEXIT例外というのがある。
VMRUN:
 コンテキストスイッチ命令(と理解した)
 jumpbufと実レジスタ群の交換みたいなことをする
 現在の実行コンテキストをVM_HSAVE_AREAに保存し、要求されたコンテキストを実行コンテキストに入れる(で、VMが実行されると理解したけど)
VMEXIT例外:
 エラーコードをメモリー上に格納(#IRCで、伏線キターと声が上がってたが別にその後はなかった)
 VM_HSAVE_AREAに保存していた状態を復帰
#sensitive命令の実行などでVMEXIT例外が上がるということらしい。sensitive命令ってなんだ?
苦労:
 SimNow(AMD64シミュレータ)、VMM、ゲストOS という並びなので(# VMがいないということは、VMモニタはVMのモニタではなくて、VMなのか?)
 バグがどこにあるかわからなくて大変。シミュレータの使い方を間違えていたというのもある。
 そのときは、アンドキュメンテッドなコマンドの実行が必要なのにそれをしていなかった。
質問:アンドキュメンテッドなコマンドの実行が必要だと、なぜわかったのか?
答え:あまりにおかしいので調べていたら研究室の先輩がバイナリを見て、怪しいシンボルを発見した(会場どよめき)。
 というのはおいておいて、サポートにメールして聞いた。
#サポート重要
質問:任意の命令をsensitive命令から外せるか?
答え:Yes
http://web.yl.is.s.u-tokyo.ac.jp/~kaneda/tvmm/

akrさんの「getcontextの怪」

#メモをそのまま掲載。

ruby getcontextを使うこともある
 IA-64ではうまく動かない。今は直したので動く
 setjmpは問題が起きない
 SPARC上のgccでも問題が起こる
 Sunコンパイラでは起きない
 Intelコンパイラ起きる
 HPコンパイラ起きない
  FreeBSD起きる(別件)
setjmp/longjmp
−メモリを復元しない
 longjmpからsetjmpへ値を伝えられる
#setcontext/getcontextを使う理由(必要になったらman見れば良いと思ったので適当)
IA64にはレジスタが多数あるので、関数呼び出しの前後の暇なときに保存/復元(レジスタスタック)。
SPARCにも同様な機構(レジスタウィンドウ)があるが、レジスタウィンドウはスタックに取られる。
レジスタスタックはヒープ上に確保(#ヒープという理解で良いかはわからない。スタックではない特定のプロセスメモリ空間のどこか)
setjmp レジスタスタックのレジスタは保存復元しない
   (実はgccには細工が入っていた)
setcontext 記載がない:glibは保存復元しない
理由:関数呼び出しで本来レジスタは破壊されない:レジスタを多数保存するのは手間
setcontext の前後で、r32が指すアドレスが変わる
結論:
大域脱出はコンパイラで対応する(コンパイラはレジスタスタックについて知らなければならない)
 →言語仕様に含めるべきだったのではないか
その他:
 最初IA64の問題としてgccのバグレポート。無視される。
 IA64を誰も使ってないから反応が無いと推測。
 同様な仕組みを持つSPARCで再現するだろうと考え、同様な問題が発生するパターンを作成しバグレポート。
 すぐに反応。パッチきたー。
 同様にIA64にも適用可能と指摘。IA64にも反映。
 バグレポートにはみんなが利用しているプラットフォーム重要。

中村実さんの「マルチコア時代の並列プログラミング:ロックとメモリオーダリング」

#メモをそのまま掲載。#は補足

 ターゲットモデル
 スレッドたくさん(Webアプリ)
 スレッドはコアにバインド(メモリスループットがボトルネック)
 並列GC(マルチコアでmutexがボトルネック)
:ターゲットは並列GC業界
 コアが増加で衝突が増加=遅延発生
 衝突=遅延
 MutexやSpin Lockに替わるスレッド同期?
 Lock-free synchronization
  cas ll/sc
   Deque、FIFO、LIFO などのデータ構造
 つまりOptimistic lock
シーケンスロック
 ロックをかけたいメモリーにカウンターを付ける(読み込みではロックしない)
 書き込み時にはカウンターが偶数=解放、奇数=占有
 書き込み時:1 カウンター読み取り 偶数=CASで+1、書き換え、counter+1
 読み込み:Read Counter、Read Data、Read Counter 1が奇数または!=3で失敗
単方向リスト
 書き込み遅延を許可
 アトミック命令不要
Double-ended Queue(Deque)
 N.Arora et al、"Thread Scheduling for ……
 Sun HotSpot VMの並列GCで利用
どうやってプログラム?
 論文を読んで実装
   アプリケーションに合わせてデータ構造を調整して使う
 ライブラリ
  Ross Bencina 
  Lock-free library GPL
問題点:
 衝突しなければ効率はmutexと変わらない
 アルゴリズムが複雑=バグの源
 実装が難しい=out-of-orderによってメモリアクセス順序の逆転が問題
  →メモリフェンスを適切な位置に入れる必要がある
#衝突ゼロなら複雑な実装するより素直にmutex使うべきだし、衝突しすぎるなら楽観ロックの意味ないから素直にmutex使うべきだということだと思う。
Sequence lock
 読み込み側の3つのreadの順番が守られている必要がある(バリアが必要)
x86のメモリオーダリング
	RAR	WAR	WAW	RAW
i386:逆転なし
i486、p5	RAW(read after write)で逆転の可能性
P6以降 RAR、WAR、RAWで逆転の可能性
Opteron	RAR、RAWで逆転の可能性
C/C++では、基本はインラインアセンブラ(mb、rmb、wmb)を使ってmemory barrierを実装
#mbとか上で書いているのはそういうマクロが定義されているということだったかな?
C++ 次期(C++0xには入るかも)
時代はマルチコア
 使えれば、Lock-free synchronizationを使おう
 Memory Ordering コアが増えれば順序は起きやすくなる
メモリフェンスを入れた正しいプログラムを書こう
#なんか、Java並行スレッドプログラミングのような。
#でも、メモリバリアをバイナリアン以外のプログラマが意識するのはおそらく無理に近いように感じる。
#というわけで、akrさんのと同じくコンパイラが実装すべしというのがあるべき姿なのかな。

(参考のために追記:STM とロックフリーアルゴリズムの関係

Binary Hacks ―ハッカー秘伝のテクニック100選(高林 哲)

#追記:YARVのグローバル変数ってハッシュだけど、読み込み多くて書き込み少ないとか、そもそもそんなにグローバル変数使うのか? というのもあるわけでシーケンスロックを使って実装するとかが良いのかな、とか思った。

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

Before...

_ arton [おお、どうもありがとうございます。確かに、関数についてでした。 でも、さすがに関数呼び出しがない(というのは関数が呼..]

_ 向井 [文字列は ShiftJIS で valid な範囲でないといけないという話だったような記憶があります。]

_ arton [直しました。どうもありがとうございます。]


2006-12-18

_ Computerworld2月号

月刊 Computerworld (コンピュータワールド) 2007年 02月号[雑誌](-)

オープンソースソフトウェア(フリーソフトウェアを含んで)と開発者の関係についての記事を寄稿しました。

開発者がどのくらい開発者のためにソフトウェアをオープンソースソフトウェアとして開発しているか、そこから得られるものはどのようなものか、企業内開発者にとってはどういう意義があるのか、企業にとってはどうか、といった角度から、以前三菱総研が行ったFLOSS調査などを元に自問しながら考察したものです。(来年発売とか、忘年会の席で言ってましたが間違いでした、すみません。というか今日、家に帰ったら見本誌が届いてたんで逆にびっくりした)。

なお、誌上では触れていませんが、細川さんと角谷さんに第一稿についてご意見をいただきました。感謝します。

よろしければ、ご購入ください。

特集のほかの記事も、なんていうかOSS+ビジネスの4年後というか、一時の無意味な熱狂後の落ち着いた考察みたいで結構おもしろかったです。たとえばInfoworldからの翻訳記事にRubyのホームページがキャプチャされていて「スクリプト言語の成功にはコミュニティの力が不可欠」なんていう記事が出ていて、NetRexxとRubyが比較されていたりします(ちょっと僕の記事と似た論点を持ってるな)。相変わらずソースコードの公開についての神話っぽい記事もあったりしますが(ただ、神話とまでは言い切れないとは思うけど)。

#この次の号はタイムリーなことに「2007年COBOLは死せず」という特集だったり。

_ Binary 2.0 カンファレンス補遺

WEB+DB PRESS Vol.36(WEB+DB PRESS編集部)

GCC+GDB PRESS創刊準備号って、これのことかな?


2006-12-19

_ a tempo


(Scriabine Op.23 31-)

おもしろい。人間が弾くのとまったく異なるリズムになる。タイミング的にはこちらが正しい。ということは、人間が無意識なのか意図的なのかはわからないけど、微妙にタイミングをずらすことで混入させるノイズが本来あるべき姿になる(スクリアビンその人がどう弾いたかはわからないが、こういうリズムじゃないだろうと思う。たとえばショパンはマズルカを2拍子として弾いていたというような話もある。楽譜は単なるメモで、あるべき音は指からしか生まれない。楽譜はモデルで、指と楽器が実装すると考えたらどうか?)。

The Glenn Gould Edition - Chopin/Mendelssohn/Scriabin/Prokofiev(Chopin)

なんだこれは? 手元のプロコフィエフとのカップリングは廃盤でかわりにショパンも入った2枚組になっている。というか、ショパンの録音があるとは知らなかった。というわけで、実に4回目(LP時代に2回買いなおして、CDでも買って、しかも今度もだ)のグールドとスクリャビンの3番を買うことになった(当然ショパン目当てだが)。

_ 日本Rubyの忘年会

「日本Ruby」にひっかっかる人がいたみたい。全然、気にしてなかったのだが、言われてみれば、確かに思い当たる言い回しだ。「nihonLinux」の忘年会とか。

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

_ きしだ [くぅ〜っ、東京にいるうちに知ってたら行ってたのに]

_ arton [50人でいっぱいいっぱいだったから飛び込みじゃ無理だったかも(2次会ならOKだったかな)]


2006-12-20

_ 後で調べるつもり

compiling readline
C:/home/test/ruby-1.8.5-p11/lib/mkmf.rb:255:in `initialize': Permission denied
- conftest.c (Errno::EACCES)
        from C:/home/test/ruby-1.8.5-p11/lib/mkmf.rb:255:in `open'
        from C:/home/test/ruby-1.8.5-p11/lib/mkmf.rb:255:in `create_tmpsrc'
        from C:/home/test/ruby-1.8.5-p11/lib/mkmf.rb:262:in `try_do'
        from C:/home/test/ruby-1.8.5-p11/lib/mkmf.rb:299:in `try_link0'
        from C:/home/test/ruby-1.8.5-p11/lib/mkmf.rb:303:in `try_link'
        from C:/home/test/ruby-1.8.5-p11/lib/mkmf.rb:413:in `try_func'
        from C:/home/test/ruby-1.8.5-p11/lib/mkmf.rb:584:in `have_library'
        from C:/home/test/ruby-1.8.5-p11/lib/mkmf.rb:543:in `checking_for'
         ... 9 levels...
        from ./../ext/extmk.rb:140:in `extmake'
        from ./../ext/extmk.rb:403
        from ./../ext/extmk.rb:402:in `each'
        from ./../ext/extmk.rb:402
NMAKE : fatal error U1077: '.\miniruby.exe' : リターン コード '0x1'
追記:謎だ。やり直したら通過した(というか、おかしくないし)。

_ ADO.NETコンポーネント

例:SqlCommand

なぜか初期状態のVS2005のツールボックスには登録されていない。

アイテムの追加で登録するとDbConnectionの設定やCommandTextの設定がGUIからできる。(DataSetを強制させたいのか?)

_ 事例

荘厳でほとんど完璧なまでの仕様を目指し知性を結集して新しく作り大きく広報したものが何やらよくわからない出自のものに追い出される例に追加: ひっそりと廃止になったGoogle SOAP Search API

他の類似例:Ada、OSI

反例:Unicode

境界:J2EE(特にEJB)

他にはどんなのがあったかな?

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

Before...

_ arton [ああ、でももっと深遠なるGoogleの陰謀って可能性もあるのか(で、DBはそれを嗅ぎ取ったと)。人々をブラウザーに縛..]

_ なひ [コメントついてたのか。戻ってはこないので気付かない。 これもDBが本件について批判的と読める→http://plu..]

_ arton [そこでRSS > 戻らなくても教えてくれる DBっていつも戦ってるね。COM時代にはインターフェイス継承こそ漢! と..]


2006-12-21

_ J#の使い途(zip)

放っておいたら、圧縮して保存するプログラムができたから見てくれというので見に行った。C#のプログラムだ。

System.IO.Compressionの下を使うのかと思ってたら、いきなりjava.ioとか書いてあるんでびっくりしたが、確かにJ#がインストールされているんならそれもありだな、と納得した。

// zip.cs
public class Zip
{
    public static void Main(string[] args)
    {
        java.util.zip.ZipOutputStream zo
            = new java.util.zip.ZipOutputStream(new
                    java.io.FileOutputStream("test.zip"));
        sbyte[] buff = new sbyte[8000]; // sbyte……確かに。
        foreach (string file in args)
        {
            // fileはファイル名(ディレクトリは含めない)
            zo.putNextEntry(new java.util.zip.ZipEntry(file));
            // バッファがsbyteなんで読み込みもJ#オブジェクトにする
            java.io.FileInputStream fs
                = new java.io.FileInputStream(file);
            for (int len = 0; (len = fs.read(buff, 0, buff.Length)) > 0;)
            {
                zo.write(buff, 0, len);
            }
            fs.close();
        }
        zo.close();
    }
}
コンパイルには、明示的にJ#ライブラリ(vjslib.dll)を指定する。
C:\> csc /reference:vjslib.dll zip.cs

追記:プロセッサはx86を指定しておかないと、何気なくx64システムに持っていくとランタイムエラーになります(Kazzさんのツッコミ参照)。

_ ハウリング

どのページに引っかかったのかと思ったら……

botに見せるページでリファラ部分は弾く設定にしてるはずだが、日経は何を使ってるんだろう?

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

_ Kazz [ご存知かもしれませんが。 >vjslib.dll このアセンブリは再頒布キットが必要なことと、VJ#はx86用の..]

_ arton [どうもありがとうございます。64ビットシステムで使えないのは結構痛いですね(「プラットフォームの柔軟なイメージ」とい..]


2006-12-22

_ 2が

3つ並んでる。ということに気づく程度のおらが春(寒いけど)。

_ 退屈と創造

と、上のエントリで怠惰をむさぼっているのではあるが、okujiさんのところの議論(かな?)がおもしろい。

創造や芸術の誤解(ツッコミ欄のやり取り含む)

創造という行為(ここにshiroさんが「成長」に関することを含めている点も注目すべきだ)と、金銭を得ることのみを目的とした労働、ただの消費(もっともその人が消費することで別のところでなんらかの創造が行われる可能性もある、と考えると、これは単なる人柱人生だよなと感じるが、もちろん価値ある人生である)、芸術という言葉で何を意味させるか、とかそういったこと。

こういう話題を読むと、多分小学生か中学生のころ読んだ星新一のショートショートを思い出す。ある企業が特に優秀な新入社員をまとめて無人島に送り込み、何も生産的なことはさせないようにする。彼らは退屈していろいろな遊びをする。そしていつまでたっても飽きないゲーム(球技+パズルみたいなの)を作ってそればかりやるようになる。かくしてその企業はそのゲームで市場を席捲するとか。

あるいは狼少年のようなタイプの伝説のようにも思うが、ニカラグアの聾唖の子供達が生み出した言語のこととか。

必ずしも創造に退屈は必要ではないだろうが、でも多忙から何かを生むのはそれなりに難しそうだ。逆にその多忙を創造に結びつけるということが、あのコミュニケーションスキル開発ということなんだろうか(と、突然、チャドファウラーのインド本を思い出す。あの本の本質というか論点は、コミュニケーションスキルやいわゆる業務知識というやつをハッキングすることで本人と経営側双方に幸福がもたらされる――そのために、コミュニケーションスキルとか業務知識というのがハッキングの対象たり得る興味深いジャンルだということを若い技術者に教える――ということだと思う)。

My Job Went To India オフショア時代のソフトウェア開発者サバイバルガイド(Chad Fowler)

(業務システム開発者のための現実的なプラクティス=職業観ハックの本)

創造と退屈とどちらを選ぶかと聞かれたら自由と答える、そんな人にわたしはなりたい。

あるいは、労働者と貴族とどちらを選ぶかと聞かれたら労働する貴族(逆じゃない)と答える、というのもありだなぁ。というか、かくあるべき、かくあるべく、かくあるべし。


2006-12-23

_ vixen

_ 物欲めりめり

Vista用に買ったDELLのE521があまりに静かなもので、こうなると、サーバーに使っているP!!!マシンが耳障りでうんざりしてきた。ちょっと前までは騒音マシン(轟音とまではいかない)3台態勢だったのが、1台を多少は静かなPrecision(ただし時たまびびり音が入るのが難点)に変えて、次にVistaを載せるために別の1台をE521に変えたもので、残りのサーバーマシンの音がとにかく耳につく(ケースのファンもうるさければCPUファンもうるさいし、でも一番ノイジーなのはHDDっぽい)。全員うるさきゃそういうもんだと慣れてしまえるが、1人だけ騒いでいれば厭でも目につくということらしい。

するともういやでいやでたまらなくなってくる。いやなものはいやなので別のに変えたらどうだろうとか考える。たとえばこいつもE521に変えたらどうだろうか? そうしたら64ビットマシンとして動かしても良いな。でもその場合はLinuxではなくOpen Solarisのほうが楽しいんじゃないかとか(別に楽しいわけはないが)。いや、だったらE521よりは高くつくが場所はとらないC521のほうが良いのじゃないかとか。

で、DELLの見積もりを取ってみたり。でも、一見5万9千円とか書いてあってもメモリーを2GBにして、石をDual Coreにしてとかやっていくと10万を超える。そこで先に進むのを躊躇する。でやっぱりやめる。

すると、騒音がやっぱり耳につく。

そうだマスキングだ。と、ヤナーチェックを聞き出したり。このおやじも動機主義者なんだな、とかあらためて思う。基本は4/4で1小節分だ。


2006-12-24

_ MSDNの更新がわかりにくかった(継続中)

最近、オープンライセンスというのが1ライセンスから購入可能になったので、そっちに移行しようと考えた。というのは、複数年(個人の場合は2年)一括払いなんだがその代わりに普通のパッケージ価格の半額弱の計算になるからだ。と思う(と付け加えるくらいにいま一つ良くわからない)。

で、新規のオープンライセンスのVS Pro Premium(キャンペーン中)と継続のVS Architect Premiumがほぼ同じ値段で、現在VS Architectのおれは、ランクダウンになるProではなくArchitectに移行できると思うんで発注してみたが(でもProキャンペーン中はすごく安価なのでそれはそれで魅力的ではある)、その後でリンクをクリックすると5ライセンスから(これは以前の条件のはず)と書いたページとか、なんか不安になる情報しか出てこない。まともにWebページのメンテナンスがされてないのか、なんなのか。情報も錯綜している。発注と同時にMSDNサイトに登録しろとか書いてあるが、発注をかけた状態だけでは登録に必要なIDなどが手に入っていないのでそんなことはできない(追記:発注後に届く発注確認書にIDが出ているそうです。)。なにをどうしろと。パッケージからオープンライセンスへの移行ができないという可能性もあるだろうとか。でも、それにしてはお知らせ郵政メールにはお得なオープンライセンスをどうぞみたいなちらしも入っているし。

#怖いのは、発注はかかって金は取られて、かつ登録できないとかやっているうちに有効期限が切れて更新ではなく新規になることだ。それは恐ろしい。

_ RHG

JavaScriptパワーについて勉強。
    問題
  1. 表示される値を答えよ。
    function foo(x) {
      return
        x * 80;
    }
    alert(foo(1));
    
  2. (追加)表示される値を答えよ。
    function foo2(x) {
      return x
        +80;
    }
    alert(foo2(1));
    
  3. (さらに追加)問1と問2の結果から、JavaScriptが;を自動補完する仕様について説明せよ。
  4. 表示される値を答えよ。
    alert(3 & 5 == 1);
  5. 表示される値を答えよ。
    alert(8 == 10);
    alert(8 != 10);
    alert(8 || 10);
    alert(8 && 10);
    
  6. 表示される値を答えよ。
    var x = 1;
    switch (x) {
    case x++:
      x = 1;
    case x++:
      x--;
    case x++:
      alert(x);
    }
    
  7. 表示される値を答えよ。
    alert("30" + 1);
    alert("30" * 1);
    alert("30" + 2);
    alert("30" * 2);
    
  8. 表示される値をFirefox、IE6(IE7)それぞれについて答えよ。
      var x = new Object();
      x.foo getter = function() { return 30; }
      alert(x.foo);
      delete x.foo;
      alert(x.foo);
    
    解答は無し(試せばわかるかも)。
  9. 表示される値を答えよ。
      var a = new Array();
      a[0] = 0;
      a[1] = 1;
      a[2] = 2;
      alert(a.length);
      alert(a[2]);
      delete a[2];
      alert(a.length);
      alert(a[2]);
      a[20] = 20;
      alert(a.length);
      alert(a[20]);
    
  10. 表示される値を答えよ。
    alert('8' == 8);
    alert('8' === 8);
    alert('8' != 8);
    alert('8' !== 8);
    
  11. 表示される値を答えよ。
    alert(0x80000000 >> 1);
    alert(0x80000000 >>> 1);
    alert(-1 >> 1);
    alert(-1 >>> 1);
    
  12. 表示される値を答えよ。
    var a = 10 / 3;
    alert(a);
    a *= 3;
    alert(a);
    
  13. 表示される値を答えよ。
    var func = function() { return 80; };
    alert(func);
    

Javaを知ってる人もRubyを知ってる人もCを知ってる人も等しく驚愕するポイントが必ず1つか2つはある言語、それがJavaScript。

というわけでちゃんと知りましょうということ。

入門 JavaScript (My UNIX Series)(久野 靖)

_ JavaScriptパワーについて、ちょっと説明(12/31)

holidays-lさんの疑問「※これは関数ポインタを表示してるだけだから普通な気がするけど。何が不思議なのか誰か教えて」はもっともだと思うのでちょっと説明。

問13は、この話題が出たRHGがRuby系の読書会なので、関数の内容そのものが表示されるところがイイ! ということでした(ような。僕はそうとったけど)。抽象的な関数オブジェクトの表現とかではないところがミソです。Rubyのto_procとかProc#to_sとかにからんで。ちなみに、IEの出力は入力そのままだけど(多分。インデント変えたりはありかも知れない)、Firefoxだとちゃんとプリティプリントされる点とか、処理系ごとの出力内容の違いがおもしろいです。

あとgetterはnetscape系(現在はmozilla)固有なのでFirefox用ブックマークレットを書くのでも無い限り汎用的には知っていても役に立たないと思います。IEだとスクリプトエラーになってしまうので解答(実行例)を埋め込んでいないわけです。

その他についても一応。

4番は演算子の優先順位と、それだけではなく偽が0となるという振る舞い。ここで、ではfalseという定数はなんだ? と疑問を持つのが正しい。

5番は最初の2つは普通にブーリアンなのに次の2つが値となる点。Rubyだと(holidays-lさんによるとPerlもそうみたいですね。スクリプト言語だとこの仕様は便利なんだと思います)foo ||= default_value のように利用できるので重要ですが、Javaのような挙動を想定しているとちょっとびっくりするかも)

6番は、switch文の実行時にcaseの値が評価される点とかフォールスルーとか人によっていろいろ思うところはあるでしょう。

7番は、Rubyに深入りしていると間違える例で、最初の文字列結合を見てほおーと唸ってから次の*の結果を見ると、最後の結果が"3030"になるんじゃないかと深読みするかも、という問題。

9番は、ArrayといってもObjectと同じ連想配列じゃんというあたりかな。

10番は、===の振る舞いについての質問。Javaの振る舞いから見ると==がequalsで===が==な点とか。これも知っている言語によって印象が異なると思います。

11番は、Javaと正反対なのがおもしろい点。どちらもプリミティブを少なくするアプローチなので3重不等号が必要な点とか(Cから見るとなんじゃこりゃな演算子)、でも型システムが違うので自然な演算子の2重不等号の割り当てが異なるとか。

12番は整数型が無い(ただし>>などの演算子を処理する時点で32ビット整数に自動変換するのはあり)というのが驚きどころ。仕様を読まなきゃこれは驚くよなぁ、それにしても。ちょっと試してみると

alert(10 / 3 == 3); 

とか。

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

Before...

_ 「丸ごとJavaScript」拝読しました [getterキーワードを使用したゲッタの設定は非推奨であり、将来的には廃止される予定なので、__defineGett..]

_ 「丸ごとJavaScript」拝読しました [出典を忘れてました。 http://developer.mozilla.org/ja/docs/Core_JavaS..]

_ arton [そうですね。問題の意図は、Mozilla系では動作するものの、IEではページ全体がスクリプトエラーとなってまったく動..]


2006-12-25

_ シャーロットの贈り物

子供と見に行く。クリスマスイブの最終回。がらがら。

子供とあとで話すと、2回泣いたらしい。シャーロットと別れるところ(それはそうだ)と、子供たちが次々と旅立つところ。ああ、そうなのか。

視点の移動の映画だ。それほどすごいわけではない。しかし2点の困難さがある。

まず、実写では(CGを使っていても実写映画と呼んで差し支えあるまい)蜘蛛はそれほど好かれてはいないということ。子供も蜘蛛が出てくる点ではひいていたそうだ(がらがらだったと言ったら妻がすかさずその点を指摘した。そういうものなのか――実はこの困難さにはまったく気付いていなかった)。すると、シャーロットの視点に自己を投影するのは難しかろう。しかし、それが見えなければなぜシャーロットがウィルバーに約束するのかはわからないはずだ。実際にはひいてはいたものの、見ている間にそれは感じていなかったように見える。したがって、シャーロットに対する嫌悪はありえない。(ネズミの極端な演技を利用することで、シャーロットに対するネガティブな観客の視点を分散させているのかも知れない。であれば、ネズミの過剰な演技は計算ずくだということだ。すごい話だ)

主人公が途中で変わる点も難しい。最初の主人公は間違いなくファーンだが、納屋が出てからは基本的な視点はウィルバーに変わる。しかし常にファーンは存在するので、母親の心配や、品評会での自分の手柄と言う箇所(それは正しいのだが)や、父親がファーンに彼女の行動がどれだけ自分にとって誇らしいことかと語りかける。彼女が子供から成長するきっかけになる観覧車は下から撮影する。ウィルバーの視点であり母親の視点でありファーンの視点ではない。すでにファーンは主役ではないことが強調される(観客の視点は主役の視点に基本的に一致する)。最初にファーンが学校にウィルバーを連れていくエピソードでは教師の視点と同級生の視点を入れている。教師の視点があるため母親はそれなりに安心でき、同級生の視点があるため、チケットを失くした後の展開が自然になる。

まったくの部外者であるカラスとカカシとネズミのエピソードがしつこく入る。カカシは見てくれだけだということが最後にわかる(この目玉はボタンだ)。カラスは一貫して部外者であり、単なる間抜けなにくまれ役を割り当てられている。それがシャーロットに対する嫌悪を納屋の中で分散させる役回りを割り当てられたネズミに対する嫌悪感を解消させるために利用する計算なのだろう。カラスが完全にしくじったあとになって初めて、最後の最後にネズミは本音を語る。それに対してウィルバーは心情を理解して申し入れるのか、それともプロトコルに単にしたがっただけなのか。むしろウィルバーの言葉をどう解釈するかに視点を誘導する。

多数のプロダクションがかかわっているため最初のクレジットが複雑でありそのまま市民ケーンのようにカメラが中にもぐりこむ(アラジンもそうだったが、こういったカメラの移動こそがアニメーションの強みに思える)、すでにして視点が多数に分離していることを示している。

アイコンタクトによって演出する。きわめて技法的でかつ完成されている。感動的でもある。マスターピースだ。

しかし、計算が巧妙過ぎる(子供が自然に楽しめるようにするために過剰に演出しているということでもある)のが後になってはなにつかないでもない。

(見ている間中、ずっとコッポラの映画みたいだと感じていたが、そのあたりに原因がありそうだ)

_ 春の雪だるま

はるのゆきだるま (日本の絵本)(石鍋 芙佐子)

映画が始まる前に本屋で時間をつぶしてたら、子供が読めというので読んだ。説明し過ぎず、感傷的になり過ぎず、しかし複雑な感情を伝え読後に余韻を残す。つまりは優れた児童文学だ。こういう作家もいたのか、と思った(調べると教科書に採用されていたりするようだ)。

_ PageBull

へー。こういう方向もあるんだなぁ、とおもしろがる。

#追記:そしてなぜか、今頃になって初めてIE7の左のほうにある田みたいなアイコンのタブをクリックしてみたり。あー、そういう方向というかそういう時代というか。

_ PICTAPS

PICTAPSで遊んだ。なんとなくSPAJOを作ってみた。

SPAJO

おもしろいなぁ。


2006-12-26

_ Ruby-1.8.5-p12

さて当然だけどビルドは終わってるんだけど、まだどうASRのファイル命名規則と折り合いをつけるかが決まってない。たぶん、ASR-1.8.5.5(1.8.5系列の5回目のリリース)として細かいことはruby -vするなり、「パッケージについて」を見るなりしてちょとすることになろうかと。

あと、ASRDev(ヘッダとライブラリ集)の更新が必要かどうかとか(ruby.hのdiff取って違ったら作るとかかな)、その場合の名前とか(追記:というかCのインターフェイスがstableで変わるってのは余程致命的な問題が見つからない限り無いのだから、このままで行こう)。

#irb.batにrequire 'irb/completion'をつけ忘れているのに気付いたのでこのリリースから復活

ASR-1.8.5.5(お試し。2〜3日したらinfoseekへコピー予定)


2006-12-27

_ どーん

ついに雷まで鳴り出す始末。

_ LDRの動く人

まだ、サンタのままだ。それともやっぱり空き巣なんだろうか?

追記:フィードの「更新」だけをクリックしてたって、そりゃ変らないですな。すみません。

_ NCSA Busaic

それだけ。Visual Busaicもよろしく。

_ 深慮遠謀

対応語として、浅慮陰謀というのを考えてみた。

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

Before...

_ ムムリク [深謀遠慮と覚えていたので調べたら、深慮遠謀も遠慮深謀も遠謀深慮もほぼ同じ意味であるというのを知りました。微妙に違うよ..]

_ arton [結構、組み合わせがあるんですね(それは知りませんでした、僕も賢くなったようです)。]

_ arton [フィードの先読みの有効期限チェックか。そこまでやるんだなぁ。]


2006-12-28

_ 最近の大人買い

とべない翼〔完全版〕【上】 (マンガショップシリーズ (132))(真樹日佐夫)

の上中下をどーんと。激しく後悔先に立たず。

_ かわいい

Renkoo

で、これはSNSなのかスケジュール管理なのか?

_ Exerb

Exerbコアのメンテナを募集中だ。

ASR 1.8.5のExerbが古いのが気になっているだけにメンテナに立候補。

_ メモ(JSON)

(SGML。かっこつきなのはおれがこれっぽっちも当事者じゃないから)、HTML、XMLとくる流れってのは、一貫性がある。データはデータであり、そのデータにメタデータ(属性って言ってもいいけど)が付く。何か操作したければ、その外部に別の何かを持ってくる。ふつうはXSLT。データ+属性というのは、伝統的に筋が良い。おれが当事者であったものを考えても3270(6686)データストリーム、vt100(エスケープシーケンスを表示属性=メタデータとして考えた場合)、JCAとか全銀とか。これらがデータだというのは操作を含まないからだ。もちろん無理やり、vt100のエスケープシーケンスを操作(たとえば「下線をここから開始」とか)とみなすことも可能だけど、それよりはメタデータ(ここから始まるデータには下線が付くよ)と考えたほうが端末の透過性が高い=データとしての価値が高まる。

そうでないものの例として、XML-RPCがある。明示的に操作が意識されている。しかしそれでもメタデータを超えるものではない(ともいえないかな。位置によるデータ属性とみなせるかも)

別の流れがある。S式はご存知のとおり。データ=プログラムだ。リストとして考えればデータそのものかも。でもこのリストはいつだってプログラムと可換だ。これって、ノイマン式コンピュータに実はふさわしい。データもプログラムもデータだ。

その中間にDCE-RPCとかDCOMのMEOWとかのRPCのパケットがある。このパケットの中身はByValであればオブジェクトそのもの、ByRefであればオブジェクトに対する操作の指示。あるいは、HTMLのscript要素とか。jar+MANIFESTなんてのもある。ここにSILのように操作そのものというのを含めることもできるだろう。

美しいのはどちらだろうか? コンピュータが扱うものはすべてデータでありそれはプログラムたりえるのであれば、後の2者。データはデータで独立し、言語から完全に独立で、ハードウェアやソフトウェアに依存するものではないと考えるのなら、データは永遠だがプログラムは一過性と考えるなら、前者。

でもS式は実際にはLISPとは独立している。SILやJavaScriptやその他の移動コードやRPCパケットは微妙ではある。でも、その操作をネイティブに解釈する必要って別にないよね。本来ターゲットとしている言語の仕様が明確であれば。

すると最初のは実はいらぬ苦労をしていたのかも知れない。

でも待て、読めるぞ、人間が。

そこでバイナリー(可読文字以外のコードを含む)を除こう。すると

・XMLに代表されるデータ+メタデータによる言語独立したデータ記述言語のみによって構成されたデータ

・S式

・プログラムテキスト(HTMLのscript要素からSILまで幅広く含む。ではJavaのJarにしたってクライアントにJDKというかJavacが存在する前提であれば実はバイナリで送る必要はコードサイズとかを除けば無いことになり、実はここに含まれる。でも、RPCパケットのうちByRefなものは除外される) というあたりから移動コードとコードそのものの移動として考える。と、S式もやはりここに含まれるのか。 

ここでS式も移動コードとしてくくってしまうと結局次の2種類となる。

・データそのもの

・移動コード

こうやって2元論に還元してしまうとなんのことはない、いつもおなじみの対立に落ち着く。

で、永遠なのはいつだって後者だ。LISPを見よ。でも永遠は実際にはそれほどは望まれているわけでもない。とりあえずの10年もてばよいの法則がなあなあで発動されるからだ。とりあえず10年、その時点で一番みんな(という幻想)がすきなのがなんとなく一番。適当ならその分弾力性だってあるわけだし。

つまりJSONってことだな。


2006-12-29

_ グラフィックボードを購入

玄人志向 ビデオカード/nVidia/GeForce7600GS GF7600GS-E256H/EX(-)

E521のオンボード6150だと、3Dが3.0、Aeroが3.4とかで、まあ動くからいいやんと思っていたが、転送速度が上がればもっとアジャイルなVistaになるんじゃないかと思って、かと言ってそれほどはつぎ込みたくもないのでちょうど15000円弱というのが値ごろ感があるんで玄人志向の7600を購入。

で、スコアもAeroが5.1、3Dが4.9となってバランスが良くなった(CPUが4.8、メモリが5.9、HDDが5.4なのだがバックグラウンドでいろいろ動いているので実際にはもっとCPUは上かも知れない)。数字分だけ高速になったんだろうか? 良くわかんないや。(というか、リソースモニタ見ていると遅いのはディスクに対して余分なIOがかかっているように見える。何をやってんだろうか)

でも、なんか表示が格段にきれいになったので、そっちのインパクトがでかい。でも、なぜだろう? 解像度とか色数が変わったわけじゃないはずなんだが、とにかくすごく鮮明になってフォントも妙にすっきりしてきれいに見える。ぷらしいぼなのかなぁ。

_ ASR 1.8.5.6(Exerb 4.1.0 )お試し版テストのご協力のお願い

ASR-1.8.5.6

Exerb 4.1.0リリース候補(Ruby-1.8.5-p12)を組み込んだASRです。(Exerbを作り損ねている場合は、1.8.5.6は欠番とします)

Exerbをご利用の方、実際に利用してるスクリプトをこのバージョンでExe化して動作を教えていただけないでしょうか?(ここのツッコミまたは、TBでお願いします)

一応、Exerbのサンプルの生成/実行や1.8.5で問題となったsocketのrb_io_nonblock問題については確認したつもりですが、見落としや実行時環境の不備(というよりも手厚い設備というか)によるバグがあるかも知れませんので、よろしければご協力お願いします。

# Exerb4.1.0のリリースは年明けの成人の日あたりを目標にしています。もっと早くしちゃうかも知れないけど。

# Exerbのバージョンについて補足:Exerb自身の機能については(ソースレベルでの修正などがないため)、4.0.1が相当だと思いますが、Ruby-1.8.5ではsocketに見られるようにC APIに追加があります=Exerb4x.dllに互換性がない。したがって、4.0.xとしてDLL名をExerb40.dllのままにしておくのは危険だと考えたため、4.1.0にします。

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

Before...

_ arton [あ、そうなんですか。ちゃんと以前のドキュメントを確認せずに適当なこと書いてすみませんでした。]

_ dan5 [今更ですが使わせて頂きました。簡単なスクリプトをexeにしているだけなので参考にはならないかもしれませんが、普通に動..]

_ arton [どうもありがとうございます。 それでは成人の日リリースということで(あと、ドキュメントだな)]


2006-12-30

_ それにしてもチリチリ

今日は暖かいけど、昨日は本当にチリチリしていて辛かった。

トレンチコート……

_ からいとつらい

上のはつらいなんだが、チリチリだけにからくても意味が通るな。

_ 地平線がチリチリ

言葉をこねくりまわしていたら音楽が流れ出す。

チリッチリ、チリチリ、あの地平線が ひかってる、そこにはオイラのゆーめーがーあーーるーーーー

何の歌だろう? どこで聞いたんだろう?

で、検索してやっと思い出した。

「遠くヘ行きたい」+「ダニー・ボーイ」(ジェリー藤尾)

この頃の映画は映画っぽかったなぁ。

_ 一気通貫

UMLによる一気通貫DBシステム設計 (DB Magazine SELECTION)(細川 努)

細川さんの本だそうだけど、どんな内容なのかな? UMLとDB設計が一気通貫ってことはモデル駆動分析/設計なのだろうか。

追記:DBマガジン連載の単行本化らしい。


2006-12-31

_ リポジトリの整理

icmppingだとかcstructとかの小物を単一のリポジトリにまとめた。

cstructはとんでもないバグがあったので修正。指摘してくださった人、どうもありがとう。

#というか、なんでcstructを作ったかを思い出したけど、どうしようかなとか思案したり(あまり必要性を感じなくなってきたわけなのだ)。

_ libiconv 1.11.1をMSVC6でビルド

ruby-listでiconvが話題になってるときに、エンコード名Windows-31Jを使った例が出てた。で、試しにやると

c:\home\test>ruby -riconv -e 'puts Iconv.conv("windows-31j", "utf-8", "\xe3\x80\x9c")'
-e:1:in `conv': invalid encoding ("windows-31j", "utf-8") (Iconv::InvalidEncoding)
	from -e:1
うが。
でも、CP932なら通る。
c:\home\test>ruby -riconv -e 'puts Iconv.conv("cp932", "utf-8", "\xe3\x80\x9c")'
〜

で、これはiconvのバージョンが古いからWindows-31Jが未登録なのか(ASRに添付しているiconvは1.9)と思って、FSFからlibiconvの最新版を取ってきた。1.11.1だ。

ところが相変わらずwoe32とか書いているのは良いとしてmakeに失敗する。Win32の場合、./configureせずに単にMakefile.msvcを利用すればいけるはずなんだが(というか1.9は普通に作れた)といろいろ見ていくと、結構漏れがある。

で、最終的には1.11.1はビルドできたのだが、簡単なスクリプトに関しては1.9と動作の違いは見えないように見える。Windows-31Jが登録されていない点では変わりないし。で、1.9のままでも良いかなとか思わないでもない。

追記:jzkeyさんのコメント参照。ただし僕のツッコミは正確じゃなくてWindowsの世界でcp932とutf-8変換を相互変換する場合にはローマ数字とか処理できます(1.9、1.11.1どちらも)。

一応、生成したDLLとリンクに必要なヘッダとライブラリを置いておく(libiconv-1.11.1-bin.zip)。なお、DLLに埋め込まれたバージョン番号が1.11.0.0となっているのは元のリソースがそうなっているからで、利用したソースアーカイブ自体は1.11.1を利用している。

お願い: 1.11.1にバージョンアップしたほうが良い例/理由があれば教えてください。

で、とりあえず、1.11.1をVC6でMakeする人もいないでもないかも知れないから、僕がMake通すためにやった修正だけ以下に示す。

diff -u config.h.msvc.org config.h.msvc
--- config.h.msvc.org	Thu Jul 20 04:10:22 2006
+++ config.h.msvc	Sun Dec 31 12:57:36 2006
@@ -715,3 +715,4 @@
 # define DLL_VARIABLE
 #endif
 
+#define EXEEXT "exe"

cd srclib
diff -u Makefile.msvc.org Makefile.msvc --- Makefile.msvc.org Sat Jan 24 18:11:24 2004 +++ Makefile.msvc Sun Dec 31 03:26:20 2006 @@ -90,7 +90,8 @@ xmalloc.obj xstrdup.obj \ \ relocatable.obj \ - setenv.obj unsetenv.obj + setenv.obj unsetenv.obj \ + width.obj all : icrt.lib @@ -120,6 +121,9 @@ unsetenv.obj : unsetenv.c $(CC) $(INCLUDES) $(CFLAGS) -c unsetenv.c + +width.obj : width.c + $(CC) $(INCLUDES) $(CFLAGS) -c width.c icrt.lib : $(OBJECTS) -$(RM) icrt.lib
diff -u unitypes.h.org unitypes.h --- unitypes.h.org Fri May 20 01:58:24 2005 +++ unitypes.h Sun Dec 31 03:10:10 2006 @@ -20,7 +20,10 @@ #define _UNITYPES_H /* Get uint8_t, uint16_t, uint32_t. */ -#include <stdint.h> +/* #include <stdint.h> */ +typedef unsigned char uint8_t; +typedef unsigned short uint16_t; +typedef unsigned int uint32_t; /* Type representing a Unicode character. */ typedef uint32_t ucs4_t;
diff -u unsetenv.c.org unsetenv.c --- unsetenv.c.org Sun Jun 18 00:51:52 2006 +++ unsetenv.c Sun Dec 31 03:03:49 2006 @@ -27,7 +27,9 @@ #include <stdlib.h> #include <string.h> +#if HAVE_UNISTD_H #include <unistd.h> +#endif #if !_LIBC # define __environ environ

コマンドライン(NO_NLS=1が必須。あとは必要に応じて)

nmake -f Makefile.msvc DLL=1 MFLAGS=-MD NO_NLS=1

以上

追記:Backyardに外出しした。

_ アマゾンのone to oneマーケティング

なぜ大晦日、と思わないでもないが(子供ならお年玉の予定を組めということだろうなとは思うけど)、アマゾンからEDM(E-Direct Mail)が来た。

ちゃんと購買履歴を見た上でシリーズの続きとか同傾向の作品とかを選んでいる。

が、シリーズの続きにしては遅すぎる。

ふたつのスピカ 11 (MFコミックス フラッパーシリーズ)(柳沼 行)

もう、買ったよ。

一方、同傾向のお勧めの筆頭としてこれが来た。

Binary Hacks ―ハッカー秘伝のテクニック100選(高林 哲)

いや、傾向分析は正しいが……

ちなみに、お勧めの理由として挙げられているのが

入門Haskell―はじめて学ぶ関数型言語(向井 淳)

と、

ふつうのHaskellプログラミング ふつうのプログラマのための関数型言語入門(青木 峰郎)

向井さんの本(RubyKaigiの時にいただいたサイン付き)は途中まで読んだところで実際に処理系を叩きながら読まないとだめじゃんと気づいてそのままになってるからさっさと読むことにしたい(晩飯用スタックに積んでいるのが間違いだった)。ふつけるはRHG読書会で読めるからいいやと思ってたら結局、1回しか行けずそのままになってしまったのが悔やまれる。

晩飯スタックのうち次のは読了したので子供にやったらちゃんと読んでるっぽい。

クマムシ?!―小さな怪物 (岩波 科学ライブラリー)(鈴木 忠)

最後のほうに出ている苔の上からどうやって雨樋に落ちるかの図解がかわいいと評判だ。というか、0.1mmの世界は肉眼で見るときっとうじゃうじゃとして気持ち悪いんじゃないかと思うが、顕微鏡で眺めるとノソノソしていて可愛いというのは興味深い。森を見ずに木を見る大切さ。

で、今の晩飯スタックのトップはこれ。

整数の分割(アンドリュース,ジョージ・W.)

Fe2さんの正誤表

アレキザンダもまだスタックにあるが、ほとんど読み終わった。

時を超えた建設の道(クリストファー アレグザンダー)

最後のほうになると具体的なパターンが出てきてそれがどう歴史的、慣習的、文化的、地域的に適用され、生活に意味を与えるかが書かれているので、最初のほうのエセタオイストっぽさは抜けて、きわめてまっとうな考察となるのが興味深い。それにしても、思弁的な領域を建築という具体的な技術に落とし込むというのは困難な作業だな、と考える。

_ JavaScript問題の解説

解説というほどのことはないけど、「RHG(このタイトルと内容の乖離っぷりが奇怪だ)」の後ろに「JavaScriptパワーについて、ちょっと説明」を追記。

ちなみに僕は、部分部分を除いては全滅でした。7とかは正答できるけど、仕様が〜だからこの場合は〜になる、というのを正しく説明できるという意味では、ということ。13は仕様は説明できるけど、その出力は知らなかったから、そういうのもあるけど。

_ 羹に懲りて膾を吹く。

もうすぐ正月でにんじんとだいこんの膾でなますて。

スタック上で確保/開放

ソースの雰囲気からWindowsプログラマだと想定すると、次のような羹に懲りたのかも。

while (fgets(buff, len, f))
{
    LPWSTR pw = A2W(buff);
    ...
}

行数にもよるけど普通に死ぬ(開放しないというかできないし)。

で、これは結構、面倒な問題なのだ。と、A2Wの説明をしないまま突っ走る。ATLプログラマ以外のことは知らない。(追記:alloca使ったマクロだよー)

たとえば、あーと死んだ後になって気付いて次のようなことをしてみたり。

LPWSTR conv(LPSTR p)
{
    USES_CONVERSION;
    return A2W(p);
}
...
while (fgets(buff, len, f))
{
    LPWSTR pw = conv(buff);
    ...
}

この戦略は、結構うまく行く。問題点を正しく把握して目を光らせている限りは。でも、断崖絶壁を命綱無しで歩いているわけで当然のようになんてことを! ということも生まれる。

「なんかファイルがおかしいみたいなんでデバッグ用メッセージを入れたらすごくおかしくなっちゃったんですが」
while (fgets(buff, len, f))
{
    LPWSTR pw = conv(buff);
    wprintf(pw);
    ...
}

いや、それをやったらおしまいなんだが。

Cはおもしろい。

追記:気になったので試してみたら12MBのファイルでは死なず、24MBでは死んだ(VC++6 CL ノンオプションでコンパイルした場合)。すると規定のスタックサイズは32MBくらいかな。

_ 今年上梓した本

今年は、点数にして3冊上梓しました。

読者諸氏および編集者諸氏、出版社、そして技術を教えてくださったり共に学ばれたりしてくださる諸兄に感謝します。

かんたんRuby on RailsでWebアプリケーション開発(arton)

Railsの入門書です(はじめてのWebアプリケーション開発みたいな色彩も強い)。読了後は、西さんのリファレンス性が強い本や、吉田&馬場さんのノウハウ本へ進まれることをお勧めします。

Seasar2で学ぶ DIとAOP アスペクト指向によるJava開発(arton)

この本の真のきっかけは、はぶさんといがぴょんさんとのスマートクライアントオフ会でひがさんと高井さんに出会ったところまでさかのぼります。もうすぐ3年になるのか……。そこで「IoCコンテナというのがあってね……」という話を聞いて「なるほど! そりゃ逆転の発想だ」と感動(大げさかな? でも感心というとちょっと気付かなかったくせにえらそうだよね)したところからここまで来たわけです。

Visual C# 2005プログラミング入門(arton)

というわけで1巡。

(1年前、3年前、6年前という過去があるわけですね)

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

_ jzkey [libiconvでローマ数字とかWindows-31JとかEUC-JP-MSとかを云々しようとおもったら、 パッチが..]

_ arton [ご教示、どうもありがとうございます。 ということは、CP932と書いて変換できるように見えるけど、実際にはCP932..]


2003|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|04|05|06|07|08|09|10|11|

ジェズイットを見習え