2007年10月31日水曜日

"Hyper Estraier"の設定

スズキです。

以前、"Hyper Estraier"のインストールについて書きました。
http://suz-lab.blogspot.com/2007/10/hyper-estraier_30.html

次は設定です。
といっても、下記ドキュメントに従っただけです。
http://hyperestraier.sourceforge.net/cguide-ja.html#searchengine

▼ノードサーバの作成

[シェルにて]
# estmaster init master // 作成
# estmaster start -bg master // 起動
# estmaster stop master // 停止
※カレントディレクトリにmasterというディレクトリが作成されます。

[WEBにて]
下記にアクセス
http://localhost:1978/master_ui
user: admin
pass: admin
"Manage Nodes"リンクをクリックして、
表示したページの最初のフォームに"child"
二番目のフォームに"localhost"
を入力して"create"
※childというノードが作成されます。

▼クローラの作成

[シェルにて]
# estwaver init waver // 作成
# estwaver crawl -revcont waver // 実行
※カレントディレクトリにwaverというディレクトリが作成されます。

ただし実行する前に、waverディレクトリしたの_confを、
下記のように修正しました。
--------_conf
...
seed: 1.0|http://suz-lab.blogspot.com/
...
allowrx: ^http://suz-lab.blogspot.com/
...
nodeserv: 1|http://admin:admin@localhost:1978/node/child
...
--------
※本ブログのサイト内検索を想定しています。

▼Javaからの利用

とりあえず、下記を参考にPureJavaでの利用は成功しました。
http://hyperestraier.sourceforge.net/javapureapi/

ポイントは、
node.set_url("http://localhost:1978/node/child"); // ノードの設定
node.set_auth("admin", "admin"); // user/passの設定
くらいですね。

あー、次はTomcatのシングルサインオンやらなきゃ
http://www.jajakarta.org/tomcat/tomcat3.2-4.0/tomcat-4.0b5/src-ja/catalina/docs/singlesignon.html
これかな?

--
blog: http://suz-lab.blogspot.com/

2007年10月30日火曜日

"Hyper Estraier"のインストール

スズキです。

Teeda案件でサイト内検索機能があったので、
"Hyper Estraier"で実現しました。
(PureJavaのAPIが用意されています)
http://hyperestraier.sourceforge.net/index.ja.html

下記は、linux(Cent OS)へのインストール時のメモです。

まず、iconvとqdbmがないと、makeできないようなので、
インストール。(libiconvはrpmが微妙だったので、make)

▼libiconvのインストール
http://www.gnu.org/software/libiconv/
--------
wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.11.tar.gz
tar xvzf libiconv-1.11.tar.gz
cd libiconv-1.11
./configure
make
make install
--------

▼qdbmのインストール
http://qdbm.sourceforge.net/index.ja.html
--------
wget http://qdbm.sourceforge.net/rpm/qdbm-1.8.75-1.i386.rpm
rpm -Uvh qdbm-1.8.75-1.i386.rpm
wget http://qdbm.sourceforge.net/rpm/qdbm-devel-1.8.75-1.i386.rpm
rpm -Uvh qdbm-devel-1.8.75-1.i386.rpm
--------

準備が整ったところで、"Hyper Estraier"のインストール。

▼hyperestraierのインストール
http://hyperestraier.sourceforge.net/index.ja.html
--------
wget http://hyperestraier.sourceforge.net/hyperestraier-1.4.10.tar.gz
tar xvzf hyperestraier-1.4.10.tar.gz
cd hyperestraier-1.4.10
--------

次は、ノードの設定と、ドキュメントのクロールだね。
(上記、ビルドスクリプト化もしておきたいなー)

--
blog: http://suz-lab.blogspot.com/

2007年10月29日月曜日

MySQLの関数で暗号化と復号化

スズキです。

以前、表記をOracleで行う方法を書きました。
http://suz-lab.blogspot.com/2007/06/dbmsobfuscationtoolkitoracle.html

そのMySQL版です。(こちらの方が簡単です)
といっても、下記によくまとめられています。
http://www.ironhearts.com/diary/archives/001255.html

▼暗号化&HEX(文字列で扱えるように)
SELECT HEX(AES_ENCRYPT(USER_ID,'hoge'))
FROM USER

▼上記文字列を用いて検索(復号化)
SELECT USER_ID as userId
FROM USER
WHERE USER_ID = AES_DECRYPT(
  UNHEX(/*page.encryptedUserId*/'96EB3F0109C8A3FD7B9E3C5EE705F497'),
  'hoge'
)

これなら、違う言語を使っても、DBで同じように、
暗号/復号処理できます。(直接DBを扱う場合も便利です)

--
blog: http://suz-lab.blogspot.com/

jFeed(jQuery)でRSS/ATOM処理(再び)

スズキです。

以前、表記のようなエントリを書きました。
http://suz-lab.blogspot.com/2007/10/jfeedjqueryrssatom.html

紹介しているソースをデモサイトで見れるようにしました。
http://suzlab.x10hosting.com/feedreader.html

ホスティングサーバとの兼合いで、
ソースのフォルダ構成を変更しているので、
以前のエントリのリンクでは"NOT FOUND"になってしまいます。

なので、現状、ソースはこちらになります。
▼HTML
http://suz-lab.googlecode.com/svn/trunk/suz-example-php/www/feedreader.html
▼Javascript
http://suz-lab.googlecode.com/svn/trunk/suz-example-php/www/js/feedreader.js
▼Proxyについては下記エントリにて
http://suz-lab.blogspot.com/2007/10/phpproxy.html

デモサイト、遅いんだよね...
(広告いれると、はやくなるっぽい)
--
blog: http://suz-lab.blogspot.com/

PHPでProxy

スズキです。

AJAX関係の実装していると、XMLHttpRequestの
クロスドメインに関するセキュリティ制限を回避するために
代理で他サイトのデータを取得する下記のようなPHPを
用意することが多々あります。
http://suzlab.x10hosting.com/php/proxy.php/http://www.yahoo.co.jp
※本当はPATHINFOのURLはURLエンコードすべき

以前、file_get_contents($url)を用いてつくったのですが、
ホスティングサーバによっては、この引数に、
URLを指定できないものが多々あります。
(allow_url_fopenが1に設定されてないってことです)

そうすると、他の方法で実現しないといけないのですが、
下記、HTTPRetrieverを使うとうまくいきました。
http://code.blitzaffe.com/pages/phpclasses/category/52/fileid/6

せっかくなので、下記スクリプト群にて、
allow_url_fopenが1なら、file_get_contents($url)を利用、
そうでない場合はHTTPRetrieverを利用する、proxy.php
にしておきました。
▼proxy.php
http://suz-lab.googlecode.com/svn/trunk/suz-example-php/www/php/proxy.php
▼proxy.php内で使うProxyの抽象クラス
http://suz-lab.googlecode.com/svn/trunk/suz-example-php/app/php/lib/Proxy.php
▼file_get_contents($url)を利用したProxyの実装
http://suz-lab.googlecode.com/svn/trunk/suz-example-php/app/php/lib/proxy/FopenProxy.php
▼HTTPRetrieverを利用したProxyの実装
http://suz-lab.googlecode.com/svn/trunk/suz-example-php/app/php/lib/proxy/HttpRetrieverProxy.php
▼デモ
http://suzlab.x10hosting.com/php/proxy.php/http://www.yahoo.co.jp

近頃、Javaからの現実逃避でPHPの実装をしてしまう...
Javaの仕事やらないと...

--
blog: http://suz-lab.blogspot.com/

2007年10月27日土曜日

Teedaでfaces-config.xmlを忘れると

スズキです。

あるTeedaのプロジェクトでappMessages.propertiesの
メッセージが取得できず、ずっと困っていました。

他のTeedaプロジェクトでは取得できるのに、
dicon関係はいっしょなのに、
と途方にくれていたら、
WEB-INFの下のfaces-config.xmlを忘れていました。

--------faces-config.xml
<faces-config>
  <application>
    <message-bundle>appMessages</message-bundle>
    <locale-config>
      <default-locale>en</default-locale>
      <supported-locale>ja</supported-locale>
    </locale-config>
  </application>
</faces-config>
--------

まさに、appMessagesに関する設定が書いてあります。
これを忘れたら、appMessagesが効かないのは明らかです。
(でもなくても、Teeda自体は普通に動くんだよね...)

せっかくなんで、
suz-s2-validatorやsuz-s2-converterの
メッセージファイルも直接ではなく、
faces-config.xmlに登録して使うようにしようと思います。

そういえば、TeedaはJSFなんだよね。
たまに、忘れてしまう...

--
blog: http://suz-lab.blogspot.com/

Papervision3dで被写界深度を表現

スズキです。

ソースとか読んでの検証はしていませんが、
Papervision3dで被写界深度が表現できるらしいです。
http://ricardocabello.com/index.php?postid=418

モーションブラーも表現できれば、
かなり、リアルなインタラクティブ3Dアニメーションが
つくれるのではないかと思う。

試してみたいなー。
(その前に、Teedaいろいろ...)

--
blog: http://suz-lab.blogspot.com/

"3DS MAX”でPapervision3D用クラスの書き出し

スズキです。

"3DS MAX"から、直接、Papervision3D用クラスが書き出せるようです。
http://www.greenyouth.cc/?p=14

そろそろ、Papervisio3dの実験も復活させたい...
(業務が...)

--
blog: http://suz-lab.blogspot.com/

Firefox Portable 2.0.0.8 リリース

スズキです。

なかなか2.0.0.7がでないなー、
と思っていたら、2.0.0.8がでていました。
http://portableapps.com/news/2007-10-22_-_firefox_portable_2.0.0.8

早速アップデートです。(設定の引継ぎ方法は下記より)
http://suz-lab.blogspot.com/2007/07/firefox-portable-2005.html

週末はポータブル環境の整備をしよう。

--
blog: http://suz-lab.blogspot.com/

2007年10月24日水曜日

存在チェックValidator(Teeda)

スズキです。

最後に変なValidator作りました。

これは、会員登録などで、Emailアドレスなど入力するときに、
データベースなどに既に存在している場合は、
バリデーションに引っかかるようにするためのものです。

▼ExistValidator
http://suz-lab.googlecode.com/svn/trunk/suz-s2-validator/src/main/java/jp/co/iret/suz/s2/validator/teeda/ExistValidator.java
▼ExistValidatorImpl
http://suz-lab.googlecode.com/svn/trunk/suz-s2-validator/src/main/java/jp/co/iret/suz/s2/validator/teeda/impl/ExistValidatorImpl.java

使い方はこんな感じです。
@Required
@Email
@ExistValidator(componentName="registrationLogic", methodName="existsUserMail")
  public void setUserMail(String userMail) {
  this.userMail = userMail;
}

アノテーションで、存在チェックをするためのコンポーネント名と
メソッド名を指定できるようにしています。

ちなみに、存在チェックメソッドはこんな感じです。
public boolean existsUserMail(String userMail) {
  Map map = this.registrationDao.getUserCount(userMail);
  long count = (Long)map.get("count");
  return (count == 0) ? false : true;
}
※引数は一つ、戻り値はbooleanである必要があります

BeanDescまわりを調べるために、
s2flex2のソースを読み込んでしまった...

--
blog: http://suz-lab.blogspot.com/

郵便番号Valdator(Teeda)

スズキです。

電話番号と同じのりで、郵便番号Validatorも作成しました。
▼ZipCodeValidator
http://suz-lab.googlecode.com/svn/trunk/suz-s2-validator/src/main/java/jp/co/iret/suz/s2/validator/teeda/ZipCodeValidator.java
▼ZipCodeValidatorImpl
http://suz-lab.googlecode.com/svn/trunk/suz-s2-validator/src/main/java/jp/co/iret/suz/s2/validator/teeda/impl/ZipCodeValidatorImpl.java

使い方はこんな感じです。

@Required
@ZipCodeValidator(zipFormat=ZipCodeValidator.ZipFormat.ZIP3)
public void setZip3(String zip3) {
  this.zip3 = zip3;
}

@Required
@ZipCodeValidator(zipFormat=ZipCodeValidator.ZipFormat.ZIP4)
public void setZip4(String zip4) {
  this.zip4 = zip4
}

今回は列挙型を使っています。
列挙型(ZIP3, ZIP4)に該当する正規表現を持たせています。
public static enum ZipFormat {
  ZIP3, ZIP4;
  public String getRegExp() {
    switch(this) {
      case ZIP3: return "\\d{3}";
      case ZIP4: return "\\d{4}";
      default: throw new RuntimeException();
    }
  }
}

アノテーションや列挙型がだんだん自分になじんできたぞ。
(後一本、大物Validatorが残ってる...)

--
blog: http://suz-lab.blogspot.com/

電話番号Validator(Teeda)

スズキです。

まあ、お約束のValidatorです。
▼TelNoValidator
http://suz-lab.googlecode.com/svn/trunk/suz-s2-validator/src/main/java/jp/co/iret/suz/s2/validator/teeda/TelNoValidator.java
▼TelNoValidatorImpl
http://suz-lab.googlecode.com/svn/trunk/suz-s2-validator/src/main/java/jp/co/iret/suz/s2/validator/teeda/impl/TelNoValidatorImpl.java

番号チェックは正規表現を使っており、とりあえず、
http://hodade.adam.ne.jp/seiki/page.php?s_denwa
の"\d+-\d+-\d+"を使わしてもらってます。
(結構スカスカです)

時間があるときに、正規表現も吟味したいところです。

--
blog: http://suz-lab.blogspot.com/

EqualValidator(Teeda)作成

スズキです。

利用規約に同意しないと、先に画面に進めず、
「利用規約に同意してません」
などの警告を出す場面って結構あると思います。

このような機能をTeedaのValidatorで実現するために、
EqualValidatorなるものを作ってみました。
▼EqualValidator
http://suz-lab.googlecode.com/svn/trunk/suz-s2-validator/src/main/java/jp/co/iret/suz/s2/validator/teeda/EqualValidator.java
▼EqualValidatorImpl
http://suz-lab.googlecode.com/svn/trunk/suz-s2-validator/src/main/java/jp/co/iret/suz/s2/validator/teeda/impl/EqualValidatorImpl.java

使い方はこんな感じです。

@EqualValidator(values={"true"})
public void setAgreedFlag(boolean agreedFlag) {
  this.agreedFlag = agreedFlag;
}

valuesに指定した値と同じ値(複数可)でないと、
バリデーションに引っかかります。

ちなみに、配列で設定した文字列群のなかに、
対象の文字列が含まれるかどうかのチェックは、
Arrays.binarySearchを使うと便利です。
(今までfor使ってがりがりやってた自分が恥ずかしい...)
▼実装例
http://suz-lab.googlecode.com/svn/trunk/suz-s2-validator/src/main/java/jp/co/iret/suz/s2/validator/teeda/impl/EqualValidatorImpl.java

久しぶりに、suz-s2-validatorのアップデートでした。
(コンポーネントにしとくと、後々らくなんだよねー)

--
blog: http://suz-lab.blogspot.com/

2007年10月23日火曜日

Subversion(SVN)の運用(リリース管理など)

スズキです。

弊社(iretの方)はソフトウェア開発を機軸にしているので、
http://www.iret.co.jp/
当然、ソースはバージョン管理をしています。
(CVSやSVNです)

SVNは使い始めて1年くらいで、案件にも恵まれ、
trunk一本での運用でも問題はありませんでした。
(本番リリースもtrunkの最新をリリースする形です)

ですが、近頃、SVNで管理している案件で、
リリース用のbranchをきらなければ面倒そうなものが
出てきました。

なので、運用を、
1.とにかくtrunkにコミット
2.リリース用にtrunkのコードを調整して、trunkの最新でリリース
から、
1.あるタイミングで、リリース用branchをきる
2.それ以降リリースに関する修正はそのbranchにコミット
3.リリース後も、変更があれば、branchに修正したものをコミットし、再リリース
4.branchの内容は適宜、trunkにマージ
といった具合に変更です。
ただし、branchはリリース用一つだけとします。
(今のスキルだと、いっぱいあると多分運用できないので)

問題は、4のマージですが、ここがスムーズにできれば、
いい感じになると思います。
まあ、この辺は実際にやってみながら、って話ですね。

この辺の話って、案件の性質によって、
ケース・バイ・ケースなんだろうなー。

--
blog: http://suz-lab.blogspot.com/

2007年10月22日月曜日

"Cross Community Conference 2007 Fall"参加予定(11/6)

スズキです。

表記のイベントに参加予定です。
http://www.java-users.jp/contents/events/ccc2007fall/index.html

今回は、
Spring, Seasar2, Ruby On Rails
それぞれの立場でのWeb開発に関するお話
(ポジショントーク、パネルディスカッション)なので、
楽しみです。

"Ruby On Rails"だけ、経験ないんだよなー。

--
blog: http://suz-lab.blogspot.com/

jFeed(jQuery)でRSS/ATOM処理

スズキです。

jQueryにはRSS/ATOMを処理するための
jFeedというプラグインがあります。
http://www.hovinne.com/blog/index.php/2007/07/15/132-jfeed-jquery-rss-atom-feed-parser-plugin

フィードの取得や、いろいろなフォーマットのフィード処理を
行うことができます。

--------
// Feedの取得
jQuery.getFeed({
  url: "php/proxy.php/" + url,
  success: dispFeed
});
※urlはフィードのアドレスです。
--------
// Feedの処理
function dispFeed(feed) {
  // feedからデータを取得&表示処理
}
--------
http://suz-lab.googlecode.com/svn/trunk/suz-example-php/htdocs/js/feedreader.js

feedのプロパティは下記となります。
* feed.type
* feed.version
* feed.title
* feed.link
* feed.description
* feed.language
* feed.updated
* feed.items(JFeedItemの配列)
JFeedItem(item)のプロパティは下記となります。
* item.title
* item.link
* item.description
* item.updated
* item.id

▼HTMLファイル
http://suz-lab.googlecode.com/svn/trunk/suz-example-php/htdocs/feedreader.html
▼ProxyのPHP
http://suz-lab.googlecode.com/svn/trunk/suz-example-php/htdocs/php/proxy.php

とりあえず、suz-example-phpとして、
"Google Code"にコミットしときました。
http://suz-lab.googlecode.com/svn/trunk/suz-example-php/

--
blog: http://suz-lab.blogspot.com/

"SabreAMF 1.0-beta2"リリース

スズキです。

以前、1.0-betaリリースのエントリを書きましたが、
http://suz-lab.blogspot.com/2007/10/sabreamf-10-beta.html
下記のバグを修正したものとして、beta2がリリースされました。
> Found a bug in the AMF3 deserialization.. this is fixed now.
http://www.rooftopsolutions.nl/article/154

とりあえず、アップデートです。

--
blog: http://suz-lab.blogspot.com/

2007年10月21日日曜日

PSDParser(Java/AS3)

スズキです。

PSDファイルの処理系(Java/as3)に関する記事がありました。
http://void.heteml.jp/blog/archives/2007/10/psdparser.html
(Java)
http://blog.alternativagame.com/en/2007/07/09/parser-psd-formata/
(AS3)
http://snippets.libspark.org/trac/wiki/munegon/PSDParser

昔、そんなのないかなーって調べて、
見つからなくて、あきらめていたのですが、やはり探したらあるようです。
(まだ、ネットでの調査スキルは甘いなー)

PSDファイルをアップロードして、レイヤーごとに難かしら処理入れて、
書き出すようなことも出来そうです。

機会があったら、使ってみたいところです。
※案の定、完全対応じゃないらしいので、その辺は要注意です。
※PSDの使用も手に入らないらしいので、その辺もつらいですね…

--
blog: http://suz-lab.blogspot.com/

"SabreAMF 1.0-beta"リリース

スズキです。

PHPとFlashをAMF0/3で通信するための、
PHP側のライブラリ、SabreAMFが
バージョン1.0-betaでリリースしました。
http://www.rooftopsolutions.nl/article/153

注意点として、PHP5.2のDateTimeクラスを使っているので、
それよりも低いバージョンのPHPを使っている場合は、
DateTimeクラスをあらかじめ自作しておく必要があるようです。

作者は下記エントリでDateTimeクラスに関しても言及しています。
http://www.rooftopsolutions.nl/article/152

さっそく、こちらのPHPフレームワークのSabreAMFも
バージョンアップです。

早く案件で使ってみたいなー

--
blog: http://suz-lab.blogspot.com/

2007年10月17日水曜日

"jQuery Media Plugin"でflvやswfを簡単にHTMLに埋め込む

スズキです。

現実逃避でJQueryのプラグインいろいろ調べていたら、
"jQuery Media Plugin"という面白そうなものを見つけました。
http://malsup.com/jquery/media/

これは、下記のようにclassにmediaを指定してたaタグの
hrefに、埋め込みたいファイルを指定すると、
自動で、そのフォーマットにふさわしい埋め込みタグに変換して
表示してくれるものです。
--------
<a class="media" href="sample.mov">My Quicktime Movie</a>
<a class="media" href="sample.swf">My Flash Movie</a>
<a class="media" href="sample.flv">My Flv Movie</a>
--------

メディア(ファイルフォーマット)が異なるものを、
リストなどで、同じように表示させるような時に重宝しそうです。
(teedaのforeachとかと絡めると便利そう)

そうでなくても、HTMLがすっきりするので、
それだけでも使う価値ありだと思います。

JQuery&PluginをHTMLのように当たり前に使いこなしたいなー。

--
blog: http://suz-lab.blogspot.com/

そろそろJQueryネタ

スズキです。

いろいろと案件でJQueryは使っているのですが、
http://jquery.com/
なかなかネタとして書くタイミングがなく、
CTOA日記に先をこされたりもしていますが、
http://blog.livedoor.jp/hiroki0907/
そろそろ、書き始めることにしました。

今回は、共通で使いまわしているメニュー(Teedaのレイアウト)で
urlから判断して、現在のページのメニューをフォーカス状態
("mouse over"時のボタン)にさせるものを作ってみました。

まあ、下記のよな感じです。

----menu.html
....
<img id="aaa" src="img/aaa_normal.gif"/><br/>
<img id="bbb" src="img/bbb_normal.gif"/><br/>
....
----

----menu.js
// 初期処理
$(function() {
  focusMenu();
});

// メニューのフォーカス
function focusMenu() {
  // ページ名の取得(HTMLファイルの拡張子を取ったもの)
  var beginPos = location.href.lastIndexOf('/') + 1;
  var endPos = location.href.lastIndexOf('.');
  var page = location.href.substring(beginPos, endPos);
  //現在のページに該当するidを持つイメージボタンを
  //フォーカス時のものに変更
  switch(page) {
    case "aaa":
      $("#aaa").attr("src", "img/aaa_over.gif");
      break;
    case "bbb":
      $("#bbb").attr("src", "img/bbb_over.gif");
      break;
  }
}
----

ずっと、prototype.jsをメインで使っていたので、
$("...")でidを指定する場合は"#"がひつようだとか、
属性を変更するには、$("...").attr(key, value)としなければいけないとか、
初期処理は$(function() {...});とか、
意識しないといけないところが多々あり、
こなれるまでは、もう少し時間がかかりそうです。

"Teeda Ajax"とJQueryがいい感じで連動できたらいいなー。

--
blog: http://suz-lab.blogspot.com/

TeedaでCookie処理

スズキです。

TeedaでCookie処理をしたので、そのメモです。
といっても、"Java Servlet API"そのまんまです。
http://www.nethands.net/~takashi/program/jsp_servlet/servlet_basic05.html

適宜、DIされた、
HttpServletRequest request
HttpServletResponse response
Map cookie
も必要になるので、そのあたりはこちら。
http://s2container.seasar.org/2.4/ja/DIContainer.html#ImplicitComponent

※下記、Cookie名は"token"を使用。

----Cookieの設定
@Binding
private HttpServletRequest request;
@Binding
private HttpServletResponse response;
....
Cookie cookie = new Cookie("token", "Cookieの値");
cookie.setMaxAge(-1);
cookie.setPath(this.request.getContextPath());
this.response.addCookie(cookie);
----
※Cookieをセッションのみ有効にするため、
MaxAgeには"-1"をセット。
※Pathにはコンテキストパスをセット

----Cookieの取得
@Binding
private Map cookie;
...
Cookie cookie = (Cookie)this.cookie.get("token");
String value = cookie.getValue();
// valueを使った処理
----
※Cookieの取得は"Map cookie"から取得すると便利。
※"Map cookie"でCookieの設定はできなかった。(例外発生)

----Cookieの消去
@Binding
private HttpServletRequest request;
@Binding
private HttpServletResponse response;
....
Cookie cookie = new Cookie("token", null);
cookie.setMaxAge(0);
cookie.setPath(this.request.getContextPath());
this.response.addCookie(cookie);
----
※Cookieの設定とほぼ同じだが、
消去の場合はMaxAgeを"0"にセット。

JavaでのCookie処理は久しぶりだったので、
全部忘れてた…(自分でもビックリ!)

--
blog: http://suz-lab.blogspot.com/

2007年10月15日月曜日

VelocityライクなPHPテンプレートエンジンGeryEngine

スズキです。

PHPのテンプレートエンジンをどれにしようかと調べていたら、
面白いものが見つかりました。

GeryEngineです。
http://geryengine.instant-publishing.nl/
これは、VelocityをPHPで実装したものとなっています。

Velocityは弊社では他のメンバーもよく使っているので、
このテンプレートエンジンを使えば、PHP案件も、
少ない学習コストでやってもらえる可能性があります。
(Eclipseのプラグインも使えます)

とりあえず、実験ですね。

--
blog: http://suz-lab.blogspot.com/

Teeda(Extension)&Kuina参考リソース

スズキです。

いまさらながら、Teeda&Kuinaの参考リソースをまとめておきます。

【Teeda】
▼本家
http://teeda.seasar.org/ja/
▼▼機能リファレンス
http://teeda.seasar.org/ja/extension_features.html
▼▼コンポーネント一覧
http://teeda.seasar.org/ja/extension_component_reference.html
▼▼Wiki
http://www.seasar.org/wiki/index.php?Teeda%2FgettingStarted
▼▼Seasar Conference 2007 Spring [ 現場で役立つ実践Teeda ](パワーポイント)
http://teeda.seasar.org/download/2007-05-28/sc2007spring_Aa5_TeedaPractice.ppt
▼Java Expert #01
http://www.amazon.co.jp/dp/4774130702?tag=iretsuzusblog-22

【Kuina】
▼本家
http://kuina.seasar.org/ja/
▼SQLコメント
http://s2dao.seasar.org/ja/s2dao.html#SQLBind
※基本的にSQLファイルを作成する形をとってます。
※そして、その辺はS2Daoに準じてます。

Teeda系の有用なBlog一覧も作っておきたいなー。

--
blog: http://suz-lab.blogspot.com/

"Seasar Conference 2007 Autumn"参加予定(11/11)

スズキです。

そろそろ、イベント復活しようかと思っています。
(まだ、忙しいけど…)

まずは"Seasar Conference"です。
http://event.seasarfoundation.org/sc2007autumn/Session

参加したいセッションは下記のとおりです。

E1: Flex2 & S2Flex2
http://event.seasarfoundation.org/sc2007autumn/Session#e1

B2: これであなたもTeedaが好きになる
http://event.seasarfoundation.org/sc2007autumn/Session#b2

B3: Irenka (Ahikunep)
http://event.seasarfoundation.org/sc2007autumn/Session#b3

A4: データベースプログラミングの生産性を10倍向上させるSeasar2の新機能
http://event.seasarfoundation.org/sc2007autumn/Session#a4

D4: オープンソースESB Mule と Seasar2 の連携プロダクト - S2Mule(仮称)
http://event.seasarfoundation.org/sc2007autumn/Session#d4

B5: SeasarとOSSがもたらす小さなソフト会社の可能性 -ある零細企業の脱下請のための挑戦の記録-
http://event.seasarfoundation.org/sc2007autumn/Session#b5

※A4とD4の時間帯がかぶってるので、どうしようかなー…

"Adobe MAX Japan 2007"も調整しなくては。

--
blog: http://suz-lab.blogspot.com/

callback関数にクラスのメソッドを指定(PHP)

スズキです。

PHPの配列処理関数には、
引数にcallback関数を指定できるものがあります。
(array_filter, array_map, ...)

このcallback関数にクラスのメソッドを指定したい場合に
どうするか?についてです。

回答は配列を利用する。
です。

$result = array_map(array($instance, "method"), $array);

のように、第一引数にクラスのインスタンス、
第二引数にメソッド名を指定します。
http://itpro.nikkeibp.co.jp/article/COLUMN/20070827/280383/
※staticメソッドも可(上記参照)

PHPでのオブジェクト指向プログラミングは
Javaにはない面白さがあるね。

--
blog: http://suz-lab.blogspot.com/

2007年10月14日日曜日

近頃"#!/usr/bin/perl --"問題にでくわす

スズキです。

近頃、他社で作成されたperlのcgiプログラムを、
弊社で運用しているサーバ動かす、ということが多々あります。

で、弊社サーバでCGIが動くように(apacheを)調整するのですが、
近頃、
#!/usr/bin/perl

#!/usr/bin/perl --
にしないと、うまく動かない状況によく遭遇します。
(改行コードを変換することでも解決するとも思いますが)

改行コードの話ということらしいが、
昔(7,8年前)はそんな経験記憶にありません。
(そのころはperlばっかりやってました)

ラッキーだっただけかなー?

--
blog: http://suz-lab.blogspot.com/

2007年10月13日土曜日

緯度経度取得サイト(Google Maps)

スズキです。

下記より、"Google Maps"などで地図上で指定した位置の
緯度経度を簡単に取得することのできます。
http://jsgt.org/ajax/newmon/samples/chapter03/03-31/getlatlon44.htm

上記機能は"Google Maps"を使って作られています。

いまさらですが、たまに利用するので、
すぐに思い出すためのBlogメモということで。

--
blog: http://suz-lab.blogspot.com/

全文検索システム"Hyper Estraier"

スズキです。

現在取り組んでる案件で、サイト内検索機能があり、
久しぶりに、全文検索エンジンについて調べてみました。
(昔、Luceneやnamazuは使ったことあります)

で、これは、いいかも、
と思ったものが、表記の"Hyper Estraier"です。
http://hyperestraier.sourceforge.net/index.ja.html

いいかも、と思ったポイントは、

-Javaのバインディングがある
-クローラーがついてる
-Apacheのモジュール(mod_estraier)が存在
http://modestraier.sourceforge.net/index.ja.html
-PostgreSQLからも使える
http://pgestraier.projects.postgresql.org/
-Windowsのバイナリも配布している

といったところです。

今回の案件はTeedaで開発しているので、
Javaのバインディングは重要です。

あと、サイト内検索なので、クローラーがはじめからあると、
クローラー製作工数をカットできます。

Apacheのモジュールは
「Apache を通過した html を検索 DB に自動的に登録する」
というものです。
非常に興味深い機能です。

最後に、PostgreSQLからも使える、ですが、
しっくりくるようなら、今後のsuz-lab推奨DBを
MySQLから、PostgreSQLへの乗り換えることも考えます。

とりあえずは、Windowsのバイナリで実験です。
今週末も、盛りだくさんだなー。

--
blog: http://suz-lab.blogspot.com/

Eclipseのデータベース設計プラグインClayが3.3.x(Europa)に対応

スズキです。

大変お世話になっている、データベース設計をするための
Eclipseプラグイン「Clay」の3.3.x(Europa)対応版がリリースしていました。
http://www.azzurri.co.jp/clay/download/release_notes.jsp

3.3.x(Europa)対応だけでなく、
「MySQL 4.1/5.0」の方言も追加されています。

久しぶりにインストールしたので、
GEFがないと動作しないことに気づくのに、時間がかかってしまいました。

ごめんなさい、iRET_Mさん。
http://mchiraura.blogspot.com/

「Clay & DBViewer」でEclipseのDBまわりは完成かな。

--
blog: http://suz-lab.blogspot.com/

2007年10月11日木曜日

TeedaでPageクラスで(エラー)メッセージ設定

スズキです。

表記の自分メモです。

このあたりは、下記のようにすでにいろいろと紹介されています。
http://d.hatena.ne.jp/yone098/20070130/1170139559
http://d.hatena.ne.jp/kimpo/20070807

要はFacesMessageUtil.addErrorMessageです。

--------Pageクラス(別にPageクラスじゃなくてもいいけど)
if(false) {
  return IndexPage.class;
} else {
  FacesMessageUtil.addErrorMessage("jp.co.iret.suz.example.teeda.login.fail");
  return null;
}
--------

そうすると、appMessages(_ja).properties
に記述された、下記の値がメッセージとして設定されます。

jp.co.iret.suz.example.teeda.login.fail=ログインIDもしくはパスワードが間違っています

これを表示させるには、該当するHTMLに
下記のタグを適当な場所に配置します。

<span id="allMassages"/>
※idはmessagesでもOKです。違いは下記より。
http://www.seasar.org/wiki/index.php?Teeda%2FgettingStarted#w5bf6dd4

朝までにログイン機能作らなきゃ。
(セッション系もこれを機にちゃんとまとめよう)

--
blog: http://suz-lab.blogspot.com/

EclipseのプロパティエディタPlugin

スズキです。

Teedaで開発していると、
appMessages_ja.properties
とかよくいじります。

このときに活躍するのが表記のプラグインです。
http://propedit.sourceforge.jp/index.html

要はpropertiesファイルは日本語で書いて、
勝手にnative2asciiしてくれるプラグインです。

ものすごく重宝しています。
Eclipse3.3.1でもちゃんと動いています。

Teeda案件で多言語対応とかないかなー?

--
blog: http://suz-lab.blogspot.com/

ApacheにIPでアクセスしたときに使われるVirtualHost

スズキです。

下記のようなネームベースのバーチャルホストを設定した
ApacheにIPアドレス直打ちでアクセスするとどうなるか?
です。(http://111.222.333.444/...でアクセスすると)

--------
NameVirtualHost *:80

<VirtualHost *:80>
  ServerName vh1.iret.co.jp
  ...
</VirtualHost>

<VirtualHost *:80>
  ServerName vh2.iret.co.jp
  ...
</VirtualHost>
--------

答えは、最初のVirtualHosで設定された内容が、
使われます。(http://vh1.iret.co.jp/...の内容になります)

自分メモ。

--
blog: http://suz-lab.blogspot.com/

2007年10月10日水曜日

TightVNCでポータブル環境でのVNC

スズキです。

VNC、よく使います。

できれば、ポータブル環境で…
と思っていたら、ポータブル環境用のVNCがありました。

TightVNCです。
http://www.tightvnc.com/

これは、書籍Lifehackerの
「ハック36:ホームコンピューターをリモート制御しよう」
に紹介されていました。
http://www.amazon.co.jp/dp/4756149499?tag=iretsuzusblog-22

久しぶりにポータブル環境に新アプリの追加です。
(そろそろ、HD(2.5)からUSBメモリに変えたいなー)

--
blog: http://suz-lab.blogspot.com/

iretの中の人増えました

スズキです。

僕がCTOやってるiret社の中の人で、
http://www.iret.co.jp/
ブログ書いてる人のブログをWebスカウターの数値で
比較できるようにしています。
http://ja.webscouter.net/

本ブログ、右上のブログパーツがそれにあたります。

少しずつ面子を増やして、
とりあえず、僕が知ってる限りのMAXになりました。

毎月、上位に賞品(金)とかだせると、
面白そうだなー。

--
blog: http://suz-lab.blogspot.com/

Teeda 1.0.11-SP1 リリース

鈴木です。

表記のとおりです。
http://teeda.seasar.org/ja/roadmap_and_changes.html#1.0.11-SP1

関係プロジェクト、早速アップデートしときます。

--
blog: http://suz-lab.blogspot.com/

PEARのLogでFirebug にログ出力が可能

スズキです。

少し前に、PHPのログをFirebugに出力する記事が、
ちらほら出ていましたが、PearのLogで出来るようになったようです。
http://cl.pocari.org/2007-10-05-1.html

実際に上記サイトで紹介されているコードで実験してみたら、
しっかり、Firebugのコンソールにログ出力されました。

--------サンプルコード(上記サイトより引用)
require_once "Log.php";
$log = &Log::singleton("firebug", "", "PHP", array("buffering" =>
true), PEAR_LOG_DEBUG);
$log->log("デバッグレベルのログ", PEAR_LOG_DEBUG);
--------

実際は、HTML出力時に、最後に下記Javascriptを埋め込んで、
Firebugへのログ出力を実現しています。

--------
<script type="text/javascript">
console.debug("PHP [debug] デバッグレベルのログ");
</script>
--------

さらにこのPear::LogはPearのパッケージであるにもかかわらず、
Pear.phpに依存していません。なので、単独で使うことが出来ます。

早速、今、整備中の社内で使っている
Ajax-PHPフレームワークに取り込んでおきました。

Ajax-PHPフレームワークの整備も進めなくては…

--
blog: http://suz-lab.blogspot.com/

2007年10月9日火曜日

Teedaで入れ子の...入れ子のチェックボックス

スズキです。

現在、Teeda案件やってます。
itemsの入れ子の…入れ子の中にチェックボックスがあるところを
担当することになりました。
(ある項目ごとにカレンダーがあり、その日付ごとにチェックボックスがあるようなやつです)

表示だけなら、大丈夫なので、
List<Map>のitemsで気合で作りました。

そして、問題のフォーム情報の送信部分です。
入れ子が多いと、DTOの配列&itemsSaveでいけるのかなー
と思いつつ、
(実験してないけど、できなさそうだなー、と見切ってしまいました)
"Teeda Ajax"で逃げれないかなー?
と思いつつ、
ちょうど近くにいたiret-ceoに相談したところ、
http://iret-ceo.blogspot.com/

複数のチェックボックスのname属性に同じ名前いれて、
Pageのフィールドでその名前の配列(String)を宣言しとけば、
その配列にvalueの値が勝手にはいるよ。

と、貴重な情報がもらえました。
彼は、以前、ある案件でTeedaのHTMLをVelocityで生成していた剛の者です。

ということで、DTOの配列&itemsSaveは検証せず、
上記方法で実現することにしました。

valueの値はダイナミックプロパティにて、
必要な情報を(エンコードして)埋め込むようにしています。

Submit時に呼び出されるメソッドでは配列の中の値をパース(デコード)して、
適当に処理します。

とりあえず、今回のケースは、上記の方法で対応できました。
(Validateがかかるときなどは、またいろいろあるんだろうなー。)

--
blog: http://suz-lab.blogspot.com/

Teedaでチェックボックスのchekedをダイナミックプロパティで制御

スズキです。

表記のとおり、Teedaでチェックボックスのchecked属性も
ダイナミックプロパティで制御することができます。

--------HTML
<input id="hoge" type="checkbox" checked="checked"/>
--------

--------Pageクラス
public boolean getHogeChecked() {
  return true; // false
}
--------
※ダイナミックプロパティです。
http://teeda.seasar.org/ja/extension_features.html#dynamicproperty

ポイントはダイナミックプロパティの戻り値です。
booleanにするとうまくいきます。
(trueはチェック済み、falseはチェックなし)

だんだん、かゆいところにも手が届いてきたぞ。
(その前に、基本がわかってない!?)

--
blog: http://suz-lab.blogspot.com/

Eclipse3.3.1とJDK1.6の相性

スズキです。

近頃、メインのEclipseを3.3.1(VISTA)にしたのですが、
どうも、よく落ちる。
特にWTPでTomcat起動しているときによく落ちる。

JDK6u3にしてもよく落ちる。
http://suz-lab.blogspot.com/2007/10/jdk-6-update-3.html

さすがに我慢の限界で、
Eclipseのログみて、ググってたら、
MylynとJDK6の相性が悪いような記事を見つけた。

なので、JDKを5.0に変えてみたら、
今までのが嘘のように落ちなくなった。
※このときのJDKはBEAのものですが、多分、SUNのでもOKでしょう。

これで、ようやく、プログラミングに専念できるぞ。

--
blog: http://suz-lab.blogspot.com/

2007年10月7日日曜日

"Google Webmaster Tool"で登録するBloggerのatom

スズキです。

表記に関する記事を見つけました。
http://www.kuribo.info/2007/10/google-500.html

本BlogもFeedBurnerにatom/rssをリダイレクトしているので、
多分、うまく機能してないだろうなー、と思い、久しぶりに

Google Webmaster Tool
https://www.google.com/webmasters/tools/

を確認したところ、案の定、おかしな状態になっていました。

で、上記記事に書いてあるとおり、
Bloggerの登録atomを

atom.xml?redirect=false&max-results=500

とすることで、正常に機能するようになりました。

久しぶりにBloggerまわりの調整です。

--
blog: http://suz-lab.blogspot.com/

METAタグの位置とIEの挙動

スズキです。

機能、AjaxWebアプリ作ってて、Firefoxでは普通に表示するけど、
IEでは真っ白になってしまう問題に遭遇しました。

とりあえずで、Firefoxで進めていたのですが、
iretの中の人のhaggy君が、原因を調べてくれてました。

原因はmetaタグの位置でした。
metaタグがtitleタグの下にある場合、
IEの表示が真っ白になってしまうようです。

----これはIEだと真っ白
<head>
  <title>データベースリスト</title>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
</head>
----

----これはOK
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
  <title>データベースリスト</title>
</head>
----

ありがとう、haggy。
近頃、若手の台頭が目立つなー。

--
blog: http://suz-lab.blogspot.com/

2007年10月6日土曜日

MySQLで月内を対象した条件の作り方(SQL)

スズキです。

MySQLでDATE型で定義された列に対して、
ある月のみを対象とする条件指定(WHERE句)を行う方法です。

まあ、やり方はいろいろあるとは思いますが、
下記のような条件がBESTではないか、と思っています。

HOGE_DATE between date('2007-10-1') and last_day('2007-10-1')

ポイントはlast_day関数です。
この関数は、引数の日付の月の最後の日付を取得する関数です。
(SQLに渡す値は月の最初(1日)となります)

近頃は、MySQLモード。

--
blog: http://suz-lab.blogspot.com/

2007年10月5日金曜日

”JDK 6 Update 3”リリースしてました

スズキです。

SUNのJDK6のUpdate3がリリースされていました。
http://java.sun.com/javase/downloads/index.jsp

近頃、Eclipseの3.3.1を使い始めたのですが、
WTP使い始めると、よく落ちます。

このJDKのアップデートで、改善されればいいなーと思い、
早速アップデートしました。

様子見です。
Eclipse3.3.1を早く安定させなければ。

--
blog: http://suz-lab.blogspot.com/

2007年10月2日火曜日

Teeda 1.0.11 リリース

スズキです。

リリースしてます。
http://teeda.seasar.org/ja/roadmap_and_changes.html#1.0.11

リリースが一ヶ月以上先のTeeda案件は
早速、こちらにバージョンアップします。
(継続開発案件も場合によってはバージョンアップします)

関係者はご注意ください。

Blogで、業務報告の実験。

--
blog: http://suz-lab.blogspot.com/