僕は発展途上技術者

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.

カラフルスペシャル!ヒミツのこども地図

2013/10/2 追記



再放送が決まりました。

10月14日(祝)午前9:30~10:15
Eテレでの放送です。

=============

長男の masaishi が出るということで、楽しみにしていた「カラフルスペシャル!ヒミツのこども地図 」が放送されました。



「スクラッチ」を使ったプログラミングを通して、いつも放課後一緒に遊んでいる学校のお友達の「メガネ4」から、学校という境界を越えワークショップの OtOMO メンバーに、そして国境を越えて他の国のスクラッチユーザーにつながっていく、masaishi の世界が拡がっていく様子が丁寧に描かれていたと思います。

わずか10分ほどの時間の裏には、おそらく10時間以上、もしかすると20時間近くはあったんじゃないかという撮影時間と、10回近くはお会いしたディレクターの方との取材の量を知っているので、それを放送時間の中におさめるために凝縮するプロの技に感服してしまいました。

カットされてしまった部分は確かに残念ではあるけれども、制限の中でベストをつくす、機能は追加するのではなく削ぎ落とす、という僕がウェブサービスやアプリを作るときに見本と考えている 37signals の Getting Real や Apple の哲学に通じるものがあります。






masaishi の師匠である @abee2 先生が手放しで褒めるのもめずらしい。

masaishi がディレクターの方に初めて会った際に「スクラッチとプログラミングの楽しさをたくさんの人に伝えたい」と言っていた思いをちゃんと汲んでくれたディレクターさんや番組スタッフによるところが大きいと思います。

学童の楽しさだったり、祖父母に日本のことを知って貰いたいという思いや、震災前の元の場所に戻ってほしい、という他のこどもたちのそれぞれの思いも同じように伝わってきていました。

個性的で「カラフル」なこどもたちそれぞれの世界が感じられるスペシャル版でした。

これからの「カラフル」も楽しみにしています。

まちクエスト - スマホで謎解きにでかけよう!というWebサービスをリリースしました

» まちクエスト - スマホで謎解きにでかけよう!というWebサービスを開発しています

で、「まちクエスト」という Web サービスを開発中だということを書きました。

リリース日をみんなが気持ちよく外出し始める「梅雨明け」としていて、例年だと7月21日ごろなので、まだまだあるなあ、と思っていたところ、なんと先週末に史上4番目の早さでいつの間にか梅雨明けしてしまっていました。

というわけで、「まちクエスト」リリースしました。

» まちクエスト、正式リリース!

サービスの詳細や目指すところなどは、冒頭に紹介したエントリーでの繰り返しになってしまうので、どんなサービスか?を少し詳しく書いておこうと思います。

どんなサービス?



ざっくり説明すると、


“スマホを持って謎解きにでかけよう!”がコンセプトのスマートフォン向けフィールドゲームです。

画面のレーダーを頼りに身近にある“クエスト”を探して歩き、その場所に設定された問題に挑戦してください。


少し詳しく見ていきます。

まず、近くにある「クエスト」を探します。



「クエスト」を選ぶと、そのクエストまでの距離と方向を表示したレーダーが表示されます。



(どっかで見たことあるなあ、という声が聞こえてきそうな)レーダーを頼りに、クエストまで100メートル以内のところまで近づくと、その場所に設定された問題に答えることができるようになります。

その場所に設定された問題というのは、例えば三鷹駅近くにある陸橋だと、


中央線の上にかかるこの陸橋は太宰治ゆかりの場所と案内されています。 この陸橋は、19◯◯年にできあがったものなのですが、さてこの〇〇に入る数字は何でしょうか?


という問題が設定されていて、現地に行くと見つかる案内板を読めば答えることができるようになっています。



クエストを発見すればポイントを獲得、今はこのポイントのみのランキングで競って楽しむようになっています。今後は、いくつかグループ分けされたクエストを全部発見するとコンプリートしたポイントがもらえるようにするなどの展開を考えています。

クエストは、ユーザー登録すれば誰でもつくることができるので、他人がつくったクエストを発見するのとは別に、クエストを仕掛けて発見してもらうという楽しみ方もできます。

今後の話



ここ数ヶ月知り合いを中心に試しに使ってもらっていたのですが、「実際にクエストを探してみたら面白かった」という感想をもらっています。逆に言うと、実際にクエストを探してもらわないと楽しさが伝わらない、ということなので、そのあたりが伝わるような工夫も今後の課題のひとつです。

何よりの課題は、運営者が住んでいる場所の関係で、まだクエストが東京周辺と沖縄にしか見つからないという点です。サービスを育てて、まずは日本中どこでもクエストが近くにあるというところまで持って行けるよう頑張ります。

まち歩きが好きだったり、昔オリエンテーリング好きだった、という方がいらっしゃったら、

» まちクエスト - スマホで謎解きにでかけよう!

より、良かったら使ってみてください。

Team Dashboard で、まちクエストのPVやユーザー数などの各データをリアルタイムに表示するようにしました

梅雨明けに向けて着々と開発している まちクエスト ですが、Team Dashboard で PV やユーザー数などの各データをリアルタイムに表示するようにしました。

» まちクエスト - Team Dashboard



fjord が公開している

» 怖話 - Team Dashboard

にならいました、というか、真似です。

まちクエストはまだリリース前ですが、今から成長率と数字を意識する、という意気込みの現れです。

今読んでいる

» Yコンビネーター シリコンバレー最強のスタートアップ養成スクール

に「数字や成長率を意識しろ」と何度も出てきて、もろに影響を受けているとも言えますし、自社Webサービス作成者が集まってお互いの進捗を発表しあい、切磋琢磨するダッシュボーダーズの集まりのためでもあります。

これらのデータのうち、いま僕が最も意識しているのはクエスト数です。

» まちクエスト - スマホで謎解きにでかけよう!というWebサービスを開発しています

でも書いているように、とりあえずは 2,000,000 が目標です。

» まちクエスト - スマホで謎解きにでかけよう!



Yコンビネーター   シリコンバレー最強のスタートアップ養成スクール
ランダル・ストロス
日経BP社
売り上げランキング: 365

プロフィール

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

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

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

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

Email: webmaster at champierre dot com

Twitter @jishiha

最近のエントリー

アーカイブ