2018年5月27日日曜日

仙台農業園芸センターのバラ祭り行って来ました

仙台農業園芸センターのバラ祭りに行って来ました。

PowerShot G5Xで撮影してみましたが、ピントの深さと画質の良さが共存しているこのカメラはまさにバラの撮影にはうってつけでした。


バラの写真撮っていて思ったのですが、とにかく香りもいい!!

VivoBook E203NA-464Gで、eclipse+tomcat+JSF開発環境を動かしてみた!!

手持ちのモバイルノート「VivoBook E203NA-464G」をさらに活用したくて、Java EEの開発環境をインストールして動かしてみることにしました。

今回の記事では、開発環境をインストールして、ブラウザに「morimori」の文字が表示されたらいいや、という所までやってみました。

とは言うもののこれ、マイクロソフトのVisual Studio Communityと比べてしまうと中々敷居が高かったです。


■開発環境は「Pleiades All in One Eclipse」

まず開発環境ですが、「これだけで日本語の環境でもってJava EE開発が出来る」という、「Pleiades All in One Eclipse」を選んでみました。

その中でも、Windows 64bit > Java > Full Editionをダウンロードしてみました。


.zipファイルをダウンロードした後は解凍するわけですが、15460個ものファイルを解凍しないとならないため、VivoBook E203NA-464Gの処理能力では相当な時間がかかりました。

どのくらいの時間か・・・というか、早朝に外出前に解凍を開始して放置し、午後帰宅したら完了してた・・・くらいの時間感覚ですね。


ちなみに、少しでも解凍のパスが長いと途中でエラーになってしまうというトラップがあります。

結局、メモリカードのDドライブの直下に持って行って解凍しました。

eMMC(Cドライブ)は容量が心配なので、遥かにアクセス速度の遅いメモリカード(Dドライブ)で1万5000個も解凍してるわけで、これも時間がかかった原因ですね。


ちなみに、逆にVisual Studio Communityよりも遥かに敷居が低いのは、開発を好きなドライブで簡単に出来る点です。

解凍されたフォルダ「pleiades」を、単純にDドライブの直下とかに持っていくだけ。

その中のeclipse > eclipse.exeを実行するだけで、すっかり日本語化されたIDEのeclipseが起動してくれるので「おお!」ってなりますね。


■Mavenプロジェクトで開発開始

いよいよ開発開始なのですが、開発用のWebサーバーには「tomcat9」を、Java EEのフレームワークにはJava EEに標準で含まれる「JSF」でやりたいわけです。

プロジェクトは「Maven(メイヴェン=読み方は他にもメイヴンとか色々あるみたい)」を選択します。

MavenはJava用のプロジェクト管理ツールなんですが、マイクロソフト系で言うところの「新規プロジェクト」という理解でも良いはず。


「シンプルなプロジェクトの作成」を選んで進み、必要なグループIDやアーティファクトID(いわゆるプロジェクト名=今回はmoriJava001)を決めて先に進んでいくと、Mavenプロジェクトのルールに従って必要なフォルダ構造が作られていきます。

Mavenでも分かる通り、Java開発は、数多くのプラグインやツールの巨大な集合体になるので、マイクロソフト系技術から見ると、こまめに名前が付いて来るのも面白い所かも知れないですね。


ビルド・パスの設定をするのですが、初期状態だと、Javaの実行環境であるJREのシステムライブラリーのバージョンが1.5になってるんですね。

ここはJava 8か9にしようかな・・・と思ったら、今はもうJava 10が出ているのでそれに変更しました。


最初の大きなポイントが「プロジェクト・ファセット」の設定ですね。

ここで、動的Webモジュール、ランタイムtomcat9(Java10)、JSF 2.2などを設定しないと話が進まなくなります。

ただ設定するだけでなく、バージョンも最大のものにしてあげる必要があります。


■手動でファイルの追加と書き換え!!

マイクロソフト系技術と様相が違って来るのがこのあたりから。

自分のプロジェクトに手動でファイルを作成して追加してあげないといけないです。

まずは、/WebContent/WEB-INFの下に、beans.xmlというファイルを追加して中身を上記のようにしないといけないです。


元々ある/WebContent/WEB-INF/web.xmlを上記のように編集しました。

url-patternや名前は自分の環境に合わせて読み替えが必要です。


さらに、tomcat9(Java10)サーバーを使えるようにすると、プロジェクト・エクスプローラで見ると「Servers」というフォルダが作られます。

この中のcontext.xmlにResourceタグを追加しなければならないという・・・。


ネットで調べながらここまで来たけど、さらに、pom.xmlを上記のように修正しなければならないのです。

pom.xmlは、最初は「なんやねんそれは」ってなると思うのですが、これこそがMavenプロジェクトの威力と呼べる仕組みで、プロジェクトをビルドした時などに、ここに書かれたライブラリを、自動で(!!)「Mavenセントラルリポジトリ」というサイトに接続してダウンロード・設定してくれる優れものです。

dependenciesタグの中に、dependencyタグが沢山並んでいるのですが、この一つ一つが、「もしも、ここに書かれたライブラリが不足しているのならば、Mavenセントラルリポジトリに接続して、ダウンロードして、自分のプロジェクトに組み込んでおくれ」という内容になっています。


■さらにライブラリを手動で追加!!

実はまだ終わりではなく、pom.xmlで足りないライブラリを自動ダウンロード&設定してくれる!!と言った舌の根も乾かないうちから何なんですが、自動じゃ入らなくて、手動でダウンロードして来て、手動で/WebContent/WEB-INF/libに追加しないといけないライブラリがあるのです。

むひゃー。


jsf-impl (jsf-impl-2.2.9.jar)

http://central.maven.org/maven2/com/sun/faces/jsf-impl/2.2.9/

というライブラリと





jsf-api(jsf-api-2.2.9.jar)

http://central.maven.org/maven2/com/sun/faces/jsf-api/2.2.9/

というライブラリです。

これを入れていないと、JSFの画面(xxxx.xhtml)が、JSFのエンジンに無視されてしまい、404(file not found)エラーから脱出できずにハマってしまう事になります。

むひゃー(2回目)・・・。


■ようやく、morimori表示!!

JSFって、/WebContent/の下がWebコンテンツを置く場所になっているので、とりあえずこの直下に、ただ単に「morimori」とだけ文字を表示するだけの画面(form001.xhtml)を設置します。

これで実行!!

ここまでやって、ようやく、「morimori」という文字がブラウザに表示されました。

ASPとかASP.NETと比較すると、素直に「かなり敷居が高いよなぁ」と思えてしまいますが、逆にマイクロソフトが凄すぎるだけとも言えるかも。

それはともかく、低価格モバイルノートパソコンのVivoBook E203NA-464Gでも、こうやって、ASP.NET MVCの開発、JSFの開発、どっちも出来るようになったので嬉しさ大爆発です!!

2018年5月26日土曜日

Javaでバイト数カウントする時に、Shift_JISに変換するやつを単純に使ってはいけない!!

いやーちょっとJavaでハマりました。

文字列のバイト数をカウントしたい時どうやるの?という話なんです。

つまり、全角文字は2バイト、半角文字を1バイトとしてカウントしたい時ですね。

具体的には("文字列".getBytes("Shift_JIS")).lengthとやればいいのだ!!と思ったら、結論から言うとこれはダメだった!!

「いったん、文字コードをShift_JISに変換してから、そのバイト数をカウントする」という手法ですね。

少なくともWindows OS上で実行すると、「~」、「㈱」や「-(全角ハイフン)」は、2バイトではなくて1バイトで結果が返ってきます(涙)

C#言語では大丈夫だったので、油断してしまいました。

これはどういう事かというと、Javaは、Unicodeにあって、Shift_JISに無い文字は、1バイト文字の「?」に強制的に変換してしまい、それを1バイトとしてカウントしてるみたいなんです。

結局、文字列を一文字づつ見て行って、UTF-8でバイト数をカウント。

1バイト文字は1バイトとしてカウントし、1バイトを超えたら強制的に2バイトとしてカウントする・・・というコードでやってみました。

これもどうなんだと思うんですが、今のところ思った通りの制御が出来ています。

Java EEもC#もどっちも楽しい!!

このところ、Java EE + JSF中心でプログラム開発を続けています。

最初は、四苦八苦していましたが、いつの間にか、ちょぼちょぼ慣れて来て楽くなって来ました。

Javaもどんどんバージョンアップしていて、特に、Java8から実装されているラムダ式とかいいねぇ。

やってくうちに、Javaの良い面が沢山見えて来ています。

ただ、開発はJavaだけで全部やる!!とガチガチに決めてしまうと、意外と融通が利かなくなってしまう気がします。

たとえば、Windows OSのデスクトップアプリを作らないといけない(機器の制御など)、となると?

やはりWindows OSと親和性の高いC# + .NET Frameworkが水を得た魚のように素晴らしい。

Javaもやり、C#もやる。

実際、JavaとC#を混ぜてシステム開発してみましたが、お互いの弱い部分を補完しあうため、かなり無茶な要件も解決しやすく、驚くほどに強力です。

これからもJavaとC#両方を楽しくやっていけたらいいなぁ。

2018年5月21日月曜日

PowerShot G5Xで、快晴のセルコホームズーパラダイスを撮ってみました

今回の記事では、快晴のセルコホームズーパラダイスをPowerShot G5Xで撮影してみましたので、その写真を掲載させて頂きたいと思います。

ズーパラダイスは今年初めてとなるのですが、いつも重く大きな一眼レフをメインにするところを、軽量小型のPowerShot G5Xだけではどうか?と思い小さなG5Xのみで撮ってみました。


通路をのしのしと移動して行くサイ!!

いきなり動体撮影でしたが、G5Xは、画質面ではもう一眼レフに匹敵する良さなのでばっちり。

ただ、単純なコントラスト方式AFなので、コントラストがはっきりしない被写体にはピントが合わない/合いにくいという、ウデどうこうじゃない構造的弱みがあり、納品の義務があるプロは使うとマズイだろうな、というところはありますね。


青空のもと、サイとカバがいる風景。

こういう風景写真は、G5Xの大得意なシーン。


フラミンゴの羽と落ち葉がなかなか綺麗な池。


フラミンゴのエサ皿に飛んでくるスズメ。

動体撮影ですが、G5Xは、シャッターを切ると1秒近くEVFがブラックアウトするため、EOS 7Dなどと違って「シャッターを切った瞬間の被写体を見ながら撮る」という事が出来ません。

シャッターを切る度に、ごく短時間とは言え、目隠しされる感じになるので、風景写真では何の問題もないものの動体撮影では「7D基準」で向き合ってしまったりするとややストレスになるかな?

牧歌的なレスポンスのG5X、これは個性なんだと思いつつ撮るのがよろしかろうと思います。


キリンとシマウマ。

大勢のお客様の中から撮る・・・とかいう場面になると、PowerShot G5Xの「邪魔にならない美点」は無類の強さですね。

小さくて薄いカメラを顔面にくっつける形になるので、占有するスペースは、手を伸ばさないといけないスマホなんかと比べると、うまくすると半分どころか1/3くらいで、カメラなしのスペースに近い時もありますね。


花も綺麗!!


難しい光線状態のシロクマもG5Xはばっちり。

ハイライトのダイナミックレンジはややAPS-Cより弱いかな?と思うのですが、十分です。

ここはいつも大混雑なのですが、混んでいる所のG5Xの身軽さは本当にありがたい。


レッサーパンダ!!

これはG5Xだと結構大変でした。

御覧いただけると分かるのですが、レッサーパンダよりも、背景のコントラストがハッキリしているため、G5XのAFはあっという間に背景に引っ張られてしまいます。

レッサーパンダからAFがスポっと外れて延々と背景に合い続けしかも回復しない・・・。

単純なコントラスト方式なので、確かに正しく素直な挙動で、逆に予想しやすく分かりやすいという強みもあります。

ただ、歩き回るレッサーパンダを良い構図で撮るチャンスは短く、こういう場合は、盤石のスーパーカメラであるEOS 7Dが恋しくなりますね。

EOS 7Dは本当に凄いカメラなんだなぁと。

ただ、撮ってしまえばG5Xも十分に凄い!!


ボール遊びするくまちゃんと、さわやかな青空で、また会いましょう!!