プロセスツリーを可視化する pstree

  http://d.hatena.ne.jp/lurker/20060927/1159329290

  これはいいかも.
  
  オプションが Linux にインストールされているのとは少し違うみたいです.
  PID はオプションをつけなくても表示されています.FreeBSD の ports でインストールされるのも同じもの.

- 出力例

-+= 00000 root sched
 \-+- 00001 root /sbin/init
   |--- 00114 daemon /usr/lib/crypto/kcfd
   |-+- 00486 root /usr/local/apache2/bin/httpd -k start
   | |--- 00646 httpd /usr/local/apache2/bin/httpd -k start
   | |--- 00647 httpd /usr/local/apache2/bin/httpd -k start
   | |--- 00564 httpd /usr/local/apache2/bin/httpd -k start
   | |--- 00563 httpd /usr/local/apache2/bin/httpd -k start
   | |--- 00565 httpd /usr/local/apache2/bin/httpd -k start
   | |--- 00566 httpd /usr/local/apache2/bin/httpd -k start
   | \--- 00567 httpd /usr/local/apache2/bin/httpd -k start
   |-+- 00422 root /usr/local/apache/bin/httpd
   | |--- 00446 httpd /usr/local/apache/bin/httpd
   | |--- 00444 httpd /usr/local/apache/bin/httpd
   | |--- 00445 httpd /usr/local/apache/bin/httpd
   | |--- 00447 httpd /usr/local/apache/bin/httpd
   | \--- 00448 httpd /usr/local/apache/bin/httpd
   |-+- 00328 root /usr/lib/ssh/sshd
   | \-+- 00650 root /usr/lib/ssh/sshd
   |   \-+- 00653 sunaoka /usr/lib/ssh/sshd
   |     \-+- 00655 sunaoka -zsh
   |       |--- 00826 sunaoka vim /home/sunaoka/ChangeLog
   |       \-+- 00827 sunaoka pstree -U
   |         \-+- 00828 sunaoka sh -c ps -ef
   |           \--- 00829 sunaoka ps -ef
   |--- 00333 smmsp /usr/lib/sendmail -Ac -q15m
   |-+- 00492 root /bin/sh /usr/local/mysql/3.23/bin/safe_mysqld --log --datadi
   | \--- 00556 mysqld /usr/local/mysql/3.23/libexec/mysqld --basedir=/usr/loca
   \-+- 00510 root /bin/sh /usr/local/mysql/4.1/bin/mysqld_safe --log --datadir
     \--- 00555 mysqld /usr/local/mysql/4.1/libexec/mysqld --basedir=/usr/local

- インストール

$ wget ftp://ftp.thp.uni-duisburg.de/pub/source/pstree-2.27.tar.gz
$ mkdir pstree-2.27
$ tar -zxvf pstree-2.27.tar.gz -C pstree-2.27
$ cd pstree-2.27
$ gcc -O2 -o pstree pstree.c
# cp -p pstree /usr/local/bin

Web 2.0 ツールのつかいかた - まだ、Google だけですか?

  4774129089
  amazon.co.jp 詳細ページへ
  野本 幹彦(著), 梅田 望夫(著), 小飼 弾(著)
  技術評論社
  ISBN: 4774129089
  2006/10/6
  1,344 円

オープンソースの DB モデリングツール DB Designer 4 の日本語化

  http://dbdesigner.iimp.jp/

  すばらしいです.DB Designer 4 の日本語化.
  メニューやオプション画面などが日本語化されています.

  また,HTML Report プラグインの不具合も fix されています.

  DB Designer
  DB Designer

  上書きしても,日本語化できない場合は,上記サイトにあるように

C:\Documents and Settings\<USERNAME>\Application Data\DBDesigner4

  の中身を全部削除すればいいけど,設定したオプションが消えてしまう予感がするので,

DBDesigner4_Translations.ini
DBDesigner4_Translations.txt
Language.ini

  だけを消しても OK でした.

- ref.: DBDesigner の HTMLReport
  http://www.siwa32.com/article100


- via: オレンジニュース
  http://secure.ddo.jp/~kaku/tdiary/20060927.html#p05

超・極める! MySQL

  4798112135
  amazon.co.jp 詳細ページへ
  坂井 恵 (著), 志村 和彦 (著), ひろせ まさあき (著), 松信 嘉範 (著)
  翔泳社
  ISBN: 4798112135
  2006/10/4
  1,995 円

  よさげ

zsh で function definition file not found

  zsh で vim を使ってファイル名を補完しようとしたら,以下のようなエラーが出た.

_arguments:340: _vim_files: function definition file not found

  調べたけど良く分からなかったので,なんとなく ~/.zcompdump を消してログインしなおしたら直ったっぽい.
  いったいなんだったんだろうか.

実践 Ajax ― Web 2.0 アプリケーション開発への手引き

  4873113016
  amazon.co.jp 詳細ページへ
  Justin Gehtland (著), Ben Galbraith (著), Dion Almaer (著), 宮川 達彦 (監修), 加藤 慶彦 (翻訳)
  オライリー・ジャパン
  ISBN: 4873113016
  2006/10/5
  2,940 円

Perl ベストプラクティス

  4873113008
  amazon.co.jp 詳細ページへ
  Damian Conway (著)
  オライリー・ジャパン
  ISBN: 4873113008
  2006/8/24
  4,515 円

- via: たつをの ChangeLog
  http://nais.to/~yto/clog/2006-09-18-5.html

グーグル・アマゾン化する社会

  4334033695
  amazon.co.jp 詳細ページへ
  森 健
  光文社
  ISBN: 4334033695
  2006/9/15
  735 円

- via: 404 Blog Not Found
  http://blog.livedoor.jp/dankogai/archives/50633023.html

都道府県を扱う Perl モジュール Geography::JapanesePrefectures を PHP に移植してみた

<?php
class Geography_JapanesePrefectures
{
    var $_prefectures = array(
        array('id' => 1,  'name' => '北海道',   'region' => '北海道'),
        array('id' => 2,  'name' => '青森県',   'region' =>   '東北'),
        array('id' => 3,  'name' => '岩手県',   'region' =>   '東北'),
        array('id' => 4,  'name' => '宮城県',   'region' =>   '東北'),
        array('id' => 5,  'name' => '秋田県',   'region' =>   '東北'),
        array('id' => 6,  'name' => '山形県',   'region' =>   '東北'),
        array('id' => 7,  'name' => '福島県',   'region' =>   '東北'),
        array('id' => 8,  'name' => '茨城県',   'region' =>   '関東'),
        array('id' => 9,  'name' => '栃木県',   'region' =>   '関東'),
        array('id' => 10, 'name' => '群馬県',   'region' =>   '関東'),
        array('id' => 11, 'name' => '埼玉県',   'region' =>   '関東'),
        array('id' => 12, 'name' => '千葉県',   'region' =>   '関東'),
        array('id' => 13, 'name' => '東京都',   'region' =>   '関東'),
        array('id' => 14, 'name' => '神奈川県', 'region' =>   '関東'),
        array('id' => 15, 'name' => '新潟県',   'region' =>   '信越'),
        array('id' => 16, 'name' => '富山県',   'region' =>   '北陸'),
        array('id' => 17, 'name' => '石川県',   'region' =>   '北陸'),
        array('id' => 18, 'name' => '福井県',   'region' =>   '北陸'),
        array('id' => 19, 'name' => '山梨県',   'region' =>   '関東'), // 信越の場合も
        array('id' => 20, 'name' => '長野県',   'region' =>   '信越'),
        array('id' => 21, 'name' => '岐阜県',   'region' =>   '東海'),
        array('id' => 22, 'name' => '静岡県',   'region' =>   '東海'),
        array('id' => 23, 'name' => '愛知県',   'region' =>   '東海'),
        array('id' => 24, 'name' => '三重県',   'region' =>   '東海'), // 近畿の場合も
        array('id' => 25, 'name' => '滋賀県',   'region' =>   '近畿'),
        array('id' => 26, 'name' => '京都府',   'region' =>   '近畿'),
        array('id' => 27, 'name' => '大阪府',   'region' =>   '近畿'),
        array('id' => 28, 'name' => '兵庫県',   'region' =>   '近畿'),
        array('id' => 29, 'name' => '奈良県',   'region' =>   '近畿'),
        array('id' => 30, 'name' => '和歌山県', 'region' =>   '近畿'),
        array('id' => 31, 'name' => '鳥取県',   'region' =>   '中国'),
        array('id' => 32, 'name' => '島根県',   'region' =>   '中国'),
        array('id' => 33, 'name' => '岡山県',   'region' =>   '中国'),
        array('id' => 34, 'name' => '広島県',   'region' =>   '中国'),
        array('id' => 35, 'name' => '山口県',   'region' =>   '中国'),
        array('id' => 36, 'name' => '徳島県',   'region' =>   '四国'),
        array('id' => 37, 'name' => '香川県',   'region' =>   '四国'),
        array('id' => 38, 'name' => '愛媛県',   'region' =>   '四国'),
        array('id' => 39, 'name' => '高知県',   'region' =>   '四国'),
        array('id' => 40, 'name' => '福岡県',   'region' =>   '九州'),
        array('id' => 41, 'name' => '佐賀県',   'region' =>   '九州'),
        array('id' => 42, 'name' => '長崎県',   'region' =>   '九州'),
        array('id' => 43, 'name' => '熊本県',   'region' =>   '九州'),
        array('id' => 44, 'name' => '大分県',   'region' =>   '九州'),
        array('id' => 45, 'name' => '宮崎県',   'region' =>   '九州'),
        array('id' => 46, 'name' => '鹿児島県', 'region' =>   '九州'),
        array('id' => 47, 'name' => '沖縄県',   'region' =>   '沖縄'),
    );

    function prefectures()
    {
        return array_map(create_function('$p', 'return $p["name"];'), $this->_prefectures);
    }

    function regions()
    {
        return array_merge(array_unique(array_map(create_function('$p', 'return $p["region"];'), $this->_prefectures)));
    }

    function prefectures_in($region)
    {
        $pref = array_filter($this->_prefectures, create_function('$p', "return (\$p['region'] == '$region');"));
        return array_merge(array_map(create_function('$p', 'return $p["name"];'), $pref));
    }

    function prefectures_id($prefecture)
    {
        foreach ($this->_prefectures as $pref) {
            if ($pref['name'] == $prefecture) {
                return $pref['id'];
            }
        }
    }
}
?>


- 使い方

<?php
require_once 'Geography_JapanesePrefectures.php';

$geo = new Geography_JapanesePrefectures;
print_r($geo->prefectures());
// -> array(北海道, 青森県, 岩手県, ..., 鹿児島県, 沖縄県)

print_r($geo->regions());
// -> array(北海道, 東北, 関東, ..., 九州, 沖縄)

print_r($geo->prefectures_in('関東'));
// -> array(茨城県, 栃木県, 群馬県, 埼玉県, 千葉県, 東京都, 神奈川県, 山梨県)

print_r($geo->prefectures_id('東京都'));
// -> 13
?>


  山梨県は関東なのかとか,三重県は東海なのかだとかこの辺りはいろいろあるらしいけど,オリジナルに合わせてあります.
  全体的に create_function() 使いすぎてキモイことになっていまが,あまり気にしないでください.
  特に,prefectures_in() のキモさはどうにかしたいところであります.

- Geography::JapanesePrefectures
  http://search.cpan.org/~tokuhirom/Geography-JapanesePrefectures/lib/Geogra ...

- via: オレンジニュース
  http://secure.ddo.jp/~kaku/tdiary/20060915.html#p09

Firefox の Flash Player をアップデートする方法

  Flash Player にセキュリティーホールが見つかったとのことで,Flash Player をアップデートしようとしました.

- Adobe Flash Player ダウンロードセンター
  http://www.adobe.com/go/getflashplayer_jp

  ところが,Firefox ではこのアップデートを適用しても Flash Player のバージョンが古いままのときがあります.
  その際は,<Firefox をインストールしたディレクトリ>\plugins の中にある

flashplayer.xpt
GetFlash.exe (ない場合も)
GetFlash.exe.manifest (ない場合も)
NPSWF32.dll
NPSWF32_FlashUtil.exe (ない場合も)

  を削除して,例えば以下ののページにアクセスします.

- Macromedia Flash Player
  http://www.adobe.com/jp/products/flash/about/

  ここで,プラグインのダウンロードを促されますので,そのままインストールします.

  プラグイン検索サービス

  そうすると無事に,最新版にアップデートされます.

  Flash Player

 まるごとPerl! Vol.1

  4844322893
  amazon.co.jp 詳細ページへ
  小飼 弾
  インプレスコミュニケーションズ
  ISBN: 4844322893
  2006/8/24
  1,995 円

 WEB+DB PRESS Vol.34

  4774128694
  amazon.co.jp 詳細ページへ
  WEB+DB PRESS編集部
  技術評論社
  ISBN: 4774128694
  2006/8/24
  1,554 円

  買うのを忘れていた.

NewsMonster はインストールしてはいけない

  XUL な RSS リーダ NewsMonster が良さそうだったのでインストールしてみました.

- NewsMonster RSS News Aggregator - with style!
  http://www.newsmonster.org/

  意気揚々と Firefox をリスタートさせると,あらびっくり.
  画面が以下のようになってしまいました.
  縦に長く伸びているボタンみたいなのがタブで,下のほうに少しだけ表示されているのがブラウズ部分です.

  

  むむむ,ということで,アンインストールしようとして,もう一度びっくり.
  拡張機能からアンインストールできません.拡張機能にもリストされていませんでした.

  若干あせりつつ,Web でいろいろ検索して見たのですがあまり情報が見当たりません.
  参考になりそうなのが,以下のサイト.

- Buzzurro: Firefox users, never EVER install NewsMonster !
  http://buzzurro.blogspot.com/2005/09/firefox-users-never-ever-install.html

  こことは若干やり方は違うのですが,NewsMonster のアンインストールの方法を書いておきます.
  Firefox 1.5.0.6 で試しました.また,<Firefox> は Firefox がインストールされたディレクトリを指します.

1. Firefox を終了する

2. C:\newsmonster を削除する

3. <Firefox>\chrome\newsmonster.jar を削除する

4. <Firefox>\components にある以下のファイルを削除する.

   newsmonster-service.js
   newsmonster-rdf-datasources.js
   newsmonster-lib.jar
   commons-httpclient.jar
   jdom.jar
   panther.jar
   pxalan.jar
   pxercesImpl.jar
   pxsltc.jar
   regexp.jar
   reptile.jar
   runtime.jar
   talon.jar
   xml-apis.jar

5. <Firefox>\chrome\installed-chrome.txt から newsmonster がある行を削除する

6. <Firefox>\chrome\app-chrome.manifest から newsmonster がある行を削除する


  以上で,NewsMonster のアンインストールが完了します.

  Firefox 1.5 では NewsMonster はインストールしないほうがいいような気がします.
  期待していただけにちょっと残念ですが……

  XUL ベースで 3 ペインな RSS リーダー,なにかいいの知りません?

半落ち

  4062114399
  amazon.co.jp 詳細ページへ
  横山 秀夫
  講談社
  ISBN: 4062114399
  2002/09
  1,785 円

「妻を殺しました」。現職警察官・梶聡一郎が、アルツハイマーを患う妻を殺害し自首してきた。
動機も経過も素直に明かす梶だが、殺害から自首までの二日間の行動だけは頑として語ろうとしない。
梶が完全に“落ち”ないのはなぜなのか、その胸に秘めている想いとは―。

  2004 年に映画として公開されていたらしい.どうりで知らないと思った.

- 映画「半落ち」公式サイト
  http://www2.toei.co.jp/hanochi/

connect を使って簡単に多段 SSH を実現する方法

  OpenSSH 限定の話になるのかもしれませんが,localhost から remotehost1 を経由して remotehost2 に接続するような
  多段 SSH を実現するには,ポートフォワードを使う方法がありました.

  この話は以前ここでも,話題に上げたことがありました ([2005-01-24-2]).
  もちろんこの方法でも実現できますが,OpenSSH の ProxyCommand を利用することで簡単に多段 SSH が実現できます.


  1. ソース (http://www.meadowy.org/~gotoh/ssh/connect.c) を取得します.

  2. ソースのコメントを参考に connect.c をコンパイルします.うちの環境は Solaris なので,以下のようにしました.

$ gcc -O2 -o connect -lresolv -lsocket -lnsl connect.c

  3. connect コマンドをパスの通ったところにコピーします.
     もしくは後でフルパスで指定するのであれば,適当な所にコピーしておきます.

  4. $HOME/.ssh/config に ProxyCommand の設定をします.

Host remotehost2
    # ここの username は remotehost2 のユーザ名
    User username
    # /usr/local/bin/connect は remotehost1 の connect の場所を指す
    ProxyCommand ssh remotehost1 /usr/local/bin/connect %h %p


  これで,ssh remotehost2 をすれば,remotehost1 を経由して remotehost2 に接続することができます.

  connect は 多段 SSH 以外にも,SOCKS や HTTP プロキシも利用することができますので,
  社内や学内などから外部の SSH サーバに接続する場合に,とても便利だと思います.

- SSH Proxy Command -- connect.c
  http://zippo.taiyo.co.jp/~gotoh/ssh/connect.html

- ref.: 外部の SSH サーバに接続する方法
  http://www.st.ryukoku.ac.jp/services/proxy-ssh.html

- ref.:
  [2005-01-24-2]  SSH でポートフォワード
  [2004-12-19-1]  SSH で多段接続?
  [2004-04-21-13] ファイアウォールを超えて SSH する SSH Proxy Command

- 追記 (2008-04-09)
  connect.c のダウンロード先が変更になっていたので、修正しました。

RSS 配信に FeedBurner を利用することにしました

- FeedBurner
  http://www.feedburner.jp/

  RSS の配信を FeedBurner から行うようにしました.

  負荷分散にもなるし,購読状況やアクセス状況,RSS リーダの割合などが分かってなかなか面白いです.

  FeedBurner

  時折 RSS の各エントリの末尾に
  Email this Add to del.icio.us はてなブックマークへ追加
  などのリンクを見かけることはありませんか?
  私が一番最初に見かけたのは otsune さんのところなんですが,これがちょっと羨ましかったりしていました.
  実は,これは FeedBurner の機能です.さあ,ちょっと羨ましくなってきた人,FeedBurner を使ってみてはいかがですか?

Sun SSH では ServerAliveInterval が設定できない件

  NAT などの影響で一定時間通信がないと ssh 接続が固まったり,切れたりすることがあります.

  この対処法として OpenSSH の場合は,$HOME/.ssh/config などに

Host *
    ServerAliveInterval 60


  のようにして,60 秒ごとに無害なパケットを送信するようにします.

  さて,Solaris 9 あたりからバンドルされている Sun SSH も OpenSSH をベースにしているので,
  ServerAliveInterval が使える……と思ったのですがが,man ssh_config を見てもオプションは出てきませんし,
  実際に設定してみても,

/home/sunaoka/.ssh/config: line 35: Bad configuration option: ServerAliveInterval
/home/sunaoka/.ssh/config: terminating, 1 bad configuration options

  このようにエラーが出て起動できません.strings `which ssh` | grep -i ServerAliveInterval をしてみても,
  表示されませんので多分,実装されていないと思われます.

  対処法として,サーバ側で設定することができるのであれば ClientAliveInterval を sshd_config に設定してあげればいいようです.

ClientAliveInterval 60


  これで 60 秒ごとにサーバから確認用のパケットが送られてきます.
  とりあえず問題は解決したのですが,サーバ側の設定をできない場合は困りますね……

  また,参考までにベースとなった OpenSSH のバージョンを調べてみようとすると,

$ strings `which ssh` | grep OpenSSH
OpenSSH*
OpenSSH_3.6*,OpenSSH_3.7*,OpenSSH_3.8*
OpenSSH_3.2*,OpenSSH_3.3*,OpenSSH_3.4*,OpenSSH_3.5*
OpenSSH_2.*,OpenSSH_3.0*,OpenSSH_3.1*
OpenSSH_2.9p*
OpenSSH_2.5.3*
OpenSSH_2.5.0*,OpenSSH_2.5.1*,OpenSSH_2.5.2*
OpenSSH_2.5.0p1*,OpenSSH_2.5.1p1*
OpenSSH_2.3.*
OpenSSH_2.3.0*
OpenSSH-2.0*,OpenSSH-2.1*,OpenSSH_2.1*,OpenSSH_2.2*

  以上の結果からおそらく OpenSSH 3.8 ではないかと思われます.