2009年1月アーカイブ

2009年1月29日
| コメント(0) | トラックバック(1) 開発(という名の実験)スクリプトを公開するバーチャルホストを作った

NANOChatをMENTA化する時に「menta.nqou.net」というヴァーチャルホストを作ったが、NanoAとかYacafiにも興味が出てきたので、何でも突っ込めるように「devel.nqou.net」というヴァーチャルホストに変更した。
そのうち、mentaの方は消します。

とりあえず、ソースを簡単に公開できるようにソースビューアを作った。名前はsourcereaderだけど。
一応ソースのハイライトもするようにした。
作りかけて思ったけど、フレームワークを使って作るのがいかに簡単かというのがわかった。
大したスクリプトでもないのに、結構時間がかかった。

ついでに、jqueryFileTreeからソースを見ることができるようにした。
単純にリンクしても良かったが、折角なので何かを使うことにした。
その何かはfaceboxという名前のjQueryのプラグイン。
とりあえず動くようにはなったけど、そのうち変えるかも。
今さっき気づいたけど、prettyPhotoのシリーズにprettyPopinというのがあった。
使えるかどうかはわからないけど、そのうち試してみよう。

jQuery popin solution - prettyPopin - by Stephane Caron

さりげなくメッセージを出すのが、こんなに簡単にできるとは!

GrowlはMac OSXをお使いの方であれば知っているであろう、通知を行うためのフレームワーク的アプリケーションだ。Firefox、Cyberduck、Skypeなどなど、大抵のソフトウェアで利用されている。通知メッセージは画面の右上に表示され、時間が経過すると自動で消えていく、非常に使い勝手の良いアプリケーションだ。

それが「Growl」らしい。
妻は今現在Mac使いだが、私のMac歴はSystem7で止まっているので、何のことかはわからない。
が、WindowsXPの場合はバルーンがこれに当たるだろうなぁと想像したが、ほぼ正解だった。

で、それをjQueryを使って実現したのが「jGrowl」です。

jGrowlはそんな仕組みをJavaScriptで実現している。さらにjQueryプラグインとして提供することで、とても簡単に呼び出すことができる。Ajaxを使う場合はもちろん、様々な場面で利用できそうだ。

ただ使うだけなら本当に簡単です。
jqueryとjquery.jgrowl.jsを読み込んだ後、「$.jGrowl」で(それこそalertのように)使えます。
当然スタイルシートも忘れずに。

オフィシャル:stanlemon.net : jgrowl

調べ物をしていたら、画像の表示方法が格好良いサイトがあった。
いいなと思って調べてみたら、それは「LightBox」というライブラリらしかった。
prototype.jsをベースにしているらしい。

このブログではjQueryを使ってコードのハイライトをしているので、できればjQueryベースで似たような画像表示のライブラリがないかと思って調べてみたら、簡単に三つほど見つかった。

三つとも試してみて、最も気に入ったのが「prettyPhoto」だった。
角丸は柔らかい感じで良いですね。

f1fccb692c98939cb236cd944dd337ed.jpg 44640bcde366aab5b7a664f9f7121065.jpg 93acbcb501ee47c74ceaadfe48754bc1.jpg 4d935af2889d691b3afc87f74a311d4d.jpg

ただ、ブログで画像ファイルをアップロードするのは面倒だ。
もっと簡単にできればいいのに。

なんだこれは!!

「Enter」キーを押すことでゲームが開始される。左右の矢印「←」「→」キーで 前進と後退ができる。「A」キーがダッシュ、「S」キーがジャンプ。くれぐれも お家に帰ってから遊ぼう。仕事中に夢中になってるのを上司に見つかってリストラ されても責任は取らないからね!

画像はともかく、操作も普通にできるのはビックリ。
多少ぎこちない感はあるけれど、ほとんど気にならない。

ブラウザだけで遊べるスーパーマリオは暇つぶしにはもってこいだね。

ふとplaggerを使いたくなってインストールした。

StrawberryPerlはCPANは簡単に使えるが、plaggerのように依存モジュールの多いプログラムをインストールするのは手間がかかる、というのが今の感想。
ActivePerlの場合は、有志が必要なモジュールをppmにしてくれているのでインストールしやすくなっている。

モジュールのインストールで一番困ったのは、メールを送るのに必要なNet::SMTP::TLSの依存モジュールのNet::SSLeay。
これが入らないとGmailからメールを送ることができない。(まあ、他にもやり方はあるかもしれないけど)
検索して色々と調べてみたが、一番有用な情報はモジュールのドキュメントに書いてあった。
コンパイル済みのバイナリを使うのではなく、自分でコンパイルしたファイルを使う、というのがうまくいく秘訣のようだ。

README.Win32

本文中で出てくるバージョンは、
Strawberry Perl 5.8.8-alpha-2
OpenSSL 0.9.8e source openssl-0.9.8e.tar.gz
だが、それぞれ、
strawberry-perl-5.10.0.3.exe(Strawberry Perl
openssl-0.9.8j.tar.gz(OpenSSL: The Open Source toolkit for SSL/TLS
で、問題なくインストールできた。

4. Windows XP SP2
   Strawberry Perl 5.8.8-alpha-2
   OpenSSL 0.9.8e source openssl-0.9.8e.tar.gz
 
- Install Strawberry Perl by running the installer
  (strawberry-perl-5.8.8-alpha-2.exe in this example)
- Unpack openssl-0.9.8e.tar.gz
- cd openssl-0.9.8e
- ms\mingw32
- cd out
- ..\ms\test
   (if you have trouble getting to this stage, consult INSTALL.W32)
- md c:\openssl 
- md c:\openssl\bin
- md c:\openssl\lib
- md c:\openssl\include
- md c:\openssl\include\openssl
- copy /b inc32\openssl\*       c:\openssl\include\openssl
- copy /b out\libssl32.a c:\openssl\lib
- copy /b out\libeay32.a c:\openssl\lib
- copy /b libssl32.dll c:\openssl\bin
- copy /b libeay32.dll c:\openssl\bin
- copy /b out\openssl.exe  c:\openssl\bin
- cd Net-SSLeay-xxxx
- c:\strawberry-perl\perl\bin\perl Makefile.PL
- dmake
- copy c:\openssl\bin\*.dll blib/arch/auto/Net/SSLeay
- dmake install


一部、コピー元のファイルの場所が違っていたので、メモしておく。
「inc32\openssl\」は「outinc\openssl\」になっていた。
それ以外はバージョンの数字やperlの場所が違う程度で、特に問題はなかった。

しばらくサクラエディタを使っていたが、今回もう一ついいソフトを見つけた。
それが「Programmer's Notepad」です。

参考記事

Notepadについている基本機能の上にコードアウトライン、ドッキングツールバー、タグ、インタラクティブエラー検索、出力されたエラーをクリックするとそれを生成したコードへジャンプ、簡易検索、シンタックスハイライト、xmlファイル経由でエクスポートできるカスタマイズ可能なインターフェース。日々コードを操っている方はちょっと試してみては?

オフィシャル:Programmer’s Notepad » Home

気に入った理由は、Tagsウィンドウに関数一覧が出ること、という単純なことだけど。
これ重要。
WS000005.gif

シンタックスハイライトも、ある程度自動で適用されるし、MENTAのテンプレートファイルのように、関連付けが不明な場合でも、簡単にタイプを変更できます。
WS000006.gif

ただ、フォントの設定で「MS UI Gothic」などの等幅フォントにしても、設定がうまくいかなくて困った。
色々と試した結果、「FixedSys」が一番きれいに表示できるようだ。
WS000007.gif

あと、エディタからコマンドを実行できるのも便利。
とりあえず、文法チェックと実行はショートカットも登録して使っている。
今までは「CopalPro」とエディタをセットで使っていたが、これでエディタ単体でできるようになった。
WS000008.gif

NANOChatのMENTA化がようやく完成しました。

いらっしゃいなの。 - NANOChat

ようやくMENTAの使い方がわかった感じです。
ほんの少しですが。

MENTA化するに際して、色々と妥協した。
妥協というか、フレームワークを使うんだから、そこは自力じゃダメだろ、みたいな事を感じたので。

例えば、ログファイルの読み方とか。
というか、そもそもメインのログはSQLiteを使うことにしたので、そこら辺はバッサリ。
コードを移植するんじゃなく、コンテンツを移植するのだと。
JSONの時はわかったフリをした感じだったけど、その辺を理解し、納得するのに結構時間がかかった。

ログファイルの最後から読んだり、がちがちのHTMLで出力したり等、色々意味不明なこだわりがありましたが、生産性を上げるという観点から考えると、MENTAにあるフレームワークの機能は使っていかないと、それこそMENTAを使う意味が薄れてくる。

フレームワークに慣れていきたいね。
NanoAやYacafiにも手を出してみようかな。


もともと、MENTAに手を出したのは、事前にコンパイルのような作業をして最適化する、という話があったから、だったのだけれど。
実際に使ってみて、(たぶんだけど)その辺はどっかにいってしまったのかなと。

参考
Perlの軽量ウェブアプリケーションフレームワーク最新事情 - はてな#hide-k

またゲームにはまっています。
流行ったのは、2007年の7月くらいらしいですが。

参考
中毒性が高いとウワサの「Desktop Tower Defense」に、ばっちりはまってしまった

どんなゲームなのかと、ちょっとやってみたのが運の尽き。
久しぶりにゲームで徹夜しました。

Desktop TD is a fun flash based puzzle / strategy game where you have to protect your desktop from invaders by spending money on attacking pieces and building a maze for them to follow. A strangely addictive yet stress relieving game... how many levels can you survive? For further details on how to play the game see the Instructions. Played before? Check out the latest updates.


最初は敵が左から右へ流れていくのを邪魔しないように砲台を置いて、固まった敵を打ち落とし損ねたり、早い敵に逃げられたりして、何がそんなに面白いのかわからなかったのです。
敵に当たったら砲台が壊れると思っていたので、通路に砲台を並べるしかないし。

しかし、そんなことはなかったのです。
実は砲台で迷路を作って、敵を誘導することができるのでした。

それがわかってから、迷路をどういうふうに作っていくかを、あーでもないこーでもない、と試行錯誤しながら、気がつけば夜が明けていたという。

なんとかHardモードでもクリアできるようになりましたが、まだノーミスでクリアできていない…。
まずは、ノーミスでクリアできるようになりたいです。

NANOChatのMENTA化がなかなかうまくいかない。
なんというか、グローバル変数が多いのでスクリプトがわかりづらいです。
誰だ?こんなスクリプト書いたのは?

ということで、またまた気分転換に。
MENTAの標準添付モジュールを触ってみるコーナー。
第一弾はClass::Accessor::Fastです。

これだけで簡単にOOPな気分が味わえますね。
値の出し入れができるアクセサーを提供してくれます。
今回の例では「Point」というクラスに「x」と「y」というアクセサーを作った事になります。

参考
MENTA標準添付モジュールについて - MENTA
Class::Accessor::Fast - Faster, but less expandable, accessors - search.cpan.org


あと、MENTAは関係ありませんが、面白そうだったので「B::Deparse」を試してみました。
Perlがどのように解釈しているかを表示してくれるのは、なかなかためになります。

参考
404 Blog Not Found:perl - B::Deparse

flickrfetcherに気をとられて気づきませんでしたが、他にも面白いサービスをやっていました。

参考
ゆーすけべー日記: 今聴いている曲の歌詞が見れる「LastLyrics」を作ってみた

今聴いている曲もしくは最近聴いた曲の歌詞が見れるサイトです。 メジャーな曲のみ対応しています。

APIを組み合わせたマッシュアップサイトですが、こういうサービスをさっくり作れるのは凄いですね。

flickr_fetcher.plは、元々は引数でキーワードを入れるという、とてもフレキシブルなスクリプトです。

元ネタ
ゆーすけべー日記: Flickr からキーワードにマッチした写真を一括ダウンロードする Perl スクリプト「flickr_fetcher.pl」

が、前エントリーでは、プログラムの中に直接書き込む事を選んだので、別のキーワードで画像を探すときにはその部分を変更してやる必要が出てきます。
ローマ字や英語でキーワードを入れる場合はかまいませんが、日本語の検索は標準のコマンドプロンプトでは無理なのです。

本来なら配布されているプログラムの中身を変えるのは、配布元で更新があったときに、それに対応するのが面倒なので、できれば変えたくない。
実際、このスクリプトの場合はページの最大値を求める計算方法が変わった。
勝手に改造した部分には変更はなかったが、こういうのは精神衛生上良くない。

…と思いながらソースを見ていると、モジュールとスクリプトを分けて記述してあることに気づいた。
実際の実行部(スクリプト部分)はたったの2行(宣言と空白を入れて4行)だった。

package main;
 
my $fetcher = FlickrFetcher->new_with_options();
$fetcher->run();

ここだけを別のファイルに切り分けて、FlickrFetcherモジュールを使うようにすれば、スクリプトファイルを別で用意すればいいので、それほどややこしくない。
今回は、スクリプトファイルの中身は簡単でしたが、keywordとdirのデータを沢山揃えてfor文でfetchに流してやれば、かなり収集が便利になるでしょう。


というところで、モジュール化したFlickrFetcherですが、現時点で二つほど改善点があります。
どちらも、fetchルーチン内です。

一つは「Transfer truncated」で止まってしまう事がある問題です。
細かく調べてはいませんが、止まらなければ良いので、evalで括ってしまいました。
本来ならリトライを頑張るところでしょうが、そのあたりは誰かにおまかせです。

もう一つは、検索結果が1枚だけの時にループで「Not an ARRAY reference」と言われてしまいます。
parse_responseメソッドの親切心(?)が仇になっているのでしょうか?
ともあれ、ARRAY referenceでない場合はARRAY referenceに変換するようにしました。

あと、モジュールにはしましたが、podは変更してません。

画像を集めるのは結構大変だったりするわけですが。
Yahoo!Pipesで複数のソーシャルブックマークから情報を収集していて面白いスクリプトを見つけました。

ゆーすけべー日記: Flickr からキーワードにマッチした写真を一括ダウンロードする Perl スクリプト「flickr_fetcher.pl」


最初は記事に書いてあるとおり使ってみようとしたのですが、コマンドプロンプトがShift_JISのせいなのか、キーワードを入れてもヒットしないのです。
Windowsを呪ってみても仕方がないので、スクリプトの中にキーワードを入れて使うことにしました。

どのように入れるか迷いましたが、とりあえず、BUILDに直接書き込みました。

sub BUILD {
    my ( $self, $args ) = @_;
 
    unless ( $self->api_key ) {
        if ( my $api_key = $ENV{FLICKR_API_KEY} ) {
            $self->api_key($api_key);
        }
        else {
            die "api_key is required\n";
        }
    }
    unless ( $self->keyword ) {
        $self->keyword('石原さとみ');
    }
    unless ( $self->dir ) {
        $self->dir('satomi_ishihara');
    }
 
    my $xs = XML::Simple->new( KeepRoot => 1, keyattr => [] );
    my $parser = WebService::Simple::Parser::XML::Simple->new( xs => $xs );
    my $flickr = WebService::Simple->new(
        base_url        => "http://api.flickr.com/services/rest/",
        param           => { api_key => $self->api_key },
        response_parser => $parser,
    );
    $self->_flickr($flickr);
}

これに伴い、keywordとdirのrequireをとりました。

has 'keyword' => ( is => 'rw', isa => 'Str' );
has 'dir'     => ( is => 'rw', isa => 'Dir', coerce => 1 );
has 'api_key' => ( is => 'rw', isa => 'Str' );
has 'license' => ( is => 'rw', isa => 'Int' );


(わかったようにやっていますが、雰囲気でやってみて、結果としてうまくいっただけです。)
で、結果は以下のとおり。

satomi.jpg

いやいや。
便利なスクリプトをありがとうございます。

MENTAで行き詰っているので、気分転換に。

Pipes: Rewire the web

どんなことをするのか、というのは、解説するよりも実際に見てみるほうが良いかもしれません。
Browse Pipes: Browse Pipes

私は各種ソーシャルブックマークからperlタグがついている記事を集めたりしています。

私は寝てましたが。

日本標準時の維持・管理を行っている、NICT 独立行政法人情報通信研究機構の小金井本部にて、2009年1月1日に行われたうるう秒実施の様子を見てきました。NICT小金井本部の研究本館には、現在の日本標準時を示す電光掲示板があります。この掲示板を撮影し、うるう秒実施時の様子収めています。動画中でも言及していますが、今年は見学者の人数が多かったそうで。

うるう秒の瞬間って見れるのか?と思って興味深く見ました。

あと、こんなのも。

Module::Starter(::PBP)を試したが、残念な結果に終わったので、次に手を出すことにした。
Module::Setupです。

参考
YappoLogs: Module::Setup - pmsetupをモジュール化した

Google検索

Last.fm

このアーカイブについて

このページには、2009年1月に書かれたブログ記事が新しい順に公開されています。

前のアーカイブは2008年12月です。

次のアーカイブは2009年2月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Creative Commons License
このブログのライセンスは クリエイティブ・コモンズライセンス.
Powered by Movable Type