2009年8月30日日曜日

読書1-まずはこの本「達人プログラマ」

読んだ本について書いてこー。ときめたのだがいろんな人のブログに張ってある
amazonのアフィリエイト。あれ、「いいなぁ」と思ってて
手を出せてなかったので。やってみました。
1、登録して
2、うぃジェット作成して
3、そのコードをコピペ
って簡単だったんだねー。

-------------
さて、

「プラグマティック」
って言葉をものすごく植えつけてもらった良書です。この本。

だれもが良書といってるであろう良書です。
いつかったか覚えてませんがチョコチョコとぱらぱらと
読み返すたびに身を引き締められ再度「気づき」をもらえる本です。

ほんと、このほんに出会えてよかったと。
この本、後輩が紹介してくれた気がします。たしか・・・。

あ、SP3インストール終わってた。
あ、嫁さんのPriusもリカバリ終わってた。

今日はもうネヨ。

デスクトップPCヲ仮想化シテ自宅サーバニシテミヨウカト

夏に入り、
デスクトップPCをまったく使わなくなってしまった(おそろしくあついので)。
ので
かなりもちぐされになってしまうので
自宅サーバを立てようかと思い。でも結局あついからPC寿命の減りはやそ。。。

で、ついでにいまの環境ぐちゃぐちゃなのでリカバってまっさらにシテ。。、
サーバは
いろいろと試してはリカバリをやってみたく。
OSもXPPro、Homeひとつづつあまってることだし
先日会社の上司にVirtualPCについてあれこれきいたので
早速。

インストールまでは完了。SP3あて中。
嫁さん用に5年前のノートPC引っ張ってきてのリカバリも並行して。

ひまなのでブログ更新を。
最近本をよみあさっていたのでづらづらと書くことにしようと決ーめた。

ちなみにプログラムは一向に進まず。
進捗バーの1ピクセルずれるとこや、月またぎだと2ピクセルだし。
とかその辺を調整中。で、手をつけず。

2009年8月26日水曜日

リンクヲ

はらせていただきましたよー。
ExtJsで足元おぼつかず右往左往していた私に
体系だてた学習というか
助言を下さったゼノフィの小堤社長。

いつもありがとうございますです。
ホントウニグレイトデス。

2009年8月17日月曜日

ExtJs-56 階層構造のつぶしこみ5ガントチャートのラインとカンレダへっだ


本当に牛歩のごとくな進捗ですが。

それっぽくなりました。全部固定値だけどどうすりゃ変化がおきて
期待する形になるのか検討がついてきました。
最近毎日30分から1時間コーディングの時間が取れるので前よりも
進みます。そろそろちゃんと作りたいです・・。

さて、ラインはExtのProgressを参考に。
とヘッダは普通にテーブルで実装し、
load完了のコールバック内で実装してみました。

やってることはいたって簡単。
まずはストアにコールバックを設定
this.store.load({
callback : this.loadedCallBack.createDelegate( this )
});
コールバック内で
getViewしてGridView取得して
そのHeaderCellを取得
var headercellElement = this.getView().getHeaderCell((this.dataConfigObject.length-1));

そのinnerHTMLを書き換えてやればヘッダはできます。
ようやく少しづついじくれるようになってきましたね。

で、もうひとつラインですが、
renderで実装。
いまはシステム共通の場所につくっちゃったけど
GanttGridplugInみたいなかたちでサイズとかのUtilityをふくめて
再編成する。
ためにここに残しておこう。

System.Common.Render.GanttLine = function(value, metadata, record, rowIndex, colIndex, store)
{
//From Toより(始点、終点)サイズの取得

//種別による色の指定

//実績からイナズマ線用のprotを取得しておく(未実装)これはhiddenのDIVでくくっておいてあとでCompositElementでぶん回しの線引き用。

//ProgressBar実体

return '<img src="" class="system-common-progress-bar-schedule" style="width: 400px;" />
'

//return 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa';
}

手帳バージョンアップ

最近がんばってるのでご褒美に手帳を。左は今までのPORTER。
右が新しいbindexのアシスト。
http://shop.jmam.co.jp/system/1190532_1409.html
「カラフルでスタイリッシュな書くことを考えて」るてキャッチにきた。ツールの仕様は全部システム手帳だからなー。
久しぶりにこーいったものをちゃんとえらんだなー。薄さ、機能性、とやはり色。
ご褒美はモチベーション維持になります。
これとあとペリカンのサファリのオレンジを買う予定。前の前の会社の後輩が使っててよさそげだったので。よーやくペンデビュー。

2009年8月14日金曜日

ExtJs-55 階層構造のつぶしこみ4ガントチャートのライン







TracなりRedMineなりガントチャートがついてる。

ツリー構造はそれとなくできたのでよしとして
ガントチャートをこれまたGridPanelに乗せようと意気込みました。
せっかくだから男らしく日単位で列を追加して管理してみるかと

ColumnModelにとりあえず固定数分追加してみた

//元のデータ構造に日付を示すconfig情報をAddする。
//ためしに一年分の列を足してみるテスト(重すぎ。使い物にならない)
//for(var day = 0; day < 364; day++){
// this.dataConfigObject.push({name: '' ,mapping: '' ,dataIndex:'' ,header:'1/1' ,width:20 ,sortable:false ,hidden:false ,hideable:false });
//}
//for(var day = 0; day < 90; day++){
// this.dataConfigObject.push({name: '' ,mapping: '' ,dataIndex:'' ,header:day.toString() ,width:20 ,sortable:false ,hidden:false ,hideable:false });
//}
//やっぱりおもいわ。最小粒度にフォーカスあわせるといつもこうだ。
//line用の列をひとつ追加してヘッダは別途分割ロジックを入れてやろう。とおもう。

むちゃくちゃおもくてボツ。
collapse,expandの処理が「モッタリ」感たっぷり。1年分表示させようものなら
NGな時間をこしてからのレスポンスだし。。

で、ながーいれつを追加してそこのrendererで線を描画することにした。
(ほんとうならGridの背景色塗りつぶして終わりにしたかったのに。。。)

方針だけ決めて押しまい。
(ツリー構造のグリッド項目名)+(データ詳細/ガントのスライド切り替え)という組み合わせの
ものにしようと思った。

Elementの選択から始まった最近の流れ。
これが終わればXtemplate!!でそれが終われば技術調査はおしまいで再設計。

早くGridおわりにしたいな。。
さて、線は終点-始点幅分を画像をひぱりゃいいnだろうけど。
その列のヘッダはどうかこうかしら。
テーブルでカレンダー表示だろうな。

2009年8月13日木曜日

ExtJs-54 階層構造のつぶしこみ3親子の保持

今日はいろいろ進展があった。その1

先日の検討結果よりtoggleの実装をやめたのですが、
親子孫の関係の中で孫の世代の操作を親の世代が無視するという
現象がう生まれたんです。操作情報を保持できない問題にぶつかってうーん。
って成ってました。

エクスプローラとかExcelのグループ化って子の状態を保持してるじゃないですか。
あれをやりたいなぁと。

もちろんExt本体も参考にって思ったんですが
親子のexpand、collapse制御は階層別に隣接する制御を実装して
関数を再帰呼び出し(fireevent)してるみたい。
それと同じじゃちょっと面白みにかけるしパス情報もってるんだからもっと簡単に
なんとかならないかな?ともおもった。

この階層構造、ファイル管理機能を作成するときにもしようしたいので
できればファイルパスをそのままちょこっといじくるだけでそれとなくできないかな?
と通勤時間にうーん。ってちょいちょい考えてました。

でこうなりました。
「キーワード」でロックすることで回避しました。
わかりづらいけどまとめると、、、

各要素は親子孫のパス情報をある特定の区切りで保持しておくこと
①ある特殊なキーワードが含まれている場合は処理は行わない。
②ある特殊なキーワードは一意性のあるIDと合成される
③ある特殊なキーワードは一意性のあるIDの処理の結果子孫へは反映されない
④ある特殊なキーワードは一意性のあるIDの処理と対となり削除、追加の操作を可能とする。

すると
親ID
 親ID 子ID
  親ID 子ID 孫ID
 親ID 子ID-2
  親ID 子ID-2 孫ID-2
とあり、

子IDが圧縮した場合、_KEYを付与
親ID
 親ID 子ID_KEY
  (親ID 子ID_KEY 孫ID)←表現上見えていない
 親ID 子ID-2
  親ID 子ID-2 孫ID-2
となる

で、この状態で親が圧縮した場合
親ID_KEY
 (親ID_KEY 子ID_KEY)←表現上見えていない
  (親ID_KEY 子ID_KEY 孫ID)←表現上見えていない
 (親ID_KEY 子ID-2)←表現上見えていない
  (親ID_KEY 子ID-2 孫ID-2)←表現上見えていない
となる

親の展開処理のとき_KEYを利用して制御を行う。
まず、
①親ID_KEYを親IDに戻す
親ID
 (親ID 子ID_KEY)←表現上見えていない
  (親ID 子ID_KEY 孫ID)←表現上見えていない
 (親ID 子ID-2)←表現上見えていない
  (親ID 子ID-2 孫ID-2)←表現上見えていない

②KEYが含まれていない行を復元する
親ID
 (親ID 子ID_KEY)←表現上見えていない:KEYが含まれているので復元せず
  (親ID 子ID_KEY 孫ID)←表現上見えていない:KEYが含まれているので復元せず
 親ID 子ID-2←復元
  親ID 子ID-2 孫ID-2←復元

とやると
親子孫、子孫、。。。とある特殊なキーワードによって
縛ることが可能で前の状態の簡便な保持の実装が行える。

という仕組み。

形になってきた。

2009年8月12日水曜日

ExtJs-53 階層構造のつぶしこみ2検討中

救命病棟見て風呂はいって倒立してたらこんな時間。
寝なければ。

さて、
つぶしこみはなんとなくはできたものの大きな課題が。
①階層構造っぽく
②子要素の状態を保持した状態でのexpand、collapseができなくちゃ。

①これは解決
 columnModelでrendererに実装してあげて
 level列情報を取得してその数分インデントを付与してあげればOK。

②これは未解決
 今の構造だとパス情報をクラス前方一致で引っ掛けて
 ConpositElement取得してぶん回して非表示用のクラスを当て込んでる(toggle)
 だけなので親階層でexpand、collapseすると子要素もお構いなしで
 連動してまい、toggleでの実装なので孫要素を閉じた状態で親要素をいじくると
 変なことになる。
 うーん、楽してなんとかならないかな。
 
 まずは
 ・toggleでの実装をやめる。
 だな。
 なんかこれで解決しそうな予感。

 実装はまた今度しよ。
 

2009年8月11日火曜日

ExtJs-52 階層構造のつぶしこみ

今日は10日だからまた1W。
先日から夏季休暇をもらってたため、またもや進捗無し。というと寂しいので
先日の続きをゴリ押しで形付けた。

①ストアドから階層のパス構造は返ってくるようになった。
②グリッドのつぶしこみはtoggleを使うことにしている。

ということで
ロード後のデータアクセスと行へのクラス操作がわかればとりあえず画面には
変化が現れるかと。

・データアクセスと追加。
sotreのロード後のコールバック関数内でのアクセスが一番簡単なので(というよりも
それ以外は考える頭がない)そこでパス情報を取得。
で、viewを取得してパス情報をそのままCSSとして追加してしまう。

loadedCallBack : function( record, options, success ){
if( record.length === 0 ){
//alert('0件ですstoreを空にして再描画で空ってことを。でとりあえずOKかな?');
this.store.removeAll();
this.render();
}
else{
//TODO:再計算ひつようか?
//this.getView().updateAllColumnWidths();
var index = 0;
for( index =0; index < record.length; index++ ){
this.getView().addRowClass( index, ' ' + record[index].data['itempath'] );
}
}
},

あとは
ダブルクリックなりくりっくなりのリスナーで
これまたレコードから取得してきたパス情報を先頭一致かけて。Alternativeな行がまたちがうCSS
があたってるのでめちゃくちゃですがこれもゴリ押しで。作り直しはまた後日。 ひとまず階層別に
消えたり増えたりできたので親子関係はそれとなく見えるようになった。

onRowdblclick : function( grid, rowIndex, e ){
var record = grid.getStore().getAt(rowIndex);
var data = record.data['itempath'] + '-tree' + record.data['ID'];
var selectClassname = 'div[class^="x-grid3-row ' + data + '"]';
var selectClassname_alt = 'div[class^="x-grid3-row x-grid3-row-alt ' + data + '"]';
Ext.select( selectClassname, true ).each(function(element){
element.toggleClass('system-common-display-none');
})
Ext.select( selectClassname_alt, true ).each(function(element){
element.toggleClass('system-common-display-none');
})
},


明日から仕事。

ネヨー。

2009年8月4日火曜日

ExtJs-51 Ext.Elementにようやくその4(TreeGridもやめ)

はっ
と気づくと何もせずに1Wたってまう。

ものすごく疲れやすくて自宅でも何もせず。。
でも今日は久々に。

前の続きで
親ID、子IDのテーブル構造で
親子関係を示したい。ってことでした。
TreeGridを見てみると孫とかその辺の実装を変更するとめんどくさそう。

で、結局そんな大変そうじゃないし自力で実装しよー!と先ほど決めました。

親子関係のテーブルを階層化するストアドのサンプルは入手できて大方
カスタマイズしたのであとはもう少しのつめをすれば
階層パスを取得できる。

でも眠いのできょうはここまで。