プログラミング

jsp:useBeanでジェネリックスを使う場合、classとtypeを両方指定する

Published by:

タイトルで言い切ってしまいましたが。

次のように書いたJSPコードをTomcat5.5で動かすと、「useBeanのクラス属性 java.util.ArrayList<ProductBean> の値が無効です」というエラーが出ました。

元コード
<jsp:useBean id="productList" class="java.util.ArrayList<ProductBean>" scope="request" />

ジェネリックスの型指定が気に入らないそうですが、そんな事言われてもあんたJava5でしょ?と言いたくなります。

ちなみにProductBeanクラスには引数なしのデフォルトコンストラクタが存在しますので、インスタンス化の失敗というわけではありません(引数なしのデフォルトコンストラクタのないクラスをclass属性でjsp:useBeanすると、同じようなエラーが出ます)。

そもそもインスタンスを作っているのはArrayListですので、 ProductBeanクラスに非はありません。
試しに「java.util.ArrayList<java.lang.String>」としても同じエラーが出ました。

対応策として、class属性の代わりにtype属性を指定するというものがあります。

対応策1
<jsp:useBean id="productList" type="java.util.ArrayList<ProductBean>" scope="request" />

これで上のエラーは出なくなりますが、これだとリクエストスコープに指定されたアトリビュートがセットされていない場合、「java.lang.InstantiationException: bean productList not found within scope」という別の例外になります。

必ず値がセットされているということであれば対応策1で良いのですが、そうではない場合対応策2になります。

対応策2
<jsp:useBean id="productList" class="java.util.ArrayList" type="java.util.ArrayList<ProductBean>" scope="request" />

「まさかなあ」という気持ちでこうしてみたら、これは動く。

JSPのバージョンのせいなのか、Tomcat5.5のバグなのか、はたまたこういう仕様なのか。
Tomcat6では未確認ですが、何ともおかしな振る舞いです。

デザイン

Illustratorの「落書き」効果がマイブーム中

Published by:

rakugaki_ship

Illustratorでデザインをすることが多いのですが、基本は線だけで描いていくので、どうしても味気ないイラストになってしまうことがあります。
そのため、塗りの部分をグラデーションにしたり、形状にぼかしをかけたりして「イラストっぽさ」を出すわけですが、最近気に入っているのが落書き効果。

rakugaki1
最初に適当に線を書いて(両側の黒い線は雲だけど、わかりやすく黒色にしています)、



rakugaki2
線を太くして、



rakugaki3
「効果>スタイライズ>落書き」で線の太さやランダムさの度合いなんかを設定します。
ここのパラメータを色々変えると、手書きでは絶対に作れないような面白い感じの表現にもなったりします。



rakugaki4
で出来上がりがこんな感じ。
まあ、あんまり素敵な例とはいえませんが・・・



今回は船が出港するイメージのイラストをがんばって描いて、最後に空も描こうとしたのですが力尽きていて、こんなときにふっと使うと以外にいい感じにはまったりします。

img_shippment
船の下に、出来上がった空と雲を配置すると、あらびっくり。
大海原を行く船に見えませんか?

あくまで補助的にしか使わない落書き効果ですが、サイトによってはもっとデザインの肝として使っても面白いかもしれませんね。

発表、ニュース

嗚呼ついに!Eee Topが3月下旬に発売決定

Published by:

Engadget Japan
タッチスクリーン オールインワンEee Top 国内発表、6万4800円

Asusの「Eee Top」が国内向けに正式発表となりました。Eee Top 1602は15.6型1366 x 768 (16:9)タッチスクリーンを備え、タッチ操作で使えるアプリケーションが標準搭載されたオールインワンPC。内部的には一般的なネットブックに近く、Atom N270プロセッサ + 945GSE Expressチップセット、1GB RAM (SO-DIMMスロット x2、空き1、でも「増設・交換は行えません」)、160GB HDDなどを搭載します。

Eee Top専用サイトまで立ち上げていたのですが、ようやく日の目を見ることが出来ました。よかったよかった。

値段も6万4800円と予想通りの低価格ですね。
先行して発売されていたほかの国とそれほど違いないようです。

はやくゲットしたい~
とにかく今は3月下旬が待ち遠しいです。

ASUS EeeTop ETP1602 White ETP1602-WT-X0140 ASUS EeeTop ETP1602 White ETP1602-WT-X0140 

ASUSTek 2009-04-04
売り上げランキング : 9517

Amazonで詳しく見る by G-Tools

発表、ニュース

ネタフルさんにA8minを紹介してもらいました!

Published by:

netafull_logo
A8.netのバナーを効率的に管理するツール「A8min」

わーーー!
どうもありがとうございます!

突然ダウンロードが増えたので、何だろう?と思っていたのですが。
春先にサンタさんが突然来てくれたみたいにうれしいです。

早く次のver1.4がリリースできるよう、がんばろーっと。

発表、ニュース

A8min ver1.3リリース

Published by:

A8min
a8min_logo

本当はver1.2だったのが、何故かうっかりバージョン番号を飛ばしてしまいました。

ロゴも作って、インターフェースも一新しました!

a8min_browser

広告リンクブラウザを使って、広告主や広告プログラム、バナーサイズや形状で検索するのも簡単に行えます。

WordPressプラグインとしても、単体のプログラムとしても使えるので、A8.netでアフィリエイトをしている方にはおすすめです。

コンピュータ

Gmailがオフラインでも見られるようになった!

Published by:

ネットがなくてもメールの読み書き可能に ~Gmail、オフライン機能提供へ[2009/01/28]

 グーグルは1月27日、WebメールのGmailをオフラインで利用する実験的機能の提供を開始した。新機能は米国、英国のGmailサービス利用者のみを対象に、2、3日中に利用可能になるという。

 Gmail Labsでこの機能をオンにすると、インターネット接続のない環境でも、ローカルのハードディスクにキャッシュされたメールボックスで、メールを読んだり、ラベルを付けたりできる。この機能の提供には、Webアプリケーションをオフラインで利用可能にするブラウザプラグイン、Gearsが使われている。

いまかいまかと待っていたのですが、やっと私のPCでもオフライン機能が使えるようになりました。

gmail01

まだ英語版のGmail(設定で言語を変えると見られる)しか使えないかもしれませんが、「Setting>Labs」の中に上のOffline機能が追加されていれば、「Enable」にすると使えるようになります。

gmail02

すると、画面上に上の画像のようなOfflineリンクが追加されます。
これをクリックすると↓こんな画面が。

gmail03

 その後、Gearsの設定画面が続きます。
全部終わったら、シンクロ開始!

 gmail07

メールの容量にもよるのでしょうが、私の場合1.6GBあっても1~2時間位で終わったように思います。
この後は、 差分のみが追加されるだけなので、気にせず使えそうです。

ノートPCの場合、朝つなげておいてシンクロし、ネットが使えない出先でチェックするなんてことも出来そうですね。
新規メールも書けるので(次につながったときに送信される)、人によってはものすごい便利な機能です。

ただ、まだ挙動不審な点もあるようで、私の場合Spam(迷惑メール)がxx通あるという表示が出ているにもかかわらず、スパムフォルダを開くと何もない、ということがありました。
まあ、気になるほどではないですが、FATALなトラブルがあったら機能をオフにするかも・・・ 

自分でもGearsを使って何か作ってみたくなりますね~。これは。

発表、ニュース

A8minをスタンドアロンでも実行できるようにしました

Published by:

先日公開しましたA8minですが、今のところどれくらいの需要があるのか分かりませんが、A8minをスタンドアロンで実行できるように修正しました。

ダウンロードはこちらからどうぞ。
http://hello.lumiere-couleur.com/2009/01/25/a8min_php/

WordPressなしでも実行できるようになりましたで、これまで作った単体のツールなんかにもペタペタとバナーを貼り続けています。

別機能として、同一サーバー上にある別のA8minで設定したコードデータ(バナーのHTMLデータ)を共有できるようにしました。
これもまた、私が欲しいだけの機能かもしれませんが・・・

CMS プログラミング

WordPress2.7で長すぎる投稿が表示されない不具合の原因と対策

Published by:

shortcodes
このドイツ語のブログでやっと原因と修正方法が分かりました。
几帳面にも、問題の正規表現の図解で解説までつけてくれたドイツ人に感謝。
それにつけても、やっぱりドイツ人てすげぇ・・・

 現象

そもそもの問題の現象ですが、WordPress2.7で長めの投稿をすると、何も表示されなくなるということが起こりました。
最初はプラグインを疑って利用停止したりしたのですが、それでも改善しません。

WordPressにはデフォルトでいくつかのフィルター(記事の内容に対して行われるコンテンツの更新機能)がありますが、途中のフィルターまではちゃんと動作している。
一つずつ確認していったところ、wpautopフィルターでコンテンツが削除されていることが分かりました。

wpautopフィルターの問題箇所を探していくと、下記の最終行で削除されています。

wpautop関数:
$pee = preg_replace('/<p>s*?(' . get_shortcode_regex() . ')s*</p>/s', '$1', $pee); // don't auto-p wrap shortcodes that stand alone

ここまできてGoogleで検索して確認しましたが、WordPress2.5.1のときからこの行に関しては問題を起こしていたようで、対応としてはコメントアウトする(臭いものにふたをする)というものばかり。

・・・で、件のブログを見つけました。

原因

ドイツ語ブログで書かれているとおり、本当の問題はショートコード(画像のキャプションなどを[caption] ~[/caption]のように記述する記法)用の正規表現を定義したget_shortcode_regex関数(wp-includes/shortcodes.php)にありました。

get_shortcode_regex関数(修正前):
return '[('.$tagregexp.')b(.*?)(?:(/)?](?:(.+?)[/1])?';

wpautop関数もそうですが、get_shortcode_regex関数もほとんどプログラム効率無視なコードになっていて、貪欲な正規表現によってpreg_replace関数が悲鳴を上げたのが原因のようでした。

対策

対策は、問題のget_shortcode_regex関数内のコードを修正すること。

get_shortcode_regex関数(修正後):
return '[('.$tagregexp.')b([^]]*?)(/)?](?:(.+?)[/1])?';

おおおっ!動いた~(T  T
プログラミングに国境なし、を改めて感じました。

#追記
次のバージョンで修正が消されるといやなので、WordPressサイトにバグ報告しました。
#再追記
と思ったら、http://trac.wordpress.org/ticket/8553とduplicateでしたorz
#2009/2/14 追記
WordPress2.7.1で直ってなかったので、自動アップグレードで元に戻ってしまった。
ぐはあ。

発表、ニュース

A8minでA8.net+WordPressの簡単連携

Published by:

最近いくつかのサイトを公開したので、一つアフィリエイトのバナーでも付けようと思い、アフィリエイトサービスのA8.netへ登録してみました。

、が、面倒くさい!!
1つずつ広告プログラムを検索したり登録するのは仕方ないですが、それをWordPressに反映しようとすると、1つずつバナーを選んでコピーしてペーストして・・・というのを際限なく行わなければいけません。

何かいいツールをが無いかと探してみましたが、まるでありません。
ということで作りました!
自分で言うのもなんですが、かなりの力作です! 

A8min -WordPressプラグイン

くわしくはリンク先のページを見てみてください。

発表、ニュース

(3) PC3.0を予想してみた:データにはアクション(操作)がもれなく付いてくる

Published by:

はがき

すべてのデータにインターフェース・アクション(iAction)を

インターフェース・アクション(iAction)とは今作った造語ですが、あらゆるファイルやデータを汎用的に操作するための仕様のようなもの・・・と考えてください。

ここにOfficeの文書データが10,000ファイルと、メールが10,000通 あるとします。
これらデータ全てから、特定の情報(個人情報など)を削除しなくてはいけないとします。
一つ一つのファイルを開いて、検索して、削除してという方法では大変な時間と手間がかかります。
もしこの文書データとメールデータに、「検索」というiActionと「削除」というiActionがあれば、全体を選択→検索→削除が行えるわけです。

「オンラインでの買い物について、勝手に家計簿をつけてくれる」とか、「去年知り合った人用に年賀状を印刷する」とか、「やった仕事の内容を請求書に書き忘れない」(?)とか、とにかく便利に動いて欲しいものです。

もちろん、多少手が器用な方であれば、何らかの方法で手早く同じ作業を行うことが出来るかもしれませんが、一家に一人、一部署に一人、そういう人がいるとは限りません。
アルゴリズムが出来ることは、コンピュータに任せたほうが良いのです。 

インターネット上のデータはどうすればよいのでしょう?
これも、1データとしてカウントできる単位に対して、iActionを定義できるとさらに便利ですね。
Gmailのメールデータや、ブログのコンテンツなども、同じようにまとめ処理が出来てしまいます。
技術的にどうするんだろ・・・
たとえば、POST/GETのような「IACT」みたいなメソッドを作るとか(ここまでくるとやりたい放題ですが) 。

指話+AI秘書ツール+iAction=PC3.0?

タッチパネルを使った指話、AIによる秘書ツール、データ単位で任意の処理を行うiActionを組み合わせることでPC3.0時代がやってくるのでしょうか。

ユニバーサルデザインの観点から見ると指話の部分に課題が残りそうですが、それを抜きにすればちょっと近未来的なコンピュータ操作が実現できそうな気がします。

最後の問題は、これを誰が作るのか?というところでしょうか。
すぐに思いつくのは、Google、Microsoft、Appleの3つ。
どこかのベンチャーが作って公開して、うまいこと人気が出たらGoogleが買収してグローバル化して、MicrosoftがWindowsに取り入れて、Appleが次世代インタフェースをもう一つ作る・・・
もしくは、Mozillaがオープンソース・ソフトウェアとして作って、運営も有志の人々によってまかなわれたり・・・

とまあ、妄想はこのあたりまでにしておきます。
3年後5年後といわず、今年2009年の変化を楽しみにしつつ、 自分の仕事に戻りたいと思います。

まとめ

2008年末ごろから経済面での不況のニュースが相次いだためか、技術関連のニュースまで新しいものが目立たなくなったように感じたので、自分を励ます意味でもこのエントリーを書いてみました。

自分でもどこまで本気で書いたのか分からなくなってしまいましたが、昨年からなんとなく考えていた「未来のコンピュータ」をとりあえず忘れないように書いておこうということでもありました。

この文章が陳腐な予想になるような、すばらしいコンピュータ技術が近い将来に到来することを心から信じています。

« 前へ