hirax.net::inside out::2009年10月

最新記事(inside out)へ  |   年と月を指定して記事を読む(クリック!)

2009年9月 を読む << 2009年10月 を読む >> 2009年11月 を読む

2009-10-01[n年前へ]

IronRuby+Mathematica Playerでグラフィック表示(試行錯誤中) 

 IronRuby+Mathematica Playerの組み合わせで、数式処理を行い・さらにその結果をグラフィック表示することに挑戦してみた。まずは、

@kernel.Compute(@inputBox.Text) 
if @kernel.Graphics.Length>0
  @pictureBox.image=@kernel.Graphics.first 
end
の部分をそのままにして、コマンドとしてグラフ描画のコマンドを入力し、Mathematica Player相手に実行してみた。すると、エラーダイアログが出て落ちてしまう。どうやら、Mathematica Playerでは"Compute"させることができないようだ。

 そこで、今度は該当部分を次のように変えて動かしてみる。

@pictureBox.image=
  kernelLink.EvaluateToImage(
    @inputBox.text,500,500)
すると、今度は落ちはしないが「入力文字列の形式が正しくありません」というエラーが出る。有償版Mathematica相手なら、このコードでも正常に動作し、グラフ表示がなされている。どうやら、ここでも有償版MathematicaとMathematica Playerでは動作が異なるようだ。

 念のため、

loop=
  MathLinkFactory.CreateLoopbackLink()
loop.PutFunction("ListPlot", 1)
loop.PutFunction("List", 2)
loop.Put(4)
loop.Put(0)
loop.EndPacket()
e=loop.GetExpr()
loop.Close()
@pictureBox.image=
  kernelLink.EvaluateToImage(e,500,500)
 といったように、Exprクラスでコマンドを渡してやってみても、やはり同じように「入力文字列の形式が正しくありません」というエラーが出てしまう。(上の記述がわかりにくい方は右の書籍「Mathematicaプログラミング 」がお勧めです。Mathematicaの「基本」が一番わかりやすい本です)

 それでは、グラフィックのインタラクティブ表示は(とりあえず)あきらめて、まずはグラフィック表示結果をファイル出力させてみる、という方向転換をすることにした。そこで、こんなコードを書いた。

include System
require 'Wolfram.NETLink'
include Wolfram::NETLink
kernelLink=MathLinkFactory.CreateKernelLink()
kernelLink.WaitAndDiscardAnswer()
result=kernelLink.EvaluateToOutputForm(
  "g=Plot[SIn[x],{x,0,5}]", 0)
result=kernelLink.EvaluateToOutputForm(
   'Export["test.gif"g]',0)
puts result
kernelLink.close
 すると、今度は、グラフィック作成まではできているのだが、その後のファイル出力関数=Export関数が未定義であるような動きになった。

 式・数値入力と数式処理ができれば、とりあえずは十分使えるのだが、グラフィック表示までできると・・・と思ってしまう。というわけで、もう少し試行錯誤が続きそうだ。

2009-10-02[n年前へ]

IronRubyとMathematica Playerの良い組み合わせ方を考える 

 さて、.NETで動くRubyであるIronRubyと無料で使うことができるMathematica Playerを組み合わせて遊んでいると、とりあえずは、Rubyの中で数式処理結果を使いたければ、EvaluateToInputFormを使って評価を行い、人間が評価結果を眺めたければ、EvaluateToOutputForm を使って評価を行うのが便利だ、という当たり前の事実に突き当たります。

 たとえば、こんなコードを書いてみます。4 x+3==0 という1次方程式を解くだけのコードです。

include System
require 'Wolfram.NETLink'
include Wolfram::NETLink
kernelLink=MathLinkFactory.CreateKernelLink()
kernelLink.WaitAndDiscardAnswer()
result=kernelLink.EvaluateToInputForm(
            "Solve[4 x+3==0,x]", 0)
puts result
kernelLink.close
このスクリプトを走らせると、
{{x -> -3/4}}
という風に答えが返ってきます。こういった形式で答えが返ってくれば、このMathematicaによる数式処理結果を用いてRubyの中で(xを-3/4で)置換を行い何か処理を実行させる・・・といった使い方がいくらでも簡単にわかりやすく書けそうです。

 これが、もし EvaluateToInputForm をEvaluateToOutputForm に入れ替えれてみたとするならば、
         3
{{x -> -(-)}}
         4
という答えが返ってくることになります。もちろん、こちらの記述の方が人間はわかりやすいですが、Ruby中で数式評価結果を使おうとすると、これでは不便極まりない表記としか言いようがありません。(もちろん、MathematicaですらOutputFormで出力した結果を直接再利用することはできません)

 Mathematica と IronRuby を上手く組み合わせると、結構面白いことができそうです。久しぶりにATOKの機能拡張であるAmetMultiでも引っ張り出して使ってみるか、それともATOK for Windows 無償試用版でもダウンロードしてみて面白い使い方ができないかどうか、少し挑戦してみることにしましょうか…。

2009-10-03[n年前へ]

「IronRuby」+「Mathematica Player」=「∞の可能性」 

 まだまだ、「(.NETで動くRubyである)IronRubyと(無料配布されている)Mathematica Playerの組み合わせ技」にハマっています。素晴らしく楽しく使うことができる言語環境Mathematicaと、やはり素晴らしく便利なRubyと、そして(多分便利な).NETを一緒に用いることができるというのは、とてもエキサイティングな体験だからです。

 今日は、まずは「Mathematicaの使い方」を眺めながら、クラスタ分析をIronRuby+Mathematica Playerでなぞってみました。

include System
require 'Wolfram.NETLink'
include Wolfram::NETLink
kernelLink=MathLinkFactory.CreateKernelLink()
kernelLink.WaitAndDiscardAnswer()
result=kernelLink.EvaluateToOutputForm(
  'datarecords = {
{"Joe", "Smith", 158, 64.4}, 
{"Mary", "Davis", 137, 64.4}, 
{"Bob", "Lewis", 141, 62.8}, 
{"John", "Thompson", 235, 71.1},
{"Lewis", "Black", 225, 71.4}, 
{"Sally", "Jones", 168, 62.},
{"Tom", "Smith", 243, 70.9}, 
{"Jane", "Doe", 225, 71.4}};', 0)
result=kernelLink.EvaluateToOutputForm(
  'FindClusters[Drop[datarecords, None,
   {1, 2}] -> datarecords]', 0)
puts result
kernelLink.close
こうコードを書くと、各人の身長と体重のデータを用いて、それらの人を何グループかにクラスタリングを行うことが簡単にできます。たとえば、こんな結果が返ってきます。
{{{Joe, Smith, 158, 64.4}, {Mary,Davis, 137, 64.4}, {Bob, Lewis, 141, 62.8},{Sally, Jones, 168, 62.}}, {{John,Thompson, 235, 71.1}, {Lewis, Black, 225, 71.4}, {Tom, Smith, 243,70.9}, {Jane, Doe, 225, 71.4}}}
見事にクラスタリングされています。もちろん、これは、Mathematicaのマニュアルそのままのコードです。けれどそんな処理をRubyで行うことができて、その結果をRubyでさらに使うことができるのはとても便利です。

あるいは、

include System
require 'Wolfram.NETLink'
include Wolfram::NETLink
kernelLink=MathLinkFactory.CreateKernelLink()
kernelLink.WaitAndDiscardAnswer()
result=kernelLink.EvaluateToOutputForm(
  'FindShortestTour[
{{4, 3}, {1, 1}, {2, 3}, {3, -5}, 
  {-1, 2}, {3, 4}}]', 0)
puts result
kernelLink.close
なんていうコードを書けば、二次元座標群を「どうすれば最短時間(距離)で巡ることができるか?」という巡回セールスマン問題を解くことができます。もちろん、答えはすぐ返ってきて、
{11 + Sqrt[2] + Sqrt[5] + 3 Sqrt[10],
 {1, 3, 5, 2, 4, 6}}
というように、「最短距離」と「どのように点(都市)を廻れば良いか」がたちどころにわかります。

 クラスタ分析、巡回セールスマン問題・・・ありとあらゆる問題を、IronRubyとMathematica Playerのタッグは解いてくれます。「IronRuby」+「Mathematica Player」を使っていると、「∞の可能性」を実現できるような「錯覚」を覚えます

2009-10-04[n年前へ]

IronRubyとMathematica Playerで経済データも自由自在 

 本当に、「(.NETで動くRubyである)IronRubyと(無料配布されている)Mathematica Player」を組み合わせたツールの可能性は無限大だ、と思います。しかも、その組み合わせが無料だというところがまた素晴らしいです。素晴らしすぎて、「そういう実装でウルフラム・リサーチは良いと考えているのだろうか?」と疑問に思ってしまうくらいです。

 今日の例題は、MathematicaのCountryData関数を使って、日本の最近40年間くらのGDP(国内総生産)を習得してみることにします。書くコードはこんな感じです。

include System
require 'Wolfram.NETLink'
include Wolfram::NETLink
kernelLink=
  MathLinkFactory.CreateKernelLink()
kernelLink.WaitAndDiscardAnswer()
gdp=kernelLink.EvaluateToInputForm(
  'CountryData["Japan", {{"GDP"}, {1970, 2008}}]', 0)
puts gdp
kernelLink.close
これで、1970年から2008年までの日本の国内総生産(GDPデータ)が時系列的に手に入ります。ちなみに、結果はこういう形式で返ってきます。
{{{1970, 1, 1, 0, 0, 0}, 2.0295777757538376*^11}, {{1971, 1, 1, 0, 0, 0}, 2.2925 011052164844*^11}, {{1972, 1, 1, 0, 0, 0}, 3.0359415844215283*^11}, {{1973, 1, 1 , 0, 0, 0}, 4.124671054658262*^11}, {{1974, 1, 1, 0, 0, 0}, 4.578535174149201*^1 1}, {{1975, 1, 1, 0, 0, 0}, 4.978680032023408*^11}, {{1976, 1, 1, 0, 0, 0}, 5.59 553536053367*^11}, {{1977, 1, 1, 0, 0, 0}, 6.886633644946532*^11}, {{1978, 1, 1, 0, 0, 0}, 9.675983051549285*^11}, {{1979, 1, 1, 0, 0, 0}, 1.0071187368835983*^1 2}, {{1980, 1, 1, 0, 0, 0}, 1.0552047308073224*^12}, {{1981, 1, 1, 0, 0, 0}, 1.1 662277105414326*^12}, {{1982, 1, 1, 0, 0, 0}, 1.0838309489751625*^12}, {{1983, 1 , 1, 0, 0, 0}, 1.182236662061611*^12}, {{1984, 1, 1, 0, 0, 0}, 1.258002926042118 4*^12}, {{1985, 1, 1, 0, 0, 0}, 1.3467326711952527*^12}, {{1986, 1, 1, 0, 0, 0}, 1.9954327828900427*^12}, {{1987, 1, 1, 0, 0, 0}, 2.4200293838043384*^12}, {{198 8, 1, 1, 0, 0, 0}, 2.9383777035023525*^12}, {{1989, 1, 1, 0, 0, 0}, 2.9401349260 95067*^12}, {{1990, 1, 1, 0, 0, 0}, 3.018112125973376*^12}, {{1991, 1, 1, 0, 0, 0}, 3.4512768484608447*^12}, {{1992, 1, 1, 0, 0, 0}, 3.766884938703116*^12}, {{1 993, 1, 1, 0, 0, 0}, 4.3237911294441895*^12}, {{1994, 1, 1, 0, 0, 0}, 4.76016480 3785754*^12}, {{1995, 1, 1, 0, 0, 0}, 5.24425055236488*^12}, {{1996, 1, 1, 0, 0, 0}, 4.620457424448448*^12}, {{1997, 1, 1, 0, 0, 0}, 4.2337825304782827*^12}, {{ 1998, 1, 1, 0, 0, 0}, 3.8422661071666924*^12}, {{1999, 1, 1, 0, 0, 0}, 4.3476506 956717817*^12}, {{2000, 1, 1, 0, 0, 0}, 4.649614280538379*^12}, {{2001, 1, 1, 0, 0, 0}, 4.0877256836277627*^12}, {{2002, 1, 1, 0, 0, 0}, 3.904822831192468*^12}, {{2003, 1, 1, 0, 0, 0}, 4.231254569386364*^12}, {{2004, 1, 1, 0, 0, 0}, 4.58488 9737074735*^12}, {{2005, 1, 1, 0, 0, 0}, 4.559019715540946*^12}, {{2006, 1, 1, 0 , 0, 0}, 4.434993203595208*^12}}
 つまり、時間と国内総生産を並べたリスト形式で返ってきます。

 もちろん、日本のGDPだけでなく、任意の国のGDPでも、どこかの企業の株価でも、それがどこのマーケットでもいつの時代でも、(基本的には)関数一つで手に入るようになります。もちろん、入手したデータの処理をすることだって、至極簡単です。経済問題をコメンテーターのように評論している文章を見ると、「データを自分で扱い、自分で咀嚼・消化してから話して欲しいものだ」と思ったりしますが、そういった作業を簡単に自分の手で行うことができます。競馬や競輪、はたまた、競艇予想のごとく、経済や株価の行方を実証・予想してみるのにも、IronRuby+Mathematica Playerの組み合わせなら簡単至極にデータ九取得・処理を行うことができます。

これが、最近のMathematicaの便利さでもあり、無料のMathematica Playerを使うことでそのMathematicaの機能を自由にシームレスに使うことができる「(.NETで動くRubyである)IronRubyと(無料配布されている)Mathematica Player」の組み合わせの凄さでもあります。

 「データの見せ方」「ビジュアライズ」はとても大切です。けれど「データそのものを手に入れること」「データを加工・処理すること」の重要性は、決して「ビジュアライズ」に劣るものではありません。基本的には、それらすべてが優れていることが理想的であり、現実的には、それらの中で一番弱い部分が相和の効果・力を決めると思っています。

 無料で使うことができる Mathematica Playerの一番の便利さ・凄さは、「データ取得」「データ処理機能・言語機能」に関して、本家本元のMathematicaに比べて決して劣っているわけでなく。基本的にはほぼそのままの機能を使うことができるようにしている、というところにあるように思えます。

 Rubyから透過的に、Mathematicanを使って入手・計算可能なデータをそのまま自由自在に使うことができる、というのは意外なほどに凄まじい機能拡張だとは思いませんか…?

2009-10-05[n年前へ]

無料の「ネット記事」を読むなら、無料の「GRAPHICATION」も読みませんか? 

 無料の「ネット記事」を読むなら、無料の「GRAPHICATION」も読みませんか?「GRAPHICATION」という「雑誌」を読み続けていたい自分自身のために、そして、「GRAPHICATION」をまだ無料定期購読するに至っていない人のために、今日いくばくかの文章を書いてみたいと思います。

 人の活字離れが指摘されて久しく、一定の評価を得てきた老舗の雑誌なども商業的に行き詰まる例が目立っています。またインターネットに代表される電子メディアの台頭で、雑誌を取り巻く環境は大きく変わりつつあります。

GRAPHICATION 2009年9月号(164号) 「雑誌を考える」(詳細)

 まず、結論を一言で書きましょう。結論は単純です。つまり、「無料で最高の雑誌を定期購読できるのだから、悩むことなく、GRAPHICATIONの定期購読申し込みを今すぐするべきだ」ということです。あなたが使うのは、ほんの数十秒の時間だけで、得られるものは「プライスレス」の豊かさ・厚み、です。そして、きっとその豊かさ・厚みはあなた一人の中に収まり続けるものでなく、さらに広がるものだと思います。

 これまで、繰り返し「GRAPHICATION」の素晴らしさについて触れてきたように思います。

 (GRAPHICATIONを)ひとことで言うなら、富士ゼロックスの企業広報誌ということになります。ただ、多分その一言で伝わるイメージは間違っていると思います。もし、この雑誌を手に取ったことがなければぜひ一読してみるべきだと思います。・・・もしかしたら、いえ、もしかしなくても、きっと気に入ると思います。

 「雑誌を取り巻く環境は大きく変わりつつある」と雑誌であるGraphicationが呟く。この呟きは、真剣に受け止めたいと思います。

 私は、「GRAPHICATION」は、数ある雑誌の中でも、商業誌・企業広報誌を問わずとても素晴らしい一冊だと思っています。「特集テーマ」もとに、実に優れた特集執筆陣・連載陣がそのテーマに合わせた内容をさまざまな視点から奥深く書き上げる雑誌です。

 「雑誌を終える潮時」・・・という言葉を聞くことがあります。今という時代は、雑誌を作る側からそういった言葉が出ても実に自然に納得できてしまう時代になりました。いえ、なってしまいました。実際、ここ2,3年の間に、数多くの雑誌が休刊してしまいました。

 しかし、その一方で、無責任な雑誌愛読者としては、たとえば、「GRAPHICATION」のような雑誌には「潮時」というものはないのではないか、とも信じています。この瞬間・刹那に消費され尽くされるようなものでない、価値あるものに対して「潮時」という言葉は当てはまらないのではないか、と思うのです。

 もしも、こうした雑誌に「潮時」という言葉が仮に当てはめてしまうとしたら、それはこの時代=現代、あるいは、将来=未来に対し、絶望・諦めというものを当てはめてしまっているのではないか、と感じてしまうからです。

 「モーレツからビューティフルへ」と、日本を動かしたコマーシャル、それを言いかえれば、企業広報映像がかつてありました。私は、その時代を知っているわけではありませんが、あのようなCMは決して時勢に迎合するのではなく、時代の先を予言していたものだと思います。私にとっての、GRAPHICATIONはそういう過去から現代そして未来までを見通そうとしているクロニクルです。

 1960年代から1970年代へと時代が変化していく中で、企業を社会の中でどんな意味があるものとして位置付けるかがテーマだった。1960年代にひたすら成長路線を走る陰で切り捨てられてしまった人間らしさを表現するために、「モーレツ」に代わって「ビューティフル」をうたった。
 すべての行動は、意識的であれ無意識であれ、現状をどう捉えているかがベースとなっている。ビューティフルキャンペーンも、「1970年代は時代の大きな曲がり角になる」という時代認識が出発点となっていた。「新しい時代を切り開く上で、われわれはこういう観点から社会に寄与したい」と表明したのだ。時代の転換に対する洞察がなければ、このキャンペーンはスタートしなかったであろう。

ビューティフルキャンペーン

 この消費社会の中で、「豊かさとは何か」「人の繋がりとは何か」「人とは一体何なのか」と繰り返し問い続けるGRAPHICATIONは、そんな貴重なものだと思います。

 無料の「ネット記事」を読むなら、GRAPHICATIONの「GRAPHICATION」も読みませんか? 無料で最高の雑誌を定期購読できるのなら、悩むことなく、GRAPHICATIONの定期購読申し込みを今すぐしてみませんか?

2009-10-06[n年前へ]

無料配布MathematicaカーネルとNET Framework実装IronRubyでグリッド・Matheatica計算環境は5分で作れる 

 今日も、「無料配布のMathematicaカーネルと(やはり同じく無料で使うことができる).NET Framework上で動作するRubyであるIronRuby」を使って色々なことをしてみよう、という話の続きです。もちろん、さらにパワーアップした可能性を追求してみたいと思います。

 数式処理環境であるMathematicaには、オプション製品としてgridMathematicaという製品があります。Mathematicaでグリッド・コンピューティングを実現する、というようなネーミングの製品ではありますが、実際にはMathematicaで並列(パラレル)計算を実現するための拡張オプションです。価格は・・・眼の球が10cmくらいは前に突き出てしまうほどのお値段になっています。

 さて、「無料配布のMathematicaカーネルと(やはり同じく無料で使うことができる).NET Framework上で動作するRubyであるIronRuby」を使えば、色々なことができるわけです。そこで、今日はgridMathematicaが可能にするようなことを、誰でも入手可能なツールで実現してみることに挑戦してみようと思います。

 本来ならば、分散処理環境をRubyで実装したdRubyなどを使いたいところですが、いくつかの理由から、今日は(IronRubyで動作する)ごくごく普通のRubyライブラリを使って、Mathematicaカーネルをネットワーク上で並列計算させることができるコードを書いてみることにします。

 まずは、(無料配布されている)Mathematicaカーネルを扱うサーバ・アプリを書いてみます。といっても、単にこれだけのコードです。

class Mathematica
  require 'Wolfram.NETLink'
  include Wolfram::NETLink
  def initialize()    
  end
  def open
     @kernelLink=MathLinkFactory.CreateKernelLink()
     @kernelLink.WaitAndDiscardAnswer()
  end
 def do(command)
     @kernelLink.EvaluateToInputForm(command, 0)
  end
  def close
    @kernelLink.EvaluateToInputForm('MVClose[]', 0)
  end
end

require 'webrick'
include WEBrick
m=Mathematica.new
m.open
s=HTTPServer.new(:Port=>ARGV[0].to_i, 
                             :DocumentRoot=>'',
                             :RequestTimeout=>600,
                             :MaxClients=>1)
s.mount_proc("/restart") {m.close;m.open}
s.mount_proc("/shutdown") {s.shutdown}
s.mount_proc("/"){|req,res|
  res.body='use /evaluate/command'
  if /evaluate\/(.+)$/=~req.path
    res.body=m.do($1) 
  end
}
trap("INT"){m.close;s.shutdown}
s.start
 これは、例題のため、多くの処理をはしょっていますが、例題の範囲ではきちんと動作するコードです。ひとことで言えば、URIを介して渡されたコマンドを実行した結果を返すWEBサーバアプリです。

 ちなみに、このスクリプトを mathematicaServer.rb と名付ければ、

ir.exe mathematicaServer.rb 80
という具合で、ポート80番でコマンドを待ち受けるWEBサーバが起動します。あるいは、
ir.exe mathematicaServer.rb 81
とすれば、ポート81番でコマンドを待ち受けるWEBサーバが起動します。複数台のPC上で実行しても構いませんし、あるいは、(テスト用として)一台のPC上で複数のサーバを実行しても構いません。もちろん、多数台のPC上でサーバー群を立ち上げる方が高性能になるのは言うまでもありません。

 さて、ここまで来たら、後はそれらのサーバ群に"Mathematica"による並列計算をさせるスクリプトを書いてみることにしましょう。たとえば、こんな感じです。

require 'pp'
require 'net/http'
Net::HTTP.version_1_2
result=[]
threads = []
command='2+2'
uri=['localhost','localhost']
port=[80,81]
2.times do |i|
  threads.push( 
    Thread.new do
      Net::HTTP.start(uri[i],port[i]){ |http| 
        r=http.get('/evaluate/'+command);
                        result<<r.body;} 
    end
  )
end
threads.each do |t|  t.join end
pp result
 このスクリプトをmathematicaController.rbとでも名付け、
ir.exe mathematicaController.rb
という風に起動してやります。もちろん、この並列計算を行わせるコントローラ側はIronRubyである必要はありませんから、
ruby mathematicaController.rb
でも構いませんし、計算サーバ群は結局のところ単なるWEBサーバ群なのですから、Rubyプログラムである必要もありません。

 このスクリプトの内容はとても簡単です。上の例であれば、ローカルPC上で動いている、2つのMathematicaカーネルを使ったサーバに対して、"2+2"という計算をパラレル(並列)に投げて、その結果を受け取りまとめているわけです。その結果、

["4","4"]
という計算結果が最終的には手に入ることになります。httpを使い、また、コマンドのをエンコード処理を行わずGETで投げつけていますが、それはあくまで簡単なテスト用であるためです。

 Mathematicaという最高の開発環境を使い、並列計算も可能にし、さらに、そういったプログラムを自分で書くことができる・・・なんて、とても楽しそうではありませんか?この「無料配布のMathematicaカーネルと(やはり同じく無料で使うことができる).NET Framework上で動作するRubyであるIronRubyを使って、遊んでみよう」というシリーズ!?の可能性はまだまだ広がりそうです。

 さまざまなデータに対し透過的にアクセスが可能で、並列計算もとても簡単にできたなら、色々なことができそうだ、と思えますよね?無料配布のMathematicaカーネルとNET Framework実装IronRubyでグリッド・Matheaticaコンピューティングのプログラムは、実際のところ5分程度で作ることができます。

 無料配布のMathematicaカーネルなのに、それが実に多くのことができることに驚かされます。少し時間ができたとき、こんなプログラムを作って遊んでみるのはいかがでしょうか。

2009-10-07[n年前へ]

「細切れの知識」や「あるあるネタ」と「腹持ちのする豊かな知恵」の違い 

 無料の「ネット記事」を読むなら、無料の「GRAPHICATION」も読みませんか? の続きです。

 「GRAPHICATION」の良さは、時代を映す内容を(時には時代に先駆けて)、限りなく豊かな知恵を伝えながら、それでいて実に新鮮に面白く読むことができるところにあります。今月の執筆者を見ても、その充実度がわかると思います。しかも、驚くべきことに、エッセイ連載陣すら、特集テーマのもとに文章を書き下ろしているのです。

 わたしがGRAPHICATIONが好きなのは、そこに詰まっているものが「細切れの知識」ではないからです。細切れの断片だけをクローズアップした知識であれば、週刊誌やテレビの「あるあるネタ」、あるいは、短いネット記事でも見れば十分です。

 けれど、分厚く、食べる(消化する)のに時間がかかり、逆に言えばとても腹持ちのする「知恵」は、週刊誌やテレビ・ネット記事では提供できません。「細切れの知識」や「あるあるネタ」は次の日の会話や、その瞬間の疑似知識欲を満たすにはとても役立つように見えます。…けれど、長い時間を考えてみると、少しつまらないな、と感じられてしまいます。雑誌が、「知る喜び」という言葉の対象を、(一時の人気が出がちな)「細切れの知識」や「あるあるネタ」にフォーカスしてしまうなら、それなら、そんなことは「テレビ・ネット記事」で流し見すれば良いのではないか、と私は思います。「知識欲」と「知恵欲」は違うと思います。本当に長く役立つものは、断片的な「あるある・知っ得」的知識ではなく、知恵が指し示す先にあるものだと思います。記憶すれば・覚えれば良いであれば、(記憶量が決して多いとは言えない)人間にとって、そこに果たして一体何の価値があるのでしょうか。

GRAPHICATION(グラフィケーション)の良さは、「細切れの知識」を並べただけのものでない、すぐに役に立つかどうかはわからないけれども「確かに豊かな知恵」が詰まっているところにあります。腹持ちのする、胃袋に確かに居続ける、そんな時を経ても確かに残り続ける堅い知恵を、決して重くない言葉として綴っているところにあります。

 さて、GRAPHICATIONの定期購読申し込みはされたでしょうか? 今では稀有といっても過言でない、密度の高い雑誌が無料で送付されてくるのですから、申し込まなければ「決して長くない人生もったいない」と思います。決してあなたに損はないと思います。無料の「ネット記事」を読むのであれば、無料の「GRAPHICATION」も読んでみませんか?損はさせない、と思います。

2009-10-08[n年前へ]

使えそうだけれど役に立ちそうにないモノは捨てる…!? 

 モノがたまってきたので、使いそうにないものは、どんどん捨てています。そんな時、悩むのが「結構使えそうだ」と思い集めたけれど、結局使わなかったもの、しかも、とても役に立ちそうにないモノです。

 たとえば、20メートル近く激流が飛ぶ超強力水鉄砲。これは、結構使えそうなのですが、なかなか役に立つシチュエーションがありません。そこで、駐車場でスケートをしている時に、試しにスケボーを載せてくれた親子連れにお礼にあげてしまいました(押しつけたとも言う)。

 あるいは、たとえば、こんなスヌーピーのハンドベル食玩。PICでも使って、このハンドベルで自動演奏器(ハンドベル・オルゴール)を作ろうと考え、ド・レ・ミ・ファ・ソ・ラ・シと集めたのですが、このハンドベルが実にホンキートンクな音程がズレかたをしていたり、工作作業がなかなかできなかったりして、今では単なるゴミと化しています。

 あるいは、イチローのバッティング食玩なども、そのひとつです。これは、回転する円の上にイチロー群を貼り付けて、回転速度に合わせてストロボを光らせれば、何人ものイチローが素振りをする…という「リアル立体アニメーション・アート」を作ることができる、と考えたわけです。しかし、これも、そんな趣味の工作をする時間がないままに、ガラクタ箱の中に放り込まれています。

 そんな、使えそうだけれど役に立ちそうにない小道具がたくさんあります。「少年探偵セット」「不思議な手品カードセット」「日光写真カメラキット」「いつの間にか回転方向が逆になる謎の石」「コウモリの声が聞けるバッド・ディテクター」

 そんなガラクタ箱の中を見るたびに、さてさてどうしたものか・・・と悩みます。使えそうだけれど役に立ちそうにないモノを捨てるか、捨てないか…それが目下の問題です。

使えそうで・だけど役に立ちそうにないモノは捨てる…!?使えそうで・だけど役に立ちそうにないモノは捨てる…!?使えそうで・だけど役に立ちそうにないモノは捨てる…!?






2009-10-09[n年前へ]

無料配布のMathematica PlayerとIronRubyで天文学計算をしてみよう 

 さらに、「無料配布のMathematicaカーネルと(やはり同じく無料で使うことができる).NET Framework上で動作するRubyであるIronRuby」を使って色々なことをしてみよう、という話が続きます。

 今日は、Mathematicaを使って計算(入手)可能なデータの中から、天文学に関するデータを使った計算例を紹介してみます。具体的には、現在位置(緯度・経度)を指定した上で、次に太陽が昇ってくる時間を習得するスクリプトの例です。たとえば、東京タワーの緯度・経度を指定した上で、次の日の出時刻を計算してみることにしましょう。

include System
require 'Wolfram.NETLink'
include Wolfram::NETLink
kernelLink=MathLinkFactory.CreateKernelLink()
kernelLink.WaitAndDiscardAnswer()
com='$GeoLocation={35.658587,139.745425};'
com+='AstronomicalData["Sun","NextRiseTime"]'
result=kernelLink.EvaluateToInputForm(
  com, 0)
puts result
kernelLink.close
 これだけ、です。しかも実際に使っているMathematicaの命令は、
$GeoLocation={35.658587,139.745425};
AstronomicalData["Sun","NextRiseTime"]
だけです。これだけで、
{2009, 10, 13, 5, 46, 0.9059999999990396}
という風に、2009年10月13日5時46分0.9秒に陽が昇るのか、と結果をすぐに手に入れることができます。もちろん、"Sun"でなく、"Moon"なら優雅に月が昇る時刻を手に入れることができますし、たとえば、火星だって・木星だって…地平線から顔を出す瞬間の時刻を計算することができます。ラプラスの悪魔のごとく、物事が動くさまを手に入れることができます。

 こんな風に色々なデータに一瞬でアクセスできるとなれば、しかも、面倒なWEB APIを叩かなくても良いとなれば、色々なことをしてみたくなりますよね。

2009-10-10[n年前へ]

楽しい?辛い?日本横断日帰りツーリング 

 「クロスバイクで、”日帰り”横浜→日本海 ツーリング」をしませんか、と誘われた。一日で日本海まで行き、帰りは快適新幹線、という計画である。

 その時は、車に轢かれたばかりでもあり、「無鉄砲で面白そうだけど、若くもないし…」と唸っていたところ、その週末には、”日帰り”横浜→日本海 ツーリングを敢行したそうだ。

 普通の街走りクロスバイクで、朝の0時に横浜を出て、夜の12時に日本海に辿りついたそうだ。何でも、体中が痛くてたまらないので、始発の電車で横浜に戻ることにした、という。何か(とても辛そうだが)楽しそうで、羨ましい。

 クロスバイクといえば、GIANT のESCAPE R3はステムをひっくり返しハンドルを低くして体に合わせ、ペダルを「もらったビンディング・ペダル」と交換した。「もらいもの人生」一直線なので、新たに何か買い足すつもりはなく、後は体力は増やし体重を落とすだけである(それができれば苦労はないのだが…)。

 近々、私も「日本横断日帰りツーリング」に挑戦してみようと思う。さて、日本横断をする場合、いちばん短く平坦な場所は一体どこだろうか。

GIANT ESCAPE R3






2009-10-11[n年前へ]

「金星」や「木星」と「金木犀」 

 天体計算プログラムを書くと、たとえば、その中で「金星」とか「木星」という言葉を打っていると、なぜか自然に「金木犀」という似て非なる言葉が頭の中に浮かんでくる。

 今頃の季節、街中を歩いているとどこからかトイレの芳香剤のような匂いがしてくる。そのトイレの芳香剤のごとき匂いが、実は「金木犀の花の香り」だと知ったのは、いつの頃だったろうか。教えてもらったのは、いつだったろうか。

 金木犀の匂いは(多分)わかるようになったのだけれど、今でも金木犀の花はよくわからない。「丈夫そうな緑の葉っぱのあの樹」ではないか、その樹に咲いているのが金木犀の花ではないか、と想像してみるのだけれど、いつも、今一つ確信が持てないまま金木犀らしき樹を飾っている花を金木犀だと勝手に思い眺めている。

 金木犀は桂花とも言われるという。金木犀をお湯で煎じて、桂花茶ならぬ、金木犀を今度飲んでみることにしよう。金木星の強い香りを、その香りに似合うカップにでも注いで、鼻と喉で味わってみることにでもしようか。

2009-10-12[n年前へ]

引数付きのMathLinkFactory.CreateKernelLinkの書き方 

 無料配布のMathematicaカーネルを(やはり同じく無料で使うことができる).NET Framework上で動作するRubyであるIronRubyから使うときに、引数無しの"MathLinkFactory.CreateKernelLink() "を使うと、毎回ダイアログが開き"MathKernel.exe"のパスを尋ねられます。そして、毎回パスを入力します。

 その作業は、やはり面倒くさいものです。そこで、「MathLinkFactoryでリンクを作成する」といったドキュメントを頼りに、(「ありがち」なMathematicaカーネルのパスを指定して)自動でMathematicaカーネルと通信を開始するスクリプトを書いてみます。(大文字小文字が最初の記事投稿では間違えていたので、mathkernel.exeからMathKernel.exeへと修正してあります)

require 'pp'

class Mathematica
require 'Wolfram.NETLink'
include Wolfram::NETLink

def initialize
   @kernelLink=MathLinkFactory.CreateKernelLink(
    "-linkmode launch -linkname 
    'C:\\Program Files\\Wolfram Research\\
     Mathematica Player\\7.0
    \\MathKernel.exe'")
   @kernelLink.WaitAndDiscardAnswer()
 end

 def do(command)
   @kernelLink.EvaluateToInputForm(command, 0)
 end

 def close
   @kernelLink.EvaluateToInputForm(
       'MVClose[]', 0)
 end

end

m=Mathematica.new
pp m.do('Table[i,{i,1,10}]')
m.close
 CreateKernelに引数をつけただけですが、Mathematica Playerのインストール先が決まっているなら、とても便利で手間要らずになるのでここにメモしておくことにします。

2009-10-13[n年前へ]

MathematicaとMathematica Playerの描画関数の違いを調べてみる 

 引き続き、無料で使うことができるMathematica Playerでどれだけのことができるのかを、色々調べています。

 Mathematica Playerに付属するMathematicaKernel.exeが表示・出力機能以外は、ほぼ機能制限がない理由が少しわかってきたような気がしてきました。

 Mathematica Playerは、Mathematicaのノートブックを閲覧することはできても、変数などを変えるなどの変更作業はできません。そのため、Mathematicaで作成されたファイルをMathematica Playerで閲覧するだけであれば、計算・評価機能が必要ではないように思えます。

 しかし、Mathematica Playerではユーザー・インターフェースを用いて動的にインタラクティブにグラフなどを表示する機能を使うことができます。すなわち.nbp形式に変換されたMathematicaノートブック上でグラフを自由度高く変化させることができるのです。

 Wolfram(ウルフラム)のサイトでMathematicaノートブックを.nbp形式に変換し、その.nbpファイルの中身を眺めてみると、表示されたグラフの一部はGraphic要素の内容が圧縮された形式として保存されています。つまり、2次元画像ならば圧縮された2次元画素のリスト(にRaterize関数をかけた)形式に、折れ線グラフなどは圧縮された二次元座標のリストデータ(にLine関数をかけた)形式として保存されています。そして、それだけではなくて、Plot関数なども使われているのです。

 そして、そのPlot関数の中身を動的に変化させることができるようになっているように見えます。内容をきちんと理解できてはいませんが、ざっと眺めた限りでは、そういう風に動いているように見えます。つまり、すべて通常のMathematica構文により、(Mathematica Playerで再生される)動的なコンテンツも実現されている、という風に見えます。

ただし、それらのPlot関数は、通常のMathematicaで使うことができるPlot関数とは第一引数が大きく異なるようです。そのため、Mathematica Playerに付属するmathematicaKernel.exeのデータ描画・可視化関数を通常のMathematicaのデータ描画・可視化関数と全く同じに使うことはできそうにありません。多少工夫をすれば使えそうにも思えますが、単純に同じように使うことはできそうにありません。

 とはいえ、Mathematicaの数値・数式処理/解析機能・各種データ取得機能を使うことができるだけでも、十二分に素晴らしいわけで、もう少し、無料のMathematica Playerを活用してどれだけ凄いことができるのか、その可能性をまだまだ追求してみたい、と思います。

2009-10-14[n年前へ]

AutoHotkeyで任意の場所・タイミングでRubyやPerl等を使おう 

 キー入力する際に、さまさまな機能を使いたくなります。たとえば、以前作ったAmetMulti,AmetPerlなどは、ATOKのAMET機能(変換機能を拡張することができる仕様)を使って、Atokでプログラミング言語の一行プログラムを実行させたり、そういったワンライナー(一行プログラム)を辞書登録してしまうことで、文字処理・作成だけでなく、アスキーアート作成機能・画像取得機能などさまざまなことをしてみました。下の動画は、AmetMutiを使って、画像取得を行い、画像処理をかけたり、アスキーアート化を行った時のデモ動画です。

 最近のATOKには、そういった機能拡張がより簡易にできる機能が追加されているようです。とはいえ、市販ソフトのお仕着せ機能を使うのも(趣味としては)少しつまらないですし、何より、ATOKで似たようなことをするならAMET拡張機能を使えば良いので、わざわざ車輪の再発明のようなことはしたくありません。(趣味なんですから)何か新しいものに挑戦したいものです。

 そこで、今回はWindows用の(これまた無料の)AutoHotKeyを使って、キー入力を自由自在にフックして、さまざまな機能拡張を追加してみたい、と思います。AutoHotKeyはさまざまな機能を持ったソフトウェアなので、AutoHotkeyは、キー・スワッピングや語句置換や、キー入力などをトリガーにした各種処理ができるソフトで、非常に高機能なものです。その概略については、「AutoHotkeyを流行らせるページ」を一読してみれば、知ることができると思います。とはいえ、あまりも機能が多岐にわたっているので、まずは、既存のスクリプトを使ったり・改造したりすることから始めるのが良いと思います。

 さて、今日は、AutoHotKeyを使い、"rby"と打つと、クリップボードに入っているRuby(ワンライナー)スクリプトを実行させ、その結果をキー送出させるプログラムを書いてみることにします。

 準備作業は、まずAutoHotKeyをインストールします(再起動などは必要ありません)。そして、プロセスを起動して標準出力を読み書きするスクリプトをAutoHotKeyのAutoHotkey.ahkに追加します。もちろん、Rubyも必要です(どのようなバージョンでも構いません)。また、Rubyでなく、Perlでも何でもスクリプトを変えれば同機能を実現できます。

 それでは、スクリプトをAutoHotkey.ahkに追加しましょう。

::rby::
a=ruby -e '
c='
d=%a%%clipboard%%c%
pi:=PRun(d)
PWaitExit(pi)
r:=PRead(pi)
Send,%r%
PClosehandle(pi)
return
はい、これだけです。rbyという単語入力がされたら、rubyを-eオプションを付け起動させ、クリップボードの中身をワンライナーとして処理した上で、その結果をキー送出させる、というわけです。

 あとはAutoHotKeyで.ahkファイルを再読み込みし、メモ帳を開いて、

puts Time.now.month
と書き、その一行をコピーして、rbyと入力しエンターキーを押すと、そこには10という文字が出現します。もしも、 puts Math.sin(5) という一文をコピーして、rbyと打てば、メモ帳上に-0.958924274663138という文字が出現します。

 もちろん、メモ帳でなくても構いませんし、

a=ruby -e '
の一行を
a=perl -e '
とでも適当に替えるだけで、Perlを好きなソフト上で好きなタイミングで自由に使うことができるようになります。awkでも何でも同じ話、です。

 というわけで、今日はautoHotKeyを使って、自分の指先が叩くキーボードのすぐ向こうに、RubyやPerlの機能をいつでも呼び出せるようにしてみました。もちろん、この話はさらに(無料の)Mathematica Player機能の実装などにも繋がっていくことになります。

2009-10-15[n年前へ]

「身長・体重・スリーサイズ」で「今昔アイドル」をクラスタリングしてみよう 

 最近、色々挑戦してみた結果、(無料の)Mathematica Playerと(.NET実装の)Iron Rubyを使ってさまざまなことができるようになりました。今回は「体重を公表しているアイドルのスリーサイズ」のデータを使い、「身長(cm)、体重(kg)、B(cm)、W(cm)、H(cm)」を特徴量として、「アイドル」をクラスタリングしてみることにしました。使う関数は、MathematicaのFindClustersです。具体的なコードを、簡単のために(Player版ではない)Mathematicaで書くと、

data = Flatten[ Import["c:\\actress.xls"], 1];
data2 = Drop[data, None, {1}];
FindClusters[data2 -> data, 10]
という具合です。これで、「アイドル」が特徴が似ている10グループに分類されます。

 ちなみに、結果は、こんな感じです。カッコ{}で囲まれているのが、似ているグループ=クラスタです。

{{{川崎カイヤ,藤原紀香,斎藤陽子,かたせ梨乃,児島明子,山田誉子,}{松島菜々子,高見恭 子,大沢逸美,浅野ゆう子,波乃ひろみ,辺見えみり,青田典子,}{神田うの,松下由樹,吹石一 恵,大石恵,遠藤久美子,内田友紀,田中美里,}{一色紗英,飯島直子,瀬戸朝香,井上晴美,渡 辺満里奈,飯星景子,吉本多香美,高岡早紀,深田恭子,}{水野美紀,伊藤絹子,生田智子,西田 ひかる,松原千明,樹まり子,}{細川ふみえ,駒木なおみ,岩崎ひろみ,加山なつ子,梨花,}{石 田ゆり子,雛形あきこ,三井ゆり,東ちずる,水野真紀,ビビアンスー,}{桜庭あつこ,中條か な子,舞坂ゆい,斎藤由貴,飯島愛,嘉門洋子,有賀美穂,アグネス・ラム,武田久美子,工藤ひ とみ,}{石田ひかり,菅野美穂,井森美幸,沢口靖子,石田ひかり,古手川裕子,河合奈保子,マ ルシア,原日出子,小泉今日子,松本明子,}{桂木真理子,安西ひろこ,奥村チヨ,岩崎良美,柏 原芳恵,石田えり,五月みどり,吉沢京子,島崎和歌子,榊原郁恵,山田まりあ,}}}
 もちろん、このクラスタリングは、「身長(cm)、体重(kg)、B(cm)、W(cm)、H(cm)」で行ったものですから、体型でのグループ分けにすぎません。けれど、こうして眺めてみると、なんだか特徴が出てくるような気がするようにも思えます。

 けれど、そんな体型というものも、アイドルにとってはきっと重要なファクターであるはずです。また同時に、このデータには、さまざまな時代のアイドルが混じっています。しかし、だからこそ、「あぁ、なるほど、この(今の)アイドルとかつてのあのアイドルは立ち位置が似ているんだな」と、「身長(cm)、体重(kg)、B(cm)、W(cm)、H(cm)」だけからも想像できたりするかもしれません。

 さて、あなたの好きな「アイドル・クラスタ」は一体どのクラスタでしょうか? もちろん、まだまだ俳優編・声優編などなど、色々試してみようと思います。

2009-10-16[n年前へ]

Mathematica Player用.nbpファイルに埋め込まれた画像データのナゾ 

 Wolfram社の数式処理プログラムで作られたファイルをWolfram社のサーバに送信すると、(無料で使える)MathematicaMathematica Playerを使って誰でもインタラクティブにグラフなどを処理させて眺めることができます。通常のMathematicaファイルは.nbという拡張子を持つファイルですが、Wolfram社のサーバで処理された「誰でもインタラクティブに眺めることができるファイル」は、.nbpという拡張子を持つ形式になっています。

 この「nbpという拡張子を持つ形式のファイル」の中身が何をさせるものなのかかを調べてみたときに、不思議なことに気付きました。一見、元のファイルと何の関係もなく、特に表示されているわけでもない、不思議な圧縮データが埋め込まれているのです。

 そこで、ためしに、その圧縮データの中身を展開し、画像として眺めてみました。・・・すると、右上の赤い部分のような画像になったのです(黒いテキストがテキスト文として圧縮されたデータです)。

 おやおや?、この画像は、何かアルファベットのように見えます。そこで、ひっくり返してみると、右のようになります。そう、「Wolfram Mathematica Player」という画像データが圧縮されて、.nbp形式のファイルには埋め込まれているのです。一見、特に何に使われるわけでもない「Wolfram Mathematica Player」という文字が埋め込まれているのです。

 さて、.nbpファイルに埋め込まれているこの圧縮画像データは、一体何のために使われているのでしょうか? 何らかの著作権対策のためだろうか(昔のファミコンのカートリッジの海賊版対策のような)、などと想像してみたのですが、本当のところは何のためにこのような作りになっているのでしょうか…?

Mathematica Player用.nbpファイルに埋め込まれた画像データのナゾMathematica Player用.nbpファイルに埋め込まれた画像データのナゾ






2009-10-17[n年前へ]

エクセルからMathematica(無料Player)の計算機能を使う 

 今日は、「Microsoft ExcelからMathematicaの計算機能を使う」ということをしてみたいと思います。エクセル(Excel)のシートにMathematicaのコマンドを入力して、その評価を(無料で使うことができるMathematica Playerに付属する)MathematicaKernel.exeに評価させよう、というわけです。もちろん、その評価された結果をさらに通常のエクセルの機能を使って操ってやろう、ということになります。

 ExcelからMathematicaの機能を使うには、色々な実現方法がありますが、今回は「無料配布MathematicaカーネルとNET Framework実装IronRubyでグリッド・Matheatica計算環境は5分で作れる」で作った、「URIを介して渡されたコマンドを実行した結果を返すWEBサーバ・アプリケーション」とエクセル(Excel)の「WEBクエリ機能」(「Excel VBA WEB連携術―2007/2003対応 」参照)を使って実現してみることにします。

 まずは、「無料配布MathematicaカーネルとNET Framework実装IronRubyでグリッド・Matheatica計算環境は5分で作れる」で作ったサーバを立ちあげましょう。たとえば、

ir.exe mathematicaServer.rb 80
という具合にして、適当なポート(この例であればhttpの標準ポートである80番)でコマンドを待ち受けるWEBサーバが起動します。

 次に、エクセルのセルを選択し、(エクセル2003くらいのバージョン以降に備わっている機能である)「WEBクエリ」をします。エクセル2007であれば、「データ」-「WEBクエリ」で、URLを入力してやるのです。つまり、今回の例であれば、"http://localhost/evaluate/2+2"といった風に入力をしてやれば良いわけです。すると、小さなブラウザ風の画面が表示され、そこに"2+2"の計算結果が表示されます。後は、下のブラウザ風画面の下にある「取り込み」ボタンを押すと、「開いています ダイアログ」が表示された後に、「データを返す先のセル選択ダイアログ」が表示され、セル中にMathematicaカーネルによる評価結果が入力されるのです。エクセルとマセマティカ・カーネルとの間で、httpを介してデータがやりとりされる、というわけです。

 その実行過程を、もしも、エクセル側のVBAマクロを使って行うと、こんな具合になります。

Sub httpGet()
 Range("E3").Select
 With Selection.QueryTable
  .Connection = "URL;http://localhost/evaluate/2+2"
   .WebSelectionType = xlEntirePage
   .WebFormatting = xlWebFormattingNone
   .WebPreFormattedTextToColumns = True
   .WebConsecutiveDelimitersAsOne = True
   .WebSingleBlockTextImport = False
   .WebDisableDateRecognition = False
   .WebDisableRedirections = False
   .Refresh BackgroundQuery:=False
 End With
End Sub

 つまり、エクセルを使っているように見えて、そのエクセルは実は単なるMathematicaカーネルのフロントエンドとして使われている、というようなワザも行うことができるわけです。しかも、そのMathematicaカーネルは、(無料で使うことができるMathematica Playerに付属する)MathematicaKernel.exeだったりするわけで、「安い・うまい・早い」の三拍子が揃った、超お手軽便利ツールになる可能性があります。そう考えると、プロトタイピングお手軽版ではなく、真面目にMathematicaカーネルを操作するWEBアプリを書いてみようか…という気になってきます。

2009-10-18[n年前へ]

「長岡京市と平家」と「伊豆長岡京市と源氏」 

 京都府の長岡京市(京都と大阪の境にある)と伊豆半島にある伊豆長岡市は姉妹都市である。名前が似ているからと言ってしまえばそれまでだが、平家の史跡が残る京都に対し、源氏の史跡が残る伊豆長岡は似ている、と言えなくもない。何しろ、伊豆長岡は「源氏山」を中心とする小さな小さな温泉街だ。昔ながらのスマートボールと射的ができる遊戯場が2か所ある、そんな温泉街だ。

 今日も、自転車に乗って伊豆長岡まで行った。街奥の路地をゆっくり走っていると、「あやめ御前」が源平の戦い以降に暮らしたという場所があった。

とても小さな泉のほとりにある限りなく小さなその場所まで歩いて行くと、思わずその侘しさに言葉をなくしてしまった。

 祭りの主人公あやめ御前は今から800年前、伊豆長岡古奈の里に生まれました。長じて京に上り近衛の院に仕え、その美しさは宮廷随一と歌われました。やがて歌道に優れた武人源頼政公と恋に落ち、幸せな時を過ごしましたが、源平の戦いで頼政は宇治川の露と消え、あやめ御前は伊豆長岡古奈の里で頼政の霊を弔いながら89年の生涯を静かに閉じました。

2009-10-19[n年前へ]

「美的曲線」で「理想のバスト形状」を作り出そう 

 以前、「美的曲線」というものに関する記事を書いたことがあります。その記事のタイトルを書いてしまうと、「美的曲線」と「包茎手術」という、なかなか口に出すのは恥ずかしいようなものですが、「美しさとは何か」という問いに答える…かもしれない答えのひとつ「が美的曲線」である・・・かもしれません。この記事の場合は、男性の身体と美的曲線の話題です。

 美的曲線に関して,和歌山大学の原田利宣先生が,「自然界や人工物におけるさまざまな美的曲線の多くは,曲率対数分布図が直線で近似できるということ」を指摘されました.原田先生が調べた美的曲線には,蝶の羽や自動車のボディのキーラインなどが含まれています.美的曲線の特別な場合として,曲率対数分布図における直線の傾きα=-1の場合にはクロソイド曲線,α=1の場合には対数螺旋となることが指摘されています.本研究では,曲率対数分布図が直線で表される曲率変化の単調な平面曲線を美的曲線と呼びます.

 前に書いた記事は、男性の身体と美的曲線の話題でしたが、もともと、週刊SPA!に「(小型な体型が多い日本人にとって)究極のバストサイズ・形状はどういったものか?」と聞かれたときに浮かんだのが、「美的曲線」でした。「美的曲線」か、あるいは、「ラプラス方程式(特に解のひとつとしての調和関数)」を例に挙げながら、「究極のバストサイズ・形状」を求める(強引な理屈付けにもとづく)理論を構築しようか、と考えたわけです。

 さて、今日ふとその続きを作成してみたくなりました。「理想のバスト形状」を「美的曲線」にもとづいて作成できるのではないか、と思いついた(妄想したのです)。つまり、適当なバスト形状を作成したら、その形状がどれだけ「理想」に近いかの評価関数として、「美的曲線」からのズレを用いることができるのではないかというアイデアが頭に浮かんだのです。「美的」かどうかの評価関数さえ作ってしまえば、シミュレーテイッドアニーリング法でも、遺伝的アルゴリズムでも、さまざまな最適解を求める手法を用いて、「理想のバスト形状」を求めることができるのではないか、と考え付いたわけです。

 というわけで、まずは自分の頭を整理して、思いついたアイデアを果たして具現化しうるかどうか確認するためのプロトタイピングを行ってみました。…というわけで、プロトタイプンぐツールNo.1については、明日書いて公開してみようと思います。

2009-10-21[n年前へ]

無料のMathematicaカーネルとIronRubyでP2Pグリッド数式処理システムを作ってみよう 

少し前、「無料配布のMathematicaカーネルと(やはり同じく無料で使うことができる).NET Framework上で動作するRubyであるIronRuby」を使い、「無料配布MathematicaカーネルとNET Framework実装IronRubyでグリッド・Matheatica計算環境は5分で作れる」 という記事で、Mathematicaで並列計算を可能にするためのコード例を書きました。制御用マシンと計算用サーバ間の通信はhttpを使い、多数のサーバ群で高機能数式処理並列計算を実行することができるシステムを無料で構築しよう、というアイデア・実装です。

 今日は、その時書いたコードをもう少し書きなおしてみました。書き直した点をひとことで言えば、それは「制御用マシン(用ソフト)」「計算用サーバソフト」といった区別をなくしたクラスを作ってみたということになります。また、それに加えてコマンドの投げ方を替えた&コマンドを投げる際にURLエンコードをかけるようにした、という変更を行いました。それが、下の(Iron)Rubyクラスです。

 というわけで、まずはこんなコードを書いてみましょう。名前は、mathnode.rbとでもしておきます。

class Mathematica
  require 'Wolfram.NETLink'
  include Wolfram::NETLink
  PAR="-linkmode launch -linkname
 'C:\\Program Files\\Wolfram Research\\
Mathematica Player\\7.0\\MathKernel.exe'"
  def initialize()    
  end
  def open
    @kernelLink=MathLinkFactory.CreateKernelLink(PAR)
    @kernelLink.WaitAndDiscardAnswer()
  end
 def do(q)
     @kernelLink.EvaluateToInputForm(q, 0)
  end
  def close
    @kernelLink.EvaluateToInputForm('MVClose[]', 0)
  end
end

class Mathnode
  require 'webrick'
  include WEBrick
  require 'net/http'
  require 'uri'  
  Net::HTTP.version_1_2
  attr_reader :server
  
  def initialize()    
    @m=Mathematica.new
    @m.open
  end

  def start(port)
    @server=Thread.new do
      @s=HTTPServer.new(:Port=>port, 
                             :DocumentRoot=>'',
                             :RequestTimeout=>600,
                             :MaxClients=>1)  
      @s.mount_proc("/restart") {@m.close;@m.open}
      @s.mount_proc("/shutdown") {@s.shutdown}
      @s.mount_proc("/"){|req,res|
        res.body='use /evaluate/command'
        res.body=URI.encode(@m.do(URI.decode(req.query['q']) )) if req.query['q']
      }
      trap("INT"){@m.close;@s.shutdown}
      @s.start
    end
  end

  def stop
    @server.shutdown
  end
  
  def sendCommand(host,port,q)
    result=''
    Net::HTTP.start(host,port){ |http| 
        r=http.get('/evaluate?q='+URI.encode(q))
        result=URI.decode( r.body )
    } 
    result
  end

end
 このクラスを使い、たとえば、こんなコードを書きます。
require 'mathnode.rb'
mathnode=Mathnode.new
mathnode.start(ARGV[0].to_i)
mathnode.server.join
名前は、node.rbとでもしておきましょうか。そして、コマンドラインから、こんな風に実行します。引数は、httpでコマンドを待ち受けるTCP/IPのポート番号です。
ir.exe node.rb 80
これで、ポート番号80を用い、プロトコルはhttpで、コマンドを待ち受け続けるサーバが立ち上がります。

 さて、同じmathnode.rbを使って、今度は計算をさせるための制御用コントローラを書いてみましょう。名前は、main.rbとでもしましょうか。

require 'mathnode.rb'
mathnode=Mathnode.new
puts mathnode.sendCommand(
  'localhost',ARGV[0].to_i,
  'Solve[x+y==3,x]')
これで、先ほど立ち上げた「計算用サーバ」に対して、x+y==3という一次代数方程式をxについて解かさせるプログラムのできあがり、です。使い方は、
ir.exe main.rb 80
です。これで、localhostの80番ポートでMathematicaコマンドを待ち受けるサーバに、x+y==3という一次代数方程式をxについて解かせるプログラムの出来上がりです。

 重要なのは、「計算用サーバ」と「制御用コントローラ」は、主従関係にあるようなクラスではなく、完全に同一のクラスである、ということです。ですから、peer to peer でデータ・命令を投げ合うグリッド計算システムを書き上げることもできるわけです。

 もちろん、前回「無料配布MathematicaカーネルとNET Framework実装IronRubyでグリッド・Matheatica計算環境は5分で作れる」で書いたようなプログラムとして、こんな風に書いても構いません。

require 'pp'
require 'net/http'
require 'uri'

Net::HTTP.version_1_2
result=[]
threads = []
command='Solve[x+y==3,x]'
uri=['localhost']
port=[80]
2.times do |i|
  threads.push( 
    Thread.new do
      Net::HTTP.start(uri[i],port[i]){ |http| 
        r=http.get('/evaluate?q='+URI.encode(command));
        result<<URI.decode( r.body );} 
    end
  )
end
threads.each do |t|  t.join end
pp result
 これでも、全く同じ計算結果を得ることができる、無料のMathematica並列計算環境ができあがります。

 実際の使い勝手としては、「制御用マシン」「計算用サーバ群」という作りでも良いような気もしますが、それだけではつまらないので、今日はP2Pグリッド数式処理システムを作ってみた、というわけです。無料で使える道具だけで作ることができて、なおかつ、広い可能性が感じられるもの、ではないでしょうか。

2009-10-23[n年前へ]

2700円以下で泊まれるベスト宿はどこだ!? 

 以前、「3500円以下で泊まる!東京の格安ホテル」という記事を読み、その記事に挙げられていた宿のいくつかに、何度か泊まってみました。その時は、3泊以上連泊するなら「ホテル アクセラ」、そうでないなら、「ホテル丸忠 CLASSICO」というのが、私の感じたベストな選択だと感じました。ちなみに、前者は3連泊以上なら一泊3150円、後者は3500円です。非常に綺麗なので、男性でも女性でも、とてもお勧めできる宿です。高速インターネットも室内のLANケーブルから使うことができます。

 けれど、あなたが旅行・放浪が好きな男性なら(女性でも大浴場に浸かりたいと思うのでなければ)、私の一番のお勧め・お気に入りは「ホテルほていや携帯電話用)」です。

ここは、一人用の個室でも2,700円で泊まれる格安宿です(しかも、楽天経由で予約すれば、楽天ポイントもたまります)。男性用の大浴場は、午後4時から~午後10時まで、自由にゆったりと広い湯船に浸ることができる宿です。こういった宿の大浴場は、男女交代制のところが多く、しかも女性が入ることができる時間のほうが長いのが普通だったりするので(風呂に入る時間からしたら、それが公平なやり方でしょう)、大浴場でゆったりとしたい男性にとってはいつの時間でも入浴することができるというのは、結構大きなメリットです。女性でも、男女共用の大浴場にはあまり入りたくないという人も多いかもしれませんから、こういう割り切り方は以外に良い選択かもしれません。ちなみに、シャワー室は男女問わず24時間使うことができます。

 もちろん、門限などはなく(部屋のカギがあれば、入口のカギを開けることができるのです)、一回にある読書室(世界各国向けのさまざまな本が置いてあります)ではインターネット接続(無線LAN)も利用できるという、21世紀にもまだまだ生息し続ける放浪者タイプ人間には最高の環境です。(特にチェックインカウンター辺りのつくりが、一見マンション風なので、洋室タイプなら自転車も持ち込みやすいので、街中散策大好き人間には最高だと思います)

 ちなみに、専用の携帯電話用サイトを使うと、2600円の部屋もありますが、煙草愛好者以外は(楽天ポイントもつきますし)最初に書いたリンクから「禁煙 『小洋室』(個室)無料テレビ・エアコン・冷蔵庫完備」を予約するのがお勧めです。煙草愛好者なら、2600円の部屋でも2700円の部屋でも、どちらでも良いかもしれませんが、私は喫煙しないので(その点については)よくわかりません。

 さて、右にいくつかの格安宿一覧パンフレットを張り付けてみました。旅好き・色々な街が好きな方は、試しにちょっと泊まってみると良いと思います。私のように、とても気に入る人も少なからずいるのではないでしょうか。・・・責任は持てませんが、ためしに泊まってみるのも良いと思います。不思議にインターナショナル感あふれる、アジアの街角にふと迷い込んだような気になったりするかも、しれません。

2009-10-24[n年前へ]

「対数螺旋という美的曲線」と「美乳カーブ」 

 右の画像はオウムガイの殻の断面図です。これは、美的曲線である「対数螺旋」です。これは、ある予備校のポスターの一部ですが、「美しい渦巻き模様は、実は「対数らせん」という数学の公式によって表わされるそう」という素敵な言葉とともに美しい対数螺旋が描かれています。

 美的曲線の特別な場合として,曲率対数分布図における直線の傾きα=-1の場合にはクロソイド曲線,α=1の場合には対数螺旋となることが指摘されています.

しかし、右上のように(トリミングすることにより)片断面で眺めてみると、「美的曲線」で「理想のバスト形状」を作り出そう「美的曲線」を基準に「理想のバスト形状」を作り出すエクセル・シートを作る-究極の美的バスト形状作成コンテスト!?-で書いたことを、自然と納得してしまうのではないでしょうか。

 最後に、もう一度ポスターの最後に書かれているフレーズを書き写してみようと思います。

 自然の中には学ぶほどにたくさんの「なるほど」があふれています。…そこでキミは、どんな新しい「なるほど」を発見するのだろう。
 キミたちは、そしてボクたちは、一体どんな新しい「なるほど」を見つけ出すのでしょうか。

「対数螺旋という美的曲線」と「美乳カーブ」






2009-10-26[n年前へ]

「エクセル」と「無名関数」 

 ふと、エクセルほど無名関数(Mathematicaでいうところの純関数)を使っている開発環境はないのではな いか、と考えた(妄想ともいう)。もちろん、エクセルでも関数を定義したり、記述式を定義したりすることができる。しかし、実際にエクセルを使う状況を考えてみれば、「セルに処理を書き入れ(まく)り」「その処理記述に名前を付けたりはしないまま・コピペしまくり、使い回す」ことが多いと思う。これは、「エクセルが配列ベースの無名関数志向開発環境だ」と言えるのではないか、などと考えてみたのである。

 たまに、Rubyでデータ処理し、その結果をエクセルで眺めることがある。そんな時、Rubyとエクセルの組み合せワザのようなことをすることもある。それは、たとえば、こんな具合のコードだ。

d=[]
10.times{d<<'=2*RC[1]'}
d<<ARGV[0]
puts d.join(',')
 '=2*RC[1]'の部分は、エクセルの関数である。そして、それ以外の部分はRubyの関数だ。RC[1]は「自分の右のセル」を指すので、次(右)のセルの2倍という関数である。たいていのデータは、左から右(あるいは上から下)に読み込んでいくので、この例の場合、次(未来)の値を使って演算をしていることが面白い、と感じたりする。
 それでは、このRubyスクリプトをm.rbと名付け、
ruby m.rb > m.csv
として、m.csvを作成する。そして、そのcsvファイルを(セル表示名ををR1C1形式にした)エクセルで開くとデータ列ができあがる、ということになる。上の例であれば、下のような数値が入ったエクセルシートができあがる。
512 256 128 64 32 16 8 4 2 1

 この例のような、複数言語を組み合わせた「闇鍋(やみなべ)ごった煮プログラミング」を上手く活用することはできないだろうか。…そういうことをよく考えるのだけれど、なかなか良いアイデアが思いつかない。何か、面白い位置づけ・適切な使い方がないものだろうか。

2009-10-28[n年前へ]

「引っ越し」と「宅急便で配達される送付物」 

 昨今、「宅急便で配達される送付物」が一般的になりました。郵便局が取り扱うのではなく、宅急便会社が送付する小冊子や通知物などが増えています。競争原理のおかげで、配達料金を抑えることができるのは便利ですが、その一方で、引っ越しなどを行うと結構大変なことになります。郵便局に住所変更の届けを出しても、もちろん宅急便会社のデータベースには反映されません。宅急便会社に住所変更(転送手続き)をすれば…といっても、宅急便会社もたくさんありますし、調べた限りでは、会社によっては「転送」という仕組み自体がないところもあるようです。

 先日書いた、無料の「ネット記事」を読むなら、無料の「GRAPHICATION」も読みませんか?GRAPHICATIONも、宅急便経由で送付される雑誌です。この雑誌を私に紹介し勧めてくれた人と話していると、「最近、GRAPHICATIONが送られてこない」と言うのです。その人は、一年ほど前に引っ越したのですが、WEB上からできる届け先変更をしていなかったわけです。

 さて、雑誌GRAPHICATIONの良さを、何年も前から繰り返し書いてきましたから、GRAPHICATIONの無料定期購読の申し込みをすでにされて、読んでいるという方も多いかと思います。
 もしも、購読をし始めてから引っ越しをされた方、あるいは、引っ越しをされる方がいらっしゃれば、ぜひWEB上からできる届け先変更をしておきましょう。あの良い雑誌を読めなくなってしまうのは、損以外の何物でもありませんから。

 それにしても、さまざまな企業が「配達」ということを取り扱うようになると、コストというメリットがあると同時に、もちろんデメリットも生じます。今回のような「引っ越し」と「宅急便で配達される送付物」に対しては、どのような解が最適なのでしょう。あなたが思う「解答」はどんなものでしょうか?

2009-10-29[n年前へ]

「MathematicaPlayer+IronRubyでMathematica風AJAX WEBアプリ」の動作動画  

 「無料MathematicaPlayer+IronRuby+AJAX」で数式処理フロントエンドを作ってみよう がどのように動作するか・どのように使うことができるのか、をわかりやすく眺め・わかりやすく感じることができるように、ブラウザ上で使っている最中の画面をキャプチャしてみました。それが、下に貼り付けた動画になります。



 IronRubyやMathematica、あるいは、.NETと言われても・・・何か敷居が高く感じてしまうという方も多いかもしれません。あるいは、使ってみたいけれど、ダウンロード・インストールするのが面倒だ・わかりにくい・・・、とか、そういった作業をする時間がないよ・・・という人も多いかもしれません。

 そこで、「とりあえず、どんな具合になるのか知りたい」という方のために、今日はとりあえず動作画面を誰でも眺めることができるようにしてみました。私がIronRubyで書いたコードもとても単純ですから、適当に直したり・カスタマイズしてみると、とても面白いのではないでしょうか。もちろん、「ここ修正すべし」といったアドバイスなど、大歓迎です。

2009-10-30[n年前へ]

「京都市鴨川源流」を廻る「理系風デート」 

 青春小説のようなシーンを交えながら、数学世界を解説していく「数学ガール (結城浩)」を読んで、少し前に読んだ万城目学の「ホルモー六景 」を連想しました。連作短編集「ホルモー六景」中の一話、京都市左京区を舞台に、一人の男子高校生が自分では気づかないうちに年上の女子大生に抱いていた淡い恋心と、デート風の(けれど決してデートではない)一日の散策を描いた「ローマ風の休日」です。

「じゃあー少しだけ、僕とデートしてくれませんか?」

 鴨川の始まりである出町柳辺りから、御池大橋までを舞台に、オイラーが解いた「ケーニヒストベルグ橋の問題」を題材にして、ローマの休日風な素敵で切ない数時間(と数ヶ月)を描いた一話です。見事なくらいに、微妙な心の機微と数学の世界が一体化した素敵で少し切ない短編です。

 午後四時になってもまだ陽の高い、京都の休日へ繰り出した。

 実際には、「ケーニヒストベルグ橋の問題」を解くという口実の(体力的に疲れそうな)デートに、付合ってくれる女性は少なそうな気がします。・・・とはいえ、この「京都市鴨川源流」を廻る「理系風デート」の一話、「ローマ風の休日」はとても楽しめる話です。

 「ローマ風の休日」は「ホルモー六景 」だけでなく、何人かの小話を集めた短編集である「きみが見つける物語 十代のための新名作 休日編 (角川文庫 あ 100-103) 」にも収録されていますから、中高校生、あるいは、モラトリアムな大学生(社会人)は一度手に取って読んでみると面白いと思います。

 ケーニヒスベルグの橋とは、プロシアの首都ケーニヒスベルグ(現在はロシア領カリーニングラード)を流れるプレーゲル河に架かる7つの橋のことである。この7つの橋を全て一度だけ渡り、元の場所に戻れるか、という議論によって有名となった。

 ケーニヒスベルグの橋の問題は1736年に、数学者オイラーにより、地図を線と点で表現し、その図形を一筆書きできるかの問題と整理されて考えられた。その結果、一筆書きできない、すなわちケーニヒスベルグの7つの橋を求められた条件の下に渡る道順は無いとして、解決された。ケーニヒスベルグの橋は、グラフ理論とトポロジーの起源であると言われている。
ケーニヒスベルグの橋
 さて、鴨川源流を舞台にした「ケーニヒスベルグの橋の問題」はどのような答えになるでしょうか。ノートの上で手と頭で解いてみても良いですし、京都の街を自転車で走り、この数学の問題を足と体で解いてみると面白いと思います。そんな「理系風デート」があると・・・さらに、楽しいでしょうね。
 彼女ははそれから、いろいろな数学の話を聞かせてくれた。

「京都市鴨川源流」を廻る「理系風デート」






2009-10-31[n年前へ]

「マンハッタン距離」と「続 理系風デート」 

 万城目学のエッセイ集「ザ・万歩計 」のこんな一節を読んだ。

 京都の生活には、自転車がよく似合う。
いわゆる京都市内、つまり、山あり谷ありではない市内を移動するには、確かに自転車が一番適している。周辺部以外には、曲がりくねった道はなくて、道はすべて真っ直ぐ東<->西か南<->北方向に走っている。だから、どこに向かうにもただ、目的の方向に進み・曲がればいいだけだ。

 出発地から目的地まで行くのにかかる時間を見積もる、つまり、出発地から目的地まで行く経路の距離を計算するのだって、とても簡単だ。上に書いたように、平安京の時代からある京都市内中央部は、碁盤の目状に道が配置されている。だから、経路の距離は「マンハッタン距離」で計算することができる。東京の街中なら、不定形の道に沿って線積分する必要があるだろうし、野原の真ん中なら…少しは単純だけれど「ユークリッド距離」を計算するために平方根(ルート)を計算してやらなければいけない。そんな計算は面倒だ。しかし、京都市内は違う。

「京都市内の距離空間はマンハッタン距離で計算できるのがいいね」
「目的地までの東西距離と南北距離を足すだけでいいから、計算が簡単でいいよね」
「どの平方根…じゃなかった、ルートでも距離は同じだしね」
といった、自転車に乗りながらの理系風会話が日常的にしやすい。もちろん、「マンハッタン」距離なんていう一見オシャレに響く言葉を使っているので、理系風デートで使えなくもないフレーズである。

 しかし、その後に、こういうウンチクを口にし始めてしまったりすると、しかもそれが「理系風デート」ならその時点で「終了」していまうことが多い。

 あれ?マンハッタン距離を考えたヘルマン・ミンコフスキーって、機動戦士ガンダムのミノフスキー粒子と関係あるのかな?
 これで会話が続いたら、単なるガンダムおたくである。まさに、「若さゆえの過ち」「ぼうやだからさ」状態である。

 …とにかく、京都の町には自転車が良く似合う。先の万城目学のエッセイ「都大路で立ちこいで」でも、最後の一文はこう終わる。

 自転車で京都を走ることが掛け値なしに楽しい、ってことだけは、本当なのだ。
 京都の町に行くのなら、自転車を借りて市内を散策するのが一番いいと思う。紅葉間近のこの季節、天気の良い日なら、乗りやすいマウンテンバイクでも借りて、体育会風に(できれば2,3日かけて)京都を一周してみるのもいいと思う。それがたとえ、1日だけでも、やはり自転車で京都を走ってみたならば、バスや列車で街を離散的に巡るよりも、ずっと素晴らしく連続的な京都の街を知り・同時に楽しめると思う。

 「理系」と「文系」と言った話より、「頭」と「体」とか、「情緒/心/感情」と「論理」といったことの方に、今は魅力と確かさを感じる。自転車で巡る京都の町の魅力はは、少なくとも「体」と「情緒/感情/心」といった辺りの中心部を貫くと思う。