Derive Your Dreams

23:58 05/04/30

E4X追記

Mozilla 1.8 beta 1 や Firefox Nightly Build でも

<script type="text/javascript;e4x=1">
のように、;e4x=1 をつけると使えるようになります。

Taken SPC: E4Xの日本語サンプル:コメント

行けるそうですよん。素晴らしい。

15:20 05/04/27

ECMAScript for XML

E4X (ECMAScript for XML) という規格がありまして、まあ平たく言うと、XMLが そのまんまECMAScript (JavaScript,ActionScript等) 言語での値になって便利だよ という言語拡張です。こんな感じ。{}でXMLの中にECMAScriptの式も埋め込めたりと。

var taro = 
  <person>
     <name>山田太郎</name>
     <address>東京都</address>
     <phone>0123-45-6789</phone>
  </person>

var hanako =
  <person>
     <name>鈴木花子</name>
     <address>千葉県</address>
     <phone>0120-44-4567</phone>
  </person>

var x = <addressbook>{taro}{hanako}</addressbook>

パス表現っぽくアクセス。x/person[1]/address。

print( x.person[1].address )
// 千葉県

リストを巡回

for each( var p in x.person )
  print( p.name )
// 山田太郎
// 鈴木花子

条件式を入れてみる。x/person[name=="山田太郎"]/phone。 personのうちnameが山田太郎なヤツの電話番号。このサンプルは==での比較しかしてない 単純な例ですが、条件部には基本的にECMAScriptの式ならなんでも書けます。

print( x.person.(name=="山田太郎").phone )
// 0123-45-6789

x//name。直接の子でなくてもいいので子孫からname要素を全部とってくるべし。

print( x..name )
// <name>山田太郎</name>
// <name>鈴木花子</name>

取ってきただけでは芸がないのでちょっと属性でも追加してみる。

var idx = 1
for each( var p in x..name )
{
  p.@index = idx
  idx++
}
print( x )
// <addressbook>
//   <person>
//     <name index="1">山田太郎</name>
//     <address>東京都</address>
//     <phone>0123-45-6789</phone>
//   </person>
//   <person>
//     <name index="2">鈴木花子</name>
//     <address>千葉県</address>
//     <phone>0120-44-4567</phone>
//   </person>
// </addressbook>

とかそんな感じで、これに慣れるとDOMとか面倒でもうやってられなくなるので、 みなさん是非中毒になりましょう。今のところ Rhino という処理系が対応してます。というか、唐突にRhinoを宣伝したくなったので こんなのを書いてます。Mozilla 1.8 beta 2 の内蔵 JavaScript エンジンにも実装される 予定らしいので、Ajaxと絡めたりすればナウなヤングにバカウケです。 IEが対応してくれないと実用には微妙ですけど…。Cωなんかも似たようなコンセプトだから、 サクッと実装してくれるといいなあ。(4/30 追記

09:23 05/04/22

D Digital Mars

The Great Computer Language Shootout Benchmarks のスコアが良くても宣伝にすらならないことはたぶんOCamlが歴史的に証明済みですが、 まあとりあえずD言語が面白いのでリンク。

ここのベンチマークは、実装されてないテストについては単純にスコアを0点にして 計算してます。なので、デフォルトの表を見て実際にわかるのは、missing=8 で あのスコアを叩き出してるIntel Cが化け物だ、ということくらいしか無いのですけどね。

あとDでは bool=bit なので、nseive.d は bool をやめて byte を使わないと nseive-bits.d と同じになっちゃうんじゃないかと思ったり。

ついでにDと言えば話は変わりますが、つい最近の std.stream の更新を見るまで

Stream file = new BufferedFile("sample.txt");
foreach(ulong n, char[] line; file)
  stdout.writefln("line %d: %s",n,line);
file.close();

複数パラメータのforeachというのが言語仕様に含まれてることに気づいてませんでした…。

10:08 05/04/18

2,4,1

まことにどうでもいい話ですが、私は 2+4+1 という 計算が非常に苦手です。二回に一回は と間違える。 という 値が出る理由は明らかで、頭の中でつい 2×4+1 を計算してしまってる んですね。

こうなってしまう理由を少し掘り下げて考えてみると…こと一桁の演算の場合、 足し算よりも掛け算の方が反射的にできる、というのが一つあります。掛け算は小学生の頃に 九九という形でさんざん暗記させられたから…それもあるでしょうが、むしろ原因は "素因数分解の一意性" というヤツにあるように思えるのです。例えば という二つの数を考えてみてください。こいつらの積、35 は、なんというかもう、ものすごーく っぽいし、 っぽい。 35という数を見たときにはついつい自然と、 しかも独立に連想されてしまうので、を見た 瞬間35をはじき出すというのはとても安定して感じられます。

それに対してこいつらの和、12 を見てみると、そこにの面影はまったくない。もしかり。いや、確かに両方合わせると12なのだけど、両方合わせていいならでも、 でもいい。であることには 全く必然性がない。なので、この二つの数から瞬間的に12を出すのは、 35と比べて一抹の不安を感じてしまうのです。

とは言え、さすがの私も 5+7+1=36 という間違いはしたことがない。 これは、「5と7を足して30を超えるのはありえねぇ」と、どこかから直感がブレーキを かけてくれるおかげでしょうか。こう考えると、 というのは実にこれしかないという絶妙なバランスです。 和も積もどちらも5を越え、10を越えない。片一方がのケースは足し算や 掛け算とは何か別のメカニズムで暗算しているような気がするので除くと、こんな ベストパートナーはこいつらだけです。

あ、ちなみに+1が最後についてるのはわりと重要で、 このせいで途中式 2+4 の結果を脳内キャッシュに 残さないといけない。もし二数の計算だけで即座に紙に書き下せる状況なら、あまり 問題は起きないです。

と、いかに 2+4+1 が難しいかを考察してみました。 二個上の段落にあげた理由があるので本当に計算ミスに至るのはこの組み合わせだけ なんですけど、そうでなくても、計算の途中に掛け算の結果(35=5x7など)を一時記憶 しておくのはほとんどコストゼロでできるけれど、足し算の結果(12=5+7など)を 一時記憶しておくのは結構脳に負担がかかる気がしているのです。はい。暗算ではなく 途中式の結果をどこかにメモりながら計算する場合でも本質的には同じで、私にとっては 掛け算の方が足し算より遙かに楽、と。

掛け算の筆算

で、本題。最近「繰り上がり分離法」というページにリンクして「なるほど」とか「目から鱗」と 反応してるblogをよく見かけるのですが…

……やってみたんですけど…3桁×3桁ごときで縦に五個も、 しかも1,2,3のどれが来るやらわからない繰り上がりまでおまけについてくる足し算なんてできるかー!!!無理ー!! 普通に筆算して足し算は三個までに押さえた方が当社比3.4倍高速じゃー!!!

…という感想でした。たぶん算盤をやってた人は全然違う印象を受けるんだろうし、 件の繰り上がり分離法とやらを使うと計算が速くなる人は計算中には私と全く違う 世界を頭の中で展開しているんだろうなあ、と思うとなかなか興味深いですね。

00:35 05/04/17

無論

書きたいことは山のようにあるのだけど。

Derivative Only License ってのをきっちり考えておくというのはいいアイデアだなーと。一番問題になりそうかつ 一番曖昧になっていた方面だと思いますし。応援したい。

google://リアルタイム黒歴史 などと唐突に検索してみたら1件で、負けたような勝ったような気分です。適当ワードで 検索してみたとき、Hit数が数十件程度だった時がなんとなく一番嬉しいような気がする。

勝ったような負けたようなと言えば、『秘密。 私と私のあいだの十二話』てアンソロジーが出てるのを知ったのですが、 作家陣が森絵都で佐藤正午の北村薫と三浦しをんですよ。私が日本の現代の小説家で好きな人を 10人あげろと言われたら間違いなく入れる4人の作品が一冊で読めるというのはもの凄いお得感。 でも、結構別々な方面の作家さんを好きなつもりでいたのにその辺一冊にまとまるのか 俺偏りすぎ?というやられた感。

21:21 05/04/11

豹頭王の試練

グイン・サーガ100巻達成。めでたい。しかしアレン・ドルフュスはどうなったのか。

この小説については、だいぶ前の夏休みに集中して読んで当時の最新刊に追いついた時に、 ある程度以上面白ければとにかく"長い"というのはそれだけで文字通り長所になるな、 と感じた覚えがあります。本を持つ左手に触れる厚みがどんどん減っていく、もうすぐ この魅惑の物語が終わってしまう…という焦燥に全く止められることなく、最高速で没入して 読み進めても次から次へと続きのお話が読める幸せ。こいつはなかなか悪くない。

00:52 05/04/11

帰還

帰ってきました。結果は Honorable Mention ≒ 参 加 賞 っちうことで、なんというかもうだめぽ。 ただ、正直、実力相応でした。4問…いや、なにか奇跡が起きれば5問は解けたかも しれないけれど、現時点の私らの力では今回の問題セットで6問は絶対無理だったと思う。 運とか調子とかそういう問題ではなしに、要するに、どんなに星の巡り合わせがよくても17位 だったってことで、入賞(12位)なんて遠い遠い。あははー。 年齢的に今回が最後の年だったのでもう次はないのですが、ま、心機一転頑張ろう、色々と。

出題された問題はこちら(PDF)から読めます。お暇な方はぜひぜひ挑戦を。

その他雑感

とりあえず参加者に GoogleTシャツ 着てる人がやたら多くて面白かったです。君らかぶりすぎ!…と言いつつ私も 中に着てってたのは秘密ですが。

例によって本屋巡りをしてInside the C++ Object Modelの表紙だけ中文版で中身は英語というヤツ(こういう のってどんな意味があるんでしょ?)を買ってみたり、世界地図帳で、後半の データブック部分の人口や面積情報・あるいは微妙に漢字から意味が推測できる解説文章から、 どの国のことなのか当てて遊んでみたり(国名が全部漢字表記なので、知らないと読みにくい けどもわかると"あーこの音にこの字が当たってたのか"と確認はできる)、3DCGの挿絵が ついてる発音つきの童話絵本を買ったり。

一夜漬けすらも中国語の勉強をしていかなかったのは迂闊だったとちょっと反省。

CD屋で、最近流行ってるのはどれかなーと探していたら店員に薦められた S.H.E. というグループのアルバム『奇幻旅程』 を購入。台湾で大人気らしい。"Only lonely" と "一起開始的旅程" という曲が割と好み。

あとは…リニアモーターカーは速かった。 夜はネオンが綺麗だった。 上海雑技団は凄かった。 Lenovoのビルがあった。 街は砂っぽかった。 太極拳。

01:19 05/04/03

ほにゃ

最近自分的に絶不調だったのは、忙しかったせいでここ1ヶ月くらい本屋に立ち寄って いないための禁断症状に違いない!と自己診断を下してジュンク堂へ出撃したりしていました。 とりあえず目当ての『入門xyzzy』を入手。パラパラめくってたら自分の名前がいきなり目に入って びっくりしました。いや、まあ、xyzzyの配布書庫の展開方法の例としてNoahが使われてただけ なんですが、どうも紹介ありがとうございます。

あと買ったのは『not simple』というマンガ。これ凄い。今まで全く知らなかったけど、数ヶ月以内に 爆発的にヒットするに違いない。少なくとも自分の中では爆発的に大ヒット。 惹かれたのは絵…表紙の絵におっ?と思って手に取りました。衝撃を受けたのは そのストーリー。「お前のことを小説にする。   一年後 お前が約束の女と会って それから書き始める。 ── いいな?」 というセリフから幕を開ける、青年イアンの物語。

第0話として、"イアンの最期" がいきなり描かれて、第1話以降は過去に話が戻って そのラストに向かって順に話が進んでいくという構成なんですが、終わりがわかって いても先が気になる、いや、途中が気になる。しかもおそらく、イアンの最期はこの 物語の最後ではないだろう、そんなにシンプルではないnot simpleだろう、という予感も含みつつ。これって調べたところ、COMICSEED! という無料WEBコミック誌の連載作品なんですね。要チェックです。

電子国土

予告通り技術情報公開されてました。…が、要するにActiveXコントロールのAPIの公開ってところ。 生データくれ生データ、とちょっと思ってしまいました、はい。

11:08 05/04/02

Shanghai

ちょっと明日から上海行ってきます。

ACM/ICPC 2005

前も書いた気がするけど、せっかくだから改めてマジメに紹介してみよう。 学生の人は出るべし出るべし。

ACMの主催で、IBMをスポンサーにして、ICPC(国際学生対抗プログラミングコンテスト)というプログラミングコンテストが毎年一回開催されています。参加資格は、大学入学から 五年以内の学生。必ず3人チームで参加すること。

プログラミングコンテストと一口に言っても色々ありますが、ICPCは、数時間という 短時間でアルゴリズム的なというかパズル的な問題をできるだけ多く正解した方が 勝ち、っていうコンテスト。出る問題の雰囲気はここにあるような物がよく似てます。今のところ、言語はC,C++,Javaのどれかが 使えます。Dijkstraの最短路アルゴリズムは美しい!とかInplace-heapsort萌え~!とか 言っちゃってる人はかなり楽しめると思います。

A binary search tree is a binary tree with root k such that any node v reachable from its left has label (v) <label (k) and any node w reachable from its right has label (w) > label (k). It is a search structure which can find a node with label x in O(n log n) average time, where n is the size of the tree (number of vertices).

Given a number n, can you tell how many different binary search trees may be constructed with a set of numbers of size n such that each element of the set will be associated to the label of exactly one node in a binary search tree?

問題の例:10303

日本から出場するには、まずオンラインでの国内予選(7月頃)があります。 ここで上位30弱に入ると、アジア予選への参加権を得ます。アジア予選(11月頃)は 十カ所くらいで開かれますが、日本会場は今年度は愛媛で開かれて、 次は東京らしいです。で、これを 勝ち抜くとWorld Finalsへ進めます。Finalsは今年は上海で…来年どこだっけ? たぶん旅費の補助がいただけるので、ぶっちゃけた話タダで旅が出来てお得なのを 目的に参加する人もいるとかいないとか。

例年日本からは1チームか2チーム出場できてるようで、今年はid:tanakhさんらのとこと、 私らのとことの2チーム出ます。目指せ1-2フィニッシュなのです。無理。

presented by k.inaba (kiki .a.t. kmonos.net) under CC0