魔術師をめざして

魔術師を目指して、相場・数学・プログラム言語を研究しています。

(factorial 300000)

ぜんかいの「Scheme スピードテスト」の続きの話ではあるが、こんかいはぜんかい以上にいい加減なテストなんだ。こんかいは時間さえも計っちゃいない。目覚まし時計はお休みちゃん。

f:id:fxrobot:20141223145306j:plain

とにかく時間がかかってもいいから、計かんないから、やってみろい! しかし、ちょっときついぞ (factorial 300000) だ! どういうわけだか、また 30万なのだ。

まずは最初に訃報だ。ぜんかい優勝の Ypsilon が (factorial 300000) の暴力に吹っ飛んだ。

10万までは高速順調であったが、さすがに 30万となると Ypsilon の想定外なのか黙って落ちた。

そのほかの Scheme メンバーもダウンに次ぐダウン。多倍長ハンターの Lisp 族としての誇りはどうなったのだ。

(define (factorial n) (if (zero? n) 1 (* n (factorial (- n 1)))))
(factorial 300000)

で、プログラムはこんな感じね。

まずは見てくれ。ぼくが信頼し愛用する GP はちゃんとやり終えてくれたぞ。数字はちょっとしか見えていないが実際はすごい量なのだ。30万どころか 300万をやらせてみたがこの通りだ。

f:id:fxrobot:20141223115923j:plain

いっぽう、こりゃなんじゃ。

f:id:fxrobot:20141223111555j:plain

こんなの Scheme といえるのか。Infinity って..。あっ、すまない。前回のデータだった。ほんと、いま気づいた。でも、Factorial をやったところで Infinity に決まってるさ。まぁ、いろんな処理系があっていいんだけど、Lisp 族は Fortran が簡単にはできないことができてほしい。

で、肝腎の Scheme は?

みんなが信頼する Gauche はさすがなもので時間はたっぷり掛かったが最後までやってくれた。また、Schluessl は前回どうようの高スピードでこんかいもぼくの期待に応えてくれたのだ。ありがとう。

MIT/GNU-Schme からは、Aborting!: maximum resursion depth exceeded のメッセージをもらった。外国勢も黙ってサラッとやり終えてくれるものはなかなかなかった。そんななか、SISC は Gauche よりも Schluessl よりも速く黙ってやり終えてくれる数少ないひとつだった。

f:id:fxrobot:20141223123414j:plain

こんかいの結論は、なんとなくこんな感じか。じつは、お気づきのとおり、ぜんかいも Ypsilon よりも SISC のほうが上だった。ただ、あとになってのエントリーだったので、表彰台に登ることはなかったということなのだ。

さて、最後に (factorial 300000) という数字がどれほどのものか伝えておきたいと思う。

f:id:fxrobot:20141223132624p:plain

この数字がどれほど続くのか。うーん、GAP の力を借りることにしよう。

f:id:fxrobot:20141223132955p:plain

1512852 桁。151万桁の数字というわけだ。

あっ、これでもわからない? もし、ここにその数字全部を貼り付けたら、記事10回分くらいが数字で溢れかえってしまうだろう。そういう数字を計算して吐き出すことができる言語。それこそが LispScheme)ではないだろうか。

【追伸】
とはいたってわかっちゃいるよ。

GaucheLinux において(Windowsのほうはあまり見ちゃいないだろう)、あらゆる使用に耐え、あらゆる場面で高パフォーマンスを出せるようなバランスを取った設計になっているのだろう。Fortran 的に使ったってそこそこいくぜってことだね。

これは想像だけど、Gauche は事務処理、数値計算、記号処理の総合においては最強なのかも知れないよね(ぼく的には根拠はないけど)。

でもね、Fortran の土俵では Fortran にはまったく敵わないだろう。また Fortran だって 30万の階乗の計算だってそりゃもちろんできるだろう。そして、やればどの Scheme にだってスピードじゃ負けないはずだ。

だけど怠け者のぼくはそんな大変なことをやろうとは思わないさ。

言語哲学的にいえば、Scheme はまずは Sceme の得意分野で最高を目指すべきじゃないだろうか。ぼくはけっきょくそれがいいたくて、2回にわたって Gauche の名前がでる記事を書いたのかも知れない。

Scheme スピードテスト

きょうはちょっとした思いつきで Schemeスピードテストをやってみた。

f:id:fxrobot:20141222055255j:plain

内容は 123^300000(30万乗)の計算をさせるという単純なもの。テストしたのは7つの Scheme で答を出力できたのは3つだけだった。設定を変えればよいのかもしれないが面倒なので正常に終了したものだけを挙げると以下のとおり。

① Ypsilon(イプシロン)                 52秒
② Schluessl(シュリュッセル)   1分40秒
Gauche(ゴーシュ)               5分23秒

f:id:fxrobot:20141222053852j:plain

 なお、計測中は DVDで映画を観ていた。実行中は静止させていたよ。

でも、そういういい加減な環境で、目覚まし時計の秒針で計ったということだけど、どれもおなじ条件だからね。

それでこの結果。ちなみのぼくの PC は Windows7 64bit版 メモリ 12GB だ。

ついでにそのほかの言語もやってみた。
結果は以下のとおり。

① SWI-Prolog                                  1秒 強(2秒掛かっていないが計れなかった)
Haskell                                        6秒
Python 3.4.2                                9秒
④ PyPy 2.4.0                                  20秒
⑤ Frink                                          52秒
⑥ J                                             2分3秒

まぁ、これは、ディスプレイに数字を打ち終わった時点までの時間で本質的でない部分が含まれていると思う。それにしても工夫なしで計算してくれて出力し終わってくれる、これがすごくないかい。すごいと思うし、ありがとうって感じ。

なお、GAP でも試した。表示は瞬時だったが、

gap> 123^300000;
<integer 341...001 (626972 digits)>

こんな感じの表示だったので、こんかいは対象外とした。でも、たしかに計算は終わっているようだよね。このドイツ製の GAP に注目か!?

なお、Factor でも試そうと思ったが落ちるのが目に見えているのでやらなかった。Factor はじつに魅力的な言語だけど、現時点では、大きな計算負荷を掛けると落ちてしまう。【追伸】とはいえあになって気になったので試したが、123^300000(30万乗)どころか 123^3000 でダウン。

f:id:fxrobot:20141222045125j:plain

Factor はぼくが大好きになりつつある言語なので、こんごの改善を期待したい。

さて、スピードテストといってもこんかいのような単純な計算ひとつだけのテストで順位を付けられては言語の開発側もたまったもんじゃないだろう。もっと総合的に評価しなければならないことは承知している。だから、あくまでもこの計算ではこうだったというひとつの参考程度に考えてほしい。

Ypsilon のサイト(http://www.littlewingpinball.net/mediawiki-ja/index.php/Ypsilon)には、以下のように書かれている。

f:id:fxrobot:20141222050131j:plain

『Ypsilon Scheme System(イプシロン・スキーム・システム)はプログラミング言語Schemeの最新規格R6RS*に準拠する実装です。インタープリタの特性を活かしてスピーディーでインタラクティブなアプリケーション/ユーザーライブラリーの開発を可能にします。またマルチコアCPU用に最適化した Mostly Concurrent Garbage Collection を実装することにより、極めて短いGC停止時間と並列実行によるパフォーマンスの向上を達成しています。』


Ypsilon にはその他、Factrial や 素数関係の計算もさせてみたが、いずれも高速だったよ。

【追伸】
この記事の投稿のあと、CLISP と MIT/GNU-Schme、SISC、Kawa でもテストをおこなった。CLISP はスタック不足で停止。スタックを増やそうとはしなかった。MIT/GNU-Scheme は 44秒、SISC は 45秒、Kawa は 1分40秒とともに高速だった(ただし、テスト中に DVD ソフトは起動していなかった)。

 

あたらしい7つの言語

言語好きの人なら「7つの言語 7つの世界」(原題:Seven Languages in Seven Weeks)を読んだことだろう。ここで出てきた7つの言語とは、Ruby、Io、PrologScalaErlangClojureHaskell の7つで、Io 以外はどれもすでに有名な言語だった。Io はこの本によって認知度が上がったように思う。
f:id:fxrobot:20141214021622j:plainつぎに出た本がこれ「Seven More Languages in Seven Weeks」。第2弾ってことだろう。まずは、ここで取りあげられている言語に注目だね。それはズバリこの7つだ。

Lua              http://www.lua.org/
Factor          http://factorcode.org/
Elixir            http://elixir-lang.org/
Elm              http://elm-lang.org/
Julia             http://julialang.org/
MiniKanren   http://minikanren.org/
Idris             http://www.idris-lang.org/

知ってる言語はあるかな。見慣れない言語が多そうだね。

Lua はお馴染みだろう。軽量の LL だ。シンプルな言語仕様とデータ構造で、ぼくの好みの言語だね。おっと、巨乳のジュリア(Julia)が居るじゃないか。Julia は数学のほうを向いた、オブジェクト指向で、関数型で、並列プログラミングを指向した豊満な言語だ。それが巨乳の所以でもある。

いや、ホント言うとね、Julia を Googleで検索したら「巨乳動画サイト」が出てきたのがその所以なんだ。検索するなら「Julia言語」でね。

さて、Factor というのは、スタック指向言語として有名な Forth を現代化したような言語のようだ。まだ詳細はわからない。

Elixir、Elm、Idris  はどれも関数型言語のようだ。いまどきを反映しているようだね。Elm はおもしろいよ。ウェブページでマリオを動かすデモをやってる。

f:id:fxrobot:20141214025049j:plain

ゲームだけではなく、Elm のプログラムでウェブページを作るということを考えているようなのだ。ぼくとしても興味深いところだ。

えっ、まだ残ってる MiniKanren ってなんだって。うーん、コンパクトな論理プログラミング言語といったところか。ぼく的には興味深くはあるがまだよくわかってはいないんだ。

こんかいの新たな7つの言語のうち、Julia と Factor には、とうぶんのあいだ取り組んでみようと思っている。Factor は、数論アルゴリズムの研究に使えないかとの期待からだ。

10 sq 5 - .

簡単なこれ説明してみようか。まず最初の 10 を箱に入れる。つぎにまた箱に上から sq(2乗する関数)を乗せる。すると箱のなかの 10 が2乗されて箱のなかの 10 と sq は 100 に変化する。つぎに箱のなかの 100 の上に 5 を乗せる。さらにその上に - を乗せると、100 と 5 と - が 95 に変わり、箱のなかには 95 だけが残る。つぎに箱のなかに . を入れて乗せると、箱のなかの 95 が取り出され出力エリアに表示される。このとき箱のなかは空っぽ。

さてさて、Julia はすでに前回登場したね。詳しくなったらまた記事を書きたいと思う。Factor についてもね。

じゃ。

 

パイパイと巨乳のジュリア

f:id:fxrobot:20141212190355p:plain

もし、きみがだね、マニアックな人間じゃないとして、生涯使えるプログラミング言語をひとつだけ教えてほしいというならば、ぼくは Python を勧めるだろう。

ところで、ぼくはあるプログラミング入門者に十進BASICを勧めたのだ。文系の人でプログラミング経験ゼロだと推測してのことだったが、ポケコンのプログラミング経験者だったことをあとになってわかった。

その彼はあれよあれよという間に十進BASIC(Full BASIC)に馴れていった。そして彼にはあるニーズが生まれた。それは、多倍長演算ができるコンパイラ言語だ。つまりスピードがほしい。それでまずぼくは Full BASIC と親和性のある FreeBasic を調べた。うん、できるできる。GMP が使えるじゃないか。

しかしなぁ、これじゃ C言語やってるのと同じじゃないか。だったら C のほうがいいよ。まさか彼もこんなプログラミングはしたくないだろう。

f:id:fxrobot:20141212223416j:plain
(↑ 説明略だがいろいろすごいぞ巨乳のジュリア ↑)

またところでだけど、ぼくはつい先日、Julia というプログラミング言語を見つけた。うん、こいつはまだ日本のみんなは知らないんじゃないかと、ぐるぐる in Japanese(Googleで日本語サイトを検索 ← 最初からそう言えよ)してみると、出てきたのは、アダルトビデオ、AV女優、巨乳動画などのサイト。

あっ、そっかと、Julia言語で再検索。そうしたら出てくる出てくる。ぼくは遅れたやつだったのだ。で、まぁ、気にせず、ぼくは Julia のドキュメント(英文)を読んだ。

そしたら、まぁ、欲張りな言語だこと。

小さな処理系を好むぼくには、このジュリアは巨乳過ぎるぞ。しかしそれでも数学のお供にジュリアの巨乳を弄くり回してやろうじゃないか。と、欲求不満気味のぼくは決めたのだった。

 で、話は戻って、彼のニーズにはどう応えたらいいだろう。

ぼくは Lua を思いついた。Lua は速いと聞いていたぞ。ぼくは Lua素数を吐き出させてみた。その結果は、上限数100万までの素数全出力が、8秒。上限数1千万だと、1分33秒だった。十分速いじゃないか。

Lua は難しいことさえしなければ、非常にシンプルで美しい。Full BASIC からの移行も抵抗がないだろう。しかし、コンパイラと比べると見劣りがする。LuaJIT でもその不満は解消できないようだ。

なにかないか。で、ぼくは PyPy という高速版 Python を見つけた。ぼくは遅れたやつなのだ。ぜんぜん知らなかったよ。早速ダウンロードして試した。

http://pypy.org/ f:id:fxrobot:20141212190437j:plainこんかいは Python 2.7 互換の PyPy 2.4.0 を選んだが、Python 3.2.5 互換の PyPy もあるので、好きなほうを選べばよい。

で、Lua とおなじように PyPy でも素数を吐き出させてみたよ。つぎのような結果だった。

上限数100万までの素数全部     →     2秒
上限数1000万までの素数全部   →    19秒
上限数1億までの素数全部         → 3分8秒

速いね。ぼくは満足したよ。ぼくはこんかいはじめて、パイパイを弄ったのだけど、気持ちよかったというか気分がよかった。下ネタはやめて。

で、Julia にも吐き出させてみた。PyPy には及ばなかったがこの速さはそうとうなものだね。

上限数100万までの素数全部     →       4秒
上限数1000万までの素数全部   →      32秒
上限数1億までの素数全部         → 4分24秒

さて、ぼくは彼に巨乳(Julia)を勧めてみたいとも思ったが、まだなんだかよくわからないものを勧めるわけにもいかず、そもそも彼は、やれ Ruby だ、やれパイパイだ巨乳だとあれこれ弄くるような不真面目な男ではないのである。

うん、そうだ。PyPy を勧めよう。Python ならば一生涯使える言語だからね。まじめな彼にはもってこいだと思う。

これも一種のコンパイラだしね。JIT(実行時コンパイラ)だけど。

【おまけ】
Python 3.3.2 で 3347670493571081 を素因数分解f:id:fxrobot:20141212200253j:plain

「PyPy 2.4.0 で 3347670493571081 を素因数分解f:id:fxrobot:20141212200311j:plain

こんなにちがうんだね。

うちの巨乳の Julia は、0.234438088 秒だったので素因数分解は PyPy よりも速かったね(黒い画面の画像に注目)。っていいたいけど、それは実装の問題だね。Julia のほうは組み込み関数だから。

 

爆速 QB64

f:id:fxrobot:20141204210825j:plain

それは、十進BASIChttp://hp.vector.co.jp/authors/VA008683/)を使って、上限数1千万までにある素数すべてを求めようとしたことから始まった。作った十進BASICのプログラムは最終的に以下のような感じ。

プログラムの名前は PNS20 と名付けた。どこにでもよくある内容のプログラムだが、この PNS20 の前身である PNS10 を作ってくれ切っ掛けをくれた仲間に感謝したい。

REM PNS20 in 十進BASIC
INPUT PROMPT "素数を求める上限整数を指定せよ:":n
PRINT
PRINT 2;
LET pn=1
FOR z=3 TO n STEP 2
   LET f=0
   LET s=INT(SQR(z))
   FOR p=3 TO s STEP 2
      IF MOD(z, p)=0 THEN
         LET f=1
         EXIT FOR
      END IF
   NEXT p
   IF f=0 THEN
      PRINT z;
      LET pn=pn+1
   END IF
NEXT z
PRINT
PRINT
PRINT "出力した素数の個数は"; pn ;"個です。"
END

このプログラムのなかで INT(SQR(z)) の INT() がなくてもよいことはわかっているがぼくの趣味で入れたままである。で、まずはこのプログラムを上限数100万で動かした。かかった時間は 10分58秒だった。

こういうプログラムというものはコンパイラ言語を使うものだということはわかっている。しかし、ぼくは続けて 1千万(10000000)を上限数に指定して動かしたのだ。なんと、10時間ほどもかかってしまった。時間は正確じゃないけど、まぁだいたい10時間だ。

ふつうはこれ以上はやらないところだが、ぼくは普通じゃなかった。上限数1億(100000000)に挑戦だ。ハハハ..、1週間動かしたよ。で、半分までもいかなかった。結果は以下のとおりだ。つまり、素数を 257万個ほど手に入れたのだ。暗黒通信団素数15万個書籍を販売中)など屁でもないぞ。

f:id:fxrobot:20141204203318j:plain

これで正気に戻ったぼくは、GFortran(ぐるぐるしてくれ)を使うことにした。プログラムはこんな感じ。なお、GFortran はMinGW 32bit版だ。言い忘れていたがぼくは Windows野郎で使用しているパソコンは Windows7 64bit版、メモリたくさんだ(ええかげんやな)。

! ***** FORTRAN 90 によるプログラム *****
program PNS20

integer :: n, pn, f, z, s, p
write(*,fmt='(A)',advance='no') "素数を求める上限整数を指定せよ:"
read *, n
print *,
write(*,fmt='(I10)', advance='no') 2
pn=1
do z= 3, n, 2
    f=0
    s=int(sqrt(real(z)))
    do p= 3, s, 2
        if (mod(z, p)==0) then
            f=1
            exit
        end if
    end do
    if (f==0) then
        write(*,fmt='(I10)', advance='no') z
        pn=pn+1
    end if
end do
print *,
print *,
print *, "出力した素数の個数は",pn,"個です。"
end program

十進BASIC版 PNS20 を見ながら10分で完成。動かしたぞぉ。で、ビックリ。上限数1千万が 13秒だ。上限数1億もやったよ。2分51秒だった。さすが Fortran というほかはない。

そのほか、QB64(QuickBASIC互換コンパイラ)や FreeBasic(QuickBASIC互換モード)や GCCMinGW 32bit版)などでもやってみたぞ。結果の一覧をお見せしよう。

f:id:fxrobot:20141204205323j:plain

なんと、素数を求めるまじん杯で QB64 が優勝に輝いたのだ。まぁ、時間は正確じゃないよ。目覚まし時計の秒針で計ったのだからね。

それでもだよ。QB64 のこの爆速ぶりを見よ!

えっ、QB64 なんて知らない?

そんなあなたのためにインストールから簡単な使い方までぼくが教えて進ぜよう。ぼくが記事に書くまで、まっててくれたまえ。ただしね、QB64 は開発中のソフトウェアであり、さらに日本語はまったく通らない。日本語のドキュメントもない。

しかしね、QB64 は QuickBASIC 4.5互換なのだ。そこのきみも使えるはずだよ。操作も簡単だ。で、QB64 で動かしたプログラムはこんな感じ。どれもこれも似たようなもの。

'***********************************
'*          PNS20 in QB64          *
'***********************************
DIM n  AS LONG
DIM pn AS LONG
DIM z  AS LONG
DIM s  AS LONG
DIM p  AS LONG
DIM f  AS INTEGER
'***********************************
INPUT "Pls input the upper limit number: ", n
PRINT
PRINT 2;
LET pn = 1
FOR z = 3 TO n STEP 2
    LET f = 0
    LET s = INT(SQR(z))
    FOR p = 3 TO s STEP 2
        IF z MOD p = 0 THEN
            LET f = 1
            EXIT FOR
        END IF
    NEXT p
    IF f = 0 THEN
        PRINT z;
        LET pn = pn + 1
    END IF
NEXT z
PRINT
PRINT
PRINT "The number of prime numbers is "; pn
END
'************************************

あと、おまけに FreeBasic(正確にいうと FBEdit)の画面でもどうぞ。

f:id:fxrobot:20141204211415j:plain

QB64 のプログラムとまったく同じ内容で動作した。正確にいうとコメントと表示メッセージだけは違うけど、本質的な部分は同一といっていい。

QuickBASIC互換って素敵だね。

ぼくはこの「QuickBASIC」という小さな仕様のプログラム言語が大好きなのだ。QuickBASIC の日本語書籍ならいまでも古本で簡単安価に手に入るだろう。それを読んで、FreeBasic の QuickBASIC 互換モードをガンガン使おう! 爆速がほしければ、QB64 を使ってみるとよい。

さて、FreeBasic は GCC 程度だけど、十分速い。日本語も通るし、そもそもが Unicode 対応だ。GUI(Window9)も充実している。日本語のドキュメントも十分だ。

また、QuickBASIC を知っている人なら、明日からでも FreeBasic で QuickBASIC のプログラムを動かすことができるだろう。

もし、爆速ゲームを作りたければ、QB64 があるじゃないか。ただね、グラフィックス性能はまだよく知らないから、ゲーム全体が爆速になるかどうかは希望的な話。

ゲームプログラミングが得意な人は試してみてはいかがだろうか。

 

じぇじぇじぇのJ言語

ぼくがはじめてJ言語を知ったのはいつだっだろうか。たしか DOSコンソールで動く時代だったと思う。で、ファーストコンタクトは、よくわからん、で終わりだった。

f:id:fxrobot:20141201124117j:plain

それから年月が流れ、いまごろようやくにしてドキュメントと読んでいる。本来ならば、あまり大きなことはいえない立場なのだ。

それにしては前回は大口を叩いたもんだな。まぁ、なにごとも遅くはないということだ。これからちゃんとやればよいだけのこと。

ところでぼくは言語好きだから、パソコン用の電卓として、いろんな言語を使ってきたのだが、これまでは SWI-Prolog がいちばん気に入っていた。うん、そう、それがいまは J言語に代わったのだ。J Term(画像)は、ぼくにピッタリの電卓環境であり、プログラミング言語環境なのだ。

f:id:fxrobot:20141201130919j:plain

J Term は、軽快に起動し、いつだって左上端に同じサイズで登場だ。起動位置やサイズはコンフィグファイルで設定できるのかも知れないが、..たぶん、いまのところはできないのだろう。我慢できなければ、AutoHotKey でやっつければいい。

J言語の言語仕様についてはドキュメントを読むことでかなりわかってきたと思うが、J言語の環境についてはまだわからないことも多いようだ。

さて、J Term からは Ctrl-M によって簡単に下の画像のようなエディタ(Edit)を呼び出すことができる。

f:id:fxrobot:20141201133528j:plain

J言語の環境はバージョンアップによって、気づかないうちにかなり整ってきたんだね。この Edit もそのうち頻繁に使うことになるだろう。

 ところで、Ruby で有名なMもと氏が『「NB.」から改行までがコメントです。 正気とは思えません。 』と曰っていました。また『正直に言わせてもらえば、J はとても読みにくい。 慣れればなんとかなるのでしょうか。』とも。

ぼくもね「1!:2 <'ファイル名'」(J Term の画像)というのなんかは、じぇじぇじぇとなったけど、天才の発想は凡人にはわからないということなのだろう。えっ、まじん氏が凡人なのはわかりますが、Mもと氏も凡人!?ですか。ええ、もちろん、それにはお応えしません。

ああ、そう、それでね、NB. はラテン語 Nota Bene(注目)の略だそうだ。ぼく的にはなんら # に劣るとは思わない。逆に J言語のコメントが # だったらガッカリだよ。それに FORTRAN や Full BASIC のように ! でもやだなぁ。やっぱり NB. がいいよ。

また、J言語が読みにくいというのはそのとおりだと思うけど、馴れればOKだよ。あとね、ぼくは記憶力がわるい上に秀才でもないけど、たぶん Ruby を覚えるよりはかなり楽に早く J言語の記号を覚えられたと思うよ。

しかし、それは、APL の基礎があるからかもしれない。だからぼくは、J言語を覚えたい人には、まずは APL の入門書を読むことをお勧めしたい。サラリーマンの人でも2週間くらいで、多めにみても1ヶ月で読み終え理解できると思う。

ついでに APL についていえば、プログラミング言語の素人の人にこそお勧めできる。ボタンを押せば APL が現れ、あとは APL の世界。コンパイルだリンクだって、なにそれ? For ループだ、While ループだって、バカじゃないのってことになる。

さて、最初から J言語のドキュメントを読むと頭が痛くなるのかも知れないね。それでも APL をスキップして J言語を覚えたい人のためになにかを書こうかとも思うけど、まずはぼく自身が J言語の経験をもっと積まないとね。

積んでからブログ書けって? うん、だけど、これって、いつものことじゃないか。:P

【おまけ】
APL の円関数: 普通は、○A、1○A、2○A、3○A だけ覚えればOKだよね。

f:id:fxrobot:20141201155839j:plain

 J言語もどうように円関数がある。1 o. A というように ○ を o(小文字オー)と .(ピリオド)で表す。上記以外にも 8 o. A ~ 12 o. A 、_8 o. A ~ _12 o. A などまで拡張されている。

これだって、J、J、J、だよね。

 

APLとJ言語あとR言語

こんかいは APL、J言語、R言語をひとまとめに考察してみたい。この3つの共通性とはなんだろう。ぼくは、これらは共に「配列指向言語」であると表現してみたい。ちょっとまえに R言語の人気が世界的に高まっているようだという記事を書いた。
f:id:fxrobot:20141127012258j:plain

R言語は統計分析専用のソフトウェアと見られがちだが、ぼくはR言語を強力な汎用プログラミング言語でもあると思う。

R言語をいったん汎用プログラミング言語と見てみると、APL との比較が必要になるだろう。ぼくは APL のほうが優れると見るが、現実には R言語のほうが使えるという局面も多いだろう。

ところで、APL はもっとも古い言語のひとつで、もっとも未来の言語のひとつであるともいえると思う。そして、ぼくは APL に残りの人生を掛けようと思っているのだ。でもね、念のために言っておくなら、BASICSchemeProlog などもぼくの趣味であり続けることに変わりはない。

APL のほか未来に通じる言語として有力なのは、HaskellErlangScala などではないかと思うが、これらは未来のある若者に任せたい。

では、J言語はどうだろう。ぼくにとって J言語は APL よりもさらに刺激的で魅力的な言語なのだ。 しかし、一般的な評価は高いとはいえない。変態的と言われることもあるようなのだ。でもそれはね、J言語の説明者(Evangelist)がいないからじゃないか。

f:id:fxrobot:20141130053220j:plain

現在の J言語利用者というのは、数学者ばかりのように思える。彼らは説明にはそれほど興味がないように思えるのだ。とはいっても、ぼくにはその実体の詳細はよく分かっていない。それでも、もっとよい説明があれば、評価を見直されるべき言語であると言うことができるのではないだろうか。

さて、J言語の基本はすべてが APL にある。だから、J言語を学びたい人はその前にまずは APL を学ぶとよいと思う。回り道に思われるかもしれないが、ぼくはそうではないと思う。APL の日本語書籍はいまでも手軽に手に入るので、まずは APL の入門書を読んでみるとよいだろう。

APL は特殊な記号を使うため、軽快なるパソコン利用者には敬遠されてきたと思う。しかし、Unicode の普及により APL の特殊記号の壁はなくなりつつある。あとは、日本語環境で動作するフリーの処理系が望まれるところで、これが敵えば APL 人気が爆発したとしても不思議はない。

ぐるぐる回っているが、つぎは R言語。実用的で強力な言語。そして妥協的。ぼく的にはウンザリするのだが、記述は C言語スタイルで、オブジェクト指向もある。

R のみ        → 要素数 → 2^31-1 → 2147483647            → 約21億個
bigmemory → 要素数 → 2^52    → 4503599627370496 → 約4500兆個
(要素数:ベクトル、行列、配列などの要素数

上を見てほしい。このとおり R言語は強力だ。 bigmemory というのは、R向けのパッケージで、なんと LGPL3ライセンスで提供される。その他 ff という類似パッケージがある(GPL2ライセンス)。

NARS2000(APL の処理系、フリー)だと以下のとおりのレベル。

NARS2000 → ι 314000
NARS2000 → 314000 ρ 10000
NARS2000 → 200000 ρ 1000000000000000000

こんかいは詳細を説明しないが、R言語に比べると実に頼りない。しかしそれは APL の本質とは関係ないことで、処理系の制限に他ならない。APL の言語思想が妥協的でないだけに現実世界においては逆にむしろ妥協的にならざるをえないということだろう。

最後に、最初に出てきた APLJR のロゴ。APL と J言語のぴんから兄弟に、アイドル歌手の R言語。これを抱える芸能事務所。そこのロゴだから、艶やかに R 辺りは赤系の色にしようと思ったが、そうすると全体のバランスが崩れる。R をグリーンに押さえたので、全体的に男の子系の雰囲気になった。R は目立ってはいけないのだ。

さあさあ、というわけで、APLJR ロゴの旗印の下、ぼくは現れるのだ。どこに?

至る所に。

 

上限数1万までの素数

このところぼくは整数論にハマっている。

まじん素数というものを考えて、そこにある法則性を探っているのだ。計算をいっぱいしている。まるでガウスにでもなった気分。ガウスもいっぱい計算したんだろうなぁ。でも、やっぱり計算が大変なので最近になって Excel を使い始めた。でね、いやぁーExcel とは便利なものだ。いままで手計算していた苦労が嘘のようだ。

で、こんかいは素数をプログラムで出力してみようと思った次第。使用する言語としては、UBASIC や十進BASICなどが思いつくところだが、こんかいは、こんご普及に一役買おうなじゃないかというほど入れ込みかけている APL を使うことにした。そのプログラムリストと出力結果は以下のとおりだ。(だいぶ下のほうだけど)

使った APL の処理系は NARS2000(http://www.nars2000.org/)だ。上限整数 R に1万を指定(素数の数にして 1229個)したところ3分ほど待たされた。つぎに R に10万を指定したところワークスペースが足りないとの仰せだ。ワークスペースを増やせるかどうかは現時点では不明。

こういう問題解決における APL のロジックはどこまでも人間サイドにあってコンピュータ側への妥協がない。もちろん内部処理上の苦労はあるだろうが、そんなこたぁ人間さまの知ったこっちゃない。こういう考えの人に APL はむいている。

量子コンピュータでも実現すれば、そしてメモリがさらに超巨大になれば、ええいっ、これでもやってみろ!と APL に打ち込めば、あっという間に100万個の素数を出力ってことになるかも知れない。そして、巨大素数が手軽に求まるようになると、素数を使ったセキュリティは崩壊か。まぁ、ぼくが生きている間は堅牢のままだろう。

で、まぁ、ぼくがいいたいことはこの APL のプログラムを見よ!ということだ。意味がわからんという人はこちらまで APL 入門 - 年金ロボットをめざして どうぞ。

 f:id:fxrobot:20141123114354j:plain

2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 107 109
       113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199 211 223 227
       229 233 239 241 251 257 263 269 271 277 281 283 293 307 311 313 317 331 337 347
       349 353 359 367 373 379 383 389 397 401 409 419 421 431 433 439 443 449 457 461
       463 467 479 487 491 499 503 509 521 523 541 547 557 563 569 571 577 587 593 599
       601 607 613 617 619 631 641 643 647 653 659 661 673 677 683 691 701 709 719 727
       733 739 743 751 757 761 769 773 787 797 809 811 821 823 827 829 839 853 857 859
       863 877 881 883 887 907 911 919 929 937 941 947 953 967 971 977 983 991 997 1009
       1013 1019 1021 1031 1033 1039 1049 1051 1061 1063 1069 1087 1091 1093 1097 1103
       1109 1117 1123 1129 1151 1153 1163 1171 1181 1187 1193 1201 1213 1217 1223 1229
       1231 1237 1249 1259 1277 1279 1283 1289 1291 1297 1301 1303 1307 1319 1321 1327
       1361 1367 1373 1381 1399 1409 1423 1427 1429 1433 1439 1447 1451 1453 1459 1471
       1481 1483 1487 1489 1493 1499 1511 1523 1531 1543 1549 1553 1559 1567 1571 1579
       1583 1597 1601 1607 1609 1613 1619 1621 1627 1637 1657 1663 1667 1669 1693 1697
       1699 1709 1721 1723 1733 1741 1747 1753 1759 1777 1783 1787 1789 1801 1811 1823
       1831 1847 1861 1867 1871 1873 1877 1879 1889 1901 1907 1913 1931 1933 1949 1951
       1973 1979 1987 1993 1997 1999 2003 2011 2017 2027 2029 2039 2053 2063 2069 2081
       2083 2087 2089 2099 2111 2113 2129 2131 2137 2141 2143 2153 2161 2179 2203 2207
       2213 2221 2237 2239 2243 2251 2267 2269 2273 2281 2287 2293 2297 2309 2311 2333
       2339 2341 2347 2351 2357 2371 2377 2381 2383 2389 2393 2399 2411 2417 2423 2437
       2441 2447 2459 2467 2473 2477 2503 2521 2531 2539 2543 2549 2551 2557 2579 2591
       2593 2609 2617 2621 2633 2647 2657 2659 2663 2671 2677 2683 2687 2689 2693 2699
       2707 2711 2713 2719 2729 2731 2741 2749 2753 2767 2777 2789 2791 2797 2801 2803
       2819 2833 2837 2843 2851 2857 2861 2879 2887 2897 2903 2909 2917 2927 2939 2953
       2957 2963 2969 2971 2999 3001 3011 3019 3023 3037 3041 3049 3061 3067 3079 3083
       3089 3109 3119 3121 3137 3163 3167 3169 3181 3187 3191 3203 3209 3217 3221 3229
       3251 3253 3257 3259 3271 3299 3301 3307 3313 3319 3323 3329 3331 3343 3347 3359
       3361 3371 3373 3389 3391 3407 3413 3433 3449 3457 3461 3463 3467 3469 3491 3499
       3511 3517 3527 3529 3533 3539 3541 3547 3557 3559 3571 3581 3583 3593 3607 3613
       3617 3623 3631 3637 3643 3659 3671 3673 3677 3691 3697 3701 3709 3719 3727 3733
       3739 3761 3767 3769 3779 3793 3797 3803 3821 3823 3833 3847 3851 3853 3863 3877
       3881 3889 3907 3911 3917 3919 3923 3929 3931 3943 3947 3967 3989 4001 4003 4007
       4013 4019 4021 4027 4049 4051 4057 4073 4079 4091 4093 4099 4111 4127 4129 4133
       4139 4153 4157 4159 4177 4201 4211 4217 4219 4229 4231 4241 4243 4253 4259 4261
       4271 4273 4283 4289 4297 4327 4337 4339 4349 4357 4363 4373 4391 4397 4409 4421
       4423 4441 4447 4451 4457 4463 4481 4483 4493 4507 4513 4517 4519 4523 4547 4549
       4561 4567 4583 4591 4597 4603 4621 4637 4639 4643 4649 4651 4657 4663 4673 4679
       4691 4703 4721 4723 4729 4733 4751 4759 4783 4787 4789 4793 4799 4801 4813 4817
       4831 4861 4871 4877 4889 4903 4909 4919 4931 4933 4937 4943 4951 4957 4967 4969
       4973 4987 4993 4999 5003 5009 5011 5021 5023 5039 5051 5059 5077 5081 5087 5099
       5101 5107 5113 5119 5147 5153 5167 5171 5179 5189 5197 5209 5227 5231 5233 5237
       5261 5273 5279 5281 5297 5303 5309 5323 5333 5347 5351 5381 5387 5393 5399 5407
       5413 5417 5419 5431 5437 5441 5443 5449 5471 5477 5479 5483 5501 5503 5507 5519
       5521 5527 5531 5557 5563 5569 5573 5581 5591 5623 5639 5641 5647 5651 5653 5657
       5659 5669 5683 5689 5693 5701 5711 5717 5737 5741 5743 5749 5779 5783 5791 5801
       5807 5813 5821 5827 5839 5843 5849 5851 5857 5861 5867 5869 5879 5881 5897 5903
       5923 5927 5939 5953 5981 5987 6007 6011 6029 6037 6043 6047 6053 6067 6073 6079
       6089 6091 6101 6113 6121 6131 6133 6143 6151 6163 6173 6197 6199 6203 6211 6217
       6221 6229 6247 6257 6263 6269 6271 6277 6287 6299 6301 6311 6317 6323 6329 6337
       6343 6353 6359 6361 6367 6373 6379 6389 6397 6421 6427 6449 6451 6469 6473 6481
       6491 6521 6529 6547 6551 6553 6563 6569 6571 6577 6581 6599 6607 6619 6637 6653
       6659 6661 6673 6679 6689 6691 6701 6703 6709 6719 6733 6737 6761 6763 6779 6781
       6791 6793 6803 6823 6827 6829 6833 6841 6857 6863 6869 6871 6883 6899 6907 6911
       6917 6947 6949 6959 6961 6967 6971 6977 6983 6991 6997 7001 7013 7019 7027 7039
       7043 7057 7069 7079 7103 7109 7121 7127 7129 7151 7159 7177 7187 7193 7207 7211
       7213 7219 7229 7237 7243 7247 7253 7283 7297 7307 7309 7321 7331 7333 7349 7351
       7369 7393 7411 7417 7433 7451 7457 7459 7477 7481 7487 7489 7499 7507 7517 7523
       7529 7537 7541 7547 7549 7559 7561 7573 7577 7583 7589 7591 7603 7607 7621 7639
       7643 7649 7669 7673 7681 7687 7691 7699 7703 7717 7723 7727 7741 7753 7757 7759
       7789 7793 7817 7823 7829 7841 7853 7867 7873 7877 7879 7883 7901 7907 7919 7927
       7933 7937 7949 7951 7963 7993 8009 8011 8017 8039 8053 8059 8069 8081 8087 8089
       8093 8101 8111 8117 8123 8147 8161 8167 8171 8179 8191 8209 8219 8221 8231 8233
       8237 8243 8263 8269 8273 8287 8291 8293 8297 8311 8317 8329 8353 8363 8369 8377
       8387 8389 8419 8423 8429 8431 8443 8447 8461 8467 8501 8513 8521 8527 8537 8539
       8543 8563 8573 8581 8597 8599 8609 8623 8627 8629 8641 8647 8663 8669 8677 8681
       8689 8693 8699 8707 8713 8719 8731 8737 8741 8747 8753 8761 8779 8783 8803 8807
       8819 8821 8831 8837 8839 8849 8861 8863 8867 8887 8893 8923 8929 8933 8941 8951
       8963 8969 8971 8999 9001 9007 9011 9013 9029 9041 9043 9049 9059 9067 9091 9103
       9109 9127 9133 9137 9151 9157 9161 9173 9181 9187 9199 9203 9209 9221 9227 9239
       9241 9257 9277 9281 9283 9293 9311 9319 9323 9337 9341 9343 9349 9371 9377 9391
       9397 9403 9413 9419 9421 9431 9433 9437 9439 9461 9463 9467 9473 9479 9491 9497
       9511 9521 9533 9539 9547 9551 9587 9601 9613 9619 9623 9629 9631 9643 9649 9661
       9677 9679 9689 9697 9719 9721 9733 9739 9743 9749 9767 9769 9781 9787 9791 9803
       9811 9817 9829 9833 9839 9851 9857 9859 9871 9883 9887 9901 9907 9923 9929 9931
       9941 9949 9967 9973

R言語

R言語の人気が世界的にのびてきているようなのだ。この点についてはあとで紹介したい。さて、ぼくはR言語を昔から知ってはいたが使ったことはなかった。それでこんかい、ドットインストールの動画講座(http://dotinstall.com/lessons/basic_r)全13回を観た。総時間は30分ほどだろうか。概要を理解できたと思う。

あとはネット上に数あるPDFを参考にすればよさそうだ。これ「初心者用R言語講座」(http://chianti.ucsd.edu/~rsaito/ENTRY1/WEB_RS3/PDF/JPN/Texts/R_Stats2.pdf)など最初の最初における学習によさそうに思う。R言語自体については専門書籍の購入は不要だろう。

R言語のコンソール画面 - http://www.r-project.org/f:id:fxrobot:20141122035953j:plain

ついでに R言語をダウンロードしてインストールした(うえの画像)。Windows のアプリとしてみた場合、そのインターフェースの完成度が高いとはいえない。まぁ、それはいいだろう。R言語の本質には関係ない。

無料でこんな便利なものが使えるのだから人気なのもわからないではないが、以下の「TIOBE プログラミング言語 人気ランキング 2014年11月」でわかるように14位の Rubyを押さえて12位なのには驚いた。

【 TIOBE プログラミング言語 人気ランキング 2014年11月 】
http://www.tiobe.com/index.php/content/paperinfo/tpci/index.htmlf:id:fxrobot:20141122040324j:plain

R言語は統計分析用ソフトとのことだ。実際、統計分析専用の機能を備えているようだ。しかし、R言語は十分に汎用言語といえると思う。もちろん、そうはいっても、C言語のようにコンパイルして、どの言語で作ったのかさえわからないような商用アプリを作れるというわけではない。ぼくは機能としての汎用性をいったのだ。

それにしてもR言語が12位なのかぁ。ぼくの場合をいえば、R言語よりも APLを使いたい。APLのほうが、ずっと優れていると思うのだが、R言語は素朴でなのである。だれにも受け入れやすい仕様だと思う。それが強みになっていると思うのだ。

APLは特殊な記号を使うので、その時点で拒否反応が出てしまいそうだ。それに日本語に対応した無料版の決定的な処理系がない。それにしても素朴であるということは大衆に向けてはかなりの強みになる。それをR言語は証明しているともいえそうだ。

R言語はマーケティング部門などに導入すれば、その当日から役にたちそうだ。また、統計解析と関係なく個人で使ってもデータ管理に役立ちそうに思う。まずは公式サイト(http://www.r-project.org/)からダウンロードしてインストールしてみよう。そして最初に紹介した「初心者用R言語講座」を読めば、すぐに使えるようになるはずだ。

いやまて、R言語が使えるようになった人には、APLのよさが理解できるようになるかも知れない。うーん、ぼくにはAPLを普及させたいというわけのわからない欲求が湧いてきたぞ。もし、その思いが継続できたなら、APLの普及に一役買いたい。

それより、年金ロボット作れって。あー、そう、おっしゃるとおり。

 

J 言語事始め

久しぶりのブログだ。いったいぼくはどんなキャラだったのか。そこから思い出す必要がありそうだ(笑)。で、こんかいはプログラミング言語の話題。

みなさんは J 言語を知っているだろうか。APL の開発者アイバーソン氏が開発したプログラミング言語だ。APL については過去 6件をほど記事を書いているので、参照してほしい。(http://fxrobot.hatenablog.com/archive/category/APL

【 Jsoftware - http://jsoftware.com/f:id:fxrobot:20141116030811j:plain

じつは、このたびぼくは、数論研究用のプログラミング言語を検討したのだ。条件は多倍長整数演算が可能なこと。そんなのライブラリ次第じゃないかとかいわれそうだが、ぼくはソフトウェア開発がしたいわけじゃない。手軽にいきたいのだ。

で、多倍長整数演算は例によって Pythonが優れているということだ。うん、もちろん Pythonで不満はないところだ。しかし、言語好きのぼくはどうもひと捻りしてしまう。HaskellErlang かスーパーマンかってことになる。

ほんとうなら LispScheme が妥当だろう(「素数夜曲」http://www.press.tokai.ac.jp/bookdetail.jsp?isbn_code=ISBN978-4-486-01924-4 を思いだそう)。Prolog も手駒にある。

まぁ、なんだかんだいろいろあって、ぼくは J 言語を学ぶことにしたのだ。あたらしい機会があればあたらしい言語を学ぶ。それがぼく流儀だ。で、学ぼうと思ったら J 言語の評判が気になった。J 言語を学び始めたので、J 言語の評判が気になった。で、ウェブをぐるぐる。
『「空前絶後、他の追従を許さない難解プログラミング言語」と評判の J 言語 ..』(http://d.hatena.ne.jp/m-hiyama/20140111/1389428141)とのことだ。

しかし、それは言い過ぎで、ぼくはそんなふうには思わない。画像を見てほしい。J 言語の対話環境だ。簡単なデモを打ち込んでみた。見ただけでどんな言語かわかるんじゃないだろうか。えっ、わからない。

じゃぁね、J 言語のカテゴリを作ったから、こんご、入門の記事を学びながら書いていこうと思うので、みなさんもそれで学んでみたらどうだろう。しかし、ちゃんと書くかなぁ。心配もある。というわけで、ご意見ご要望があればコメントください。しかしね、ぼく自身もこれから学ぶのだということをお忘れなく。

いっしょに学ぼうぜぇ。

 

世界は悪であふれている

今日は長崎に原爆が投下された日。テレビを観たら、老女が「(世界中)みんな仲良く」と涙ながらに言っていた。典型的な善良なる日本の女性だろう。ぼくにもその老女の心境はよく理解できる。世界中の皆が仲良くできれば素晴らしいことだ。ただし、世界中の人々が無条件に仲良くできるなんてありえないこと。

それでも老女の願いには誰しもが賛同するだろう。でもね、老女には責任能力がないのである。老女は知的には弱者なのだ。でも、ぼくは知的弱者をバカにするつもりはない。善良に普通に生きることをぼくは尊いことだと思っている。

f:id:fxrobot:20140809141924j:plain

次に長崎市長が出てきて、集団的自衛権についての心配と、いつものきれい事を述べていた。この市長の顔を眺めながら、本気なのだろうか、あるいは票のためだろうかと外見からの人物分析をしてみた。

この人、ぼくちゃんといった顔つきだ。うーん、こりゃどうやら本気なんじゃないだろうか。だとしたら、大の大人がね、信じられん。これこそ狂っている。

ぼくは心配なんだ。日本が三度目の核の被害に遭わないかがね。こんな状態じゃ、日本こそが世界の中で、現代における核被害国となる最有力候補なんじゃないだろうか。

確かに今の時代に核など使えるものだろうか、使う国がありうるのか!?特亜(支那南北朝鮮)には、その可能性があるかもしれない。実際、支那軍部の立場のある者が日本に核ミサイルを撃ち込むと表明しているじゃないか。

さて、特亜が核を使うのを躊躇うときはどういうときなのだろうか。核を使用すれば国際外交上立場が非常に悪くなる。もちろんそうだろうが、核を使うか使わないかの状況ではもうそんなことは気にしていられない。

特亜が核ミサイルを使うのを躊躇うとすれば、核を打ち返される心配があるときだけだろう。やつらは実に臆病なのだ。えっ、日本は米国の「核の傘」に守られてるじゃないかだって? そんな考え方が成り立つわけがないじゃないか! それこそ絶対ありえないことだろう。どういうおつむで考えたらそんな期待が持てるというのか。

さて、核を世界からなくすことを目指すことは、よいことだと思うよ。しかし、考えがそれしかないとしたらお粗末すぎる。そもそもね、核を持たない(持てない)国が、世界の核保有国から核を取りあげるなんてできるはずがないだろう。世界は各国の力関係で動いているのだ。核もない弱い国に世界を動かすことはできない。

日本人は善良な人が多い。だからこそ、お花畑になりやすいのだろう。ぼくも善良なることは大切なことだと思うよ。ぼくは善良な人々を愛する。しかし「世界は悪であふれている」んだ。平和を愛し、平和を望み、平和を叫べば、平和を保てる。そうだったらぼくもそうしたいが、現実は正反対と言ってもいい。

平和を愛し、平和を望み、平和を叫び、戦争から目を背ければ、それはむしろ、戦争を引き寄せてしまうのだ。「責任を伴わない平和主義」は侵略や戦争という悲惨な状況を生みだすのだ。自分だけが戦争を嫌いだと思っちゃいけない。ぼくもそうだし、誰もが皆戦争なんて嫌いなんだ。

どうしたら、その嫌いな戦争を避けられるのか。それを真剣に考えなければならない。世界は日本人のように善良でお花畑な人たちばかりじゃないんだ。世界は悪であふれている。誰もが現実を知り、誰もが平和に責任を持たなければならない。

きれい事しか言わない人間が戦争を引き寄せるのである。

 

 

TIOBE プログラミング言語 人気ランキング 2014年7月

このブログでは恒例となった TIOBE プログラミング言語 人気ランキングの7月版だ。断っておくが、ぼくは TIOBE の回し者って分けじゃないよ。まぁ、なんだね、ここでわざわざ取りあげなくても TIOBE のサイトを見ればいいだけの話で、それに TIOBE のサイトの翻訳をするわけでもないしね。

http://www.tiobe.com/index.php/content/paperinfo/tpci/index.htmlf:id:fxrobot:20140730183307j:plain

さあ、下は1位から20位までのランキングだ。気になるのは Ruby のランキングが下がっていることだ。下がり続けていると言ってもいいかな。実を言うとね、ぼくはこのことを予測していたんだ。といっても、結果を見てから言っているから、インチキ占い師と同類と言われても文句は言えない。

f:id:fxrobot:20140730183316j:plain

その他だと F# の躍進が凄いね。なぜ Scala じゃないんだろう。Microsoft の強さということか。

あと、ActionScript も大幅アップだ。ウェブにおける Flash によるユーザーインターフェースはやがてなくなるだろうというのが、かなり昔からのぼくの予言だったし、そもそもかなり嫌いだったんだ。

アニメーションをやりたいというのなら分かるけど、ユーザーインターフェースは辞めてくれ、迷惑なだけだと一人毒ついていた。で、結局薬局、ぼくの希望通りになった。しかし、Flash 自体は別の何かで有望な立場になるはずだとも思っていたのだ。

それはなんだ!? うん、動画じゃないだろうか。まぁ、あまり根拠があるわけじゃない。で、どういうわけだか、ActionScript の大躍進となっている。

あと一つ。VisualBasic は強いね。5位だって! これ、他の Basic も含まれてるってことか。まぁ、それにしてもなくなるどころか強くなるばかりの VisualBasic。日本の言語ユー-ザーも心置きなく VB6 を使おうじゃないか!

 

 

聖職の碑

思えば、ぼくは若い頃から数多くの映画を観てきた。今回はそのような数々の映画のなかから思い出に残る一作を紹介したい。
f:id:fxrobot:20140707193544j:plain

『「聖職の碑」(せいしょくのいしぶみ)は、中央アルプス木曽駒ヶ岳における山岳遭難事故を題材とした新田次郎の山岳小説および、それを原作として1978年に鶴田浩二主演で東宝から映画化された。

1913年(大正2年)8月26日に長野県中箕輪高等小学校(現・同県上伊那郡箕輪町立箕輪中学校)の集団宿泊的行事として実施された木曽駒ヶ岳集団登山における気象遭難事故の実話に基づき極限状態での師弟愛を描き、「生きること」「愛すること」の意味を問いかけた。

主な出演者:鶴田浩二岩下志麻三浦友和田中健、中井貴惠、北大路欣也地井武男大竹しのぶ』(Wikipedia

「聖職の碑」は、ぼくが二十代の頃に観た映画だ。多分、映画館でリアルタイムに観たと思うが記憶が定かではない。ストーリーもよく覚えていないのだ。確か、数十名の学童が山で遭難してしまう話であったという記憶だ。

その他、ただ一つだけハッキリと記憶にあるのは、遭難の話を聞いた校長の妻が「覚悟はできています。生徒が一人でも亡くなればあの人は生きて帰ることはありません」と、きっぱり言ったこと。それが明治の日本人の気骨であった。その場面だけが、今日までぼくの記憶に残り続けてきた。

二十代でこの映画を観たぼくは、責任ある立場でこのような状況に置かれたら、自分もこうありたいと思ったものだ。人間の生きる死ぬは時間的にはどうせ僅かな違いなのだから、死ぬときは誇りある死に方がしたいと、この映画を観た当時の若いぼくは確信したのだった。

f:id:fxrobot:20140708135115j:plain

そして、現代の韓国のセウォル号の沈没事件。多くの高校生を船内に残して、自分だけ一番に逃げ出した船長(左画像)。こんな卑しく生き残って平気なのか、恥というものはないのだろうか。

で、まぁ、この映画を一度目に観たときからおそらくは、30年以上経ったであろう今、もう一度観たいと思う。実は、つい先ほど映画のことを思い出して、題名がなんであったかも覚えておらず、グーグルで「学童 遭難 映画」で検索して、分かったという次第だ。

今度、TSUTAYAに行ったら借りようかと思う。今のぼくが観たらどうなんだろうと、そういう意味でも少し楽しみだね。

タイ映画

最近ぼくはタイの映画をよく観る。アクション映画の「トム・ヤン・クン」や「マッハ!!!!!!!!」は有名だね。これもシリーズほぼ全作を観た。チョコレート・ファイター(原題:ช็อคโกแลต、英題:Chocolate、2008年のタイ映画)もまだ観ていないが観たいと思っているアクションばっかしだって? いやね、むしろ、これから紹介する2作品の方がぼくの好みなのだ。

f:id:fxrobot:20140701202311j:plain

『「わすれな歌」(原題「มนต์รักทรานซิสเตอร์(MON-RAK TRANSISTOR)」、英題「TRANSISTOR LOVE STORY」)は、2001年にタイで作られた映画。結婚してすぐ、徴兵により離れ離れになってしまった主人公ペンとサダウの物語。サダウへの思いを込めたペンの切ない歌とともにコミカルなストーリーが展開する。』(Wikipedia

まずぼくは、この DVDのパッケージに惹かれたんだ。穏やかな色彩の自然のなかで小船の上で微笑むサダム。面白い構図だ。このパッケージの構図を見るだけで、本編の映像が構図に拘ったものであろうことが想像できる。

ベトナム映画もそうだけど、タイ映画は映像における色使いを大切にしているようだ。タイ映画の場合はそれに加え、音楽が重要な役割を成す。

もっとも、今回紹介する2つの映画は、どちらも音楽そのものがテーマでもある。「わすれな歌」はペンが歌手を目指すというストーリーで、「風の前奏曲」は、タイの伝統楽器ラナートの奏者の物語だ。

わすれな歌の映像は、タイの原風景を思わせるものだが、古い人間のぼくにとっては、日本の原風景を思い起こさせるものでもある。わすれな歌は日本のかつての素朴な時代を感じさせてくれた。以前の投稿で紹介したベトナム映画の場合は、それに加え、タオイスティックを強く感じさせる。

f:id:fxrobot:20140701202322j:plain

『「風の前奏曲」(原題「โหมโรง」、英題「The Overture」)は、2004年にタイで作られた映画。伝統芸能が統制されていた第2次世界大戦下のタイで、タイ式木琴“ラナート”の奏者として生きた、ソーン・シラパバンレーン師の生涯を基に描いた感動作。若き日のソーン師を演じたのは、妻夫木聡主演の日本映画「春の雪」にも出演している美形スター、アヌチット・サパンポン。純粋に音楽を愛する師の生き方と繊細なラナートの音色に心を奪われる。本国タイでは伝統楽器を習う若者が急増するなどの社会現象を起こした傑作。
【あらすじ】バンコク郊外のアンパワーで生まれたソーン(アヌチット・サパンポン)は、伝統音楽団の師匠である父の下、楽器“ラナート”の名人として成長するが、ある競演会でライバルのクンイン(ナロンリット・トーサガー)に完璧に打ち負かされてしまう。』(YAHOO!映画より)
映画のなかのラナートによる競演シーンの演出がちょっと子供っぽくも感じるが、まぁ、それは映画の娯楽性ということで大目にみるとすれば、全体として迫力あるものに仕上がっていると思う。

また、タイ人のプライドというものが随所に見られ、そういった面でも見応えのある映画だったと思う。ぼくはタイ映画を今後益々注目したいと思う。

実は今回の2作品は、レンタルではなくパッケージを購入したのだ。ぼくにとってはタイ語の教材としての役割があるためだ。今後のいつかの日からか、何度も何度も鑑賞することになるだろう。今回は、まずは一回観た感想を簡単に書こうと思った次第だ。

 

ベトナム映画

ベトナム語を学び始めたこともあり、最近、立て続けにベトナム映画を観た。

f:id:fxrobot:20140612000831j:plain

青いパパイヤの香り」と「夏至」の2本だ。どちらもベトナムとフランスによる共同制作だ。

どちらの映画もひとことで言うなら「タオイスティック」ということだ。ぼくも歳なのだろうか、最近はこういう映画が好みになった。

以前、フランス映画「画家と庭師とカンパーニュ」を紹介したが、この映画もぼくは好きなんだ。決してドラマチックってわけじゃないけどね。淡々とした日常が描かれている映画だ。

例によって映画のストーリーなど紹介しない。せめて Wikipedia でも参照しておくことにしよう。

【『青いパパイヤの香り』(あおいぱぱいやのかおり、ベトナム語題: Mùi đu đủ xanh / 味𣛦𣛭青, 仏語題: L'odeur de la papaye verte, 英題: The Scent of Green Papaya)は、1951年のサイゴンを舞台とした、ベトナム・フランス共同制作の映画。トラン・アン・ユン監督のデビュー作で、カンヌ国際映画祭カメラ・ドール(新人監督賞)・セザール賞新人監督賞を受賞したほか、アカデミー外国語映画賞にもノミネートされた。】

1994年8月13日公開の映画だ。かなり古い映画だね。

f:id:fxrobot:20140612000843j:plain

一方「夏至」は、公開日 2001年7月14日。こちらも Wikipedia から。

【『夏至』(げし、ベトナム語題: Mùa hè chiều thẳng đứng, フランス語題: À la verticale de l'été, 英題: The Vertical Ray of the Sun)は、ハノイハロン湾を舞台とした、ベトナム・フランス共同制作の映画。色彩美あふれる映像に特徴がある。様々な人間関係の中での心の機微が、一家族の中の人物を通して淡々とした語り口で描かれる。2000年5月18日、カンヌ国際映画祭で上映。】

こちらも参照で恐縮だが、アマゾンのレビューの一つを紹介しよう。

【小鳥が歌うようなべトナム語の響きといい、青と緑を基調とした美しすぎる映像といい、夢見るように眺めるだけで至福の映画です。
私にとっては音楽がとても印象的でした。大好きなルー・リードの「コニー・アイランド・ベイビー」やアラブ・ストラップなんかのスロウ・ナンバーをこんな風に使うなんて!!
でも、最もすばらしいのはエンディング・テーマ。ベトナムの国民的な作詞・作曲家のチン・コン・ソンの曲ですが、あまりにも美しすぎて切なくなります。歌詞もいいです。サウンド・トラックもオススメ!
私個人的には、これを見たあとウォン・カーウァイの「花様年華」を見ると青・緑と赤の美しいコントラストでアジアの官能満喫です。】

情熱的なコメントだね。書いたのは女性だろうか。ぼくも最後に流れた曲は大好きだよ。それとね、コメントのなかの「小鳥が歌うようなべトナム語の響き」という台詞がぼくは気に入ったんだ。ぼくはフランス語とベトナム語に独学で取り組んでいるが、どちらもその音に惹かれたのだろうと思う。

f:id:fxrobot:20140612004337j:plain

ところで、上の画像の DVD(新品)は最近オークションで落札したものだ。落札価格は1500円だった。多分現地だと数百円なんだろう。言うまでもないが「The Scent of Green Papaya」というのは「青いパパイヤの香り」の英題だ。

音声:ベトナム語タイ語を選択。
字幕:英語、タイ語、あるいは字幕なしを選択。

そして、リージョンコードはフリーだ。今後、英語の字幕で何度も繰り返し観ることになるだろう。それはもちろん、ベトナム語が学習の一貫としてのことだ。

言い忘れていたが「夏至」はまるで絵画を見るような美しい映画だ。音楽も素晴らしい。とくに大人の女性ならきっと好きになると思うよ。

お勧めだよ。