kagamihogeの日記

kagamihogeの日記です。

わんくま同盟 福岡勉強会 #2

8/16 に福岡へ遊びに行ったついでに わんくま同盟 福岡勉強会 #2 に参加してきました。

以下、各トークセッションの内容について。自分の所感・意見と発表者の発言やプレゼン資料の内容ごちゃ混ぜに書くので読みにくい点が多々あると思います。日本語崩壊してる部分も多々です。自分用の備忘録的な意味合いの強いエントリなので、そのあたりの読みにくさについてはご容赦願います。

わんくまについて

UST 中継、MISAO による実況中継アリと相変わらずです。そういえば昨日・今日・明日とコミケなんだけど、結構人居てちょっと驚いた。

「はじめよう asp.net with Sql Server Compact」

「さかもと画伯は好青年でした」と書くように、とスピーカーのさかもと氏が言ってました。

この業界、犬派と猫派どっちが多いんかね。確かに、猫飼ってる人多そうなイメージがあるが……

スピーカーによると、ASP.NET の詳しい話というよりも ASP.NET を知る人を増やして、スピーカーに色々教えてくれる人を増やしたい、という趣旨の発表とのこと。ASP.NET を仕事で使ってる人はそこそこいるだろうから、ホビーで使う人も増やしたいな、と。こういう発表もアリなんだねぇ。

会場で簡易アンケート。「ASP.NET で開発したことある人」約 3/19 人。ASP.NET は意外と敷居が高い? 単に知られてないだけ? 「PHP 触ったことある人」これは結構多い。会場では、ASP.NET より PHP のほうが敷居低い(ようにみえる)理由として、レンサバで使える、情報量が多い、なんかカンタンそう、って感じでした。perl もまだまだレンサバで使えるとこ多いみたいですね。

google の情報量比較―単純なヒット件数比較―に関して、いくつかの言語で比較していたけど、やはり PHP がダントツ。

ASP.NET は始めるのが難しい? 開発環境は Visual Studio 2008 Express Edition が無償提供されており、スピーカーによると、とりあえずさわってみる分にはコレで充分とのこと。VS での開発ならサーバーはインストールは不要。つまり、IIS 無しで良い。ただ、最終的には配置や権限とか考えないとダメなんで、本番で使う場合にはそこんとこ注意、だそうです。

とまぁ― VS 入れないといけないとはいえ―割とカンタンにスタートアップできるんだけど意外と使われないのはなぜ? 会場では「モバイルコントロールの対応が甘いんで、ケータイ開発はちょっと辛い」などの意見が。

レンサバでも ASP.NET 使える場所は僅かながらあるのだとか。わんくまのサーバは、申請すれば ASP.NET アプリ置かせてくれるそうです。

わんくまのはつね氏が i-mode Twitter ってのを ASP.NET で開発してるのだそうで。もばついと違うのはクッキーレスで比較的軽量とかなんとか。でまぁ、こういうアプリが ASP.NET で使われるようになれば、裾野も広がって行くんではないか、とかなんとか。でもまぁ……このテの用途で LL 系の牙城崩すのは厳しいだろうねぇ……

SQL Server Compact って製品がある。SQLite のよーな軽量 DB みたいな代物なのだとか。スピーカーは ASP.NET + SQL Server Compact を実験した、とのこと。ただし、この組み合わせは、MS 的には推奨しない方法。そのため、接続可能であるけれど、あくまでも「やってみた」だけのことなので注意が必要なようです。試行錯誤した中のエラーにも「SQL Server Compact は ASP.NET 開発用ではありません」というのが出てきていたことからもその辺りの事情について伺える。

SQL Server Compact の DB は SQL Server Management からファイル参照すれば見ることができる、とのこと。ただし SQL Server Management 2008 でないと見れない模様。VS2008 からも参照可能。また、SQL Server Compact は一度テーブル作ると変更が出来ないとか、まぁ色々制限があるようです。

SQL Server Compact 3.5 からファイル暗号化モードがついた。ファイルとして DB 配布するんで、この機能が無いとマズいこと多いんだとか。SQL Server Compact は DB 単位で 1 ファイル。要は access でいうところの *.mdb がある、ということのようです。

LINQ to SQL でも SQL Server Compact に繋ぐことは可能だそうです。

SQL Server Compact はファイルサイズは 4 GB まで。件数的には 3 万件ぐらい。ただ、ファイルサイズが 200MB 越えるあたりで VS から中身を参照するのがかなり辛くなるそうです。実質的にはファイルサイズ 50MB ぐらいでないと厳しいのだとか。IRC のコメだと「素直に SQL Server Express 使えー」なんてのも。

deployment fist のススメ

ちゃんと配置考えましょう、な話。

スピーカーの自己紹介。約 20 年の選手なのでインストーラ関係の履歴だけ紹介されていました。最初は、MS-DOS のスクリプトベースの汎用インストーラ開発、win 3.x から 95 では Install Shield が ** だった関係で自社開発(COM とかがちゃんと入らなかったりしたらしい)。そして、Install Shield が自社案件では色々厳しい点が出てきたため、XP になったら Windows Installer に切り替えした。が、IS-MSI は色々 ** な点があり、Wix2 というオープンソースも利用している、とのこと。とはいえ、べつに主業務がインストーラ開発ではないんだとか。

インストーラの役割とは、製品を起動するために必要なデータを適切な場所に配置する、自分が配置した製品の更新、削除、を行う。インストーラの仕事は起動するところまで。実行とは切り分けて考えないといけない。

インストーラが必要なときとは、開発マシン以外の環境で動作させる必要があるとき。テスト環境とも考え方は別にしなければならない。開発マシン以外の環境とは、ビルドを行わないマシンのこと。俺の解釈では、お客さんとこのサーバ等のマシンでポチっとすればおk、って状況作るもの、ってイメージかな。

製品ライフサイクルの各要素についての解説。ここで重要なのは、インストーラも製品内のイチアプリケーションである、と認識するのが大事、とのこと。

インストーラが関与する設計とは? Windows Installer 等のテクノロジの選択、配置からみた製品構成の検討。たとえば DLL は GAC にいれていいか、配置構成に合わせたプロジェクトの構成など。たとえば、DLL を GAC に入れるならアセンブリにしないとね、という感じに配置と製品構成が決まってくる。

インストーラ設計での注意点。市販だろうと業務アプリだろうと、インストーラが一番最初にユーザーが利用するアプリであることを認識するのが重要。第一印象は重要ということです。また、インストーラはどのような形であれシステムを変更する。そして、インストーラに失敗は許されない。モノは良くても、ってヤツだね。そういやなんかのエロゲでシステム巻き込むヤツあったよね。このため、機能追加、機能削除とかの変化を前提とした設計が地味に重要になる。

起動するまでの準備を整えるインストーラと、初回立ち上げ時にセットアップすべき仕事は切り分けが大事。

インストーラのバージョン管理。.NET Framework 使った開発の場合は、ファイルバージョンが対象であって、アセンブリバージョンでは管理しないことに注意、だとか。俺はちょっとこの辺の MS のテクノロジの話はちょっとわからんかったです。

バージョン管理は製品管理の基礎。管理のタイミングは開発マシンの「外」に出た時点で行う。つまりは「ビルド」したときに管理する、ってことです。このへんテキトーにやってること多いよね……

修正。プログラムの修正に合わせてインストーラも修正が入る。

更新。これは配布と配置の特殊系と捉えるべきだそうです。異なる点は、製品がそのマシンにすでに入ってるか入ってないか。

……スピーカーがホワイトボードに書いた製品ライフサイクルの図見てると、開発フェーズってソフトウェア開発の一部分でしか無いんだなぁ、とつくづく感じる。運用フェーズを考慮に入れることってやはり大事だなーと。インストーラが絡む部分って実は結構多いんだなぁ、と思いました。

更新する際に注意する点。絶対にバージョンダウンしない。同じものを更新しない(ムダなことはしない)、更新対象はファイルだけとは限らない(レジストリとか)など。

後始末。配置したものを撤去する作業。実は、アンインストール&インストールなんてこともあるので、後始末というか、インストールの前準備的な意味合いを持つこともある。

まとめとしては、インストーラは製品ライフサイクルに与える影響力は大きい、ってことかと。私的にはかなり興味深いセッションだったんだけど、受託開発やってないとイメージが出来にくい話だったかもしれないな、と思いました。

LT

WPF ってこんなに面白い(ハズ)〜Xceed DataGrid for WPF 編〜

スピーカーは FileMaker 使ってたけど限界感じたので C# を勉強し始めました、とのこと。ちなみに俺は「WPF って何?」ってレベルです。

なぜ WPF か? 思った以上に便利、記述方法が非常に理解しやすい……気がする、だそうです。

Xceed DataGrid って何? 見栄えの良い DataGrid で GUI で色々設定できる。DataGrid って名前だけど CardView もある。CardView って口じゃ説明し辛いなw 何て言えばいいんだろう。

わんくま同盟勉強会の様子

勉強会はどこで開催しているの? 東京・大阪が大多数、名古屋と福岡で数回。TechEd 翌日に横浜、あとは 11 月に富山予定。現地でお手伝いしてくれる人が確保できればどこでも開催を考えるよ、とのこと。

UST 流してるけど、特色として、IRC のオープンチャットをプロジェクタに流している。別プロジェクタでチャットログ表示してるのも良いな、と思う。

勉強会の内容は色々。.NET Framework 関係が多いけど、SQL Server とか言語ネタとか、WPF みたいな新しいモノのネタもあるし、プログラミングじゃない話、カメラとかファッションのネタも過去にあったりしたようです。

スピーカーもわんくま同盟外の人を呼ぶこともある。

……というようなことを今月末にやる TechEd で話すそうです。

何ビット立ってるか数えてみるレース

スピーカーはいわゆる電気屋さん。今は PLC やってるそうです。

アルゴリズムを 4 つ用意して実装して速度比較。再帰(純粋ループを改良した感じ)、素朴な numOfBits、 numOfBits(改良版)、8 bit テーブルで比較。とりあえず再帰に比べると他 3 つは圧倒的に早かった。

個人データ登録システムの構築

わんくま同盟の個人データ登録システムの話なのかな? 最初ちょっとボーとしてて、何のためのシステムなのか? っていう部分聞き逃してしまったw 要件の整理、画面案、機能仕様などについてのハナシ。

で、スピーカーによると LT が突然振られたようで、LT 用にプロトタイプ版みたいなのをとりあえず作成したそうです。で、それのデモ。データ永続化は、DB ナシのオンメモリのみ。ガワは一応出来たけど、中身までは 15 分では作れなかったそうです。

「Hot To WPF アプリケーション Part3」

WPF って何ぞ? vista 向けに開発された .NET 3.0 で動く windows クライアントプログラムの一形態。いちおう Windows Forms の置き換え。ただまぁ、まだまだこれからの技術のようです。記述言語は XAML(読み方:ざむる) ちなみに SilverlightXAML を使う。 互換性はあるわけではないけど、記述形式とかの見た目は同じらしい。

Part1 は Button と TextBox を使ったカンタンなアプリ作成。INotifyPropertyChaned インタフェースと NotifyPropertyChanedBase がキモだったようです。WPFイベントハンドラはこいつらを使う、って感じなのかな? データバインディングの話だったんだろうかね?

Part2 はコーンバターコンバーターとラジオボタンの制御について。コンバータとは、画面コンポーネントとバックで処理担当するクラスの間に何か挟めるようにする仕組みのこと。フィルターって感じかな?

XAML は、俺がここのところ Flex さわってるせいか MXML と似たようなものに見えました。

次に、コンボボックスを配置するデモ。

データバインディングについて。コンボボックスのデータを直書きせず、バックに存在するデータを保存してるクラスのデータと結びつける方法。Flex だと @Binding とかでやるのと似たようなところの話かな。データバインディングがどんだけ楽に出来るかどうかで、サクサク開発できるかどうかに響いてくるんだよねぇ……

で、WPFバインディングはどんな感じかというと。解説のデモではデータクラスに対する getter/setter の中で firePropertyChange を呼ぶやり方を示していた。個人的には データクラスに getter/setter 持たせるやり方は……まぁ許せるかなー。Struts の ActionForm みたいな感じで受け入れられる人多そうだし。でも、うーん…… Flex に比べるとちょっとメンドウな気が……まぁ Flex も双方向のデータバインディングがちょっとメンドウだったりと決して何もかも完璧でもないんだけど。個人的には Flex は yui-frameworks がそこんとこがんばってくれるハズ、と期待してるんだけどw

WPF のデータバインディングは、画面コントロール側で ItemSource={Binding Path=rows} と書く。これはなんというか、ASP.NET で runat="server" って書くのと似た匂いを感じる。IRC のチャットログに「もともと ASP.NET のコードビハインドからきてるからね<WPF」ってのもあった。なるほど。

IRC のチャットログに「デザイナーさんがかわいそう」なんてのも。そいや 2ch のコピペブログに Adobe 製品大杉! って Adobe 系の製品で食ってるデザイナーが嘆いてるスレあったけか。Flex っていうか ActionScript 3 はデザイナーよりも Java とか C# プログラマーを取り込む目的で出してるんだろうけどね。

デモの 3 つ目。データテンプレートが良くわかんなかった。Flex コンポーネントみたいなものかな、と思ったら違うし。

Snoop っていう XAMLコンポーネントツリー(って言っていいのかワカランけど)であるところの VisualTree を表示してくれるツールは便利なので使うべき、とのこと。FireBugs とかみたいにレンダリング結果の DOM ツリーみたいに XAML を表示してくれる、ってイメージでいいのかな。

まとめ。データバインディングは本格的にやるなら今日紹介した以上のやり方はいくつか用意されている。ただ、まぁ、結構厄介なんだそうです。

「夏休みの自由研究:Silverlight 2」

スピーカーは XAML 好きな人だそうです。

Silverlight 2 とは? MS の Web ブラウザ用プラグイン。Adobe Flash Player と同じ類のモノと思えば良いのかな。windows 以外にも Mac OSX, 将来は Linux, windows mobile などでも動作する予定。開発言語は XAML, javascript, C#, VB, Iron Python, Iron Ruby など。Iron って頭につくのは MS が実装したブツのことだそうだ。

Silverlight 2 の歴史。2007.09 に Silverlight 1.0 正式版発表。 今のところまだ Silverlight 2 は Beta 2 止まり。2008 中に 2 が正式リリースされるかどうか、といったところらしい。

Silverlight 2 Beta 2 の開発環境。VS2008 professional edition(90 日間評価版)に VS2008 用 Microsoft Silverlight Tools Beta 2 を入れると VS 上で開発できるようになる。もしくは Microsoft Expression Brend 2.5 というモノでも開発可能で Intelisence For Expression Brend なんてのを入れるとインテリセンスが利くようになる。

VS を使用した Hello world 作成のデモ。Silverlight のソリューション作るときに、配置用の web プロジェクト作る設定を選んだ場合、web に配置する用のプロジェクトと XAML とか書いてくプロジェクトの 2 つが出来る。画面のコンポーネントの配置は D&D ……はまだできない。ココはちょっとイケてないですな。

見ててちょっと思ったんだけど。VS 上で起動するとデバッグ用の IIS が毎回起動したりなんだりでダルくなったりしないのかな?

VS は Silverlight を配置する *.aspx と *.html を両方出してくれる。IIS でなく Linux サーバとかに配置する場合も一応視野に入れてるってことなんだろうかね。

次は Expression Brend 2.5 のデモ。こっちはドラッグ&ドロップとかが出来たりして、画面周りの作成機能はこちらのほうが充実してる印象。ただ、コードをゴリゴリ書いたりと開発するツールでは無いようです。

Expression Brend 2.5 のステート(Visual State Manager)ってものを使用して独自のボタンを作るデモ。GUI 上で色とか大きさとかの設定できるんだけど、その範囲内で拡張設定を施したコンポーネントを定義できるようだ。また、マウスオーバーしたときとかのイベント発生時にどんな表示にするか、もこの GUI ツール上から設定できる。マウスオーバーしたときに 2 秒間かけて表示を切り替える、って設定がカンタンに出来ますよ、ってデモは結構クールだった。Flex Builder というより Dreamwaver とかに近いイメージのツールな気がする。「タイムライン」なんてのがあるし。

最後に Deep Zoom Composer(詳しくは http://silverlight.net/GetStarted を参照)のデモ。イメージ編集ツールなのかな? 文章ではなんて説明したらいいか難しい……デモでは、画像を 3 つくっつけてパノラマ仕立てにした画像を作る、という作業をしていた。作業完了してエクスポートするとプロジェクトが作られる。すると、画像のズーミングや移動みたいな google maps モドキな Silverligt アプリの雛形をカンタンに作ることができていた。

Silverlight 2 の最新情報。MIX essentials."Silverlight Day" が 10/10(金)に開催される。

「わさわさと WPF - ソースコードと要点で学ぶ WPF の活用」

平成生まれってすごいな。いや、本人はなんとも思ってないんだろうけどオッサンな我々はどうしても反応しちゃうんだよねw

セッションの目的は、データバインディングの習得、とのこと。デモとして Wassar の WPF クライアントを用意してきており、その製作過程と実際のコードを通しての解説が本発表の骨子。

なぜ WPF なのか? Windows.Forms はデモでやってるような GUI の作りこみは苦手らしい。それと、WPF はデータバインディングが強力。これは俺も Flex で体験してるけど、自力で書くと Observer イチから作りこむことになったりして、結構メンドイのよね。

後は WPF の細かい機能をいっこずつ解説。気になった部分やわかったーな部分だけメモしてます。

StaticResource と DynamicResource の大きな違いは、DynamicResource は遅延評価がされること、とかなんとか。よくわかんなかった。

x:Static - public クラスの public static フィールドを参照できる。Java でいう static インポートを想像したんだけど、何か違うっぽい。

スタイル - スタイルを使うとコントロールなどの規定のプロパティを設定できる。ってことは、機能的には ASP.NET でいうところのテーマに対応する感じのものなのかな? が、イベントハンドラを定義できたりするあたり、やっぱ何か別物っぽいなぁ。

ContentControl へのデータバインディング。 何を(Source と Path)、いつ(UpdateSourceTrigger)、どのように(Mode と Converter と ValidationRules)を設定する/できるのが肝要。

個人的な感触として、Windows とバシバシ連携するコードが沢山必要なら WPF はそれなりに書きやすそうな感触(当たり前かw)。実際、デモではシステムにインストールされてるフォントのリストを出してたけど、データバインディングを数行書くだけみたいだし。

データテンプレート(DateTemplate)の役割というか使い方がよくわからん……

WPF のデータバインディングは確かに便利だけど、ちょっとゴチャゴチャしちゃってる印象を受けた。なんとなーくな印象で書いちゃうと、WPF のデータバインディングFlex より高機能っぽい、が、記法とか使い方が複雑になってる感じがする。でもまぁ windows の場合、過去遺産との整合性取らなきゃならん部分もあるだろうからなぁ。昔から windows の開発してる人は逆に違和感を感じなかったりするのかな?

「匠の伝承w マルチな時代の設計と開発 パート 2」

まず前回のおさらいから(俺は前回聞いてないけど)。開発者はソフトウェア開発をプロセス指向にとらえがちだが、ソフトウェア開発は時間軸という状態に応じて色々と切り分けをすることが重要、という話だったらしい。

今回は、全体を通して、プログラミングの基本的な原理・原則の話―特に状態遷移に関して―だった。

ファイルの転送を例にとって、同期処理から非同期処理へ考え方を切り替えていく感じの話し。ただ、どっちかっていうと、同期/非同期というより、一度にひとつのことをしましょう、っていうプログラミングの原則の話になってたと思う。

意外と状態遷移図知らない人多かったりする。そのテの勉強してれば当たり前に知ってることではあるんだけど、こういう理論的な部分を語ってくれる人中々居なかったりするからなぁ。最近だとイベントドリブン(で非同期に動く)部分は言語や API でサポートされてて、アンマリ意識せずにすんじゃったりするし。こういう「講義」みたいな発表があってもいいのかもなーとか思いました。

で、ちょっと、ていうかかなりスピーカーの話は飛んで…… State パターンで状態遷移を実装する話に。発表で使用していた状態をスイッチする図はかなりわかりよいと思う。インタフェースは同じでも状態に応じて振る舞いが切り替わる、っての大事なわけだし。

この発表のデータ転送を State パターンで書いてみた、の実装例の解説に関しては省略。詳しく勉強したい人は Head Firstデザインパターン ―頭とからだで覚えるデザインパターンの基本 とか読みましょう、ってことで。あと、俺には C++ っぽいコードの実装例は中々新鮮でした。