けんさく。

けんさく。が、いろいろ趣味のことをやるページです。

プログラミング

色々なプログラミング言語の「effectiveシリーズ」を寝る前に読んだら新しい言語が生まれるかと思って

以前リョサの『緑の家』とダニロ・キシュの『砂時計』を同時に読んだらなんか頭が混乱してトリップしそうになったので、技術書でもやってみた。
緑の家(上) (岩波文庫)
M.バルガス=リョサ
岩波書店
2010-08-20


砂時計 (東欧の想像力 1)
ダニロ・キシュ
松籟社
2007-01-31

 
結果としてはPerlの印象が強すぎる。コンテキストによって聞いたことのない挙動をする話がたくさんあって目眩がした。
そうかPerl自体が色々混ざった変な言語だったんだな。
 
Effective Perl 第2版
Joseph N. Hall
翔泳社
2015-02-17

 
Effective Ruby
Peter J. Jones
翔泳社
2015-01-09





Effective JavaScript
David Herman
翔泳社
2013-02-19

これと比べるとRubyやJavaScript は「あっ、そんな便利な機能あるんだ」くらいの話なんだけど、Perlは「そんな変な文法があるのか」って感じの驚きに出会う。入門書との落差か一番激しいんじゃなかろうか。だって、他の言語は入門書に書いてない文法レベルの話ってそんなにないと思うんだけどなあ。 

式をパースして座標変換しながらお絵描きできるWebアプリを作った。

https://tannakaken.xyz/transformational_drawing/
簡易グラフ描画ソフトとしても使える。
パーザはこの本を参考にした。

パーザ・コンビネータが面白くて、意味のあるものにしたかったからJavaScriptに書き直した。
これで遊んでくれれば「座標感覚」が身につくかもしれない。
しかしやはりHaskellのモナドとして書く美しさには到底かなわない。
モナドが「関数のように合成できる手続き」であるということの意味がよくわかった。

無限次元超複素数電卓 Infinitenion

暇なのでアプリを作りました。
無限次元超複素数電卓 Infinitenion
複素数、四元数、八元数、十六元数……と任意の2^n元数の帰納極限である実数上無限次元の代数の演算をすることができる電卓です。
ただし、四元数は可換則が成り立たず、八元数は結合測が成り立ちません。
つまり、a(bc)と(ab)cは違う値になります。
すると、計算順序の曖昧さを防ぐために、大量の括弧が必要になってしまいます。
そこで、この電卓では逆ポーランド式の語順を採用しています。
1 + 1と書く代わりに1 1 +と書きます。これは「1に1を足す」と読めば、日本語の順序に似ています。
すると、a(bc)はa b c * *と書き「aに、bにcをかけたものをかける」と読み、(ab)cは「a b * c *」と書いて「aにbをかけたものに、cをかける」と読めばいいのです。これで計算順序を指定するのに括弧はいりません。
なのでこの電卓では1 2 +と書けば3に、1 2 + 3 *と書けば9になるわけです。
さらにE1で最初の虚数単位、つまり複素数のiを表します。なのでE1 E1 * = -1となります(E1 2 ^と書いてもいいです。「E1の2乗」と読みます)。さらにE2とE3は四元数のjとkを表します。E2 E3 * = E1、E3 E2 * = -1 E1 *となるどことが、可換則の破れです。
さらにE3 E10 + E6 E15 - * = 0は十六元数には零因子がある(E3 E10 +やE6 E15 -は零因子)ことを示しています。
ネットで調べると、百二十八元数には冪零元があるなどという、まことしやかな噂が書き込まれていますが、このアプリで少し調べてみると、この代数はいくら次元を大きくしても、冪零元はありえないことが分かると思います。
より詳しい使い方はアプリのヘルプを見てください。また超複素数に関する説明なども付属しているほか、私の自己満足によって四元数の発明者ハミルトンに関する小説が添付されていたりします。ぜひ読んでください。
どうやって、こんな無限次元の演算を実現しているか気になる人はケイリ-・ディクソン(Cayley-Dickson)の構成法について調べてみると分かると思います。肝は、複素数や四元数、八元数を得ベクトルではなく、再帰的に定義された「木」であると考えることです。
どうぞ遊んでくださいな。
そのうちIphone版も作ってみます。


フラクタルの木

JavaScriptでフラクタルの木を動かせるようにしたよ。

フラクタルの木 

そのうちいろいろ弄ったり、説明文になってない小説を加えたりしよう。

ちなみに思いついたのは下に貼った本(通称ブルーブック)を読んでGhostScriptで遊んでるときで、その日のうちに書いてみた。※1
PostScript® Language Tutorial and Cookbook (APL)
Adobe Systems Inc.
Addison-Wesley Professional
1985-01-01

思いつき駆動プログラミング。
しかしいいねPostScript。スタック志向は単純で良い。文法が無いのが文法の究極の姿だとLispで学んだ。
ところで、今画像生成のためにプログラミングするというと、何なんだろか。
Web上でインタラクティブに動かすつもりなら、JavaScript書くか、CoffeeScriptで書いてJavaScriptに変換するか、もしくはprocessingで書いてprocessing.jsで動かす(結局JavaScriptか)って感じなんだろう。
データを解析し、それを画像の形に出力するなら、何らかのプログラミング言語からImageMagickを使うのが王道ではなかろうか。
しかし、そもそも動かす必要もないし、複雑なデータを解析する必要もない場合も多かろう。
すると、どの言語も汎用性が高すぎる。
汎用的な道具を使えるようにするのは重要だが、ドアノブをを治すのに工業用ロボットを持ってきても困る。かと言って、全ての作業に専用の道具を用意するのもまた非効率。うまいこと複雑な作業と簡単な作業に分けて、混乱しない程度の量の道具でできるだけ多くの作業にストレスを感じずに対処したい。
するとPostScriptって結構使えるんじゃなかろうか。もちろんGIMPやInkscapeを使うことも視野にいれての話だが、規則的な図形だったらPostScript手書きも選択肢にあるんじゃなかろか。GIMPもInkscapeもある種の単純な反復作業をやるには複雑すぎる気がする。
例えば数学教師とかが、PostScriptを学べば、図とか作るのに便利なんじゃないか。慣れればマウスでやるより速くやれるし、再利用もしやすかろう。
数学教師のためのPostScript。ううむ、どんなもんだろうか。 


※1 ちなみにこの本、公式だけあってとても分かりやすいし、英語版ならネット上に無料のPDFが置いてあるのも良いが、107ページ(日本語版だと121ページ)に、(   )の中の半角スペースの個数が足らないとエラーが出て動かない(ちなみに正解は三個。postscriptの文字列は全て可変で、これは単に必要なメモリ領域を確保しているだけなので三個以上ならOK)、という鬼畜なコードが書かれている。もし紙の上に印刷されていたら目視では判断のしようがない。本来DTP用のソフトウェアのはずなのにそんな馬鹿な、という感じである。
同様に、世の中にはpythonやyamlのコードの複数の入れ子から一気に抜けるところで改ページをしてしまう紙の本が結構ある(しかも結構いい本で)が、そんなの目視で分かるわけねえだろが。 
集合知プログラミング
Toby Segaran
オライリージャパン
2008-07-25

 
どちらもとってもいい本ですよ(半ギレ)。
ちなみにとある著者にこのことの文句を言ったら、「その観点は初めてだ」と驚かれてしまった。そうかなあ。普通に考えることじゃないかなあ。

Ruby on Railsで小説サイト作ってる

今まで書いた小説を効率的に呼んだり切り刻んだりするサイトが欲しいから自分で作ることにした。とりあえずRuby on Railsで作ってる。
今年中には人に見せられるものが出来るといいな。
 
Leaves of Words
記事検索
最新コメント
月別アーカイブ
プロフィール

けんさく。

QRコード
QRコード
タグクラウド
  • ライブドアブログ