2007年12月27日木曜日

EclipseのDBViewerプラグインが1.0.5になってた

スズキです。

最近(クリスマス)、1.0.4から1.0.5にバージョンアップしたらしいです。
http://www.ne.jp/asahi/zigen/home/plugin/dbviewer/news_jp.html

早速、jarファイルをダウンロードして、
eclipseのpluginフォルダに配置してアップデート終了です。
(1.0.4のjarは削除です)

Eclipseのプラグインメンテナンスも社内で共有したい...

--

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

OpenOffice.org Portable 2.3.1 Rev 2 リリース

スズキです。

表記の通りです。
http://portableapps.com/news/2007-12-19_-_openoffice_portable_2.3.1_revision_2

2.3.1がでたと思ったら、すぐにRev2がリリースされました。
例のごとく、下記のようにアップデートです。
http://suz-lab.blogspot.com/2007/12/openofficeorg-portable-231.html

この辺のメンテナンスも個人ではなく、
会社ぐるみでやっていきたいなー。

--

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

"Kuina-Dao 1.0.1"&"S2Hibernate-JPA 1.0.1"&"Seasar 2.4.19"

スズキです。

弊社のSeasar2のDaoまわりは、基本Kuina-Daoを採用しています。
(ただ、JPAはつかってなく、すべて外部SQLを使っていますが)

で、現在、最新が1.0.1なのですが、それに対応する
S2Hibernate-JPA, Seasar
のバージョンが下記のようになっています。
(リリースしたばかりです。)

▼Kuina-Dao 1.0.1
http://www.seasar.org/wiki/index.php?SeasarWhatsNew%2F2007-12-22#w12eee34
▼S2Hibernate-JPA 1.0.1
http://www.seasar.org/wiki/index.php?SeasarWhatsNew%2F2007-12-22#rf22f0bb
▼Seasar 2.4.19
http://www.seasar.org/wiki/index.php?SeasarWhatsNew%2F2007-12-21#ub9275d7

とりあえず、メモとして。
(たまにはS2Daoも再調査したいなー)

--

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

"MAILPIA & Google Group"でブログ更新通知

スズキです。

http://suz-lab.blogspot.com/2007/12/mailpiarssatom.html
の続きです。

MAILPIAでのメールによるブログ更新通知は下記のようにまずまずです。

========ここから========
iretsuzuki 様

▼iret
http://www.mailpia.jp/r/www.google.com/reader/public/atom/user/17773214577781744876/label/iret
▽MAILPIAでフィード(RSS/ATOM)の更新情報をメール通知 (2007/12/26 16:37:44)
http://www.mailpia.jp/r/feeds.feedburner.com/~r/suz-lab/~3/206414434/mailpiarssatom.html
スズキです。
弊社スタッフのブログも順調に増え(現在12ブログ)
そろそろ、社内の情報共有ツールとして、
もう一歩工夫していきたいところです。
その第一弾として、MAILPIAというサービスを使って
全スタッフにブログの更新を定期的にメールにて通知する
仕組みを導入しようと思っています。
http://www.mailpia.jp/r/www.mailpia.jp/
今までもBlogger使っている人は、
登録エントリーを任意のメールアドレスに送れるので、
それを"Google Group"に送り、その登録者に配信、
ということはやっていました。
ですが、そういう機能を持っていないブログを
使っている人もいるので、今回はMAILPIAを試してみるつもりです。
うまく仕組み化できるといいなー。
--
http://www.mailpia.jp/r/suz-lab.blogspot.com/

------------
■本メールは「MAILPIA」が送信しました。
このメールの送信元アドレスは、送信専用です。
ご意見・ご質問等は、MAILPIAの「お問い合せ」ページからお寄せください。
【MAILPIAトップページ】
http://www.mailpia.jp/personal/
========ここまで========

次はこれを、メールマガジンっぽく弊社スタッフに配信ですが、
いろいろなサービスを試したのですが、
結局、次のような理由で"Google Group"を利用することにしました。

-弊社スタッフは皆Googleアカウントを思っている。
-ユーザーの手動による追加が簡単にできる。
※他のMLサービスは、対象メールアドレスに確認メールが届き、
そのURLをクリックすることで登録が完了する。なので、
管理者のみでの登録ができない。

とりあえず、ベータリリースとして、
既存の"Google Group"ユーザーに対しての配信を始めます。
問題なければ、全スタッフを"Google Group"に登録して運用開始です。

次は、ソーシャルブックマークとポータブルアプリケーションの普及かな?
来年もがんばろう。

--

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

2007年12月26日水曜日

MAILPIAでフィード(RSS/ATOM)の更新情報をメール通知

スズキです。

弊社スタッフのブログも順調に増え(現在12ブログ)
そろそろ、社内の情報共有ツールとして、
もう一歩工夫していきたいところです。

その第一弾として、MAILPIAというサービスを使って
全スタッフにブログの更新を定期的にメールにて通知する
仕組みを導入しようと思っています。
http://www.mailpia.jp/

今までもBlogger使っている人は、
登録エントリーを任意のメールアドレスに送れるので、
それを"Google Group"に送り、その登録者に配信、
ということはやっていました。

ですが、そういう機能を持っていないブログを
使っている人もいるので、今回はMAILPIAを試してみるつもりです。

うまく仕組み化できるといいなー。

--

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

シェルスクリプトでjavaのクラスを実行

スズキです。

Seasar2ベースの実行クラスをシェルスクリプトから起動する必要があり、
簡単に作ってみました。
クラスパスまわりが面倒ですが、こんな感じでしょうか?

--------
#!/bin/sh
BASEDIR=/hoge
CLASS=jp.co.iret.esthe.quartz.s2.S2Bootstrap
LOG=/hoge/current.log
CLASSPATH=$BASEDIR/bin

for file in `ls $BASEDIR/lib`; do
  CLASSPATH=$CLASSPATH:$BASEDIR/lib/$file
done

java -classpath $CLASSPATH $CLASS >> $LOG
--------
※bin下にクラス(パッケージ)が配置されています。
※lib下に各種ライブラリ(jar)が配置されています。

for使ってjarファイル拾って、クラスパスに追加する部分が
ポイントといえばポイントでしょうか!?

また、S2JMS-Serverでは、
自身のJarファイルと同じ位置にあるJarファイルを
クラスパスに自動で追加してくれるらしいです。
http://s2jms.seasar.org/ja/server.html

この仕組みもマネさせてもらおう。(来年)

--

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

2007年12月25日火曜日

MyMiniCity作ってみました

スズキです。

ちょっと乗り遅れていますが、
suz-labのMyMiniCityを作ってみました。
http://suz-lab.myminicity.com/

とりあえず、流行ってるものは試しておかないとね。
職業がら...

--

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

2007年12月22日土曜日

BacklightToggleでX02HTの省電力化

スズキです。

X02HTを使ってます。
以前使っていた、X01HTに比べて、いろんな意味で軽く、
今までで最高の携帯(スマートフォン)だなーと思っています。

ただ一点、バッテリーがすぐになくなってしまうことが、
非常に残念です。(現在、6時間くらいできれてしまう...)

ということで、設定の見直し/アプリケーションなどで、
X02HTの省電力化に挑戦していくことにしました。
(大容量バッテリーは最後の手段として...)

まず第一弾として、バックライトの調整です。
WM6スタンダードはOSでバックライトの調整が
できないらしいのですが、表記のBacklightToggleという
アプリケーションで調整(一段暗く)することができます。
http://d.hatena.ne.jp/wasa_bi/20071202/1196682304

スタートアップへの登録の仕方がわからない...
"\Windows\スタートアップ"にコピーしてもダメだった...

--

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

2007年12月21日金曜日

Seasar 2.4.19 リリース

スズキです。

表記の通りです。
http://www.seasar.org/wiki/index.php?SeasarWhatsNew%2F2007-12-21#ub9275d7

昨日、新規Teeda案件プロジェクト作った際、
Seasar2.4.18で構築したのですが、
今日、Seasar2.4.19がリリースされました。

今日、作れば、Seasar2.4.19ベースで構築できたのにー。
適当に、アップデートしておこう。

--

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

imagick(pecl)を使うために、再び

スズキです。

以前、imagickを使うための諸々を書きました。
http://suz-lab.blogspot.com/2007/12/imagickpecl.html

これは、実はCentOS4で試したもので、
"Fedora Core 5"(古い...)で同じ手順を試してみたら、
apacheで下記エラーが出力され、失敗してしまいました。

PHP Warning: PHP Startup: Unable to load dynamic library
'/usr/local/lib/php/extensions/no-debug-non-zts-20060613/imagick.so'
- /usr/local/lib/php/extensions/no-debug-non-zts-20060613/imagick.so:
undefined symbol: XShmPutImage in Unknown on line 0

問題はX関係です。
XShmPutImageがImageMagickで使われていて、
PHPで使われていないのが、原因のようです。(多分...)

なので、PHPを"-lXext -lXt"をつけてmakeし直したら、
imagick、使えるようになりました。

具体的には下記手順となります。(PHPソースフォルダにて)
export LDFLAGS=" -lXext -lXt "
./configure ...
make
make install

この手の問題でXがからんでいると、面倒なんだよねー。
とりあえず、テスト環境にも導入できて、よかった、よかった。

--

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

2007年12月20日木曜日

"Windows Vista"と"Adobe CS3"でインストールエラー(コード:2739)

スズキです。

"Windows Vista"に"Adobe CS3"をインストールしようとしたら、
エラーでインストーラーが落ちてしまいました。(エラーコード:2739)

ただ、これは有名な話のようで、
対策は下記Adobeのサイトにも掲載されていました。
http://support.adobe.co.jp/faq/qadoc/AJ25.nsf/448b10039648c80d49256f47002c7456/0759f4436bcd41f6492572d6000d5e9f?OpenDocument

上記に従いインストール完了です。

インストール時間、長いなー...

--

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

2007年12月19日水曜日

imagick(pecl)で任意の画像を正方形に

スズキです。

今日、最後のImagickネタです。
任意の画像を縦横比を変えずに正方形にしたい、
というニーズはよくあると思います。
また、正方形にするやり方も下記のように2パターンあります。

一つ目のパターンは、対象画像の内側いっぱいに、
正方形を作るものです。

これは、imagickでは下記のように
cropThumbnailImageで簡単に実現できます。
http://php.mirror.camelnetwork.com/manual/ja/function.imagick-cropthumbnailimage.php

$thumb = new Imagick();
$thumb->readImage($originalDir . $orgFile);
$thumb->cropThumbnailImage(80, 80);
$thumb->writeImage($baseDir . $uploadFile);
$thumb->destroy();

※画像の中心から内側いっぱいに正方形になるように切り取り、
それを、80x80にリサイズしています。

もう一つは、一辺の長さを画像の縦または横の、
大きい方にあわせた正方形です。(余白ができます)

こちらは少し面倒でscaleImageや、
http://php.mirror.camelnetwork.com/manual/ja/function.imagick-scaleimage.php
spliceImageを使います。
http://php.mirror.camelnetwork.com/manual/ja/function.imagick-spliceimage.php
※spliceImageは任意の場所に無地の画像を配置します。

$large = new Imagick();
$large->readImage($originalDir . $orgFile);
$large->setImageBackgroundColor(new ImagickPixel("white"));

if($large->getImageWidth() > $large->getImageHeight()) {
  $large->scaleImage(300, 0);
  $height = (300 - $large->getImageHeight()) / 2;
  $large->spliceImage(0, $height, 0, 0);
  $large->spliceImage(
    0,
    300 - $large->getImageHeight(),
    0,
    $large->getImageHeight()
  );
} else {
  $large->scaleImage(0, 300);
  $width = (300 - $large->getImageWidth()) / 2;
  $large->spliceImage($width, 0, 0, 0);
  $large->spliceImage(
    300 - $large->getImageWidth(),
    0,
    $large->getImageWidth(),
    0
  );
}

$large->writeImage($largeDir . $uploadFile);
$large->destroy();

※縦または横の大きい方の長さを300にリサイズして
正方形になるように、左右または上下に
無地の画像を配置しています。

また、無地の画像の色をsetImageBackgroundColorで
指定しています。
http://php.mirror.camelnetwork.com/manual/ja/function.imagick-setimagebackgroundcolor.php

ImagickPixelのコンストラクタ引数で色を指定するのですが、
指定の仕方はこちらが参考になります。
http://php.mirror.camelnetwork.com/manual/ja/function.imagickpixel-setcolor.php

長文になってしまった...

--

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

imagick(pecl)で画像フォーマット変換

スズキです。

資料が少なすぎて、調査が大変なimagickですが、
画像フォーマット変換はsetImageFormatを使うことで
実現できます。
http://php.mirror.camelnetwork.com/manual/ja/function.imagick-setimageformat.php
(下記はgifをjpegに変換する例です)

$im = new Imagick();
$im->readImage("hoge.gif");
$im->setImageFormat("jpg");
$im->writeImage("hoge.jpg");
$im->destroy();

setImageFormatの引数は、
"jpg", "png"に関しては確認済みです。
(その他のフォーマットはよくわかりません)

imagick(PHP & ImageMagick)、かなり評判いいです。

--

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

suz-lab認定jQueryプラグイン

スズキです。

以前、jqUploaderをsuz-lab認定プラグインとしました。
http://suz-lab.blogspot.com/2007/11/jqueryjquploader.html

ですが、jqUploaderを使った実装を進めていくうちに、
ActiveXコントロールのアクティブ化などに対応しているうちに、
jqUploaderのjs部分は使わなくなってしまいました。
http://www.microsoft.com/japan/msdn/workshop/author/dhtml/overview/activating_activex.aspx

ということで、jqUploaderは認定取り消しです。
そのかわり、jCarouselがなにげに使えることがわかったので、
こちらを認定第3号に変更です。
http://sorgalla.com/jcarousel/

ということで、suz-lab認定jQueryプラグインは下記となります。

▼第一号: jTemplates
http://jtemplates.tpython.com/
▼第二号: lightBox
http://leandrovieira.com/projects/jquery/lightbox/
▼第三号: jCarousel
http://sorgalla.com/jcarousel/

jFeedも結構こなれてきたんだよなー。
http://www.hovinne.com/blog/index.php/2007/07/15/132-jfeed-jquery-rss-atom-feed-parser-plugin
案件で使う機会があったら認定だね。

--

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

2007年12月18日火曜日

X02HTでGoogleドキュメント

スズキです。

なんと、Googleドキュメントはモバイルに対応しているようです。
http://blogoscoped.com/archive/2007-10-17-n29.html

実際は、下記にアクセスすることで利用できます。
http://docs.google.com/m
(まあ、お約束のアドレスです)

利用してみると、確かに、X02HTの画面で
Googleドキュメントが見れます。

実際のドキュメントの内容は、WEB上ならHTML、
もしくは、ダウンロードして、"Excel Mobile"で確認できます。

ここで一点、大変惜しいことに、日本語ファイル名のドキュメントが
ダウンロードできません。
(正確には、ダウンロードして、対応アプリで開けません)

本当に惜しい!
なんとかならないものかなー...

--

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

2007年12月17日月曜日

OpenOffice.org Portable 2.3.1 リリース

スズキです。

久しぶりに"OpenOffice.org Portable"がバージョンアップしました。
http://portableapps.com/news/2007-12-13_-_openoffice_portable_2.3.1

早速アップデートしたら、英語に戻ってしまったのので、
過去記事を参照して、再度、日本語化です。
http://suz-lab.blogspot.com/2007/07/openofficeorg-portable.html

ただし、日本語化インストーラーは下記となります。
http://ftp-1.gwdg.de/pub/openoffice/extended/2.3.1rc1/OOo_2.3.1rc1_20071113_Win32Intel_langpack_ja.exe

何が良くなったんだろう?

--

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

2007年12月16日日曜日

Imagick2.x.x(pecl)情報

スズキです。

とりあえず、これから、APIと格闘するので、
先に情報まとめておきました。(あまりありません)

▼本家
http://pecl.php.net/package/imagick

▼日本語APIリファレンス
http://php.plus-server.net/ref.imagick.html

▼弊社CTOAのサンプル
http://blog.livedoor.jp/hiroki0907/archives/50959573.html
http://blog.livedoor.jp/hiroki0907/archives/50959643.html

▼captcha.php(サンプル)
http://cvs.php.net/viewvc.cgi/pecl/imagick/examples/captcha.php?view=markup
▼polygon.php(サンプル)
http://cvs.php.net/viewvc.cgi/pecl/imagick/examples/polygon.php?view=markup
▼thumbnail.php(サンプル)
http://cvs.php.net/viewvc.cgi/pecl/imagick/examples/thumbnail.php?view=markup
▼watermark.php(サンプル)
http://cvs.php.net/viewvc.cgi/pecl/imagick/examples/watermark.php?revision=1.1&view=markup

Windows-PHPでもImagick使いたいなー。

--

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

imagick(pecl)を使うために

スズキです。

PHPからImageMagickの機能を使うには、
imagick(pecl)を導入する必要があります。
http://pecl.php.net/package/imagick

この導入ではまりました。

とりあえずざっくりとした結論として、
X系のパッケージインストールして、
PHPは下記オプションにてビルド、

./configure
  --with-apxs2=/usr/sbin/apxs
  --with-gd
  --with-xpm-dir=/usr
  --with-freetype-dir=/usr
  --with-jpeg-dir=/usr
  --with-png-dir=/usr
  --enable-gd-native-ttf
  --enable-gd-jis-conv
  --with-bz2=/usr
※gd関係の設定がポイントです。

ImageMagickは下記オプションにてビルドすると、

./configure
  --with-x
  --without-fontconfig
  --without-dps
  --without-tiff

使えるようになりました。
(かなりの Try & Error でした)

これで、ImageMagickの強力な画像処理機能がPHPにて使えます。
次は、ImagickのAPIの把握です。

とりあえず、直近の案件での要求を満たすことは確認済み。
疲れたー。

--

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

2007年12月12日水曜日

jqUploaderでFlashのアップロード時に任意のパラメータも送る

スズキです。

jqUploaderのファイルアップロード部分はFlashが担ってます。
Flashがファイルをアップロードするときに、
何かしらのパラメータも渡したいことはよくあると思います。

そういう場合は、下記のようにアップロード先URLに対して、
GETパラメーターをつけることで実現できました。
<form action="../../php/jquploader.php?test=aaa">

Javascript側で設定してもOKです。
$("span.uploader").jqUploader({
  uploadScript : "../../php/jquploader.php?test=aaa",
  ...
});

後は、サーバ側のプログラムでGETパラメータとして取得できます。

これで、サーバ側連携の技術的な懸案事項はすべて解決!
次は、Flashのカスタマイズだね。

--

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

"jQuery lighbox"でloading画像などのpath変更

スズキです。

"jQuery lighbox"では標準で下記のような画像が使われています。
http://leandrovieira.com/projects/jquery/lightbox/

○lightbox-ico-loading.gif
○lightbox-btn-close.gif
○lightbox-btn-prev.gif
○lightbox-btn-next.gif

jsファイルを読むと、この画像のpathが(当然)ハードコードされていました。

しかし、画像のpathはプロジェクトごとに異なり、
上記ファイルもそれに準じた形にしたいはずですが、
下記にて実現することができます。

$("a.lightbox").lightBox({
  imageLoading : 'img/ext/lightbox/lightbox-ico-loading.gif',
  imageBtnClose: 'img/ext/lightbox/lightbox-btn-close.gif',
  imageBtnPrev : 'img/ext/lightbox/lightbox-btn-prev.gif',
  imageBtnNext : 'img/ext/lightbox/lightbox-btn-next.gif'
});

画像の位置だけでなく、他のパラメーターも調整できます。

やっぱり、"jQuery lighbox"はカッコイイですね。
jqUploaderとのあわせ技、今やってます。

--

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

jQueryのeach()でループカウンターを取得

スズキです。

jQuery便利です。
表記は下記のように実現できます。

$(".uploader").each(function(i){
  alert(i);
});

もうすぐ、jqUploader目処がたちます。
> させているブログ
http://iret-onsoku.blogspot.com/

--

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

2007年12月11日火曜日

KompoZer Portable 0.7.10 Revision 2 リリース

スズキです。

"KompoZer Portable"の0.7.10がRevision2になってました。
http://portableapps.com/news/2007-12-05_-_kompozer_portable_0.7.10_revision_2

何がよくなったかわかりませんが、とりあえずアップデートです。
昔の環境を引き継ぐには、DataフォルダをコピーするだけでOKです。

KompoZerも使いこなしていきたいなー。
(すぐ、Eclipseかサクラエディタに逃げてしまう...)

--

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

Firefox Portable 2.0.0.11 リリース

スズキです。

表記のとおりです。
http://portableapps.com/news/2007-12-05_-_firefox_portable_2.0.0.11

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

近頃、すぐにバージョンアップできない...
(時間がなくて...)

--

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

Subversion(SVN)&Eclipseでソースのマージ

スズキです。

以前、Subversion(SVN)の運用で、
branchを作るようにしました的なエントリを書きました。
http://suz-lab.blogspot.com/2007/10/subversionsvn.html

で、懸念してたのが、branchかtrunkhへのマージだったんですが、
今日、ついに、そのマージ&リリースする日が来ました。

マージに関しては、下記にて、
Eclipseを用いて行う方法が詳しく記載されています。
http://www.masatom.in/pukiwiki/Subversion/TIPS%BD%B8/#w72dd1d9

恐る恐るやってむみると、簡単に問題なく、
branchの内容がtrunkにマージされました。

これで、リリース時に開発中のコードをリリース用に一旦、
人畜無害なものにするという、稚拙な運用から決別です。

久しぶりに、技術に感動しました。
(もっと早くやっていれば...)

--

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

VeloPoi情報

スズキです。

本気(案件)でS2Poiっぽいことやっているので、
とりあえず、ネット上の情報のまとめです。

▼VolocityみたいなExcelテンプレート
http://blog.netbeans.jp/roller/page/kishida/20050219#volocity_12415_12383_12356_12394
▼VelocityみたいなExcelテンプレートの続き
http://blog.netbeans.jp/roller/page/kishida/20050221#velocity_12415_12383_12356_12394
▼S2VeloPoiみたいなの
http://d.hatena.ne.jp/rokugen/20071205/1196826756

がんばって、"Smart Deploy"に対応させたい。
もう、自分でもできるかな?

--

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

Seasar2のコンポーネント登録とアスペクトの適応

スズキです。

近頃、"Smart Deploy"に頼りすりぎてしまい、
表記のような基本的なこともすっかり忘れ、
あせってググってる毎日です。

こんな感じです。
....
<component name="poiInterceptor"
    class="xxx.interceptor.PoiInterceptor"/>
<component class="xxx.poi.SamplePoi">
  <aspect>poiInterceptor</aspect>
</component>
....

Inerceptorの"Smart Deploy"がうまくいかない。
PoiInterceptorを"Smart Deploy"に対応させたい。
S2Poiていうプロダクトになって欲しい。
...

--

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

repcached(memcachedにレプリケーション機能)

スズキです。

キャッシュソリューションとして、memcachedには注目していたのですが、
弊社の案件で使うインフラは、冗長構成、負荷分散、を前提にしているので、
レプリケーション機能ないと、本気で取り組めないなー、と思っていました。

そんなときに、こんな製品を見つけました。
http://lab.klab.org/modules/mediawiki/index.php/Repcached

考えてることはみんな一緒ですね。
弊社で使っている、Seasar2を基盤として開発フレームワークに
組み込みたいところです。S2Memcachedみたいに。

その前に、S2Quartz実運用しなければ、
もうすぐなんだけど、時間が...

--

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

2007年12月10日月曜日

POsyncでX02HTとGoogleカレンダーを同期

スズキです。

POsyncというアプリケーションでできます。
http://www.geocities.jp/bjsoftab4/zero3.html

X01HTのときは、GooSyncを使っていましたが、
POsyncは直接Googleに接続するので、
こちらに乗り換えました。

無事、同期はできていますが、
ホーム画面の予定の表示がきにいらないので、
なんとかならんかなー、ってところです。
(予定を早い順に何件が出して欲しい...)

まだまだ、X02HTが生活に溶け込んでないなー。

--

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

X02HTでGoogleマップ

スズキです。

下記より、専用アプリケーションがダウンロードできます。
http://www.google.co.jp/gmm/index.html

いつもの使い勝手のようGoogleマップが
X02HTでも利用することができます。

ただ、実際の使い方は、PCで目的地をGoogleマップで検索して、
その結果をX02HTに送って、それ見ながら現地に行くって
感じだろうから、それがスムーズにできるかは、
まだわかりません。

この辺はいろいろ試さないといけないなー。

--

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

2007年12月8日土曜日

X02HTでGmail(IMAP)連携

スズキです。

少しづつ、X02HTを調整しています。
まずは、Gmail連携です。
X02HTは発売されて、結構時間が経っているので、
ある程度、ネット上に有用な情報が出回っています。
http://pota.cocolog-nifty.com/pota/2007/11/x02htgmailimap_2001.html

基本的には、上記を参考にして、問題なく設定できたのですが、
IMAPを使う場合は、
「インターネットから電子メールの設定を自動的に取得する」
のチェックをはずす必要があります。
(はずさないと、POPで設定されてしまいます)

次は、fringを試してみよう。
http://www.fring.com/

--

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

2007年12月7日金曜日

いつのまにか社員ブログの数が11に

スズキです。

いつの間にか11人が参加するようになってました。
(右ブログパーツのiretの中の人のことです)
サッカーチームが作れる人数です。

特に、iret-ceoが集団から抜け出してきました。
http://iret-ceo.blogspot.com/

まあ、抜かれることはないと思うけど、要注意...

--

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

今さらながらの"Java Servlet"のgetParameter文字化け対策

スズキです。

近頃、ずっとフレームワーク上でJavaのWebアプリ作ってたので、
久しぶりに、サーブレットつくると、基本的な文字化け対策、
すっかり忘れてました。(で下記、ググりました)
http://liffey2.ld.infoseek.co.jp/java/japanese/index3.html

要は、これですね。
new String(targetString.getBytes("iso-8859-1"), "UTF-8");
※targetString: getParameterで取得した文字列

本当は、フィルターとかで対応しないといけないんだろうなー...

--

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

X02HT購入

スズキです。

ちょっと遅いですが、スマートフォンをX01HTをX02HTに変更しました。
http://mb.softbank.jp/mb/product/X/x02ht/

"Windows Mobile 6"です。
(X01HTより動作が軽快な気がします)

せっかくなので今回はGoogleアプリケーションと効率よく連携し、
できれば、GDTっぽいこともできれば、と思っています。

まずは、Gmailと"Google Calendar"連携、がんばろう。

--

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

2007年12月5日水曜日

S2VeloPoi

スズキです。

名前のごとく、POIで作成するドキュメントを、
Velocityテンプレートを用いて、S2DaoやS2Maiのように
インターフェース+テンプレートだけで作成できます。
http://d.hatena.ne.jp/rokugen/20071205#1196826756

すばらしい、いつか使わせていただく機会があるでしょう。
インターセプター作成の参考にもなります。

インターセプター作りたくなった。
ネタは何にしよう...

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

2007年12月4日火曜日

jTemplates(jQuery)情報、再び

スズキです。

以前、jTemplatesのWEB上の情報をまとめたのですが、
http://suz-lab.blogspot.com/2007/11/jtemplatesjquery.html
本格的に使うことになり、また、新しい情報も増えてきていますので、
まとめなおしておきます。

下記が新規情報となります。
▼livedoor開発Blog
http://blog.livedoor.jp/techblog/archives/64748832.html
▼iret-ceo(弊社CEOのブログです)
http://iret-ceo.blogspot.com/2007/11/teeda-ajax-jquery-jtemplate.html

次は、以前紹介したものです。
▼abui.nowa.jp
http://abui.nowa.jp/entry/909b254743
▼プログラマブルな趣味、もっぱらスクリプティング
http://d.hatena.ne.jp/coma2n/20071026/1193383124
▼CTOA日記(弊社一号生筆頭のブログです)
http://blog.livedoor.jp/hiroki0907/archives/cat_50034389.html

ViewだけでなくModelもそろそろ考えなくては。

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

jqUploaderでファイルアップロード後に任意の処理

スズキです。

jqUploaderはファイルアップロードの部分をFlashに任せています。
そして、画像がアップロードされたら、何かしらの事後処理を
javascriptで行いたいケースは多々あると思います。

ということで、JavascriptファイルとFlaファイルを眺めてみると、
その部分は、javascriptのTerminateJQUploaderに
定義された関数で可能なことがわかりました。

TerminateJQUploaderはjqUploaderのjsファイルで、
定義されている関数で、Flashから、ファイルアップロード完了後に
呼び出されています。

なので、下記のようにTerminateJQUploaderを任意の処理を持つ
関数で上書きすることで、表記を実現することがわかります。

--------
$(function(){
  $("#uploader").jqUploader({
    src: "swf/ext/jquploader.swf",
    background: "FFFFDF",
    barColor: "64A9F6",
    allowedExt: "*.avi; *.jpg; *.jpeg; *.png",
    allowedExtDescr: "Images and movies (*.avi; *.jpg; *.jpeg; *.png)"
  });
  TerminateJQUploader = function(containerId, filename, varname){
    alert(containerId);
    alert(filename);
    alert(varname);
  }
});
--------

次は、ファイルアップロード時に、任意のパラメーターを、
サーバサイドに送ることができるかの調査です。

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

2007年12月2日日曜日

システム自動管理ツールPuppet

スズキです。

サーバまわりから遠ざかってたら、知らないうちに、
Puppetなるシステム自動管理ツールなるものが、
はやっているようでした。
http://reductivelabs.com/trac/puppet

gihyo.jpにも記事になっています。
http://gihyo.jp/admin/serial/01/puppet

Rubyで作られているようです。

やっぱり、Ruby勉強しなきゃまずいかなー?

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

ViewSourceWithで(Firefox+KompoZer+GIMP)Portable

スズキです。

KompoZerというフリーのDreamWeaverみたいなソフトがあり、
そのバージョン0.7.10のポータブル版が出ました。(日本語化可)
▼ポータブル
http://portableapps.com/news/2007-11-30_-_kompozer_portable_0.7.10
▼本家
http://www.kompozer.net/
(日本語情報いっぱいあります!)

KompoZerのPortable版は、ちょっと前から、
試しにインストールしていたのですが、
直接使う機会がなく、いらないかなー、と思っていたところでした。

ただ、Firefoxなどで、HTMLソースを閲覧するときに、
KompoZerで開けたら便利そうだなー、という思いもあり、
FirefoxでHTMLソースを好きなエディタで開く術がないか、
調べてみました。

そしたら、まさに、ViewSourceWithというAdd-onがありました。
https://addons.mozilla.org/ja/firefox/addon/394

これで、ソースを開くとき、好きなエディタで開くことができます。
僕は、KompoZerはもちろんのこと、Portable環境の
メインエディタにしているサクラエディタも登録しました。
(HTMLソースをどのエディタで開くかも選択できます)

また、画像を開くさいのアプリケーションも指定できるので、
それは"GIMP Portable"を指定しています。
(少し起動が重たいですが...)

残りの課題としては、CSSとJSのソース閲覧です。
ViewSourceWithでこちらも指定できるのですが、
KompoZerでCSSを開こうとすると、HTMLじゃないと怒られます。
現状、サクラエディタで開くようにしていますが、
やはり、手ごろのCSSエディタで開きたいところです。
(JSも然り)

そろそろ、suz-labで活躍している
Firefoxアドオンのまとめでもしようかなー!?

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

Firefox Portable 2.0.0.10 リリース

スズキです。

表記のとおりです。
http://portableapps.com/news/2007-11-27_-_firefox_portable_2.0.0.10

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

土日、のんびり仕事ができる状態に幸せを感じてしまう。
(今までは、常に何かに追われていました...)

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

2007年12月1日土曜日

テキストボックスでのEnterキー押下での制御

スズキです。

フォームタグの中がテキストフィールド一つだけのとき、
そこで、Enterキーを押すと、submitされます。

ここで、イメージボタンとか使って、そのonclickで、
javascript実行して処理してる場合、
テキストフィールドでEnterキーを押したら、
そのjavascriptが呼ばれて欲しいわけです。

これを実現するため下記情報が非常に参考になりました。
http://www.g-collab.com/xoops/modules/bwiki/index.php?HTML%20JavaScript%20CSS%2FSubmit%A4%CE%CD%DE%C0%A9

ポイントは、

1. <input type="text" style="position:absolute;visibility:hidden">
といったダミーのテキストボックスを入れる。

2. 実際のテキストボックスに対してonKeyPressイベントでjavascriptを割り当てる
<input id="keyword" type="text" class="input01" onKeyPress="key_press()"/>
ただし、そのjavascriptはkeyCode:13(Enterキー)のみに作用するようにする。
function key_press(){
  if(event.keyCode == 13){
    search();
  }
}

といった感じになります。

今週末は普通に忙しい状態で仕事できそうだ...
(今までの週末はやばかった...)

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

2007年11月30日金曜日

TeedaでTitleタグの内容をDynamicPropertyで制御

スズキです。

Teedaつかってて、Titleタグの内容を、
動的に制御するための方法です。
https://www.seasar.org/issues/browse/TEEDA-174

まあ、ダイナミックプロパティです。

結構見つけるの苦労しました...

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

2007年11月26日月曜日

jQueryで画像アップロード(jqUploader)

スズキです。

Ajax画像アップロードといわれるものは、
結構、Javascriptで無茶なことしてて、きれいじゃないなー、
だったら、Flashでのアップロードの方がいいなー、
と思っていたら、jqUploaderという面白いものを見つけました。
http://www.pixeline.be/experiments/jqUploader/

これは、アップローダー自体はFlashで、
それをjQueryでコントロールしているようなものです。
Flashですので、画像アップロード時のプログレスバーも搭載しています。

Flashが画像アップロードし終わったときに
Javascriptの関数を実行することもできそうです。(これ重要)

今度、画像アップロード系の案件があるので、
積極的に使っていこうと思ってます。

suz-lab認定jQueryプラグイン、第3号です。
(第一号はjTemplates、第二号はlightBoxです)
http://jtemplates.tpython.com/
http://leandrovieira.com/projects/jquery/lightbox/

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

2007年11月23日金曜日

jQueryプラグインの作り方

スズキです。

jQueryも一通りいじってみて、
そろそろプラグインを自分で作ってみたくなってきました。

Googleで検索していると、下記、日本語情報を見つけました。
http://www.goodpic.com/mt/archives2/2007/11/jquery.html
結構、簡単なようです。

そろそろ、suz-jquery-pluginプロジェクトの立ち上げかな!?

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

jQueryプラグインまとめサイト

スズキです。

jQueryはプラグインがいっぱいあるので、
まとめサイト(記事)をまとめておきました。

▼本家
http://jquery.com/plugins/project/Plugins/name
▼jQueryのプラグイン33+1選 -2007年11月
http://coliss.com/articles/build-websites/operation/javascript/638.html
▼jQueryのプラグイン33+1選 -2007年9月
http://coliss.com/articles/build-websites/operation/javascript/356.html
▼The ultimate jQuery Plugin List
http://www.kollermedia.at/archive/2007/11/21/the-ultimate-jquery-plugin-list/

時間があるときに、少しずつ試して、
使いこなせるものを、少しづつ増やしていこう。

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

2007年11月21日水曜日

"Hyper Estraier"のjsessionid対策

スズキです。

Java-Webアプリケーションに対して、
"Hyper Estraier"でクロールしていると、
同じページなのに、jsessionidが違うということで、
別ページとみなされ、検索結果に、
実体が同じページが複数表示されてしまう問題に直面しました。

解決方法はクロールするときに、jsessionidの部分を
すべてカットした形にすることですが、
これを設定ファイルの調整で実現することができました。

対象となる設定ファイルは、
estwaver init hoge
で作成したhogeディレクトリ中の、
_confファイルです。

この中のreplace設定の部分を下記のように設定すると、
--------_conf
...
replace: %3Bjsessionid%3D.*hoge{{!}}
...
--------
%3Bjsessionid%3DE1DBF2D95B948F3499342CCD88C649FC.hoge
のようなjsessionidがカットされてクロールされます。
※"変換元の正規表現{{!}}変換先の文字列"といったフォーマットです。

全文検索は、みんなGoogleと比較してくるから、
対応が大変なんだよなー。

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

jTemplates(jQuery)情報

スズキです。

jQuery-Teeda-AjaxのViewを担う部分は、
jTemplates(jQueryのプラグイン)がいいんじゃないかと思ってます。
http://jtemplates.tpython.com/
(一回、仕事で使ったことあります)

ということで、jTemplatesの数少ない日本語情報を
とりあえずまとめてみました。

▼abui.nowa.jp
http://abui.nowa.jp/entry/909b254743
▼プログラマブルな趣味、もっぱらスクリプティング
http://d.hatena.ne.jp/coma2n/20071026/1193383124
▼CTOA日記(弊社一号生筆頭のブログです)
http://blog.livedoor.jp/hiroki0907/archives/cat_50034389.html

jTemplatesを使った仕事は、CTOA君と一緒にやりました。
結構、無茶振りしちゃったんだよね。

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

Teeda-Ajax文字化け(from iret-ceo)

スズキです。

Teeda-Ajaxで、Javascriptから、Java(Teeda)へ日本語を送ると、
Java側で文字化けします。

この解決方法をiret-ceoに質問されたので、
教えてあげたら、自分ブログにメモしてくれてました。
http://iret-ceo.blogspot.com/2007/11/teeda-ajax.html

弊社は個人ブログが技術情報のナレッジベースになりつつある。
まあ、これはこれで、ありだね。

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

Teeda-Ajax&jQueryの妄想(ディレクトリ構成編)

スズキです。

近頃、Teedaいっぱいやってます。jQueryも結構やってます。
(一番はまってるのはSQLだけど…)

そうなると、必然的にTeeda-AjaxとjQueryを結び付けたくなるものです。
ということで、サブアプリケーションごとにsubapp1.htmを用意し、
その中のコンテンツはjQuery-jTemplatesのテンプレートで用意し、
http://jtemplates.tpython.com/
subapp1.htm内でJavascriptを用いて内容を切り替えるようにし、
また、サーバとの通信はTeeda-Ajaxを使うWebアプリを妄想してみました。

まずはディレクトリ構成です。
tmpl/サブアプリケーションディレクトリ下に、
jQuery-jTemplatesのテンプレートを置くようにしています。

▼webapp以下のファイル/ディレクトリ構成
http://suz-lab.googlecode.com/svn/trunk/suz-example-teeda/src/main/webapp/
--WEB-INF : ...
--css
----ext : 外部ライブラリ用CSS置き場
----lib : 自作ライブラリ用CSS置き場
----app
------subapp1.css : サブアプリ用CSS
--js
----ext : 外部ライブラリ用Javascript置き場
----lib : 自作ライブラリ用Javascript置き場
----app
------subapp1.css : サブアプリ用Javascript
--img
----ext : 外部ライブラリ用画像置き場
----lib : 自作ライブラリ用画像置き場
----app
------subapp1
--------logo.gif : subapp1用のロゴ画像(例)
--tmpl
----subapp1
------list1.htm : subapp1用のテンプレート(例)
--index.htm : トップページ用HTML
--subapp1.htm : サブアプリケーション(subapp1)用HTML

ノリでGoogleCodesのsuz-example-teedaプロジェクトを
jQuery-Teeda-Ajax仕様にしてしまった。
(とりあえず、今までのサンプルは動きません…)

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

2007年11月20日火曜日

EclipseのDBViewerプラグインが1.0.4になってた

スズキです。

EclipseのDBViewerプラグインを愛用しています。
近頃、DBへの接続になぜかやたら時間がかかるようになったので、
原因調べる前に、アップデートしたらなおるかな?
と思って調べたら、1.0.4が出ていました。(1.0.1使ってました...)
http://sourceforge.jp/projects/dbviewer/files/

早速、jarファイルをダウンロードして、
eclipseのpluginフォルダに配置してアップデート終了です。
(1.0.1のjarは削除です)

これで、原因不明の接続遅延もなくなりました。

問題が発生したら、まずは、アップデート/再起動してしまう。
歳かなー…

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

レーティング(星型投票)UI用JavaScriptライブラリ

スズキです。

Javascript使うとレーティング(星型投票)UIも
ここまで作りこむことができるのか、と思ってしまう一品です。
http://www.nickstakenburg.com/projects/starbox/

ただ、"Prototype & Scriptaculous"ベースで作られているので、
jQueryベースのものがあったらいいなーと思ってしまうところです。

近頃、紹介記事ばかりだ...

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

2007年11月18日日曜日

Firefox Portable 2.0.0.9 リリース

スズキです。

表記のとおり、"Firefox Portable"の2.0.0.9がリリースしました。
http://portableapps.com/apps/internet/firefox_portable

本家のアップデートと時間差があるのが、ちょっとつらいですね。

設定の引継ぎ方法はこちらです。
http://suz-lab.blogspot.com/2007/07/firefox-portable-2005.html

近頃、ブログ更新してないなー…

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

2007年11月16日金曜日

Teedaで空の入力フォームをPageで空文字として受け取る

スズキです。

基本的に、DBの文字列の列は"NOT NULL"にしてるので、
空文字で値をもらえたらなー、といつも思っていたところです。

https://ml.seasar.org/archives/seasar-user/2007-November/013579.html

インターセプターですね。
すばらしい。

どんどん、かゆいところに手が届いていく~。

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

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/

2007年9月28日金曜日

Seasar2のコンポーネント自動登録

スズキです。

まあ、基本は"Smart Deploy"なんですが、
suz-s2-validatorとかsuz-s2-converterなどのライブラリ作ってると、
"Smart Deploy"以外のコンポーネント自動登録機能が使えると
いろいろと便利です。
http://suz-lab.googlecode.com/svn/trunk/suz-s2-converter/
http://suz-lab.googlecode.com/svn/trunk/suz-s2-validator/

で、Seasar2には3種類あります。
http://s2container.seasar.org/2.4/ja/DIContainer.html#ComponentAutoRegister

▼FileSystemComponentAutoRegister
ファイルシステムからクラスを検索しコンポーネントの自動登録を行います。

▼JarComponentAutoRegister
jarファイルからクラスを検索しコンポーネントの自動登録を行います。
※diconにてjarファイルを指定する必要があります。
<property name="jarFileNames">"junit.*"</property>

▼ComponentAutoRegister
ファイルシステム、jarファイル両方からクラスを検索しコンポーネントの自動登録を行います。
※クラス検索対象のディレクトリ、jarファイルを特定するための、クラス(なんでもいい)を指定ます。
<initMethod name="addReferenceClass">
  <arg>@aaa.bbb.ccc.ddd.HogeImpl@class</arg>
</initMethod>

実際問題、ライブラリは開発するときは、ファイルシステム、使うときは
jarファイルにクラスがあるはずなので、おのずと、
ComponentAutoRegisterの利用がしっくりきます。

ただ、addReferenceClassで適当なクラスを指定することが、
気持ち悪いといえば悪いですが、大体、こういうときは、
ベースとする抽象クラスつくっているので、
それを指定することにしとけば、そこまで気持ち悪いってほどでもありません。

実際はこんな感じで書いてます。

-------
<component
  class="org.seasar.framework.container.autoregister.ComponentAutoRegister">
  <property name="instanceDef">
    @org.seasar.framework.container.deployer.InstanceDefFactory@PROTOTYPE
  </property>
  <initMethod name="addReferenceClass">
    <arg>
      @jp.co.iret.suz.s2.converter.teeda.impl.AbstractConverterImpl@class
    </arg>
  </initMethod>
  <initMethod name="addClassPattern">
    <arg>"jp.co.iret.suz.s2.converter.teeda.impl"</arg>
    <arg>".*ConverterImpl"</arg>
  </initMethod>
</component>
--------
http://suz-lab.googlecode.com/svn/trunk/suz-s2-converter/src/main/resources/suz-s2-converter.dicon-

最初(半年前)、addReferenceClassが何なのか、まったくわからず、
ComponentAutoRegisterが使えなかったんだよなー。

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

Pidgin Portable 2.1.1 Released

スズキです。

Pidginは以前も紹介した、ポータブル環境で使える、
メッセンジャーアプリケーションです。
http://suz-lab.blogspot.com/2007/08/mirandapidgin.html

これが、VISTAに移行したところ、ちょくちょく、原因不明で
落ちるようになりました。

ということで、新しいバージョンリリースしてないかな?
と探してみたら、2.1.1がリリースしてました。
http://portableapps.com/news/2007-08-23_-_pidgin_portable_2.1.1

早速、バージョンアップです。
前バージョンの設定の引継ぎは、
<インストールフォルダ>\Data\settings
のコピーだけどOKです。

そろそろ、プラグインも試してみたいなー。

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

2007年9月26日水曜日

キロ(k)やメガ(M)に変換Converter(Teeda)

スズキです。

近頃さわる機会が多い、TeedaのConverterのネタです。

アップロードしたファイルのサイズを、キロ(k)単位で、
Pageに出力するニーズがあり、
それを実現するConverter(SiPrefixConverter)を作ってみました。

まあ、こんなコードです。
http://suz-lab.googlecode.com/svn/trunk/suz-s2-converter/src/main/java/jp/co/iret/suz/s2/converter/teeda/impl/SiPrefixConverterImpl.java

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

--------
@SiPrefixConverter(prefix="kilo", pattern="#,##0.#")
public Long getImageSize() {
  return imageSize;
}
--------

imageSizeはバイト数ですが、表示するときは、
キロの数字に変換されます。
※patternはDecimalFormatのやつです。

prefixは"kilo"のほかに、"mega"、"giga"、"tera"まで
指定することができます。(下記を参考にしてます)
http://www.math.com/tables/general/numnotation.htm#si

本当は、

--------
@SiPrefixConverter(prefix="kilo")
@NumberConverter(pattern="#,##0.#")
public Long getImageSize() {
  return imageSize;
}
--------

と連鎖する形で実現したかったんだけど、
Converterの仕組みでは無理っぽい。
なので、SiPrefixConverterにDecimalFormatのでの変換も、
入れざるを得なかったのが、心残りです。

どうせなら、DecimalFormatConverterを作って、
そのサブクラスとして、SiPrefixConverterを作るべきだったかなー。

ま、とりあえず、上記はsuz-s2-converter-0.0.2としてリリースしました。
http://code.google.com/p/suz-lab/downloads/detail?name=suz-s2-converter-0.0.2.zip
http://suz-lab.googlecode.com/svn/trunk/suz-s2-converter/

かなり、場当たり、ライブラリー。

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

ContinuumよりHudson?

スズキです。

今まで、CIはContinuum使ってました。
http://maven.apache.org/continuum/

でも、Hudsonっていうやつのほうが評判よさそうです。
https://hudson.dev.java.net/

Continuumも1.1になってるし、
一回、時間とって、CIの調査をしたいなー。

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

2007年9月25日火曜日

ImageIO(Java)で画像ファイルフォーマットの取得

スズキです。

Javaでアップロードした画像ファイルのフォーマット(jpeg/gif/...)を取得する必要があり、
"MIME Type"みて判断してもよかったんだけど、
せっかくなので、ファイルの中身で判断する方法を試みてみました。

いきなり結論ですが、ImageIOクラス使えばできます。
コードはこんな感じです。
--------
ImageInputStream iis =
ImageIO.createImageInputStream(uploadedFile.getInputStream());
Iterator readers = ImageIO.getImageReaders(iis);
ImageReader reader = (ImageReader)readers.next();
String ext = reader.getFormatName();
--------
※uploadedFileはtomahawkのUploadedFileです。

詳しくはJavadocですね。
http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/javax/imageio/ImageIO.html

これで、Teedaの画像フォーマットチェックValidatorが作れそうだ。

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

Teeda 1.0.11 RC-2 リリース

スズキです。

Teeda、1.0.11-RC2がリリースされました。
いろいろ、修正されています。
http://teeda.seasar.org/ja/roadmap_and_changes.html#1.0.11-RC2

早速、開発中のTeedaプロジェクト(RC1)は、
アップデートしておこう。

そろそろ、ライブラリアップデートに対する、
テストってものも考えていかないといけないなー。

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

Red5実践投入記事

スズキです。

FMSの代替として期待しているRed5。
http://osflash.org/red5

その実践投入記事です。
http://blog.ozacc.com/archives/001685.html

今まで、使ってみたかったけど、タイミングが合わず、
なかなか使えなかったRed5。

今度こそ、使っていきたいところです。
(Seasar2使えたらいいなー)

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

2007年9月24日月曜日

"Web Scouter"設置

スズキです。

たまにチェックする、"Web Scouter"の数値、
それも、いちいちサイトに行ってチェックするのは面倒なので、
本ブログ上部で確認できるようにしました。
http://ja.webscouter.net/info.phtml?u=http%3A%2F%2Fsuz-lab.blogspot.com%2F

いちいちサイトまでいかなくても、情報をチェックできるようにして、
自由に使える時間を増やしていかなくては。

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

サイト内検索(Google)設置

スズキです。

近頃、よく、自分の書いたBlogの記事を探します。
「昔調べて、Blogに書いたけど、なんだっけ?」
といった感じです。

記事の量も増えてきたので、記憶をたどって探すのは、
さすがに限界です。

ということで、Googleのサイト内検索を、
本Blog上部に設置しました。

タグはこんな感じです。

--------
<form action="http://www.google.co.jp/search" method="get">
  <input maxlength="255" value="" name="q" size="16" type="text"/>
  <input value="検索" name="btnG" type="submit"/>
  <input value="UTF-8" name="ie" type="hidden"/>
  <input value="UTF-8" name="oe" type="hidden"/>
  <input value="ja" name="hl" type="hidden"/>
  <input value="suz-lab.blogspot.com" name="domains" type="hidden"/>
  <input value="suz-lab.blogspot.com" name="sitesearch" type="hidden"/>
</form>
--------

技術Blogを書き続けることは、
未来の自分の技術力を加速させてくれるような気がする。

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

2007年9月23日日曜日

Javascriptでタグの除去

スズキです。

フィード(RSS)のdescriptionなどを、
Yahooの日本語形態素解析Webサービスなどで解析するとき、
http://developer.yahoo.co.jp/jlp/MAService/V1/parse.html
内部のHTMLタグが邪魔になります。

できれば、Javascriptの時点で、タグの除去を行いたいところですが、
調べてみると、Prototype.jsでタグの除去を行う関数(stripTags)が
用意されていました。
http://www.prototypejs.org/api/string/stripTags

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

----
var before = "<a>test</a>";
var after = before.stripTags();
alert(after);
----
"test"とタグが除去された形で表示されます。

JQueryベースの場合はどうやればいいんだろう?

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

2007年9月22日土曜日

PropertyConverter(Teeda)なるものを作ってみた

スズキです。

Teedaのコンバーター、便利です。

DBから取得した、表示フラグなど、
"true"なら"表示"、"false"なら"非表示"と出力する場合でも、
Converter作れば、アノテーション一発で変換することができ、
さらにそのConverterは使いまわすことも容易です。

で、実際の案件で上記のようConverter使おうとすると、
結構な数のConverterが必要になってきます。

クラスがいっぱいできるのは、あまり好きではないので、
変換ルールをpropertiesファイルに書いて、
そのキーを指定すると、キーに従った変換ルールを適用する
Converter(PropertyConverter)を作ってみました。

まずは変換ルールを書いたプロパティファイル
(appConverters_ja.properties)を用意します。

--------
jp.co.iret.suz.s2.converter.teeda.display.true=表示
jp.co.iret.suz.s2.converter.teeda.display.false=非表示

jp.co.iret.suz.s2.converter.teeda.country.0=日本
jp.co.iret.suz.s2.converter.teeda.country.1=アメリカ
jp.co.iret.suz.s2.converter.teeda.country.2=中国

jp.co.iret.suz.s2.converter.teeda.pref.AAA=東京都
jp.co.iret.suz.s2.converter.teeda.pref.BBB=大阪府
jp.co.iret.suz.s2.converter.teeda.pref.CCC=北海道
--------
http://suz-lab.googlecode.com/svn/trunk/suz-example-teeda/src/main/resources/appConverters_ja.properties

キーの最後が変換元の値で、それより前がmessageIdとなります。
そして、下記のようにアノテーションに上記のmessageIdを指定します。

--------
public boolean trueFlag = true;
public boolean falseFlag = false;
public int zeroId = 0;
public int oneId = 1;
public int twoId = 2;
public String aaaCd = "AAA";
public String bbbCd = "BBB";
public String cccCd = "CCC";

@PropertyConverter(
  messageId="jp.co.iret.suz.s2.converter.teeda.display"
)
public boolean isTrueFlag() { return trueFlag; }

@PropertyConverter(
  messageId="jp.co.iret.suz.s2.converter.teeda.display"
)
public boolean isFalseFlag() { return falseFlag; }

@PropertyConverter(
  messageId="jp.co.iret.suz.s2.converter.teeda.country"
)
public int getZeroId() { return zeroId; }

@PropertyConverter(
  messageId="jp.co.iret.suz.s2.converter.teeda.country"
)
public int getOneId() { return oneId; }

@PropertyConverter(
  messageId="jp.co.iret.suz.s2.converter.teeda.country"
)
public int getTwoId() { return twoId; }

@PropertyConverter(
  messageId="jp.co.iret.suz.s2.converter.teeda.pref"
)
public String getAaaCd() { return aaaCd; }

@PropertyConverter(
  messageId="jp.co.iret.suz.s2.converter.teeda.pref"
)
public String getBbbCd() { return bbbCd; }

@PropertyConverter(
  messageId="jp.co.iret.suz.s2.converter.teeda.pref"
)
public String getCccCd() { return cccCd; }
--------
http://suz-lab.googlecode.com/svn/trunk/suz-example-teeda/src/main/java/jp/co/iret/suz/example/teeda/web/converter/ListPage.java

そうすると、表示は次のように変換された結果となります。

(messageId: jp.co.iret.suz.s2.converter.teeda.display)
true → 表示
false → 非表示
(messageId: jp.co.iret.suz.s2.converter.teeda.country)
0 → 日本
1 → アメリカ
2 → 中国
(messageId: jp.co.iret.suz.s2.converter.teeda.pref)
AAA → 東京都
BBB → 大阪府
CCC → 北海道

設定としては、app.diconに下記記述が必要となります。

--------
<components>
  ...
  <include path="suz-s2-converter.dicon"/>
</components>
--------
http://suz-lab.googlecode.com/svn/trunk/suz-example-teeda/src/main/resources/app.dicon

というのを、suz-s2-converter-0.0.1としてリリースしてみました。
http://code.google.com/p/suz-lab/downloads/detail?name=suz-s2-converter-0.0.1.zip
http://suz-lab.googlecode.com/svn/trunk/suz-s2-converter/

次は、VelocityConverterなるものを作ろう。

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

suz-s2-validator-0.0.4 リリース

スズキです。

下記、修正に伴い
http://suz-lab.blogspot.com/2007/09/iefirefox.html
0.0.4としてリリースです。
http://code.google.com/p/suz-lab/downloads/detail?name=suz-s2-validator-0.0.4.zip

0.0.5は下記機能の実装を目指したいと思います。
-ファイルサイズのチェック
-ファイルタイプ(gif/jpeg/pdf/...)のチェック
-メッセージフをappMessages.propertiesから切り離す

時間、いつ取れるかなー。
(案件で必要になれば、すぐなんだけど)

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

IEとFirefoxではアップロードファイル名が違う!?

スズキです。

ついさっき、作成した、アップロードファイルバリデーターを
http://suz-lab.blogspot.com/2007/09/suz-s2-validator-003.html
iretの中の人に使ってもらったら、早速フィードバック(バグ)がきてしまった。
http://mchiraura.blogspot.com/2007/09/suz-s2-validator.html

なんか、表記のようにIEとFirefoxでは、
アップロードしたファイルに対して、getName()で取れる値が
下記のように異なっている。

Firefox: hoge.jpg
IE6,7: C:\Users\iretsuzuki\Pictures\hoge.jpg

しかたないので、

String name = file.getName().substring(file.getName().lastIndexOf("\\") + 1);

として評価するように修正。

あと、アップロードファイルがNULLのときも、ヌルポがでてたので、
それも修正。

これで、suz-s2-validator-0.0.4としよう。
(品質悪すぎ…)

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

2007年9月21日金曜日

suz-s2-validator-0.0.3リリース&アップロードファイルバリデーター(Teeda)

スズキです。

昔、suz-s2-validatorなるものを作ってました。
http://suz-lab.blogspot.com/2007/07/suz-s2-validator-002.html

近頃、TeedaのValidatorをいろいろいじり始め、
Teedaでのファイルアップロード時にファイル名をチェックするものを
作る必要があり、せっかくなんで、suz-s2-validatorとして作ってみました。

そして、0.0.3としてリリースしてしまいました。
http://code.google.com/p/suz-lab/downloads/detail?name=suz-s2-validator-0.0.3.zip
http://suz-lab.googlecode.com/svn/trunk/suz-s2-validator/

使い方は下記のとおりで、namePatternsが配列で指定でき、
マッチさせたい、正規表現パターンを複数書くことができます。
(どれにもマッチしなかったらエラーとなります)

--------
public UploadedFile uploadedFile;

@Required
@UploadedFileValidator(namePatterns={"aaa", "hoge\\.jpg"})
public void setUploadedFile(UploadedFile uploadedFile) {
  this.uploadedFile = uploadedFile;
}
--------
http://suz-lab.googlecode.com/svn/trunk/suz-example-teeda/src/main/java/jp/co/iret/suz/example/teeda/web/upload/EntryPage.java

その他の設定として、app.diconに下記記述が必要となります。

--------
<components>
  ...
  <include path="suz-s2-validator.dicon"/>
</components>
--------
http://suz-lab.googlecode.com/svn/trunk/suz-example-teeda/src/main/resources/app.dicon

また、現状、表示するエラーメッセージもappMessages(_ja).propertiesに
記述する必要があります。

jp.co.iret.suz.s2.validator.teeda.uploadedFileName=ファイル名が不正です。

とりあえず、こんな感じです。
(まだ、自分関係しか使えないですね)

せっかくなんで、MAXファイルサイズや、ファイルタイプ(gif, jpeg)などにも
対応したいなー。

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

Teedaでweb.xmlのtomahawkFilterの位置

スズキです。

Seasar-userのMLでtomahawkFilterの位置が
s2filterの上でないと、いろいろ問題が出るような投稿がありました。
(詳しくはこちら)
http://ml.seasar.org/archives/seasar-user/2007-September/012467.html

なので、suz-example-teedaのweb.xmlも修正しておきました。
http://suz-lab.googlecode.com/svn/trunk/suz-example-teeda/src/main/webapp/WEB-INF/web.xml

そろそろ、ブログ復活。

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

2007年9月18日火曜日

HTTPSで"Google Analytics"を警告なしに使う

スズキです。

久しぶりの投稿です。
なぜ、久しぶりかというと、リリースラッシュだからです。

で、リリースするときに、
急遽埋め込んだ、"Google Analytics"のコード(Javascript)が原因で、
HTTPSのページで、
保護されない項目やら、 保護されている項目やら
の警告が出るようになってしまいました。

原因は、そのページ内で、
<script src="http://www.google-analytics.com/urchin.js"
type="text/javascript"></script>
という記述があったからです。

これを、下記のように変更することで回避することができます。
<script src="https://ssl.google-analytics.com/urchin.js"
type="text/javascript"></script>
(参考) http://www.onflow.jp/blog/archives/2006/02/google_analytic.html

このような細かいところも、(Teedaで)美しく解決していきたいなー。
(今は、かなり、場当たり…)

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

2007年9月9日日曜日

Eclipseの正規表現プラグイン&Pleiades1.2.1.p8

スズキです。

近頃、PHPやってる時間が長くなり、
正規表現とかも、頻繁に必要になってます。

PHPの開発もEclipse(Aptana)でやっているので、
Eclipseの正規表現系のプラグインを本気で考えてみることにしました。

結論として導入したのは、QuickRExです。
http://www.bastian-bergerhoff.com/eclipse/features/

選んだポイントとしては、単純で、
Pleiadesが対応しているかどうかです。
(最終的には社内に基本セットとして提供するので日本語化が重要です)

ついでにPleiadesのリリースチェックしたら、1.2.1.p8
が出ていたので、それもアップデートしときました。
http://mergedoc.sourceforge.jp/

正規表現はTeedaのConverterでも使うので、
なかなか重宝しそう。

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

"Virtual Desktop for Win32"でデスクトップの使い分け

スズキです。

近頃、"Lifehacker"という本を読んでいます。
ITを駆使して効率よく生きていくためのノウハウ本ってところです。
http://www.amazon.co.jp/dp/4756149499/

その中に、"仕事別に複数のデスクトップを使い分けよう"(ハック10)
というものがあり、
Microsoft Virtual Desktop Manager
仮想デスクトップアプリケーションの利用を紹介しています。

これは便利そうなので、実践しようと思いましたが、
できれば、ポータブル環境で実現しようと思い、いろいろ調べると
表記アプリケーションが見つかりました。
http://homepage1.nifty.com/salt/fsw.htm

YLunchの自動起動(起動時)に設定しておけば、
起動のストレスもありません。壁紙もデスクトップごとに変更できます。

とりあえず、仮想デスクトップ環境、試してみます。
(壁紙どうしよう)

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

2007年9月8日土曜日

EclipseのJStyleで全角スペースを可視化

スズキです。

よく、初学者にEclipseで
Java、PHP、Javascript、SQL
などを教えています。

ここで、頻度が多く、発見が難しいエラーの一つに、
半角スペースが全角スペースになってるエラーあります。

全角スペースを可視化できるプラグインとかないかなー
と調べていたら、やっぱりありました。
JStyleです。
http://www.eclipsewiki.net/eclipse/?JStyle%A5%D7%A5%E9%A5%B0%A5%A4%A5%F3
http://mergedoc.sourceforge.jp/index.html#/jstyle.html

インストールは上記URLの情報に従えば簡単です。
(まあ、いつものやり方です)

このプラグインは全角スペースだけでなく、タブ、改行も
可視化してくれます。
(設定すれば半角スペースも可能です)

一点、注意事項として、このプラグインは
> 表示は MS ゴシック 9 ポイントで最適となるように調整しています。
とのことです。
(これを忘れると、全角スペースが棒線とかになってしまいます)

なんか、Eclipseが秀丸みたいになってきたぞ。

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

2007年9月7日金曜日

WTP 1.5.5 & DBViewer

スズキです。

WTPが1.5.5になりました。
http://www.eclipse.org/webtools/releases/1.5.5/

早速Eclipseのプラグインの更新でアップデートしました。
すると、なぜかWTPの"データベース・エクスプローラー"が動かなくなり、
少し調査しましたが、なんか解決は難しそうで、
また、WTPの"データベース・エクスプローラー"は、
タイミングを見て、他のツールに乗り換えようと思っていたこともあり、
DBViewerへの乗り換えを試してみました。
http://www.ne.jp/asahi/zigen/home/plugin/dbviewer/about.html

下記、更新サイトがあるので、導入はお決まりの方法で一発です。
http://www.ne.jp/asahi/zigen/home/plugin/dbviewer/

で、早速パースペクティブをDBViewerにしてみると、
なぜか、開きません。

Eclipseのログを見ると、案の定、Exceptionが出力されています。
--------
org.apache.commons.logging.LogConfigurationException
Invalid class loader hierarchy.
You have more than one version of 'org.apache.commons.logging.Log' visible,
which is not allowed.
--------

いろいろ、調べたり試した結果、
なんか、log4jのjarがクラスパスに重複して存在すると出現する現象らしい。
(あまり、よくわかっていませんが)

実際、
plugins/org.apache.jakarta_log4j_1.2.8.v200607172048/lib
の下に、log4j-1.2.8.jarが存在し、
plugins/zigen.plugin.db_0.3.0/lib
の下にも、log4j-1.2.9.jarが存在しています。

なので、
plugins/zigen.plugin.db_0.3.0/lib/log4j-1.2.9.jar
の方を削除することで、
無事DBViewerの起動を確認することが出来ました。

EclipseのDBプラグインはDBViewerが一番いいような気がする。

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