2008年3月31日月曜日

Seasar2.4.24&Teeda1.0.13-rc6リリース

スズキです。

表記の通りです。

▼Seasar 2.4.24 リリース
http://www.seasar.org/wiki/index.php?SeasarWhatsNew%2F2008-03-28#i6c8a4c5

> S2JDBC で getCount() を呼び出した場合に生成される SQL が
> 副問い合わせに別名を指定していないため
> PostgreSQL でエラーとなる問題を修正しました.
https://www.seasar.org/issues/browse/CONTAINER-173

こちらに関しては、PostgreSQLだけでなくMySQLでも発生し、
とりあえず、snapshot版で回避していましたが、
リリースにも取り込まれたようです。よかった、よかった。

▼Teeda 1.0.13-rc6 リリース
http://www.seasar.org/wiki/index.php?SeasarWhatsNew%2F2008-03-29#pf8d3df0

> レイアウトを使うと,タイトルがアクセスされた本体のタイトルにならず,
> レイアウトのタイトルになってしまう問題を修正しました.
https://www.seasar.org/issues/browse/TEEDA-455

やっぱり、そうだったんだ、って感じです。
これも、修正されて、よかった、よかった。

とりあえず、これで、最新のTeeda+S2JDBCで
現在わかっている、不都合なところはなくなったなー。

--

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

2008年3月30日日曜日

XML.ObjTreeでXMLのJSON(オブジェクト)化

スズキです。

以前、XMLのJSON化をJSON-lib(Java)を用いて、
サーバサイドで行う実験をしました。
http://suz-lab.blogspot.com/2008/01/json-libxmljson.html

まあ、できたことはできたのですが、

<hoge0>
  <hoge1/>
</hoge0>

<hoge0>
  <hoge1/>
  <hoge1/>
</hoge0>

となりうる場合のhoge1の扱いが微妙でした。
(前者は単一のプロパティ、校舎は配列と扱ってしまう)

なので、今回はObjTree(Javascript)を使い
http://www.kawa.net/works/js/xml/objtree.html
クライアントサイドで、表記を行うことにしました。

Amazonのサービスを例にとると、
下記のような感じで使うことができます。(jQuery前提ですが...)

$(function(){
  var url = "php/proxy.php/http://xml-jp.amznxslt.com/onca/xml";
  url += "?Service=AWSECommerceService";
  url += "&AWSAccessKeyId=XXXXXXXXXXXXXXXXXXXX";
  url += "&Version=2004-10-04";
  url += "&ResponseGroup=Small";
  url += "&ItemPage=1";
  url += "&Operation=ItemSearch";
  url += "&ContentType=text/xml";
  url += "&SearchIndex=Books";
  url += "&Keywords=Ajax";
  var xotree = new XML.ObjTree()
  xotree.parseHTTP(url, null, function(data){
  alert(data.ItemSearchResponse);
  });
});

当然、XML.ObjTree(objtree.js)を読み込む必要がありますが、
http://www.kawa.net/works/js/xml/src/XML.ObjTree-0.24/lib/XML/ObjTree.js
parseHTTPを使うにはHTTP.Request(request.js)も
http://openjsan.org/doc/r/rk/rkinyon/HTTP/Request/0.03/lib/HTTP/Request.html
先に読み込む必要があります。

まあ、HTMLとしてはこんな感じでしょうか?

<script type="text/javascript" src="js/ext/request.js"></script>
<script type="text/javascript" src="js/ext/objtree.js"></script>

ObjTreeの場合は、上述した配列になり得るノードの扱いも、
あらかじめ、force_arrayプロパティで指定することにより、
常に(一つしか出現しなくても)配列として扱うことができます。

これが決定版かな?

--

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

2008年3月28日金曜日

HttpClientでBasic認証の設定

スズキです。

近頃、HttpClientでXML取得しています。
http://hc.apache.org/httpclient-3.x/index.html
そして、接続先にBasic認証がかかっています。

で、HttpClientを下記のようにつかうと、
Basic認証がかかっている接続先でも問題なく取得できるようになります。

--------
HttpClient client = new HttpClient();
UsernamePasswordCredentials credentials
  = new UsernamePasswordCredentials("user", "pass");
client.getState().setCredentials(null, null, credentials);
GetMethod method = new GetMethod(url);
method.setDoAuthentication(true);
--------

XMLは扱いづらいなー。JSONがいいよー。

--

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

2008年3月23日日曜日

2008年3月22日土曜日

VistaでTomcatを動かすとIPアドレスがv6扱いになってる

スズキです。

携帯コンテンツ自動変換フィルター(Java)である
Durianをセッティングしているときに、表記の問題ではまりました。
http://durian.symmetric.jp/dev/

現象は、Durianフィルターを設定("/*"に対し)すると、
どのコンテンツも403エラーになってしまう、というものです。

いろいろ調べたところ、Tomcatのアクセスログが、

0:0:0:0:0:0:0:1 - - [22/Mar/2008:01:20:35 +0900] "GET
/durian/index.html HTTP/1.1" 403 947

となっていることに気づきました。0:0:0:0:0:0:0:1ってIPv6じゃん!
ってことです。

なのでまずは、IPv6をIPv4にもどしてみようと、いろいろググると、
下記のような情報が出てきました。

▼Windows Vista + Tomcat Tips
http://sbirobo.com/2008/01/tips-regarding-windows-vista-with-tomcat.html
▼HttpServletRequest#getRemoteAddr()とIPv6
http://d.hatena.ne.jp/Kazzz/20070129/p1

つまり、java起動オプションに"-Djava.net.preferIPv4Stack=true"
を追加すればいけそうです。

実際、set JAVA_OPTS="-Djava.net.preferIPv4Stack=true"
として、Tomcatを起動して、Durianフィルターをかけているコンテンツに
アクセスすると、無事、変換後のコンテンツが表示されました。

念のため、再度アクセスログを確認すると、

127.0.0.1 - - [22/Mar/2008:01:22:56 +0900] "GET /durian/index.html
HTTP/1.1" 200 371

と、ちゃんとIPv4に戻っています。

ただ、開発はEclipseのWTPで行っているので、実際は
set JAVA_OPTS="-Djava.net.preferIPv4Stack=true"
というわけにはいきません。

こちらに関しては、Eclipseの上部メニューの
[ウィンドウ] > [設定] > 適当なJREを選択して[編集]
で出現するJREの編集パネルの"デフォルトのVM引数"
に"-Djava.net.preferIPv4Stack=true"を設定することで
同様のことが実現できました。

これで、Windows(Vista)上のEclipse(WTP)での
Durianを前提にした開発の準備ができました。

次は、絵文字まわりかな。

--

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

Teeda 1.0.13-rc5 リリース

スズキです。

表記の通りです。
http://teeda.seasar.org/ja/roadmap_and_changes.html#1.0.13-rc5

早速、アップデートです。

--

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

Teedaでspanタグを表示しないためには(te:omittag="true")

スズキです。

相変わらず、携帯モードです。

Teedaは動的な値のHTMLへの差し込みを、

<span id="hoge">ほげ</span>

のように、spanタグのidに
Pageクラスのフィールド名を指定することで実現します。
("ほげ"がフィールドの値にさしかわります)

このとき結果は

<span>ほげ</span>

となり、spanタグは基本、残ったままです。

携帯の場合はこの出力結果のspanは邪魔なので、
下記のようにすることで、spanの無い形で出力することができます。

<span id="hoge" te:omittag="true">ほげ</span>

つまり、このあたりのお話でした。
http://d.hatena.ne.jp/yone098/20070801

次は、Durian4の設定だ...

--

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

2008年3月20日木曜日

TeedaでHotDeploy時にPageクラスのthis.getClass().getPackage()がnullになる

スズキです。

表記の現象が起きています。
HotDeployのときのみで、CoolDeployでは問題ありません。
(WarmDeployは試していません)

ただ、this.getClass().getName()は取得できるので、
この戻り値に対し文字列操作を行い、
パッケージ名は取得することができます。

とりあえず、上記の方法で回避です。
(HotDeployは捨てがたい...)

--

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

今日のブックマーク 03/20/2008

Shadowsbox.jsのインターフェイスを日本語に

tags: jquery

  • いつかShadowbox.jsを使うときのために。 - post by suz-lab

2008年3月19日水曜日

Seasar2でDBコネクションを"Read Only"に

スズキです。

MySQL(slave)用のjdbcManagerを作ろうとしています。
(複数のjdbcManagerの作成はこちらに詳しく書かれています)
http://s2container.seasar.org/2.4/ja/s2jdbc_other.html#%E8%A4%87%E6%95%B0%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF%E3%82%BD%E3%83%BC%E3%82%B9

MySQL(slave)用のjdbcManagerに期待することは、
"Read Only"で、複数台用意されているMySQL(slave)に
クエリーを分散することです。

クエリーの分散はどっちかというとJDBCドライバの話になるので、
これはこれで、後でしっかり調査・実験することとします。

"Read Only"に関してですが、Javadocを眺めていると、
org.seasar.extension.dbcp.impl.ConnectionPoolImplに
setReadOnlyというメソッドがあります。
http://s2container.seasar.org/2.4/s2-extension/ja/apidocs/index.html

なので、jdbc.dicon(本当は複数データソースなんでjdbc-slave.dicon)に

<component name="connectionPool"
    class="org.seasar.extension.dbcp.impl.ConnectionPoolImpl">
  <property name="timeout">600</property>
  <property name="maxPoolSize">10</property>
  <property name="allowLocalTx">false</property>
  <property name="readOnly">true</property>
  <destroyMethod name="close"/>
</component>

と記述することで実現することができました。

実際、このコネクションで作成したjdbcManagerで
INSERT文を発行したところ、
ちゃんと下記のようなメッセージの例外が発生しました。

Connection is read-only. Queries leading to data modification are not allowed

本当は、MySQL(slave)の前に、Teedaの調整やらないといけないんだけど...

--

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

BloggerのフィードをRSSで取得するには

スズキです。

表記に関してですが、結構苦労しました。

本ブログはフィードを"Feed Burner"にリダイレクトしています。
そして、"Feed Burner"がAtomで配信しているので、
まずはこれを何とかしなければいけません。

このリダイレクトは下記のようなURLパラメータで回避できます。
http://suz-lab.blogspot.com/rss.xml?redirect=false

しかし、なぜかrss.xmlなのに、まだAtomです。
で最終的に、下記のようなURLにすることで、
ようやくRSS形式で取得することができました。
http://suz-lab.blogspot.com/feeds/posts/default?alt=rss&redirect=false

なぜ、わざわざRSS形式のフィードが必要かというと、
@wikiでブログの記事一覧を出したかったからです。
http://www7.atwiki.jp/suz-lab/

SBMの次はWIKIの活用に挑戦です。

--

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

2008年3月18日火曜日

Connector/J(MySQL-JDBC)のReplicationDriverとS2JDBC

スズキです。

久々にJDBCまわりやっているので、
ついでにConnector/J(MySQL-JDBC)とかも追いかけてみました。

すると、com.mysql.jdbc.ReplicationDriverなるドライバが
存在することを発見し、調べてみると、
これはMySQLでレプリケーション構成(Master/Slave)してる場合に
いい感じにロードバランシング/フェイルオーバーする機能を持った
ドライバのようです。(詳しくは下記読んでください)

▼MySQL 5.1 Reference Manual
http://dev.mysql.com/doc/refman/5.1/en/connector-j-reference-replication-connection.html
▼c3p0とmysqlのReplicationDriver
http://hide-t.vox.com/library/post/c3p0%E3%81%A8mysql%E3%81%AEreplicationdriver.html
▼Connector/JのReplicationDriverとコネクションプールの問題が解決
http://hide-t.vox.com/library/post/connectorj%E3%81%AEreplicationdriver%E3%81%A8%E3%82%B3%E3%83%8D%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%97%E3%83%BC%E3%83%AB%E3%81%AE%E5%95%8F%E9%A1%8C%E3%81%8C%E8%A7%A3%E6%B1%BA.html

ただ、いろんな情報見ていると、コネクションプーリング時に
問題が発生したり、しなかったり、とか聞くので、
S2JDBCで利用する場合は、ReplicationDriverは使わずに、
普通のドライバでMaster用/Slave用のjdbcManagerを
それぞれ用意したほうがいいのかな、とも思っています。

とりあえず、レプリケーションされたDB作って、実験したいなー。

--

http://suz-lab.blogspot.com

今日のブックマーク 03/18/2008

MySQL :: MySQL 5.0 Reference Manual :: 24.4.4.6 Using Master/Slave Replication with ReplicationConnection

tags: jdbc, mysql

  • S2JDBCとうまく連携できるとうれしい。
    どうやるんだろう?
     - post by suz-lab

S2JUnit4でNamingConventionの値を取得

スズキです。

この辺のお話です。(結構、苦労しちゃいました...)
http://ml.seasar.org/archives/seasar-user/2007-July/009286.html

convention.diconに下記のように記述しているのに、

<component class="org.seasar.framework.convention.impl.NamingConventionImpl">
  <initMethod name="addRootPackageName">
    <arg>"jp.co.iret.suz.mobile"</arg>
  </initMethod>
</component>

下記のような処理をしているクラスをS2JUnit4にてテストすると

@Binding
private NamingConvention namingConvention;
...
this.namingConvention.getRootPackageNames()[0]

下記例外が発生してしまいました。

java.lang.ArrayIndexOutOfBoundsException: 0

つまり、addRootPackageNameしたはずの値が
取得できていないようです。

調べてみると、デフォルトではS2JUnit4は
convention.dicon内のNamingConventionの設定を
読み込まないようです。(ちょっと自信ありませんが...)

で、読み込ませるためには下記のようなアノテーションを
テストクラスに付与することでできるようです。(できました)

@RegisterNamingConvention(false)

(デフォルトはtrueということですね)

つまり、こんな感じです。

@RunWith(Seasar2.class)
@RegisterNamingConvention(false)
public class IndexPageTest {
...

次はTeedaまわり、がんばろう。

--

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

2008年3月17日月曜日

S2JDBCのgetCountBySqlFileでエラー(MySQL)

スズキです。

S2JDBC試してます。
期待している機能の一つであるgetCountBySqlFileを
MySQLにて試したところ、

select count(*) from (
  SELECT * FROM HOGE
)

といったSQLが実行され、
(SQLファイルの内容は"SELECT * FROM HOGE")
下記のようなエラーが出力されました。
Every derived table must have its own alias

実際、上記のSQLを直接実行したところ、
同様のエラーが発生し、問題はSQLにあるようです。

エラーより、推測できるのですが、下記なSQLなら、
問題ないようです。(副問い合わせに"Alias:TMP"を付与)

select count(*) from (
  SELECT * FROM HOGE
) as TMP

困ったなーと思い、とりあえずtrunkのソースを見てると、
http://svn.seasar.org/browse/trunk/s2-tiger/src/main/java/org/seasar/extension/jdbc/dialect/StandardDialect.java?revision=3521&root=s2container&view=markup
該当部分は下記のようになっており、
エイリアス(COUNT_)付いてるなー、と思いつつ、

public String convertGetCountSql(String sql) {
  return "select count(*) from ( " + sql + " ) COUNT_";
}

実際に利用している2.4.23の該当部分を確認すると、

public String convertGetCountSql(String sql) {
  return "select count(*) from ( " + sql + " )";
}

案の定、エイリアスは付いていませんでした。

ということで、下記にある2.4.24のスナップショットを使うことで、
http://maven.seasar.org/maven2-snapshot/org/seasar/container/s2-framework/2.4.24-SNAPSHOT/
現状は回避することにしました。

S2JDBCのソースを少し読んでしまった...

--

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

2008年3月14日金曜日

次の携帯案件(Java)のフレームワーク構成

スズキです。

昨年、6月あたりに
「Durian4 + Teeda + Kuina-Dao」の構成で
携帯サイト(マルチキャリア対応)を構築しました。
http://suz-lab.blogspot.com/search/label/Durian

また、Durian4が使えそうな案件ができそうです。
今回は、「Durian4 + Teeda + S2JDBC」
の構成を試してみようと思っています。

昨年6月と違い、
-Durian4は4.1に
-Teedaもかなりバージョンアップ
-新プロダクト、S2JDBCの導入
と状況も変わっており、楽しみです。

まずは、Durian4の手配、
https://www.samuraiz.co.jp/inquiry/smtpindex.cfm?inq=0010020000
そして、「Teeda + S2JDBC」の検証です。

--

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

2008年3月13日木曜日

2008年3月12日水曜日

Gmailのフィルター調整

スズキです。

メーラーはGmailを使ってます。
フィルター機能も適当に使ってます。

でも、近頃、受信メールが増え、
受信トレイのメールが管理しきれなくなってきました。

ということで、今日はGmailフィルターの見直しをしました。
フィルターといっても、重要なのはラベルの定義です。
今回は下記のようにしました。
(すべて受信トレイに溜まらないようにフィルターされます。)

00_自分宛て
01_重要情報
02_申し込み
03_打ち合わせ
04_技術情報
08_処理済(今週)
09_処理済(過去)

「00_自分宛て」はメール本文に自分の名前が入ってるものが
溜まるようにしています。
(自分宛のメールは自分の名前がはいっているはず!?)

「01_重要情報」は自分宛でなくても
目を通さないといけない情報です。
(基本的に自分に関係が深いメーリングリストです)

「02_申し込み、03_打ち合わせ」は自分宛のメールで、
それぞれの情報を含むものです。ここに来る場合は、
00_自分宛てラベルははずします。

「04_技術情報」は自分に届いたメールの中で、
有益だと思ったもにつけます。

「08_処理済(今週)」は自分宛のメールで処理したもの
一週間分をためます。ここに来る場合は、
00_自分宛てラベルははずします。
(週単位で仕事の振り返りをする必要性があるため)

「09_処理済(過去)」は次週になったときに、
処理済(今週)のメールを移動する場所です。
当然、このとき、08_処理済(今週)ラベルははずします。

あと、すぐに読む必要のないメールは、
それにふさわしいラベルを作りメールが無駄に
受信トレイにたまらないようにします。

これで、後は、「受信トレイ」と「00_自分宛て」が
常に空の状態であるように運用できれば
って話になります。

そろそろ、GTDか?

--

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

2008年3月11日火曜日

2008年3月10日月曜日

iretの中の人2名追加

スズキです。

表記の通り、下記、弊社社員のブログ二点を追加しました。
▼EMP WORDS
http://blog.emp.fem.jp/
▼It's a Smile World
http://blog.2-laps.com/

iretの中の皆さん、リンクしてあげてください。

--

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

WebLogicでHDMLが文字化け

スズキです。

わけあって、HDMLコンテンツ作ってます。
でTomcatでは日本語問題なく表示するのに、
WebLogicで化けてしまう(?になってしまう)問題が発生しました。

いろいろ悩んだのですが、web.xmlに下記を記述することで
解決しました。

-------- web.xml
<mime-mapping>
  <extension>hdml</extension>
  <mime-type>text/x-hdml;charset=Shift_JIS</mime-type>
</mime-mapping>
--------

TomcatとWeblogicで挙動が異なるのは困るなー

--

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

2008年3月6日木曜日

今日のブックマーク 03/06/2008

Galleria - a Javascript Image Gallery

tags: jquery

  • ギャラリー作成プラグイン(jQuery)
     - post by suz-lab

2008年3月5日水曜日

今日のブックマーク 03/05/2008

Hybrid Style Design. BLOG :: AS3でムービー全体のプリローダー

tags: as3

  • AS3のプリローダー
     - post by suz-lab

akihiro kamijo: BlazeDS のプッシュ機能

tags: blazeds

2008/02/19/ドキュメントクラスのメンバがコンフリクト - くじらぶろぐD

tags: as3, flash

  • FlashCS3でドキュメントクラス作成時に
    「1151: 定義 hoge (名前空間 internal) にコンフリクトが存在します。」
    を回避する方法。
     - post by suz-lab

Flashでの同期設定 / ウェブデザインライブラリー

tags: flash

  • Flashで音楽の同期設定について
     - post by suz-lab

2008年3月3日月曜日

今日のブックマーク 03/03/2008

Skype API Plugin for Pidgin/libpurple/Adium

tags: portable

  • Pidginの"Skype API Plugin"があります。
     - post by suz-lab

MOONGIFT: » Adium/PidginにSkypeも統合「Skype API Plugin」:オープンソースを毎日紹介

tags: portable

  • PidginからSkypeを使うプラグイン。
    ただし、Skypeは起動していなくてはならない。

     - post by suz-lab

2008年3月2日日曜日

Pidgin Portable 2.4.0 リリース

スズキです。

http://suz-lab.blogspot.com/2007/09/pidgin-portable-211-released.html
以来のリリースです。(2.1.1→2.4.0)
http://portableapps.com/news/2008-02-29_-_pidgin_portable_2.4.0

かなりバージョンが跳んでいるので、
今回は以前の設定ファイルをコピーするのではなく、
再度、アカウントの設定をやり直しました。

使い勝手は、今のところ、特に変わった感はありません。
何が良くなったんだろう?

--

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

2008年3月1日土曜日

VLC Media Player Portable 0.8.6e リリース

スズキです。

表記の通り"VLC Media Player Portable"が
0.8.6eになりました。
http://portableapps.com/news/2008-02-29_-_vlc_portable_0.8.6e

本体のバージョンアップにあわせたものだと思います。
http://trac.videolan.org/vlc/browser/tags/0.8.6e/NEWS

ざっと、上記のChangeLogを見ましたが、
気になるものは特にありませんでした。

英語ができないだけかも…

--

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