tosh のすべての投稿

Googleドキュメントの定時バックアップ

Googleドキュメントの履歴機能は便利なのですが、やはり手元にファイルのバックアップとして定期的な保存が必要だったりします。

フリーウェアのみで特定のGoogleドキュメントを日付をつけた任意のファイル名で自分のコンピュータに毎日バックアップ取ることにします。

元のファイル名が「Mouse Inventory」だとすると2012.3.4→120304, 2012.3.5→120305と、
120304 mouse inventory.xls
120305 mouse inventory.xls
のような感じでファイルが溜まっていくようにします。

Macで行いましたが、Windows/Linuxでも同様に出来るはずです。

GoogleCLというフリーウェアがあり、これでコマンドラインからグーグルの各種サービスにアクセス出来るようになります。
それを使って特定のファイルを日付を付けてダウンロードするスクリプトを作り、
それを/etc/periodic/daily/というフォルダに入れるというのが概要になります。

まず、Pythonのバージョンが2.5以上であることをターミナルを起動して確認

YourMac:~ tosh$ python -V
Python 2.7.1

GData 2.0.14 (2.0.15や16は相性悪し)とGoogleCLをインストール
sudoコマンドで聞かれるパスワードはMacへのログインパスワードを入力します。パスワードを設定していない場合はsudoは使えません。

YourMac:~ tosh$ mkdir src
YourMac:~ tosh$ cd src/
YourMac:src tosh$ curl -O http://gdata-python-client.googlecode.com/files/gdata-2.0.14.tar.gz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 1828k  100 1828k    0     0   745k      0  0:00:02  0:00:02 --:--:--  886k
YourMac:src tosh$ tar xzvf gdata-2.0.14.tar.gz
x gdata-2.0.14/
...
x gdata-2.0.14/MANIFEST
YourMac:src tosh$ cd gdata-2.0.14
YourMac:gdata-2.0.14 tosh$ sudo python setup.py install
Password:
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/dist.py:267: 
...
Writing /Library/Python/2.7/site-packages/gdata-2.0.14-py2.7.egg-info
YourMac:gdata-2.0.14 tosh$ cd ~/src
YourMac:src tosh$ curl -O http://googlecl.googlecode.com/files/googlecl-0.9.13.tar.gz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 85690  100 85690    0     0  64726      0  0:00:01  0:00:01 --:--:-- 92637
YourMac:src tosh$ tar xzvf googlecl-0.9.13.tar.gz
x googlecl-0.9.13/
…
x googlecl-0.9.13/PKG-INFO
YourMac:src tosh$ cd googlecl-0.9.13
YourMac:googlecl-0.9.13 tosh$ sudo python setup.py install
running install
…
Finished processing dependencies for googlecl==0.9.13

これでソフトのインストールは終わり。後はGoogleへの認証のみ。これも対話式なので指示通りに入れていけばOK。
色々なGoogleのサービスへのアクセスができる。ここではyoutubeにアップロードしたリストを取得してみる。

YourMac:googlecl-0.9.13 tosh$ cd
YourMac:~ tosh$ google youtube list
Please specify user: toshiki.saito           
Please log in and/or grant access via your browser at https://www.google.com/accounts/OAuthAuthorizeToken?oauth_token=4%2FA62soD028vPKHABqZA9GVQ&hd=default then hit enter.
2011 Athletic Festival,http://www.youtube.com/watch?v=hZSplbQ&feature=youtube_gdata
...
1st concert,http://www.youtube.com/watch?v=AxFNTaw&feature=youtube_gdata

次にGoogleドキュメントへのアクセスを試みる。Googleドキュメントのファイル一覧を取得してみる。指示通りにGoogleアカウントのユーザー名とパスワードを入れるとブラウザが開くので指示通りに表示された確認コード(Verification Code)を入力すると、一覧が表示される。

YourMac:~ tosh$ google docs list
Please specify user: toshiki.saito
Please log in and/or grant access at https://www.google.com/accounts/OAuthAuthorizeToken?oauth_token=4%2FF9R8_nT7ulks0qGomLkhe3-&hd=default

Please enter the verification code on the success page: 3egM-DKMKArS8FQbB3
Ptosh SOP Clerk DM,https://docs.google.com/document/d/1Wx7sAik8lOAGrLMsQa-A-Tt2DTPUHPLLBiFCY/edit
...
Otsuka 2006,https://docs.google.com/Doc?docid=0AfBu_SyaL1DWYWg4bjliZ2NrNmDQ4anBocG5od2M

次に任意のファイルをダウンロードしてみる。–titleでファイル名を指定します。正規表現でまとめて複数ファイルをダウンロードすることも可能です。

YourMac:~ tosh$ google docs get --title "Mouse Inventory"
Please specify dest: test123
Downloading Mouse Inventory to test123.xls

指定しないとこのように対話式に保存ファイル名を要求される。Googleドキュメント上の「Mouse Inventory」というファイルをDocuments(書類)フォルダの中のBACKUPS/Mouse Inventoryというフォルダの中に日付を付けて「120305 mouse inventory.xls」こんな感じのファイル名で毎日バックアップさせます。–destで保存先を指定します。

YourMac:~ tosh$ google docs get --title "Mouse Inventory" --dest "$HOME/Documents/BACKUPS/Mouse Inventory/`date +%y%m%d` mouse inventory"
Downloading Mouse Inventory to /Users/tosh/Documents/BACKUPS/Mouse Inventory/120305 mouse inventory.xls

``で囲まれた部分はシェルで実行された結果をファイル名に文字列として反映させることができます。

YourMac:~ tosh$ date +%y%m%d
120305
YourMac:~ tosh$ date +%Y%m%d
20120305
YourMac:~ tosh$ date +%H%M
1600

思い通りにファイル名を指定して目的のフォルダにダウンロードできたことを確認したら、シェルスクリプトの実行ファイルにします。ターミナルのVimかTextEdit(フォーマット→プレーンテキストを忘れずに)で下記のようなテキストファイルを作ります。backupMouseInventory.shというファイル名にしました。拡張子は「.sh」である必要があります。1行目はおまじないですが、必要ですので加えて下さい。最終的にはroot権限で実行するので、”$HOME”は”/Users/tosh”とフルパスに変更します。またroot権限ではパスが通っていないので、/usr/local/bin/googleとフルパスで記載します。

#!/bin/sh
/usr/local/bin/google docs get --title "Mouse Inventory" --dest "/Users/tosh/Documents/BACKUPS/Mouse Inventory/`date +%y%m%d` mouse inventory"

ちゃんとできているか確認し実行属性を与え、実行できるかどうか確認します。パスが通っていないことあるので、ファイル名の前に「./」を付けてあるいはフルパスでファイルを指定して実行してみます。

YourMac:ScriptsMac tosh$ cat backupMouseInventory.sh 
#!/bin/sh
/usr/local/bin/google docs get --title "Mouse Inventory" --dest "/Users/tosh/Documents/BACKUPS/Mouse Inventory/`date +%y%m%d` mouse inventory"
YourMac:ScriptsMac tosh$ chmod 777 backupMouseInventory.sh 
YourMac:ScriptsMac tosh$ ./backupMouseInventory.sh 
Downloading Mouse Inventory to /Users/tosh/Documents/BACKUPS/Mouse Inventory/120305 mouse inventory.xls

上手くダウンロードされることが確認できたら、/etc/periodic/daily/にコピーまたは移動します。sudo periodic dailyとして、ファイルのダウンロードがされることを確認します。

YourMac:ScriptsMac tosh$ sudo cp backupMouseInventory.sh /etc/periodic/daily/
YourMac:~ tosh$ sudo periodic daily

ここまで上手く行ったらRoot権限でGoogleへの認証を取っておきます。
まずMacのRootアカウントを有効化します。
http://support.apple.com/kb/HT1528?viewlocale=ja_JP
上記で行なったことと同じことをRoot権限で行います。

YourMac:~ tosh$ login
login: root
Password:
Last login: Wed Mar  7 09:53:46 on console
YourMac:~ root# google docs list
Please specify user: toshiki.saito
0:123: execution error: An error of type -10810 has occurred. (-10810)
Please log in and/or grant access at https://www.google.com/accounts/OAuthAuthorizeToken?oauth_token=4%2FsxerBjcxdfsUhtM4vN&hd=default
Please enter the verification code on the success page: FLehmasdfaserersgk2Xy3w

毎日早朝(3:15am)にバックアップが取られるようになりました。時間はlaunchdで設定されています。

YourMac:LaunchDaemons tosh$ cat /System/Library/LaunchDaemons/com.apple.periodic-daily.plist 
< ?xml version="1.0" encoding="UTF-8"?>
< !DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">


	Label
	com.apple.periodic-daily
	ProgramArguments
	
		/usr/sbin/periodic
		daily
	
	LowPriorityIO
	
	Nice
	1
	StartCalendarInterval
	
		Hour
		3
		Minute
		15
	
	AbandonProcessGroup
	


最初スクリプトファイルの中でフルパスを指定しなかったら、上手く動いていなかった。ログをみると下記のようになっていたので、絶対パス指定とした。

YourMac:~ tosh$ tail -n 100 /var/log/daily.out
...
/etc/periodic/daily/backupMouseInventory.sh: line 2: google: command not found
-- End of daily output --
zp8497586rq

マラソンは毎日走っても完走できない

マラソンは毎日走っても完走できない
―「ゆっくり」「速く」「長く」で目指す42.195キロ (角川SSC新書)

小出 義雄


こんな本を読む時が来るとは。出会いに感謝。良い本だった。肥満で走ることさえままならない状態からフルマラソンまでの道筋がコンパクトに面白く具体的にまとめられている。著者はQちゃんことオリンピックで金メダルをとった高橋尚子さんを育てた名物監督の小出さん。そういえばオリンピック直前に出版された本のあとがきが優勝したオリンピックのレース展開と酷似していて驚愕したのを良く覚えている。教えるのが上手な人は文章構成能力も高いのかなと思った次第。以下備忘録。

p.14 ひとつは、特に太っている人やランニングビギナーに向けた「体の準備」について。

p.18 ウォーキングメニュー

p.28 1週間に1日は「脚つくり」をする
出来れば1週間で3日は練習日がほしい
土曜日 20分ウォーミングアップ、全力1キロ、5分ジョギング、全力1キロ(、クールダウン)
日曜日 90分ジョギング
月曜日 20分ジョギング
水or木曜日 20分ジョギング

p.35 きつい練習をした翌日は、足を完全に休めるよりも軽めの練習をしたほうが疲労もほどよく取れて、脚つくりも進んでいくのです。

p.40 人間の体は、どんなに鍛えた筋肉も、1週間も使わなかったら2分の1まで衰えてしまう。心肺機能も刺激を与えなければ、2週間でなにもやっていないのと同じ状態になってしまう。トップアスリートだって、1ヶ月も運動をしなければ「ただの人」です。
 練習は続けなければ意味がありません。続けるためには頑張り過ぎないこと。その意識がないと長くは続きません。

p.48 姿勢の良いフォームを心がけるポイントは、頭のてっぺんが真上に引っ張られているイメージを持つこと。

p.49 おへそを前に出すように意識して走ってみると、脚が自然と前にでて、ふっと体が進みます。

p.78 目線は3メートル先へ

p.83 脈拍で練習量を調整する。「138ー(年齢÷2)=目標心拍数(ジョギングのペース)」
POLARハートレートモニターの説明書より
              20才   40才
最大心拍数(HRmax)       200     180
高強度(80-90%)       160-180   144-162  最大運動能力を高めます
中強度(70-80%)       140-160   126-144  有酸素運動能力を高めます

p.86 練習日誌をつける

p.99 インターバル走を使った練習で、もっとも短時間で効果的に負荷をかけられる方法が、坂道インターバル走です。
坂の下がスタート地点。まずは、上りを「全力」で走る。そして坂を上りきったらUターンして「ジョギング」で下りてくる。これで1せっと。坂を下りきってスタート地点に戻ったら、休むことなくまた「全力」で上っていく・・・。
この上り下りを、自分の走力に合わせて繰返します。正直言って、かなりきつい。100メートルの坂なら10本、200メートル以上の坂なら5〜10本程度。それくらいが、効果的に筋肉を鍛える本数の目安でしょう。

p.110 練習スケジュールを組む(具体的な長期スケジュールが記載されている)

★★★★★

Rubyで満年齢、満月齢を(ExcelのDatedif)

年齢の「○歳○ヶ月○日」、つまり「何年何ヶ月と何日がカレンダー通りに経ったか」という計算を考えてみます。

年齢の定義
前日の夜中の12時とのこと。2月29日生まれの人は翌年2月28日24時、つまり3月1日0時に年齢が一つ上がることになる。誕生日は3月1日になるのですね。

閏年の定義
通常使われている西暦はグレゴリオ暦であり、
西暦年が4で割り切れる年は閏年
ただし、西暦年が100で割り切れる年は平年
ただし、西暦年が400で割り切れる年は閏年
という規則とのこと

生年月日から満年齢を計算する際、単純に引いて365で割ると閏年分が狂います。

rubyで試してみます

irb
>> require 'date'

例えば1998年3月1日生まれの人は1999年2月28日には

>> (Date.new(1999,2,28) - Date.new(1998,3,1)).to_i
=> 364 #365で割ると1未満で満0年

となり、閏年を挟まない場合は0歳で合いますが、1999年3月1日生まれの人は2000年2月29日には

>> (Date.new(2000,2,29) - Date.new(1999,3,1)).to_i
=> 365 #365で割ると1以上になり満1才と誤ってしまう

となってしまい、2000年3月1日の前日に1才になってしまいます。

普通に考えると閏年を規定する関数が必要ですが、賢い人はいるもので下記のように一旦数値化することにより閏年に無関係に正確に満年齢計算が可能になります。
つまり19990301と20000229という数値にして引き算をするというものです。10000で割ると満年齢が整数値として取得できます。
(2000229-19990301)÷10000=0.9928 → 満0年

>> y = (Date.new(2000,2,29).strftime('%Y%m%d').to_i - Date.new(1999,3,1).strftime('%Y%m%d').to_i)/10000
=> 0 #満0年
>> y = (Date.new(1999,2,28).strftime('%Y%m%d').to_i - Date.new(1998,3,1).strftime('%Y%m%d').to_i)/10000
=> 0 #満0年
>> y = (Date.new(2000,3,1).strftime('%Y%m%d').to_i - Date.new(1999,3,1).strftime('%Y%m%d').to_i)/10000
=> 1 #満1年

小児科領域の場合、1才未満の月齢計算も必要になります。これも満月齢という考え方で良いようです。8月31日生まれの人は10月1日に1ヶ月齢になります。
これも単純に30で割ったりすると実際には1ヶ月は28日〜31日までバラツキがあるのでおかしいことになります。

>> (Date.new(1999,3,1) - Date.new(1999,2,1)).to_i
=> 28 #満1ヶ月だが30で割ると1未満に

しかしこれもstrftime.to_iを使った数値化をよく見ると、万の桁のくり下がりは必ず12、つまり1年=12ヶ月なので月齢は下記のように計算できます。

>> m = (Date.new(1999,3,1).strftime('%m%d').to_i - Date.new(1999,2,1).strftime('%m%d').to_i)/100
=> 1
>> m<0 ? m+12 : m
=> 1 #満1ヶ月

>> m = (Date.new(2000,2,1).strftime('%m%d').to_i - Date.new(1999,11,1).strftime('%m%d').to_i)/100
=> -9
>> m<0 ? m+12 : m
=> 3 #満3ヶ月

>> m = (Date.new(2000,1,31).strftime('%m%d').to_i - Date.new(1999,11,1).strftime('%m%d').to_i)/100
=> -10
>> m<0 ? m+12 : m
=> 2 #満2ヶ月

同じ原理で満年齢、満月齢が分かったところで端数の日数が分かるか、つまり「何年何ヶ月と何日がカレンダー通りに経ったか」という問に答えようとします。

末日の日付が起算日の日付と一緒かより大きい場合は単純に日付を引くだけです。起算日の日付の方が大きい時が問題になります。起算日より満年月を足した年月日を末日より引く操作が必要になります。

先ず満年月をきちんと足せるかどうかを確認

>> (Date.new(1999,1,31) >> 1).to_s #満1ヶ月後
=> "1999-02-28"
>> (Date.new(1999,1,31) >> 1+12*1).to_s #満1年1ヶ月後
=> "2000-02-29"
>> (Date.new(2000,2,29) >> 12*1).to_s #満1年後
=> "2001-02-28"

と大丈夫そう。

>> y = (Date.new(2004,3,12).strftime('%Y%m%d').to_i - Date.new(2000,10,20).strftime('%Y%m%d').to_i)/10000
=> 3 #満3年
>> m = (Date.new(2004,3,12).strftime('%m%d').to_i - Date.new(2000,10,20).strftime('%m%d').to_i)/100
=> -8
>> m = m<0 ? m+12 : m
=> 4 #満2ヶ月
>> d = Date.new(2004,3,12).day - Date.new(2000,10,20).day
=> -10
>> d = (d<0 ? Date.new(2004,3,12) - (Date.new(2000,10,20) >> y*12+m) : d).to_i
=> 21 #端数の日数は21日

メソッド(関数)を書いてみました。

datedif.rb

require 'date'
#
#= DATEDIF function in Excel
#
#Authors::   Toshiki I. Saito
#Version::   1.0 2011-09-08 tosh
#License::   The MIT License
#--
# starting: Starting date
# ending: Ending date
# Interval: Meaning; Description
# y: Years; Complete calendar years between the dates.
# m: Months; Complete calendar months between the dates.
# d: Days; Number of days between the dates.
# ym: Months Excluding Years; Complete calendar months 
#     between the dates as if they were of the same year.
# yd: Days Excluding Years; Complete calendar days 
#     between the dates as if they were of the same year.
# md: Days Excluding Years And Months; Complete calendar days 
#     between the dates as if they were of the same month and same year.
#++
def datedif(starting, ending, interval)
  if ending < starting then false
  else
    interval = interval.downcase
    years = (ending.strftime('%Y%m%d').to_i - starting.strftime('%Y%m%d').to_i)/10000.to_i
    months = (ending.strftime('%m%d').to_i - starting.strftime('%m%d').to_i)/100.to_i
    months = months<0 ? months+12 : months
    days = ending.day - starting.day
    case interval
      when 'y' then years
      when 'm' then years*12 + months
      when 'd' then (ending - starting).to_i
      when 'ym' then months
      when 'yd' then (ending - (starting >> 12*years)).to_i
      when 'md' then (days<0 ? ending - (starting >> 12*years+months) : days).to_i
      else false
    end
  end
end
>> require 'datedif'
=> true
>> today = Date.today
=> #
>> bd = Date.new(1969,3,13)
=> #
>> print 'Your age: '+datedif(bd,today,'y').to_s+' years '+datedif(bd,today,'ym').to_s+' months '+datedif(bd,today,'md').to_s+' days.'
Your age: 42 years 5 months 26 days.=> nil
>> print '今日で'+datedif(bd,today,'y').to_s+'歳'+datedif(bd,today,'ym').to_s+'ヶ月'+datedif(bd,today,'md').to_s+'日です。'
今日で42歳5ヶ月26日です。=> nil

とりあえず動いている様子。

こんな面倒な年齢の「○歳○ヶ月○日」や在職期間の「○年○ヶ月○日」といった表示の計算がExcelではDatedifという簡単な式として定義されています。さっすがExcelですね。、、と思いきや結構バグだらけな様子。確かに手元にあるExcell 2002(Windows)でも

=DATEDIF("2003/10/31","2003/11/10","md") → 10 #本当は10日間。これは合っている。
=DATEDIF("2003/10/31","2003/12/10","md") → 9  #本当は10日間。間違い。
=DATEDIF("2008/4/30","2009/3/1","md") → -1 #マ、マイナス?

>> datedif(Date.new(2003,10,31), Date.new(2003,12,10),'md')
=> 10 #合っている
>> datedif(Date.new(2008,4,30), Date.new(2009,3,1),'md')
=> 1 #合っている

ここにバグが良くまとまっているが結構きている。おかしいのはMDとYDなので実害が少ないということで放置なのだろうか。

ちなみにExcelのdatedifの引数に上記のメソッドは合わせました。

DATEDIF(開始日,終了日,単位)
この日から(開始日)
この日までを(終了日)
この単位で(単位)
単位:
"Y"	指定した期間の年数(満年数)を表示
"M"	指定した期間の月数(満月数)を表示
"D"	指定した期間の日数(満日数)を表示
"YM"	指定した期間の1年に満たない月数を表示
"MD"	指定した期間の1ヶ月に満たない日数を表示
"YD"	指定した期間の1年に満たない日数を表示
例:=DATEDIF("1999/3/1","2000/2/29","YM") → 11

VBのdatediffというのはExcelのdatedifとは異なり、「満年齢、満月齢、端数の日数」という計算は出来ない。

それ以上の間隔 Interval が DateInterval.Year に設定されていると、戻り値は単純に Date1 の年と Date2 の年から求められます。同様に、DateInterval.Month の戻り値は、引数の年と月の部分から求められ、DateInterval.Quarter の戻り値は、2 つの日付を含む四半期から求められます。たとえば、12 月 31 日と翌年の 1 月 1 日を比較する場合、差は 1 日ですが、DateDiff は DateInterval.Year、DateInterval.Quarter、DateInterval.Month に対して 1 を返します。

記載されています。

Google Spreadsheetにもdatedif関数は実装されていませんでした。

PerlにはTimeDate->delta_days, TimeDate->delta_monthsという実装があり、端数の日付取得もできるようです。

年齢以外の応用には「期間の定義」自体が色々あるようで慎重になったほうが良いようです。

福島第一原子力発電所事故(専門家リンク)

いつどうなったら避難すべき? どのくらいの被曝で何が起きるのか? 食べ物由来の被曝影響は? 正確には何が起きているの?という疑問に対し専門家によるソースリンク集を作りました。目を通し個人的に信頼出来ると感じたソースのみを逆引きでの形式で下記に記します。このまとめは随時更新予定です。

福島原発事故 専門家リンク集

1. どのくらいの被曝で何が起きるのか?
「福島第一原子力発電所事故」
齋藤俊樹
名古屋医療センター 再生療法研究部 血液内科
(自己リンクで恐縮です)

2. 食べ物由来の被曝影響は?
「東大病院放射線治療チームによる「内部被ばくと福島の”牛乳問題”の解説」」
元ソースTwitter:東大病院放射線治療チーム
関連ソースブログ:team nakagawa
中川恵一
東京大学医学部附属病院 放射線科 放射線治療部門

3. いつどうなったら屋内退避あるいは避難すべき?
「放射能漏れに対する個人対策」
山内正敏
スウェーデン国立スペース物理研究所(IRF)

4. 正確には何が起きているの?
「MIT NSE Nuclear Information Hub」
和訳:翻訳済み翻訳中
マサチューセッツ工科大学 原子力理工学部

5. もっと詳しいQ&Aは?
「 原発に関するQ&Aまとめ+」
早野龍五東大原子力系卒業生および有志協力チーム
東京大学大学院 理学系研究科・理学部

6.今後地震は増えるの?
 「東日本沖で起きた巨大地震について」
小山真人
静岡大学防災総合センター

福島第一原子力発電所事故(その2)

下記、私の卒業高校のメーリングリストでのやりとりですが、役に立つかも知れないのでに転載します。
また前エントリーも多少追加しましたので併せてご覧ください。

─────────────────────────────────────────

> このリンクは、「包括的核廃絶機構」かな? の情報に基づいたアメリカの記事なんだけど、△△にもらったメールでは、放射性物質がセシウムだから、このリンクに表示されてる風に乗ってやってくる放射性物質の危険度は、体内に1~2個入ってもだいじょうぶということか? というか、それぐらいは、日常的に吸い込んでるのかな?
> http://www.nature.com/news/2011/012345/full/news.2011.168.html
> http://www.zamg.ac.at/aktuell/index.php?seite=1&artikel=ZAMG_2011-03-17GMT09:15

〇〇の言っているのは、包括的核実験禁止条約機構
http://ja.wikipedia.org/wiki/包括的核実験禁止条約
http://en.wikipedia.org/wiki/Comprehensive_Nuclear-Test-Ban_Treaty_Organization
だね。

Natureの記事読みましたが、ここでも専門家が「The levels in Japan itself, outside the immediate vicinity of the Fukushima power plant, “wouldn’t scare me”, he adds.」
つまり福島原発のすぐそば以外であれば私は怖くないと言っています。

日常的に放射性物質となったセシウムを吸い込むことは無いと思います。ただ、セシウムから出るような放射線は日常的に浴びています。少量入っても大丈夫かということに関しては、大丈夫です。というか、何を持って大丈夫とするかですが、今の東京での放射線量は常識的な感覚で「全く」問題ないと言えます。

> 現在原発から半径20キロの避難命令と30キロの屋内待機命令が出ていて、米国からは50
> マイル(約80キロ)の避難勧告が出ています。昨日の米国公聴会では米国国内の原発事
> 故の場合は公式な避難命令は10マイル(約16キロ)なので、国内外で米国の方針が違うの
> はおかしいという意見表明が出る一方で、歴史的に10マイル(16キロ)は危険ではないか
> と言う声もあるそうです。

正直なところ放射性物質の拡散に関しては私はプロではありませんので正確なところは分かりません。素人として情報を漁った限りではやはり原則的には距離の二乗に反比例して濃度は薄まることは正しいようで(MIT website)、50km圏外であればチェルノブイリ級の事故でも直接被曝による被害は殆ど無いというのが感覚です。200km離れている東京に至っては何があっても問題ないと思います。ちなみに避難勧告は測定放射線量に応じて基準が決まっています。これこれの濃度に至る可能性があれば「退避」、これこれの濃度の可能性があれば「屋内待機」というようにです。つまり一律10マイルというのはナンセンスですし、今ひとつ分かりません。

チェルノブイリでは甲状腺癌が唯一増えたことが明らかになった癌ですが、この原因は当時ソ連が情報を隠蔽して放射性物質を高濃度に含んだ作物を食べた内部被曝によるものであることが分かっています。今回は情報を隠すことができない状況(リアルタイムで各地の放射線量はモニタリング・公開されています)ですし、日本人はバランス感覚を逸してヒステリックにしかも一時的にリスク回避する(かいわれ大根O-157,  狂牛病, こんにゃくゼリー vs 交通事故死 1万人/年、煙草による発がん6万人/年)ので、高濃度に被曝した作物を口に入れることはないでしょう。それよりも風評被害で実際には問題ないものも全く売れなくなるでしょう。こちらの方が私は心配です。

> 嫁さんの両親が概ね60キロ地点で生活しているのですが、どう思いますか。

ご両親は高齢ですので、失礼ですが全く問題ないと思います。急性障害は100mSv以上という非常に高い放射線量を短期間で浴びなければならないので、ブログでも記載したとおり現場以外ではまず起きません。なので心配すべきは晩発障害の発がんだけです。そして癌の発症率も子供であれば僅かな発ガン率の上昇も先が長いので気にならないことはないですが、ご高齢の方は平均寿命まで20年も無いので本当に影響は全く無視できると思います。それよりも精神的に不安定になることの方が可哀想ですね。

ちなみに私は癌のことをずっとやっていますが、日本が癌が多いのは全体で見ると発ガン率が高まったわけではなく、他の病気で死ななくなったからです。

> ちなみに今日のNew York Timesには、潜在的放射線は7マイルで40レム、10マイル
> で14-15レム、20マイルで13レム、30-50マイルで10-11レムという
> ことで、10-40レムはBlood Chemistry Changeを起こすとかいてありました。

いまどきレムとはNew York Timesもやりますね、古い単位です。1レムは 10 mSvです。潜在的放射線の意味がよくわかりません。大事故が起きた場合の線量でしょうか。7マイル 400 mSv, 10マイル 140-150 mSv, 20マイル 130 mSv、30-50マイルで100-110mSvということですね。ただこれが何の量なのか分かりません。これが毎時つまり400 mSv/時であれば結構な量なのでありえないと思います。おそらく400 mSv/年などかと思います。

発がんのリスクが明らかに上がる(わずかですが)ことが分かっているのが100 mSvからですが、これも実は不正確な表現で放射線の障害は照射総量だけでなく、その量の放射線をどのぐらいの期間で浴びたか、「線量率」と言いますが、これが大変効いてきます。つまりTotal 400mSvでもそれを1時間で受けるのか、1年かかって受けるのかで全く障害の程度は変わります。単純に短い期間で受けた方が障害は酷くなります。

ちなみに骨髄移植の際の線量率は5~15cGy/分つまり50-150 mSv/分, 3,000-9,000 mSv/時になります。これで骨髄移植の際は2,000 mSvを1回~6回照射(合計 2,000 mSv – 12,000 mSv)します。もちろん副作用や2次発がんも目に見えるほどありますし、そもそも比較すること自体がおかしいのですが、今議論されている量ですぐにどうこうなる(急性障害)は無いよ、あっても随分たってからの発がん(晩発障害)の率ですよということが言いたくて示しました。

> 内部被曝はどのような状況で起きる現象でしょうか?
> わかりやすくお願いします。
△△
> 花粉症で花粉ひっついたまた遊びに

〇〇
> 放射線源を体の内部に取り込んだ場合の被曝を外部被曝に対して内部被曝という。放射線源を体内に取り込む経路には以下のようなものがある。
> 放射性物質を口から取り込む(汚染された飲食物を摂取するなど)
> 放射性物質が皮膚の傷口から血管に入る
> 放射性物質のエアロゾルまたは気体を肺で吸い込む

△△と〇〇の回答で尽くされていると思います。被曝回避については、避難勧告圏外の人が除染(放射性物質を払い落としたり水で流したりすること)が必要な事態になることは本当に考えにくいと思いますので、気持ちの問題かと。実験で生の放射性物質はよく使うのですが、水で流すだけで簡単に落ちます。飛んでくる放射性物質をは△△の言うとおりイメージとしては花粉に近いです。なので対処も花粉対処と一緒になります。あとは食べ物に注意することですが、ここは日本なので間違い無く問題ないです。

以上です。今後も気軽に質問どうぞ。

(以上メーリングリストより改変後転載)

福島第一原子力発電所事故

福島原発事故について恐らく皆知りたいことは放射線をどのくらい浴びると何が起きるのか。病気になるのはどのレベルか、死ぬのはどのレベルか。

血液内科医として骨髄移植、つまり放射線を治療として使っていた者として知る限りの情報を提供したい。

まず単位
http://ja.wikipedia.org/wiki/放射線
http://ja.wikipedia.org/wiki/シーベルト
1 Svが約1 Gyであることを押さえればOK。また中性子線は治療では用いないのが、今回の事故ではありうるのかも知れない。臨界状態でしか生成されないので、問題になるのはγ線と考えればOK。

次に何が起きるのか?
一般的には下記のように書かれているが、これは放射線を受けた後に無治療だった場合の結果。
radiation.jpg

骨髄移植のバイブルである下記の教科書からの抜粋。1 rad = 10 mSv = 10 mGyと考えればOK。
thomas.png

radiation-normal-tissues1.png

まず体の中で一番放射線に弱い部分は骨髄であることがわかる。骨髄(血液をつくる骨の中の赤黒い物)は大体数百 radつまり、数千 mSv = 数Svぐらいから影響を受けていることが分かる。骨髄を含め、血液細胞でももっとも放射線に弱いリンパ球がやられ始めるのが0.2 Svぐらい。これが200 mSvぐらいから人体に影響が出ると言われているもの。

ちなみに骨髄移植では治療として 2 Gy(ミニ移植)〜12 Gy(通常の骨髄移植)を患者さんに照射している。つまり、2,000 mSv 〜12,000 mSvということになる。2 Gyであると自分の血液を作る力は一旦減るが数週間で元に戻る。他人の骨髄を入れるときは元々の骨髄を全滅させるので12,000 mSvという量をかける。この線量をかけると骨髄移植をしないと絶対に血液細胞は元に戻らない。骨髄移植は副作用で命を落とすほどの治療ではあるが、それでも治療に使うぐらいであるから、放射線治療の副作用のみで亡くなることは10%以下である。

ちなみにCTなどの放射線を使った検査を一回受けるだけで7~60 mSvを被爆する。

何となく線量のイメージをもっていただけただろうか。今朝までの放送では1,000μSv/h(毎時千マイクロシーベルト)の計測でどうのこうの、つまり1 mSv/hでなにやら騒いでいたので、数千mSvを治療として使っている側としては少し、大げさではと思っていたが。

しかし本日の11時過ぎに400 mSv/hが計測され、恐らくこの数値は上がる可能性が出てきたのを持って、これは一線を超えてしまったなと思い、このエントリーを書く気になった次第。つまり、そこに1時間立っているだけで、リンパ球が減る、最初の人体への影響がでることが分かる。但し、被曝だけならば5時間(400mSv x 5h = 2,000mSv)立っていたとしても、一番弱い骨髄でさえ自然に元に戻る。

事態を複雑にするのは「内部被曝」の存在。

簡単にいうと治療の場合、放射線を出す放射性物質自体は治療の機械そのものの中に入っていて、放射線だけを患者さんは浴びる。浴び終わってしまえばもう放射線を浴びる可能性は無い。実際の治療は数十分を何日間かに分けて行う。これが外部被曝。

ところがもし放射線を発する放射性物質そのものを鼻から吸い込んだり、口の中に食べ物と一緒に入れてしまったとする。そうすると体の中にいる限り、放射線を浴び続けることになる。30分で切り上げられる治療とは比べ物にならない間、被爆することになり、また積極的に体外にだすことも不可能。

平面密度は長さの二乗に反比例して減少する。単純計算では距離が10倍になれば濃度は1/100になる。そう単純ではないだろうが、いずれにせよ外部被曝を心配しなければならないのは恐らく現場の職員のみ。一般市民として心配しなくていけないのは圧倒的に内部被曝だと思われる。

線量に関しては上記の情報を参考に常識的感覚を養い、心配に必要なレベルの内部被曝に対してのみ敏感になれば良いかと思う。

今、願うのは
マスコミが恐怖心を煽る情報を流さないこと
専門家が発信すること
現場の命を賭して働いている職員が無事であること
である。

そして何より都内とそれ以西に住む人々は東北にゆくべき(水、食料品、電池、ガソリン)生活必要物資を「今」購入したりする「恥」を行わず、黙って献血と一息ついた時点での募金活動に集中すべきだと思われる。

【以下3月16日 追記】

妊婦さんに関しての質問を受けました。大切な点ですので本文に追記致します。

http://ja.wikipedia.org/wiki/放射線障害
この記載は正しいと思います。妊婦さんの中にいる胎児は16週令ぐらいまでは放射線への影響で奇形を起こす可能性があるので、医療の現場でもCTはおろかX線撮影も妊娠初期はなるべく避けることになっています。それでも100 mGy (≒ 100 mSv)までは大丈夫とされています。妊娠超初期(4週令ぐらいまで)では流産の可能性があります。よって妊娠の可能性のある方はそれ以外の方よりも慎重に行動すべきと思います。

ご質問の1才児に関しては大人と同じか、組織障害に対する耐性は大人よりも高いぐらいなので、急性障害については心配ないと思います。但し、数ヶ月から数十年後に起きる晩発障害としての癌ですが、若ければその先の寿命が長いわけで癌になる確率が高くなります。

晩発障害としての癌の発症については触れませんでしたが、100 mSv以下では癌の発症のリスクが上がるかどうかはっきり分かっていません。また100 mSvでも癌化の危険性が1%上がるのみです。1/3の人が癌になるとしても33%→34%になるだけで統計学的に上がるだけで実際には他の「運」の方が余程、その個人の人生には影響をあたえることになります。

嬉しいことに白血病やリンパ腫治療の際にお世話になっていた、東京大学医学部附属病院の中川 恵一先生(放射線科准教授 放射線治療の専門家です)がtwitterを開始しました。信頼できるソースとしてご利用下さい。
東大病院放射線治療チーム

簡易換算表:
1 Sv ≒ 1 Gy
1 Sv = 1,000 mSv = 1,000,000 μSv = 1,000,000,000 nSv
1 Gy = 1,000 mGy = 1,000,000 μGy = 1,000,000,000 nGy

【以下3月18日 追記】

MIT(マサチューセッツ工科大学)は理工学部系では世界のトップ大学と言っても過言ではない。この大学の原子力理工学部が今回の事故について解説している。
MIT NSE Nuclear Information Hub

素晴らしいことにGoogle Docsを使って素早く共同翻訳する作業が加藤 淳さんを中心になされており日本語で読むことが出来ます。

信頼できる情報源として御紹介致します。

Mac VMware Fusion – CentOS 5.5にRails最速構築(35分)

目的:Minimum CentOS 5.5上にRails構築し、MacのTerminalで全部操作可能に
副目的1:実際の運用に近い環境で構築したい
副目的2:何度でも気軽に環境再構築したい

“//”に続く部分はコメントです。それ以外の部分を実際に操作する。
CentOS 5.5を以下を参考にminimum install
http://isoredirect.centos.org/centos/5/isos/i386/
image fileの1のみisoイメージをダウンロード(624MBなので早い)
2010.12.24時点では下記が最新
http://ftp.riken.jp/Linux/centos/5.5/isos/i386/CentOS-5.5-i386-bin-1of7.iso

VMware Fusionを起動して

File > New...
Click 'Continue without disc'
Select 'Use operating system installation disc image file'
Click 'Continue'
Click 'Continue'
Unselect 'Use Easy Install' //Easy installとやらは使わない
Click 'Continue'
Click 'Finish'
Click 'Save'
Type 'linux text ' //別にGUIでやっても構わない。 以下←↓↑→とスペースキーで選択,[return]で決定
Select 'Skip'
Select 'OK'
Select 'OK'
Select 'OK'
Select 'Yes'
Select 'Remove all partition on....'
Select 'OK'
Select 'Yes'
Select 'No'
Select 'Yes' // eth0
Select 'Active on boot' 'Enable IPv4 support'
Select 'OK'
Select 'OK' //DHCP
Select 'OK'
Select 'Asia/Tokyo'
Select 'OK'
Type in root password
Unselect all
Select 'Customize software selection'
Select 'OK'
Unselect all //少しでも残っているとDisk 1以外のinstallerが必要になり面倒
Select 'OK'
Select 'OK' //log. 186 packages 387MB
Select 'Reboot'
//Network Adaptorはセキュリティ確保のためNAT接続としておく(window右下<…>アイコン)
//CentOS 5.5インストール終了、ここまで約10分経過

rootでログイン
先ずはMacのTerminalから操作できるように設定
参考:http://kajuhome.com/telnet.shtml

#telnet-serverインストール (sshは設定面倒...)
yum -y install telnet-server
#telnetがらみの設定ファイルを書き換える
#viはhjklで←↓↑→,iでinsert,aでappend,xで削除,ESCで抜け,ZZで保存終了
#下記、文頭に"-"がついている行を削除して "+"の行を追加
#hostのMacからだけアクセスできるように。確認するにはMacのTerminalでifconfigを。
#通常はCentOSのipアドレスの末尾の数字が1になるだけ。
vi /etc/hosts.allow
+ in.telnetd : 192.168.210.1
vi /etc/hosts.deny
+ in.telnetd : ALL
vi /etc/xinetd.d/telnet
- disable = yes
+ disable = no
#TelnetでMacから接続出来るように
/etc/init.d/xinetd restart
/etc/init.d/iptables stop
#Macのログインで使っているユーザー名を追加。toshはあくまで例です。
useradd tosh
#そのユーザー名のpasswordを設定。
passwd tosh
#ifconfigにてCentOSのip address(inet addr)をメモる。以下192.168.210.131だったとする
ifconfig
exit
//約15分経過

ここからはMacのTerminalで操作。コピペ出来るようになり楽チン。
後はMacで下記のコマンドをTerminalへ一行ずつコピペ。質問には全て’y’ (yes)で返答。

#まずCentOSのipアドレスに先ほど設定したユーザーのpasswordでログイン
telnet 192.168.210.131
#ルート権限に。suの後の"-"の入力大切。CentOSのルートパスワードを入力。
su -
#システムをアップデート
yum -y update
#NATなのでfirewallをoffにして、Macのターミナルから常にアクセスできるようにする。
#HostのMac以外からはpingも通らなかったので大丈夫かと
chkconfig --level 2345 iptables off
#kernelもアップデートされるので
reboot
#再起動後もう一度telnet, su
#今度は"-8"という8bitオプションを付けて起動。
#これで実際にプログラミング時に必要な日本語入力が出来るようになる。
telnet -8 192.168.210.131
su -
#makeコマンド使えるように、また後々色々足りないと怒られないようにするために次をインストール
yum -y groupinstall base 'Development Libraries'
#ruby, sqlite3, rubygemsはyumやgemでインストール出来ないので個別にコンパイル
#wgetはダウンロードに, gccはコンパイルに必要
yum -y install wget gcc
#約25分経過

rubyのインストール

#~/srcなどソースを置く場所を指定。どこでもOK。面倒なので~にしている。
cd
wget ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-p302.tar.gz
tar xzvf ruby-1.8.7-p302.tar.gz
cd ruby-1.8.7-p302
./configure --prefix=/usr
make && make install
ruby -v
#ruby 1.8.7 (2010-08-16 patchlevel 302) [i686-linux]と表示されればOK

sqliteのインストール
“sqlite3-ruby only supports sqlite3 versions 3.6.16+”との事なのでyumでは取れない
参考:http://blog.crm.co.jp/2010/08/centos_redmine_100_rc_7.html

cd
wget http://www.sqlite.org/sqlite-autoconf-3070400.tar.gz
tar xzf sqlite-autoconf-3070400.tar.gz
cd sqlite-autoconf-3070400
./configure --prefix=/usr
make && make install
sqlite3 -version
#3.7.4と表示されればOK

RubyGemsのインストール

cd
wget http://rubyforge.org/frs/download.php/70696/rubygems-1.3.7.tgz
tar xzf rubygems-1.3.7.tgz
cd rubygems-1.3.7
ruby setup.rb
gem -v
#1.3.7と表示されればOK

Railsのインストール

gem install rails --version 2.3.8 --include-dependencies
#結構時間掛かる。フリーズしていないので待つ。version 3以降でOKの場合は"--version 2.3.8"の記載不要。
rails -v
#Rails 2.3.8と表示されればOK
gem install sqlite3-ruby
#rootではなく通常ユーザー(この場合tosh)に戻る
exit
#ここまで約35分

以上でRailsインストール終了!
CentOS 5.5のイメージのダウンロード開始からここまで実測35分で終了した。
途中でVirtual Machine > Snapshots > Take Snapshots… でイメージを保存しておいても良いかも知れない。

ここからは現在最も良いと思われるRails入門書に沿ってRails勉強可能!
この本ではRails 3は対応していないので、上記の通りRails 2.3.8をインストールした次第。
Head First Rails ―頭とからだで覚えるRailsの基本

この本の7頁からに従って

rails tickets
cd tickets
ruby script/server

Mac側のブラウザでCentOS on VMware上のRailsを表示

http://192.168.210.131:3000 //CentOSのipアドレスを指定。ポートはデフォルトで3000番

にて

Welcome aboard
You’re riding Ruby on Rails!

が表示され

About your application’s environment

というところをクリックしてエラーがでなければ成功!

ちなみにRuby入門書で現在最適なのはこれ。
初めてのRuby
Enjoy!

実家のWindows Xpマシンのお掃除

年に何回か親元や親戚の家を訪ねた時は、コンピュータをお掃除しながら何らかの作業をしている。大抵状態を見ると無残なことになっている。

【手順(順番は大切)】

1. Microsoft Update(Windows Update)が最新になっているかどうか確認
スタート>すべてのプログラム>Microsoft Update(Windows Update)を実行

2. セキュリティソフトがアップデートされているかを確認
右下の常駐ソフトのアイコンから AVG Anti-Virus Freeをダブルクリック
> すぐにアップデートを選択

3. セキュリティソフトでウィルスが検知されていないか確認
上記に続いてコンピュータスキャナ>スキャン履歴 を確認

4. ディスクのクリーンアップ
スタート>マイコンピュータ からローカルディスクC:を右クリック>プロパティを選択
ディスクのクリーンアップを選択、すべてにチェックをつけて実行。
これは面倒だが使用しているのユーザー、それぞれにログインし直して実行。
ここにテンポラリファイルなどが山のようにたまっているが殆ど。

5. デフラグ
上記すべてが済んでからデフラグに移る。
純正のものよりもhttp://mydefrag.com、ここのものが優秀である。
System Disk Monthlyを選んで実行。

ここまでやって、フーッと一息つくのがいつもの実家帰り。

【参考】

AVG: ウィルスソフトにお金を出す必要はない。無料のこれで十分。 スケジュールスキャンも1週間に一度ほどの設定で十分。

マイドキュメント: そもそもパーティションを切って、マイドキュメントのプロパティよりマイドキュメントをD:ドライブに移動して、起動ドライブと分離しておくのが吉。

コンピュータ: なるべくWindows Xp止まりにしている。Windows Officeは2003止まりに。次の買い換えは自分自身の環境に合わせてMac + VMware Fusion + Windows Xpの方が幸せになれる気がしている。特にiPod, iPhone, iPadを使っている人は。Windows Xpは良いOSだったので、これらを積んでいるコンピュータは使いつぶす予定。

msconfig: それでもまだ遅くなっている場合はスタート>ファイル名を指定して実行>msconfig でシステム構成ユーティリティを起動してスタートアップと サービスから余計なものを取り除けば大抵は元に戻る。分からない人はいじらないように。システム再インストールが必要なまでにコンピュータをおかしくする可能性あります。ググって自信を持ってからか、分かっている人にやってもらうように。

taskmgr: myconfigでの効果のほどは[Ctrl]+[Shift]+[ESC]かスタート>ファイル名を指定して実行>taskmgrでWindows タスクマネージャでパフォーマンスのコミットチャージ(使っているメモリサイズ)が少なくなっていることで確認できる。これが実際の物理メモリよりも大幅に下回っていれば、それほど遅くなることは無い。

zp8497586rq

VMware FusionでWindowsアプリケーションへの関連付け

仕事上Microsoft Officeで作られたWord, Excel, Powerpointがあるので、どうしてもWindows環境は必要。Mac版のMicrosoft Officeを購入しても互換性の問題がどうしても出てくる。しかしVMware Fusionを使用するようになってから完全にMac 1台ですべて済むようになり快適。ちなみにOffice 2007もファイルフォーマットが激変して使う理由が無くなった。古いOffice 2002(Office Xp)かOffice 2003はOffice 2007以降のファイルの読み書きもできるので、これが正解と思われる。

.doc, .xls, .pptのファイルをマニュアルでVMware Fusion内のMicrosoft Officeに関連付けしたいことがあるが、情報がググっても見つからないので記載しておく。

先ずTerminalというアプリケーションをユーティリティの中から起動する。

“open “とタイプした後に、Documents > Virtual Machines > のフォルダの中にある.vmwarevmという拡張子を持つファイルの中から自分が使っているwindows環境を選択してTerminalにドラッグ&ドロップ。半角スペースが一つ最後に入るのでそれを削除した後で”/Applications”と入力して[return]キーを押す。下記のようになるはず。
1290058657025_22fae.png

※ Termial上では半角スペースは”\ “(日本語環境では\の代わりに¥かも)と記載する。
そうすると下記の様にフォルダが開く。[Applications]というフォルダを左側に登録しておく

1290058991035_3c675.png

後は適当な.docファイルを選択後
情報を見る[command]+[I]
「開くアプリケーション」を選択、「その他」を選択(下の図の[TextEdit.app]と書いてある所をクリックして選ぶ)
左側の先ほど登録した「Application」フォルダをクリック
「推奨アプリケーション」→「全てのアプリケーション」に変更
「Microsoft Word – Windows Xp Professional.app」などVMware Fusionの中のアプリを選択
ダイアログを閉じたら、全ての.docファイルがこの設定で開くように
「全てを変更」ボタンを押す。(下図の[Change All…]と書いてあるボタン)

1290060591664_47728.png

これでMac OS上で.docファイルをダブルクリックするとVMware Fusionの中のMicrosoft Officeが起動するようになる。
VMware Fusion 3

子供(小学生)がプログラミングを学ぶには

小学生にプログラミングに興味を覚えてもらい、遊び感覚であっても汎用性のある学習が出来る教育プランを考えてみた。

【背景】

小学生にとっては子供同士で遊ぶこと(人間関係の実感の第一歩!)、基礎体力、音楽(個人的趣味ですが、、)が一番大切なのではと考えている。周囲の子供が小学校低学年から、塾に行きまくっているのを驚いている。しかし、それだけ学習に時間を費やすなら、プログラミングに触れる機会があっても良いのでは。

一般的な小学校の授業でカバーされていないが大切な教育分野の一つにプログラミングがあると思われる。

これは今後数十年、日本で必要とされる頭脳労働のニーズが先ず間違い無く統計処理を必ず伴う分野であり、恐らく次世代を担う子供たちに必須の技能になるかと思われるから。自分の周りで言えば、Genome Project(ゲノムDNAの解析)に大陸を超えてリクルートされた科学者は自然言語の解析をしていた。両方共「情報」を扱う仕事であり、プログラミングの基礎は必須である。私の本職の一部である分子生物学が今明らかにピークを越し、システムバイオロジー的な考え方が生命科学の理解には必要。医学は生命科学に直結し、この停滞した経済の中、ITと医療産業だけは高齢化と相まって、日本国内で圧倒的な右肩上がりの分野になっている。また、この高齢化に対応する医療という分野では日本は宿命的に世界の先駆けにならざるを得ないが、それは成功すれば長期的に武器になる可能性がある。「膨大な情報をどう意味のある形にするか?」その考え方を身につける日本人が増えることは、日本が世界で生き延びるための頭脳労働の鍵の一つに思える。

小学校中高学年ぐらいからプログラミングに触らせる機会を設けて、興味を持った子にはどんどん機会を与えて良いのではないだろうか。ゲーム機よりもハマれば面白い分野である。

子供に対しての教育は「最低限の基礎知識を与えつつ動機付けをする」ことに尽きるように思える。つまり、「やりたい」と思える機会を与えること。 「やりたい」と思えるためには「それで何が出来るのか」がイメージ出来て「自分でもできそう」と感じることが大切。小学生に対してこの目的を達成することが、この教育プランの目的である。

四則演算が何とかなり始めるのが小学校3−4年。その辺りを対象に。

【プログラミング教育プランの私案】

小学4年ぐらいまで:Scratch
引数と戻り値の概念が明確でないが、オブジェクト指向になっている

次のステップ:Ruby + Shoes + Ruby/SDL
やはり小学校高学年程度では目に見えたり耳に聞こえたりすることが大切に思える
ここではObject Oriented Programing(OOP)Classについて学ぶ。ついでに実用の面ではMVCについて

次のステップ:Assembler
ここではサンプルコードを書くぐらいで良いのでは。マシン語とアセンブラレベルでのCPUの挙動を何となく頭に入れる。要はポインタの概念が当たり前になるため。

次のステップ:C
何はともあれ、ここが原点。ここでメモリ管理についてを習得する。

ここまで来ればあとはC++Object-CなどOOPへの移行はRubyでの経験が生きるだろうし、Web方面に走ればPHPが楽だったり、SQL言語が必須になるだろう。Googleのプラットフォームを使いたければPythonNoSQLについて学ぶだろうし、Javaへの移行もCとRubyを習っていれば大丈夫でしょう。いずれにせよ子供は「やりたい!」と思えば後は勝手に本やWebを漁って自分で学習する。

【補遺】

私は職業プログラマでないし、実際に動くコードを書いて利用しているのはMS-DOSのバッチプログラム、PHP+HTML+JavaScript+CSS+MySQLのWebプログラム程度である。上記プランは主にWeb上で言語仕様と周辺状況を勉強してサンプルコードを書いたぐらいで得た感覚より作成したものである。本来は国が教育プログラムに上げるべきだろうが、早くて数年、遅くて数十年公的なカリキュラムに取り入れられるまでにかかるだろう。それまでは、プライベートの機関、あるいは親がそのレールをある程度引いてあげる必要がある。

実際にScratch, Rubyで興味が湧いた子は他のLightweight Languages (Ruby, Python, PHP, Javascript)やJavaなどをいじりながらCに触れることになりタイミングとしては良いように思うがどうだろうか。

将来的にプログラマーを増やすことが大切だとは感じていない。但し、プログラミングが理解できるSE的な思考回路を持った人材は豊富に必要だと思われる。官僚が分子生物学を理解していないために、日本はかなり国益を損じたと感じているが、同じことがプログラミングにおいて起きやしないか多少心配である。プログラマー、教育者、その他の方々から忌憚ない御意見を伺えれば幸いである。

【次のステップ】

小学生向けの高品質のサンプルプログラムとチュートリアル、つまり「教科書」が欲しい。誰がどこで作るインセンティブがあるだろうか。

【参考】

Scratch: MITで考案された。日本の文科省が今年プログラミンという形でウェブアプリとしてパクったが、英語に馴染めるなら最初からScratchの方が良いし、コンテンツも充実している。
スクラッチアイデアブック―ゲームで遊ぶな、ゲームを作ろう! ゼロから学ぶスクラッチプログラミング

Ruby: 日本人である まつもと ゆきひろ さんにより開発され、世界的に評価を浴びている 。OOPが自然に身につく上、何と言うかバランスが美しい。
初めてのRuby

Shoes: RubyでのGUI(Graphic User Interface)プログラミング環境。Shoesはマイナーだと思われるし、まだ実際に使用していないので合間を見てやってみようかと思っている。四則演算ぎりぎりの子供に対してScratchの次のステップとしての提供物が難しい。

Ruby/SDL: RubyからSDLを利用できるようにするため、つまりゲームなどを作るためのライブラリ。Shoesよりはこちらの方が小学生には受けそうだが、どうだろうか。ここで速度が欲しくなり、Cに興味を持ってもらえれば思惑通りだが。次のシステムをインストールすれば、テキストファイルを一枚書き換えるだけで簡単にプログラムを作成し、実行ファイルの形で他の人に配布できます(Windows版Mac版)。

Object Oriented Programing (OOP): ググッてください。分かる人には一行で説明できますが、分からない人への一行はひたすら抽象的な無意味な文になります。一般性が高く、早めに身につけて良い概念だと思え、Rubyというのは自然にそのような考え方をしやすくなる言語に思えます。

MVC (Model-View-Controller): プログラムをModel, View, Controllerという3パートに分けて考え、構築する概念。

Assembler: Assemblerレベルよりももっと原始的なレベルにまで話は落とせると思うが、Cのポインタを理解すれば、それより下部構造に関してはUserではなく、コンピュータの専門家に任せるか必要な際に学べば良いと思います。ここでは義務教育に将来的に取り入れられても良いような教育プランに関して考えています。

C: この言語を素通りは出来ないと思われる。Assemblerというコンピュータに理解しやすく、人間にはまるで理解しにくい言語から、一歩人間側に寄り添った言語。それ故、OS(UNIX)や上記の様々なコンピュータ言語(Ruby, PHP)など、基礎的なプログラムのかなりがこのC言語で記載されている。
やさしいC 第3版 [やさしいシリーズ]

インド: 小学校低学年からパソコンを使い始め、小学校の高学年(12歳)になると、プログラミングが出来るようになる。

zp8497586rq