2009-10-01[n年前へ]
■IronRuby+Mathematica Playerでグラフィック表示(試行錯誤中) ![](http://d.hatena.ne.jp/images/b_entry.gif)
IronRuby+Mathematica Playerの組み合わせで、数式処理を行い・さらにその結果をグラフィック表示することに挑戦してみた。まずは、
といったように、Exprクラスでコマンドを渡してやってみても、やはり同じように﹁入力文字列の形式が正しくありません﹂というエラーが出てしまう。︵上の記述がわかりにくい方は右の書籍﹁Mathematicaプログラミング
﹂がお勧めです。Mathematicaの﹁基本﹂が一番わかりやすい本です︶
それでは、グラフィックのインタラクティブ表示は︵とりあえず︶あきらめて、まずはグラフィック表示結果をファイル出力させてみる、という方向転換をすることにした。そこで、こんなコードを書いた。
@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)
![](http://ec2.images-amazon.com/images/I/41Z80J8PRYL._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA240_SH20_OU09_.jpg)
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の良い組み合わせ方を考える ![](http://d.hatena.ne.jp/images/b_entry.gif)
![](http://ec3.images-amazon.com/images/I/21arfg8P7JL._SL500_AA180_.jpg)
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」=「∞の可能性」 ![](http://d.hatena.ne.jp/images/b_entry.gif)
まだまだ、﹁(.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で経済データも自由自在 ![](http://d.hatena.ne.jp/images/b_entry.gif)
![](http://ec3.images-amazon.com/images/I/41BNP2WNJGL._SL500_AA240_.jpg)
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}} つまり、時間と国内総生産を並べたリスト形式で返ってきます。
![](http://ec3.images-amazon.com/images/I/61FLjg9Pz9L._SL500_AA240_.jpg)
2009-10-05[n年前へ]
■無料の「ネット記事」を読むなら、無料の「GRAPHICATION」も読みませんか? ![](http://d.hatena.ne.jp/images/b_entry.gif)
![](http://www.fujixerox.co.jp/company/public/graphication/backnumber/images/182/182_1.jpg)
2009-10-06[n年前へ]
■無料配布MathematicaカーネルとNET Framework実装IronRubyでグリッド・Matheatica計算環境は5分で作れる ![](http://d.hatena.ne.jp/images/b_entry.gif)
今日も、﹁無料配布のMathematicaカーネルと︵やはり同じく無料で使うことができる︶.NET Framework上で動作するRubyであるIronRuby﹂を使って色々なことをしてみよう、という話の続きです。もちろん、さらにパワーアップした可能性を追求してみたいと思います。
数式処理環境であるMathematicaには、オプション製品としてgridMathematicaという製品があります。Mathematicaでグリッド・コンピューティングを実現する、というようなネーミングの製品ではありますが、実際にはMathematicaで並列(パラレル︶計算を実現するための拡張オプションです。価格は・・・眼の球が10cmくらいは前に突き出てしまうほどのお値段になっています。
さて、﹁無料配布のMathematicaカーネルと︵やはり同じく無料で使うことができる︶.NET Framework上で動作するRubyであるIronRuby﹂を使えば、色々なことができるわけです。そこで、今日はgridMathematicaが可能にするようなことを、誰でも入手可能なツールで実現してみることに挑戦してみようと思います。
本来ならば、分散処理環境をRubyで実装したdRubyなどを使いたいところですが、いくつかの理由から、今日は(IronRubyで動作する)ごくごく普通のRubyライブラリを使って、Mathematicaカーネルをネットワーク上で並列計算させることができるコードを書いてみることにします。
まずは、(無料配布されている)Mathematicaカーネルを扱うサーバ・アプリを書いてみます。といっても、単にこれだけのコードです。
Mathematicaという最高の開発環境を使い、並列計算も可能にし、さらに、そういったプログラムを自分で書くことができる・・・なんて、とても楽しそうではありませんか?この﹁無料配布のMathematicaカーネルと︵やはり同じく無料で使うことができる︶.NET Framework上で動作するRubyであるIronRubyを使って、遊んでみよう﹂というシリーズ!?の可能性はまだまだ広がりそうです。
さまざまなデータに対し透過的にアクセスが可能で、並列計算もとても簡単にできたなら、色々なことができそうだ、と思えますよね?無料配布のMathematicaカーネルとNET Framework実装IronRubyでグリッド・Matheaticaコンピューティングのプログラムは、実際のところ5分程度で作ることができます。
無料配布のMathematicaカーネルなのに、それが実に多くのことができることに驚かされます。少し時間ができたとき、こんなプログラムを作って遊んでみるのはいかがでしょうか。
![](http://media.wolfram.com/products/gridmathematica/gridM_Server_Diagram2_th.gif)
![](http://ec2.images-amazon.com/images/I/412DANV707L._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA240_SH20_OU09_.jpg)
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で投げつけていますが、それはあくまで簡単なテスト用であるためです。
![](http://ecx.images-amazon.com/images/I/51L1wKgVe5L._SL500_AA240_.jpg)
2009-10-07[n年前へ]
■「細切れの知識」や「あるあるネタ」と「腹持ちのする豊かな知恵」の違い ![](http://d.hatena.ne.jp/images/b_entry.gif)
無料の﹁ネット記事﹂を読むなら、無料の﹁GRAPHICATION﹂も読みませんか? の続きです。
﹁GRAPHICATION﹂の良さは、時代を映す内容を︵時には時代に先駆けて︶、限りなく豊かな知恵を伝えながら、それでいて実に新鮮に面白く読むことができるところにあります。今月の執筆者を見ても、その充実度がわかると思います。しかも、驚くべきことに、エッセイ連載陣すら、特集テーマのもとに文章を書き下ろしているのです。
わたしがGRAPHICATIONが好きなのは、そこに詰まっているものが﹁細切れの知識﹂ではないからです。細切れの断片だけをクローズアップした知識であれば、週刊誌やテレビの﹁あるあるネタ﹂、あるいは、短いネット記事でも見れば十分です。
けれど、分厚く、食べる︵消化する︶のに時間がかかり、逆に言えばとても腹持ちのする﹁知恵﹂は、週刊誌やテレビ・ネット記事では提供できません。﹁細切れの知識﹂や﹁あるあるネタ﹂は次の日の会話や、その瞬間の疑似知識欲を満たすにはとても役立つように見えます。…けれど、長い時間を考えてみると、少しつまらないな、と感じられてしまいます。雑誌が、﹁知る喜び﹂という言葉の対象を、︵一時の人気が出がちな︶﹁細切れの知識﹂や﹁あるあるネタ﹂にフォーカスしてしまうなら、それなら、そんなことは﹁テレビ・ネット記事﹂で流し見すれば良いのではないか、と私は思います。﹁知識欲﹂と﹁知恵欲﹂は違うと思います。本当に長く役立つものは、断片的な﹁あるある・知っ得﹂的知識ではなく、知恵が指し示す先にあるものだと思います。記憶すれば・覚えれば良いであれば、︵記憶量が決して多いとは言えない︶人間にとって、そこに果たして一体何の価値があるのでしょうか。
GRAPHICATION︵グラフィケーション︶の良さは、﹁細切れの知識﹂を並べただけのものでない、すぐに役に立つかどうかはわからないけれども﹁確かに豊かな知恵﹂が詰まっているところにあります。腹持ちのする、胃袋に確かに居続ける、そんな時を経ても確かに残り続ける堅い知恵を、決して重くない言葉として綴っているところにあります。
さて、GRAPHICATIONの定期購読申し込みはされたでしょうか? 今では稀有といっても過言でない、密度の高い雑誌が無料で送付されてくるのですから、申し込まなければ﹁決して長くない人生もったいない﹂と思います。決してあなたに損はないと思います。無料の﹁ネット記事﹂を読むのであれば、無料の﹁GRAPHICATION﹂も読んでみませんか?損はさせない、と思います。
![](http://www.fujixerox.co.jp/company/fxbooks/graphication/backnumber/154/154_1.jpg)
![](http://www.fujixerox.co.jp/company/fxbooks/graphication/backnumber/147/147_1.jpg)
![](http://www.fujixerox.co.jp/company/fxbooks/graphication/backnumber/146/146_1.jpg)
2009-10-08[n年前へ]
■使えそうだけれど役に立ちそうにないモノは捨てる…!? ![](http://d.hatena.ne.jp/images/b_entry.gif)
モノがたまってきたので、使いそうにないものは、どんどん捨てています。そんな時、悩むのが﹁結構使えそうだ﹂と思い集めたけれど、結局使わなかったもの、しかも、とても役に立ちそうにないモノです。
たとえば、20メートル近く激流が飛ぶ超強力水鉄砲。これは、結構使えそうなのですが、なかなか役に立つシチュエーションがありません。そこで、駐車場でスケートをしている時に、試しにスケボーを載せてくれた親子連れにお礼にあげてしまいました︵押しつけたとも言う︶。
あるいは、たとえば、こんなスヌーピーのハンドベル食玩。PICでも使って、このハンドベルで自動演奏器︵ハンドベル・オルゴール︶を作ろうと考え、ド・レ・ミ・ファ・ソ・ラ・シと集めたのですが、このハンドベルが実にホンキートンクな音程がズレかたをしていたり、工作作業がなかなかできなかったりして、今では単なるゴミと化しています。
あるいは、イチローのバッティング食玩なども、そのひとつです。これは、回転する円の上にイチロー群を貼り付けて、回転速度に合わせてストロボを光らせれば、何人ものイチローが素振りをする…という﹁リアル立体アニメーション・アート﹂を作ることができる、と考えたわけです。しかし、これも、そんな趣味の工作をする時間がないままに、ガラクタ箱の中に放り込まれています。
そんな、使えそうだけれど役に立ちそうにない小道具がたくさんあります。﹁少年探偵セット﹂﹁不思議な手品カードセット﹂﹁日光写真カメラキット﹂﹁いつの間にか回転方向が逆になる謎の石﹂﹁コウモリの声が聞けるバッド・ディテクター﹂
そんなガラクタ箱の中を見るたびに、さてさてどうしたものか・・・と悩みます。使えそうだけれど役に立ちそうにないモノを捨てるか、捨てないか…それが目下の問題です。
![](/diary_image/963_CA3C0270m.jpg)
![](/diary_image/964_CA3C0269m.jpg)
![](/diary_image/965_CA3C0268m.jpg)
2009-10-09[n年前へ]
■無料配布のMathematica PlayerとIronRubyで天文学計算をしてみよう ![](http://d.hatena.ne.jp/images/b_entry.gif)
![](http://ec2.images-amazon.com/images/I/51PHN2BFY9L._AA280_.jpg)
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年前へ]
■楽しい?辛い?日本横断日帰りツーリング ![](http://d.hatena.ne.jp/images/b_entry.gif)
![](/diary_image/967_CA3C0271m.jpg)
![](http://ec3.images-amazon.com/images/I/41--7NEkeUL._SL500_AA280_.jpg)
2009-10-11[n年前へ]
■「金星」や「木星」と「金木犀」 ![](http://d.hatena.ne.jp/images/b_entry.gif)
天体計算プログラムを書くと、たとえば、その中で﹁金星﹂とか﹁木星﹂という言葉を打っていると、なぜか自然に﹁金木犀﹂という似て非なる言葉が頭の中に浮かんでくる。
今頃の季節、街中を歩いているとどこからかトイレの芳香剤のような匂いがしてくる。そのトイレの芳香剤のごとき匂いが、実は﹁金木犀の花の香り﹂だと知ったのは、いつの頃だったろうか。教えてもらったのは、いつだったろうか。
金木犀の匂いは︵多分︶わかるようになったのだけれど、今でも金木犀の花はよくわからない。﹁丈夫そうな緑の葉っぱのあの樹﹂ではないか、その樹に咲いているのが金木犀の花ではないか、と想像してみるのだけれど、いつも、今一つ確信が持てないまま金木犀らしき樹を飾っている花を金木犀だと勝手に思い眺めている。
金木犀は桂花とも言われるという。金木犀をお湯で煎じて、桂花茶ならぬ、金木犀を今度飲んでみることにしよう。金木星の強い香りを、その香りに似合うカップにでも注いで、鼻と喉で味わってみることにでもしようか。
![](http://upload.wikimedia.org/wikipedia/commons/thumb/3/38/Osmamthus_fragrans_var_thunbergii3.jpg/250px-Osmamthus_fragrans_var_thunbergii3.jpg)
2009-10-12[n年前へ]
■引数付きのMathLinkFactory.CreateKernelLinkの書き方 ![](http://d.hatena.ne.jp/images/b_entry.gif)
無料配布の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.closeCreateKernelに引数をつけただけですが、Mathematica Playerのインストール先が決まっているなら、とても便利で手間要らずになるのでここにメモしておくことにします。
2009-10-13[n年前へ]
■MathematicaとMathematica Playerの描画関数の違いを調べてみる ![](http://d.hatena.ne.jp/images/b_entry.gif)
![](http://ec3.images-amazon.com/images/I/512DCNWWKWL._SL500_AA240_.jpg)
2009-10-14[n年前へ]
■AutoHotkeyで任意の場所・タイミングでRubyやPerl等を使おう ![](http://d.hatena.ne.jp/images/b_entry.gif)
キー入力する際に、さまさまな機能を使いたくなります。たとえば、以前作った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年前へ]
■「身長・体重・スリーサイズ」で「今昔アイドル」をクラスタリングしてみよう ![](http://d.hatena.ne.jp/images/b_entry.gif)
![](http://ec3.images-amazon.com/images/I/51TDFXmpMTL._SL500_AA240_.jpg)
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︶﹂で行ったものですから、体型でのグループ分けにすぎません。けれど、こうして眺めてみると、なんだか特徴が出てくるような気がするようにも思えます。
![](http://ec3.images-amazon.com/images/I/41U8RkzRoyL._SL500_AA240_.jpg)
2009-10-16[n年前へ]
■Mathematica Player用.nbpファイルに埋め込まれた画像データのナゾ ![](http://d.hatena.ne.jp/images/b_entry.gif)
![](/diary_image/970_1m.jpg)
![](/diary_image/971_2m.jpg)
2009-10-17[n年前へ]
■エクセルからMathematica(無料Player)の計算機能を使う ![](http://d.hatena.ne.jp/images/b_entry.gif)
![](/diary_image/874_excel.jpg)
ir.exe mathematicaServer.rb 80という具合にして、適当なポート︵この例であればhttpの標準ポートである80番︶でコマンドを待ち受けるWEBサーバが起動します。
![](http://ec3.images-amazon.com/images/I/51zI0ZWtD4L._SL500_AA240_.jpg)
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
![](http://www.hirax.net/diary_image/539_001m.jpg)
2009-10-18[n年前へ]
■「長岡京市と平家」と「伊豆長岡京市と源氏」 ![](http://d.hatena.ne.jp/images/b_entry.gif)
![](http://www.hirax.net/diary_image/2004071103.jpg)
![](http://www.hirax.net/diary_image/2004071102.jpg)
2009-10-19[n年前へ]
■「美的曲線」で「理想のバスト形状」を作り出そう ![](http://d.hatena.ne.jp/images/b_entry.gif)
以前、﹁美的曲線﹂というものに関する記事を書いたことがあります。その記事のタイトルを書いてしまうと、﹁美的曲線﹂と﹁包茎手術﹂という、なかなか口に出すのは恥ずかしいようなものですが、﹁美しさとは何か﹂という問いに答える…かもしれない答えのひとつ﹁が美的曲線﹂である・・・かもしれません。この記事の場合は、男性の身体と美的曲線の話題です。
美的曲線に関して,和歌山大学の原田利宣先生が,﹁自然界や人工物におけるさまざまな美的曲線の多くは,曲率対数分布図が直線で近似できるということ﹂を指摘されました.原田先生が調べた美的曲線には,蝶の羽や自動車のボディのキーラインなどが含まれています.美的曲線の特別な場合として,曲率対数分布図における直線の傾きα=-1の場合にはクロソイド曲線,α=1の場合には対数螺旋となることが指摘されています.本研究では,曲率対数分布図が直線で表される曲率変化の単調な平面曲線を美的曲線と呼びます.
前に書いた記事は、男性の身体と美的曲線の話題でしたが、もともと、週刊SPA!に﹁︵小型な体型が多い日本人にとって︶究極のバストサイズ・形状はどういったものか?﹂と聞かれたときに浮かんだのが、﹁美的曲線﹂でした。﹁美的曲線﹂か、あるいは、﹁ラプラス方程式︵特に解のひとつとしての調和関数︶﹂を例に挙げながら、﹁究極のバストサイズ・形状﹂を求める︵強引な理屈付けにもとづく︶理論を構築しようか、と考えたわけです。
さて、今日ふとその続きを作成してみたくなりました。﹁理想のバスト形状﹂を﹁美的曲線﹂にもとづいて作成できるのではないか、と思いついた︵妄想したのです︶。つまり、適当なバスト形状を作成したら、その形状がどれだけ﹁理想﹂に近いかの評価関数として、﹁美的曲線﹂からのズレを用いることができるのではないかというアイデアが頭に浮かんだのです。﹁美的﹂かどうかの評価関数さえ作ってしまえば、シミュレーテイッドアニーリング法でも、遺伝的アルゴリズムでも、さまざまな最適解を求める手法を用いて、﹁理想のバスト形状﹂を求めることができるのではないか、と考え付いたわけです。
というわけで、まずは自分の頭を整理して、思いついたアイデアを果たして具現化しうるかどうか確認するためのプロトタイピングを行ってみました。…というわけで、プロトタイプンぐツールNo.1については、明日書いて公開してみようと思います。
![](http://ecx.images-amazon.com/images/I/31ffsmF9DKL._SL500_AA280_.jpg)
2009-10-21[n年前へ]
■無料のMathematicaカーネルとIronRubyでP2Pグリッド数式処理システムを作ってみよう ![](http://d.hatena.ne.jp/images/b_entry.gif)
![](http://ecx.images-amazon.com/images/I/51OI1P9LkwL._AA300_.jpg)
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円以下で泊まれるベスト宿はどこだ!? ![](http://d.hatena.ne.jp/images/b_entry.gif)
![](http://hotelreport.up.seesaa.net/image/20070930_016-thumbnail2.jpg)
![](http://travel.rakuten.co.jp/share/HOTEL/29338/29338_bath.jpg)
![](http://img.travel.rakuten.co.jp/share/HOTEL/29338/29338.jpg)
![](/diary_image/977_CA3C0137m.jpg)
2009-10-24[n年前へ]
■「対数螺旋という美的曲線」と「美乳カーブ」 ![](http://d.hatena.ne.jp/images/b_entry.gif)
![](/diary_image/979_CA3C0005m.jpg)
2009-10-26[n年前へ]
■「エクセル」と「無名関数」 ![](http://d.hatena.ne.jp/images/b_entry.gif)
![](http://ecx.images-amazon.com/images/I/41J8ll%2B9ocL._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA240_SH20_OU09_.jpg)
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年前へ]
■「引っ越し」と「宅急便で配達される送付物」 ![](http://d.hatena.ne.jp/images/b_entry.gif)
![](http://ec3.images-amazon.com/images/I/41AVJXWXDYL._SL500_AA240_.jpg)
![](http://www.fujixerox.co.jp/company/fxbooks/graphication/images/top_01.jpg)
2009-10-29[n年前へ]
■「MathematicaPlayer+IronRubyでMathematica風AJAX WEBアプリ」の動作動画 ![](http://d.hatena.ne.jp/images/b_entry.gif)
﹁無料MathematicaPlayer+IronRuby+AJAX﹂で数式処理フロントエンドを作ってみよう がどのように動作するか・どのように使うことができるのか、をわかりやすく眺め・わかりやすく感じることができるように、ブラウザ上で使っている最中の画面をキャプチャしてみました。それが、下に貼り付けた動画になります。
IronRubyやMathematica、あるいは、.NETと言われても・・・何か敷居が高く感じてしまうという方も多いかもしれません。あるいは、使ってみたいけれど、ダウンロード・インストールするのが面倒だ・わかりにくい・・・、とか、そういった作業をする時間がないよ・・・という人も多いかもしれません。
そこで、﹁とりあえず、どんな具合になるのか知りたい﹂という方のために、今日はとりあえず動作画面を誰でも眺めることができるようにしてみました。私がIronRubyで書いたコードもとても単純ですから、適当に直したり・カスタマイズしてみると、とても面白いのではないでしょうか。もちろん、﹁ここ修正すべし﹂といったアドバイスなど、大歓迎です。
2009-10-30[n年前へ]
■「京都市鴨川源流」を廻る「理系風デート」 ![](http://d.hatena.ne.jp/images/b_entry.gif)
青春小説のようなシーンを交えながら、数学世界を解説していく﹁数学ガール
︵結城浩︶﹂を読んで、少し前に読んだ万城目学の﹁ホルモー六景
﹂を連想しました。連作短編集﹁ホルモー六景﹂中の一話、京都市左京区を舞台に、一人の男子高校生が自分では気づかないうちに年上の女子大生に抱いていた淡い恋心と、デート風の︵けれど決してデートではない︶一日の散策を描いた﹁ローマ風の休日﹂です。
﹁じゃあー少しだけ、僕とデートしてくれませんか?﹂
鴨川の始まりである出町柳辺りから、御池大橋までを舞台に、オイラーが解いた﹁ケーニヒストベルグ橋の問題﹂を題材にして、ローマの休日風な素敵で切ない数時間︵と数ヶ月︶を描いた一話です。見事なくらいに、微妙な心の機微と数学の世界が一体化した素敵で少し切ない短編です。
午後四時になってもまだ陽の高い、京都の休日へ繰り出した。
実際には、﹁ケーニヒストベルグ橋の問題﹂を解くという口実の︵体力的に疲れそうな︶デートに、付合ってくれる女性は少なそうな気がします。・・・とはいえ、この﹁京都市鴨川源流﹂を廻る﹁理系風デート﹂の一話、﹁ローマ風の休日﹂はとても楽しめる話です。
﹁ローマ風の休日﹂は﹁ホルモー六景
﹂だけでなく、何人かの小話を集めた短編集である﹁きみが見つける物語 十代のための新名作 休日編 (角川文庫 あ 100-103)
﹂にも収録されていますから、中高校生、あるいは、モラトリアムな大学生︵社会人︶は一度手に取って読んでみると面白いと思います。
ケーニヒスベルグの橋とは、プロシアの首都ケーニヒスベルグ︵現在はロシア領カリーニングラード︶を流れるプレーゲル河に架かる7つの橋のことである。この7つの橋を全て一度だけ渡り、元の場所に戻れるか、という議論によって有名となった。
ケーニヒスベルグの橋の問題は1736年に、数学者オイラーにより、地図を線と点で表現し、その図形を一筆書きできるかの問題と整理されて考えられた。その結果、一筆書きできない、すなわちケーニヒスベルグの7つの橋を求められた条件の下に渡る道順は無いとして、解決された。ケーニヒスベルグの橋は、グラフ理論とトポロジーの起源であると言われている。
ケーニヒスベルグの橋
さて、鴨川源流を舞台にした﹁ケーニヒスベルグの橋の問題﹂はどのような答えになるでしょうか。ノートの上で手と頭で解いてみても良いですし、京都の街を自転車で走り、この数学の問題を足と体で解いてみると面白いと思います。そんな﹁理系風デート﹂があると・・・さらに、楽しいでしょうね。
彼女ははそれから、いろいろな数学の話を聞かせてくれた。
![](/diary_image/986_kyotoDatingm.jpg)
![](http://staff.science.uva.nl/~thk/edu/discrete05/Konigsberg.jpg)
![](http://upload.wikimedia.org/wikipedia/ja/thumb/6/6e/%E4%BA%AC%E9%83%BD%E4%B8%89%E6%9D%A1%E5%A4%A7%E6%A9%8B.jpg/220px-%E4%BA%AC%E9%83%BD%E4%B8%89%E6%9D%A1%E5%A4%A7%E6%A9%8B.jpg)
2009-10-31[n年前へ]
■「マンハッタン距離」と「続 理系風デート」 ![](http://d.hatena.ne.jp/images/b_entry.gif)
![](http://www.kotomeguri.com/k_mame/mame_img/toori_song_img.gif)
![](http://upload.wikimedia.org/wikipedia/commons/thumb/d/de/Manhattan_distance_bgiu.png/250px-Manhattan_distance_bgiu.png)
![](http://ec3.images-amazon.com/images/I/21S5RA1QJCL._SL500_AA150_.jpg)