« ブランディング=愛!? | トップページ | C# プログラミング »

2005年1月26日 (水)

カッチョイイ名前にビビルナ!

久々にJAVAった。

ここんところ、プライベートな時間の7割ぐらいを”ゲーム作り”に充てているが、
その中で”それっぽい地名”を考えるのがめんどくさくなって、
それっぽい地名生成機”なるアホプログラムをつくってみた。

リロードすると、次々とそれっぽい名前がつくられてゆく。

5年ぐらい前、アメリカのサイトで、グランジっぽい歌詞を自動生成するサイトっていう
アフォなものがあったが、それがヒントだ。

今のところ入っているデータは、
「世界遺産の登録申請して承認されなかった場所リスト」(WEBで発見した)
っていうものがベースになっているが、そのうち、もうちょっとデータを増やしてみようと思う。

さて、ここまで動くようになると、作っているうちに欲は出るもので、


・ もっと、ソレっぽいフォントで、素材集からソレっぽい写真もつけて、表示したいなぁ
・ フォントは普通にはいってるようなのじゃなくて、もっとこう、ファンタジーなフォントじゃなきゃなぁ。。
・ そうすると、サーバサイドで画像を合成して出すようなシカケだわなぁ、

みたいなことになる訳で、、


と、ふとそこで思い出したのが、akio.shimono.net のTOPページを飾る写真!

まいホームページは、以前とったすげーどうでもいい写真をアテで出してる状態が
ずーっと続いていたわけだけど、このままじゃ恥ずかしいべさ!

ということで、今度は先ほどのファンタジー地名合成機グレードアップはちょっと置いといて、
「マイホームページのTOPの写真を動的に変えるシカケ」をつくってみただよ。

まあ、これは思いつきというよりは、思いつきなんだけど、
いや、これは、実は非常に合理的な展開なわけです。なぜなら、
この写真ペラペラ君を技術的に見てみると、まさに、
ファンタジー地名製造機グレードアップのサブセット!
目的達成のための技術的中間地点!

はい、そういうわけで、自分的には非常にナイスアイディアなわけです。

さて、つくるっぺかっということで。。。

おもむろに、そのへんにあったJSPをコピッてファイル名を
変えてそれっぽいところにおきましょう。

はい、ここまでがプログラミングのなかで一番大事なとこだと思ってます。
なぜなら、この作業をやる気になるためには、以下条件が満たされていなくてはならないからです。

 ・実装のイメージができてる(何をベースにつくったらよいかイメージできてる)
 ・プログラムの名称が決まってる(ファイル名)
 ・置く場所が決まってる

うーん。素晴らしい。われながら良いこと言うもんだ。

WEBサイト作るにも、最初にディレクトリ切る作業をすると、もう、仕事3割終わった気が
しちゃうよね。。。 あ、しないか^^

まあ、でも、やっぱ最初の一歩は大事な一歩なわけさ。


さて、私の選んだ最初の一歩。 JSPのコピー。。

やっぱり、いつものように、JSPですね。
私の得意技は、「なんでもかんでもJSP」
私の別名は、「サーブレットを書か(け)ない男」
座右の銘は「MVCのCはサーブレットだなんて、ウソだ、CもJSPで書いちゃえ」

。。いや、サーブレットかいたことありますよ。。 
・・それに、さすがにMをJSPで書いたりしませんよ。(って、、当たり前だが。。)

でもさ、なんで、だれも、サーブレットめんどい、なるべくJSPで書いちゃおうよ!って
いわないのか、私は常日ごろ疑問に思ってます。

doGet(HttpServletRequest request, HttpServletResponse response)
とかタイプするのがめんどくさいし、コンパイルするために、コマンドプロンプトあけるのも面倒だし、
ECLIPSEのプロジェクト起こすのなんて、スーパーめんどくさいし、、
ナニヨ、 パッケージ名とか決めなきゃいけない? ぐぁー 何にするさ、むりむりむりー
めんどくちゃーい

って、なんでみんな思わないのかなぁ。。 テキストとかにさ、
Cはサーブレットでつくるのが普通です とか書いてあるけど、なんで
だれもソレを疑わないんだー!

世の中には、いろいろ、誰も疑わないけど、変なことってあると思ってて、

 「車内での携帯電話は他の方にご迷惑」っての、
 自分あんまし、理解してません。 アメリカじゃ、だれも遠慮してないぞ。。

 ペースメーカー云々はあるけど、
 ペースメーカって使ってる人ってどのくらいいるのさ、
 おれ、使ってる人しらないぞ! 本当に影響あるのか? 
 ペースメーカメーカは、ペースメーカの改良してんのか?

とかいう話やら、。。んー。。これはあんましいい例じゃないね。

んじゃ、第二次世界大戦前のドイツ第3帝国に対してのイギリスの
宥和外交とか。。 10年前ぐらいまでのニッポンの謝罪外交とか、
非武装中立とかいってた社会党のひとがそこそこの議席を確保していたこととか。。

なんだか、アタリマエとされてることが、じつは変なことで、
時が経つと、くつがえされることってたくさんあるわけで、
なんでもかんでもサーブレットをしこしこ書くという作業は、
その一つだと私は確信しています。

はい。 いいわけは、死ぬほどかけます。
でもね。。いいわけじゃないのよ。。

サーブレットでできることは、100%JSPでかけるわけで、
ほいって書いて、置いて、動かす ということができることは、死ぬほど大事なのですよ。

そう、僕は、サーブレットが嫌いなのじゃなくて、JSPがすきなのです。

いやー、 自分の嗜好がA>Bなとき、 「Bが嫌い」といわずに、「Aが好き」だという。
まさにポジティブ思考、ストレス社会を生き抜くサバイバル術!

そう、
PC8801MRでベーシック&Z80アセンブリ(ていうか、アセンブルせずに16進打ち)
からプログラミングに入った私は、&JAVAやる前はPERLでCGI書いて
WEBプログラミングに親しんだ私は、やっぱ、インタプリタが好きな人間なわけで、
サーブレットなんていう、うざったいやぼったいものは、正直、嫌いなわけです。
いや、そうじゃなくて、JSPが好きなのです。。。はい、常に表現はポジティブ~

よし、JSP万歳ゝ(^O^)丿
ターンアラウンドタイム命、('◇')ゞ
100回エラー出してなんぼ、!(;°д°)


んで、話はずれましたが、その、TOPページ写真表示JSP,書き出して、
100回ぐらいエラーだしまくって、やっと動いたわけですよ。。

うれしいなぁ^^

以下、そのことについて書きます。

写真ローテーション表示外部仕様:
 ・ある特定の写真フォルダに、表示したい写真を放りこむ
 →するとその写真がそこそこの確率でトップページに表示される

外部仕様はこんくらい簡単じゃないとだめ!

本システムのお客様は私です。いわば「俺様」です。俺様は私に対して
遠慮なんてありません。
「俺様」はプログラマなわけで、プログラマの3大美徳のひとつ
「何事もめんどくさがる」を自然に実践していらっしゃいます。
したがって、これ以上ちょっとでも複雑な仕様は許されないのです。


あ、ついでに、地名自動生成機ヴァージョンアップを視野に入れると、
以下も外部仕様ですな。

 →なんか、文字とか図形とかを自動合成するような拡張性を持っておくこと


ほい、そんじゃ、次いってみましょう。次は内部仕様です。

私は内部仕様は以下のようになるかなぁと思ったわけです。

内部仕様:
 1.フォルダの中の写真をランダムで一つ選ぶ
 2.リサイズする
 3.文字を合成する
 4.表示する

1&4だけならば、簡単なわけです。。
4はContent-Type を image/jpeg にすることと、変な改行や空白をJSPに入れないこと
だけ気をつければいいわけです。

3も、アップレット関連の資料をあさればなんとかなるわけです。
( drawImage メソッドに渡す ImageObserver相当のものが存在
 しないのが少々ひっかかるが)
 javax.imageio.ImageIO だとかなんだかを使えばなんとかなったわけです。

まあ、ここらへんまでは、2年ぐらい前にやったことあることなので、
自信あったわけですし、実際楽勝で動きました。。


問題は2! 写真のリサイズ!

はーい、これ。。
2年前、やろうと思って挫折したことあります。。

しかし、まあ、自分の腕も2年で上がっただろうと思って、トライしてみました。
するとなんと、オミゴト、
「2年前もここでひっかかったなぁ」っていうところに見事にひっかかりまくります。


アフィン変換(AffineTransformOp)だの、フィルタだの。。
難しそう。。サッパわかんねぇ。。

まあ、しかし挑戦者はあきらめというコトバを知らないわけで、APIドキュメントやら
グーグル先生経由WEB上の各種チュートリアルサイト様をたずねながら試行錯誤を
つづけます。

具体的には3つの方向性から攻めてみました。
 1.アフィン変換
 2.フィルタ
 3.ImageクラスのgetScaledInstance?みたいな名前のメソッド

どれも、動きません。

ネックは、各種チュートリアルサイト様で紹介してるサンプルが
大抵アップレットを前提としたものだったりして、
イメージオブザーバってやつがイマイチよくわかってない自分としては、
どこをどう省略してよいものだか分かりません。。

さらに、エラーログ(EXCEPTION TRACE)をみても、
どれもイマイチ抽象的な表現しか書いてなくて、
なにが悪いのかわかりません。。

しかーし、100回ほど試行錯誤してるうちに解は見つかりました。

アフィン変換関連のオブジェクトをつかった方法で
ついに画像リサイズに成功!

エラーの原因は、アフィン変換前後のImageBufferのカラーモデルの不一致でした。

いろいろ調べてるうちに以下が分かりました。

 1.AffineTransformOpとかのオブジェクト使う方法は、 
  BufferedImage=>BufferedImageでアフィン変換する

 2.BufferedImageは、カラーモデル
  (なんていう数字がどの色に対応するかという設定)と 
  Raster(数字のあつまり)でできているらしい。

 3.変換元と変換先のカラーモデルが違うと例外になるっぽい


んで、カラーモデルなんていう概念はよく知らなかった自分は、
変換先ImageBufferのカラーモデルを、テキトーにせっていしていて、
変換元のカラーモデルが何であるかわからない。。


。。 んー。 そんじゃ、変換先カラーモデルは変換元のやつを
引っ張ってきてそいつを設定すりゃいいかなぁ。。

よいしょっと、、

おおーー的中!!! うごきましたー!


アフィン変換解説ページのソースを適当に引っ張ってきて、そこにかいてある
カラーモデル設定をそのままつかってたわけですね。

解説ページでは2:TYPE_INT_ARGBになってて、

まあ、そこがおかしいかもなぁと疑ってはいたので、
1:TYPE_INT_RGBに変えたりしてたんですが、

変換元(自分のデジカメ写真をもとにImageIOでBufferedImageにしたもの)は
カラーモデル5番(なんだっけか?TYPE_3BYTE_BGRとかなんとかいうやつ。。)でした。

3、4飛ばして5だったのねぇー;;

いやー、こうやって書くと簡単じゃねぇか。。 


まあしかしプログラムなんてそんなもの。
結果論としてかいちゃうと、ほんと下らないとこで引っかかってるんだよね。


ま、しかし、今回のPGは収穫大きかったっす

なんか、2年前はアフィン変換っていうコトバにビビってた部分あった。。

今回は、デバッグついでにアフィン変換も勉強してしまえたのがちょっとウレシイ。

アフィン変換てのは、
 ・拡大・回転・縮小 というスーパーファミコンで僕らが驚いたアレであるということ
 ・数学的には、回転&拡大縮小の行列かけるのと、ベクトル足し算

ちゅうことで、中身がわかってカッチョイイ名前にびびらず
強気に追求できたのがある意味、勝因だったかな。。

かっちょいい名前ってのは、まあ、前述の「ソレっぽい名前生成機」みたいので
作ることもできるような物なので、まあ、今後は、

「カッチョイイ名前にびびらずに生きる」

ということが学べてよかったですね。


慣れない画像処理関連JAVAプログラミングおつかれさまー
ってことで。。満足感と教訓が得られたステキなPGでしたとさ

« ブランディング=愛!? | トップページ | C# プログラミング »

パソコン・インターネット」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/34023/2701420

この記事へのトラックバック一覧です: カッチョイイ名前にビビルナ!:

« ブランディング=愛!? | トップページ | C# プログラミング »

Haruya's Violin

2017年10月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        

最近のトラックバック

無料ブログはココログ