Perfect Day #007 参加してきました♪

いや〜、濃密な一日だった!ものすごいリフレッシュできました!
というわけで、記憶に留める為にも、メモを元に1日を振り返ってみたいと思います。

どこまでメモれるか分からないが頑張ってみる。
ウソ書いてあるかも。

12:18
	自分早く到着しすぎ。

13:13
	セミナー開始
	小堤氏ご挨拶
	レジュメ
		<目的>
		基礎技術の共有
		開発者同士のネットワーク構築
		<時間割>
		1.書籍配布、最近のこと。
		2.Modan Javascript
		3.懇親会?
		4.ライトニングトーク
		5.NextJS関連
		6.Ext.Draw, SVGチャートクラス, Sencha Touch Chart
13:21
	1時限目の前に。オリジナル扇子をプレゼント。
	げっと。

13:25
	1時限目開始。
	「ExtJS 4 実践開発ガイド」配布。
	げっと。
	イギリスでSenchaカンファレンスがある。
		Sencha Touchについての発表があるとのこと。
		ExtJS4とSenchaTouchでクラスシステムの齟齬が発生している?
		ExtJS 4.1がもう少ししたら出るらしい。レイアウトまわりがかなり変わるとかなんとか。。
	発表1
		ExtJS4 API Documentation 日本語版、本日から提供開始。(ただし全部ではないとのこと)
			http://docs.xenophy.com/ext-js/4-0
			「本家の方で多言語化しろよ」と突っついてるらしい。
	発表2
		NextJS 0.8.xリリース。
		       ExtJS、Sencha Touchの最適なアプリケーションサーバーを目指している。
		       初の安定版。
		       後で詳細の紹介をする。
	発表3
		ExtJS 4 実践開発ガイド2
		ただし1冊目の売上次第で中止する可能性も。。(困るぜ)
		1冊めは本当に基礎。2は実際に業務で使ってる人が、「その先が知りたい」となるトピックがメインになっている。

14:08
	2時限目開始。
	Modern Javascriptについて
	現代における適切なjavascriptのコーディング手法
	
	型
		データ型
			プリミティブ型	数値、論理値、文字列、日付等・・・
			オブジェクト型	オブジェクトリテラル,関数型,配列型
			(値渡しか参照渡しかの違い。)
	Ext.isXXXXXというメソッドを使って判定する。
		typeof使うとオブジェクト型と配列型を区別できない。
		そこらへんを全部うまくやってくれるのがこのメソッド。
		だから使え。
	オブジェクトリテラルとJSONの違い
		オブジェクトリテラル
			プロパティ名(キー名)にシンボル?を指定できる。
			ファンクションオブジェクトをマッピングできる。
		JSON
			プロパティ名(キー名)に文字列しか指定できない。
			ファンクションオブジェクトをマッピングできない。
	プロトタイプと関数オブジェクト
		プロトタイプ
			オブジェクト.prototypeで new されたオブジェクトにも
		関数オブジェクト(ファンクションオブジェクト?)
			new で新しいオブジェクトを作成できる。
	プロトタイプ宣言されたものをインスタンス化すると、消しても復活するゾンビ。
		プロトタイプで宣言したプロパティやメソッドは、
		削除しても該当オブジェクトは元になったオブジェクトのプロトタイプを見にいくため、残っている。
		気をつけよう。
	スコープ、関数実行方法の種類
		2-1.jsを参照

	クロージャーとガーベッジコレクション
		クロージャーに関してはsetIntervalを使った説明をされた。
		クロージャーは理解してるからメモはいいや。

	ExtJS 4 クラスシステム
		2-2.jsを参照
	      	Extの名前空間
			windowはグローバルスコープで、記述するとき省略できる。
			javascriptには言語仕様に名前空間がない。
			なので、window.[独自オブジェクト]で、このオブジェクト配下に必要なものを展開し、
			独自オブジェクト名を名前空間的に使用する、という工夫が必要になっている。
			(昔は平気でグローバル領域汚染してたな。。)
		Ext.defineによるクラス定義
		extendによるクラス継承
		mixinsによる多重継承
		静的メンバ
		シングルトンクラス
		Ext.Loader
			bootstrap.jsが主流になるでしょう。
			この中でExt.Loaderがバリバリ使われている?
			開発する時、夥しい数の全てのクラスをロードするのは非効率極まりない。
			それを回避するのがExt.Loader。
			こいつの設定さえちゃんとすれば、開発対称としたいコンポーネントに必要な最低限のクラスをロードするだけで済む。
			結果的に開発効率がアップする!
		requireによる先読み込み
			強制的にロードさせるメソッド。
		Ext.override?
			既に定義されているクラスにバグがあった場合、クラス定義本体を変更するのではなく、
			そのバグのあるメソッドのみを上書きできる機能を提供する。
			基本的には乱用しちゃいけない。主にパッチを当てるような感覚で使うが吉。

	コンポーネントモデル
		コンポーネントってHTMLエレメントの集まりであること。xtypeによる遅延インスタンス化。
		遅延レンダリング
			★今Decsheeで発生している「タブが描画されない」問題はこれを疑え!!
			→小堤氏とお話できて、「デファードレンダー」というキーワードを教えていただけた。
			→「http://d.hatena.ne.jp/Tommy1/20090424/1240591921」発見!
			→TabPanel.layoutOnTabChange を true にすると幸せになれるらしい!
			→帰ったら試してみよう。姪っ子がPCいじるのを許してくれればだけど。
		状態管理
			ステートメントマネージャーというのを使うと、前の状態のジオメトリパラメータ的なものがCookieに保存されているので実現が容易。
		クラスエイリアスとの関係
		コンポーネントクエリーの利用。
			jQueryのセレクターのようなもの。超便利。
			使え。

	コンテナーとレイアウト
		めちゃくちゃいっぱいある。
		使いこなせるようになるとおしゃれなプログラマになれると予想。
		使わなくても、なぜそのレイアウトが存在するのか、存在意義を知っておくことは重要。
		できることとできないことを明確にしておくと、頭の中で整理しやすいと予想。

	データモデル
		モデル定義とストア
		データプロキシ
		データリーダー
			xmlreader
			jsonreader
		データライター
			xmlwriter
			jsonwriter
		アソシエーション
			リレーションができるようになった。
			ツリー構造を扱えるようになった。
			データの変更でイベントを扱えるようになった。
			なので、データを変更すると、ビューやチャートを描画し直し、データをサーバに更新しにいかせることができる。
			超便利なので使え。

	テンプレートとデータビュー
		Ext.Template
			簡易版
		Ext.XTemplate
			拡張版
		カスタムフォーマット
		サブテンプレートと再帰テンプレート
		データビューとテンプレート

15:50
	3時間めまで入っちまったが2時限目の内容終了。
	小堤さんの名刺は頂きたい。
	げっと。
	ExtJSの仕事したい。。
	できないことばかりでスケールもしないSharePointはもう嫌だ。。
	ExtJSの仕事できなくてもせめて定時に帰らせろ。

16:41
	4時限目開始
	ライトニングトーク1(ExtJS 4 における Ext.Direct)中村さん
		Ext.DirectのRPCを使う
		StoreとDirectProxyを使って連携
		MVCアーキテクチャーでどう使うか。
		MVC Architecture Tutorialを翻訳してHPで公開してくださっている方!
		多分、俺も過去参考にさせて頂いた人だ!!
	ライトニングトーク2(Ext.Direct for Ext JS 4)小堤さん
		JsonProvider(親クラス)
			PollingProvider(派生クラス)
				一定期間内にリクエストを投げつづける処理を行う為のプロバイダー
				ExtDirectのリクエストが他に重なっても1リクエストで処理してくれるという利点がある。
				
			RemotingProvider(派生クラス)
				サーバサイドのAPIを公開し、APIを直接クライアントサイドのExtJSから呼び出すことができるプロバイダー。
				サンプルを元に、動きとAPIの定義の仕方を見ていく。
				超便利そうじゃん。
				サーバサイドは何の言語でもOKってことか?記述の仕方のルールがあるのでは?
				ExtDirectのリクエストが他に重なっても1リクエストで処理してくれるという利点がある。
				ポータル画面なんかで複数のAjaxリクエストが同一タイミングで発生する場合、
				ガジェット毎のリクエストをルーターがまとめて1つのリクエストにしてくれる。
				サーバの負荷もブラウザの負荷も軽くなり、よいことずくめ。
				デメリットはルーターを理解して実装する初期コストぐらい。(んなものデメリットって言えるかぁ)
				絶対使え。
	ライトニングトーク3(Ext.core.Elementの活用)浅野?さん
		ExtJS4で増えたメソッドについて
			Ext.Fx(アニメーション関係が混じっている)
			純粋に増えたのは22個。その中で静的メソッド11個を説明
			便利そうなものが多かった。

18:XX?(開始時刻忘れた)
	5時限目開始
	NextJSについて
		色々伺った結果、node.js + express の構成より使い勝手が良さそう。
		安定版もリリースされたし、小堤さんとコンタクトとれるようになったので、
		decsheeはNextJS上で実装する事にする。

	Ext.Drawの利用
		SVG(Scalable Vector Graphics)
		VML(Vector Markup Language)
		ベクターデータを扱うクラス群が定義されている。
		具体的にコンポーネントとして描画領域が提供される。(Ext.draw.Component)
		描画するコンポーネント?はExt.draw.Surfaceとして提供される。
		実際のベクターデータはExt.draw.Spliteで管理される。
		surfaceの中にspriteが多数存在して複雑な描画をするイメージ?
		Ext.chart
			SVGチャートクラスの利用
			Ext.Drawベースのチャートクラス
			前はFlashが必要だったが、4からはブラウザ標準機能で実現できるようになった。
			実はFlashってもはや将来的には風前の灯火?詳しくは知らんけど。

	ExtJS、Sencha Touchの今後?

19:01
	セミナー終了。
	ごちそうさまでした。


19:XX(時刻忘れた)
	食事会開始。
	思い切って隣の方に話かけてみる。
	最近SharePointとInfoPathとWorkspace(全部Microsoft製品)のせいでかなりやさぐれていたので、
	思いっきりMicrosoftをdisる。(みなさんすいませんでした。。)
	お話できた方の中には、ExtJSを業務で使用している方はいなかった。残念。
	MVCモデルについて改めて考えさせられた。もう一回設計しなおそう。
	MVCモデルについて話てくださった方が、「こういう話を会社でしたいのに」と言っていたのがすごく印象的だった。
	俺もそういう話を会社の人としたいけど、全然反応わるいんだよなぁ。。
	あとMVCモデルの話を聞いて、部品としてカスタマイズしたExtJSコンポーネントを 
	MVC Application Architecture で実装できないかもう一度調べてみようと思った。
	今はサンプルコードもViewportを使うことが前提になっているけど、それ以外の例えばPanelとかでも同じように実装できるのか?
	早めに帰宅しないとヤバイので21時ちょい過ぎぐらいにおいとま。
	食事会でお話できた方々と、最後に名刺を交換させて頂いた。

まとめ
何を使うと幸せになれるかという情報が得られたこと、
基礎から学べる書籍を得られたこと、
今decsheeでぶち当たっている問題を解決するためのキーワードが得られたこと、
MVCモデルのもっと踏み込んだ話が聞けたこと、
いろいろな方と話ができて、「多分俺は間違ってない」と思えたこと。
すっっっっっっごく有意義でした。

自分は骨の髄からの田舎者なんで、東京では生きていけないと思いますが、
東京のひとはいいなぁ。こういうセミナーとか勉強会に気軽に参加できて。

あんまり東京には行けないから、twitterのアカウント作ります。
みなさんよろしくお願いします。