Vim を 256 色で使いたい

  以前ターミナルを 256 色にしたのですが,せっかくなので Vim も 256 色で使いたいと思って以下のようなスクリプトを書きました.

#!/usr/bin/env perl

use strict;
use warnings;

my $fg = "\x1b[38;5;";
my $bg = "\x1b[48;5;";
my $rs = "\x1b[0m";

my $color = 0;

for (my $row = 0; $row < 32; ++$row) {
    for (my $col = 0; $col < 8; ++$col) {
        print get_color($color);
        $color++;
    }
    print "\n";
}

sub get_color {
    my ($color) = @_;
    my $number = sprintf '%3d', $color;
    return qq/${bg}${color}m ${number} ${rs} ${fg}${color}m${number}${rs} /;
}


  さて,こいつは何をするかというと,使っているターミナル上で何番の番号が何の色かを表示するものです.
  自分の環境では以下のようになります (クリックして大きくなります).

  

  この番号はそのまま Vim の色指定の番号になります.
  つまり ctermfg とか ctermbg とかに,表示された色を見ながら番号を指定することができます.
  例えば,上記スクリプトで表示された色番号 21 を使いたい場合は,以下のように設定する感じですね.

hi diffAdded    ctermfg=21


  こうやって設定して vim -d をしたサンプルです.淡い色も使えていい感じです.

  

Web 標準 XHTML+CSS デザイン クリエイターが身につけておくべき新・100の法則。

  4844324241
  http://www.amazon.co.jp/o/ASIN/4844324241/todaysnonsenc-22/ref=nosim/
  加藤 善規/平澤 隆/両見 英世 (著)
  インプレスジャパン
  ISBN: 4844324241
  2007/7/3
  2,310 円

デザイン的なテクニックだけで満足していませんか?
デザインを忠実に再現するだけではない、ワンランク上の実践的コーディングノウハウを解説。
Web 標準サイト制作を行う上で基本となる XHTML の基礎から現場で使える CSS の技までオールカラーの図解、実例を使って丁寧に解説。
もう「できません」ではすまされない Web クリエイターのための一冊。やりたいことがすぐにできる新・100 の法則シリーズ最新刊!

WordPress 2.2でつくる!最強のブログサイト ― 2.1/2.2対応

  4881665782
  http://www.amazon.co.jp/o/ASIN/4881665782/todaysnonsenc-22/ref=nosim/
  乙彼 三太郎; 田中 広将 (著)
  ソーテック社
  ISBN: 4881665782
  2007/6/18
  2,709 円

  『WordPress でつくる!最強のブログサイト』の改訂版

実践 Web 2.0 BOOK

  4844324187
  http://www.amazon.co.jp/o/ASIN/4844324187/todaysnonsenc-22/ref=nosim/
  津久井 玲宏 (著), 古川 健介 (著), 野間 恒毅 (著), 秋田 真宏 (著), 吉川 英興 (著), 秋元 裕樹 (著)
  インプレスジャパン
  ISBN: 4844324187
  2007/6/27
  1,680 円

Web 2.0 でオフィスが変わる - メールも予定表も企画書も、すべてのデータを Web 上に置こう!

  サブタイトルが不評なようですね.内容ではないですよ.念のため.

Ethna×PHP LL フレームワーク Books

  4774131393
  http://www.amazon.co.jp/o/ASIN/4774131393/todaysnonsenc-22/ref=nosim/
  藤本 真樹/一井 崇/鶴岡 直也/新井 啓太 (著)
  技術評論社
  ISBN: 4774131393
  2007/6/27
  1,980 円

本書は PHP を利用した Web フレームワーク・Ethna (エスナ) の解説書です。
Web フレームワークとは何か,Ethna を使うために何が必要かなどの基礎知識からはじまり,
開発環境のインストールと設定,Ethna を利用した簡単な Web アプリケーションの作成までを一通り解説します。
Web プログラミングを勉強中の人,PHP による Web アプリケーション開発のスキルを向上させたい人にお勧めできる一冊です。

dig の出力に色をつける dig-color

  dig の出力に色をつける dig-color というのを作ってみました.
  リソースレコードタイプは A/NS/CNAME/SOA/MX のみにしか対応していませんので,そのほかのタイプが必要であれば追加してください.

#!/usr/bin/env ruby

colors = {
    "section" => "02;01",
    "comment" => "37",
    "normal"  => "00",
    "A"       => "32",
    "NS"      => "34",
    "CNAME"   => "36",
    "SOA"     => "33",
    "MX"      => "31",
}

IO.popen("dig " + ARGV.join(" ")) { |io|
    io.each_line { |line|
        color = colors["normal"]
        if line =~ /^;;.+SECTION:$/
            color = colors["section"]
        elsif line =~ /^;/
            color = colors["comment"]
        elsif line =~ /^(.+\s)(SOA|NS|A|MX|CNAME)(\s.+)$/
            color = colors[$2]
            # レコードタイプのみに色を付ける場合
            #line = sprintf "%s\e[%sm%s\e[00m%s\n", $1, colors[$2] ,$2, $3
        end
        printf "\e[%sm%s\e[00m", color, line
    }
}


- 出力例 (この色が見やすいかどうかは……)
  


- 追記
  Perl で書き換えてくれた方がいました.

- dig の出力に色をつける dig-color(perl版) | cafe chantant blog
  http://www.cafechantant.com/blog/2007/07/04/dig-%e3%81%ae%e5%87%ba%e5%8a%9 ...

prototype.js を svn で取得してビルドする方法

  prototype.js の最新機能を確認したい時に,Subversion のリポジトリから取得してビルドする方法です.
  いつも忘れるのでメモ.

$ svn co http://svn.rubyonrails.org/rails/spinoffs/prototype/trunk prototype
$ cd prototype
$ rake

  dist/prototype.js に最新版がビルドされます.

- ref.: Prototype JavaScript framework: Download Prototype
  http://www.prototypejs.org/download

- ref.: Prototype JavaScript framework: Contribute
  http://www.prototypejs.org/contribute

MeCab を使って読み仮名を取得する方法

  出力フォーマットの指定すれば可能です.忘れやすいのでメモ.

$ echo 東京特許許可局 | mecab --node-format="%f[7]" --eos-format="\n"
トウキョウトッキョキョカキョク

- ref.: 出力フォーマット
  http://mecab.sourceforge.net/format.html

- 追記 1
  上記だと,以下のようなエラーが出ることがある.

tagger.cpp(172) [writer_.write(&ostrs_, str, n)] writer.cpp(322) [n < psize] given index is out of range

  --unk-format="%M" オプションを追加すればエラーが出なくなった.

  ……というか,-Oyomi オプションだけで OK っぽい.うーむ.ドキュメントをよく見ていなかった.

- ref.: 出力フォーマットの変更
  http://mecab.sourceforge.net/#format

- 追記 2
  読み仮名だけに関して言えば MeCab 0.9x より MeCab 0.81 の方が精度がいいような気がする.
  例えば,0.96 だと「北海道立図書館」は「ホッカイドウタテトショカン」,「函館市交通局」は「ハコダテイチコウツウキョク」になる.これ以外にも,○○市△△とかはうまくいかないことが多い.
  0.81 の場合は,このあたりはうまくいく.

  扱うものによるので一概には言えないけど,0.81 と 0.9x でのチェックは必要になりそう.

- 追記 3 (2007-08-21)
  辞書のバグだった模様で、mecab-ipadic-20070801 で修正されています。

- [mecab-users 290] Re: 「立」「市」の読み仮名
  http://lists.sourceforge.jp/mailman/archives/mecab-users/2007-August/00028 ...

- [mecab-devel 68] mecab-ipadic-20070801
  http://lists.sourceforge.jp/mailman/archives/mecab-devel/2007-August/00006 ...

ウェブユーザビリティの法則 改訂第2版

  4797339098
  http://www.amazon.co.jp/o/ASIN/4797339098/todaysnonsenc-22/ref=nosim/
  スティーブ・クルーグ (著), 中野 恵美子 (翻訳)
  ソフトバンククリエイティブ
  ISBN: 4797339098
  2007/3/1
  2,940 円

Windows の DNS キャッシュをクリアする方法

  ipconfig /flushdns

  上記のように

C:\>ipconfig /flushdns

  で OK.DNS Client サービスの再起動やシステム自体の再起動でも OK.

  キャッシュされている情報を見るには displaydns オプションを指定します.

C:\>ipconfig /displaydns

  おそらく,Windows 2000 以降のみだと思われます.

- ref.: ipconfig コマンドを使ってクライアント リゾルバ キャッシュをフラッシュおよびリセットする
  http://www.microsoft.com/technet/prodtechnol/windowsserver2003/ja/library/ ...

- ref.: ネットワーク接続に対して Ipconfig 診断ユーティリティを使用するための構文とオプション
  http://support.microsoft.com/kb/314850/ja

- 追記 (2007-11-16)
  DNS Client サービスが停止している場合、以下のようなエラーが表示されます。

Could not flush the DNS Resolver Cache: 関数は実行中に失敗しました。

PHP による JavaScript を書かない Ajax

  4861671752
  http://www.amazon.co.jp/o/ASIN/4861671752/todaysnonsenc-22/ref=nosim/
  佐久嶋 ひろみ (著)
  九天社
  ISBN: 4861671752
  2007/05
  3,150 円

  HTML_AJAX/xajax,CakePHP/symfony の情報など

- サポートページ
  http://sakushima.net/BOOK/AjaxFramework/

XREA の SSH 用のホスト登録を自動で処理する

  XREA に SSH で接続する際は,以下のようにホストを登録する必要があります.

  FTP/SSH接続許可ホスト入力

  一度登録してしまえば 30 日は有効になるのですが,IP アドレスが変更になった場合や複数のサーバを使い分けている場合にとても不便なので,自動でホスト情報を登録するスクリプトを WWW::Mechanize を利用して書いてみました.

#!/usr/bin/env perl

use strict;
use warnings;
use WWW::Mechanize;

my $url = 'XREA の管理画面の URL';
my $userid = 'ID';
my $passwd = 'パスワード';

# ログイン画面
my $mech = WWW::Mechanize->new();
$mech->get($url);

$mech->form_number(1);
$mech->set_fields('id' => $userid, 'pass' => $passwd);
$mech->click_button('name' => 'explain');

# ログイン直後の画面
$mech->form_number(1);
$mech->click_button('name' => 'telnet');

# ホスト情報登録画面
$mech->form_number(6); # 5 -> 6 に変更になった (2008-02-22)
$mech->click_button('name' => 'ssh2');


  エラー時の処理などは一切行っていませんのでご注意を.

PHP の round(0.49999999999) が 1 になるのか実際に試してみた

  以下のサイトにて,PHP の round() の挙動について解説されていました.
  そこで,実際に 1 になるのかどうか試してみました.

- hnwの日記 - PHPの奇妙なround関数
  http://d.hatena.ne.jp/hnw/20070515

  結論から書くと,1 になる場合もならない場合もありました.こういうのが一番困ります.
  分かったことは,バージョンによる差ではなくて,環境による差だろうということです.

  round() を使う前にその環境で確認しておくことが重要ですね.

1 になる環境

$ uname -mrs
Linux 2.4.9-e.9.18mlsmp i686

$ php -v
PHP 4.3.3 (cli) (built: Oct  9 2003 14:50:50)
Copyright (c) 1997-2003 The PHP Group
Zend Engine v1.3.0, Copyright (c) 1998-2003 Zend Technologies

$ php -r 'var_dump(round(0.49999999999));'
float(1)

$ uname -mrs
Linux 2.6.9-42.ELsmp i686

$ php -v
PHP 4.4.7 (cli) (built: May 28 2007 14:26:24)
Copyright (c) 1997-2007 The PHP Group
Zend Engine v1.3.0, Copyright (c) 1998-2004 Zend Technologies

$ php -r 'var_dump(round(0.49999999999));'
float(1)

$ uname -mrs
Linux 2.6.17.13-smp i686

$ php -v
PHP 4.4.6 (cli) (built: May  2 2007 16:49:35)
Copyright (c) 1997-2007 The PHP Group
Zend Engine v1.3.0, Copyright (c) 1998-2004 Zend Technologies

$ php -r 'var_dump(round(0.49999999999));'
float(1)

1 にならない (0 になる) 環境

$ uname -mrs
Linux 2.4.9-e.9.18mlsmp i686

$ php -v
PHP 4.3.2 (cli) (built: May 10 2004 15:01:20)
Copyright (c) 1997-2003 The PHP Group
Zend Engine v1.3.0, Copyright (c) 1998-2003 Zend Technologies

$ php -r 'var_dump(round(0.49999999999));'
float(0)

$ uname -mrs
SunOS 5.10 i86pc

$ php -v
PHP 4.4.7 (cli) (built: May 13 2007 13:56:00)
Copyright (c) 1997-2007 The PHP Group
Zend Engine v1.3.0, Copyright (c) 1998-2004 Zend Technologies

$ php -r 'var_dump(round(0.49999999999));'
float(0)

$ uname -mrs
SunOS 5.10 i86pc

$ php -v
PHP 5.2.2 (cli) (built: May 13 2007 14:15:44)
Copyright (c) 1997-2007 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2007 Zend Technologies

$ php -r 'var_dump(round(0.49999999999));'
float(0)

$ uname -mrs
SunOS 5.10 sun4u

$ php -v
PHP 5.2.1 (cli) (built: Feb 28 2007 16:54:38)
Copyright (c) 1997-2007 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2007 Zend Technologies

$ php -r 'var_dump(round(0.49999999999));'
float(0)

$ uname -mrs
Linux 2.6.17.13-smp i686

$ php -v
PHP 4.4.4 (cli) (built: Jan  8 2007 00:09:11)
Copyright (c) 1997-2006 The PHP Group
Zend Engine v1.3.0, Copyright (c) 1998-2004 Zend Technologies

$ php -r 'var_dump(round(0.49999999999));'
float(0)

$ uname -mrs
Linux 2.4.32 i686

$ php -v
PHP 4.4.4 (cli) (built: Sep  9 2006 10:36:27)
Copyright (c) 1997-2006 The PHP Group
Zend Engine v1.3.0, Copyright (c) 1998-2004 Zend Technologies

$ php -r 'var_dump(round(0.49999999999));'
float(0)

$ uname -mrs
Linux 2.6.17.13-smp i686

$ php -v
PHP 5.2.2 (cli) (built: May 25 2007 00:09:33)
Copyright (c) 1997-2007 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2007 Zend Technologies

$ php -r 'var_dump(round(0.49999999999));'
float(0)

$ uname -mrs
SunOS 5.8 i86pc

$ php -v
PHP 4.3.4 (cli) (built: Nov 30 2005 06:29:37)
Copyright (c) 1997-2003 The PHP Group
Zend Engine v1.3.0, Copyright (c) 1998-2003 Zend Technologies

$ php -r 'var_dump(round(0.49999999999));'
float(0)