コンピュータサイエンティストのように考えよう(3)

さて、前問を拡張して以下のように問題を考える。

整数値が三つあり、先の二つの整数の和と第三の整数との加法、減法、乗法、除法を表現することを考える

表現1


a<-3     整数値を入れる箱を用意しaというラベルを貼る。そして3を入れる
b<-2    整数値を入れる箱を用意しbというラベルを貼る。そして2を入れる
c<-5
(a+b)+c?    
(a+b)-c?
(a+b)Xc?
cが0ならば
    cが0です!
そうでなければ
    (a+b)÷c?

括弧は演算の優先順序が高いことを示す。
表現2


a<-3     整数値を入れる箱を用意しaというラベルを貼る。そして3を入れる
b<-2    整数値を入れる箱を用意しbというラベルを貼る。そして2を入れる
c<-5
t<-a+b   整数を入れる箱を用意しtというラベルを貼る。a+bの結果をしまう。
t+c?    
t-c?
tXc?
cが0ならば
    cが0です!
そうでなければ
    t÷c?

このようにすると無駄な計算をしないで表現できる。
 

コンピュータサイエンティストのように考えよう(2)

前の問題をより汎用性を高めるために、例外があるかどうか考える。

整数3と整数2の加法、減法、乗法、除法を表現することを考える:

表現1


a<-3     整数値を入れる箱を用意しaというラベルを貼る。そして3を入れる
b<-2    整数値を入れる箱を用意しbというラベルを貼る。そして2を入れる
a+b?    ラベルaの箱にある整数とラベルbの箱にある整数の和は?
a-b?
aXb?
a÷b?

bの値が0であるときである。このときa÷bは問題となる。それを指摘し計算はしないとしよう。
表現2


a<-3     整数値を入れる箱を用意しaというラベルを貼る。そして3を入れる
b<-2    整数値を入れる箱を用意しbというラベルを貼る。そして2を入れる
a+b?    ラベルaの箱にある整数とラベルbの箱にある整数の和は?
a-b?
aXb?
bが0ならば
    bが0です!
そうでなければ
    a÷b?

表現2では例外の扱いもしてありより汎用性が高いものとなっている。

コンピュータサイエンティストのように考えよう(1)

プログラミング教育で最初に考えなければならないことは何か?

「それは順序立てて物事を表現する」ことであると思われるが、この表現に汎用性があることが大事である。この汎用性のある表現をアルゴリズムという。

例えば整数3と整数2の加法、減法、乗法、除法を表現することを考える:

表現1


3+2?
3-2?
3X2?
3÷2?

そして3が5に、2が4になったときには


5+4?
5-4?
5X4?
5÷4?

と表現できる。

この表現では最初の数値を変えたときは全てを書き直す必要がある。

表現2


a<-3     整数値を入れる箱を用意しaというラベルを貼る。そして3を入れる
b<-2    整数値を入れる箱を用意しbというラベルを貼る。そして2を入れる
a+b?    ラベルaの箱にある整数とラベルbの箱にある整数の和は?
a-b?
aXb?
a÷b?

この表現では最初の数値を変えたときは、その部分の変更だけで済む。

汎用性が増したことになる。

 

 

MicroBitを使ってみる(3)

今回は音を出してみた。スピーカーが必要だが今回は梅沢無線で購入した圧電スピーカー(二個で170円)を使った。MicroBitはアナログ・デジタル変換によってデジタル信号をアナログに変換して出力するポートを3つ持っている。今回はp0ポートを使った。

MicroBitにつないだ圧電スピーカー

使ったプログラム:


import music

while True:
    music.play(music.PYTHON)
    #music.play(music.BADDY)

music.PYTHONはMicroBitに登録されている音サンプルで、モンティ・パイソン(Monty Python)のテーマ曲でそれを繰り返す。圧電スピーカーは低音はブザーのようにしか聞こえないが高音はそれなりに聞ける。

 

南北朝時代と日本の宗教

海と列島の中世」(網野善彦著)によれば、日本の歴史において南北朝の動乱は非常に大きな契機でこれを境に日本の社会のあり方が大きく変わったという。その一つが宗教の役割である。この動乱を通して「聖なるもの」の価値が失墜する。その「聖なるもの」の一つが仏教であった。律令制を背景にした奈良仏教は天皇の権威の失墜と共に失墜し、新しくおきた「鎌倉仏教」は時代とともに世俗の権力によって押さえ込まれてしまう。

こうして日本は宗教が殆んどない時代になる。

MicroBitを使ってみる(2)

今回はボードに搭載されている磁気センサーを使って方位の検出をしてみた。ボードのmicroUSBの端子がある方向を北に向けるとセンサーからの値は0になり、反対側を向けると180になる。つまり反時計回りに0から360までの値をセンサーは取る。

プログラムはボードの向く方向に拘わらず表示板(5X5のled)に北の方向を示す矢印を表示するといったプログラムである。


from microbit import *

#compass.calibrate()

dd = [Image.ARROW_N, Image.ARROW_NW, Image.ARROW_W,
        Image.ARROW_SW, Image.ARROW_S, Image.ARROW_SE, 
        Image.ARROW_E, Image.ARROW_NE]
a0 = 45 // 2
a1 = 360 - a0
while True:
    n_index = 0
    head = compass.heading()
    print((head,))
    if (head > a0) and (head < a1):
        n_index = ((head - a0)) // 45 + 1
    display.show(dd[n_index])
    sleep(100)
    

実行例を画像で示す。ボードは南東を向いて配置されているが、矢印は北を向いている。

「北」の方向を指す矢印

このpyhtonプログラミングでは初期に実行時のエラーがあったがこれを見つけるのに苦労した。実行時のエラーがあるとMicroBitは停止するがそれ以外の情報はない。随所にprint文を入れて変数の値を調べることが唯一の対処法である。

MicroBitを使ってみる

写真のようにMicroBitをmicroUSBを使ってPC(windows7)に接続してPCからPythonプログラムを転送しそれをMicroBitで実行するという手順である。PC側ではMuと呼ばれるエディター(むしろ統合環境)を使った。Muという統合環境ではPythonプログラムの編集、シンタックスチェック、プログラムのMicroBitへの転送ができる。

プログラム実行中のMicroBit。ボードが右に傾いているので”R”を表示。

さらにインタープリタモードでPythonのコマンドを実行することもできる。このモード(REPLと名前がついている)に入ると転送したプログラムは一時停止した状態になる。このモード画面をprint文の出力画面にも利用できる。そのばあいにはMicroBitの裏面にあるリセットボタンを押し、一時停止していたプログラムを実行させる(リセットの操作が面倒)。

例として使ったプログラム:


from microbit import *

while True:
    reading = accelerometer.get_x()
    sleep(20)
    print((reading,))
    if reading > 120:
        display.show("R")
    elif reading < -120:
        display.show("L")
    else:
        display.show("-")

加速度センサーでボードの傾きを検出し、左右(”L”、”R”)を表示する簡単なプログラムである。プログラム中のプリント文print((reading,))はインタープリタモード画面やMuが持つプロッタ機能のためである。プロッタ機能は繰り返しの出力(出力形式はタプルである。一つのみの値をタプルにするには(x,)とすればよい)をグラフ化する。このプロッタ機能は便利である。

実行中の画面

Muのプロッタ機能(縦軸はセンサーからの値、横軸は回数)

国府と都市

海と列島の中世」(網野善彦著)を読んでいて律令制の下で各地に国府がおかれることになるが、この古代から中世にかけての国府と近世に発達する都市との関係が面白いと思った。

同書によれば著者の生まれ故郷である甲斐の国では国府の置かれた場所は諸説あってはっきりしないが、国府を支配していたのは三枝氏といわれる豪族であった。しかしこの三枝氏の勢力が弱くなって国内が荒れ、これを取り締まるために都から派遣されてきたのが追討使に任じられた源頼信で、これが甲斐源氏に繋がる。甲斐の「河内」地方が支配地域で山梨県の南地方である(例の「南部」もここに含まれる)。

武田氏もこの甲斐源氏の流れを汲むもので、信濃の攻略を視野にいれたことでこの南部より北に位置する甲府を本拠地としたのであろう。

筆者の住む陸奥の国では、国府は多賀城にあった。塩釜湾に近く海運に便利であったことがここに国府を置いた理由のように思われる。出羽の安倍氏の勢力が陸奥の国で強くなり、この国府は廃れてしまったと思われる。「前九年の役」「後三年の役」の動乱を経て、奥州藤原氏の勢力が確立する。平泉が奥州の中心になる。衰退したが、この多賀城は南北朝あたりまで機能していたと思われる(例の北畠亜顕家もここに赴任していた)。

鎌倉時代になると、頼朝による「奥州征伐」により藤原氏が崩壊、奥州には多数の御家人が分立することになる。伊達家もその一つだったのかもしれない。この分立する支配権を一つに纏め上げたのが米沢の伊達氏であった。米沢よりもっと奥州の中心に近い岩出山に進出するなどして、最終的には仙台を本拠地とした。

都市の形成の歴史を考えるのは結構面白いと思った。

Micro BitとPython

Micro Bitは英国BBCを主体として開発された教育用のmicro-computerボードである。この製品の主な仕様は以下のようである:

  • MCU:32 bit ARM Cortex M0ベース Nordic nRF51822
    • 動作周波数:16 MHz
    • RAM:16 KB
    • BLE搭載
  • LED × 25個(明るさセンサとしても使える)
  • ボタンスイッチ × 2個
  • 加速度センサ × 1個
  • 磁力センサ × 1個
  • バッテリーコネクタ × 1個(JST製PHコネクタ2ピン)
  • サイズ:43 × 52 × 11 mm(コネクタ部含む)
  • 重さ:9 g

つまり独自にmicro-computerを搭載し、周辺装置として25個(5X5)のLED、加速度センサー、磁力センサーを持っている。プログラムによっては25個のLEDで文字を表現することもできるし、加速度センターの値を読むことでこのボードの水平からの傾き、磁気センサーで方向を知ることもできる。

プログラムは別のPCで開発しUSBを通じてこのボードに転送する。電源が別途あればUSBを外しても転送されたプログラムは実行される。

このボードにはPythonインタープリタを移植することができる。つまりPythonでプログラミングをすることができるようになっている。

面白いボードであるが、中学生高学年あたりがコンピュータやプログラミングについて学習するのに適しているかなという印象をもった。

 

千葉・習志野:火球・隕石の確認

7月2日に未明関東一円で目撃された火球の落下場所から隕石が見つかったという記事が今日の新聞に載っていた。

国立科学博物館が発表したもので、7月2日午前2時半ごろに千葉・習志野のマンション二階で大きな音がして、朝になって住民が共用廊下に石が落ちているのを発見。さらに中庭でもう一つの石を発見した。

博物館がこの石の調べたところ宇宙線で生成される放射性物質が検出されこの石が宇宙由来であることわかり、かつこの放射性物質の半減期の測定からこの石がごく最近のものであることもわかった。それらの二つの石は63グラムと70グラムあったが、きれいに合わされるので一体のものであったこともわかったという。

写真はここ

目撃された火球に関連する隕石と見られている。