Windows+EclipseでPerl開発(2)

ここしばらくもはやワンコと関係のない話題が続いているけど続くと書いてしまったのでEclipse+EPICでのPerl開発について続きを

EPICの設定

EPICをEclipseにインストールすると、「ウィンドウ」→「設定」のダイアログの左メニューに「Perl EPIC」と言う設定ツリーが追加されています。ツリートップで「Perl executable: 」の部分に、インストール済みのPerl実行プログラムのパスを設定しておきます。また、「Default Web-Start page」の部分も環境に合わせて設定しておくとそれなりに便利になります。Epic_setup_01
Apache等Webサーバをインストールしている場合、http://localhost/に設定するなり、自分が今使用しているワークスペースのプロジェクトのURLを設定するなりしておけば、開発しながらWebアプリケーション画面を見ることができます。

Perlプロジェクトを作る
別に説明するほどでもないと思いますが、EPICインストールをすると、「ウィンドウ」→「パースペクティブを開く」→「その他」のパースペクティブ一覧ダイアログに「Perl」パースペクティブが追加されています。まずはそのパースペクティブを開いておくことから。
他のパースペクティブでもPerlプロジェクトは作成できますけどね。

「ファイル」→「新規」→「プロジェクト」を選択すると作成できるプロジェクト一覧に「Perl」フォルダができており、中にPerl Projectがあるので、それを選択して「次へ」ボタンをクリックしましょう。
その後はプロジェクト名を決める程度しかこの時点では設定がありません。

Perlパースペクティブを使っていると、「EPIC Web Browser」や「PerlDoc」などの独自ビューを利用できます。がEPIC Web BrowserはURLを自分で入力しなければいけないなど利用は面倒。むしろFirefoxやIEを開いてみる方が楽かもしれません。PHPEclipseのPHPブラウザは設定さえちゃんとしておけば、開いたファイルのURLを自動で開いてくれるのでこっちの方が楽ですよね。

use libで読み込むパスの設定
JavaでもPHPでもPerlでもそうですがライブラリのインクルードパスを設定できますね。
Perlではuse libで読み込むライブラリのフォルダパスを設定しますが、これをプロジェクト内のソースコード内に記述しても、エディタのライブラリを利用しようとしている行に×マークが表示されてしまってプロジェクトにエラーがあるみたいで多少うざくなってしまいます。
これを解決するには、プロジェクトの設定でPerl Include Pathに、ライブラリの絶対パスを追加しましょう。
「ナビゲーター」ビューの対象のプロジェクト上で右クリックして「プロパティ」を選択し、「Perl IncludePath」を開くと、ライブラリパスを適宜追加できます。

Epic_setup_02

また、「実行」メニューの「構成と実行」ダイアログを開くと「PerlCGI」と「Perl Local」が追加されていて、perlスクリプトを実行することが出来ますが、その実行方法や詳細はまた次に続く。。。(まだ続けるのか。。。)

| コメント (1) | トラックバック (2)

Windows+EclipseでPerl開発(1)

Perlの開発をデバッグ用サーバー(Linux上)で行ってきましたが、チーム開発やらソースセーフの問題もあるので、Windows+Eclipseで開発できる環境を構築。
覚書として

ActivePerlのインストール

まずはActivePerlのダウンロードとインストール
ダウンロードは以下のアクティブステイトのホームページから
ActiveState

今回はとりあえず5.8.8.820をインストール
msiファイルをダウンロードすればダブルクリックしてインストールウィザードにそって進めればインストールが完了します

Eclipse EPICプラグイン(Perl用プラグイン)のインストール
EPIC(Eclipse Perl Integration)はPerl開発に利用できるプラグインだけどたいしたことはしてくれません。コードフォーマッタが多少役に立つんですが、PHPEclipseをインストール済みならブラウザとも連携できてそれなりにWebアプリケーション構築が楽になります。

インストールするには、Eclipseの「ヘルプ」メニューから「ソフトウェア更新」→「検索とインストール」で検索先URLに下記URLを追加して行います。

http://e-p-i-c.sourceforge.net/updates

インストールが完了したら、Eclipseを再起動し、「ウィンドウ」→「設定」画面でEPICの設定にインストール済みのperl.exeファイルへのパスを設定しておきましょう。

続きはまた明日

| コメント (0) | トラックバック (0)

JavaとPHPの日付時間操作のメモ

JavaやPHPで日付や時間を操作するには、最初から用意されているAPIや関数を使って行えるので非常に簡単ですが、Javaをやって、PHPをやって、Perlをやってと複数言語で開発を進めているとどうもごちゃごちゃになってきていちいちAPIドキュメントを見てしまうので、メモとして残しておきます。

PHPの場合
time()関数、strtotime()関数、date()関数の組み合わせでほとんどの場合事足ります。
date("t",timestamp)で、月の日数も取得できるので、月末日の取得なんかも非常に簡単に行えます。

// 本日の日時文字列をフォーマットを指定して取得
// YYYY-MM-DD hh:mm:ssの形式
$nowDateStr = date("Y-m-d H:i:s");
// 一ヵ月後のタイムスタンプを取得
$nextMonthTs = strtotime( "+1 month" );
// 一ヵ月後の日時をフォーマットを指定して取得
$nextMonthStr = date( "Y-m-d H:i:s", strtotime("+1 month");

strtotime()関数は「-1 month」「+1 day」「+1 year」など可読性の高い文字列を指定して一ヶ月前、一日後、一年後などのタイムスタンプを取得できるので、非常にわかりやすい。
第二引数には、タイムスタンプを指定できるので、指定した日時の何日後などといったタイムスタンプを取得するのも非常に簡単です。タイムスタンプさえ取得できれば、date()関数で、自由なフォーマットで日時文字列を取得できます。

// 一ヶ月前のタイムスタンプを取得
$prevMonthTs = strtotime( "-1 month" );
// 一ヶ月前と15日前のタイムスタンプを取得
$prevMonthTsH = strtotime( "-15 day", $prevMonthTs );
// 一ヶ月と15日前のタイムスタンプを
// YYYY-MM-DD hh:mm:ssの形式文字列で取得
$dateStr = date("Y-m-d H:i:s", $prevMonthTsH );

date()関数での文字列取得については、PHPのdate関数のドキュメント に表があるので、こちらを軽く覚えておく感じですかね。ただこれがJavaの日時フォーマット用文字と微妙に大きく違うので混乱する時が結構あるんですよね--;

Javaの場合
Javaの場合は、以下のクラスの組み合わせで大体事足ります。オブジェクト指向なので、明朗ではあっても手続きはPHPに比べると面倒に感じます。

1) java.text.SimpleDateFormatクラス
2) java.util.Dateクラス
3) java.util.Calendar抽象クラス
4) java.util.GregorianCalendarクラス

タイムスタンプを扱うjava.util.Dateクラスを作成、操作するのが、抽象クラスjava.util.Calendarです。Calendar抽象クラスをグレゴリオ暦(現在の一般的なカレンダー)で実装したものがjava.util.GregorianCalendarクラスです。ちょっとややこしく感じるけど、コーディング自体はさほど難しいものではありません。

// 日付フォーマット用オブジェクトを作成
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// 現在のタイムスタンプからカレンダークラスインスタンスを作成
Calendar calendar = GregorianCalendar.getInstance();
// 現在日時のフォーマット文字列を作成
String nowDateStr = dateFormat.format( calendar.getTime() );
// カレンダーを一ヶ月前にずらす
calendar.roll( Calendar.MONTH, -1 );
// カレンダーをさらに15日前にずらす
calendar.roll( Calendar.DAY, -15 );
// 1ヶ月と15日前のフォーマット文字列を取得
String dateStr = dateFormat.format( calendar.getTime() );

Calendarクラスのroll()メソッドを用いて、年月日時間を前後にずらしたタイムスタンプをカレンダークラスインスタンスに設定することが出来ます。
Javaのお作法として、インスタンス作成時はCalendarクラスのオブジェクトとして宣言しますが、GregorianCalendarクラスをインスタンス化しないと、月の日付の調整をしてくれません。

| コメント (0) | トラックバック (0)

我が家の主食

うちの子の主食はeat eatのプレート1と、吉岡フードの馬肉ミックス。
二匹とも良く食べますが、上の子、はるちゃんは微妙に気分で食いつかない時があります。
吉岡フードは本当にオススメです。はるは毛が薄くてちょっと気にしていたんですが、吉岡フードにしてからかなりしっかりした毛になってきて、本当にびっくりしました。
ちなみに吉岡油糧とボクは全くつながりありませんので別に宣伝じゃありませんよ^^;

eat eatを混ぜるのは、そのまま吉岡フードをあげると、はるちゃんのお腹がゆるくなっちゃうからなんですよね。いいフードなんだけど、なかなか慣れなくて。

eat eatはこんなのです。
eat eatの紹介があるペットパークさんのサイト
ペットパーク
ちなみに、ボクが購入しているお店ってだけで、別に宣伝とかではないですよ^^;
ワンワンチャンネルとも現状なんので関係もないです^^;
ペットパークさんごめんなさい。迷惑だったらリンク削除しますのでお店行った時に教えてくださいね^^;見てたら、ケアンのはるちゃんできっとわかってくれるかな・・・?

| コメント (0) | トラックバック (0)

CentOS4.4にMySQL5環境をインストールしてみるテスト

本番環境はRHEL4なのですが、今後の移行等に備える意味でも、MySQL5.0をCentOS4.4にインストールし、動作環境の整備方法を検証してみることにしました。
まぁ、CentOS4.4ならRHELと同じでしょう。たぶん。
本番環境へのインストールも、いつになるかわかりませんがアップグレード時にできたよとかここで追記しようとは思っています。

まずは、CentOS4.4のインストール。。。は省略します。
続きを読んでいただくと、MySQLのインストールまではコマンドの順番を詳細に残してあります。

続きを読む "CentOS4.4にMySQL5環境をインストールしてみるテスト"

| コメント (0) | トラックバック (0)

検索クローラーの作成 其の二

Javaで作成してみることにしました。

Rubyを軽く調べてみて、ソケット通信が簡単なことはわかりましたが、HTTP通信の制御をエラー処理も含めて全て自分で実装しないといけないので時間がかかるから却下。
PHPとPerlとHTTP_Clientパッケージ、JavaのJakarta CommonsのHttpClientパッケージを使ってみましたが、URLがリダイレクトだった場合の処理を、JavaのHttpClientだと自動でしてくれるので非常に楽でした。PHPやPerlだと、StatusCodeとリダイレクト先URLを戻されて再度問い合わせをする処理を自分で記述する必要があるみたいで、それだったらソケット通信から作成してもあまり変わらないなぁと言うことでJavaが楽と言う判断。とりあえず検索クローラーを動かす予定のマシンはRH系のクローンOSだし問題ないかなと思います。

Jakarta Commons HttpClientは以下の記事でも少し触れられているように、RSS取得なんかでも使えますね。

http://paseo.tea-nifty.com/diary/2006/10/jsprss_5943.html

せっかくだから、少しだけJava、PHPでHTTP通信をするプログラムのサンプルでも公開してみます

続きを読む "検索クローラーの作成 其の二"

| コメント (0) | トラックバック (0)

いやぁいるんですねぇビション・フリーゼ飼ってる方

なかなか飼ってる方少ないんですが、ビション・フリーゼを飼っている方のブログを見つけました。

http://eightdoor.blog72.fc2.com/blog-entry-1.html

まだはじめたばかりみたいで記事がほとんどないんだけど、時々覗いてみようっと。
探そうと思ったことないから知らないけど、ひょっとしてビション・フリーゼ飼ってる方って結構いるのかなぁ?

うち?うちはケアーン・テリアですよー。
なかなかいないんですよこれも。
いたずらっ子っぷりがかわいい犬種ですよ。
しつけも訓練も大変ですけど^^;

| コメント (4) | トラックバック (0)

東京板橋区 城北公園ドッグラン

Pict0004東京都板橋区の城北公園ドッグランに行ったときの写真です。
ここはドッグラン内に木があるので、夏でも涼しく楽しめるんですよね。
下は砂地なんで怪我の心配は少ないんだけど。。。
芝生のほうが理想的?!
いや、芝生は維持費が高いのはわかってるんですけどね^^;

Pict0005 駅から遠いのが難点だけど、駐車場がちゃんとあるので車で行くにはいい感じかな。ドッグランは小型用だけ別でちゃんとあります。

| コメント (0) | トラックバック (0)

検索クローラーの作成 其の一

ワンワンチャンネルの自動動作するWebクローラーを作成することになった。
これまでは管理ページから、クローリング動作開始をクリックすると、ブラウザが定期更新されながらクロールすると言うものだったけど、これでは

「人がいる時しかクローリングできない」
「クローリングにブラウザを立ち上げていなければいけない」
「動作が遅い」

などの問題があるんですね。

さて、クローラーをデーモンとして立ち上げて、サーバー上でずっと動作するように作成するわけだけど、最初にクローラーのポリシーを決めないとどうしようもない。
とりあえず、細かい仕様は後々固めるとして、現状と同じ、以下のような動作をする必要があります。

1) 指定した検索エンジンを利用して、指定したキーワードの検索結果を取得する
2) 検索結果の一覧から、さらにキーワードで絞り込み、実際にそのサイトのHTMLを取得
3) 取得したHTMLを解析
4) 現在登録済のサイトへのリンクがあるなら、登録済サイトのページランクをアップ
5) サイト内リンクの数を数えてサイト構成を把握し、ページランクを決定
6) 仮登録状態で検索データとして保存

ん~、別に難しくはないんですけど、問題は1)の検索エンジンが数種類あるので、クエリ方法や結果取得ロジックを分けなきゃいかんのですね。
現状のクローラーはPHPで作成しているのですが、PEARのHTTP_Clientパッケージを利用しております。PHPはWebアプリ作るなら早いしデザインにまわすのも楽なのでいいんだけど、コマンドラインで実行した時のメモリ管理ってどうなってるんだろう?大丈夫か?これ?
何より、PerlやJava、C++などでコマンドラインツール常時実行型(いわゆるデーモン)を作成したことはあるのですが、

PHPでデーモン作成なんて、ボクの短い業務経験上のみだけど、見たことないです。実績あったら教えて欲しい。

なんだか不安なので作るならまぁPerlかJavaかRubyかなと思っております。Cで作成するのはさすがに時間がかかりすぎるし、短時間でHTTP通信の為のツールが既にある言語が望ましいですよね。
JavaにもPerlにもHTTP_Clinetに関しては、CPANや標準APIで提供されているからまぁ楽なんですがRubyやPythonはどうなんだろうか。調べてみる必要がありますね。
知っている方がいたらコメントとか頂けると嬉しいです。

やっぱりJavaが楽かなと思うけど、文字列処理が多いし、速度を考えるとPerlの方がいいような気もする。。。来週までには検証して決めないといけないのですよ。

PerlもCPANでHTTP_Clientパッケージありますので楽っちゃ楽なんだよね
ただ、コンパイルしない言語ってなんとなく後のパッケージ化とかに支障がでる気はする。
でも...Javaで作るとFreeBSDやNetBSDでの動作保証ができんのですよ。だってSunの純正VMやSDK、動作保証がありそうなJavaVMが存在しないんですもん。
Perlだったら、現在だとほぼ確実にどんなプラットフォームでも動作しまっせといえるんですけどねぇ
でも久々にJavaで開発したいんですよね。クラス設計とかJavaが一番やりやすい部分があるし何よりEclipseの存在が偉大だし、JavaDocが魅惑のツールです。あれで一発JavaDocあるんだから読めっていえるのは開発者としては楽なのですよね。

さてさてブログばかり書いてないでテストコードの一行でも書くか。。。
報告はまた後日このブログ上で!

| コメント (0) | トラックバック (0)

近所に新しいドッグカフェができました

近所に新しいドッグカフェができました。
でもうちのワンコはヒート中につきしばらくはいけない。。。
残念だけど仕方ないね。

今は、他の子がいない時間にずらして夜中お散歩してるんですが、
お散歩のときに前を通ったら店長さんがいてちょっと立ち話。
いい感じの人だったので、ヒートが終わったら行きますねー!

うーん、しばらくしたらウチノコも避妊手術受けさせないとですねぇ。

| コメント (0) | トラックバック (0)

ペット関連の口コミ情報って

ワンワンチャンネルの検索システムに口コミ機能を作りました。
いや~重くなって困った。次はキャッシュ機能をもっと強化しないと、
このままサイトデータが増えていったら、重くて使い物にならなくなりそうです^^;

ユーザーが実際に求めているのが何かというと、やっぱり実際に使えるデータであって、それはWebサイトだけにはないわけで。。。
自分も犬好きとして言うと、やっぱり、Webサイトがしょぼくてもいいお店や宿もあるわけで、心温まるような個人経営のドッグカフェやペンションの方が、でっかいサイトで大々的に宣伝しているよりもいい場合だってあるのだよ。と言うか個人的にはそっちの方が好きだったりする。
そもそも良心的にやっているところは儲けが薄いから当然宣伝費だって予算がないのだ。ワンワンチャンネルもそうだけど(涙

だから、個人的にはクチコミは好きだし、あればクチコミが充実したサイトで、ワンコとのおでかけ情報とか収集したい。でもないんですよねぇ、なかなか。
どこも広告収入が大切だからクライアントの反応もあるし、単純に目先の儲けを考えたらクチコミなんて怖くて出来ないんでしょう。

でもやる!正しい評価、埋もれた良心的ないいお店や宿の為にも(むしろ自分がそういうところを発掘して利用したい^^;)ボクはやるで~~!!
頑張っていいシステム作って、どんどん改良していくんで、皆さん、ぜひともワンワンチャンネルにいいサイトを推薦したり、口コミを投稿してくださいね!

↓ワンワンチャンネルはこちらです↓
http://www.wanwan-channel.net/

| コメント (0) | トラックバック (0)

プログラム開発のMです!

ワンワンチャンネルのプログラム開発、サーバー管理担当のMです!
いやMっていっても○ゾじゃないですよ^^;

ブログをやることになってしまったんですが、業務でやれるんだからまぁいいかとおもってます。でも...開発要望が山ほどたまってるのに、その上業務時間内でブログって正直無理じゃないですか?!

今やっているのは、ワンワンチャンネルの検索システムの強化と、より有用なサイトや店舗を自動判別する為のプログラムの検討、考案です。
現状、簡易なWebクローラー機能はあるものの、どんなワードが含まれていれば有用なサイトかなんて統計データがないと判断できません。
どれだけ人が訪れてるかとかは、実際にそのサイトのアクセス解析でもとらないとどうしようもないわけで、現状はクローラーが拾ったデータも、ユーザーからの推薦データも全て「スタッフが目視で判断している」んですね。

Yahooみたいに大企業じゃない零細企業なんだし、そんなの無理と言うか辛いとの仰せで、プログラムである程度判断できないかと言う要望は強いんですよー。

先日追加した「犬のサイト口コミ機能」もその対応策のひとつで、「みんなのクチコミや意見、判断ももらえば、いいサイトは自然に上にあがっていくんじゃないか」と言う発想なわけですが、不正なクチコミ投稿が増えたりしたらぜんっぜん意味ないんじゃないかと、メール認証とかつけたわけです。

ボクも犬が好きで飼ってるし、現状のワンワンチャンネルはまだまだだと思うけど、今、商売気ばかりのペットサイトが増えている中で、「本当に使えるいいサイトを作りたいっ!本当にいいサイトだったら利益なんて後からついてくるさ!」と言うワンワンチャンネルを始める為の企画者と会社の理念にはとても賛同してます。
現状、強制的なメールマガジン配信や設ける為の汚い手法も全くなく、大変だけどいやな仕事ではないし、純粋にいい機能を検討、設計していけるのはとてもやりがいのある仕事です。
今の目標は、ワンワンチャンネルを自分がブックマークしてブラウザのホームにしたくなるほどのいい機能をもったサイトにすることですね。今週の週末はワンコとどこにいこうかな~と言いつつ、自分でシステムを作ったワンワンチャンネルで情報を検索なんて未来を想像してます。

| コメント (0) | トラックバック (0)