2008年6月アーカイブ

生まれつき、目の見えない少女とミナモの交流を通して描く第12話。義体化で眼は見るようになったがという形で逆説的に進めるのはなかなか面白い。生まれつき、不自由なところがあるとそれ以外のところが発達するというのはよく見受けられる言説であるが、少し調べたがその辺の妥当性に関してはこれはという文献はすぐにはみつからなそうだ。

従って、それ以外の方向性から少し考えてみようと思う。言うまでもなく、視覚が不自由だというのは不利な側面がある。ただ、この辺の有利・不利というのは両面がある場合もある。よく引用されるのは鎌形赤血球である。鎌形赤血球貧血(sickle cell anemia)は、主として西アフリカの原住民に認められるものだが貧血という不利な性質がある一方でマラリアに関して有利な側面ももつ。

彼女の場合、目が見えないというものが豊かな光を彼女にもたらした。しかし、現実に義体化によって視覚が与えられたことで彼女は光を失ったのではないかという苦痛にもがくこととなった。もちろん、現状の技術ないしは予見できる近未来の技術では先天的な全盲者に対して視力をもたらすというのは難しいであろうから、想像するよりほかにないが、テーマとして興味深く見させてもらった。

今回の話では、問題が完全にけりがついたとは言えないが。少なくとも、彼女は前進しようという意思を示した。少なくとも、それが見えたことで事件としては一件落着かなと思う。これ以上、下手に伸ばせば話を濁すことになってしまうかなと思う。このシリーズの話の根幹である、地球律にも少し触れることができたように思うし。一話の話としても非常に満足のいくエピソードであったかと思っている。

実際、人生塞翁が馬と言ったところで形質というものは有利不利が短兵急に判断できないものが多い。視覚障害については不利な面の方が多いとは思うが。先の鎌状赤血球のように有利な側面をもたらすものもある。銀河英雄伝説で出てきた劣悪遺伝子排除法のように恣意的に形質の選別を行えばむしろロクな結果にならない気がする。無論、かの法律はそれ以前の理由で考慮にすら値しない悪法であるわけだが。

しかし、『複製されるヒト』で描かれたジーン・リッチのように短期的視点で形質の判断を行うと、それこそ光のない朝に繋がる気がする。遺伝子というものはそれほど単純でないように思うのだ。

複製されるヒト 複製されるヒト
Lee M. Silver 東江 一紀 渡会 圭子

翔泳社 1998-05
売り上げランキング : 285908

Amazonで詳しく見る
by G-Tools
RD 潜脳調査室 DVD 1 RD 潜脳調査室 DVD 1
プロダクションI.G 士郎正宗

バップ 2008-08-27
売り上げランキング : 13235

Amazonで詳しく見る
by G-Tools
Technorati のタグ:

久島の過去とリンクした話ですね。純正律そのものは作中でも完全純正律とピタゴラス音律が絡められて描かれています。確かに現在多く用いられている平均律に比べて美しくなるかもしれないというのはあります、作中でも出てきたヴァイオリンなんかだと特にかな。ただ、作中でも描かれていますが転調なんかが絡むと難しいことにもなりますね。そういう意味では作中では一種の困難と位置付けられています。

久島は一種の求道者的なところがあります。一般的な感覚ではおそらく、久島には才能があったのではないかなと思います。ただ、久島にとってはなんというか執着に結びつかなかったのではないかなと思います。どれほど、才があっても執着がなければそれを続けていくのは困難ですから。まあ、刺されかねないですけどね。

久島と対比されているのがゲストキャラの一之瀬カズネです。彼の場合は久島と違って音楽に拘った、自分が道を極めて行けばきっと久島が聞きに来てくれるに違いないと信じて、しかし久島は聞きに来てくれない。それは自分の音が聞く価値がないからだと考え、ヴァイオリンを置く決意を固め、ラストコンサートを決めた。

この話では久島が聞きに来ることを一之瀬カズネが知る展開はなかったのですが。それはそれで、良かったように思いますね。なぜなら、ミナモが感動し、彼の思いはたぶん蘇ったと思うから。その後、彼が活動を再開したかどうかまではわかりませんが。ただ、私は彼の気持ちを感じたしそれでよかったのではないかと思います。

ただ、今回の話で逆に、久島の地球律への執着は感じましたね。公式サイトの記述では音楽に足しては久島は「もうやるべきことはすべてやりつくしました。僕にとって音楽とは、僕の歩むべき道ではないのかもしれません。」という立場を取ったようです。しかし、地球律にはまだやるべきことをやったとは全く思っていないのでしょう。だから、執着する。その執着がどういう終局に結びつくのかは判りませんが彼を執着させる何かがあるのでしょう。彼の言葉では「愛」となってしまうのですが。

RD 潜脳調査室 DVD 1 RD 潜脳調査室 DVD 1
プロダクションI.G 士郎正宗

バップ 2008-08-27
売り上げランキング : 21728

Amazonで詳しく見る
by G-Tools
Technorati のタグ:

今回の話はいくつかのことを知っているとより深く楽しめます。まず、エライザですがゲームとアニメについてぼそぼそと語る人のエントリーではELIZA 効果からではないかとしていますが、恐らくこの言葉の元になった ELIZA の方で ELIZA 効果の方は関連は薄いでしょう。というのも、ELIZA 効果というのは正確には「無意識的にコンピュータの動作が人間と似ていると仮定する傾向」を指し、結論的にはチューリングテストに合格するためにはプログラミングよりも社会工学的なアプローチの方が重要であるということに結びついているからです。

では、ELIZA とはなんなのかというと、もともとは心理療法上のクライエント中心療法のセラピストのエミュレートというのが根幹にあります。基本的には、聞く態度を示すというところを重視した手法とされています。この辺は耳学問というところが強いので関心があるのならば専門書を読むほうが良いだろうと思います。ELIZA は非指示的療法の一部というか、ある程度鸚鵡返しに喋るというところを実装するところにポイントがあります。ただ、単に鸚鵡返しにすればいいというのは一つの誤解で非指示的療法はそう単純なものではないのですが、本アーティクルはそれを書くのが目的ではないのでこの辺にします。

さて、ELIZA を作ったのはジョセフ・ワイゼンバウムという人で、作られたのは 1966 年です。この話でもエライザ・ワイゼンバウムという名前でエライザが登場しており、Eliza と Weizebaum をくっつけて名前を作ったのではないかと思います。名前ではあとはアリスと ウィトゲンシュタインの名前が登場しますが。アリスは恐らく、不思議の国のアリスともう一つは Alicebot からの援用でしょう。ウィトゲンシュタインは哲学者のルートヴィヒ・ウィトゲンシュタインからです。

ざっと今まで、RD 潜脳調査室を見ていて思うのは、恐らくジェームズ・ラブロックの唱えたガイア仮説がネタの根底にあるのではないかということです。ガイア仮説というのは地球と生物が互いに関係しあい環境を作っているという仮説です。そういう意味では、地球それ自体を一つの巨大な生命体と見立てる説ともいえます。まあ、その性質上、相当強力な批判にもさらされています。まあ、結構変な利用もされますからね仕方がないと言えば仕方がないのですが。インテリジェント・デザインとかその方面の疑似科学も同然の方たちに利用されることも多いですし。

まあ、ただ、ガイア仮説はフィクションのネタとして使う分には面白いので。いくつかのフィクション作品が利用しています。Wikipedia ではファウンデーションの彼方へやファイナルファンタジーの一部を挙げていますが、スプリガンや ARMS も結構うまく使っています。

RD 潜脳調査室 DVD 1 RD 潜脳調査室 DVD 1
プロダクションI.G 士郎正宗

バップ 2008-08-27
売り上げランキング : 21728

Amazonで詳しく見る
by G-Tools
セラピストとクライエント―フロイト、ロジャーズ、ギル、コフートの統合 セラピストとクライエント―フロイト、ロジャーズ、ギル、コフートの統合
Michael Kahn 園田 雅代

誠信書房 2000-09
売り上げランキング : 140644

Amazonで詳しく見る
by G-Tools
Technorati のタグ:

ブラスレイターがドイツ語で青白い乗り手を意味するというのは第7話のエントリーで書いたとおりですが。今回の話で "黙示録" の単語が出てきて、ますますヨハネの黙示録に言う青ざめた騎士を意味する可能性が高まってきました。機神咆哮デモンベインなどでクトゥルフ神話の引用をしていたりするので。まあ、"黙示録" を引いてくるのは妥当な推論と思いましたが、当たりでした。Wikipedia の記事でも、青ざめた騎士ではないのかなというのはあるけれども。もっとも、Wikipedia の定義にすれば、少々独自研究くさいかなと思うけどね。第10話まで黙示録への直接の言及はなかったわけだし。

まあ、そういうことはそっちにおいといて検討を加えると。まず、急速に堕ちていく隊長さんですね。今回もベアトリスとなにやら怪しいことをしていましたし。XAT の組織の運営もかなり怪しいですしね。ちょっと考えると融合体と直接交戦する XAT は一番、融合体のナノマシンの影響を受けやすい連中ですからね。そうなると、XAT 自体が融合体を進化させる一種の当て馬を超えて、融合体を作る一種の生贄という感があります。

そういう意味では、今回 XAT を離れる結果に向かったヘルマンとアマンダは最終的に今回の親玉と対峙する方向に向かっているのではと思います。物語に動かされているだけに、主人公という印象が強いですしね。 わからないのは、ヴィクター・シュタッフスとエレアの関係。この辺の関係がどうなっているのかが判らないので。この辺が読みにくいですね。

黙示録の四騎士というのは、

  1. 白い馬
  2. 赤い馬
  3. 黒い馬
  4. 青ざめた馬

で、Blassreiter は最後の青ざめた馬に当たるのではないかというのが目下の推論です。疫病や野獣を用いて、地上の人間を死に至らしめるとされています。青ざめた馬から来るものだと、クリント・イーストウッドのペイルライダーなんかもありますけどね。

デタラメな残像 デタラメな残像
GRANRODEO 谷山紀章 飯塚昌明

Lantis(K)(M) 2008-05-14
売り上げランキング : 114

Amazonで詳しく見る
by G-Tools
BLASSREITER BLASSREITER
松風雅也 伊藤静 石塚運昇

TOEI COMPANY,LTD.(TOE)(D) 2008-08-08
売り上げランキング : 1298

Amazonで詳しく見る
by G-Tools
Technorati tags:

どんなジレンマの「微妙・五言絶句」が面白かったので、またも F# に移植してしまいました。

open System
open System.Text.RegularExpressions
let re = new Regex("[一-龠]");;
let random = new Random();;
let extractKanji source = [| for i in re.Matches(source) -> i.Value |];;
let randomKanji source =
let kanjiText = extractKanji source in
[| for i in 1..20 -> kanjiText.[random.Next(kanjiText.Length)]|];;
let main =
let kanjis =
let text = Console.ReadLine() in
randomKanji text in
Console.WriteLine("{0} {1} {2} {3}", kanjis.[0], kanjis.[1], kanjis.[2], kanjis.[3]);
Console.WriteLine("{0} {1} {2} {3}", kanjis.[4], kanjis.[5], kanjis.[6], kanjis.[7]);
Console.WriteLine("{0} {1} {2} {3}", kanjis.[8], kanjis.[9], kanjis.[10], kanjis.[11]);
Console.WriteLine("{0} {1} {2} {3}", kanjis.[12], kanjis.[13], kanjis.[14], kanjis.[15]);
Console.WriteLine("{0} {1} {2} {3}", kanjis.[16], kanjis.[17], kanjis.[18], kanjis.[19]);;
List 1. Source code

ソースコードは、今までのものよりもシンプルになっています。実行結果も示します。

今日は、今日はどんな陽気ですか。こちらは台風が通り過ぎ、飛行機雲が見えたりしましたよ。風邪を引いたと聞きましたが、体調はもう良いのですか。あまり無理せず、今日も良い一日になさって下さい。
通 良 台 今
一 調 雲 過
下 日 邪 通
風 日 日 調
聞 今 日 日
List 2. Result
Foundations of F# (Expert's Voice in .Net) Foundations of F# (Expert's Voice in .Net)
Robert Pickering

Apress 2007-05-28
売り上げランキング : 1025

Amazonで詳しく見る
by G-Tools
Expert F# (Expert's Voice in .Net) Expert F# (Expert's Voice in .Net)
Don Syme

Apress 2007-12-03
売り上げランキング : 1007

Amazonで詳しく見る
by G-Tools
Technorati のタグ:

logana-small

現在、利用しているサーバでは referer がアクセスログに載っていないので、このサーバでは CGI などを組み合わせてログを取っています。解析ツールが弱いのも困るので、解析ツールを新調してみました。元の解析ツールは IronPython を使ったスクリプトですが、新調したのは C# で書いた GUI アプリケーションになっています。IronPython 版も何回かリファクタリングしているので C# でのコードは最新版に基づいています。

少々、工夫しているところは switch-case で多分岐する代わりに Dictionary とdelegateで実装しているところかな。まあ、Python とかでの定石をぱくっているので斬新とは程遠いですが。今後の拡張も考えてこういう実装になっております。

public delegate void InterpretingDelegate(string[] queryCells);

中略

public class AnalyzingQuery {
private Dictionary<string, InterpretingDelegate> interpretMap;

中略

private void DeclareInterpretMap()
{
if(interpretMap == null)
{
interpretMap = new Dictionary<string , InterpretingDelegate>();

中略

interpretMap.Add("www.baidu.jp", delegate(string[] queryCells)
{
if (queryCells[0] == "wd")
{
searchString = queryCells[1];
}
});

中略

}
}
public void Interpret(string queryItem)
{
string[] queryCells = queryItem.Split('=');

if (interpretMap.ContainsKey(host)) {
IterpretingDelegate id = interpretMap[host];
if (id != null) {
id(queryCells);
}
}
}
}
List. 1

セキュリティホール memo の記事によれば、日本国内で ARP Spoofing による攻撃がされていた模様。もっとも、この ARP Spoofing という手口は TCP/IP の性質をしっていないと理解が難しいと思う。HTTP 応答パケットを悪用する ARP スプーフィング・ウィルスという記事が日経コミュニケーションのサイトにあるのでこの辺も読んでみるとよい。

通常、IP アドレスではないホスト名によるアクセスで DNS を引いて、IP アドレスを求めることは多くの方がご存じであると思う。しかし、Ethernet において実際にアクセスを実行するには物理アドレス (MAC アドレス)が必要である。その、MAC アドレスを求めるのに必要なのが、ARP (Address Resolution Protocol) である。ARP Spoofing はその ARP を利用して、MAC アドレスをすり替え意図したサーバと別のサーバにすり替えるために使われている。もっとも、ARP Spoofing は不正な目的だけではなく、ダムハブではないスイッチングハブを利用したネットワークにおいてパケットを管理上の理由などで収集する際にも用いられる。そういう意味では、典型的な薬と毒薬二つの顔を持つモノともいえる。

今回の事件を受けて、高木浩光@自宅の日記でも、「通信路上の攻撃発生に、Webサイト運営者が説明責任を負うのか?」といった発言が行われている。私も、こういった件に関して Web サイト運営者が説明責任を負うのは難しいと思う。今回の事件では、サーバ上に存在するコンテンツが改竄されたわけではない。通信路上での通信に対する攻撃であり、アドレスの詐称によってアクセス先が乗っ取られてしまったわけである。

通信路上に悪玉が存在していれば、アクセスの安全性が損なわれ得るということである。別館「S3日記」のアーティクル「通信路上での改竄発生」で書かれているように、サーバ管理・ネットワーク管理を行っている者は気を引き締めなければならないが。Webサイト管理者がすべての説明責任を背負うのはつらいなと思う。

憂鬱な勇者 F# 版の再改定版です。今回は、F# の非同期構文をつかっています。パフォーマンスへの寄与は不明ですが。非同期構文を使うということが半ば自己目的化しています。非同期構文は関数の処理終了を待たずに次の処理を実行し、最終的に結果は配列という形で得られます。今回は経験値の計算の処理を非同期化し、30 レベル分すべてを非同期実行しています。

プログラム中では次のコードが非同期実行を実際にしている部分です

let computeEx current maximum =
Async.Run (Async.Parallel
[ for i in current .. maximum -> async_ex (big_int_of_int 1) 1 i ]);;

この構文によって、async_ex を非同期実行しています。async_ex は経験値を計算する関数。ex を実行するための関数です。

open System
open System.Collections.Generic
open Int32
open Big_int
let monsters = [|"焼きたてパン"; "強いシャチホコ"; "もんじゃ焼き一年生"; "怪人ホタテ男"; "ニセ勇者"; "逃げ足の早いアレ"; "睡魔"; "煩悩"; "愛らしい子犬の中の人"; "恋するスズメバチ"; "勇敢なクマンバチ"; "信じられない物"; "勇者の師匠"; "浮遊する鎧"; "怪盗ドボン"; "闇の招き猫"; "誘惑のカスタードクリーム"; "しょっぱすぎる籠手"; "カレー味の兜"; "光沢だけは一流の盾"; "若葉マークのモンスター"; "新緑の季節"; "梅雨時の車両のニオイ"; "暑すぎる夏"; "新宿らしき何か"; "やたら発達したドーナツ"; "育ちすぎたクマー"; "なごやかな雰囲気"; "凍り付いた気配"; "忍び寄る恐怖"|];;
let skills = [|"お豆腐の買い方"; "鉛筆の買い方"; "消しゴムの使い方"; "メモの取り方"; "攻撃に使えないこともない呪文"; "裏町の歩き方"; "森林浴"; "珈琲の味"; "しじみのみそ汁の作り方"; "回覧板の回し方"; "郵便物の投函方法"; "立ち話のコツ"; "猫の呼び方"; "犬の呼び方"; "カラスの呼び方"; "鳩専用豆鉄砲"; "秘密の趣味"; "速く走るコツ"; "剣の使い方"; "斧の使い方"; "まきわりで、まっきわりわり"; "聖なる祈り"; "孤独"; "涼しく過ごすコツ"; "お洒落のコツ"; "卵をふわっと焼く方法"; "ごはんの研ぎ方"; "油汚れの対応方法"; "大人の振るまい"; "Suicaの使い方"|];;
let random = new Random();;
let rec ex (r:big_int) current maximum =
if current < maximum then
ex (r * (big_int_of_int current)) (current + 1) maximum
else
r * (big_int_of_int current);;
let async_ex (r:big_int) current maximum =
async { return (ex r current maximum) }
let computeEx current maximum =
Async.Run (Async.Parallel
[ for i in current .. maximum -> async_ex (big_int_of_int 1) 1 i ]);;
let e = computeEx 1 30;;
let rec leveling current maximum =
if current <= maximum then begin
let r2 = random.Next(monsters.Length) in
let r3 = random.Next(skills.Length) in
System.Console.WriteLine("*-----");
System.Console.WriteLine("{0}を倒した!", monsters.[r2]);
System.Console.WriteLine("{0}の経験値を得た。", e.[current - 1]);
System.Console.WriteLine("勇者は{0}にレベルが上がった!", current);
System.Console.WriteLine("勇者は、{0}を覚えた。", skills.[r3]);
System.Console.WriteLine("");
System.Console.WriteLine("そして、");
System.Console.WriteLine("かくかくしかじかで、山あり谷ありの冒険が続いたが割愛。");
leveling (current + 1) maximum;
end;;
let main =
leveling 1 29;
let r1 = random.Next(monsters.Length) in
System.Console.WriteLine("{0}を倒した!", monsters.[r1]);
System.Console.WriteLine("{0}の経験値を得た。", e.[29]);
System.Console.WriteLine("勇者は、また、レベルが上がった!");
System.Console.WriteLine("勇者は、ふと空しさを覚えた。");;

非同期構文のテストも兼ねてやってみました。でも、非同期構文は持っている、Foundations of F# では確か書いていなかったように思います。あとから出た、F# の開発者自身による Expert F# には出ているかな? 前回と今回のコードを置いておきます。

Foundations of F# (Expert's Voice in .Net) Foundations of F# (Expert's Voice in .Net)
Robert Pickering

Apress 2007-05-28
売り上げランキング : 1025

Amazonで詳しく見る
by G-Tools
Expert F# (Expert's Voice in .Net) Expert F# (Expert's Voice in .Net)
Don Syme

Apress 2007-12-03
売り上げランキング : 1007

Amazonで詳しく見る
by G-Tools
Technorati のタグ: ,

今回の話はこの作品の中核を占める要素 "メタル" が直球で出てきています。メタルまたの名をメタリアル恐らくはスペリングとしては meta-real でしょう。公式サイトでは以下のように説明されています。

メタ・リアルとよばれる電脳世界。2061年の人工島においてメタルはリアルの上にオーバーラップするもうひとつの現実であり、人間の生活に欠かせないものとなっている。

meta- は前置詞的に「のちに、変化して、越えた、共に」という意味ですから。現実を越えた現実、現実とともにあるもう一つの現実といったところでしょうか。この種の単語はサイバーパンク的な作品ではいろいろ出てきます。Serial experiments lain に於いてはワイヤードと呼称されるものがそうです。.hack の The World なんかもそれに近いかな。 Avalon の同名の仮想政界もそうです。

今回のサブタイトル「職」、使われ方からすると職責という方が近いかな。メタリアルで発生した、対処の難しい事態に対して。ミナモとソウタの父・衛は中枢サーバを機能停止させることで市民の生活を守った。しかし、この対処困難なメタルの挙動は公開できるようなものではないため、衛一人が責を取ることとなった。ただ、久島にしても冷静に見えて、結構情に厚いところもあり、重要なことを衛に話していますね。結果的に、あまり湿っぽくないエピソードだったかと思います。

事実はほとんど闇に葬られるでしょうから。衛の勇気は世間には知られることはないでしょう。しかし、久島も衛の勇気を知っているし、謝意も示している。辞することになった課長のポストもいずれ、機会を見つけて返すことになるのでしょうね。知られざる英雄というのはかっこいいものです。久島がいい男をしていたというのもありますけど。今回も印象が薄い主人公の波留も凄腕ダイバーという側面をいいところで覗かせていましたし。面白いエピソードだったかと思います。

serial experiments lain TV-BOX serial experiments lain TV-BOX
仲井戸“CHABO”麗市

ジェネオン エンタテインメント 2005-09-22
売り上げランキング : 1659

Amazonで詳しく見る
by G-Tools
RD 潜脳調査室 コレクターズBOX 1(3枚組) RD 潜脳調査室 コレクターズBOX 1(3枚組)
プロダクションI.G 士郎正宗

バップ 2008-08-27
売り上げランキング : 442

Amazonで詳しく見る
by G-Tools
Technorati のタグ:

9 話を見る前にちゃっちゃと上げておきましょうということで。もはや、語る必要もないのですが。「ぼくはもう弱者じゃない」どころか「ぼくはもう人間じゃない」です。XATの隊長を誘うベアトリス、もはやXATの隊長も人間外です。二次元愛の「ブラスレイター 第8話 ぼくはもう弱者じゃない」にも書かれていますが ARMS と似たところも出てきましたね。特に人類の進化というキータームが出てきたというのもありますけど。

ただ、ARMS ではここまで末世的な香りの世界ではないですし。この感じはどちらかというと、魔族事件が多発するストレイトジャケットに似た香りを感じるのは先のアーティクルでも書いたとおりです。この辺はあくまで日常からスタートした ARMS と融合体事件が日常的に起き、市民の間に不信の芽がばらまかれているブラスレイターの世界の違いです。それだけ、状況がより悪いことになっていて黙示録的な香りが漂っているということでもありますが。

そして、ヨハンを死に追いやり、自らにも執拗ないじめを繰り返した同級生をマレクは残忍に殺害します。今まで、権力という名の力に守られてきた同級生も。物理的に強力な暴力という力を手にしたマレクの前ではもはや…。マレクは完全に堕ちていますね。完全に悪魔になり果ててはいないとはいえ衝動を抑え込めず。暴走する点ではゲルトと同じです。その意味ではジョセフのように自分を抑えられているのとは違うようですね。

ただ、隊長自らが融合体に堕している XAT はいつまで組織の体をなしているのかは判りませんね。また、身内のマレクがああいうことになってしまったアマンダもどうなるかは判りません。XAT の壊滅はそう遠くはないかなと思います。ブラスレイターはあちこちで見られますが DMM とか、@nifty とか。かなり、面白いです。

デタラメな残像 デタラメな残像
GRANRODEO 谷山紀章 飯塚昌明

Lantis(K)(M) 2008-05-14
売り上げランキング : 114

Amazonで詳しく見る
by G-Tools
BLASSREITER BLASSREITER
松風雅也 伊藤静 石塚運昇

TOEI COMPANY,LTD.(TOE)(D) 2008-08-08
売り上げランキング : 1298

Amazonで詳しく見る
by G-Tools
Technorati のタグ:

John Lam on Software のアーティクル "IronRuby and Rails" によると、IronRuby で無変更の Ruby on Rails の起動に成功したとの情報が出ています。言うまでもなく、これは重要なマイルストーンです。もともと、.NET Framework 上での Ruby の実装である IronRuby が構築された目的の一つには Ruby on Rails を .NET Framework 上で動かすことがあったと思いますから。

気になるのは、重要なマイルストーンを越えたことで IronRuby のリリース時期がいつになるかですね。IronRuby のリリース時期が見えてくれば、IronPyrhon 2.x など他の DLR を使用する言語のリリース時期も見えてきますから。まだ、現物を目にしていない Dynamic Visual Basic とか、Managed JScript とかも見えてきますかね。

Technorati のタグ: ,

以前の例だと for ループが使われているなど、命令的な構文が出てきていまいち、F# らしからぬところがあった。より、F# らしく書き直した例を示す。 手直しした場所は for ループの使用を廃止し、再帰呼び出しに書き換えている。この再帰呼び出しは末尾再帰で最適化できるので実際に出力される MSIL コードはループとなっている。F# は他の関数型言語同様に末尾再帰はループに書き換えるので、きちんと考えられていれば再帰でスタックを浪費することはない。

open System
open System.Collections.Generic
open Int32
open Big_int
let monsters = [|"焼きたてパン"; "強いシャチホコ"; "もんじゃ焼き一年生"; "怪人ホタテ男"; "ニセ勇者"; "逃げ足の早いアレ"; "睡魔"; "煩悩"; "愛らしい子犬の中の人"; "恋するスズメバチ"; "勇敢なクマンバチ"; "信じられない物"; "勇者の師匠"; "浮遊する鎧"; "怪盗ドボン"; "闇の招き猫"; "誘惑のカスタードクリーム"; "しょっぱすぎる籠手"; "カレー味の兜"; "光沢だけは一流の盾"; "若葉マークのモンスター"; "新緑の季節"; "梅雨時の車両のニオイ"; "暑すぎる夏"; "新宿らしき何か"; "やたら発達したドーナツ"; "育ちすぎたクマー"; "なごやかな雰囲気"; "凍り付いた気配"; "忍び寄る恐怖"|];;
let skills = [|"お豆腐の買い方"; "鉛筆の買い方"; "消しゴムの使い方"; "メモの取り方"; "攻撃に使えないこともない呪文"; "裏町の歩き方"; "森林浴"; "珈琲の味"; "しじみのみそ汁の作り方"; "回覧板の回し方"; "郵便物の投函方法"; "立ち話のコツ"; "猫の呼び方"; "犬の呼び方"; "カラスの呼び方"; "鳩専用豆鉄砲"; "秘密の趣味"; "速く走るコツ"; "剣の使い方"; "斧の使い方"; "まきわりで、まっきわりわり"; "聖なる祈り"; "孤独"; "涼しく過ごすコツ"; "お洒落のコツ"; "卵をふわっと焼く方法"; "ごはんの研ぎ方"; "油汚れの対応方法"; "大人の振るまい"; "Suicaの使い方"|];;
let e = new List();;
let max_num = 30;;
let rec ex (r:big_int) current maximum =
if current < maximum then
ex (r * (big_int_of_int current)) (current + 1) maximum
else
r * (big_int_of_int current);;
let random = new Random();;
let rec computeEx current maximum =
if current <= maximum then begin
e.Add(ex (big_int_of_int 1) 1 current);
computeEx (current + 1) maximum;
end;;
let rec leveling current maximum =
if current <= maximum then begin
let r2 = random.Next(monsters.Length) in
let r3 = random.Next(skills.Length) in
System.Console.WriteLine("{0}を倒した!", monsters.[r2]);
System.Console.WriteLine("{0}の経験値を得た。", e.[current - 1]);
System.Console.WriteLine("勇者は{0}にレベルが上がった!", current);
System.Console.WriteLine("勇者は、{0}を覚えた。", skills.[r3]);
leveling (current + 1) maximum;
end;;
let main =
computeEx 1 30;
leveling 1 29;
let r1 = random.Next(monsters.Length) in
System.Console.WriteLine("{0}を倒した!", monsters.[r1]);
System.Console.WriteLine("{0}の経験値を得た。", e.[29]);
System.Console.WriteLine("勇者は、また、レベルが上がった!");
System.Console.WriteLine("勇者は、ふと空しさを覚えた。");;
Technorati tags:

IronPython で CSharpCodeProvider を使って、C# のコードを動的にコンパイルして実行するサンプルを作ってみた。使い捨ての C# コードをいちいちコンパイルして、ファイルとして実行ファイルを置いておくのもディスクのゴミを増やすだけかもと。まあ、結果としてゴミの削減にならなくてもサンプルとしては面白いかなと。こういうテストコードを作るのには IronPython はとても便利だ。

import sys
import clr
from System import *
from System.IO import *
from System.Reflection import *
from System.CodeDom import *
from System.CodeDom.Compiler import *
from Microsoft.CSharp import *
if len(sys.argv) > 1:
sr = StreamReader(sys.argv[1])
source = sr.ReadToEnd()

cp = CompilerParameters()
cp.GenerateInMemory = True;

provider = CSharpCodeProvider()

cr = provider.CompileAssemblyFromSource(cp, source)
errors = cr.Errors

if errors.Count == 0:
asm = cr.CompiledAssembly
types = asm.GetTypes()
for type in types:
methods = type.GetMethods()
for method in methods:
if method.IsStatic and method.IsPublic and method.Name == "Main":
method.Invoke(None, None)

else:
print "There are no filename."

F# で書いてみました。単体で起動します。

open System
open System.Collections.Generic
open Int32
open Big_int

let monsters = [|"焼きたてパン"; "強いシャチホコ"; "もんじゃ焼き一年生"; "怪人ホタテ男"; "ニセ勇者"; "逃げ足の早いアレ"; "睡魔"; "煩悩"; "愛らしい子犬の中の人"; "恋するスズメバチ"; "勇敢なクマンバチ"; "信じられない物"; "勇者の師匠"; "浮遊する鎧"; "怪盗ドボン"; "闇の招き猫"; "誘惑のカスタードクリーム"; "しょっぱすぎる籠手"; "カレー味の兜"; "光沢だけは一流の盾"; "若葉マークのモンスター"; "新緑の季節"; "梅雨時の車両のニオイ"; "暑すぎる夏"; "新宿らしき何か"; "やたら発達したドーナツ"; "育ちすぎたクマー"; "なごやかな雰囲気"; "凍り付いた気配"; "忍び寄る恐怖"|];;
let skills = [|"お豆腐の買い方"; "鉛筆の買い方"; "消しゴムの使い方"; "メモの取り方"; "攻撃に使えないこともない呪文"; "裏町の歩き方"; "森林浴"; "珈琲の味"; "しじみのみそ汁の作り方"; "回覧板の回し方"; "郵便物の投函方法"; "立ち話のコツ"; "猫の呼び方"; "犬の呼び方"; "カラスの呼び方"; "鳩専用豆鉄砲"; "秘密の趣味"; "速く走るコツ"; "剣の使い方"; "斧の使い方"; "まきわりで、まっきわりわり"; "聖なる祈り"; "孤独"; "涼しく過ごすコツ"; "お洒落のコツ"; "卵をふわっと焼く方法"; "ごはんの研ぎ方"; "油汚れの対応方法"; "大人の振るまい"; "Suicaの使い方"|];;

let e = new List<big_int>();;

let max_num = 30;;

let rec ex (r:big_int) current maximum =
if current < maximum then
ex (r * (big_int_of_int current)) (current + 1) maximum
else
r * (big_int_of_int current);;
let random = new Random();;

let main =
let max_num = 30 in
for x = 1 to max_num do
e.Add(ex (big_int_of_int 1) 1 x); done;;
let max_num = 29 in
for x = 1 to max_num do
let r2 = random.Next(monsters.Length) in
let r3 = random.Next(skills.Length) in
System.Console.WriteLine("{0}を倒した!", monsters.[r2]);
System.Console.WriteLine("{0}の経験値を得た。", e.[x - 1]);
System.Console.WriteLine("勇者は{0}にレベルが上がった!", x);
System.Console.WriteLine("勇者は、{0}を覚えた。", skills.[r3]);
done;;
let r1 = random.Next(monsters.Length) in
System.Console.WriteLine("{0}を倒した!", monsters.[r1]); System.Console.WriteLine("{0}の経験値を得た。", e.[29]); System.Console.WriteLine("勇者は、また、レベルが上がった!"); System.Console.WriteLine("勇者は、ふと空しさを覚えた。");;

F# なので再帰で書きたかったのですが。今回は for ループを使いました。さすがにこれを再帰で書くのはかなり迂遠だったので。ソースコードを kaijyou.7z に入れておきました。

Technorati tags:

Recent Tracks

gorn708's Profile Page

このアーカイブについて

このページには、2008年6月に書かれたブログ記事が新しい順に公開されています。

前のアーカイブは2008年5月です。

次のアーカイブは2008年7月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Adwords