2007年7月31日火曜日

EnumeratorとIterator.

 …またやってしまった orz
 週末更新が途絶え過ぎです.
 前回反省した様な事を書いておきながら、全然反省してなかった事が白日の下に orz

 と、デジャヴな反省は置いておき.
 最近Javaの勉強も全然進んでいませ…ここでも駄目すぎる事実が orz
 反省しきりです.
 27時間テレビなんて見るもんじゃありませんw

 話が逸れまくりましたので元に戻して.
 Javaの勉強が全然進んでいないと言う駄目すぎる状況にある訳ですが、会社でPHPのコードを書いている時にフと「あれ?…EnumeratorとIteratorって…何が違うんだ?」と言う疑問にブチ当たりました.
 はい、設計の勉強云々以前の問題ですね orz

 いや、これは.Netの弊害です!!
 私も被害者なんです!!! orz

 何でPHP書いててこんな事を考えたのかと言うと、会社では主に「PHP4でも動く事が前提」でコードを書いてますので(もうPHP4系のライフサイクルも終わりますが)、オブジェクト指向ライクな構造をとる場合には、かなりの割合で自力実装が必要です.
 そして、それらは独自Frameworkとして作成・実装している訳ですが、その中でCollectionに対する列挙処理として「Iterator」クラスを作成しています.
 例えば、Collectionクラス(勿論自前実装)には「追加」「クリア」「Item取得」の様な振る舞い+「getIterator」を実装して、列挙処理にIteratorを使用するイメージです.

 ※実際にはこんなにシンプルではありませんw

 んが、.NetではIteratorと言うものは「概念上」ありますが、実際にはEnumerator(IEnumerator)がカバーする仕組みになっていて、lightmaterialの頭の中では「Iterator=Enumerator」と言う図式が完全に出来上がっていました.
 でも、実際にはJavaの実装で見ると、IteratorとEnumeratorには明確な差異があり、IteratorはEnumeratorの後継にあたり、Enumeratorでは実装されていなかった「要素の削除」機能が実装されているものだ、と定義されています.

 あれ?
 何だ?
 ん?

 …結局IteratorとEnumeratorって何が違うんだよぉぉぉぉ~~!!? orz

 Javaなら「はい、そうですか」と明確で明瞭に理解可能ですが、他の言語での実装方法を見ていると、その差異が見えてきません.
 うーん…ここは深く考えずにJavaでは「Enumeratorは過去の産物で、これからはIteratorオンリーです!」と考え、.Netでは「IteratorってEnumeratorの別名でしょ?」と考えておいた方がいいのかなぁ.

 恐るべし列挙子/反復子!
 と言いますか、こんな低レベルな事書いてるPGなんて、全国探しても私くらいのものでしょう orz
 むしろ自分自身が恐ろしい今日この頃.

2007年7月23日月曜日

今週は無し.

 ベランダでタバコを吸ったら、北海道にある我が家から見て北(若干東)の空に高速に点滅する光が一つ.
 飛行機の点滅より速く、位置は一切変わらない.
 ましてやこの時間に北海道の東北へ向かう飛行機なんざ無い訳で…
 ま、そんな事(事実だけど)は気にせず戒めへ.

 今週は更新無し.

 と言う書き込みを月曜日にする駄目っぷり orz
 出張で書けなかった時を除いて一応土日どちらかで書いてたんだけどなぁ.
 建前上反省反省.

2007年7月18日水曜日

Confirm-Addressが窓の杜に掲載されていた.

 風邪引きました orz
 熱がある上に何故か白目が充血しまくりです.

 最近お世話になっているConfirm-Addressと言うThunderbird用のExtensionが窓の杜に紹介されていました.

 kenmazさん、おめでとう御座いま…す…?

 こう言う事があると急にアクセス数が増えたり、サポートの要求が増えたり大変かもしれませんが頑張って下さい.

 さ、脳みそが熱暴走する前にさっさと寝ます.

2007年7月17日火曜日

Ajaxの繁栄とgoogle.

 ちょいと興味深い記事があったのでメモ.

 グーグルが語る:Ajaxはなぜ最初失敗し、その後成功したのか

 半年くらい前だったかなぁ.
 知人と「最近のWebアプリケーションってちょっと前まで考えられなかったくらいリッチだよねぇ」と言う話題になった事がありました.
 最近ではOfficeライクなWebアプリケーションやWeb(Ajax)OSが無償で利用出来る環境にまで成長していますから.
 その時lightmaterialが「Ajaxの基礎技術自体は枯れた技術なのに、何で今までこんなのが出て来なかったんだろうねぇ」と言ったら、知人が「クライアント性能の問題じゃない?」とそっけなく言ったのを鮮明に覚えています.
 なるほど…言われてみれば当たり前の話だな、と.

 そんな話からgoogleがAjaxや自然言語に取り組んで失敗し、そして今の成功がある事を分かり易く(英文訳なので日本語としては多少分かり難いかもしれませんが)書いてある記事でした.
 それと同時に、今や新しいコンピューティングとExperienceはOSの手を離れ、Network/Internet上に移行したのだなぁ、とWebアプリケーションメインでプログラム書いてるPGのくせに、改めて強く痛感した次第です.

※Experienceと書いたのはカッコつけたのでは無く、WindowsXPの語源でありMSが好んで使う言葉を皮肉っただけです.

2007年7月16日月曜日

XML署名.

 XML署名……は、初めて耳にしたよ orz
 何ですかXML署名って?w

 仕事で使うかもしれないと言う話が持ち上がり、色々と調べてみたんですが、結局使わない事になりやがりました.
 が、何か面白そうだったので引き続き調査中.

 元々「XML署名」と言うのは、XML(タグで区切られたデータを扱うファイル)の改ざん防止、ファイル真性の証明を目的として作られた規格との事.
 詳しくは↓ココ参照.
 @IT:XMLデジタル署名とXML暗号

 別に新しい技術と言う訳では無いようです.
 確かに今やあらゆるデータのデファクトスタンダードとなりつつある(既に成ってる?)XMLに電子署名を付けるのは理にかなった考えです.

 が、この機能を実現しようとするとちょいと面倒.
 面倒と言うか、まだ上手く動かせてません orz
 .Netで試してみたんですが、何故かエラーが発生.
 丸々MSのサンプルを動かしてもエラー.
 OpenSSLで自己署名した証明書の作り方が悪いんだろうか??

 でもこれが使える様になったら、結構面白そうです.
 因みに.NetでもJavaでもちゃんと標準ライブラリとして実装されている様です.
 .Netでは

 System.Security.Cryptography.Xml.SignedXml

 で実現するんですが、これ自体は何にも難しい事は無い(と思われる)んですが、ちゃんと動作するか確認するのに証明書を用意しないと駄目な訳で、エラーが出ると「これってコードが間違えてるのか?それとも証明書自体が悪いのか?」と前述した様に迷走モードに突入しますw

 そんなXML電子署名ですが、ちゃんとサードパーティのライブラリもあります.

 Le-XAdES Library / XAdES署名ツール XAdEStool

 まぁ、実際にはライブラリは公開されていない開発途中のライブラリですが、これが実際にライブラリとして公開されたら楽そうです.
 実際問題、SOAPなんかのセキュリティ確保にXML署名が利用されている様ですので、今後ますます需要が出そうな規格かもしれません.

設計が分からない-1.

 たった今、北海道でも揺れました(汗
 新潟には仕事での交流がある方もいらっしゃるので心配.
 無事である事を祈るばかりで.


 相変わらず設計の勉強がまったく進みません orz
 ぜんっぜん分かりませんから.
 まぁ、これから参考資料なり研修なりを基に本格的に勉強するので、まだ出来なくて当たり前なのかも知れませんが、余りにも分からなすぎて怖い.

 例えば、以下の

・ボロバシカメラは個人で経営する家電販売店である
・店員はオーナー一人のみであり、人件費はかかっていない
・POS購入費用が無く、ソロバンと手書き(売上管理台帳)で売り上げ計算を行っている
・商品は在庫を最少数のみ確保し、販売して在庫が無くなりそうな場合に仕入れを行っている
・在庫の管理は在庫管理台帳に記載している
・仕入先は商品により複数存在する
・仕入れ内容は仕入れ管理台帳に記載している
・販売価格は商品の標準価格から値引いて販売する事がある
・一日の販売が終了すると、売上管理台帳を閉めて日の売上集計を行う
・毎月末、月間売り上げを集計する
・システム化にあたり、(こっちの都合で)POSでは無くノートPCとバーコードリーダーを使う事にした

 と言う、かなり強引な『こじつけシナリオ』があったとます.
 通常RFP(提案依頼書)を顧客に書いてもらいますが、架空のお話なのでそんなものありませんw
 純粋に、今手作業でやっている事をシステム化したいと言う案件だとしましょう.
 それでは上記内容に沿ってシステム設計を行います.


 …で、どっから取り掛かればいいのさ? orz


 ええもう、ぶっちゃけこの悲し過ぎる程の初歩段階ですよw
 うーん.
 ちょっと設計と言うモノの流れを自分なりに考えてみよう.

 01. RFPを熟読
 02. 業務フロー作成
 03. ユースケース図作成
 04. 1~3を元に顧客との打ち合わせ
 05. 必要に応じて1~3を繰り返す
 06. ER分析(エンティティを見つけ出す)
 07. ER図(ERD)作成
 08. 大まかなオブジェクト図(クラス図)を作成(クラスを見つけ出す)
 09. 6~8を元に顧客との打ち合わせ
 10. クラス図作成
 11. シーケンス図/コラボレーション図作成
 ここまでが分析か?
 12. ユースケース図/アクティビティ図以外のUMLダイアグラムを駆使
 13. データ設計(一部ERDを基に作成)
 14. 画面設計
 15. 詳細クラス図を基に機能(関数)設計
 ここまでが設計か?

 と言う感じだろうか?
 …適切なのかどうかすら不明だ orz
 さっさと参考資料でも買い漁らないと駄目ですね.
 プログラムだと実際にやって見れば、合ってるのか間違っているのか分かりますが、分析/設計はこの辺の判断が自分では出来ないので厄介です.
 と言う事で、現在amazonでUML/システム設計の書籍を模索中.

 とは言え、探してる間にボーっとしてるのもなんなので、ためしに基本中の基本、業務フロー図でも書いてみましょうか.
 Excelで業務フロー作るの面倒だから、アクティビティダイアグラムを代用です.

 ※画像はJUDE Community

 …どこからどこまで一つのダイアグラムに書けばいいのか分からない orz
 資料が整うまで勉強しても無駄な気がしてきましたw
 と言いますか、正直まともに設計出来る様に成れる気が一切しませんから.

 諦めてJavaの勉強優先しようかなと葛藤中.

2007年7月7日土曜日

UMLモデリングツール.

 先日書いた様にこれからUMLの勉強をしなければなりません.
 …したくは無いんですけどw

 と言う事で勉強用のUMLモデリングツールを探しましたが…使いづらい orz
 そもそもUMLモデリングツールってこんなもんなんですかねぇ?
 皆さんこんなに使い難いものを使って、あれだけのダイアグラムを書いている訳ですね.
 逆に「すごい!」と思わずには居られません.
 まぁ、会社のエンジニアの人が使っている某商用モデリングツールなら、使い易いのかもしれませんが.

 しかし勉強のために商用の物を使うほど懐具合に余裕がある訳では無いので、非商用のモデリングツールを色々と触ってみました.

 ・JUDE
  ※注 現在何故か上記サイトはつながりません
 ・Poseidon
 ・SystemDirector Application Modeler

 それぞれ特徴がありますが、どれも一通り必要なダイアグラムを書けるものです.
 一部書けないものや、機能上一部おかしいものもあります.

 ・ArgoUML
 ・1st Modeller
 …etc…

 ArgoUMLはSequenceダイアグラムの挙動がかなり変なので致命的ですが、その他の機能は結構使えます.
 クラス図なんかを書いた際には、ソースの雛型まで生成してくれます.

 PoseidonはそのArgoUMLを元に作成されたらしいのですが、実際に触ってみるとかなり違います.
 グラフィック回りが大幅に向上しており、またSequenceダイアグラムもまともに作成可能になっています.
 しかしこのツール、マウスとか図の回りに各種メニューのポップアップが出るんですが、これが逆に邪魔で私はあまり好きになれませんでした.
 ちなみにLinuxで入れてみましたが、一部文字化けしますし、License認証はブラウザ経由で行うんですが、これがまた何故かNetscapeを自動検索して見事に失敗しやがります(「Your default browser cannot be started.」).
 Poseidon本体を起動した後「Edit」→「Settings...」→「Browser」項目でFirefoxなどを指定する事でエラーを解消できますが、エラーを解消出来たとしても開いたページで「This Page No Longer Exists」と出ちゃいます.
 何だかなぁ…ライセンス認証しないと保存も出来ないんですが orz



 JUDE(勉強用に試したのはCommunity版)は国産のUMLモデリングツールなので、情報も豊富ですしコミュニティも充実しています.
 現時点ではこれが最有力候補ですかねぇ.
 なんか、NTTデータでは標準UMLモデリングツールをJUDEにしたらしいですし.
 動作も挙動不審な所はほとんどないですし、ちょっといじればLinuxでも動かす事が可能の様です(上にも書いた様に今サイトつながらないので確認出来ませんでしたが).

 SystemDirector Application Modeler(以下SDAM)はNECが開発・保守しているEclipseプラグインです.
 他にもEclipseプラグインでUMLを作図するものがありますが(EclipseUMLなんか)、今回はSDAMのみ試しました.
 JUDEと比べると使い勝手でちょっと見劣りしてしまう所もありますが(あと、斜線引くと実線と点線の区別がつきにくい気が…)、オブジェクト図も書けるので非常に便利です(SDAMでは「オブジェクト図」と言う名前では無く「インスタンス」と言う名前ですが).
 Eclipseでコード書きつつUMLを確認したり、逆にコード書いててつまった時にクラスダイアグラムを書いてみる、なんて事も簡単に出来てしまう点が一番の魅力かもしれません.
 これも候補のひとつですね.



 まぁ、実際に仕事で使う時には(いつになるか分かりませんが orz)別の商用ツールを使いますので、勉強にどれを使うかそんなに真剣に悩む必要もないんでしょうけど.
 取り敢えずJUDEメイン、SDAMがサブと言うかちょっとだけ書く時に使う事になりそうです.

 それにしてもUMLモデリングツールを選ぶだけで一苦労.
 相変わらずUMLの書き方と言うか考え方が理解不能ですし…あーUMLって奥が深い orz

2007年7月4日水曜日

設計.

 今日はメモと言うより愚痴と言うか悩みを.

 密かに先日まで1週間弱出張に行っていた訳ですが、戻った直後に会社の人から「設計の勉強したら?」といきなり言われました.
 出張帰り直後にドキッとする発言は止めて下さい orz
 出張から戻って速攻でそんな事言われたら「え?お、俺お払い箱?」と思ってしまいますから orz

 と言う事で会社の人から言われた言葉を改めて噛み締めてみました.
 …!?
 アレですか?
 要するに「いいかげん人様の書いた仕様書なりUMLダイアグラムで飯を食ってる年でも無いでしょ」と言う事ですか?! orz

 元々プログラム始めた年齢も適齢期(プログラムのね)を完全に過ぎてからだった訳ですし、別に専門学校へ行っていた訳でも理数系だった訳でも無いので、その辺は勘弁して頂きたい!
 むしろプログラム始めて5年目にしてようやくPG半人前の域に達した私に何を望んでいるんですか?と問い詰めたい気分です.

 がしかし、lightmaterialの勤めている会社は極々小さい会社なので、我侭を言っていられる状況にはありません.
 Javaの勉強でウキウキ気分[死語]だったのが一気にどん底へ行った気分です.
 ここ2日色々と調べましたが、ハッキリ言って私の様なうすらバカもしくはうっすらハゲには理解不能です orz

 コードでもありますが、ダイアグラムも同じで「読めるけど書けない」.
 読むと書くのでは大違い.
 事象の分解と定義、オブジェクトへの変換の仕方がまったく理解出来ません.
 2日目にしてこの状況ですから、先が思いやられます.
 オマケに設計関係の研修に勝手にエントリーされてますしw
 そんな訳で素敵な理数系脳みそを移植したい今日この頃です.