XULRunnerを使ったWebページキャプチャーの自動化

マイコミジャーナルのFirefoxで自動的にスクリーンキャプチャをとる方法という記事で、XULRunnerを使ってWebページのキャプチャを自動的に取得する方法が紹介されていたので、試してみた。

Webページのキャプチャを自動的に取得するにあたって、Mozilla Automated Website Screen Grabberで配布されているScreen Grabberを使用している。

記事を参考にしてmybrowser.jsとmybrowser.xulに少々手を加えて実行。起動はコマンドプロンプト上で

xulrunner -app application.ini -file c:\imgout\site-list.txt

のように入力して実行するだけ。

実行した結果は、以下の通り。

レンダリングは何ら問題ないのだけれど、Yahoo! JAPANではブラウザのユーザーエージェントを判定しようとして失敗しているのだろう、推奨環境が表示されていた。

で、マイコミジャーナルの記事を読み進めていくと、FirefoxにもXULRunnerが実装されているとのことなので、同様に試してみた。

起動はXULRunnerの時と同様に、コマンドプロンプト上で

firefox -app application.ini -file c:\imgout\site-list.txt

のように入力して実行するだけ。

実行した結果は、以下の通り。

今度はきちんとブラウザのユーザーエージェントが判定されているようで、通常の表示となっていることがわかる。

私が以前作成したWebキャプチャーとは異なり、Flashなどのコンテンツもキャプチャーされている。

このあたりはうらやましい限り(表示はできてるんだけどなぁ……)。

参考

XUL

XULRunner

2010年08月29日(日) 23時30分  

自作液晶ディスプレイモニターを試してみた

前回、ハードオフで中古ルーターを買った時に、以下の写真のような自作液晶ディスプレイモニターを見つけて勢いでゲットしてしまったので試してみた。

値段は、1000円(税抜)也。

状態はジャンク扱いで、「動作しましたが、接触良くないです。800 * 600」とのことだった。

液晶のサイズの割にSVGAの解像度というのがちょっと気になるけれど、とりあえず動くかどうかを確認。

ちなみに構造は、以下のような感じ。

いかにも手作りw

早速試してみたところ、確かに接触が良くないらしく、表示が途切れる。

一旦電源をオフにして(というよりもACアダプタのジャックを引き抜いて)内部の各ソケットの差し込みを一つずつ確認。

案の定、差し込みが浅い(抜けかかっていた)ソケットがあったので、きちんと差し込んで再度電源を入れてみたところ、ちゃんと表示されるようになった。

しかも解像度はXGAだった。ちょっとラッキー。

VGA端子接続のせいなのか、少々表示がにじんで文字が見づらいけれど、一応何かに使えそうな感じ。

ひとまず動いたので満足できたことだし、さて、どういう用途に使おうか。

2010年08月28日(土) 23時16分  

静的ルーティングのお勉強(その2)

昨日の続き。というか、結果。

結論から言えば、単純にルーター2のNAT/IPマスカレード機能が有効になっていた(というか、無効にできない)のが原因だった。

メトリックの設定は今回は関係なし。やっぱり気のせいだった(苦笑)。

昨日、PINGが届かなかったことがどうしても気になって仕方がなかったので、昼間にハードオフに行って野口さん1人相当の中古ルーターを購入してきた次第。

購入してきたルーターは、以前知人からいただいたものの、WAN側のポートの接触不良(※)で使えなかったものと同じ型番(BLR3-TX4)だった。

※今日知ったのだけれど、このルーター(BLR3-TX4)の接触不良の話は割と有名な話だったようで……。

一応、接触不良もなく無事に動いてくれたので、ラッキーだったかも。

NAT/IPマスカレード機能を無効にしたところ、ちゃんとデスクトップPCからラップトップPCまでPINGが届くようになった。

その後、知人からいただいたルーターの接触不良の部分を見てみようと何気なく分解して再び組み立ててみたところ、たまに途切れることがあるけれど、WAN側のポートが反応するようになった。

なんという運命のいたずら。

購入する前に分解してみるべきだったかも。

ルータが増えたので、調子に乗って以下のような構成も試してみたが、全く問題なし。

どのポイント(PC/ルーター/アクセスポイント)からでもPINGはちゃんと届く。

今回の収穫というか覚え書き。

  • ルーターのNAT/IPマスカレード機能の有効/無効の状態を確認。
  • 静的ルーティングの設定は、デフォルトゲートウェイをうまく活かして必要最小限に。

とりあえずNAT/IPマスカレード機能を無効にできないほぼワンコインだったルーターは、処分決定かな。

2010年08月21日(土) 23時19分  

静的ルーティングのお勉強

自宅から一番近いハードオフで格安(525円)で入手して以来、ずっと放置していた中古ルーターの存在を思い出したので、静的ルーティングのお勉強。

ネットワーク構成は、以下の図の通り。

今回は、有線のみでネットワークを構成。

図のうち、ルーター1はISPから提供されているもので、ルーター2がハードオフで入手したもの。

ルーター1には有線ポートが1ポートしかないので、昔購入した無線LANアクセスポイントの有線ポートを使用。

各機器に静的IPアドレスとルーティングの設定をして、早速実験開始。

してみたのだけれど、ルーティングの設定がうまくいっていないのか、PINGがうまく届かない。

具体的な結果は、以下の表の通り。

デスクトップPC(192.168.0.14) → ラップトップPC(192.168.10.14) へのPINGのみ通らないという……。

調査すること小一時間。

ふと、ルーター1にメトリックを設定する欄がなかったことを思い出した、というか気づいた。

無関係だろうか。

怪しいのだけれど、設定欄がない以上設定できないので、検証できない。

もう1台、ハードオフで格安の中古ルーターを買って検証したいところだけれど、

  • 自宅から一番近いハードオフで、全く同じ型の(=メトリックを設定できる)ルーターが入手できる可能性は低い。
  • 違う型のルーターがはずれ(メトリックを設定できないルーター)である可能性は高い気がする。
  • そもそも格安の中古ルーターなので、動作や欠品なしは保証されない。

という理由から、なかなかハードオフまで足を運ぶ気にならない。

中古格安ルーターは、くじ引きに近い。

今回の収穫らしい収穫は、Windowsのネットワークコマンドを1つ新しく覚えたことぐらいかも。

  • ping
  • tracert

あたりは定番中の定番なので、ネットでよく見かけるけど、

  • pathping

というコマンドの存在は初めて知った。

ちなみにpathpingコマンドは、pingコマンドとtracertコマンドを併せたようなコマンドで、なかなか便利かも。

参考

ネットコマンドの使い方

2010年08月20日(金) 22時47分  

センチュリーの10.1インチUSB接続サブモニター

とりあえずメモ。

B003ULNZ6W.09.MZZZZZZZ.jpg センチュリー 10.1インチUSB接続サブモニター PLUS ONE LCD-10000U

詳しいスペックは、plus one(LCD-10000U)|センチュリー(CENTURY)を参照。

もう少し頑張って性能アップして、DVI接続可で1440*900まで表示できるようにしてくれないかな~。

そしたら即買いなのに。

ところで、どうして1280 * 800にしないで、中途半端な1366 * 768にしたのかな。

2010年08月11日(水) 23時22分  

数値を返すだけのビューって便利だよね

以下のような数字を返すだけビューを作成しておくと、何かと便利なことが多い。

 /*0~9までの数値を返すだけのVIEW*/
 create view vnum as
   select 0 as n union all
   select 1 as n union all
   select 2 as n union all
   select 3 as n union all
   select 4 as n union all
   select 5 as n union all
   select 6 as n union all
   select 7 as n union all
   select 8 as n union all
   select 9 as n
 ;

どのような場面に使うのかというと、以前紹介した1年分の年月日を生成する時や、歯抜けのIDを全て求める時などである。

これらのSQL文に上記のビューを適用すれば、発行するSQL文を短くすることができる。

実際に1年分の年月日を生成するのSQL文を書き換えてみよう。

比較しやすいように、SQL文を再掲。

 /*1年分の年月日生成*/
 select date_format(date_add('20100101', interval(number) day), '%Y%m%d') as yyyymmdd
 from (
   select hundred.n + tens.n + ones.n as number
   from (
     select 0 as n union all
     select 1 as n union all
     select 2 as n union all
     select 3 as n union all
     select 4 as n union all
     select 5 as n union all
     select 6 as n union all
     select 7 as n union all
     select 8 as n union all
     select 9 as n
   ) as ones cross join (
     select 0 as n union all
     select 10 as n union all
     select 20 as n union all
     select 30 as n union all
     select 40 as n union all
     select 50 as n union all
     select 60 as n union all
     select 70 as n union all
     select 80 as n union all
     select 90 as n
   ) as tens cross join (
     select 0 as n union all
     select 100 as n union all
     select 200 as n union all
     select 300 as n
   ) as hundred
 ) as dummy
 where date_format(date_add('20100101', interval(number) day), '%Y%m%d') < '20110101'
 order by yyyymmdd asc;

このSQL文に今回紹介したビューを適用すると、以下のようになる。

 /*1年分の年月日生成*/
 select date_format(date_add('20100101', interval(number) day), '%Y%m%d') as yyyymmdd
 from (
   --select hundred.n * 100 + tens.n * 10 + ones.n as number
   --from vnum as ones
   --cross join vnum as tens
   --cross join (select n from vnum where n between 0 and 3) as hundred
   select hundred.n + tens.n + ones.n as number
   from vnum as ones
   cross join (select n * 10 as n from vnum) as tens
   cross join (select n * 100 as n from vnum where n between 0 and 3) as hundred
 ) as dummy
 where date_format(date_add('20100101', interval(number) day), '%Y%m%d') < '20110101'
 order by yyyymmdd asc;

以上、数値を返すだけのビューって、作っておくと使い回しができて便利だよね、というお話でした。

ちなみにテーブルを作っても良いのであれば、内部でunion文をいくつも使っているビューよりもテーブルのほうが有利なのは、explainの結果を見れば明らかですな。というか、見なくても(ry。

2010/08/09追記: SQL文を一部修正。

「select hundred.n * 100 + tens.n * 10 + ones.n as number~」(修正前)と「select hundred.n + tens.n + ones.n as number~」(修正後)とでは、10000回実行した場合、ビューの場合では0.18secの差が、テーブルの場合では0.08secの差が出たので(私の環境での話。benchmarkを使用して計測)。

2010年08月08日(日) 22時48分  

CentOSでFbTerm

以前CentOSに導入したjfbtermのもっさりした動作がたまらなく嫌なので、試しに軽くて速いという評判のFbTermをDebianに導入してみた。

評判の通り、FbTermはjfbtermと比較してはいけないと思うくらい、速くて軽かった。「さらばjfbterm」と言うのもうなずける。

実はjfbtermを導入する時からFbTermの存在は気になっていたのだけれど、CentOSに流用できそうなパッケージや、導入に成功したという記事を見つけられなかったので、FbTermの導入はあきらめていた。

だが、実際にその軽さと速さを体験してしまうと、やっぱりCentOSにも導入できないかと考え始めてしまうのが私の悲しい性(苦笑)。

というわけで少し調べてみたところ、fbtermのdeb形式のパッケージを作って公開しているKeN’s GNU/Linux Diaryというサイトがtar.gz形式も公開していたので、それを使って導入にチャレンジしてみることにした。

結論から言えば、導入はあっさりと成功し、簡単に動作させることができた。

導入から動作確認までの流れは、以下の通り。


# KeN's GNU/Linux Diary のサイトからリンクを辿ってfbterm_1.1.orig.tar.gzをダウンロード。
wget -q http://kmuto.jp/debian/mtu/pool/main/f/fbterm/fbterm_1.1.orig.tar.gz

# tar.gzを解凍して、ディレクトリを移動。
tar zxvf fbterm_1.1.orig.tar.gz
cd fbterm-1.1.orig

./configure
# とすると、不足しているパッケージがあればわかるので、適宜導入。

# freetype-develパッケージを用意(freetype2-develに相当するらしい)。
sudo yum -y install freetype-devel

# fontconfig-develパッケージを用意。
sudo yum -y install fontconfig-devel

# gpm.hが無いとの警告が出力されるので、gpm-develパッケージも用意。
sudo yum -y install gpm-devel

./configure
# とすると、今度は無事にMakefileが生成されるので、make、make install。
sudo make
sudo make install

私の環境では/usr/local/bin/以下にfbtermがインストールされたのが確認できた。

ここまでできたらあとは再起動して、GRUBの起動時に起動オプションとして

vga=771

など、好みの解像度を指定すれば、フレームバッファモードで起動する。

ログインしたら、環境変数LANGの値が “ja_JP.UTF-8″ となっていることを確認して、fbtermを起動。

下の画像は、「man man」を表示してみたところ。ちゃんと日本語を表示できているし、軽くて速い。

gpmもサポートしてくれているので、作業が楽です。

なお、今回FbTermを導入した私のCentOSの環境には、OSインストール時に「Package Group selection」の段階で

  • Base
  • Editors
  • GNOME Desktop Enviroment
  • X Window System

4つを選択してインストールしている。

もしもこのエントリを参考にFbTermを導入を試みたけれど、うまく動作しないという方はヒントになれば幸い。ちなみにCentOSのバージョンは5.5。

それにしても、CentOSにFbTermを導入する記事が検索結果にヒットしないのは、簡単すぎるからだろうか、それとも何か問題があるからだろうか?

参考

2010年08月07日(土) 22時34分  

ファイアウォールを越えてNFSマウント

ファイアウォールを越えてNFSマウントする際の、NFSサーバーのポートを固定する方法。

以下のリンク先では、LinuxのNFSサーバーのポート番号を固定する設定を紹介している。

ファイアウォール(Firewall)を越えてNFSマウントしたい

ファイアウォールを越えての NFS マウント

2010年08月01日(日) 23時51分  

Windows上にNFSサーバーを構築する

WindowsとLinuxとの間でファイルを共有したいと思った場合、LinuxにSambaを導入してLinux上に共有フォルダを作成するか、Sambaに含まれているsmbmountコマンドでWindows上の共有フォルダにアクセスする方法がある。

また、samba-clientパッケージを導入すれば、mountコマンドでWindows上の共有フォルダにアクセスするという方法もある。

しかし、今回は、LinuxにSambaやsamba-clientなどのパッケージをせずにWindows上にNFSサーバーを構築することでファイル共有してみた。

今回、Windows上にNFSサーバーを構築する際に使用したのは、Windows  Services for UNIX(以降、SFU)というソフト。

cygwinやMinGWのようにWindows上にUNIXライクな環境を提供してくれるソフトである。調べてみると、2004年に無償化された模様。

SFUの機能や詳細については、以下のリンク先を参照。

【特集】マイクロソフトSFU vs Cygwin – Windows上のUNIX互換環境を徹底比較(1) マイクロソフトの提供するUNIX互換環境SFU (マイコミジャーナル)

@IT:製品レビュー:企業ユーザーのためのSFU 3.5活用ガイダンス 第1回 SFU 3.5の概要とNFS機能

SFUは、以下のサイトからダウンロードできる。

Windows Services for UNIX

SFUのインストールは、インストールウィザードに従いながら途中でカスタムインストールを選択。

コンポーネントの選択では、今回はNFSサーバーの構築が目的なので、

  • NFSクライアント
  • NFSサーバー
  • ユーザー名マッピング
  • NFS認証サーバー

のインストールをオンにし、それ以外はオフに設定。

その後のユーザー名マッピングの項目では、[ローカルユーザー名マッピングサーバー(L)]の[パスワードおよびグループファイル]を選択。

次の画面でパスワードファイルとグループファイルの名前とパスを聞かれるが、後からでも設定できるので、ここでは何も設定せずに次へ。

あとはインストール先を設定すればインストール完了。

再起動を促されるので、指示に従ってPCを再起動。

再起動後、「Services for UNIX の管理」を起動して、各種項目を設定していく。

「NFSサーバー -> クライアントグループ」で、クライアントPCを登録。

「ユーザー名マッピング -> 構成」では、インストール時に設定を省略したパスワードファイルとグループファイルを設定する。

パスワードファイルとグループファイルの内容は、クライアントとなるLinuxのパスワードファイル(/etc/passwd)とグループファイル(/etc/group)をそのままコピーしてくるだけ。

何らかの理由でコピーできない場合は、とりあえず管理者(root)や管理者用一般ユーザーの行だけを抜き出して、テキストエディタで保存すればいい。

grep '^root\|emanon' /etc/passwd
grep '^root\|emanon' /etc/group

「ユーザー名マッピング -> マップ」では、WindowsユーザーとUNIXユーザーのユーザーの紐付けを行なう。

以上まで設定できたら、次は共有フォルダの設定。

SFUをインストールすると、フォルダのプロパティに「NFS 共有」というタブが表示されるようになる。

ここで共有したいフォルダを選択し、[このフォルダを共有する]をオンにして、共有名とエンコードを設定する。

続いて、[アクセス権(P)]をクリックして、適宜アクセス権を設定する。

NFS共有の設定は、ここまで。

最後に、NFS共有がきちんとできるかどうかテスト。NFS共有フォルダ(d:/share/)には、以下のようなテキストファイルを用意してみた。

さて、クライアント(Linux)からマウントしてみよう。

マウントできました。

けれどもただ一つ、欠点が……。

Windows上のNFSサーバーをマウントする際、クライアントPCと接続しているローカルエリア接続の「Windowsファイアウォール」を無効にしなければならないということ。

この点については、CygwinでNFSサーバーを構築しても同様なのだけれども……。

一応、マイクロソフト サポート オンラインの「UNIX 3. 5 の Windows サービスにアクセスできるようにする」を参考にポートを開放してみたけれども、設定をミスったのかマウントすることができなかった。

LinuxのNFSサーバーのように、ある程度開放するポートを固定できないかなぁ。

まあ、ファイアウォールを越えてのNFSマウントは、昔から一筋縄ではいかないようで……。

2010年08月01日(日) 22時38分