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。




Saturday, April 16, 2016

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

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

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

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

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

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

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

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




Saturday, April 02, 2016

python3メモ:unicode

python3になって、エンコード関係でエラーを受けるようになった。いろいろ読むと、python2からpython3で「正しく」なっているようだが、わかりづらい点があるようだ。私もようやく話が見えてきたので、理解を確かめるためにメモしておきたい。

ややこしくなるので、今回はpython2の話は書かないことにする。

まず、文字コードは内部の表現と、入出力が別であって、内部表現はstr型である。これはunicodeでもある。str型はunicodeと同じでpython3では区別がない。入出力できる文字コードはsjisやutf-8などである。これらの型がbytes型である。

つまり、ファイルの内容や、ファイル名などはbytes型としてプログラムに入ってくるので、必要に応じてstr型に変換する必要がある。

変換は、
str -> bytesとするのをencode、
bytes -> strとするのがdecode
となっている。内部表現のstr型が中心だと思えば覚えられるだろう。

要素として、
関数が受け付ける型
ファイルの中身
ファイル名
ロケールとprint()がやってくれる処理
ということが同時に登場するので、混乱するのだと(少なくとも私は)思う。



情報としては、まず、何と言っても公式のページが丁寧だった。

あと、こちらの偉い人が書かれた記事も有用だった。

先ほどこちらの記事を見つけたが、まだちゃんと読んではいない。
http://python-notes.curiousefficiency.org/en/latest/python3/text_file_processing.html

ここで例題をやってみよう。

# 基本編
string = 'アイウエオ'
type(string) # str
print(string) # アイウエオ
ustring = u'アイウエオ' #python3では'u'をつける必要はない。つけても怒られない
type(ustring) # str
print(string==ustring) # True

#変換
bytestr = bytes(string) # TypeErrorで失敗
# エンコードを指定してエンコードする必要
bytestr = bytes(string, 'utf-8')
bytestr2 = string.encode('utf-8')

print(bytestr==bytestr2) # True この2つは同じことのようだ。

print(bytestr) #b'\xe3\x82\xa2\xe3\x82\xa4\xe3\x82\xa6\xe3\x82\xa8\xe3\x82\xaa'

# ファイルへの出力
# デフォルトのコーディングで出力
f=open('Desktop/test_text.txt','w')
# writeに渡すのはstr
f.write(string)
# f.write(bytestr) # TypeError: write() argument must be str, not bytes
f.close()

# 確認してみる。
# $ file Desktop/test_text.txt
# Desktop/test_text.txt: UTF-8 Unicode text, with no line terminators

# 以下のように出力のコーディングを指定できる。
f=open('Desktop/test_text_sjis.txt','w',encoding='sjis')
f.write(string)
f.close()


# str型をprint()に渡して、処理してくれる場合と、できない場合がある。
print(string) #この場合はOK. アイウエオ

# utf-8を手で入力してみる。
T = b'\xe3\x80\x92' #e3 80 92
print(T.decode()) # 郵便マーク 〒

#サマリア文字というのがあるらしいので、ついでにそれも入力してみる。
samaria = b'\xe0\xa0\x80'
print(samaria.decode()) # Samaritan サマリア文字  ࠀ

# デフォルトのコーディングが上記のようにutf-8ならば変換してくれるが、以下のようにロケールがASCIIになっていると、UnicodeEncodeErrorで失敗する。
$ LANG=C
$ python3
Python 3.5.1 (default, Dec 31 2015, 09:25:09)
[GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.1.76)] on darwin
Type "help", "copyright", "credits" or "license" for more information.

>>> t = b'\xe3\x80\x92' #e3 80 92 郵便マーク
>>> print(t.decode())
Traceback (most recent call last):
  File "", line 1, in
UnicodeEncodeError: 'ascii' codec can't encode character '\u3012' in position 0: ordinal not in range(128)

>>> samaria = b'\xe0\xa0\x80'
>>> print(samaria.decode())
Traceback (most recent call last):
  File "", line 1, in
UnicodeEncodeError: 'ascii' codec can't encode character '\u0800' in position 0: ordinal not in range(128)

# decodeでのコード指定。間違ったコードを指定すると、エラーが返る。
print(T.decode('sjis'))

UnicodeDecodeError: 'shift_jis' codec can't decode byte 0x92 in position 2: incomplete multibyte sequence


まだ他にもあるような気がするけれど、とりあえず今日はここまで。