ふっかつ
前回書いたプロ生の後風邪引いたりちょっとやっつけコードを書いていたり日々外出したりですっかり忘れていましたが遅くなってしまいましたが、いくつかネタを書いていきます。
MfA session at 4/7 プログラミング生放送(プロ生)終了
先日書いていたとおり4/7はプロ生でMono for Androidのネタをしゃべってきました。gihyo.jpにレポートが上がっているようです。
http://gihyo.jp/news/report/2012/04/1301
地味ですが当日発表した資料はこちらにあります(当日twitterでしゃべる前に流したやつと同じです)
http://dl.dropbox.com/u/493047/2012/04/MonoforAndroid20120407.pdf
今回はMono for Androidについて話をするのは約半年ぶりということで、大まかな紹介をmonoのレベルから始めてサンプルを動かして内部解剖の話をする、でも基本的にMfAと関係ない話はしない、という構成にしました。id:atsushieno:20120321:p1 でも事前にさらっと書きましたが、わたくし基本的に「ユーザー向け」の話で終わらせない主義なので(マーケティングの仕事でしゃべっているわけでもありませんし)、MfAには関心が無かった/無いがAndroidの話としては興味がある、という人にも刺激になるよう、今後も似たような機会があれば話に盛り込んでいくつもりです。これをやると「難しくて全然わからんかった」という反応と「これは面白かった」みたいな反応がだいたい同じくらい見られて、概ね期待通りになります(今回はアンケートの回答を見せてもらえたのですが、そんな感じでした)。
デモはネットワークが不調だったり前日にやった時には引っかからなかったような問題を踏んだりと、個人的に踏んだり蹴ったりな失敗例だったのですが、サンプルは公開リポジトリにあるのでソレを見てみてください。MfA 4.1は前日リリースでしたが、UI designerはリリース前日版というわけではなかったし、当然ながら中の人特権で最新版で準備していたので、そういう問題ではありませんでした。(スライドの中身未発表のネタじゃねーか!どうすんだよ!?っていうプレッシャーはありましたが…)
ちなみに最後に出てきたおまけの話ですが、基本的に4月いっぱいが期間ということになります。
懇親会でもmonoの勉強会的なことをやってほしいという話をいただいたのですが、自分でイベント立てて予約とって人集めてとかもう本当に面倒で仕方ないので…勉強会をやるのでしゃべったり参加したりしてほしいということがありましたら少人数とか非公開とかでも気軽に行きますので声をかけてください(!?)
Windows Developer Days 2012
4/24-4/25のWDDですが、参加費ろくまんえんと聞いて今回はスルーしてもいいかなと思っていたのですが、ひょんなことから参加できることになったので、遊びに行こうと思います(特に自分がしゃべるイベントはありません)。
Windows 8はVirtualBoxがお気に召さなくてインストールできず、ネイティブで入れようとしたらパーティションの問い合わせとかが何も無くてこわくて入れていないので(多分このままだとリリースが出てもインストールしない)、Metroまわりはたまに他人の実機で見ているだけの状態でよく分かっていません。それでWinRTも半ば他人事になっているので、この機に色々眺めておこうかなあと思っています。そんなわけで、今まで自分が参加していた時に聞いていたようなのとは全然違うセッションばかり聴いていると思います。
ともあれ、そんなわけで当日は無駄にふらふらしていると思いますので、見かけたら声かけてやってください。
PS Suite SDK public betaでC# 4.0 dynamicを使う
昨日ついにPlayStation Suite (PSS) SDKが公開ベータになりましたね。
http://www.playstation.com/pss/developer/index_j.html
昨日はそのタイミングで行われたSCEのAndroidの会のイベントでの話を聞きに行っていました。
http://atnd.org/events/27043?updated_at=1332783364
その内容は id:nakamura001:20120419:1334857193 が詳しいのでそこを見てくださいということにして。
わたしの理解している範囲では、PSSで動いているのは、MonoTouchやMono for Androidと同等の.NET 2.1もどきのランタイムということになります。ランタイムは「もどき」ってほどでもないかな。クラスライブラリは、たとえばXPathNavigatorやXmlSerializerが使える程度には.NET 2.1「ではない」です。これはMTやMfAと同じ匂いがあります。
さて、Mono for Android 4.1にDLRサポートを追加したのはわたしなので、同じ事をPSSでもやってみました。PSSがサポートしているのはC# 4.0相当のコンパイラとそれに対応するCoreCLR相当のクラスライブラリということになり、昨日のイベントでもSCEの方が質問にそう答えていましたが、実はコンパイラの実装であるmcsがC# 4.0をサポートしているだけではdynamic型は使えません。なぜかというと…
- mcsは、dynamicを使ったコードをコンパイルする際には、Microsoft.CSharp.dllの参照があることを要求します(System.Core.dllを参照に追加してSystem.Linqをusing文でインポートしないとLINQ構文が使えないことと似たような構図です)。
- そして、monoのMicrosoft.CSharp.dllは、内部的にはMono.CSharp.dllというC#コンパイラの実体を要求します。
- さらに、System.Core.dllに含まれるExpression TreeのAPIに、DLRをサポートするためのコードが含まれていなければなりません。
これらはどれも現在のPSSには含まれていません。つまり、現在のPSSではC# 4.0相当のコンパイラがあっても、C# 4.0のdynamicは使えないんですね。
今回はこれを無理やり使えるようにします。やることは簡単です。
- mono本体(git master or mono-2-10)をmonodroidのライブラリビルドのオプション —with-monodroid=yes でビルドする。—with-moonlightや—with-monotouchはダメ(これらはdynamicをサポートしません)。
- 出来上がったmcs/class/lib/monodroid に含まれるSystem.Core.dll, Microsoft.CSharp.dll, Mono.CSharp.dll を、PSS Studioのアプリケーション プロジェクトで参照に追加する。PSS SDKに含まれるSystem.Core.dllは参照しない(!)
これだけで、PSSアプリケーション プロジェクトでもdynamicが使えるようになります。仕組みとしては、(確認はしていませんが)mcsは、Microsoft.CSharp.dllの参照の有無を見て、dynamicサポートの状態を切り替えるので、これだけでdynamicが有効になる、というわけです。
id:atsushieno:20120406:p1 でも書きましたが、MfA 4.1のサンプルにはdynamicコードの例として、Microsoftが最近公開したaspnetwebstackから引っ張ってきたSystem.Json.dllに含まれるJsonValue.AsDynamic()を使ったものが含まれています。このソースをPSSライブラリプロジェクトに取り込んで、コンパイルオプションにMONODROIDを設定すれば、PSSでもビルドできて、dynamicなJSONが使えるようになります。
ただ、上記エントリでも言及しましたが、dynamicコードはコストを伴うものだということは理解しておいてください。これを実際にやって動かしてみると、デフォルトの空っぽに近い状態では軽快に動作しているように見えるPSSでも、決して軽くはありません。
ちなみに、mono-reactiveに含まれる System.Reactive.Android.csproj と同じ構成で、PSS向けにSystem.Reactive.dllをビルドして使うこともできます。PSSのクロスプラットフォーム性を実感してくださいw