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でも同じでしょう。

Saturday, May 07, 2016

MacOSXのTrim

MacMiniはSSDに換装して使っているのだけど、それに関係してだったかApplicationフォルダにTrim Enablerが入れたのだったと思う。これ何だろうなと思ったので、Trimがどうなっているか調べた。

Trimはファイルを消した時などに、OSがSSDにその領域を解放して良いとお知らせするもので、解放すればSSD内では使用済みの領域が減り、減った分を他のことに使えるので性能が上がるメリットがある。理屈の上では、だけど。

まあ換装した人だけですね。気にしなければいけないのは。元からSSDになってるマシンでは設定済みの筈です。

El Capitanではtrimforceを使えば良いらしい。つまりTrim Enablerはいらない。

まず、trimforce使用前。
Trimはオフになっている。(TRIMサポートの行)





ターミナルからtrimforce実行。

tsuchiyamac:~ tsuchiyayoshihiro$ sudo trimforce enable
IMPORTANT NOTICE:  This tool force-enables TRIM for all relevant attached
devices, even though such devices may not have been validated for data
integrity while using TRIM.  Use of this tool to enable TRIM may result in
unintended data loss or data corruption.  It should not be used in a commercial
operating environment or with important data. Before using this tool, you
should back up all of your data and regularly back up data while TRIM is
enabled.  This tool is provided on an “as is” basis. APPLE MAKES NO WARRANTIES,
EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF
NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE,
REGARDING THIS TOOL OR ITS USE ALONE OR IN COMBINATION WITH YOUR DEVICES,
SYSTEMS, OR SERVICES. BY USING THIS TOOL TO ENABLE TRIM, YOU AGREE THAT, TO THE
EXTENT PERMITTED BY APPLICABLE LAW, USE OF THE TOOL IS AT YOUR SOLE RISK AND
THAT THE ENTIRE RISK AS TO SATISFACTORY QUALITY, PERFORMANCE, ACCURACY AND
EFFORT IS WITH YOU.
Are you sure you wish to proceed (y/N)? y
Your system will immediately reboot when this is complete.

Is this OK (y/N)? 

Enabling TRIM...

.

.
Operation succeeded. Your system will reboot momentarily, please wait...


使用後。


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


(まだ終わってない)