Monday, December 04, 2017

Macで縦書きの文章を作る

時としてこういう不条理な案件が発生するのです。
Microsoft Wordで縦書きの文章を作って、持って来い
うちにはMacしかないので、考えこんでしまいます。 Pagesは縦書きがダメっぽい。

OpenOfficeで解決することにしました。書式、 ページ、 ページ、 文字の方向、 右から左「縦書き」、で縦文書になります。

出力は普通に、名前を付けて保存、形式の選択でMS Wordにします。

多分、これでいける。

Friday, October 06, 2017

横浜トリエンナーレ

3年にいっぺんなので前回行ったのは12年前だったか15年前だと思う。おそらく15年まえか。

横浜美術館と赤レンガ倉庫に分かれ展示があったが、赤レンガ倉庫の2階の展示、アイスランドのRagnar Kjartanssonの "The visitors" に心ひかれた。9人のミュージシャンのセッションを撮影したもの。1時間のビデオ。すでに世界のあちこちで公開されたことがあるようで、nytimesの記事やブログが見つかる。YouTubeに作者のインタビューがある。

歌詞はこちらからいただいた。
 A pink rose, in the glittery frost, a diamond heart, and the orange red fire. Once again I fall into my feminine ways. You protect the world from me, as if I’m the only one who’s cruel, you have taken me to the bitter end. There are stars exploding around you, and there’s nothing, nothing you can do. Once again I fall into my feminine ways.

Friday, March 03, 2017

Haskellのプログラミングで感心した話

プログラミングの演習みたいなものです。以下のような数字の山があると思ってください。一番上の3からスタートして、一個下の段の二つの数字(7,4)をたどり、さらに7からは(2,4)のいずれか、4からは(4,6)のいずれかを通り、一番下の段にたどり着いた時、その経路のうち数字の和が最大となるものを求めよ。


この図は4段のものですが、段数Nに対して、経路の選択は$2^N$あるので、総当たりするのは大変だね、ということで、以下のような作戦で解きましょうと教わります。


右の山は3段目までをやったところですが、2段目は(7+3, 4+3)が(10,7)と計算してあり、3段目にきたところで、真ん中で選択肢があって$4+10, 4+7$のうち、結果の$14, 11$の大きい方を選んで14と決めてしまう。両端の12,13に選択肢はないので足した結果を書くのみです。このようにして順々に計算してゆけば、各点の値を決めてゆくだけなのでオーダとしては$N^2$となって、$2^N$に比べて大きく改善、というわけです。

というのがこの話の前提なのですが、私が自分はダメだなあと思うのは、このことをこんな風に書いてしまうのですね。



sが結果が入るところで、xに数字の山が入っています。間違ってはいないのですが、何が格好悪いかと言って、配列脳なんですよね。インデックスk,jで山の数字の場所を指定してるところです。C言語のプログラムではないので、リストが使えるわけで、もっとリストを使おうよ。

改善の方法として、リストであることを利用して以下のように計算します。2段目から3段目に行くところで、2段目の(10,7)に仮の0を前後に加え(10,7,0)あるいは(0,10,7)と、3段目の(2,4,6)の和を計算します。

その結果が(12,11,6), (2,14,13)となり、項ごとの最大値を計算すると(12,14,13)となる。前の結果と同じです。

Pythonのままやってもいいのですが、この辺からHaskellでやってみましょう。数字の山は[[3],[7,4],[2,4,6],[8,5,9,3]]で与えられているとします。


これがプログラムの全体です。うん。一行。簡潔。

++はリストの連結で、zipWithは二つのリストを並べて頭から順々に関数に食わせる(この場合は+なので足し算)。\はラムダ式の開始で、この場合は引数a, bに対する処理。foldl1はリストの左から順にやって行くpythonでのreduce処理に相当するものです。結果は一番下の数字それぞれに相当する値が出てくるので、そのうち一番大きいものを選ベば答えになります。



これで終わり、と言いたいところですが、まだもうちょっとあります。上のやり方で、0を足したりしているところが格好悪かった。

そこで今度は数字の山を下から見てみようというわけです。

左の図のように、一番下の(8,5,9,3)の尻尾と頭をそれぞれ一個削った(8,5,9), (5,9,3)の項ごとの最大値を(8,9,9)と計算し、これを一段上の(2,4,6)に足す。その結果が(10,13,15)、同じことを繰り返して一番上までたどり着いたらおしまいです。

この方針で書いたのが以下です。



[0]を足すところがなくなり、さらにスッキリしたというわけです。initは尻尾を一個切るもの。tailは頭を一個切る処理です。foldr1はリストの右から(つまり山の下の方から)やるという意味です。

この簡潔さがすごいと思った次第。





Sunday, February 19, 2017

アナログでローテクなアレ

あの名前って何だろう、と時々気になる。アレ。

1. 気送管

Wikipedia

昔のオフィスで、別の階に書類を送るために考えられたもの。茶筒ほどの大きさの容器に書類を丸めて入れ、壁にあるパイプの蓋を開け、容器を投入すると、しかるべき場所に届く。

「未来世紀ブラジル」という映画では机の横にあるパイプから次々に仕事が送られてくる情景が登場する。

ちなみに私の世代の人でも仕事で使ったことがある人はほとんどいないと思う。しかし、うちの近所の「家具の大正堂」では今でも使っている。ということは今でも販売・メンテナンスが行われているということか。

こういうのをGoogle検索で見つけるのはなかなか根気が必要。

いうなれば、コンピュータの世界では「茶筒ほどの容器」がパケットであって、それがネットワークというパイプで送られているわけだが、PDFがパケットの内容であったものが、合理化され、肝心なデータだけで良いということで、JSONになり、などと進化しているというわけ。

英語ではPneumatic tubeというらしい。


2. 伝声管

Wikipedia

操縦室の船長がラッパに向かって司令を叫ぶと、管を通じて機関室で聞こえるアレ。実物は見たことがない。

英語ではSpeaking tubeっていうのか。いいなあ。ちょっと感激。




Saturday, January 07, 2017

「豊穣の海」の「昴」の黒子について

学生の頃、三島由紀夫の豊穣の海4部作を読んで、内容以前に気になったことがありました。この物語は主人公の松枝清顕の転生が主題になっていますが、転生した人物の脇腹にある「昴(スバル)のような3つの黒子(ホクロ)」がカギとなっています。

気になったのは「スバル」で、スバルってのはこれです。プレアデス星団です。


3つではないのです。ちょうど今の季節、夜中に天頂付近に見えていると思いますが、もやっとした塊に見えます。

3つの星、ということだと、オリオン座の三つ星のことじゃないかなあと思うのですね。オリオンのベルトの位置の3つの星です。


スバルの場所はオリオンの右斜め上あたり。

無粋なことのようですが、物語の中で「昴」は何度も出てくる大事なことで、学生時分の私はこのことが非常に気になっていました。

その後、もう25年も前のことですがアメリカにいた頃、地元の日本語誌に、日本文学を英語で紹介されている翻訳家の方が、日米の編集者のチェックの仕方の違いを書かれていました。アメリカの編集者の権限は大きく、誤りやわかりづらい点を作家に指摘してくる、翻訳についても例外でなく、翻訳のみならず原作にさかのぼる指摘があって翻訳者としては困ることがある、とのことでした。例として三島由紀夫の小説(どの本だったかは失念)が挙がっていました。一方、日本では大作家の作品に編集者が口を挟むことはないので、結果として全責任は作家にあることになる、という話です。

この記事を読んでこの翻訳家の方に、スバルについて御存知ですか、という内容の手紙を書いたところ丁寧な返事を貰いました。翻訳家の方から別の文学者の方に照会してくださり、その方の手紙のコピーが同封されていました。それによると「土屋氏が指摘の箇所は、私も前々から気になっていたところです。.... 編集者がチェックし、勇気をもって作家に注意を促すべき事柄だったのではないでしょうか」とのことでした。ということで私の気は済んだのです。

実家で片付けをしていたら、この手紙が出てきたので、ブログを書きました。

最近この翻訳家の方がJapan Timesに記事を書かれているのを見つけました。御健在なようですね。

Saturday, December 10, 2016

平均寿命の国際比較

平均寿命というものが、個々人にとってどういう意味があるのかははっきりしないですが、平均寿命の国際比較(厚生労働省)というのがあります。

ニュースでは「日本が一位」「長寿日本」という報道の仕方をするので、なんとなく日本の医療のお陰かなと思っているのです。上の厚生省のデータを見ると、確かに日本は順序の上で一位が続いているのですが、実際の意味はあるんでしょうか。

例えば、男の平均は80歳程度なわけですが、自分がどうかというと、70で死ぬかもしれないし、90まで生きるかもしれないと思う。少なくとも±5歳くらいの誤差というか幅があるように感じますね。

そこで他の国を見ると、先進国、少なくともヨーロッパとは大差ないじゃないですか。どうしたニッポン。だいたいが男の場合70後半。誤差の範囲ですよね。まあロシアは低そうですね。不摂生だからでしょうか。アメリカも少し低いようです。

ヨーロッパのある国では、病院が混雑していて、救急車で運ばれないかぎりお医者さんに見てもらえないだの、待合室で待っている間に死んだだのと悪口を聞きますが、その国の寿命も特に低くないですね。不思議です。イギリスの話として聞きましたが、ブリティッシュジョークなのかな。

もう一つは、寿命ってのは人種と関係ないように思えますね。体の大きさや肌の色は違うのに、寿命ってのは人間の仕組みが持ってる根源的なものなのですかね。


Saturday, August 13, 2016

イタリア

下の子供と奥さんが先に出発して、ナポリ、ミラノなどに行きました。私は一週間遅れで参加し、San Gimignano、Siena、Firenze、ローマに行きました。ちょうど上の子が夏休みでCambridgeに語学留学していて、帰りにローマで我々に合流しました。そこから8年まえに訪れたScauriと、今回初めてMontelibrettiに行き、それぞれ以前我が家にホームステイした人達と再会しました。




Siena


Scauri 


Montelibretti 

San Gimigniano

Saturday, April 16, 2016

「原子力政策研究会 100時間の極秘音源」

知らなかったですね。こういう経緯で日本で原子力が始まったとは。無知とは愚かなり。「原子力ムラ」の方々の証言をまとめた本。

日本の原子力導入で、立役者は当時議員だった読売新聞の正力松太郎、それと中曽根康弘。1950年代です。この偉い人たちのリーダーシップが強烈すぎたようだ。しかもあまり専門家の言うことは聞かなかったらしい。まあ、周りの人としては、偉い人のせいにしておけば良いというバイアスがあるのかもしれない。とにかく60年前に始まることなので、当時の責任者はもうこの世にいない。

1950年代の「科学技術」というのはまさに死活問題で、それで中曽根さんは科学技術の推進の為に原子力を推したということだ。現在の人工知能などの科学技術とはちょっとレベルが違うかなと思う。また、こんなにできるかどうか判然としない技術を確立するのは大変だったろうと思う。逆に昔だったからできたことなのかもしれない。

原子力発電所の建設の説明の時にはもちろん安全を謳う必要があった。ある程度商業ベースに乗ってきてからはコスト重視で稼働率を上げることが命題となり、やはり安全性は二の次だった。いやな感じなのは、安全に対する「懸念」が公表しにくいという点。「まだそんなことができてないのか」という批判を恐れて言えないことがあるという話。「原子力ムラ」って、原子力推進に批判的なことを言うと、村八分になる場所らしい。村八分、つまり次の仕事は来なくなる。

活断層と地震に関係があるということが定説となったのは、比較的最近のことなので、多くの原発は断層とは関係なく建っている。(本当だろうかと思って調べたら、どうやら本当で、活断層が注目されるようになったのは阪神淡路震災からで、「活断層学会」ができたのは21世紀のことらしい)

資源の無い国、日本。資源を東南アジアに求めて太平洋戦争を起こした。その反省。核武装を続けるためには、核の平和利用が同時に必要だったアメリカ。

廃棄物であるプルトニウムを燃料として使う核燃料サイクルが究極の夢だったが、これは破綻していて、ゴミはたまる一方となっている。総合的に見ると今まではなんとかやってきたけれど、今後のエネルギー問題は、別の方向で考えた方が良いのではないかと思う。




Saturday, January 23, 2016

matplotlib入門

これまでグラフを描く時にはRを使ったりpythonでmatplotlibでやったりと色々かじっていたのですが、2ヶ月くらい前にRで2万枚くらいのグラフを描いていた結果、この言語で続けるのはもう無理だという気分になりました。だって変数のスコープがないんだもん。

それでmatplotlibに移ることにしたのだけれど、Rでやってた基本的なことするのにいちいちstackoverflowの記事を読むのが大変だったので、ごく簡単なところをここにメモすることにしました。

情報としては、matplotlib.org本家があるのと、Wes McKinneyの"Python for Data Analysis"を持っています。本の方はMatplotlibに限らずnumpy, pandasなど色々幅広いです。

使い始めてすぐ気になるのは、plt.plotでできることと、subplotのax.plotでできることが似ている一方、違っている点で、結局matplotlibのソースを見て納得しました。pltの方はpyplotモジュールの関数で、axの方はaxesの下の_subplots.AxesSubplotあたりのクラスの関数なのですね。要するに別のもの。

1. 数字のカンマ区切り(1000ごと)。みんなグラフの数字はカンマで区切りましょう!excelでも「数値」を選べばそうなります。カンマをつけてくれないと、いちいちゼロの数を数えるのが面倒です!私は以下のようにFuncFormatterを使ったcommaformを渡すようにしています。

2. 色の変え方。系列ごとにblue, redなどで変える方法はあちこちに出てます。数字によって連続的に変える場合は以下のようにnormalizationと、colormapを使います。

3. colorbarで色の意味を示すのも以下のようにします。例では2の累乗で表示していますがこの例だとデフォルトは10の累乗になります。コメントアウトするとわかります。colorbarの書き方は以下のようにする方法と、コメントアウトしてあるplt.colorbar(sc)
の方法で設定する方法があるようです。

4.  最近もっとも驚いたのは、グラフの上にマウスを持ってきて、'l'(エル)とか'L'と打つと画面上でy軸x軸がログスケールに変わることです。みんな知ってるのかなあ。それはそうとして以下の例ではコメントアウトしましたが、ax.get_xaxis().set_major_locatorでbase=2でx軸をlogに変えることができます。

5. matplotlibはスタイルシートをサポートするようになりました。冒頭コメントアウトしてありますが、plt.style.availableで使えるスタイルシートの一覧が見られます。自分のスタイルシートは
$HOME/.matplotlib/stylelib/foobar.mplstyle
のようなファイルに入れておくと読んでくれます。

 6. matplotlibをいじってみたい気になったので、ソースをgit cloneしてdevelopモードで動くようにしました。ダウンロードしたソースに対してpython setup.py developとすると
/usr/local/lib/python3.5/site-packages/matplotlib.egg-link
というファイルが出来、そこにcloneしたソースへのリンクが書かれています。このローカルコピーで動くことになります。





以下が例。背景が黒いのはdark_backgroundスタイルシートのせい。



Friday, January 22, 2016

壁にぶつかるボールが円周率を作る

2015年2月号の数学セミナーの時枝先生という方の「ちいさい数理みつけた」という記事の中に、壁にぶつかる2つの物体の話が出てくる。

最初、mは静止しており、Mがぶつかってくる。左端には壁があって、床はツルツルしている。mは弾き飛ばされて壁とMに何度もぶつかる。その回数が問題。

質量m, Mの間に $\frac{M}{m} = 100^d,  (d=0,1,2...) $の関係がある時に、衝突の回数が円周率のd桁になるという不思議な話だ。
この記事にはそのことしか書いていないので、自分で確かめよう。

久しぶりに高校の物理を思い出して、m, Mそれぞれの速度をu, vとし、エネルギー保存の法則と、運動量保存の法則を解けば良いことに気づく。衝突後のu,vをそれぞれu',v'とすると、
$mu + Mv = mu' + Mv'$
$\frac{1}{2} mu^2 + \frac{1}{2} Mv^2 = \frac{1}{2} mu'^2 + \frac{1}{2} Mv'^2$
壁に向かう方の符号を正としている。
これを解くと、以下のようになる。

$ \begin{pmatrix}
u' \\
v'
\end {pmatrix}
= \frac {1}{m+M}
\begin{pmatrix}
2 M & m - M \\
M-m & 2 m
\end {pmatrix}
\begin{pmatrix}
u \\
v
\end {pmatrix}
$

mの速さは壁にぶつかっても変わらず、符号だけ変わる。m,Mが衝突すると、mは壁にもぶつかってふたたびMに衝突する。

問題なのは停止の条件で、Mが押し返されて右向きに動き始めてからも、Mの速さよりmが上まわればまた後ろから衝突する。mの方がMより遅くなっても、一回だけ壁にぶつかる。

回数をカウントするプログラムを書いたのが以下。$r = \frac{M}{m} $ とし、$ v = 1$ とした。

結果、以下のように円周率に従っている。

0 3
1 31
2 314
3 3141
4 31415
5 314159
6 3141592
7 31415926
どこにも円周率らしきものがないのに、結果として円周率になっているのが不思議である。

停止の条件が自分ではよくわからず、時枝先生の記事にはロシア人らしき人の名前が引用されているだけだったので、元ネタの所在も分からなかったのだけれど、「衝突 円周率」で調べているうちにNY Timesの記事が見つかって、そのアニメを見て停止の条件がわかった。というかこのアニメ、前に見たような気がする。


-----
(2/6/2016)
2つ後の記事に書いたがブログにtexで数式が書けるようになったので、式のところを直した。