Saturday, January 07, 2017

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

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

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


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

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


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

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

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

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

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

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

Saturday, December 10, 2016

平均寿命の国際比較

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

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

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

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

Aの平均と、Bの平均を比べる時に、AとBの差に比べてAやBの分散が大きいと、A、Bの区別はつかないというのが統計学のココロのはず(分散分析)。平均寿命に対する分散が幾つなのかは知りませんが、直感的に誤差の範囲と言って良いんじゃないでしょうか。

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

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


Monday, October 31, 2016

Python3とPython2違いメモ

join
Python2では";".join(['a','b'])という奇怪な文法だったが、Python3ではは以下のようになっている。
 
>>> str.join(',', ['a','b'])
'a,b'
strはbuiltinのクラスなのでインポートする必要はない。

reduce
Python3ではfunctoolsの一部になった。functoolsをインポートする必要がある。
 
>>> from functools import reduce
>>> reduce(lambda x,y:x+y, [1,2,3])
6
map
mapが返すのはiteratorに変わった。listが欲しい場合はlistで囲む。
>>> map(str, [1,2,3])
<map 0x205b20b0="" at="" object="">
>>> list(map(str, [1,2,3]))
['1', '2', '3']
>>> 

多次元配列のsort
やりたいことは2つ目の要素でソートする、などのこと。Python2について昔ここに書いたことがあったのだけど、Python3ではkeyで渡すように変わっている。関数の書き方も変わったようだ。
>>> a = [[1,2],[3,0]]
>>> a.sort()
>>> a
[[1, 2], [3, 0]]
>>> a.sort(key=lambda x: x[1])
>>> a
[[3, 0], [1, 2]]
数の型
$ python2.7
Python 2.7.10 (default, Jul 30 2016, 18:31:42) 
>>> type(1)

>>> type(1.2)

>>> 
$ python3.5
Python 3.5.2 (default, Aug 16 2016, 05:35:40) 
>>> type(1)

>>> type(1.5)


Tuesday, July 05, 2016

matplotlib入門:アニメーション。バブルソート

バブルソートって、なんだっけ?と思ってwikipediaを見てて、右下の方のアニメーションがいい感じで、自分でも作ってみたくなった。

matplotlibでやってみようと思った。いろいろ調べてこんな感じになった。
100個の乱数を並べてゆく。バブルソートは一番右(か左)から席が確定してゆくので面白いことになる。



ちなみに肝心のバブルソートのアルゴリズムはgen_points()の中の4行くらいの箇所。

できたmp4のアニメをyoutubeにアップロードした。


Saturday, June 18, 2016

Seabornでaxを設定する

MatplotlibだとダサいのでSeabornを使うという話があるのだけど、細かな設定をどうするのかわからんなあと思っていた。

どうやるかというと、matplotlibのplt.subplotsのaxを使って、axをseabornに渡せtば良いのであった。

以下の例ではy軸をカンマ区切りに設定したaxをpointplotの際にax=axとして渡している。
(df.passengerをわざと大きな値にしている)

結果は以下。

Saturday, May 28, 2016

人工知能とデバッグ

少し前に、NHKスペシャルの「天使か悪魔か羽生善治、人工知能を探る」というのを見たのだけど、将棋の羽生がAlphaGoのDeepMindに行ってDemiss Hassabisにインタビューする内容だった。

この番組の1シーンで、Lee SedolがAlphaGoに一勝したときの記者会見で、記者がHassabisに「碁の場合はマシンが暴走した、と言って許されるかもしれないが、ヘルスケアでそれで許されるのか」という趣旨の質問をしていた。これはなかなか良い質問だと思った。DeepMindはヘルスケアをやって行くと言っているのだ。Hassabisの答えは、AlphaGoは完成品ではなく、ヘルスケアの場合は完全にテストしたものを製品とする、という優等生的なものだった。

このやり取りについて考えていたのだが、人工知能で非常に正解率が高い判断をするものの、当然失敗がある。結果を人間が直接見るのが前提なケースは良いだろう。しかしこれを取り込むシステム全体はどうなんだろう?番組の中では「良心回路」を持った人工知能の研究が出てきていたが、私が言いたいのはもっと単純なエラーについてだ。道が右に曲がっているという判断に基づき、自動運転車が右に曲がろうとする。この成果率は非常に高い。しかし100%ではない。間違えるとしたらシステム全体からするとバグだ。複数のロジックを用いて確率を下げる、映画2001年のHALみたいに。でもエラーはゼロとは言えない。どう判断するのだろう。人間の正解率と同等なら良しとするのだろうか。

エラーからの回復方法は、テストを完全にするとかどうという以前に、どうやってシステムをつくるかの思想の問題になる。実際にはケースごとにいろいろ逃げ道あるのだろうが。記者がこのつもりで質問したのかどうかは定かではないが、私も聞いてみたい。

Monday, May 23, 2016

Raspberry Pi FreeBSD。ScanSnapのサーバにする

Saneという名前は聞いたことがあったが、ScanSnapのデータが読めるとは思わなかった。

まず、sane-backendsをインストールする。

pkgが最後に使い方についていろいろ言ってくるが、まず以下の出力を見るように言われる。

root@rpi-b:/home/freebsd # usbconfig list
(略)ugen0.5: at usbus0, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON (98mA)




この0.5ということを調べて、デバイスの情報を得る。
root@rpi-b:/home/freebsd # usbconfig -d 0.5 dump_device_desc
ugen0.5: at usbus0, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON (98mA)

(略)
 idVendor = 0x04c5
 idProduct = 0x11a2


そしてこの情報をsaned.conf というところに入れて、

root@rpi-b:/home/freebsd # cat /usr/local/etc/devd/saned.conf
notify 100 {
       match "system" "USB";
       match "subsystem" "INTERFACE";
       match "type" "ATTACH";
       match "cdev" "ugen[0-9].[0-9]";
       match "vendor" "0x04c5";
       match "product" "0x11a2";

       action "chown -L cups:saned /dev/\$cdev && chmod -L 660 /dev/$cdev";
};


devdをリスタートする。

root@rpi-b:/home/freebsd # /etc/rc.d/devd restart

すると、scanimageでスキャナが認識できる。
root@rpi-b:/home/freebsd # scanimage -L
device `fujitsu:ScanSnap S1500:14489' is a FUJITSU ScanSnap S1500 scanner

GUIを使うつもりはないので、コマンドラインで操作する。
テストの紙をスキャナに一枚入れて、以下のコマンドを実行すると、あら不思議。
root@rpi-b:/home/freebsd # scanimage --device-name='fujitsu:ScanSnap S1500:14489' --format tiff > test.tiff

紙が吸い込まれて、tiffのイメージができた。

なかなか愉快だ。
まあLinuxでも同じでしょう。

Tuesday, May 03, 2016

RaspberryPi B+, FreeBSDでワイヤレス接続

さて、先日作ったFreeBSD10.3のシステムで、ワイヤレス接続をしてみよう。

実はdmesgの出力を眺めていてwifiがまだだったなあと気づいたのでした。
念の為書いておくと、私がアマゾンでついでにポチったWifiアダプタはGW-USNANO2Aという、おそらくありふれた機種。dmesgにはライセンスを読んでオッケーだと思うならloader.confにlegal.realtek.license_ack=1と書け、とひっそりと書かれていたのでした。その辺のことはurtwnのマニュアルに書いてあります。

マニュアルだけでもわかるのかもしれないけれど、こちらの有識者の設定を参考にしました。やったのは以下。

/boot/loader.confに追加
legal.realtek.license_ack=1

create wlan0を作成
# ifconfig wlan0 create wlandev urtwn0

/etc/rc.confに追加
wlans_urtwn0="wlan0"
ifconfig_wlan0="WPA DHCP"
networkをスキャンして様子を見る
# ifconfig wlan0 up scan
/etc/wpa_supplicant.confに自分のネットワークのSSIDとパスワードを記入
network={
    ssid="your_ssid"
    psk="your_password"
}

# reboot
以上でwifiにつながりました。

Sunday, May 01, 2016

RaspberryPi B+でFreeBSD (続き)

raspberry pi B+でFreeBSDで動作確認は済んだ訳だけれど、その後、どうするか。

まず、前回ダウンロードはしたものの、使わなかったraspbianを試した。これは素晴らしい。RPB+たった512MBのメモリでありながら、頑張ってGUIとRPのロゴを表示した。Python2, Python3のIDLを表示する。えらい。Mathematicaもあるらしい。えらい。

しかし、違う。やろうと思っているのは人が作ったオモチャを使うことではないのだ。

で、まずはBSDにはNanoBSDというツールがあって、組み込み的な組み合わせが作れるらしいということを知った。でRP用のイメージを作ったつもりなのだが、うまく動かなかった。どう動かなかったかというと、画面が真っ暗だったのでどうしょうもなかった。詳細はおぼろげで、よく覚えていない。

次に、crochetというものがあり、これでRP用のイメージが作れるという話らしい。しかし、これは起動時にブートイメージは読めるらしいのだが、ディスク(SDカードね)のマウントで落ちる。mounting from ufs, failed with error 19。FreeBSD本家の情報も見たがよくわからなかった。検索でいろいろ有識者らしい人の古めの情報も見たがダメだった。

と、走馬灯のようにここ2日間のことを思い出す。

現在、最新の10.3Rのリリースノートを見て、この近辺からarm配下RPの公式ブートイメージがあるらしいことを知った。ftp://ftp.freebsd.org/pub/FreeBSD/releases/ISO-IMAGES/10.3/

ここから、以下のものを頂いてddでsdcardを焼いて普通にブートしたのが以下の状態。
FreeBSD-10.3-RELEASE-arm-armv6-RPI-B.img


$ df -h
Filesystem                Size    Used   Avail Capacity  Mounted on
/dev/ufs/rootfs           3.6G    393M    2.9G    12%    /
devfs                     1.0K    1.0K      0B   100%    /dev
/dev/msdosfs/MSDOSBOOT     17M    3.9M     13M    23%    /boot/msdos
tmpfs                      30M    4.0K     30M     0%    /tmp
$ sysctl hw.physmem
hw.physmem: 495087616
$ uname -a

FreeBSD rpi-b 10.3-RELEASE FreeBSD 10.3-RELEASE #0 r297264: Fri Mar 25 08:01:14 UTC 2016     root@releng1.nyi.freebsd.org:/usr/obj/arm.armv6/usr/src/sys/RPI-B  arm


私の懸案であった、既存のUSBドライブの確認まではできた。

root@rpi-b:/home/tsuchiya # dmesg | grep da0
da0 at umass-sim0 bus 0 scbus0 target 0 lun 0
da0: Fixed Direct Access SPC-4 SCSI device
da0: Serial Number 1111114000D1
da0: 40.000MB/s transfers
da0: 1907729MB (3907029158 512 byte sectors)

da0: quirks=0xa


(まだ終わってない)

Sunday, April 24, 2016

RaspberryPi B+ 動作確認 with RaspBSD

ラズパイなるものを買ってみた。動作確認してみよう。

買ったのは、Pi B+とmicroSD カード、USB WifiのPlanexなんたらというもの。Pi B+と一緒に買う人が多いという組み合わせで。

電源はガラケーのmicro usbの充電器を使い、画像出力はテレビのHDMIに出すので、ケーブルはもうある。キーボードはMac Miniのやつを一時的に使う。



OSは、http://raspbsd.org/raspberrypi.htmlからFreeBSD-armv6-11.0-RPI-B-292989.img.gzというのを選択。

Raspberry本家のRaspbian https://www.raspberrypi.org/downloads/raspbian/もダウンロード開始したのだが、BSDの方が先に終わったので、BSDを使うことにした。

Mac MiniのSDカードスロットにカードを入れて、以下でカードを焼きました。




電源を入れると、テレビにブート画面が出た。どうやらwifiは有効になっていないし、このwifiカードを有効にするにはrsuというモジュールを入れてカーネルをビルドしないといけないらしいので、wifiは後日考えることにした。

とりあえず有線のLANケーブルをMac Miniからうばって、接続し、別のMacからSSHで繋ぐとちゃんと入れた。



所要時間1H。