アーカイブ

2010 年 2 月 のアーカイブ

javax.imageio.ImageIO で gif画像 の write (とリサイズ関係)

2010 年 2 月 26 日 tdtsh コメントはありません

たまたまImageIOを触る機会があって始めて認識した事なんですが、javax.imageio.ImageIO で gif 画像を扱う時、JDK5まではreadが出きてもwirteが出来なかったんですね。

「Java SE 6完全攻略」第13回 GIFファイルの書き出し – IT Pro

よくよく考えたら判ることだったんですけど、2004年頃まではUnisys特許絡みがあったので、書き込み出来なくしてたんですね。

ImageIO と絡んでgifとかの画像のリサイズとか調べてたら、イイ感じのサンプル発見したのでメモ。

今まで AffineTransformOp を多用していたのですが、「早いけど、荒い」方法だったんですね。どうりでリサイズ後のベクター画像が汚いわけだ・・・

Image Javaテクニカルサンプル集さんの、ここここここ

多分ここのコードは物凄く再利用されているんだろうなぁ。
そういう意味では、目立たないけどすごい社会貢献だと思います。

私も見習いたいと思います。

カテゴリー: java タグ:

GAE/J (Google App Engine for Java) で Struts を動かす

2010 年 2 月 9 日 tdtsh コメントはありません

GAE/J (Google App Engine for Java) で Struts を動かす

GAE/J でも Struts は動く

GAE/J では Spring を始め、いわゆる「重い」フレームワークは避けたい。

今後オレオレフレームワークを作るのか、Slim3等に移行するのかは、まだ決めかねています。

当面は Spring は兎も角、使い慣れた Struts と Velocity を使うことにします。

Velocityは先日やりましたから、今回はStrutsです。

先人の知恵、こちらや、こちらを参考に、環境を作ります。

因みにWill it play in App Engine – Google App Engine for Java | Google Groupsによると、Struts1系は 1.2.28 で COMPATIBLE となっています(2010年02月09日現在)。

 


ダウンロードとインストール

Apache Software Foundation の Strutsのサイトからダウンロードします。ライブラリだけで良いので、struts-1.3.10-apps.zip をダウンロードして解凍します。

解凍して出来た struts-1.3.10/lib/ の中身を全部、ワークスペースのプロジェクト下の war/WEB-INF/lib/ にコピーします。

eclipseを起動して、war/WEB-INF/lib/ の下にコピーしたjarファイルを、[CTRLキー]を押しながらポチポチと選択していきます。それらを右クリックして、[ビルド・バス(B)] – [ビルド・パスに追加(A)]をクリックします。

念のため、プロジェクトの[参照ライブラリー]にそれらが追加されている事を確認します。

 


web.xml に追加

WEBアプリケーションの設定ファイル( web.xml )に、Strutsのマッピングとかを追加します。(プロジェクト下の war/WEB-INF/にあります)

ベタに書くならこんなかんじです。
※load-on-startup は一応書いてますが、GAE/Jでは無視されます

<servlet>
	<servlet-name>action</servlet-name>
	<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
	<init-param>
		<param-name>config</param-name>
		<param-value>/WEB-INF/classes/struts-config.xml</param-value>
	</init-param>
	<load-on-startup>0</load-on-startup>
</servlet>

<servlet-mapping>
	<servlet-name>action</servlet-name>
	<url-pattern>*.do</url-pattern>
</servlet-mapping>

 


log4j.properties に追加

ロギングはlog4jを使ってます。
Struts関係のデバッグログとかが多くて困るので、追加したライブラリ関係のロギングをWARNに変更する設定を追加しました。

log4j.logger.org.apache.struts=WARN,A1
log4j.logger.org.apache.commons=WARN,A1

勿論、アペンダー(A1)は環境にあわせて適宜変えて下さい。

 


struts-config.xml を作成

Strutsの設定ファイル (struts-config.xml)をプロジェクトの src/ に作ります(ビルドしたら、war/WEB-INF/classes/にコピーされます)。

フォーマットとかは割愛しますが、encoding に UTF-8 を明示的に指定して上げるのが、文字化け対策としての作法の様です。

こんな風に。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
        "http://struts.apache.org/dtds/struts-config_1_3.dtd">

<struts-config>
    <form-beans>
	.
	.
	.

 


appengine-web.xml に追加

Google App Engine設定ファイル(/war/WEB-INF/appengine-web.xml)に設定を追記し、セッションを有効にします。

    <sessions-enabled>true</sessions-enabled>

これをしないと、「Session support is not enabled in appengine-web.xml」とかがいっぱい出て動きません。

カテゴリー: Google App Engine タグ:

GAE/J (Google App Engine for java) で 拡張log4jを使う(日本時間)

2010 年 2 月 4 日 tdtsh コメントはありません

先日、GAE/J (Google App Engine for java) で log4jを使うの続きです。

こんな素敵なエントリーを発見!
GAE/Jでlog4jの日付を日本時間で出力する。- 今週のキャリッジさん

GAEの管理コンソールの[Logs]の表示を日本時間にする事は出来ないけど、ログ出力の中身を日本時間にする事は出来る模様。

logging.apache.orgから、apache-log4j-extras-1.0.tar.gz を取ってきて、解凍した apache-log4j-extras-1.0.jar を、war/WEB-INF/lib にコピーして、eclipseのビルドパスに追加しました。

それから、src/log4j.properties を修正します。

log4j.appender.A1.layout=org.apache.log4j.PatternLayout
↓
log4j.appender.A1.layout=org.apache.log4j.EnhancedPatternLayout

log4j.appender.A1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p [%F:%L] - %m%n
↓
log4j.appender.A1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss}{Asia/Tokyo} %-5p - %m%n

war/WEB-INF/appengine-web.xml 書いときます。

<system-properties>
	<property name="org.apache.commons.logging.Log" value="org.apache.commons.logging.impl.Log4JLogger"/ >
	<property name="java.util.logging.config.file" value="WEB-INF/classes/log4j.properties"/>
</system-properties>
カテゴリー: Google App Engine, java タグ:

ThinkPad X301レビュー SSDはやっぱ早いです

2010 年 2 月 2 日 tdtsh コメント 2 件

ThinkPadな理由

ThinkPadが好きです。もうかれこれ10年以上愛用しています。

理由は色々あります。

ずっとWebサービスの開発とか運用とかやっていたので、環境を持ち運べないと具合悪い事が多いです。そんな理由から、昔からデスクトップよりもノートPCが好きです。

慣れの問題もあるけど、英語キーボードじゃないとダメなんです。なのでEnglishモデルが選択出来るか、換装が容易で無くては困ります。
OSは今のところWindows XP (Vistaじゃダメ)が選択できないとダメです。
この時点で大抵のコンシューマ向けノートPCは選択肢から外れます。

ホームポジションから手を動かしたくないので、ポインティングデバイスは今の所トラックポイントでないと嫌なんです。

で、そこそこバッテリー駆動時間があり、常に持ち歩くので多少手荒に扱っても壊れない堅牢さであってほしい。

そうなると、もうThinkPadしか無いわけです。

ThinkPad X301を購入して、2ヶ月ほど経ちました。
3年程使用していたThinkPad X60sからの買い替えです。
個人的な使い勝手をレビューしようと思います。

 


大きさと重さ

私にとって最初のThinkPadは、中古の535とS30でした。
特にS30(+Windows 2000)が大好きで、職場でですが合計5台位を使い倒しました。

その後は、X21、X30、X31、T40、T41、T43、X60sと、XシリーズとTシリーズを公私共に使ってきましたが、Tシリーズはキーボードはイイんですがモバイルと呼ぶにはデカすぎます。重さ、大きさはXシリーズまでが限界だと思ってました。

今回、X301を購入する前は「ちょっとデカイかな?」と思っていましたけど、実際に手にとってみると、かなりイイです。

今までのXシリーズよりも遥かに薄い事と、デカイわりには軽い(6セルのバッテリー搭載で1.5kg)である事で、ハンドキャリーにも、カバンに入れるのにも、具合イイです。

同時にX201も手に取りましたが、こちらは良くも悪くもキープコンセプト、X60シリーズとほぼ同じ感じでした。

 


LCD

フォントがちいちゃくなって目に悪そうだし今まで頑なにXVGAに拘ってきたけど、とうとうLCDは13.3型ワイドになりました。(1440×900)
人間慣れるもんですね。今ではXVGAでは物足りなくなってしまいました。

あと、LCDはめちゃめちゃ明るいです。
LEDバックライトなるものを採用しているからだそうです。

 


筐体あれこれ

ホメられた事ではありませんが、長く使っていると、LCDを開いたままパームレストを持って移動する事もしばしば有ります。オプションの大きめのバッテリーを積んでそんな使い方をしているもんですから、今までのXシリーズでは、だいたい2年目位でパームレストにヒビが入ってしまいました。

※真似しないでください

X301では、X30シリーズ以降背中側にあったバッテリーが久々にパームレスト側に戻りました。
これは使い勝手、耐久性ともに効果が非常に大きいです。

X60シリーズの泣き所だったパームレストの熱もほぼありません。コレについては、夏になってみないと判りませんが、X60sは冬でも結構熱かったので、X301はたぶん大丈夫でしょう。

X20、X30シリーズの泣き所だったヒンジですが、X60sは3年酷使しても全く問題ありませんでした。同じような構造なので、おそらくX301も大丈夫でしょう。

あと、X20シリーズ以来のピーチスキンな筐体です。好きではあるんですが、耐久性まではまだ判りません。前のシリーズのプラスチッキーなんも、タフそうでキライじゃなかったです。

 


各種インターフェース

この軽さで、DVDマルチドライブを内蔵しています。
これで、外付けDVDドライブが不要になりましたし、KNOPPIXとかUSBに突っ込む必要がなくなりました。
光学ドライブ内蔵は、T40シリーズでも重くなるのでずっと我慢してましたけど、有るに越したことはありません。いざという時、有り難いですね。

地味だけど、ワイヤレスLANのOn/Offスイッチが、X60sはパームレスト側にだったのが、背面に移動していたのは嬉しいです。X60sは膝にのせて使うときに誤操作が多かった。

ただ、今回衝動買いに近かったので良く確認してなかったんですが、SDカードスロットはおろか、PCカードスロットがなくなっていました。かわりにUSBスロットが3つに増えてます。
E-Mobile等の通信デバイスをお使いの方は、注意が必要です。

※私も買い替える羽目になりました。

心なしか、指紋認証はX60sのそれよりも感度がいい感じになっている気がする。

 


キーボード

筐体の横幅が増えた事で、T40シリーズと同等のサイズになりました。

これにより、X20、X30、X40、X60シリーズ共通の悩みだった、B5サイズでのフルサイズの日本語キーボード実現の代償として、端っこのキー達(\とか、[とか]とか、~とか”など)がちいちゃい事が解消されました。
私は英語キーボード派なんで関係ないですけど、日本語キーボードのヒトにとってはこれは嬉しいんじゃないでしょうか。

会社では、メインのThinkPad以外に、2台のPCの計3台を使ってますけど、その2台はTravel Keyboard with UltraNaviを使っています。見た目もキーの配置も全く変わりません。

キータッチは、個人的にはメンブレン特有のポクポク感が好きで、過去のんではX30シリーズが最強ポクポク感でしたが、相対的にヘタリが早かった気がします。
X301はややTシリーズに近い感覚でパシャパシャとポクポクの間位です。なにより剛性感があるのでなかなか良いです。

あまり言及されませんが、ThinkPadシリーズ内でもトラックポイントの感度にはバラツキがあります。
調べた事ありませんが、過去のXシリーズでは同一機種でもキーボード供給元は最低2社ありましたから、供給元によっても違いがあるのかもしれません。

出来るだけ軽くてクイックなんが嬉しいです。

あくまで感覚と記憶を頼りに書くと、こんな感じです。(勿論設定は最速、最高に軽い

軽い <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 重い
X20シリーズ < X30シリーズ < X301 < T40シリーズ < X60シリーズ

X301はトラックポイントもなかなかのレスポンスです。

 


I/O性能(Crystaldiskmarkで新旧比較)

X301を選択した本当の理由は、SSD搭載によるI/O性能の向上に期待したからです。
迷わずSSD 128GBのモデルをチョイスしました。

ある程度の規模になると大概のWebサービスでは、扱うファイル数がすごーく増えて行きます。
関わるプロジェクトの数が増えてくると、SubversionとかCVSとかのバージョン管理システムからチェックアウトしたプロジェクトのアップデートをするだけで、すごく時間がかかります。

javaのバイトコードをコンパイルするときはCPUパワーも勿論必要ですが、私の使い方ではむしろI/O性能がボトルネックになり易いです。と言うか、ゲームとかする方以外は大概そうじゃないですかね。

X31からX60sに買い換えたとき、javaのコンパイル時間が半分以下になって感動しました。X60sからX301ではどうかというと、やはり半分位になりました。嬉しい。
前回は主にCPUマルチコア化の恩恵だったと思いますが、今回はCPUパワーは大体同じ位なので、明らかにSSDの効果でしょう。

X60sとX301のI/O性能を、Crystaldiskmarkで比較してみました。

※数値はあくまで私の環境での値です

  ThinkPad X301 ThinkPad X60s
Sequential Read 207.058 MB/s 27.239 MB/s
Sequential Write 110.659 MB/s 21.741 MB/s
Random Read 512KB 187.027 MB/s 15.581 MB/s
Random Write 512KB 127.322 MB/s 17.318 MB/s
Random Read 4KB 14.416 MB/s 0.278 MB/s
Random Write 4KB 18.504 MB/s 0.670 MB/s

やっぱSSDスゲー!

 


まとめ

ぱっと見は同じでも、X301は今までのXシリーズとは一味違います。
質実剛健さを堅持しつつも、薄くて軽く、しかも2スピンドルです。SSDだから2スピンドルとは言えないか。

個人的なベスト・オブ・ThinkPadは、S30 から X301 に変わりました。
長い付きあいになりそうです。

カテゴリー: ThinkPad タグ: