もぐてっく

人は1つ歳をとるたび、1ビットづつ大きくなれると信じてた。

Macでもmikutterに喋ってもらうためのプラグインを作ったよ

誰かが言ってた。


「Macにはaplayコマンドが無いからmikutterが喋らないけど、afplayって類似コマンドがあるよ。」


なんだけど、微妙にコマンドラインオプションが違うのでシンボリックリンク程度では、まだmikutterは僕をガン無視。

なのでcoreにあるalsa.rbをちょっと改造してプラグインを作ったっす。

下記をafplay.rbってファイル名でプラグインフォルダに置くと良いよ。

# -*- coding: utf-8 -*-
# afplayコマンドで音を鳴らす

Plugin.create :afplay do

  on_play_sound do |filename, &stop|
    if command_exist? "afplay"
      SerialThread.new {
        bg_system("afplay", filename) if FileTest.exist?(filename) }
      stop.call end end
end

テスト方法

Debianとつぶやきましょう。

「りついーと!」

mikutterがしゃべります。

これでダメなら諦めた方が良い程度にRasberry Piのカーネルクロスコンパイル手順をまとめてみた。

(内容古いです。)

Raspberry Piのクロスコンパイルの方法は、既にいくつものサイトで解説されてるんですが、汎用のクロスコンパイラを適切なオプションでコンパイルせなあかんとかでなんか面倒かったり、手順の途中が「そんなの常識だよね〜」的に端折られててなんか面倒かった訳です。

んで、この度公式?のクロスコンパイラを触ってみたら割とあっさりと動いちゃったんで、手順をまとめとこうと思った次第です。

Ubuntu Desktop 12.10 32bitのインストール

ロスコンパイルを行うOSをインストールします。
Server版でも一向に構わないと思いますが、手元にあったので。
64bit版は不可。

必要そうなパッケージをインストール

$ sudo apt-get install build-essential libncurses5-dev openssh-server avahi-daemon

build-essentialはmakeコマンドとmenuconfig用のセルフコンパイル環境のため。多分いらんパッケージも入るけど、まぁいいかと。
openssh-serverは糞重いUnity対策。MBAのターミナルから接続出来るようにしときます。
avahi-daemonは趣味です。avahi可愛いよavahi。

カーネルソースとクロスコンパイラをもらってくる。

githubからRaspberry Piのカーネルソースとクロスコンパイラをありがたく頂きます。

$ wget --no-check-certificate https://github.com/raspberrypi/linux/archive/rpi-3.6.y.tar.gz
$ wget --no-check-certificate https://github.com/raspberrypi/tools/archive/master.tar.gz

今回は何も考えずにホームディレクトリに展開しときます。

$ tar xvzf rpi-3.6.y.tar.gz
$ tar xvzf master.tar.gz

Raspberry Piからカーネルコンフィグを取ってくる。

Raspberry Piのprocファイルシステムには現状のカーネルのコンフィグが格納されてるのでぶっこ抜きます。
ここではRaspbmcから取って来てますが、Raspbianもきっと同じカーネルコンフィグのはず。

$ cd linux-rpi-3.6.y
$ scp pi@raspbmc.local:/proc/config.gz .
$ zcat config.gz > .config

ぶっこ抜いたカーネルコンフィグの反映

make oldconfigを実行してコンフィグを反映します。
カーネルのバージョンが違ってた場合は、新規追加されたコンフィグをどうするか聞かれますが、基本デフォルトでOKです。
(今回の場合は差分はありませんでした。)

$ make CROSS_COMPILE=~/tools-master/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/bin/arm-bcm2708hardfp-linux-gnueabi- ARCH=arm oldconfig

どどど・・・ドッピオぉぉ!?

make menuconfigでお好きなフレーバーをカーネルに追加しよう!

$ make CROSS_COMPILE=~/tools-master/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/bin/arm-bcm2708hardfp-linux-gnueabi- ARCH=arm menuconfig

カーネルをコンパイル

$ make CROSS_COMPILE=~/tools-master/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/bin/arm-bcm2708hardfp-linux-gnueabi- ARCH=arm

Enterを叩いた瞬間、Raspberry Piではあり得なかった光の世界がそこに広がります。
(意訳:クロコンやばい。超やばい)

モジュールもコンパイル

$ make CROSS_COMPILE=~/tools-master/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/bin/arm-bcm2708hardfp-linux-gnueabi- ARCH=arm modules


一先ず/tmp/123ってディレクトリにインストールして、余計なシンボリックリンクを削除しときます。

$ sudo make CROSS_COMPILE=~/tools-master/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/bin/arm-bcm2708hardfp-linux-gnueabi- ARCH=arm INSTALL_MOD_PATH=/tmp/123 modules_install
$ sudo rm /tmp/123/lib/modules/3.6.11/build
$ sudo rm /tmp/123/lib/modules/3.6.11/source

出来上がったカーネルとモジュールをRaspberry Piにコピー

なぜか/tmp/だと容量不足だと怒られるので、piのホームディレクトリに置きます。

$ scp -rp /tmp/123/lib arch/arm/boot/zImage pi@raspbmc.local:~/

コピーしたカーネルとモジュールを正規場所にコピー

Raspberry Piにログインして、さっきコピーしたファイルを移動します。

$ sudo cp -rp lib /
$ sudo cp -rp zImage /boot/kernel.img

下のメッセージが出ますがFAT32ファイルシステムに起因する無害なものです。無視しましょう。
cp: failed to preserve ownership for `/boot/kernel.img': Operation not permitted

リブート

そしてリブート!

$ sudo reboot

きっとあなたは新たなRaspberry Piに出会うことでしょう!

Automatorでアプリケーションにファイルを開かせる

やっぱり、Macのアプリをコマンドライン引数でファイルを指定して起動させる方法は無いみたい。
UNIX的なアプローチを取れば行けるんだけど、まぁダサいよねと。)

じゃあ、アプリにファイルをドラッグアンドドロップする操作を模擬出来ればいいんじゃね?と、たどり着いたのが以下のコード。
「開く」コマンドをスクリプトから叩いてる感じですね。

on run {input, parameters}
	
	tell application "XLD"
		activate
		open item 1 of input
	end tell
	
	return input
end run


多分AppleScripterの方々には常識なんでしょうが、自分的備忘録として。