bitterharvest’s diary

A Bitter Harvestは小説の題名。作者は豪州のPeter Yeldham。苦闘の末に勝ちえた偏見からの解放は命との引換になったという悲しい物語

2015-01-01から1年間の記事一覧

オイラー・プロジェクト紹介

1.猛暑の過ごし方 地球温暖化の兆候なのだろうか今年の夏はとても暑い日が続いている。その日の最高温度が35度を超えると猛暑日と呼ばれるが、東京では、7月31日から8月7日までの8日間連続で猛暑日を記録し、これまでの記録を更新した。オーストラ…

Netwireでゲームを作成する(13)

16.グラフィックスを含めて完成させる 前回までの記事で、ピンポン玉をラケットで打つ処理の部分までを完成させたが、グラフィックスの部分が完成していなかったため、ゲームそのものを楽しむことはできなかった。今回は、グラフィックスの部分を実装し、…

Lego BotsをHaskellで動かす-Netwireに実装する(1)

5.Netwireに実装する システム図ができたので、その要素をWireとして定義すればよい。上の図で、ストックは、運動量、フローは力積であった。運動量の不足と過剰(ライントレースカーが黒い線から外れようとしている)を知らせてくれるのが光センサであっ…

Lego BotsをHaskellで動かす-ライントレースカーを分析する

3.ライントレースカーを分析する 今回開発するのは写真のようなライントレースカーである。 このライントレースカーは二つの光センサを有している。これらの光センサの間には導線となる黒い線が引かれている。ライントレースカーが正常に動いているときは…

Lego BotsをHaskellで動かす-システム思考

2.システム思考 レゴロボットの動作はそれほど複雑ではないが、すぐに、プログラミングができるほどには単純ではない。プログラムを開発するときは、仕様作成、設計、実装、検証、評価の手順を辿る必要がある。これから開発するロボットは、とても簡単で、…

Lego BotsをHaskellで動かす-ロボットの作成

1.ロボットを作成 今年は、梅雨に入ってから、殆ど晴れ間を見ることがなかったが、一昨日と昨日は、東京は猛暑に襲われた。この両日、講義もなく、会議も設定されていなかったので、一昨日、早朝の散歩を済ませた後、涼を求めて、天城高原に車を走らせた。…

HaskellでLegoのモータとセンサをRaspberry Piを利用して制御する

1.GitHubに掲載 BrickPiをHaskellから利用するための外部関数インタフェースを完成させると、HaskellからLEGO社のモータやセンサが使えるようになる。外部関数インタフェースとC言語でのプログラムはこの記事で掲載するのには無理なほど大きなサイズになっ…

HaskellでLego Mindstormsを制御する(2)

3.外部インタフェースを作成する BrickPiを介してRaspberry PiからLego Mindstormsを、Haskellで制御する方法を検討してきた。これまでに実装方法として次の二通りあることが分かった。1) C言語の開発環境では、BrickPi.hというヘッダー・ファイルを用意し…

HaskellでLego Mindstormsを制御する(1)

1.制御方法 BrickPiの機能がだいぶ分かってきたので、これまでに得た知見をもとにHaskellでBrickPiを使えるようにする。C言語での開発環境は次の図のようになっている。 BrickPi側の方は、ハードウェアとそれを制御するファームウエアで構成されている。Ra…

Raspberry PiからLego Mindstormsを使用できるようにする―BrickPiの解剖(2)

2.モータ駆動のためのUARTプロトコール作成プログラム 前回の記事で、Raspberry PiからBrickPiへモータを駆動するときのUARTプロトコルが判明したので、ここでは、そのプログラムを作成する。UARTプロトコルの作成で面倒くさいのは、ビット操作が入ること…

Raspberry PiからLego Mindstormsを使用できるようにする―BrickPiの解剖(1)

1.BrickPiは少し賢い Lego Mindstromsを用いてロボットを作成しようと思うが、Lego Mindstormsに付属しているパソコンNXTあるいはEV3では自由にシステムを作成できない。そこで、Raspberry Piを用いて、Lego Mindstormsを制御することにした。しかも、C言…

Raspberry PiからLego Mindstormsを使用できるようにする―準備

1.Raspberry PiにBrickPiを搭載する Raspberry Piの特徴の一つは、外部の周辺機器との接続が簡単なことである。モータをつけることで動くものを作成できるし、さらに、センサをつければ検知も行えるようになる。一方、Lego Mindstormsには、Legoのブロック…

Netwireでゲームを作成する(12)

15.ラケットでピンポン玉を跳ね返す問題の解 Netwireの紹介で、最初に与えた問題は次のようになっていた。問題:Netwireで次のゲームを実現しなさい。仕様:ピンポン玉が空中に投げ出されたとする。この時、ピンポン玉が落ちないように、水平に移動するラ…

Netwireでゲームを作成する(11)

14.壁面で跳ね返す 前回の記事の四角いボックスは、キーが押された時、x軸に沿って等速度で左あるいは右に移動した。しかし、側面に壁がないため、いくらでも左あるいは右に進むことができた。この単純なゲームを、もう少し現実的なゲームにするため、両…

Netwireでゲームを作成する(10)

13.ボックスを動かす ここでは、四角いボックスを左右に動かす単純なゲームの作成方法について記述する。ゲームは時間とともに進行していく。Netwireでゲームに登場してくるものの振舞いは、Wire型の値で定められている。ゲームが進行する中で、値が変化…

Netwireでゲームを作成する(9)

12.キーボードからのイベント 前回、前々回の記事では時間に関するイベントについて記述したが、ここでは、キーボードを操作したときのイベントについて説明する。キーボードからのイベントの処理の仕方は、どのグラフィックスAPIを用いるかによって異な…

Netwireでゲームを作成する(8)

11.アロー記法 wireは、入力aを受けて、出力bを出すことで、その振る舞いを表しているが、前の記事では、入力aの存在が分かりにくかったので、wireの本質をとらえにくかったかもしれない。そこで、ここでは、前の記事で用いたプログラムを等価なアロー記…

Netwireでゲームを作成する(7)

10.Netwireの概要 振舞いは次のように定義した。 newtype Behavior t a b = Behavior { stepBehavior :: t -> a -> Maybe (b,Behavior t a b) } netwireではデータ型Wireによって振舞いを次のように定めている(5.0以前のNetwireでは、これまでの説明と同…

Netwireでゲームを作成する(6)

9.抑制(Inhibition) Netwireを特徴づけている機能の一つは、inhibitionである。この単語のhibitの部分は、ラテン語のhabitで「つかんだり持ち続けたりすること」を表している。接頭語のinは「中に」を表す。例えば、心理学では「ある心理的機能が他の心理…

Netwireでゲームを作成する(5)

8.各圏へのインスタンス化 前回の記事で、振舞いを次のように定義した。 newtype Behavior t a b = Behavior { stepBehavior :: t -> a -> (b,Behavior t a b) } この段階では、型として定義しただけなので、いろいろな性質を持たせるために、必要な型クラ…

Netwireでゲームを作成する(4)

6.関数型リアクティブ・プログラミング 関数型リアクティブ・プログラミングを特徴づけるのが、スイッチである。これに関してはYampaの記事でいくつか取り上げた。ここでは、最も簡単なスイッチを用いて、Netwireではどのように実現するのかを説明する。ス…

RaspberryPi でHaskellを使う

1.Raspberry Pi Raspberry Piは、一番最初の頃のユーザーなのだが、その後、長いことご無沙汰だった。先日、ベトナムで酪農業の支援をしているコンサルタントの方と話をしているときに、地中、地表、地上のあちこちにセンサーを設けて、様々なデータを収集…

Netwireでゲームを作成する(3)

5.スイッチ イベントの発生により、振舞いは変化する。例えば、ボールを床に落下させると、床にぶつかって、ボールは跳ね返ってくる。このような状況を記述するために、関数型リアクティブ・プログラミングではスイッチを用いる。スイッチの型シグネチャは…

Netwireでゲームを作成する(2)

4.イベント イベントも振舞いと同じように型で表す。即ち、tという時間にeというイベントが発生したとき、 newtype Event t a = Event { getEvent :: (t,a) } というデータ型で表す。これは、振舞いを定義したBehaviorの型と比較するとよく似ていることが…

Netwireでゲームを作成する(1)

1.問題 最初からいきなり問題である。問題:Netwireで次のゲームを実現しなさい。仕様:ピンポン玉が空中に投げ出されたとする。この時、ピンポン玉が落ちないように、水平に移動するラケットで反射させなさい。また、左右には壁があるものとし、ピンポン…

デカルト圏論(応用)

1.型付きラムダ計算 バークレイの修士課程の学生だったころに、後にチューリング賞をとることになるM. Blum教授から"Theory Of Algorithms"の講義を受けた。日本の講義と比較すると、バークレイの先生たちの多くは、系統だってわかりやすく説明してくれる…

デカルト閉圏(理論)

錦織圭が世界の4強に肉薄するような強さを発揮してくれているためだと思うが、テニスの実況中継が格段と増えた。このため、居ながらにして、一流の選手たちが見せてくれる華麗なプレーを楽しむことができる。この数か月、南ヨーロッパでの戦いが続いている…

メバルの白ワイン蒸し

外国人観光客の増加が目覚ましいというニュースを耳にすることが多くなった。日本人にとっては観光地であるが、これといった名所もないようなところまでは、外国人が訪問することはないだろうとこれまで高をくくっていた。しかし、それを覆すような事態を先…

サラダたまねぎとトマトと生ハムのマリネ+ラム・ステーキ

桜の時期が過ぎたころの楽しみは、水俣から届くサラダたまねぎである。この地がサラダたまねぎの発祥の場所なのだが、すがすがしさを感じるこの時期、瑞々しい味を伝えてくれるのが水俣からのサラダ玉ねぎである。日本の産業が高度に成長した時期、水俣はそ…

Haskellで学ぶ圏論・入門編 写像で扱うことの利点(3)

アントレプレナー(entrepreneur)は、元々は、フランス語である(フランス語での発音はアントルプルヌール、古いフランス語ではentreprendre)。企業家、実業家と訳されることが多いが、その語源はenとghendで、enはbetweenを、ghendはtakeを意味する。日本語…