Wolfram CDF Playerは期待外れだった

図書館からMathematicaの入門書を借りて、夏に買ったRaspberry Pi 2のMathematicaを少し使ってみた。

一昔前のワークステーション並みの速度は出ていると思うが、確かに遅い。
筆者はMathematicaは25年くらい前に大学にあったNeXTで触ったのが最初だが、その当時を思い出した。(実際には当時はもっと遅かったのだろうが)
入門書を読みながら書いてたら入力行が200くらいになったノートブックを丸ごと再計算させたら、2分かかった。
一番気になるのは、スクロール動作が遅いことで、スクロール操作を終えてから少し遅れてページが動くことがあるので、スクロールバーを操作して思った位置で止められなかったり、思った所にカーソルを当てられないことがあるのが地味にストレスになる。
まあ、筆者は主にMaximaを使っており、Mathematicaはたまにしか使わないし、本格的に使うこともまず無いので、これで満足である。

今日までずっと、Wolfram CDF Playerは前身のMathematica Playerとは違って、ノートブックの数式の評価(計算)ができるようになったものと勘違いしており、どんな数式でもRaspberry PiのMathematicaで書いてパソコンのCDF Playerで計算すれば良いと思っていたが、そうではないようだ。CDF Playerでできるのは、インタラクティブなUIを操作して変数の数値を変えて、UI上の評価結果を更新することだけらしい。
これを利用して、CDF Playerに任意の数式を評価させる手段を作成した人もいるようだが、決して便利ではない。
CDF Playerは、ほぼMathematicaそのものでプログラムサイズが巨大な割に、そのほとんどの機能が容易には使えなくされている、残念な代物のようだ。

さらに、Raspberry PiのMathematica(11.0.1.0)では再生できるのに、CDF Player(ver 11.1.1.0 for Mac)では再生できないアニメーションがあった。
Raspberry PiのMathematicaで

sol = DSolve[{y''[t] == -9.8, y'[0] == 10, y[0] == 0}, y, t];
x[t_] := 2.5 t;
Animate[Graphics[{Red, Disk[{x[t], First[y[t] /. sol]}, 0.5]},
Frame -> True, PlotRange -> {{0, 5}, {0, 5}},
GridLines -> Automatic], {t, 0, 2}, AnimationRunning -> False]

を実行すると、

このようなアニメーションが実行されるが、その状態をCDFとして保存してCDF Playerで開くと、グラフ部分がエラー表示になり、マウスカーソルを当てると

座標{$CellContext`x[0.], $CellContext`y[0.]}が数値のペア、Scaled形式、またはOffset形式ではありません。

というエラーメッセージが表示される。

また、CDF Playerで表示されるエラーメッセージには別バージョンもあり、

sol2 = DSolve[{y''[t] == -9.8, y'[0] == v0, y[0] == 0}, y, t];
Animate[Plot[First[y[t] /. sol2 /. v0 -> v], {t, 0, 2},
PlotRange -> {0, 5}], {v, 5, 10}, AnimationRunning -> False]

の出力

も同様にCDF Playerではエラーになり、

ReplaceAll: {sol2} is neither a list of replacement rules nor a valid dispatch table, and so cannot be used for replacing.

と表示される。

しかし、その下で

Show[Graphics[{Red, Disk[{x[t], First[y[0] /. sol]} /. t -> 0, 0.5]},
Frame -> True, PlotRange -> {{0, 5}, {0, 5}},
GridLines -> Automatic]]
Show[Plot[First[y[t] /. sol2 /. v0 -> 10], {t, 0, 2},
PlotRange -> {0, 5}]]

を実行して表示した、それぞれのアニメーションの1フレームは、CDF Playerでも正常に表示されるので、少なくともsol2は"a list of replacement rules"として機能しており、よくわからない。
Webで検索しても、同じようなエラーが発生するという情報すら見つからず、お手上げである。

無料だから文句は言えないが、インタラクティブなコンテンツを再生できるのが売りのCDF Playerなのに、よりによってアニメーションがエラーになるとは、残念である。


筆者にとってMathematicaは、実質、大学生の時に講義で触って以来である。当時は大学に行けば使い放題だったのに全く興味が湧かなかったが、30を過ぎてから興味が募り、Mathematicaは高価なので、代わりにWolfram Alphaを使ってMathematicaの勉強をしたことがある。大学時代にもっとMathematicaで遊んでおけば良かったと後悔したものである。
そんなこともあって、Raspberry Piを買うことによって遂にMathematicaを入手できたことは感慨深い。何に使うの?という声が聞こえるが、そういう問題ではないのである。無いとただ無いことが残念であり、あれば御守りのような安心感があり、アイコンはオブジェのように飾りになり、開くとインテリアのように目の楽しみになるのである。

上記のアニメーションGIFは、Raspberry Pi内でImageMagickを使って作成した。
具体的には、Mathematicaのアニメーションが隠されず見えている状態で、アニメーション速度を遅くして、LXTerminalから
import -adjoin -snaps 20 tmp.gif
を実行して、Mathematicaのウィンドウをいいタイミングで20回クリックして(速すぎるとキャプチャーが間に合わなかったりマウスイベントをX Windowに奪われたりする)、
display tmp.gif
として、開いた画像をクリックして、メニューからTransform->Cropを選んで切り抜く座標を余白込みで大まかに定め、
convert tmp.gif -crop 420x450+60+190 -trim +repage MathematicaAnim01.gif
(420x450+60+190は(60,190)から420x450を余白込みで切り抜く例)として余白をカットしながら切り抜いたものである。
GIFの場合、 convert -crop してもキャンバスサイズが変わらないので、キャンバスサイズを変えるには、 +repage を加える必要があるようだ。