GNU Emacs、Emacs Lisp 版 Minesweeper、Cocoa Emacs 日本語表示

最初に Emacs に触れたのは学生時代購入した X68000 上の Micro Emacs です。もしかしたら Sun のワークステーションの方が早かったかもしれません。インターネットもない時代だったので、本屋で立ち読みしたり、少ない小遣いで購入した書籍で、一生懸命操作を学びました。それ以来、あまり上達していません。X68000 の Micro Emacs では、便利な機能があらかじめ設定されていたので、ファンクションキーを多用していたのを覚えています。

今回、Learning GNU Emacs, Third Edition を読み終えたので、久しぶりに Parallels DesktopWindows XPX68000 エミュレータ XM6 を起動して Micro Emacs (em.x) を実行してみました。

もちろん廉価版なので、本家と違うところがいろいろあるのですが、今思うとすごく良くできていますね。ソースは覗いていませんが、OS に依存しているところは分離されているのかな?

Learning GNU Emacs, Third Edition を読んでる途中で

縦分割や

Window と Frame の違いも理解しました。恥ずかしながら、初めて知りましたが Meta Key として Alt (Option) キーも使えるんですね。Micro Emacs から使い始めたので、てっきり ESC キーだけかと思ってました。

Learning GNU Emacs, Third Edition を読みながら、ATOK Pad にメモした箇所がたくさんあります。ちょっとだけ、紹介しておきます。

GNU Emacs には、強力なヘルプがあります。

Help
C-h ?                   ヘルプ一覧
C-h a PATTERN    正規表現 PATTERN に一致する名前を持つコマンド一覧表示
C-h d PATTERN    PATTERN にマッチする関数、変数などを表示
C-h k

Window 操作も C-x と数字を入力するだけで、いろいろな動作をします。

Window
C-x 0       ウィンドウの削除
C-x 1       選択されているウィンドウ以外のウィンドウをすべて閉じる
C-x 2       ウィンドウを上下2つに分割する
C-x 3       ウィンドウを左右2つに分割する
C-x 4 f     他のウィンドウでファイルを開く
C-x 5 2    フレームの作成
C-x 5 o    他のフレームに移動

ディレクトリエディタ dired で、g キーを押せば、ディレクトリの内容を最新の状態に更新します。

dired
C-x d      dired 起動
u             フラグを外す (Remove mark)
d             削除フラグを付ける (Flag of delection)
x             削除フラグがついたファイルを削除 (Delete)       
g             ディレクトリ再読み込み (Immediate Refresh)
=            比較
C            指定したファイルをコピー (copy)
R            ファイル名変更 (Rename file)
v             View モードで表示 (View file, read-only)
s             ファイル名または日付でソート。トグル。
Enter      スクロール (Scroll down)
#            auto-save files にフラグを付ける
~            Backup files にフラグを付ける
* *          excitable files にフラグを付ける
L            ファイルを読み込む (Load file)
%m         正規表現に当てはまるファイル名にフラグを付ける

決まったファイルを編集するには Bookmark に登録しておくと便利です。

C-x r m  bookmark-set
C-x r l   List bookmarks

GNU Emacs の Window 上に shell も起動することができます。

M-x shell
M-p            最後のコマンドを表示
M−n           次のコマンドを表示

検索と置換には、正規表現も使えます。

検索
C-s
置換
M-%
SPACE    置換して次に移動
DEL        置換しないで次に移動
,             置換して結果を表示。移動はしない
正規表現検索
C-M-s
C-M-r
C-M-%

キーは割り当てられていませんが、指定した領域をコメントアウトするには

M-x comment-region
M-x uncomment-region

が便利です。C や Ruby など、ほとんどの言語が対応しています。

C-@ でマークし、カーソルキーで選択します。

M-x comment-region を実行すると、上図のように各行を /* */ でコメントアウトしてくれます。

コメントアウトを取り除くには、上図のように同じく領域を選択し、

M-x uncomment-region を実行します。

Learning GNU Emacs, Third Edition で、簡単な Emacs Lisp Programming も学んだので、どんな環境でも最初に挑戦するマインスイーパを作成してみたくなりました。Google で検索してみると

EmacsWiki: Mine Sweeper
http://www.emacswiki.org/emacs/MineSweeper

すでに存在するようです。私の理解の仕方が足りないのか、うまく動作させることができません。それで少し mine-sweeper.el を変更してみることにしました。まず、.emacs ファイルに

;; .========== .emacs ==========
;; load-path
(add-to-list 'load-path "~/lisp/")
;; minesweeper
(autoload 'mine-sweeper "mine-sweeper" nil t)
(autoload 'mine-auto "mine-sweeper-auto" nil t)
(add-hook 'mine-sweeper-mode-hook
(lambda ()
(define-key mine-sweeper-mode-map "a" 'mine-auto)))

を追加しました。ホームフォルダlisp フォルダを作成し、その中に mine-sweeper.el、mine-sweeper-auto.el ファイルをそれぞれ置きました。

mine-sweeper.el ファイルの mine-sweeper 関数から

(get-buffer-create "Mine")
(set-window-buffer (selected-window) "Mine")

をコメントアウトし

 (pop-to-buffer "*Mine*" nil)

を追加しました。mine-sweeper 関数は、下記のようになります。

;;; main
(defun mine-sweeper ()
"mine-sweeper
SPC  open
b    mark
m    mark
q    quit"
(interactive)
(setq max-lisp-eval-depth 3000)  ;for recursive call of open.           
(setq max-specpdl-size 3000)     ;for recursive call of open.
;;  (get-buffer-create "Mine")
;; (set-window-buffer (selected-window) "Mine")
(pop-to-buffer "*Mine*" nil)
(setq overwrite-mode t)
(setq major-mode 'mine-sweeper-mode
mode-name  "Mines")
(use-local-map mine-sweeper-mode-map)
(run-hooks 'mine-sweeper-mode-hook)
(mine-start)
(setq buffer-read-only t))

次に mine-clean-and-quit 関数を

(defun mine-clean-and-quit ()
(interactive)
;;  (switch-to-buffer-other-window "*Mine*")
(delete-window)
(kill-buffer "*Mine*"))

に変更しました。これで M-x mine-sweeper を実行すると、マインスイーパで遊ぶことができます。

最初にミニバッファ上で縦横のサイズ、地雷の数を入力します。( デフォルトの値を使用する場合は、Return キーを押すだけです。)
画面が表示されると

カーソルキー     セルを移動
スペースキー     セルをオープン
m キー              マーク
a キー               自動で解く

上記キー操作で遊ぶことができます。a キーを押すと mine-sweeper-auto.el の mine-auto 関数が呼ばれ、マインスイーパを自動で解いてくれます。人間が解くようにコンピュータが解くので、ある程度セルが開いている必要があるようです。条件によっては解けない場合があります。a キーを使って自動で解いた後にプログラムを終了させるとミニバッファに無意味な文字列が表示されます。私が、mine-sweeper.el を変更したのが原因のようです。

自作の Emacs Lispマインスイーパを作ってみたいですね。

GNU Emacs 上の日本語が綺麗に表示できるように、Google で検索していろいろ試しましたが、中々上手くいきません。結局、

IPAフォントのダウンロード || OSS iPedia
http://ossipedia.ipa.go.jp/ipafont/index.html

IPAフォントを使いました。表示結果は

のようになりました。.emacs ファイルは、下記リンクでダウンロードできるようにしておきました。よかったら使ってください。

GNU Emacs 設定ファイル (.emacs) サンプル:  emacs.zip (4K)
http://kyoshiaki.sakura.ne.jp/osx/Download/emacs.zip

携帯型カラーオシロスコープ DSO Nano v2、8ビット マイコン Ardunio 互換機 ジャパニーノ ( Japanino )

エアーバリアブル ブログ
http://airvariable.asablo.jp/blog/

上記ブログを拙作 iPadRSS リーダー iYKRSSHD [ http://itunes.com/apps/iYKRSSHD ] に登録して、購読しています。ブログに度々出てくる携帯型カラーオシロスコープ DSO Nano v2 が気になっていました。

Seeed Studio Bazaar, Boost ideas, extend the reach
http://www.seeedstudio.com/depot/

DSO Nano v2 については、日本で販売しているショップもありますが、直接上記 URL で購入してみることにしました。私が購入した時は Seed Studio 自体が中国の会社のため、クレジットカードの許可が取れなく、クレジットカードで支払うためには、他のサービスを使って迂回する必要がありました。(現在は、Visa、MasterCard が使えるそうです。) それで、PayPal を利用することにしました。

もちろん、PayPal のアカウントを持っていないので、新規に作成しました。ただし、海外と取引するためには、言語を英語にしてアカウントを作成しないといけないようです。氏名や住所などをローマ字で表記し、クレジットカードを登録しました。その後、クレジットカードとメールの検証を行いました。

PAYPAL(ペイパル)のクレジットカード登録方法・利用拡張プログラム登録方法。
http://e-okozukai.com/PAYPAL-CARD.html

クレジットカードの検証は、上記ページが参考になります。検証リンクをクリックすると数日後にクレジット会社のWeb上の請求書に 200円と4桁の利用拡張番号が記載されます。その4桁の拡張番号を PayPal の検証リンクをクリックして入力すれば完了です。200円は、返金されます。My Account/All activity(with balance) で確認できます。

Seeed Studio Bazaar, Boost ideas, extend the reach
http://www.seeedstudio.com/depot/

上記 URL で、DSO Nano v2 を購入しました。今回は、運送会社に DHL を指定してみました。

Seeed Studio
DSO Nano v2 $89.00
DHL $24.90
$113.90
為替 1$=84.7
クレジット会社 \9916

商品の発送状況が変化するたびにメールが届きました。上記 URL で Order ID を入力すれば、運送会社のリンクが表示され、商品がどこまで輸送されているのか確認できます。注文から1週間で届きました。私の場合、海外は DHL、国内の配達は佐川急便でした。

私は DSO Nano v2 を購入しましたが、上位版の DSO Quad – 4 Channel Digital Storage Oscilloscope が発売になっています。今現在、DSO Nano v2 は売り切れになっています。上位版 DSO Quad が発売されたためだと思います。(現在、在庫は回復しています。)

買ったは良いのですが、 私自身、オシロスコープを操作できるのか、全く自信がありませんでした。それで、書籍を購入してみることにしました。とりあえず

を購入してみました。読んでみたのですが、全く理解できませんでした。デシベル dB と言われてもすっかり記憶の彼方です。Wikipedia で調べてみると

デシベル - Wikipedia
http://ja.wikipedia.org/wiki/%E3%83%87%E3%82%B7%E3%83%99%E3%83%AB
Decibel - Wikipedia, the free encyclopedia
http://en.wikipedia.org/wiki/Decibel

 L_{dB} = 10 \log_{10} \frac{ P_{1} } { P_{0} }

こんな式で表されるのですね!

常用対数についての記憶も薄れ、さらに Wikipedia で調べてみました。対数の役目は、大きな数字を指数で表現して、値の範囲を小さくし、扱いやすくすることだと思い出しました。(これであっているのかな!)

常用対数 - Wikipedia
http://ja.wikipedia.org/wiki/%E5%B8%B8%E7%94%A8%E5%AF%BE%E6%95%B0
Common logarithm - Wikipedia, the free encyclopedia
http://en.wikipedia.org/wiki/Base-10_logarithm

オシロスコープ入門講座 これから学ぶ人のための基本理論から最新技術まで’ 本より、Wikipedia の解説の方が

Oscilloscope - Wikipedia, the free encyclopedia
http://en.wikipedia.org/wiki/Oscilloscope
オシロスコープ - Wikipedia
http://ja.wikipedia.org/wiki/%E3%82%AA%E3%82%B7%E3%83%AD%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%97

何となく理解の手助けになりました。

Google で DSO Nano、DSO Nano v2 で検索し、予備知識を学びました。しかし、一番、基本的な DSO Nano v2 の操作方法の理解になったのは、下記ページの下部にあるリンクをクリックしてダウンロードできるマニュアルでした。

DSO Nano v2 [TOL131B2P] - $89.00 : Seeed Studio Bazaar, Boost ideas, extend the reach
http://www.seeedstudio.com/depot/dso-nano-v2-p-681.html?cPath=174
HOW-TO
● Manual (English) [ http://www.seeedstudio.com/depot/datasheet/DSO%20Nano%20v2%20Manual.pdf ]
● Manual (Japanese) [ http://www.seeedstudio.com/depot/datasheet/dsov2jp.pdf ]

以前、購入した ‘ジャパニーノ’ を所有しているので

8ビット マイコン Ardunio 互換機 ジャパニーノ ( Japanino )
Vol.27 テクノ工作セット(8ビットマイコン+光残像キット) | 大人の科学マガジン | 大人の科学.net
http://otonanokagaku.net/magazine/vol27/index.html

DSO Nano v2 を使って計測してみることにしました。

DSO Nano v2 には、ジャパニーノのピンに差すのにちょうど良いてテストプローブが付いているので、それを使って電源ピン +5V、グラウンドに差しました。DSO Nano v2 のディスプレイエリアに下図のような電圧波形 +5V が現れました。(垂直スケール : Vertical scale を1v/Div に設定しても、 波形が表示されない時は、テストプローブを逆にしてください。)

これでは、面白くありません。それで、スケッチ(プログラム) を組んで方形波を出力させることにしました。

上図のように、時間基準 : Time Base [ 5ms/Div ] から、方形波の周期 20 ms も確認できます。

スケッチの内容は

/* --------------- dso_nano.pde --------------- */
/*
	方形波
	D7 pin  に出力
	周期 20 ms
*/
int pin = 7;
void setup() {
pinMode(pin, OUTPUT);
}
void loop() {
delay(10);
digitalWrite(pin, HIGH);
delay(10);
digitalWrite(pin, LOW);
}
/* --------------- dso_nano.pde --------------- */

です。ファイル dso_nano.pde を Zip 形式で圧縮したファイル dso_nano.zip を下記リンクにアップロードしておきました。

dso_nano.zip
http://kyoshiaki.sakura.ne.jp/osx/Download/dso_nano.zip
Japanino特設サイト | 大人の科学.net
http://otonanokagaku.net/japanino/

上記ページからダウンロードしてインストールできる Macintsh 用 IDE アプリケーション ‘Arduino‘ を使って、コンパイルしたスケッチをマイコンボードにアップロードすると

avrdude: stk500_recv(): programmer is not responding

上記エラーが発生し、マイコンボードに書き込むことができません。リセットスイッチも、ちゃんと押しています。

仕方がないので、(後で必要になるので、古いアプリケーション Ardunio をデスクトップなどに移動して退避しておいてください。) 最新版を下記ページからダウンロードし

Arduino - Software
http://arduino.cc/en/Main/Software

インストールしました。ドライバも含まれていたので、問題はないだろうと思い上書きインストールしました。

ただし、このままだと Ardunio のメニュー ‘Tools/Board/’ で ‘Gakken Japanino(学研 大人の科学 ジャパニーノ)’ が表示されません。それで、退避しておいた古い Ardunio を Finder で表示し、右クリックしてメニュー ‘パッケージの内容を表示’ を選び、

/Users/xxxxx/Desktop/Arduino.app/Contents/Resources/Java/hardware/arduino/boards.txt

boards.txt を mi などのテキストエディタで開いてください。

mi - テキストエディタ
http://www.mimikaki.net/

ファイル boards.txt の先頭部分

##############################################################
japanino.name=Gakken Japanino(学研 大人の科学 ジャパニーノ)
japanino.upload.protocol=stk500
japanino.upload.maximum_size=14336
japanino.upload.speed=19200
japanino.bootloader.low_fuses=0xe2
japanino.bootloader.high_fuses=0xdd
japanino.bootloader.extended_fuses=0x00
japanino.bootloader.path=lilypad
japanino.bootloader.file=LilyPadBOOT_168.hex
japanino.bootloader.unlock_bits=0x3F
japanino.bootloader.lock_bits=0x0F
japanino.build.mcu=atmega168
japanino.build.f_cpu=8000000L
japanino.build.core=arduino

をコピーし、インストールした最新版の Ardunio に含まれるファイル boards.txt

/Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/boards.txt

を Finder を使って同様に表示し、テキストエディタ mi で開き、コピーした部分を先頭にペーストして保存しました。これで ‘Gakken Japanino(学研 大人の科学 ジャパニーノ)’ を最新版 Ardunio のメニュー ‘Tools/Board/’ で選択できるようになりました。

最新版の Ardunio にしてから

avrdude: stk500_recv(): programmer is not responding

のエラーも出なくなり、マイコンボードに書き込むことができるようになりました。

Mac App Store、さくらのレンタルサーバ用アクセス解析プログラム Sakura Version 1.0 公開

随分遅れましたが、新年明けましておめでとうございます。今年も宜しくお願いします。
Mac App Store が始まりましたね。私は iWorks を持っていないので、とりあえず

Numbers
カテゴリ:仕事効率化
\2300
http://itunes.apple.com/jp/app/numbers/id409203825?mt=12

を購入しました。Pages と Keynote については、購入するか悩んでいます。

前回、紹介した ‘さくらのレンタルサーバアクセス解析プログラム Sakura Version 1.0 ‘ を

さくらのレンタルサーバアクセス解析プログラム Sakura Version 1.0
Programmed by KOYAMA Yoshiaki
概要
ターミナル上で動作するスクリプト。
ファイル名を指定しなくても、さくらのレンタルサーバから現在最新のアクセスログ
ファイルをダウンロードし、アクセス解析を表示する。
Yoshiaki's HomePage
http://kyoshiaki.sakura.ne.jp/osx/index.html

で公開します。あまりアクセス数の多いサイトにはむかないかもしれません。良かったらダウンロードしてください。