@thorikiriのてょりっき

@thorikiriがWebとかAndroidとかの技術ネタや本を読んだブログです

.NETラボ勉強会 #dotnetlab に行ってきました

MVVMの話が熱くて感動して漏らしました。行ってよかったです。
以下メモったことを。

Windows Live SkyDriveアップデートとSkyDriveアプリの紹介

いつでもどこでもどんなデバイスでも。
先日機能強化されたのと、アプリについてです。

  • おさらい
    • MSのオンラインストレージサービスです。パーソナルクラウドサービスとも言っています。7Gまで無料で使えます。Windows ExplorerチックなUIとなっています。
    • Officeファイルは25世代前までバックアップされます。

  • Windowsに最適されているパーソナルクラウド
    • Windowsだけじゃなくて、Macでも使える。
    • iPhone, iPad, Android, Windows Phoneでも使えますよ。必要に応じて有料で容量が増やせます。
    • SkyDriveのアプリが出来ました。MSオフィス製品だけでなくて、ODF(OpenOffice)のファイルにも対応しました。
    • 最近はMSに閉じたものではなく、よりオープンになってきているそうです。
    • SNS連携があります。Twitter,Facebook、LinkedInで共有することが出来ます。
    • Windowsエクスプローラに統合(同期)されます。D&Dで出来ます。オフラインでも出来ます。
    • 他のPCのドライブを観に行くことも出来ます。
    • ハードディスクと言うよりは、クラウドのキャッシュと考えられるね。
    • SkyDriveアプリを入れたPC同士であれば、同期していなくても出来ます。
      • WindowsLiveID+セキュリティコードで認証させます。
  • マルチプラットフォーム
    • iPhoneでOfficeを読めます。WindowsPhoneでは編集も出来ます。
    • iPadRetinaにも対応していますよ。
    • Mac版も出ました。for Windowsと同じ機能です。Finderで見れます。
    • AndroidはMSの公式はありません。しかし、APIが公開されていますので、非公式のがあります。
      • MSに聞いたら、何とも言えませんと言う話をされたそうです。
  • Windows8
    • メトロスタイルアプリです。
    • まだ日本語が不自由らしいです。
    • デスクトップ版も普通に使えます。

I--E10なので、D&Dでアップロードとか出来ます。まぁ、ChromeとかFFとかでは出来てたんですけどね。

    • 今まで無料で25G でしたが、7Gまでに変更されます。
    • ちょっと前までは無料でアップグレードできたけど、もう出来ないです。
    • 1ファイルあたりの容量は増えています。

マイクロソフトオープンソース戦略を考える

資料→Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考える

  • 前段
    • オープン戦略です。
    • 肩書きはマラソンランナーです。
    • ここ数年は、標準とか、オープンであることに傾倒しています。さて、何がオープンなんですか?が話題になります。客観的事実を元にしていますが、私感です。
  • 2001年
  • 2012年
    • MS Openness オープンなものにどんな取組をしているのかを言っているサイトがあるよ。
    • オープンソースの専門子会社を作ったりしています。HTML5とか、HTTP2.0とかも関係を持っているよ。
  • オープンって?
    • 移植性、標準、移行容易性、選択肢。MSのエバンジェリスト談。
    • 定義はどこにもないです。
  • IE
    • IE8からW3C標準に変更しています。今まではオレオレ実装でした。実際にはどうかはわかりませんけど。
    • IE10からは標準準拠と相互運用性を謳っています。
  • ASP.NET MVC
    • オープンソースjQuery, Git
    • MVC2 previewからオープンソースになっていいます。
    • 今はMVC3が最新版でCodePlexでソースが公開されています。
    • ASP.NET MVCオープンソースですが、ASP.NET自体はオープンではありません。
    • ASP.NET MVC、WebAPI、WebPagesだけが公開されています。
    • ASP.NET MVC4からはChannel9のGitで開発されているらしいです。
    • 後から作ったものなので、ASP.NETから疎結合に作られているものだと察します。
    • 迅速に開発出来るようにしたいのだと思います。PullRequest出来ます。けど、取り込まれるかどうかはわかりません。
    • MVC4からjQueryMobile, JSON.NET, EntityFrameworkが公開されいるよ。
    • MSもjQueryのコミュニティに関わっています。
  • WebPlatform Installer
    • 開発環境を作るためのコンポーネントを簡単にインストール出来るものを公開しています。
    • MSが作った物でなくてもインストールすることが出来るよ。EC-CUBEとかね。
    • Nuget …VSで使えるパッケージマネージャ。各種ライブラリのアップデートが出来ます。
  • Azure
    • 6月頭にAzureの新機能の動画が流れていましたね。
    • Azure SDKオープンソースになっていますね。パッチを受け入れるような仕組みになっているようです。
    • Linuxが動くようになっていますね。
    • ポータル画面もSilverlightからHTML5に変わっています。
    • .NET, node.js, php, java, python
    • SDKはVS版以外は、MacでもLinuxでもあります。
    • MSがMacOSでGit経由でAzureにインストールするのをやっちゃう世界観。
    • そして、SDKGithubで公開されています。
    • MSなのにCodePlexではなく、Githubです。
    • OSSになっているのはSDKだけで、Azureそのものがなっているわけではありません。
    • Winsows Azure Virtual Machines (IaaS)
    • WindowsServerだけじゃなくて、CentOS, SUSE LinuxUbuntuが使えるよ。
    • Node.jsも大丈夫です!
    • Hadoopも動くようになります。
    • 何でオープンなん?
      • Azureはプラットフォームだからね。使ってもらうためには、MSだけのものじゃ困るわけですよね。
      • あとは、Amazonに対抗するためには形振りかまってられない状況になっているのではないだろうか。
  • C#
    • C#の言語仕様はEcma Internatioalで公開、標準化されている。
    • 共通言語基盤CLIC#コンパイラソースコードが公開されている。
    • Mono。公開されているので、他のプラットフォーム向けでもあるよ。
  • 妄想
  • オープンは正義?
    • Appleの製品とかね。
    • Appleもオープンとか言ってるけど、これがオープンであると言う定義がないからね。

MVVMパターンで理解するGUIアーキテクチャパターン

資料→ugaya40.net

  • イントロ
    • MVC/MVP/MVVMなどのMVCパターンの考え方を学びましょう
    • MVVMは、SilverLightとか、MetroとかXAMLのところです。
    • MVCとか生産性、保守性を向上するためのものですけど、何をもってって言うのは語られていないよね。
    • MVなんちゃらの真ん中のものは橋渡しとして全部一緒になっちゃうよね。納得したような気になるけど、だめだよね。同じに思っちゃうよね。
    • 日本でMVVMが言われだしたのが2年前くらいです。
    • 今日はMVVMを導出していきます。
      • 必要があれば導出が出来るはずです。そうすれば本質がわかるはずです。
    • 本質がわかれば、迷った時も大丈夫。
  • GUIアプリケーションとPDS
    • PDS プレゼンテーション ドメイン セパレーション
    • 責務が分割されていない。例えば、色で意味が分かれてる。
      • 何か操作をする(仕事や睡眠)と疲労度が変わり、疲労度によって色が変わるアプリケーションで説明
      • 疲労度を変更する責務と、画面に何色で表示するかの責務がごっちゃになってる
    • オブジェクト指向一般の話でGUIアプリだけじゃないですね。
    • イベントの処理順にも影響していきますね。UIを変更しただけでDBに保存される値が変わってしまいますね。
    • 状態制御を別のオブジェクトとしましょう。
    • コード自体は長くなります。
    • プレゼンテーションプラットフォームの都合をロジックから分離します。
    • 相互依存だと望ましくないです。なので、オブザーバパターン(イベントオブジェクト)になります。
    • マーチンファウラーたんが言ってる。プレゼンテーションと、”その他”を分けましょう。ここ大事。
  • なんで?
    • 理解しやすい。
    • テストしやすい。
    • 別のプレゼンテーションプラットフォームで動かせる。
    • プレゼンプラットフォームの変更に対応しやすいです。
    • オブジェクト指向の責務の分離の話と同じことになります。
    • 小さい規模だと冗長にはなります。しかし、設計をしないといけないような一般的なシステムの規模では有用です。
  • MVVMとMVC系パターン
    • XAMLプラットフォームの特徴
      • コントロールテンプレート。
      • CSSライクなレイアウトシステムになります。
      • Window.Resourseでスタイルを定義するんですね、確かにCSSっぽい。
      • コントロールの状態に応じた外観を定義することが出来ます。アニメーションも定義でも出来ます。
    • 双方向データバインド。
      • 表示するのに必要な項目だけインスタンスを作ります。
      • GCが来ると見えないところのチェックが消えたりします。
      • WindowsPhoneだともっと深刻な問題になりますね。スクロールすると勝手にチェックしたりしちゃいます。
      • List内のコントロールを使い回しているのが原因だと思われます。
      • チェック状態を保持するためのデータバインドオブジェクトを作ります。
    • XAMLバインディングファーストです。
      • バインディングが前提で作られています。
      • バインドされたオブジェクトが表示されればいいよね。
      • コントロールのプロパティは難しい、カスタムコントロールを作る場合には知らないとだめだけど。
    • XAMLDSL:問題特化言語です。C#とは別の言語を用意しました。
  • XAMLPDS それがMVVM
    • P:XAMLXAMLの都合がある部分 XAMLとそのコードビハインドとバインディングオブジェクト(View, ViewModel)
    • D:関係ない部分です Model
    • ViewとViewModelを分けるのは何故?
      • Viewは楽だからですよ。使い回しが可能ですね。一覧と詳細画面を考えてみてください。Viewは分けますが、ViewModelは同じですよね。
      • ネットワークが非同期が強要されているのです。UIスレッドに戻すのはあれなので、ViewModelを非同期で書き換えて、それがViewに勝手にバインドされるほうがイイね。楽出来るね。
      • MVVMはXAMLプラットフォームの力を存分に引き出す。PDSを促進するものだ。
  • MVC
    • ASP.NETは1画面のものでした。ASP.NET MVCはその画面遷移を担うものだと思う。
    • コントローラの責務も変わってきているよね。
    • プレゼンテーションプラットフォームが変われば、MVC系のパターンも変わりますよ。
    • MVCがありました、それを実現するプラットフォームが変わって進化していきます。これのサイクルです。
    • プラットフォームごとにMVCの説明が変わるので、プラットフォームに合ったMVCの説明を読まないとだめです。
    • MV○の○はプレゼンテーションプラットフォームでどうにか出来ないわがままの部分に対応するものです。
    • Modelの中身にはタッチしません。関与しません。
  • MVC系パターンの学習方法
    • PDSのメリットを手に入れるための手段なので、サンプルコード観てもわかりません。
    • 小さいサンプルでは、冗長さだけが目立ちます。サンプルではめんどくせいと思ってしまう。サンプルを観ただけではね。
    • モデルはモデルだけで、ドメインロジックパターンがあるよ。TransactionScript、DomainModel、TableModuleなどなど。
      • モデル部分を○○でやることによってMV○○だ!みたいな事を言う人もいるけど、そこは別に本質的ではないです。
      • ドメイン部分はドメイン部分でシステムに最適な方法をとればよいです
    • サンプルで学ぼうとすると無理が生じるよね。
      • 実装上の選択に過ぎないことを、サンプルで見てしまうと、そうしないといけないものだと思ってしまいます。
      • なので、ちゃんと概念から学んでいきましょうね。
      • プラットフォームの特徴をよく学んでいけばわかってくるよ。
  • まとめ
    • PDS プレゼンテーションに関わる部分と、それ以外に分けるものです。
    • MVCは各プラットフォームに合わせたPDSを実現することでOOPのメリットを教授するためのものです。
    • ViewModelやコントローラは可能なかぎり薄くするべきです。
      • 一度責務を追加してしまうと、あれもこれも入れたくなるのが人情。
    • 楽をするためにPDSをするわけですから、理解したうえで、メリデメを考えてPDSを崩すことも考えておいてください。順守するとは言わずに、考慮してやるのが大事です。
      • PDSをするのが目的ではありません。

ライトニングトーク&ディスカッションタイム

ASP.NET サイトを無償で動かす

資料→InvitationToAppharbor - Google スライド

  • Azureは無料期間があるけど、過ぎたら有料になっちゃうのが嫌だよね。
  • Appharborなら無料で出来る。ASP.NETのサイトを無料で動かすことが出来るよ。
  • Azureだと専用に作らないとダメだけど、Appharborは既存のプロジェクトのでも大丈夫。
    • .NET版のherokuです。
  • Git経由で送ります。単体テストがあれば実行され、パスしたら公開される仕組みになります。
    • SQLServer, MySQL, MongoDBのサポートがあります。Node.jsも作れます。
    • ログ監視やメール配信機能もあるよ。
    • 7.3締切りでコンテストがあるよ。景品があるけど、海外から送られてくるから作れるかどうかわかりません。
15 Years ago MFC
  • 昔からDocument Viewアーキテクチャってのがあった。
  • さっぱりさっぱりでした!
HDDを再利用しました

資料→.NETラボ勉強会 LT資料公開しました。
マニアックすぎて過ぎてわからなかった。

Sample Browser
  • MS公式サイトの色々なところに散乱しているサンプルコードを一括でみれるもの。
  • CodePlexを参照してね!
  • ダウンロードしてインストールしてね。ダウンロード先だけは設定してね。
  • 使ってみてください。現在日本語化中らしいです。
Win7Win8が×になるPCがある
  • Preview版が公開されたので、インストールしてみたよ。
    • 余ったパーツで組み立てたけど、Win7はOKだったけど、Win8は入らなかった。
    • オンラインインストールしてみた。
    • システム要件を満たしていませんとか言われました。CPUが悪いそうです。
    • 1GHz以上って制限だけかと思ったら、きつくなってました。
    • Socket478のCPUは全滅する。
.NETとRを繋ぐR.NET
  • R言語は統計処理に特化した言語です。
  • Rを使うためのラッパークラス。R.DLLのラッパーです。
  • R.DLLは複数インスタンスを作れないのが難点です。解決の見込みは立っていません。

Developer's Guide to Microsoft Prism 4: Building Modular MVVM Applications Using Windows Presentation Foundation and Microsoft Silverlight (Patterns & Practices)

Developer's Guide to Microsoft Prism 4: Building Modular MVVM Applications Using Windows Presentation Foundation and Microsoft Silverlight (Patterns & Practices)