Building a memory game with Blocの手習い(Chapter 1)

これはSmalltalk Advent Calendar 2017の記事です。

Smalltalk絡みで何か書こうと思っていたけど、本職が火を吹いているので何もできず、そうかといってやり過ごすのも癪だ。

最近、Pharo Smalltalk界隈でBlocの話題がよく出ている気がする。小田さんのAdvent Calendarの記事にもなってるし。勉強会にも行ってないので何のことやら取り残された感を持っていたが、github にチュートリアルが出ていたので、それを記事を書くことで Bloc について勉強することにした。

ということで、元ネタは
https://github.com/pharo-graphics/Bloc
の中にある、
http://files.pharo.org/books-pdfs/booklet-Bloc/2017-11-09-memorygame.pdf
である。

続きを読む →

Pharo 4.0でアイコン一覧を表示する方法

いつも忘れてしまうので。

参考:SpecBooklet.pdf

| iconList |
iconList := IconListModel new.
iconList
  items: (Smalltalk ui icons iconSelectors collect: [ :each | each -> (Smalltalk ui icons iconNamed: each) ]);
  displayBlock: [ :assoc | assoc key];
  sortingBlock: [ :assocA :assocB | assocA key < assocB key ];
  icons: [ :assoc | assoc value ];
  title: 'Availiable icons for the current theme.'.
iconList openWithSpec

ScratchとSmalltalkの関係

この記事はSmalltalk Advent Calendar 2016のエントリです。

今年のSmalltalk Advent Calendarを何もネタを考えずに引き受けてしまった。このところ忙しくてなかなかコーディングの機会がない。昨年は何を書いたのだろうと思ったら、こんな記事を書いていた。毎度のネタで心苦しいが、今回もScratch絡みの記事を書く事にする。

続きを読む →

Scratch拡張 — ServoDesigner公開

今年のゼミ夏合宿で「サーボを制御するのにHeartToHeartのようなツールが欲しい」という声があった。

Scratchのコスチューム切り換えの機能を流用すれば、それらしい機能を提供できそうだと思ったので、合宿中から早速取りかかってみた。

杉浦先生のMugbot Designerを参考にさせて頂いて(名前の一部も頂いて)、ほとんどの部分はあっという間に作り上げた。

ServoDesigner — github

sd1

ServoDesigner ではサーボのチャンネルを模した変数の値を一括して変更する機能しかない。その値を実際のサーボに設定するには別プログラムを使う。Scratchと別プログラムとの通信は Remote Sensor Protocol を用いて行い、 servo changed というブロードキャストメッセージによって、切り換えのタイミングが知らされる。なお、Based on Scratchで無効化されている Remote Sensor Protocol は、ServoDesignerを導入することで有効化される。

現時点では firmata で Arduino に接続されたサーボを制御するサンプルがあるが、今後はラズパイに接続されたサーボの制御プログラムなども用意していく。

Raspberry pi model B(Raspbian jessie版)にROS indigoをインストールする

この記事は以前の記事(Raspberry pi(Raspbian wheezy)にROS indigoをインストールする)をもとに、Raspbian jessie用に書き換えた記事である。

Raspbian のバージョンによってインストールするパッケージが異なるので、以下のコマンドでRaspbianのバージョンを確認した上で、適切な方法を選ぶ必要がある。

$ lsb_release -a
No LSB modules are available.
Distributor ID:	Raspbian
Description:	Raspbian GNU/Linux 8.0 (jessie)
Release:	8.0
Codename:	jessie
$ 

Codenameの行に動作中のバージョンが表示される。

続きを読む →

WiringPi2 for Pythonをインストールする

前回の記事に引き続いて Raspberry Pi A+ へ、もろもろインストールする。

Python開発用ツールのインストール

python-pipはインストール済のようなので、python-devだけインストールする。

sudo apt-get install python-dev

WiringPi2のインストール

wiringipi2をインストールする。以前よりずっと簡単になった。

sudo pip install wiringpi2

いろいろ警告が出るけど、下のようになって終わればOK。

Successfully installed wiringpi2 wiringpi
Cleaning up...

試運転

$ python
Python 2.7.9 (default, Mar  8 2015, 00:52:26) 
[GCC 4.9.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import wiringpi2
__main__:1: DeprecationWarning: The wiringpi2 module has been deprecated, please 'import wiringpi' instead.

以前のようにwiringpi2をimportすると、deprecatedだと怒られる。素直にwiringpiをimportすればよい。

>>> import wiringpi
>>> wiringpi.piBoardRev()
2
>>> wiringpi.wiringPiSetup()
wiringPiSetup: Must be root. (Did you forget sudo?)
$

wiringPiSetupを使うにはroot権限が必要なので、sudo pythonとしなければならない。

以上。

Raspberry Pi A+にRaspbianをインストールする

完全な備忘録。来た道を見失わないために。

目標

  • コンソールで起動(GUIは使わない)
  • wifiでネットワーク接続
  • PythonでGPIOを使う(別記事

準備

  • Raspberry Pi A+
  • MicroSDカード(8MB以上のもの)
  • WiFi USB Adapter(GW-USNano2)
  • その他、インストールに必要なもろもろ
    • セルフパワーのUSBハブ
    • キーボード
    • マウス
    • HDMIディスプレイ
    • USB-LANアダプタ

Raspbianのインストール

Raspberry PiウェブサイトのDownloadページでNOOBSをダウンロードする。

ダウンロードした圧縮ファイルを展開し、その中身を全てFATフォーマットしたMicroSDカードにコピーする。

コピーしたMicroSDカードを、もろもろ接続したRaspberry Pi A+に挿入して起動する。

起動したらRaspbianを選択してインストールを進める。

基本設定(その1)

Raspbian が起動したらコンソールを開いて、raspi-config を実行する。

sudo raspi-config

Advanced Optionsで、A2 Hostname を選ぶ。続く画面で、Hostname として適当な名前を入力する。(ここでは例として、roverを入力したものとする)

Advanced Optionsで、A4 SSHを選ぶ。続く画面で、Enableを選ぶ。

Enable Boot to Desktop/Scratchで、B2 Console Autologin を選ぶ。

Finishを選んで再起動する。

基本設定(その2)

別のPCからネットワーク経由で設定を継続する。

まず、PINGが通ることを確認する。

ping rover.local

SSHでログインし、.ssh フォルダを作成する。パスワードにはraspberryを入力する。

ssh pi@rover.local
mkdir .ssh

sshd_configの設定を変更する。

sudo vi /etc/ssh/sshd_config

最終行のUsePAMをyesからnoに変更し、さらにUseDNS noを追加する。以下のようになればよい。

UsePAM no
UseDNS no

いったんログアウトしてから、SSH鍵を転送する。

scp .ssh/id_rsa.pub pi@rover.local:~/.ssh/authorized_keys

再度、sshでログインする。以降、パスワードの入力を求められない。

ssh pi@rover.local

パッケージを更新し、アップデートする。

sudo apt-get update
sudo apt-get upgrade

raspi-config を起動して設定の続きを行う。

sudo raspi-config

Internationalisation Optionsで、I1 Change Locale を選ぶ。
en_GB.UTF-8 の選択を外し、en_US.UTF-8 と ja_JP.UTF-8 を選択する。

Internationalisation Optionsで、I2 Change Timezone を選ぶ。
アジア(Asia), Tokyoを選ぶ。

Internationalisation Optionsで、I3 Change Keyboard Layout を選ぶ。
キーボードに合わせて適切なものを選ぶ。

wifi設定

/etc/network/interfaces を編集する。

iface wlan0 inet manual

これを

iface wlan0 inet dhcp

に書き換える。

/etc/wpa_supplicant/wpa_supplicant.conf を作成する。なお、ESSID、PSKには適切なものを指定する。

sudo bash
cd /etc/wpa_supplicant
wpa_passphrase ESSID PSK >> wpa_supplicant.conf

wifiモジュールをUSBハブに挿入するか、挿入済であれば以下を実行して wifi モジュールを再設定する。

ifdown wlan0
ifup wlan0

ログアウトした後、ネットワークケーブルを外してもPCからPINGが通ることを確認する。

以上で基本的な設定は完了。