2009年2月27日金曜日

Emacs22の文字コード判別の頭が悪い

Emacs22から文字コードの判別にmule-ucsを使わなくなり起動が早くなったらしいが、そのせいで時々文字コードを間違えるようになったみたいだ。
写真は、二行目に「初音ミク」と書いてutf-8で保存されたものを開いた時のスクリーンショット。ステータス行を見ると、Shift-jisと誤認していることがわかる。こういう時は、C-x RET c utf-8-unix RET C-x C-v RETとタイプすればUTF-8で開き直せるが、あまりにも長すぎる。
以下のような行を入れておくことで、そのファイルの文字コードを指定できる。
# -*- coding:utf-8 -*-
(#はコメント。言語に合わせてセミコロンなどでも良)
これがファイル内にあれば、utf-8でファイルを読み込んでくれるようになるのだが、いちいち全部のファイルにこれを書くわけにはいかないし、何より読み込んでからでは遅い。

coding-category-listという変数の中に、文字コードの優先順位が書いてあり、先頭のほうが優先順位が高い。
coding-category-list
=> (coding-category-iso-8-2 coding-category-iso-7-tight coding-category-sjis coding-category-iso-7-else coding-category-iso-8-1 coding-category-utf-8 coding-category-utf-16-be coding-category-utf-16-le coding-category-iso-7 coding-category-iso-8-else coding-category-emacs-mule coding-category-raw-text ...)
確かに、coding-category-utf-8より前にcoding-category-sjisがある。
この優先順位を上げてやるといいらしい。以下の式を評価してから、問題のテキストファイルを開く。
(prefer-coding-system 'utf-8-unix)
=> (mule-utf-8 . mule-utf-8)
図のように、無事にutf-8と認識するようになったので、これを~/.emacs.my.elに追記しておく。
どうやら、coding-category-listを最初から順番に試していって、最初にファイル内全てを文字として表現できたものを問答無用で使うようになっているらしい。

# しかし、初音ミクで化けるとは・・・。

2009年2月25日水曜日

横道に逸れるのが常

最近、Webページをリニューアルしようとしているのだが、フレームワーク癖がついてしまったのか、知らないうちに、ViewとかControllerなどというクラスを作ってしまっている。どうせだから、Modelも作って本当にフレームワークもどきにしてもいいかもしれない。

頭の中を整理するために、今のところの仕様を書く。

Model
  • クラス名: Model::NameOfModel(単語の先頭大文字)
  • スーパクラス: Model::Base
  • ソースディレクトリ: /model/name-of-model.rb
  • データベースには、KirbyBaseを使おうかと考えている。

View
  • クラス: View
  • ソースディレクトリ: /view/name-of-controller/name-of-view.rhtml
  • ERubyを使って実装。
  • 結果はStringで変数content_for_layoutに代入され、レイアウトに渡される。

Controller
  • クラス名: Controller::NameOfController(単語の先頭大文字)
  • スーパクラス: Controller::Base
  • ソースディレクトリ: /controller/name-of-controller.rb

あんまり本格的にRubyのクラスとか叩いたことがなかったので、「Stringに代入されているクラス名からクラスのインスタンスを作る」とか「ハッシュに含まれるキーを変数名、値を変数の値としてもったBindingオブジェクトを生成する」といった、普段やらないような、知ってるとちょっと役に立ちそうなことがいろいろわかってよかった。
もうやめたけど、一瞬ArrayをスーパクラスとしてController::Baseを定義していたのは内緒。

※それにしても、ひどいサイト名だな

2009年2月23日月曜日

VMWareでVMNet2とかを使う

仮想マシンにDebian etchを入れて、Webページのテストなどに使っているのだが、VMWareが提供するネットワークインタフェイスvmnetXが無くなった。うまく対処する方法はあったかもしれないが、以前インストールしたときのファイルが残っていたので、再インストールした。
#./install.pl
関係ないけどこれ、対話型なのがなんだか気にくわない。GUIになってるなら話は分かるけどCUIだし。
エンターを連打していたらVMNet8のネットワークアドレスが変わってしまった。設定を無理やり書き換えてもうまく行かなかったので、今回は今後のことも考えて別のインタフェイス、vmnet2を作っておく。

# /usr/bin/vmware_config.pl

これも対話型なのですぐにクリア。
しかし、このままだとVMnet8で通信して、VMNet2を使ってくれない。

そこで、仮想マシンの設定ファイル、拡張子が.vmxのファイルを編集する。
ethernet1.present = "TRUE"
ethernet1.connectionType = "custom"
ethernet1.vnet = "vmnet2"
ethernet1.addressType = "generated"
上記4行を追加する。これで、VMNet2がゲストOSではeth1として認識される。

こうやって別のネットワークにしておけば、セキュリティ対策にもいいかもしれない。

2009年2月19日木曜日

IEのCSSバグ回避

今日やたらとIEのいい加減なCSS対応に苦しめられたので、回避法をメモ。

参考 : http://journal.mycom.co.jp/special/2007/ie7/015.html

*html body a{ IE6以下(バグ利用) }

IE5以下に対応しなければならないことは最近減ったので、実質6のみで使ってる。
6はまともにCSSを読めないので、このハックはかなり使ってる。

*:first-child+html a{ IE7のみ(セレクタバグ利用) }

IE7はマトモになったけど、まだバグが拭いきれていないので、時々。

html > body a{ IE6以外 }

あんまり使いどころがないけれど・・・。
*html bodyの論理否定版とでもいおうか。IEで開発してFxに合わせるとかいう開発スタイルの人にはいいかも。そんな人いるのかなぁ。

html[xmlns]>/**/body a{ IE以外 }

上記と似たようなかんじ。いろいろ試行錯誤してると、これをつかった方法に落ち着くことが前はあった。
最近なれてきてしまってこういうの使わない。

今、IEのみに適応できるスマートな方法を探してるんだけど、ないのだろうか・・・。
あと、すごく単純な作業なので、CSSパーサを書けば、勝手にIE対応にしてくれるジェネレータとか作れそう。IEが生きてるうちに作れたら面白そうだけど・・・。

2009年2月18日水曜日

screen便利かもしれん


gnu screenっていうのは便利だね。
なぜ今まで知らなかったのか。

screenのショートカット

^z c - 新規ウィンドウ
^z SPC - 次のウィンドウ
^z NUM - NUM番のウィンドウ
^z S - 分割
^z TAB - 切り替え

ステータスラインにウィンドウリストを表示する
~/.screenrc (追加)
hardstatus alwayslastline "[%02c]%`%-w%{=b bw}%n%t%{-}%+w"
参考サイト http://d.hatena.ne.jp/zenpou/20080117/1200539192

ウィンドウ名を最後に実行したコマンドにする(zsh)
~/.zshrc (追加)
function preexec(){
if [ $TERM = "screen" ]; then
1="$1 " # deprecated.
echo -ne "\ek${${(s: :)1}[0]}\e\\"
fi
}
参考サイト http://d.hatena.ne.jp/zenpou/20080117/1200539192