優柔不断なプログラマの日記

思いつきでポチポチ書きます

sleipnirでAutoPagerizeを使う

2007年12月11日 | プログラミング

AutoPagerizeとは、ページングリンクを勝手に展開してくれる機能。
googleの検索結果なら、1画面に表示される結果は10件で、下部に「1 2 3…次へ」って表示されます。
通常は、「次へ」をクリックして次のページを見ていく訳ですが、ブラウザが勝手に読み込んで続きを表示してくれます。
使ってみると、とても楽チンです。癖になります。

FireFoxのプラグインが多数派(?)のようですが、私の愛用ブラウザsleipnirでもプラグインが開発されていました。
こちらにまとまっています→ http://wikiwiki.jp/958/

手順メモ
1.Sleipnir公式プラグインから、UserAction ExtensionとSeaHorseを入手。
2.Sleipnirオプション>クライアント>全般>スクリプトによるクライアントの操作を許可するをON
3.Sleipnir Unofficial Extensions Center で、LDRize for SeaHorse とAutoPagerize for SeaHorse をダウンロードして、それぞれのpluginsディレクトリを、C:\Program Files\Fenrir & Co\Sleipnir\pluginsにコピー。

 


ルーターのsyslogをlinuxで記録する

2007年12月10日 | 環境

我が家のルーターはBUFFALO WHR-G54S(中国語バージョン)。秋葉のジャンク通り?で3,000円くらいだったもの。たしかotto7あたりだったと思います。
それまでは、コレガのCG-WLBARAGL(a or bgの54M無線ルーター)を使っていました。基本的に問題なかったのですが、職場のNetScreen VPNに接続できなかったのです。
(IP SEC パススルーって書いてあるのに…)
とりあえずは、CG-WLBARAGLをアクセスポイント扱いにして、古い有線ルーターを使っていたのですが、WHR-G54Sを見かけてしまい、WDSというのを試してみたかったので購入。
WHR-G54S <-> CG-WLBARAGLでWDSは割と簡単に疎通しました。

で、WHR-G54S、は設定画面が中国語(繁体字)なのであまり詳しく見ていなかったのですが、どうもsyslog出せるみたいじゃないですか。というわけで設定してみました。

ルーター側:
webの設定画面で、進階設定>管理設定>Syslog輸出設定 「使用」にチェックつけて、「syslog伺服器」に内部のサーバーアドレスを指定し、設定。

syslogを受け取るサーバー側:(CentOS 4.4)

(1)/etc/syslog.conf を編集
#local1.noneを追記
*.info;mail.none;authpriv.none;cron.none;local1.none    /var/log/messages

#ルーター用記述
local1.*                                  /var/log/router

(2)空のログファイルを作る。
# touch /var/log/router

(3)/etc/sysconfig/syslog を編集。-rオプションを追記
SYSLOGD_OPTIONS="-r -m 0"

(4)syslogd を再起動
# service syslog restart

これで、/var/log/routerにルーターのログがドカドカ記録されました。


ちなみに、この記事を参考にして、そのまま記述しましたがダメでした。
記事中では、/etc/syslog.confに「user.*」と記述していますが、そこが機械によって異なるようです。
※ファシリティ値(Facility)というらしい。

それが、このWHR-G54Sでは、local1なので、読み替えなければなりません。
ちなみに検索の末、こちらのページを参考にしました。

local1.noneを記述しないと、/var/log/messagesにもルーターのログが記録されてしまいます。(*.infoが該当するのかな)

 


(サンプルロジック)再帰処理ロジック

2007年12月04日 | プログラミング

教えてgoo!を見ていたら、このような質問を見つけました。

既に回答がついていて、いろいろあるなあと読んでいました。でも質問は「0がn個、1がm個」って定義していて、直接解にするのは難しそうです。シンプルに考えたら、桁数は決まっている2進表現のうち、0と1の個数が特定のものを抜き出したら簡単かなとひらめき、回答してみました。

でも、良く考えたら2進表現、要は0と1のすべての組み合わせを、桁数をパラメータ化して列挙するって、どう組んだらいいのでしょうか。
なんとなく、「再帰」かなと思うのですが。思えば再帰のロジックなんて作ったことないです。昔アルゴリズム事典みたいな本でソート処理とかで見かけた程度。

簡単すぎて記事にならないのか、探し方が悪いのか、検索してもなかなかマッチする記事を見つけられません。
というわけで、作ってみました。質問はjavaカテゴリでしたが手元にあるPHPで。
出来上がりは短いソースですが、結構がんばりました。なんか、犬が自分の尻尾を追いかけてぐるぐる回るような気持ちです。

呼出は第1パラメータの$ketaです。第2パラメータは再帰用です。

function rekkyo($keta, $str = '')
{
    for ($i=0; $i<2; $i++) {    // 2進表現なので0..1のループ
        if ($keta > 1) {
            // 桁がそろうまで再帰連結していく
            rekkyo($keta - 1, $str . $i);
        } else {
            // 桁が全部そろっているなら表示する
            echo $str . $i . "<br>n";
        }
    }
}


(SQL)いろいろなJOIN~FULL JOIN~

2007年12月03日 | プログラミング

・1,2行目はshouhin_bunrui_codeで結合されるので、NATURAL JOINの結果と同じです。http://blog.goo.ne.jp/shinx1265/e/b6b00c96e674489f63981d9c499e2095
・3行目は左側のテーブルのみ存在している結果です。LEFT JOINの結果の中で、条件不一致だったレコードと同じです。
・4行目は逆に右側のテーブルのみ存在している結果です。RIGHT JOINの結果の中で、条件不一致だったレコードと同じです。
・つまり、LEFT JOINの結果とRIGHT JOINの結果をマージしたことになります。よって、下記SQLと同じ結果になります。
SELECT * FROM shouhin LEFT JOIN shouhin_bunrui USING (shouhin_bunrui_code)
UNION
SELECT * FROM shouhin RIGHT JOIN shouhin_bunrui USING (shouhin_bunrui_code)

準備はこちら

(SQL)いろいろなJOIN~CROSS JOIN~

2007年12月03日 | プログラミング

・直積(デカルト積)ですから、そのまんまですね。shouhinテーブルの3レコード×shouhin_bunruiテーブルの2レコード=6レコード。
・片方のテーブルがゼロレコードの場合は当然結果もゼロレコードです。
・一般的にはこのままでは用途があまり無いと思われますので、WHERE句に結合条件を記述することになると思います。
・下記SQLもまったく同じ結果が得られます。
SELECT * FROM shouhin, shouhin_bunrui;

準備はこちら

(SQL)いろいろなJOIN

2007年12月03日 | プログラミング
SELECTに欠かせないJOINですが、私の場合、普段よく使うのは、INNER JOINとLEFT JOINぐらいです。
が、他にもあるので、勉強してみました。

1.table_a NATURAL JOIN table_b
・table_aとtable_bの同名列を結合条件としたINNER JOINと等価。
※table_a INNER JOIN table_b USING (列名)

2.table_a CROSS JOIN table_b
・FROM table_a, table_b と記述した場合と等価。いわゆる直積、デカルト積。得られる結果レコード数は2テーブルのレコード数の積。

3.table_a FULL JOIN table_b < ON 結合条件式 | USING (列名) >
・table_aとtable_bの両テーブルのレコードすべてが含まれる。一致する場合は結合され、一致しない部分はNULLとなる。
・LEFT JOINとRIGHT JOINをUNIONした結果と同等。

■やってみたこと。(DBMS=Oracle 10g express)
・サンプルテーブル準備
CREATE TABLE shouhin
( shouhin_code INT
, shouhin_name VARCHAR(100)
, shouhin_bunrui_code INT
);
CREATE TABLE shouhin_bunrui
( shouhin_bunrui_code INT
, shouhin_bunrui_name VARCHAR(100)
);
INSERT INTO shouhin VALUES (1,'ボールペン黒',10);
INSERT INTO shouhin VALUES (2,'ボールペン赤',10);
INSERT INTO shouhin VALUES (3,'ノート無地',20);
INSERT INTO shouhin_bunrui VALUES (10,'ペン');
INSERT INTO shouhin_bunrui VALUES (30,'用紙');



結果は別記事で。
NATURAL JOIN編
CROSS JOIN編
FULL JOIN編