入門GNU Emacs(第1,2章)

10月 15th, 2009 admin

入門 GNU Emacs 第3版
入門 GNU Emacs 第3版
posted with amazlet at 09.10.15
Debra Cameron James Elliott Marc Loy Eric Raymond Bill Rosenblatt
オライリー・ジャパン
売り上げランキング: 92953

EmacsかViを使う機会が多くなってきたのでどちらかをちゃんと勉強してみることに。比較してみた結果、やっぱりプログラミングに強いってのと、ViのEscを押すたびに左手を動かすのはだるいと思ったのと、なにより「俺の.emacsは1000行以上あるぞ」「いやいや、むやみに増やすなど愚行の極み。私なぞ100行以下に抑えてありますぞ」的な自慢大会に参加したいのでEmacsを選択。

いまのところカーソル移動と、ファイルの保存とかぐらいはできるのでそこからステップアップして、ウインドウがいっぱい開いたりしても慌てないようになりたい。

第1章、第2章まで読んで知ったこと

・Emacsはファイルを直接編集するのではなく、ファイルの内容を一時バッファに読み込んでバッファの内容を編集する。
・*scratch*はメモ用 *Help*はヘルプメッセージ用でファイルに結びつけられていない特別なバッファ
・特定の言語やフォーマット用にモードというのがある。メジャーモードが一つ選べ、マイナーモードを好きなだけ設定できる。
(Rubyモードならタブを2つにするとか)
・起動時は*scratch*バッファが開く
・上のメニューはF10かM-バッククォートで開く
・コマンドを入れるところはミニバッファという
・すべての入力はコマンドとして扱われる。Aを押しても押されたキーボードの値を挿入しろというコマンドが呼ばれる
・C-cなんちゃらというキーストロークはモード特有の機能と結びつけられることが多い
・ヘルプのバッファ(下のバッファ?)を閉じたいときはC-1
・削除やコピーした文字列はキルリングという領域に格納される(クリップボードではない)

使いそうなショートカット

・C-x C-f ファイルを開く(C-x C-vで今のをやめて別のファイルを開く)
・C-x C-b バッファの切替え
・C-x C-w 名前を付けて保存
・M-> バッファの最後(End)
・M-< バッファの最初(Home)
・C-v 1画面すすむ
・M-v 一画面戻る
・M-x goto-line Enter n 指定行に移動
・C-l カーソル行をウインドウの中央に移動(画面が乱れたときも便利だよ)
・C-d delete(M-d 単語を削除)
・C-yでキリングリングから文字列を呼出(M-yでどんどん遡れる)
・C-x C-xでマーク位置を確認
・C-t 文字の入れ換え(M-t 単語の入れ換え)
・M-x revert-buffer ファイルを最終保存時にもどす
・M-x recover-file 自動保存ファイルにもどす

疑問

・altって押しにくいけどみんなメタキーって何を押してるの?また、その配置、押す指は?
・チルダがつくファイルをつくるのをやめたい(ファイルをきちんと閉じれば消えるの?)((setq backup-inhibited t) — thanks clairvy)
・画面が上下に分割されてしまったときに下のバッファを閉じる方法(追記:C-x 0 –thanks katzkawai)
・日本語入力の切替えをみんなはなにでやってるのか(AnthyだとデフォがCtrl+SpaceでEmacsとかぶる、C-@で代用?)

まとめ

・前書きの出だしが「Emacsは最強のテキストエディタです。」ってのがすごい
・ショートカットを覚えきる自信が無い
・こんな風にまじめにNetbeansの使いかたも勉強したら仕事の効率がかなりアップするだろうにと途中で思った
・がんばって続けたい

RubyとArduino(Gainer)ではじめるフィジカルコンピューティング(名古屋Ruby会議01)

10月 13th, 2009 admin

名古屋Ruby会議で「RubyとArduinoで始めるフィジカルコンピューティング」というテーマでLTを行いました。ここでは発表のデモのうち、「はてなスターがついたらパトライト点灯」のリベンジと、解説を行いたいと思います。なお、Arduinoが故障した都合で、このデモはGainerで行いました。

2009/10/13 限定ライブデモ中
僕のブクマにスターをつけるとパトランプつきますよ。(連続、同一箇所だとWebHookが飛びません。連続で遊びたいときは別の場所にスターをつけて下さい。)
本日18:00ごろまで開催延長中
http://www.ustream.tv/channel/toyosystem
10/14 デモ終了しました

概要

screenshot26
上記の図がすべてです
(1)誰かが僕のはてなブックマークにスターをつける
(2)はてなWebHookというはてなの機能で、指定URLにPOSTリクエストが送られる
(3)webrick+sinatraのスクリプトがデータを受け取り、dRubyサーバにキューを送る
(4)Gainerを操るRubyはdRubyで待機(take)しているので、データを受け取りパト点灯
という流れになっています。以下順を追って説明します。

(1)(2)はてスタが付、WebHook起動

はてなブックマークの設定のデータ管理というところで行えます。

(3)webrick+sinatraのスクリプトがデータを受け取り、rinda(dRuby)にキューを送る

初めてsinatraを使ったのですが、簡潔さに驚いた。なんと必要なコードは以下だけ

RUBY:
  1. require 'rubygems'
  2. require 'sinatra'
  3. require 'drb/drb'
  4.  
  5. post '/' do
  6.   DRb.start_service
  7.   $ts = DRbObject.new_with_uri('druby://:12345')
  8.   $ts.write(['data',params[:username].to_s.untaint])
  9. end

dRubyサーバ

こっちも簡単すぎて泣けるっていうか、irb上で動いていました

RUBY:
  1. irb>require 'drb/drb'
  2. irb>require 'rinda/tuplespace'
  3. irb>$ts = Rinda::TupleSpace.new
  4. irb>DRb.start_service('druby://:12345', $ts)
  5. rb>DRb.thread.join

(4)データを受け取りパト点灯

RUBY:
  1. require 'drb/drb'
  2. require 'funnel'
  3. include Funnel
  4.  
  5. DRb.start_service
  6. $ts = DRbObject.new_with_uri('druby://:12345')
  7. gio = Gainer.new()
  8. loop {
  9.     p $ts.take(["data", nil])
  10.  
  11.     gio.aout(0).value = 1
  12.     sleep(5)
  13.     gio.aout(0).value = 0
  14. }

まとめ

・dRuby+sinatra+Gainerは強力
・入門にはRuby+Arduinoは敷居が高いので、素直にArduino IDEを使うかGainerをオススメしたい
(導入でつまづくのってもったいないですからね)
・デモでスター付けてくれた人有難う!

発表資料

Arduino+Rubyについて名古屋Ruby会議01で発表します

10月 8th, 2009 admin

実行委員もやっている名古屋Ruby会議01のLTにて発表しますのでお知らせです。

内容は「RubyとArduinoで始めるフィジカルコンピューティング」です。
新しい言語を覚えなくてもRubyとArduinoというI/Oモジュールを使ってフィジカルコンピューティングをしちゃおうというものです。

フィジカルコンピューティングといえば、以前サーバ監視パトランプを作ったり、Twitterと連携したりしましたが、そのときはGainerというモジュールを使っていました。
ソフトウェアだけじゃない話なので息抜きにちょうどいいと思いますよ。お楽しみに!

名古屋Ruby会議01
http://regional.rubykaigi.org/nagoya01

名古屋Ruby会議01まであと1週間

10月 2nd, 2009 admin

pamph

名古屋Ruby会議01まであと1週間。
豪華プログラムも決まりました。空席はあと30名分です。

上の画像のPDFはこちら(PDF)からダウンロードできます。ぜひ会社や学校などでの紹介にご利用下さい。

みなさんと会場で会えるのを楽しみにしています。