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');


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

Google Blog Search に ping を送る Perl スクリプト

  Google Blog Search に ping を送ることができるようになったらしいので,XMLRPC::Lite を使って ping を送るスクリプトを書いてみました.

#!/usr/local/bin/perl

use strict;
use warnings;
use XMLRPC::Lite;

our $endpoint = 'http://blogsearch.google.com/ping/RPC2';

my @parameters = (
    'cl.pocari.org',
    'http://cl.pocari.org/',
    'http://cl.pocari.org/',
    'http://cl.pocari.org/cl.rdf',
);

my $result = XMLRPC::Lite
    -> proxy($endpoint)
    -> call('weblogUpdates.extendedPing', @parameters)
    -> result;

print qq/$result->{message}($result->{flerror})\n/;


  Movable Type だと「更新Ping/トラックバックの設定」に http://blogsearch.google.com/ping/RPC2 を追加すれば OK っぽいです.
  では,これは何かというと,手動で ping を送る必要のある chalower 向けだったりします.

  ちなみに,ちゃんと ping が送られたかは http://blogsearch.google.com/changes.xml にアクセスすればわかります.
  でも,XML のパースエラーでブラウザで表示できないときもあります.
  その場合は,wget とかで取得して確認してみてください.

- ref.: Got blog? Will ping.
  http://googleblog.blogspot.com/2006/10/got-blog-will-ping.html

- ref.: About Google Blog Search Pinging Service API
  http://www.google.com/help/blogsearch/pinging_API.html

- ref.: Google Blog Search Help
  http://www.google.com/help/blogsearch/about_pinging.html

Perl ベストプラクティス

  4873113008
  http://www.amazon.co.jp/o/ASIN/4873113008/todaysnonsenc-22/ref=nosim/
  Damian Conway (著)
  オライリー・ジャパン
  ISBN: 4873113008
  2006/8/24
  4,515 円

- via: たつをの ChangeLog
  http://nais.to/~yto/clog/2006-09-18-5.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

最新 LL フレームワークエクスプローラ 5 大フレームワーク徹底攻略

  477412818X
  http://www.amazon.co.jp/o/ASIN/477412818X/todaysnonsenc-22/ref=nosim/
  Software Design 編集部
  技術評論社
  ISBN: 477412818X
  2006/7/7
  1,974 円

Lightweight Language の初学者を対象に、Ruby On Rails、Maple、Ethna、TurboGears、Catalyst の 5 大フレームワークを徹底解説する。

  ということで,以下の 5 つのフレームワークの特集らしい.

- via: www.textfile.org
  http://d.hatena.ne.jp/textfile/20060707/fw

Perl プログラミング救命病棟

  4798109401
  http://www.amazon.co.jp/o/ASIN/4798109401/todaysnonsenc-22/ref=nosim/
  ピーター・J・スコット (著), トップスタジオ (翻訳), 伊藤 直也 (翻訳)
  翔泳社
  ISBN: 4798109401
  2005/09/06
  3,129 円

WEB+DB PRESS Vol.32

  4774127523
  http://www.amazon.co.jp/o/ASIN/4774127523/todaysnonsenc-22/ref=nosim/
  WEB+DB PRESS編集部 (編集)
  技術評論社
  ISBN: 4774127523
  2006/04/25
  1,554 円

  新連載多すぎ.

Firefox のブックマークのアイコンを好きなアイコンに変更する方法

  Firefox はブックマークのアイコンに favicon.ico を自動で表示してくれるので便利ですが,これを好きなアイコンに変える方法.
  変更しないと,なにが困るかと言うと,例えば,はてなわんわんワールドをブックマークしてブックマークツールバーフォルダに表示した場合
  はてらぼの favicon.ico が登録されてしまいます.

  「はてわん」はやっぱり「しなもん」だろうということで,こういうときに変更すると便利です.

  まず,しなもんの画像をはてわんから持ってきます.gif アニメーション形式なので適当に一つ切り出します.
  これをアイコンエディタなどでアイコンとして書き出します.

  次に,このファイルを base64 でエンコードしてあげます.例えば,Perl だと以下のようのワンライナーで書けます.

perl -MMIME::Base64 -0777 -ne 'print encode_base64($_, "")' < cinnamon.ico

  実行すると,次のようにbase64 でエンコードされた文字列が出てきます (表示のために 76 バイトで改行を入れていますが,実際は一行です).

AAABAAEAEBAAAAEACABoBQAAFgAAACgAAAAQAAAAIAAAAAEACAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAxMT/AACgoAD+AP4Ab6/vAH+//wCPyf8AH1ePAABFSAAAP20AUFBQAGBgYABwcHAA
/v7+AICAgAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACggIAAAAAAAAAAAAAAAMCwkNBQgAAAAAAAAAAAAACwYL
CAUICgAAAAAAAAAAAAAACA0NDQYKAAAKCAAAAAEADQ0NBQUNBgoKDQUIAAAADQ0FBQUEBQQNCQkF
CAAODQ0FBQUEBwQFBA0EBQgAAA0FAAUEBAkEAgUEBQQJAAAFDQUFAggEAgQCBAIFBAACAAUICA0I
CQgCBAIEAgUAAg0IAAIFCAAACQgEAgUIAAIFCAACCAAAAAAACQgIAAACCAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//AAD4/wAA4H8AAOA/AADAGQAAgAAAAAAA
AAAAAAAAgAAAAIAAAACAAAAAiMAAAInxAACf/wAA//8AAP//AAA=

  そして,Firefox のプロファイルディレクトリにある bookmarks.html を見つけて開きます.
  該当するブックマークの個所を見つけて,

ICON="data:image/x-icon;base64,AAABA.../AAA="

  と上記の文字列を記入すれば OK です.Firefox を起動すると無事アイコンがしなもんになっていると思います.

  # この作業は Firefox を終了してから操作してください.

  しなもん

  とまあ,ここまでは,ネタ振りで本題はここから.

  ブックマークツールバーフォルダに Bookmarklet を置いている人は多いと思いますが,
  例えば,アイコンだけを表示したい場合は Bookmarlet だとディフォルトのアイコンになって区別がつきません.

  そこで,上記の方法を使えば,Bookmarklet だろうがアイコンを好きなものにつけることができます.

  たとえば,はてなブックマークに登録の [B!] もはてぶのページから [B!] の画像を持ってきて,アイコンに変更してしまえばいいわけです.
  アイコンに変更したら

perl -MMIME::Base64 -0777 -ne 'print encode_base64($_, "")' < append.ico

  [B!] のアイコンは以下のようにエンコードされます (表示のために 76 バイトで改行を入れていますが,実際は一行です).

AAABAAEAEBAAAAEABAAoAQAAFgAAACgAAAAQAAAAIAAAAAEABAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAD/AAAA/wD/AP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAMzMzMzMzMzMzMzMzMzMzMzAAAAAAAAADAiIiIiIiIiACIAAAAiACIAIgAiIA
IAIgAiACIgAiIiACIAIiACACIAIgAAACIAIgAiACIAIgAiACIAIgAiACIAIgAAAiIAIgAiIiIiIi
IiAwAAAAAAAAAzMzMzMzMzMzMzMzMzMzMzP//wAA//8AAIABAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAgAEAAP//AAD//wAA

  これも先ほどの手順で (Firefox を終了した状態で) bookmark.html に

ICON="data:image/x-icon;base64,AAABA...//wAA"

  と追加してしまえば,以下のように見やすくなります.

  しなもん

  これで,よく使う Bookmarklet もアイコンで見分けがつくようになります.

  あと,上記手順ではアイコン形式でやりましたが,image/x-icon を image/png にして png でやってあげてもうまくいきそうな予感がしますが,未確認です.

PHP の unserialize() の 多言語での実装

  を見ていて,PHP の serialize() は便利だから,もしかしたら他の言語でも実装があるのでは?
  と思ったら,案の定たくさんあった.

- JavaScript
  http://www.phpguru.org/static/PHP_Unserialize.html
  http://www.phpguru.org/downloads/PHP_Unserialize/

- Perl
  http://search.cpan.org/dist/PHP-Serialization/lib/PHP/Serialization.pm
  http://hurring.com/code/perl/serialize/

- Ruby
  http://www.aagh.net/projects/ruby-php-serialize

- Java
  http://hurring.com/code/java/serialize/

- Python
  http://hurring.com/code/python/serialize/

- C#
  http://sourceforge.net/projects/csphpserial/

- Flash/ActionScript
  http://sourceforge.net/projects/serializerclass/

- via: Using Serialized PHP with Yahoo! Web Services
  http://developer.yahoo.net/common/phpserial.html#otherlangs

- ref.: Web屋のネタ帳
  http://neta.ywcafe.net/000544.html

YouTube のビデオを埋め込む chalow プラグイン

  突然思いついたけど,使い道がないような気がする.

# usage: {{youtube('YouTube のパラメタ (v=) の値')}}
sub youtube {
    my ($id) = @_;
    return qq(<object data="http://www.youtube.com/v/$id" type="application/x-shockwave-flash" width="425" height="350">
          <param name="movie" value="http://www.youtube.com/v/$id" />
          </object>);
}


- 使用例 (大きさを若干小さくしています)
  



- YouTube - Broadcast Yourself
  http://www.youtube.com/