宰予の昼寝。 -6ページ目

宰予の昼寝。

気の向くまま。
生業:システムエンジニア
知識傾向:東洋史

たった今まで、JINの第2話・第3話を見てました。

体育座りしながら見てたから腰がー。


システム作り6日目(5月4日)。

昨日は、画面の初期表示と検索を作りました。


DAOとVOの「正しい」設計ってどうなのだろう、という疑問。

今回は、

・ActionクラスからVOを引数にしてDAOに検索条件を渡す。

・DAOクラスは検索結果はVOに設定してActionクラスに戻す。

 ※取得データの加工などはDAOで行わない。

・DAO、及びVOは原則としてテーブルに対応するものとする。

というルールをなんとなく決めて作っています。


でも、そうすると、

たとえば、複数テーブルを使うSQLはどうする?とか、

そういう時VOは新しくつくるの?とか、

そうするとSQLとほとんど1:1対応でVOが必要にならないか?とか、数々の疑問。


お仕事でも「基本的な」VO・DAO(テーブルに対応する)と

「特殊な」VO・DAO(Actionに対応する)を作ったりしていますが、

その基本と特殊の線はどこなのだろうと、いつも気になります。


それと、コーディング時に気付いたこと。

変数名が長い。

そして、「.」が多い(xxxInfo.get(i).get.XXXとか)。

そういうわけで、見づらく、かつ計算量が(きっと)多い。

規約とかお手本がないなかでの実力ってこんなもんかー。


この前、高田馬場の芳林堂で平積みになってたので買いました。

▼『良いコードを書く技術』

http://gihyo.jp/book/2011/978-4-7741-4596-9

さっそく明日から読もうっと。


今日は、システム作りを1日お休み。

疲れがでたのか(なんの?)昨日、21時頃に気付いたら寝てました。


で。

4月14日から読み始めの本を読了!

▼三木清『哲学入門』

http://www.iwanami.co.jp/.BOOKS/40/4/4000080.html

→「筋肉質」のステキな哲学入門です。


GW終わったわー。明日から仕事。

なんだか今年のGWは早かったな。

ちょっと無理なことを目指したかもしんない。

でも無理しないと見えないことがあったんだと思う。

まだまだ、全く完成していないので(汗)、とにかく形になるまで頑張ります。

そのあと、今回のイベントで得たものをじっくり学びなおそうっと。


***追記***

気になったので、POIをデモってみました。

▼@IT様

http://www.atmarkit.co.jp/fjava/javatips/070jakarta001.html


すごい。ものすごく簡単にExcelがつくれた……。

これは強力だなぁ。


サンプルソースよりもだいぶバージョンがあがって

(サンプルv3.0、今の最新?v3.7)

勝手に日本語対応してくれているみたい(わざわざエンコーディングする必要はない)。


できたExcelの日本語がUTFっぽいフォントなのは、

まぁあとから何とかできるのではないかと。

そもそも内部使用目的のシステムで使う予定なので、

フォントくらいファイル開いて好きなのに変えてくださいって感じです。


使うのに手間取るかなーと思っていたのですが、

意外すぎるほどあっさり使えました。すばらしい。

5日めー。

髪が伸びてきました。切りたいのですが、今日も黄砂だというのでひきこもり。


■昨日のこと――JavaScriptの前に討ち死。

「きっとJavaScriptでできるだろうなー」というイベントが2つあります。

※(1)テーブルの行追加削除、

  (2)AテーブルからBテーブルへ同項目のみコピー。

昨日ブログを書いたあと、取り掛かったのですが、


見事。討ち死。

時間がかかりそうなので、諦めました。


業務で見たことがあるけど、書いたことのないJavaScript。

いつも見かけているから、使える気になっていましたが、全然そんなことはありませんでした。

そんなこともできないのかよ、という感じです。

が、結局、さわりもまなびもしてないものっていうのは、そんなものなのだろうと思い返したりしました。

頭のいい人は別なのでしょうが――。

まなびが足りません。


■本日第1部――Servlet,Form,JSP出揃う。

主要なファイルは、今日で出揃ったと思います。

※DAOとかUtilとか未作成もありますが。

大体の流れはこんな感じになります。

▽作業実績管理システム

(1)ログイン画面

 IDとパスワードを入力して作業実績入力画面に遷移する。

(2)作業実績入力画面

 ログインユーザーの日次作業実績(実績)が入力できる。

 作業内容(タスク)検索機能をそなえ、各タスクの作業履歴(他ユーザも含む)を閲覧可能。

 検索結果一覧から日次作業実績に案件のコピーが可能。

 入力項目は、タスクのID、作業フェーズ、時間、コメントなど。

(3)統計出力画面

 月次の作業実績一覧をExcelファイルで出力できる。

 縦軸に案件・作業者等、横軸に日付けが入る。

 個人向け(1種)とプロジェクト全体向け(3種)のフォーマットが選択できる。

(4)ログアウト

 ログアウトし、ログアウト画面に遷移する。


こんな感じ。


■本日第2部――jdbc接続に再びぶつかる。

今まで、DB接続部分は実装してませんでした。(きっと動きが重くなるだろうと思って)

そろそろ、仕上げないといけない段階にきているので、ログイン処理から実装開始。

画面周りと違って、いつもやっていること(仕事で)なので、割とらくちんに進みました。

CSEとかも入れて、だんだん、職場環境に近づいてきた(汗


が。

でました。JDBC接続のエラー。


前回、ブログに書いたのとおんなじなんですけどねー。

WTPを経由するとまた違うのですかねー……。

javax.sql.DataSourceさんがnotFoundだそうです。

WTPのcatalina.propertiesのloaderのパスに{CATALINA_HOME}\common\libがあって、

そこにこの前、commons-dbcp-1.4.jarを入れたんだけど……。

それで、TomCatに直接クラスをデプロイして動いたんだけど……。

WTP経由だと見えていないように見える。


こんなところでつまづいている場合ではないので、思い切って(?)

ConnectionPoolを使わずにDB接続することにしました。

▼参考サイト様

http://homepage2.nifty.com/yoks/TechNote/tomcat/TCAT55_DB.htm

結局DAOの親クラスにDBCPを使う場合、使わない場合、

両方に対応できるgetConnectionメソッドを作って、

application.propertiesに使う/使わないのフラグを持たせることにしました。

苦肉の策。


そして、先ほど、ようやくログイン処理が完成しました……。長かった。


本当にPOI使って、Excelのシート出すところまで行くんだろうか……。

あれやこれや、使いやすいものを!などと当初は思っていましたが、

今は、とにかく意味のあるもの、ひととおり使えるものを作り上げられるかどうか、

そんなところで精一杯。

始める時はいいイメージしか湧かなかったものも、実際やり始めると、なかなかうまくいかない。

が、しぶとくしぶとく、作り上げてやりましょう。

4日目ー。ちょっと早めの更新。

今日は黄沙でしたねー。ジョグに出ようとマンションの扉を開けると、

外が、黄色い…。

太陽の光が、ぼんやりと砂に拡散している…。

なによりほこりっぽいのが嫌いな私にはきつい環境下でのトレーニングでした。


さておき。


昨日はログインのJSPからログインのAction、トップメニューのActionを経由して、

トップメニューのJSPにたどり着くまででした。

今日は、

(1)トップメニューのActionを作りこみ、

(2)トップメニューのボタン押下イベント(=各種Action)を作りこむ、

予定でした。


「JSPに値を渡す」「JSPから値をもらう」。

絶対にうまくいかないだろうなと思っていましたが、案の定、行き詰まりましーた。

taglibを使いながら・・・とくに、セレクトボックスとテーブルが難しい。。。


そんなときに頼りにさせていただいたのは、下記サイトさま。


▼a.そもそもセレクトボックスってどうつくるの?

http://struts.wasureppoi.com/taglib/02_select_dyna.html

▼b.テーブルの各行・セルから値をとるには?

http://www.ne.jp/asahi/hishidama/home/tech/struts/logic_iterate.html

▼c.ひとつのフォームに複数ボタンあるときってどうする?

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=27433&forum=12


特にテーブルの値をとるのはかなり苦労しましたが、

bのサイト様に助けられました。

cの問題は、何度か仕事でも見かけた問題。今回はLookupDispatchActionを使って解決する予定。


Servletの何たるかをきちんと学ばないまま、いきなりStrutsを使って何か作ろうとしているので、

無理があるのは、確かにそう。

でも、無理を承知でも、何か形のあるものをつくるって結構大事なんじゃないかと。

基礎を学ぶのは、そんな無理をして、基礎の大切さを痛感してからにします。


JavaScriptをほとんど知らないので、簡単なことをサーバサイドに

やらせている気がします。

HTML・JSP・CSS・JavaScript・Servlet。

どこに何をやらせるか。

ひととおりすべて知っていないと、ほかの技術では簡単なことを、チカラワザで解決することになってしまう。

cのサイト様では、問題の解決に3パターン提示していました。

JavaScriptでやるのか、JSP側で解決させるのか、DippatchActionをつかうのか。

工学的思考とは

「目的の解決のために、複数の方法を用意し、状況に応じて最適な解を見出すという思考」

だと、そういえば、大学のとき、教育工学の教授がいってたなぁ。

いまのところ、複数どころか、状況を突破するひとつの解さえ探すのに苦労しているのだけど。

おいおいそんな力を身につけたい。


で。

いまのところ、JSPの値が過不足なく、各種ボタン押下のActionにわたっているようなので、

ざっくり各種ボタン押下イベントを作っていきます。

ログとか項目チェックとか見栄えとか、きちんとやればきりがなさそうだ。。

ざっくりざっくり全機能をまずつくってみよう。

3日目。

3日坊主の言葉もありますし、気持ち的なところで今日は結構重要だろうと思ってました。

ジョギングの成果(?)で体が重く、かなり朝寝をしました。

かえってすっきりしたので良しとします。


■第1部――Strutsの勉強

昨日からの続きで、Strutsのお勉強。

参考はいつものJavaの道様▼。

http://www.javaroad.jp/opensource/index.html#struts


11時頃から始めて、18時頃にひと通り終わりましたー。

サンプルとはいえ10数ファイル、結構書いたなって感じがします。

configファイルの設定とかメッセージ処理とか、

validatorなんかはじめて使いましたが、これから作るミニシステムにも使えそう。


Javaの道様は他のサイトに比べて、誤植も少なく、「そのとーり」やればほとんど動きます。

しかしながら、バージョンのカベは大きいようで、

とくにStrutsは1.2系と1.3系で変わっているところがちらほら。

今日つまづいたのは、


(1)taglibのURIの書き方。

1.2系だとjspの頭に「taglib uri="/WEB-INF/struts-html.tld"」こんな感じで宣言するのですが、

1.3系だとstruts-taglib-1.3.xx.jarというのが既にあるので、

「taglib uri="ttp://struts.apache.org/tags-html"」(h省略)みたいな形で宣言するみたい。


(2)LookupDispatchActionを使うときに…。

LookupDispatchAction(ひとつのフォームにボタンが複数あるときに便利)の属する

org.apatch.struts.actionsパッケージが、1.2系と1.3系でjarが違うらしく、

struts-extras-1.3.10.jarをlibに入れないとコンパイルエラーになってしまふ。


(3)validator-rules.xmlの配置フォルダが違う……。


など。今はアソビだからいいけど、仕事中、致命的なところでバージョンに悩まされるのは…。


■第2部――いよいよ書き始める。

プロジェクトを作っていよいよ作り始めました。

モックをだーん、とWebContent配下に入れて、

ログインのFormとActionをばーんとつくって、

どーんとサーバを立ち上げて、URLをべーんと打ったら、動きました。

ログとか認証とか細かい(細かくない?)ことを考えたらまだまだですけど、

とりあえず、形にはなりそうな予感。


ひととおりのデモ・サンプルは動かしたので、

あとはやりたいことにあわせて参照して、どんどこ作っていくのみー。


……自分で書いていて思うのですが、あいまいな言葉遣いが多いですね。。

システム試作、2日目。

昨日の続きで、http://www.htmq.com/  様を参考に画面周りを作成。

昨日は、リファレンスをいきつもどりつしつつ、HTMLとCSSの「入門」的な記事を読み、

サンプルプログラムを「写経」しました。


■第1部――画面のモックづくり

今日は、実際に作りたい画面のモックアップを作成。

ログインとトップ画面、各種機能3つの5画面構成の予定です。


ログインはかんたんに。。。

トップ画面はサンプルを改変して……。

各種機能(1)は(2)とほぼ機能的に等価なので、まとめて、では、1からHTMLとCSSを作成……。


が。

なかなか思うとおりいかないものです。

レイアウトとか、見栄えとか。あー。

ちくちくあれやこれやと直すので、ひどく時間がかかる。


しかしながら。

ともかくも。

「きちんと」jはあとからにして。

動くものをつくってしまえ!


と思い直し、先に進むことにしました。

レイアウトや見栄えがあとから大きく変わるにしても、

出力項目は揃っているので、サーバサイド作成に大きな支障はないはずです。


各種機能(3)は、Excel出力させたほうが利便性が高いので、

POI(というものをはじめて知った)を使って出力させること予定。

▼POIの使い方

http://itpro.nikkeibp.co.jp/article/COLUMN/20090622/332341/

→ITpro様。


結局、(1)ログイン、(2)トップ、(3)各種機能(トップ画面からモーダルで上げる予定)の

3画面構成となりました。


■第2部――Strutsを学ぶ。

入社後の研修がStrutsでした。

が、ほぼ1年間、ベンダー殿の独自F/Wを使ったシステムをメインで保守っているため、

あまりStrutsには触れていません(皆無というわけではないけども)。


scopeとかconfigとか、結局Strutsの動作が、よくわかってない。

(ってことはなにもわかってないんじゃないか…)

というわけで、いつものJavaの道様でまずは勉強。

▼Strutsの基本動作

http://www.javaroad.jp/opensource/js_struts2.htm


eclipse+WTPを使ってTocat5.5を動かし、Struts1.3.10を使いたいのだが。


ん?

Strutsフレームワークってどうしたら使えるようになるのだろうか?

なんとなくWEB-INF\libにStruts系のjarがあれば動くような気がするが。

とりあえず、空の動的webプロジェクトをつくり、

とりあえず、Strutsインストール時についてきた「struts-blank-1.3.10」の

・WEB-INF\lib

・web.xml

・struts-config.xml

を上からかぶせて。

多分これでいいのではないかと。


で、taglibを使おうとしたのだが、javaの道様でご指示のtldファイルが見当たらず、

taglibを使用する宣言がうまくできない。

どうも、struts1.3系だと宣言の形がやや違うとのこと。

▼struts1.3系でのtaglib

http://www.javaroad.jp/bbs/answer.jsp?q_id=20070223044856306

これで、うまくいきました。


スペルミスの嵐を乗り越え、なんとか動きました。

サンプルですけど。


結局、{コンテキスト}.xmlってなくても動くのね、ということと、

WTPを経由すると、server.xmlに勝手にコンテキストの情報が書き込まれるのね、ということと、

WTPを経由するとワークスペースの.metadataのWTPプラグインのフォルダ配下にクラスファイルが作られて、

なんか気持ち悪いね、ということと。

そんなことを、知ったり、思ったりしました。


それにしても、前やったことを覚えていない。

「構造・本質」の知識と「手続き」の知識が重要度づけされないまま頭にあって、

頭のなかのゴミ廃棄処理(というものがあるとすれば)で、

玉石混交したまま、捨てているような、そんな感じがします。

「構造・本質」の知識は自分の言葉で書き残すことで整理しないと駄目だなと、改めて思いました。


連休だし、体も鍛えようと夕方ジョギングをしています。(毎日3~4km)

ところが疲れて、21時ころに限界→布団にくるまる。

意識を取り戻したのが2時。

部活を3、4時間して毎日1時ころまで勉強してた、高校生の時って

相当タフだったなーなどと。


今日はもう寝ます。

あしたは、struts勉強の続きをして、簡単に作るもの決めて、コーディングしたいなー。と。