2011-08-27[n年前へ]
■「Wolfram CDF Player を汎用する」 
Wolfram CDF Player で任意のコマンド評価を実現しよう、という「Wolfram CDF Player を汎用する」にこんな一節があります。
CDF Player は、J/Link で組んだ Java プログラム経由でならテキストファイルの読み込みが可能なようなのだ。この方法なら CDF Player の使用許諾にも抵触してないように見える。というわけで、テキストファイルに Mathematica 式を書いて保存しておき、これを J/Link 経由で読み込んで ToExpression する CDF ファイルを用意する。
 ここで語られているテクニックの味噌(ミソ)は「J/Link 経由で読み込んで ToExpression する CDF ファイルを"Mathematica 8で用意する"」という箇所です。「Mathematica 8でCDF ファイルを作る」ということこそが、Wolfram CDF Player の使用許諾に抵触しないために必要とされる条件なのです。つまり、CDF Playerを使うためには、使用許諾に沿うと、Mathematica 8が必ず必要とされるというわけです。
 ここで語られているテクニックの味噌(ミソ)は「J/Link 経由で読み込んで ToExpression する CDF ファイルを"Mathematica 8で用意する"」という箇所です。「Mathematica 8でCDF ファイルを作る」ということこそが、Wolfram CDF Player の使用許諾に抵触しないために必要とされる条件なのです。つまり、CDF Playerを使うためには、使用許諾に沿うと、Mathematica 8が必ず必要とされるというわけです。
 つまり、「泥臭く、あれこれ試した」という言葉の背後にあるのは「Mathematica 8でCDFファイルを作り、そのCDFファイルは外部かで作成されたコマンド群を解釈・実行させる」ことができるかを試行錯誤し・実現してみた、ということです。その「試行錯誤・実現」という部分の「苦労と醍醐味」を汲み取りたい、と思います。
 つまり、「泥臭く、あれこれ試した」という言葉の背後にあるのは「Mathematica 8でCDFファイルを作り、そのCDFファイルは外部かで作成されたコマンド群を解釈・実行させる」ことができるかを試行錯誤し・実現してみた、ということです。その「試行錯誤・実現」という部分の「苦労と醍醐味」を汲み取りたい、と思います。
ところで、「CDF Playerを使うためには、使用許諾に沿うと、Mathematica 8が必ず必要とされる」という規約はビジネスとして至極自然であるようにも思われます。しかし、その一方で、「CDFはオープンファイル形式ですか」という質問に対する答えとは、少し、矛盾を抱えているようにも思われます。
2011-11-05[n年前へ]
■「Wolfram CDF PlayerをMathematicaとして使う方法」をRubyでもっと簡単にしてみた 
 「Wolfram CDF PlayerをMathematicaとして使う方法」を、Rubyコードを書くことで「もっと簡単」「わずか3ステップ」にしてみました。
 Wolfram Mathematicaはプログラミング言語であり、優れた開発環境です。数式処理言語としてスタートしたMathematicaですが、今では汎用言語と言っても良いくらいに、さまざまなことができるようになっています。
 Wolfram Mathematicaはプログラミング言語であり、優れた開発環境です。数式処理言語としてスタートしたMathematicaですが、今では汎用言語と言っても良いくらいに、さまざまなことができるようになっています。
しかし、そんなMathematicaの「玉にキズ」な点が「お値段」です。Mathematica を趣味で使う人たちのために295ドルで「Mathematica ホームエディション」が発売されています。今の円相場なら295ドルは2万3千円ほどになりそうなものですが、残念ながら、日本では(消費税を含めて)7万350円とかなりのお値段になってしまいます。
 そこで、出てくるのが「Mathematicaで作られた「処理アプリケーション」を実行させることができるWolfram CDF Player(かつてWolfram Mathematica Player と呼ばれていたもの)で、汎用的な計算をさせよう」という要望です。無料で配布されているWolfram CDF Player はMathematicaで作られたコードを実行することができまずが、ユーザが任意の数式を入力して処理させることはできません。しかし、そんな”再生専用”MathematicaであるWolfram CDF Playerは、基本的にはMathematicaと同じ処理エンジンが組み込まれていますから、このWolfram CDF Playerに任意の処理をさせてしまおうというアイデアです。 (ここでは触れませんが、CDF PlayerはMathematicaで作られたアプリケーションを実行しているに過ぎない、という点もライセンス上実は重要なポイントです)
 そこで、出てくるのが「Mathematicaで作られた「処理アプリケーション」を実行させることができるWolfram CDF Player(かつてWolfram Mathematica Player と呼ばれていたもの)で、汎用的な計算をさせよう」という要望です。無料で配布されているWolfram CDF Player はMathematicaで作られたコードを実行することができまずが、ユーザが任意の数式を入力して処理させることはできません。しかし、そんな”再生専用”MathematicaであるWolfram CDF Playerは、基本的にはMathematicaと同じ処理エンジンが組み込まれていますから、このWolfram CDF Playerに任意の処理をさせてしまおうというアイデアです。 (ここでは触れませんが、CDF PlayerはMathematicaで作られたアプリケーションを実行しているに過ぎない、という点もライセンス上実は重要なポイントです)
「Wolfram CDF PlayerをMathematicaとして使う方法」は「”決まったURL”から数式を読み込み、その数式を処理するプログラムをMathematicaで作り、そのプログラムをWolfram CDF Playerで再生させる」というアイデア・実装です。このアイデアのポイントになるのは、Wolfram CDF Playerは「”決まった一定のURL”から数式を読み込む」という「非任意」の処理をしているように見えて、実は”そのURL”が出力する数式を任意に変化させることで、任意の数式処理をさせてやる、ということです。「入力した数式をサーバに記憶させ、そのサーバからWolfram CDF Playerが数式を読み込み・処理を行う」という手順で、任意のプログラムをWolfram CDF Playerに実行させることができます。
 しかし、「Wolfram CDF PlayerをMathematicaとして使う方法」で書かれている「ローカル・コンピュータに、PHPをインストールして・HTTPサーバを動かす」という手順は少しばかり面倒です。そこで、Rubyで同じことをもっと簡単にさせることができるコードを書いてみました。つまり、与えられた数式を記憶し・返すというWEBアプリをRubyで書いてみたのです。
 しかし、「Wolfram CDF PlayerをMathematicaとして使う方法」で書かれている「ローカル・コンピュータに、PHPをインストールして・HTTPサーバを動かす」という手順は少しばかり面倒です。そこで、Rubyで同じことをもっと簡単にさせることができるコードを書いてみました。つまり、与えられた数式を記憶し・返すというWEBアプリをRubyで書いてみたのです。
require 'webrick'
include WEBrick
contents = ''
s=HTTPServer.new(:Port=>80, 
                 :DocumentRoot=>'')
s.mount_proc("/shutdown"){s.shutdown}
s.mount_proc("/"){ |req,res|
  res.body = 'Work!?'
  if req.query['body'] 
    contents = req.query['body']
    res.body = req.query['callback'] + '.()'                    
  else
    res.body = contents if contents != ''
  end
}
trap("INT"){ s.shutdown }
s.start
 このコードをmath.rbとでも名付けてファイルに保存したら、
ruby math.rbと打ち(あるいはOSX などであれば、ポート80を開くにはルート権限が必要なので、 sudo ruby math.rbとでも打ち)、Universal Mathematica Manipulator 3にアクセスすれば、Mathematicaと同等の機能を使うことができます。 (ちなみに、http://localhost/shutdownにアクセスすれば、このRuby Webサーバは動作終了します)
Universal Mathematica Manipulator 3の左側の領域で数式を入力し”TAB”キーを押します。すると、(Rubyで書かれたローカルで動く)HTTPサーバがその数式を記憶します。そして、右側の領域で"eval"を押せば、ブラウザに埋め込まれたWolfram CDF PlayerがRuby HTTPサーバへと数式を探しに行き、結果として、任意のMathematicaプログラムを処理した結果が実行される、というわけです。もちろん、前もって、Wolfram CDF Playerをダウンロード&インストールしておくことも必要です。
 下の画像は、Universal Mathematica Manipulator 3とRubyで書いたWEBサーバで下記コードを実行させてみた際の実行結果です。音楽教室の必需品、ルートヴィヒ・ヴァン・ベートーヴェンの姿が浮かび上がります。あなたなら、どんな風に遊んでみたくなりますか?…やることは簡単「Wolfram CDF Playerのインストール・Rubyコードのコピペ保存&実行・そしてUniversal Mathematica Manipulator 3にアクセスする」のわずか3ステップです。
 下の画像は、Universal Mathematica Manipulator 3とRubyで書いたWEBサーバで下記コードを実行させてみた際の実行結果です。音楽教室の必需品、ルートヴィヒ・ヴァン・ベートーヴェンの姿が浮かび上がります。あなたなら、どんな風に遊んでみたくなりますか?…やることは簡単「Wolfram CDF Playerのインストール・Rubyコードのコピペ保存&実行・そしてUniversal Mathematica Manipulator 3にアクセスする」のわずか3ステップです。
ExampleData[{"Geometry3D","Beethoven"}]
 
2012-01-12[n年前へ]
■Wolfram Mathematica とCDF Playerの違いを図解してみた 
 Mathematica研究会で、Wolfram CDF Playerでローカルデータを読み込むというネタを聴きました。
Wolfram CDF Player というのは、数式処理ソフトウェアであるWolfram Mathematicaで作られたファイルを「閲覧・再生」するためのソフトウェアです。
しかし、実際のところ、Wolfram CDF Player は制限が付けられたWolfram Mathematicaというようなものなのです。
そのため、前述のような「Wolfram CDF Playerでできることの限界を試そう」という技術的な試みがされたりします。
そこで、Wolfram CDF Playerの制限について、(現時点での)頭の整理がてらラクガキしてみました。
 Mathematica研究会で、Wolfram CDF Playerでローカルデータを読み込むというネタを聴きました。
Wolfram CDF Player というのは、数式処理ソフトウェアであるWolfram Mathematicaで作られたファイルを「閲覧・再生」するためのソフトウェアです。
しかし、実際のところ、Wolfram CDF Player は制限が付けられたWolfram Mathematicaというようなものなのです。
そのため、前述のような「Wolfram CDF Playerでできることの限界を試そう」という技術的な試みがされたりします。
そこで、Wolfram CDF Playerの制限について、(現時点での)頭の整理がてらラクガキしてみました。
CDF Player(以前の名前であるMathematica Playerもほぼ同様)は、Mathematicaで作成されたCDFファイルしか開けず(ファイル内容と作成元Mathematicaのライセンス番号から定まる”だろう”チェックサム確認を行います)、ユーザ入力が「数値のみ」・ローカルファイルパスからのImportができない、といった制限がかけられています。
そこで、Wolfram CDF Player( 計算コアであるMathKernel)を使い切るために、図中に青数字で描いたような経路を使い、色々な「汎用化」がされています。つまり、
- Mathlink経由でMathKernelを直接叩く(「無料配布のMathematicaカーネルをIronRubyから自由自在に使ってみよう」など)
- 任意のコード・データを数値エンコードして、Imputフォーム経由で突っ込む(「Universal Mathematica Manipulator—Poor Man’s Mathematica」)
- ローカルファイルパスでなく、ネットパス経由のImportを行い、コード・データを突っ込む(「Wolfram CDF PlayerをMathematicaとして使う方法」)
- J/Link(MathLink経由Javaインターフェース)でコード・データを突っ込む(「Wolfram CDF Player を汎用する」など)
2番目の手法は「コードもデータも区別する必要なんかないね!」という思想が見え隠れしますし、3番目の手法は「ネット経由でのデータアクセスはできるだろうし、そうならば(やろうと思えばDNS偽装でも何でも)後はいくらでもやりようがある」という技術的な読みが感じられて、それぞれの技術的な趣きがあり、なかなか面白いものです。
  Mathlinkからの接続がCDF Playerのカーネルでも有効になっているのは(Mathematica本来の動作構造と直結しているため)単純に機能を止めてしまう・壁を作ってしまうわけにはいかないという辺りだろうか、と想像しています。
また、ネットパス経由のImport機能が有効なのは、データ・アクセスのために必要で、その機能を止めるわけにはいかない(機能を止めてしまうと魅力的なデモが大幅にできなくなってしまう)、という辺りの理由を疑っています。
…というわけで、今日は、自分用のメモ・ラクガキをしてみました。
 Mathlinkからの接続がCDF Playerのカーネルでも有効になっているのは(Mathematica本来の動作構造と直結しているため)単純に機能を止めてしまう・壁を作ってしまうわけにはいかないという辺りだろうか、と想像しています。
また、ネットパス経由のImport機能が有効なのは、データ・アクセスのために必要で、その機能を止めるわけにはいかない(機能を止めてしまうと魅力的なデモが大幅にできなくなってしまう)、という辺りの理由を疑っています。
…というわけで、今日は、自分用のメモ・ラクガキをしてみました。

