僕は発展途上技術者

「勉強しかできないバカにならない方法」- フジテレビ「全力教室」の茂木健一郎氏の回をみての感想

フジテレビ「全力教室」の茂木健一郎氏の回を観た。


「勉強しかできないバカにならない方法」というテーマの元に、現役東大生たちを相手に授業を行う。授業前のインタビューで、「一発、やってやりたい。彼らが持っているプライドを申し訳ないけれど、ズタズタに壊したい!」


» 講師に、茂木健一郎が登場!現役東大生たちを相手に、熱血授業を展開!『全力教室』

テレビで久々に心動かされた内容でした。

僕自身、筑波大学附属駒場 -> 東大 という絵に描いたような偏差値教育を体験してきて、「勉強しかできないバカ」というのは非常によく分かるところ。

「勉強しかできないバカ」というのは、ペーパーテストで判定可能な決まりきった問題を解決する処理能力はめっぽう強いが、それに比してテストでは優劣を判定できない想像力だとか創造する力が著しく低い、ということを指していると思っている。

入社した会社はそこそこ大きく、新人研修は約一年間おこなわれ、たとえば英語研修ならばTOEICで評価される。「択一式の答えの正解の部分がボーッと光るように見える」などと冗談を言っていたくらい、ペーパーテストは得意中の得意。業務が始まっても、新人の頃というのは決まりきった仕事しかしないので、そつなくこなせていたと思う。

でも偏差値教育の効果が発揮されたのはここまで。

その後、アメリカに本社を持つソフトウェア会社の日本支社に転職、そのソフトウェアの会社のアメリカ本社に転籍、ITベンチャーに転職、独立、と僕の人生が進んでいき、解き方が決まっていない問題ばかりの世界になっていくと、自分なんてほんと大したことないなと、すごい奴なんてゴロゴロいる、という感覚を持つようになった。

自分が通ってきた道に反して、来年中学生になる長男には中学受験はさせず近くの公立中学校に通わせる。旅人算や時計算、ニュートン算なんかよりも、Scratch(MITが開発した教育用プログラミング言語) をやったり、合気道やサッカー、キャンプしたり、ボルダリングをやったりというほうが大事だと思っているからなのだが、これがなかなか勇気が必要だったりする。まわりのこどもたちは塾に通っていたり、あるいは僕の親からは心配される。

「こどもたちは将来ますます解き方がわからない問題ばかりに直面する。それゆえに中学受験から始まる偏差値教育には問題がある」という強い信念を持ち続ける必要があるのだが、まさにその部分を「全力教室」の茂木健一郎氏が力強く擁護してくれたように思う。

「Googleが日本のIT教育支援、5000台のRaspberry Piを提供へ」に対してもやっと感じていること

いま Raspberry Pi が熱い。


「これが、日本が変わる第一歩になる」(Google会長 Eric Schmidt氏)---Googleは2013年10月29日、日本のコンピューターサイエンス教育を支援するプロジェクト「コンピュータに親しもう」を開始すると発表した。ワンボードコンピュータ「Raspberry Pi」(関連ページ:ITproまとめ - Raspberry Pi)を5000台提供、NPO法人CANVASと協力し、1年で2万5000人以上の児童・生徒の参加を目指す。


» Googleが日本のIT教育支援、5000台のRaspberry Piを提供へ、Schmidt会長も“授業”より

これ自体はとてもいいニュースなんだが、何かこうもやっとしたものをずっと感じているのでそれを書いてみたい。

Raspberry Pi 標準の OS の Raspbian に始めから入っている Scratch とセットで語られているので、よくわかっていない人には「簡単に始められる」という印象を与えてしまいがち。しかし「簡単にできますよ」とはどこにも書かれていないし、実際簡単ではない。

Scratch は簡単(小学生低学年でもできるという意味での簡単ということです)というのはまあ一度でも触ったり、それを使いこなすこどもを見たことがあれば同意できると思う。でも Raspberry Pi は、しばらく実際に触ってみたが、僕でもてこずる。

なにせ購入してすぐ起動してみたが、ディスプレイに画面を映すことができず3ヶ月くらいは放置していたほど。

仮に熱心な親がこどものためにと思って Raspberry Pi を買ったとして、Scratch でもなんでもいいが起動できるところまで到達できるかは微妙。ただ、そこで親が投げ出したあと、「これ、好きにしなさい」とこどもに丸投げしたあとがチャンスといえばチャンス。

そこから自力で、環境を整え Raspberry Pi を自在に操ることができるようになったこどももきっと現れるはずで、その子はもうそのままスーパープログラマーへ一直線。Google でもどこでもやっていけるくらいになるだろう。

以下を読めばシュミット氏はそのあたりわかっていそう。100人に1人かあるいは1000人に1人かはわからないけれど、何人かはGoogleに入れる級のエンジニアに育てばいい、とも読める。


追記

その場にいた阿部先生からの指摘を受けました。シュミット氏もそんなに乖離していたわけではないとのことですが、この発言自体は日本法人の広報部長のものだそうです。なおシュミット氏の見解についてはこちらが参考になる -> https://plus.google.com/u/0/+EricSchmidt/posts/J4KT3Wy6gmy





じゃあそうでない人には意味がないかというと全くそういうわけじゃなくて、結局いつも最後はこういう結論になっちゃうんだけど、ちょっと楽しそうだなと興味を持ったらやったらいいんじゃないかと思う。実際楽しいし。

僕が小中学生のときには50万近くもしたから自分のパソコンなんて買おうとも思わなかった。でも Raspberry Pi は 30 ドルぽっちなんだから。

Mac OS X Mavericks にアップデートしたら bcrypt-ruby gem がインストールできなくなったときの対処法

brypt-ruby に限らずだと思うのだが、Mavericks にアップデートし、bundle install で


Installing bcrypt-ruby (3.1.1)

Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.


というエラーがでたときの対処法。

» error: failed to build gem native extension when installing rails on mac mountian lion os

によれば gcc-4.2 が /usr/bin にないからだ、とのこと。


# brew update
# brew install apple-gcc42
# sudo ln -s /usr/local/bin/gcc-4.2 /usr/bin/gcc-4.2


をおこなってから再度 bundle install でうまくいった。

Mavericks は無料になったけれど、OS のアップデートをすると、たいがい2、3日はそれまで動いていたものの修復に追われるので、人件費考えると依然高い。



Raspberry Pi で自動でデスクトップを起動し、さらにスクラッチの特定のプロジェクトを開く方法

Raspberry Pi で

1. 自動でデスクトップを起動する
2. 自動でスクラッチを起動する
3. 自動でスクラッチの特定のプロジェクトを開く

の 1 あるいは 2 の方法は調べるといくつか方法がみつかるのだが、3 まで実現できる方法がなかなかみつからない。

いろいろ試行錯誤した結果、以下の方法が一番簡単で確実だと思う。


# sudo raspi-config


を実行し、 3. Enable Boot to Desktop/Scratch を選択、次の Chose(typo??) boot option のメニューで、2番目の Desktop Log in as user 'pi' at the graphical desktop を選ぶ。

これで一旦 raspi-config を抜ける。まだ設定すべきことがあるので、抜けるときは reboot をしないで抜けること。

これで 1. の「自動でデスクトップを起動する」はクリア。

残りを実現するには、


# sudo vi /etc/xdg/lxsession/LXDE/autostart


で autostart の中身を以下の通り編集する。


@lxpanel --profile LXDE
@pcmanfm --desktop --profile LXDE
@xscreensaver -no-splash
@scratch presentation /home/pi/myproject.sb <-- この部分を追加


/home/pi/myproject.sb は起動したいスクラッチのプロジェクトファイル。

これでデスクトップを起動した直後、スクラッチをプレゼンテーションモードで開き、特定のプロジェクトを開くことができる。

Raspberry Pi の Minecraft(Minecraft Pi)の画面のスクリーンショットを撮る方法

Raspberry Pi の Minecraft(Minecraft Pi)の画面は、ハードウェアアクセラレーションを使ってるとかで、通常の方法ではスクリーンショットを撮ることができない。

imagemagick の import コマンドを使ったり、フレームバッファからスクリーンショット画像を取得する fbgrab などを試してみたのだがうまくいかない。Minecraft の画面だけ真っ黒になってしまうのです。

で、たどりついたのが、

raspi2png

この raspi2png を使ってみたところ Minecraft の画面も含め、ちゃんとキャプチャすることができました。



インストールの手順は以下のとおり。


# cd [any folder]
# wget https://github.com/AndrewFromMelbourne/raspi2png/archive/master.zip
# unzip master.zip
# cd raspi2png-master
# sudo apt-get install libpng12-dev
# make





# ./raspi2png


を実行すると、snapshot.png というファイルに全画面のキャプチャが保存される。

raspi2png のオプションについては、https://github.com/AndrewFromMelbourne/raspi2png の README を参照してください。

この話題は Raspberry Pi のフォーラムにもあがっていたので、リプライを残しておきました。

» Minecraft & Raspberry Pi

OS X Mavericks にアップデートしたら Vagrant が起動しなくなった場合の対処方法

OS X Mavericks にアップデートしたところ、Vagrant が起動しなくなった。


% vagrant up

(途中略)

[default] Clearing any previously set network interfaces...
There was an error executing the following command with VBoxManage:

["hostonlyif", "create"]

For more information on the failure, enable detailed logging by setting
the environment variable VAGRANT_LOG to DEBUG.


» Fixing Vagrant after an OSX Mavericks update

を参考に


% sudo /Library/StartupItems/VirtualBox/VirtualBox restart


で解決。

Scratch で Minecraft を動かす(その2) - Scrath と Minecraft をつなげよう

Scratch で Minecraft を動かす方法を何回かに分けて解説していきます。

前回のエントリーは、

» Scratch で Minecraft を動かす(その1) - Raspberry Pi なしで Minecraft API を使ってプログラミング

です。

[2016/2/21 追記] 現在 CraftBukkit はメンテナンスされなくなっており、下記リンク先からはダウンロードはできないのですが、アーカイブなどを保存しているサイトが他にあります。あくまで自己責任でこれらからダウンロードして利用する方法を含め、他の手順についても詳しく次の YouTube 動画で紹介されていますので良かったら参考にしてください。 → 6歳からのプログラミング #1 〜minecraft×scratch〜 CraftBukkitとRaspberryJuice

scratch2minecraft をダウンロード



Scratch と Minecraft をつなぐブリッジプログラム scratch2minecraft を書いたので、それをダウンロードします。

作業フォルダ(~/python)以下で


git clone git@github.com:champierre/scratch2minecraft.git


と実行してソースコードをダウンロードしてください。

git が使えない方は https://github.com/champierre/scratch2minecraft の右下の Download ZIP ボタンを押してダウンロードできる scratch2minecraft-master.zip を解凍してください。

なお scratch2minecraft はまだ絶賛開発中です。いまのところマインクラフト内のプレイヤーを任意の位置に移動させるのと、任意の位置にブロックを作ったり消したりしかできないですが、順次できることを増やしていくつもりです。

minecraft api のフォルダ mcpi をコピーする



前回のエントリーで用意した mcpi フォルダを scratch2minecraft フォルダ以下にコピーします。

mcpi は ~/python/minecraft 以下にあると思うので、ターミナルより


cp -r ~/python/minecraft/mcpi ~/python/scratch2minecraft/


と実行することで、コピーできます。

Scratch から Minecraft へ Hello World



いよいよ Scratch と Minecraft とをつなげてみます。

起動していなかったら、CraftBukkit サーバーを起動し、Minecraft を CraftBukkit に接続します。(前回のエントリー参照)

Scratch を起動し、遠隔センサー接続を有効にします。



scratch2minecraft のフォルダに移動し、


python main.py


を実行して、 scratch2minecraft を起動します。

このとき、Scratra -> Connected と表示されれば Scratch との接続成功ですが、Scratch で遠隔センサー接続を有効にし忘れたり、あるいは Scratch を起動する前に scratch2minecraft の方を先に起動してしまったりすると接続に失敗して無反応となってしまいます。

その場合は Ctrl + Z で suspend させてから、


ps auwx | grep main.py


で main.py のプロセス番号を調べて、そのプロセス番号を kill してからやり直してください。

接続が成功していれば、Scratch から Minecraft にメッセージを送ることができます。

Scratch で「hi を送る」ブロックを作り、クリックしてみましょう。



Minecraft のチャットウィンドウに hi minecraft と表示されれば成功です。



Scratch からの命令でブロックを積み上げる



次に Scratch からの命令でブロックを一つ置いてみます。

「setBlock を送る」ブロックを作り、クリックしてみましょう。



すると、プレーヤーが立っていた場所にブロックが一つ置かれます。

今度は、塔の形になるようブロックを縦に積み上げてみましょう。

その前に Minecraft の世界の座標系について簡単に説明しておきます。Minecraft の世界では平面上の位置はx軸とz軸との座標で表され、高さはy軸の値で表されます。たとえば、x=0 y=0 z=0 の位置にブロックが置いてあったとして、そのすぐ上にブロックを置きたければ x=0 y=1 z=0 の位置にブロックを置きます。そのすぐ真上に置きたれば x=0 y=2 z=0 という具合です。

つまり、縦にブロックを積み上げたければ、y の値をどんどん大きくしていきながらブロックを置き続ければいいのです。

さきほど Scratch からブロックを置くときには、「setBlock を送る」をおこなっただけでしたが、その前に Scratch の変数の x、y、z に値をいれれば、指定された値の座標にブロックを置くことができます。

座標を指定しながらブロックを積み上げるとして、まずはプレーヤーが今いる場所の座標を知っておく必要があります。

「getPos を送る」とプレーヤーの現在位置の座標がチャットウィンドウに表示されます。





x=24 y=8 z=13 ということなので、その場所にブロック100個分の高さの塔をつくるには、以下の通り Scratch でプログラムを組みます。

ここで少し注意が必要なのですが、「setBlock を送る」の後に少しの時間待つようにしないとうまく命令を送ることができません。ここでは「0.1秒待つ」のブロックを置いています。



実行してみましょう。

一瞬のうちに塔が。。



あまりに高いので少し遠くから眺めます。



手作業で積み上げるよりもずっと楽です。

ここまでの一連の作業を動画で記録しました。



次のエントリーではもう少し複雑なプログラムを作ってみます。

Scratch で Minecraft を動かす(その1) - Raspberry Pi なしで Minecraft API を使ってプログラミング

これから何回かに分けて Scratch で Minecraft を動かす方法を解説します。

まずは Mac 上で Python で動かすまでです。

API がオープンになっていて、Python でプログラミングできるのは Raspberry Pi 版の Minecraft のみなのですが、調べてみたら MOD を使うことによって Raspberry Pi 以外でもできることがわかりました。

» Running Python Programs without a Raspberry Pi…

に書かれているままではあるのですが、英語であるのと、あちこちリンク先の情報を参照しながら進めていかなければならなくて若干わかりにくいので、以下に各手順を示します。

なお、環境は MacOS 10.8.5 です。Windows あるいは Linux でもできるようですが、ここでは解説しません。

[2016/2/21 追記] 現在 CraftBukkit はメンテナンスされなくなっており、下記リンク先からはダウンロードはできないのですが、アーカイブなどを保存しているサイトが他にあります。あくまで自己責任でこれらからダウンロードして利用する方法を含め、他の手順についても詳しく次の YouTube 動画で紹介されていますので良かったら参考にしてください。 → 6歳からのプログラミング #1 〜minecraft×scratch〜 CraftBukkitとRaspberryJuice

必要なもの



- Minecraft と minecraft.net より購入した有料アカウント
- CraftBukkit サーバー
- Raspberry Juice プラグイン

CraftBukkit サーバーのインストール



- CraftBukkit サーバーのダウンロードページより CraftBukkit サーバーをダウンロードします。このとき、Minecraft のバージョン番号にあった Build を選ぶ必要があります。



- ダウンロードしたファイルの名前を craftbukkit.jar に変更します。

- CraftBukkit という名前でホームディレクトリなどにフォルダを作成し、craftbukkit.jar をその下に移動します。

- 同じフォルダ内に以下の内容で start_server.command という名前のファイルを作ります。



- ターミナルより chmod a+x を実行して実行権限を与えます。
- 必要なフォルダや設定ファイルが準備されるように、一度 start_server.command を実行しておきます。

Raspberry Juice プラグインのインストール



Raspberry Juice プラグインを CraftBukkit サーバーに入れることで、Minecraft をプログラムで動かせるようになります。

- Raspberry Juice プラグインのページの右メニューにある Download リンクよりたどっていって、最新版をダウンロードします。(このエントリーを書いた時点での最新版は v1.2)

- 先ほど起動した CraftBukkit サーバーを停止します。停止するには、CraftBukkit のコンソール上で stop と入力します

- CraftBukkit/plugins 以下にダウンロードした Raspberry Juice プラグインのファイル(raspberryjuice-1.2.jar) を移動します。

- もう一度 CraftBukkit サーバーを起動します。(start_server.command を実行)

- CraftBukkit のコンソール上で plugins と入力します。


>plugins
16:19:51 [???] Plugins (1): RaspberryJuice


のように RaspberryJuice が表示されていればインストール成功です。

Minecraft を CraftBukkit サーバーに接続する



- Minecraft を起動します。
- マルチプレイを選択します。
- CraftBukkit サーバーを登録するために、Add Server ボタンを押します。Server Name に CraftBukkit、Server Address には localhost と入力し、Done ボタンを押します。
- CraftBukkit サーバーが起動していれば、登録したばかりの CraftBukkit が選択できるようになっています。選択して「サーバーに接続」ボタンを押します。



- 正常に接続できれば、CraftBukkit サーバーのコンソールにログインした旨のメッセージが表示されます。

Python で書いたプログラムを実行する



- Minecraft API のライブラリが必要なので、Minecraft Pi Edition のページより Minecraft Pi をダウンロードします。



- ダウンロードしたファイルを解凍するため、ターミナルより tar zxvf minecraft-pi-0.1.1.tar.gz を実行します。

- 解凍したフォルダ内の mcpi/api/python/ 以下にある mcpi フォルダを作業フォルダの下にまるごとコピーします。(作業フォルダを ~/python/minecraft としたら ~/python/minecraft/mcpi)

- 以下のコードを ~/python/minecraft の下にコピーします(mcpi フォルダと同じ階層) 。ファイル名は sample.py にします。



- ターミナルより python sample.py と実行します。

- このプログラムは、minecraft の世界の中のプレイヤーが今いる場所の目の前にブロックを置く簡単なサンプルプログラムです。プロックが目の前に現れたら成功です。


以上、簡単なサンプルですが、Python でプログラムを書いて Minecraft を動かすところまでの手順です。

プログラムが書ければ、複雑な構造物なども一瞬で作れてしまいます。

また、ブリッジプログラムを書けば、Scratch から Minecraft を操作するといったこともできます。

それらの方法などもこれから順次紹介していきたいと思います。

2度目以降の vagrant up で chef-solo のレシピを実行する

vagrant のバージョンを 1.1.4 から 1.3.1 に上げたところ、どうも vagrant up のときの挙動が違う。

いままでは vagrant up するたびに chef-solo のレシピが実行されていたのが、1.3.1 になって最初の vagrant up のときにしか実行されなくなっている。

CHANGELOG を調べてみたら、1.3.0 よりそのように変更されていて、2度目以降でもあえてレシピを実行したい場合は


vagrant up --provision


のように --provision オプションをつけて vagrant up を実行するようになっていた。

レシピをいろいろいじっているうちは、頻繁にレシピをを実行する必要があるけれど、レシピが出来上がったあとは、そうそう実行する必要がないのでこの方が自然ということで納得。

Scratch 2.0 と Leap Motion をつなげてみました

追記


Experimental Extension の機能が使えなくなってしまったため、紹介している Scratch 2.0 plug-in for Leap Motion が動作しなくなってしまいました。

Scratch 2.0 に正式に外部機器拡張機能が追加されたら、また復活するかもしれません。

新たにまた何かわかったら、このブログに書こうと思います。

参考:
http://scratch.mit.edu/discuss/topic/17409/?page=1#post-155586

=========



Scratch Day のときに Scratch 1.4 と Leap Motion をつなげて LT をおこなったのですが、その後、Scratch 2.0 と Leap Motion をつなげることができる Scratch 2.0 plug-in for Leap Motion というプラグインを khanning さんという方が公開されていたので、実際に試してみました。

ちなみに、以下の動画は Scratch 1.4 と Leap Motion をつなげたときの動画。同じようなことが Scratch 2.0 でもできるようになります。



やりかたは拍子抜けするほど簡単。

1) まず、Scratch 2.0 plug-in for Leap Motion の Download からそれぞれの OS に対応した Scratch 2.0 plug-in for Leap Motion をダウンロードします。



上記の OS を示すアイコンをクリックしてダウンロード、インストールします。Java が必要と言われたら指示通りインストールします。

2) インストールした Scratch 2.0 plug-in for Leap Motion を起動します。



こんな感じのウィンドウが立ち上がります。

3) Leap Motion を PC につなげます。

4) khanning さんが用意したサンプルプロジェクトのうち、適当なものを起動します。

以上です。たぶんものの5分もかからないと思います。

Leap Motion に対応したプロジェクトを自分で作成するには、以下の通りです。

1) Scratch 2.0 plug-in for Leap Motion のページに用意されている LeapMotion.jsonをダウンロードします。

2) Scratch 2.0 でプロジェクトを作成します。

3) メニューの「ファイル」をシフトキーを押しながらクリックします。すると、「Import Experimental Extension」という隠しメニューが選べるようになるので、選択します。

さきほどダウンロードした LeapMotion.json を選びます。

すると、「その他」に Leap Motion 用のブロックが現れ、使えるようになります。



たとえば Hand-1 X のブロックで、ひとつめの手の x 座標が、Finger-1-Hand-1 Y のブロックで、ひとつめの手の一本目の指の y 座標が、それぞれ取得できるようになります。

試しに長男が作った弾よけゲームをリミックスして Leap Motion に対応させてみました。人差し指でメインキャラクターを動かせるようにしました。

» escapefromball with leapmotion

いやあ、これ、すごい楽しいです。Leap Motion を使ったプログラムがこれだけ手軽に作れるのは Scratch ならではです。

また Scratch 2.0 の Extension の機能はとてもスマート、いろいろと応用できそうです。

khanning さんに感謝。

Thank you very much for sharing this cool plugin.

プロフィール

株式会社まちクエスト代表、つくる社LLC代表。

Scratchで楽しく学ぶ アート&サイエンスRaspberry Piではじめる どきどきプログラミングを書きました。

オンラインコンテンツ: 大人のためのScratch

Amazonから図書館検索 Libron、iPhoneアプリ ひらがなゲーム かなぶん を作っています。

Email: webmaster at champierre dot com

Twitter @jishiha

最近のエントリー

アーカイブ