ターミナルエミュレータ「ck」を入れる

新しいマシンが来た!ということで、
今頃になってようやくWindows7を触れることになった。
なにはともあれ、まずはcygwinをセットアップ。
こちらは難なくインストール完了。
そして、次はターミナルのckを入れる。

cygwin ck terminal emulator
 http://www.geocities.jp/meir000/ck/index.html

知らなかったけど、cygwinのパッケージにminttyというのが入っていた。
puttyをベースに作られていて、普通に使う分にはこれでよさそう。
けど、ckに比べると日本語の扱いがいまいち。
ckは、UTF-8Shift_JISEUC-JPを混在して扱えるのが便利。

ひと昔前は、ckのセットアップをするのにちょっと苦労してたけど、
ver3になってからは、ずいぶんすっきりと簡単になった。

設定変更も、さっと終わった。以下、変更点。
・ラインバッファを増やす。
・デフォルトの表示行を少し増やす
・背景をちょっと透明に
・カーソルを点滅させる
・カーソルの色を変更
・フォントを変更
キーバインド変更
 左Alt+N,Mで新ウィンドウ
 左Alt+J,Kでシェル切り替え
 左Alt+Vでペースト
 左Shift+↑↓で行移動

う〜ん、やっぱりminttyよりずっと快適。

--- .ck.config.js.backup	2011-06-17 00:07:52.932600600 +0900
+++ .ck.config.js	2011-06-16 23:32:01.990934900 +0900
@@ -4,7 +4,7 @@
 
 Config.tty.execute_command = "/bin/bash --login -i";
 Config.tty.title = "ck";
-Config.tty.savelines = 1000;
+Config.tty.savelines = 99999;
 Config.tty.input_encoding   = Encoding.UTF8;
 Config.tty.display_encoding = Encoding.SJIS | Encoding.EUCJP | Encoding.UTF8;
 Config.tty.scroll_key = 1;
@@ -15,13 +15,13 @@
 
 Config.window.position_x = null;
 Config.window.position_y = null;
-Config.window.cols = 100;
-Config.window.rows = 36;
+Config.window.cols = 120;
+Config.window.rows = 30;
 
-Config.window.scrollbar_show  = 1;
-Config.window.scrollbar_right = 1;
+Config.window.scrollbar_show  = 0;
+Config.window.scrollbar_right = 0;
 Config.window.blink_cursor    = 1;
-Config.window.transparent     = WinTransp.None;
+Config.window.transparent     = WinTransp.Transp;
 Config.window.zorder          = WinZOrder.Normal;
 Config.window.linespace       = 0;
 Config.window.border_left     = 1;
@@ -33,18 +33,18 @@
 Config.window.mouse_middle  = MouseCmd.Paste;
 Config.window.mouse_right   = MouseCmd.Menu;
 
-Config.window.font_name = "MS Gothic";
-Config.window.font_size = 12;
+Config.window.font_name = "mplus-1m";
+Config.window.font_size = 16;
 
 Config.window.background_file     = "";
 Config.window.background_repeat_x = Place.NoRepeat;
 Config.window.background_repeat_y = Place.NoRepeat;
 Config.window.background_align_x  = Align.Center;
 Config.window.background_align_y  = Align.Center;
-Config.window.color_foreground  = 0x000000;
-Config.window.color_background  = 0xFFFFFFFF;
+Config.window.color_foreground  = 0xFFFFFFFF;
+Config.window.color_background  = 0xDD000000;
 Config.window.color_selection   = 0x660000FF;
-Config.window.color_cursor      = 0x00AA00;
+Config.window.color_cursor      = 0xFFFF33;
 Config.window.color_imecursor   = 0xAA0000;
 
 Config.window.color_color0  = 0x000000;
@@ -65,18 +65,18 @@
 Config.window.color_color14 = 0x44FFFF;
 Config.window.color_color15 = 0xFFFFFF;
 
-Config.accelkey.new_shell        = Keys.ShiftL | Keys.CtrlL | Keys.N;
-Config.accelkey.new_window       = Keys.ShiftL | Keys.CtrlL | Keys.M;
+Config.accelkey.new_shell        = Keys.AltL | Keys.N;
+Config.accelkey.new_window       = Keys.AltL | Keys.M;
 Config.accelkey.open_window      = Keys.ShiftL | Keys.CtrlL | Keys.O;
 Config.accelkey.close_window     = Keys.ShiftL | Keys.CtrlL | Keys.W;
-Config.accelkey.next_shell       = Keys.CtrlL  | Keys.Tab;
-Config.accelkey.prev_shell       = Keys.ShiftL | Keys.CtrlL | Keys.Tab;
-Config.accelkey.paste            = Keys.ShiftL | Keys.Insert;
+Config.accelkey.next_shell       = Keys.AltL | Keys.J;
+Config.accelkey.prev_shell       = Keys.AltL | Keys.K;
+Config.accelkey.paste            = Keys.AltL | Keys.V;
 Config.accelkey.popup_menu       = Keys.ShiftL | Keys.F10;
 Config.accelkey.popup_sys_menu   = Keys.AltR   | Keys.Space;
 Config.accelkey.scroll_page_up   = Keys.ShiftL | Keys.PageUp;
 Config.accelkey.scroll_page_down = Keys.ShiftL | Keys.PageDown;
-Config.accelkey.scroll_line_up   = Keys.None;
-Config.accelkey.scroll_line_down = Keys.None;
+Config.accelkey.scroll_line_up   = Keys.ShiftL | Keys.Up;
+Config.accelkey.scroll_line_down = Keys.ShiftL | Keys.Down;
 Config.accelkey.scroll_top       = Keys.ShiftL | Keys.Home;
 Config.accelkey.scroll_bottom    = Keys.ShiftL | Keys.End;

XMLHttpRequestとクロスドメイン

MooToolsのRequestを試そうと、
ローカルにすべてのファイルを置いて試していたがどうもうまくいかない。
よくよく考えたら、HTTPのリクエストを投げるんだから、WEBサーバがないと動くわけない。
で、WEBサーバに向けてリクエストを投げてみたが、それでもうまくいかない。

いろいろ探っていると、ローカルのHTMLからリモートへリクエストを出しているのがまずいらしい。
XMLHttpRequestには同一ドメインとしか通信ができない制限があるのだとか。
WEBサーバにHTMLとMooToolsのファイルを置いたら、問題なく動作した。

http://ja.wikipedia.org/wiki/XMLHttpRequest

続:テンプレートエンジンTenjinを使ってみる

Tenjin::ContextHelperを使ったら、いちいち値を渡さなくてよいのでちょっと便利。

main.rb:

require 'sinatra/base'
require 'tenjin'

class MyEngine < Tenjin::Engine

  def initialize(path, line, options)
    @template_path = path
    super({})
  end

  def render(app, locals, &block)
    super(@template_path, app)
  end
end

Tilt.register :rbhtml, MyEngine

class Main < Sinatra::Base
  include Tenjin::ContextHelper

  def bar
    'bar method'
  end

  get '/' do
    @ins_var = 'instance value'
    render(:rbhtml, :index, {}, self)
  end
end

実行結果:

hiro@neptune% cat views/index.rbhtml
@ins_var = #{@ins_var}
bar = #{bar}
hiro@neptune% cat config.ru
require './main'
run Main
hiro@neptune% thin start &
[1] 5296
hiro@neptune% >> Using rack adapter
>> Thin web server (v1.2.7 codename No Hup)
>> Maximum connections set to 1024
>> Listening on 0.0.0.0:3000, CTRL+C to stop

hiro@neptune% curl localhost:3000
@ins_var = instance value
bar = bar method

テンプレートエンジンTenjinを使ってみる

ふと、Sinatraで標準対応していないテンプレートエンジンのTenjinを使ってみようと思い、
いろいろ試してみたところ、なんとかいけそうな感じにはなってきた。
Sinatraは内部でTiltという汎用的なテンプレートのインターフェースを使っているが、
それに合わせたクラスにしてやればいいようだ。

test_template.rb:

require 'sinatra'
require 'tenjin'

class MyEngine < Tenjin::Engine

  def initialize(path, line, options)
    @template_path = path
    super({})
  end

  def render(app, locals, &block)
    super(@template_path, locals)
  end
end

Tilt.register :rbhtml, MyEngine

helpers do
  def tenjin(*args)
    render(:rbhtml, *args)
  end
end

get '/' do
  tenjin :index, {}, {:foo => 'foo value'}
end

実行結果:

hiro@neptune% cat ./views/index.rbhtml
<html>
<body>
${@foo}
</body>
</html>
hiro@neptune% ruby test_template.rb &
[1] 2412
hiro@neptune% == Sinatra/1.1.2 has taken the stage on 4567 for development with backup from Thin
>> Thin web server (v1.2.7 codename No Hup)
>> Maximum connections set to 1024
>> Listening on 0.0.0.0:4567, CTRL+C to stop

hiro@neptune% curl http://localhost:4567
127.0.0.1 - - [13/May/2011 00:23:41] "GET / HTTP/1.1" 200 40 0.0160
<html>
<body>
foo value
</body>
</html>

MemoryCard Utility (Canon) を無効にする

Canonのデジカメに付属しているユーティリティをインストールすると、
メディアを挿したときに自動でMemoryCard Utilityが起動して、ImageBrowserの画像取り込みメニューが表示される。
ImageBrowserを使っていればこれでよいのだが、写真管理はLightroomでやっているので、自動起動されるとちょっとうっとうしい。

これまでMemoryCard Utilityが起動されるごとにすぐ終了させていたが、いい加減面倒になってきた。
なんとかこれを無効にしようと探っていると、この機能の設定がぜんぜん別の場所にあった。

アプリケーションフォルダにイメージキャプチャがあるが、
この環境設定で「カメラを接続したときに起動する項目」があり、ここで設定されていた。

この値を「割り当てアプリケーションなし」にすれば、自動起動が無効になる。
それにしても、設定がImageBrowser以外の場所にあるとは盲点だった。