Archive for 4月 2010
命令的とか宣言的とか
こないだ、言葉の持ってる意味を分からずに使うの気持ち悪いみたいな感じの話を書いたわけですが、今日は今日で、命令的とか宣言的とかって言葉が気持ち悪くなってきたんでその話を。
文字通りの意味で捉えるなら、
- 命令型言語
- CPU に対する命令を直接書く
- 今現在のいわゆるノイマン型コンピューターがチューリング機械モデルで動くんだから、必然的にチューリング機械モデルに近い ≒ 命令的
- 宣言型言語
- プログラマーが書きたいことをそのまま書く
- となると、「何を書きたいか」によって、何が宣言的か変わるんじゃなかろうかと
- 文字通りの意味で宣言的たろうとすると、DSL(Domain Specific Language)になっちゃうのかなぁ
- 「関数型だから宣言型」とか「参照透過性持ってる言語が宣言的」とか「ラムダ計算に基づく言語が宣言的」とか言われると少々違和感あり
となるかなと。で、そうすると、命令的と宣言的は厳密に対義語じゃないですよね。確かに、チューリング機械モデルに近いような低レベルのモデルで書きたいことそのまま書けるかというと厳しいんですけど、だからと言って、低レベルなモデルから離れさえすれば書きたいとおりにかけるかというと必ずしもそうじゃない。
模式的に描くと、以下のような感じ。
- プログラミング言語の基礎となってる計算モデルって大きく分けると「チューリング機械モデル」と「ラムダ計算モデル」がある
- 実際のCPUの構造に近いのはチューリング機械モデルの方
- チューリング機械モデルそのままじゃ使いにくいんで、その上にちょっとずつ人の直観に近いモデルを被せて使ってる
- (2次元的に分類できるわけでもない(もっと多次元的)と思うけど、まあ、ここは説明のために簡単化)
で、命令的って言葉の度合を考える場合は、実際の CPU の構造からの距離で考える。
- 大きい円の中心辺りが命令型言語って言われるもの
- 関数型言語 = 非命令型 って考え方はいいと思う
- オブジェクト指向言語だって立派な非命令型言語
一方で、宣言的ってのの方の度合は、プログラマーが書きたいことってのを中心としてそこからの距離で考える。何を書きたいかって文脈に依存。
- 大きい円の中心辺りが宣言型言語って言われるもの
- GUI開発の文脈だと、関数型言語って宣言型度合高くないと思う
- ↑むしろ、オブジェクト指向言語の方がよっぽど宣言的
- 今、データ並列がホットな話題だから、その文脈で宣言型度合の高い関数型が注目浴びてるというだけで
こう考えると、関数型言語に対する熱狂度合が人によってばらついてて、自分にとっては関数型言語の良さがしっくりきてなかった理由も納得がいくかなぁと。自分がデータ並列の文脈にあんまりいなかったからなんだと。関数型の良さを伝えたいって人も、「参照透過性大切」とか「immutable大切」って言い方じゃなくて、Map-Reduce型のモデルとかの説明を先にしてから、参照透過性あるとこんなに問題が解消されるでしょと話した方がいいのかもなぁと思ったり。
4じげん×Hotmail、等々
- 『4じてん』× Hotmail スペシャルイベント
- 最近の Bing マーケティングはキてるなぁ。
- Flex vs. silverlight
- Job Trends、もう Flash より Silverlight の方が3倍近いんだなぁ
- Yet Another MVVM Locator Pattern
- MEF を使った拡張可能な MVVM Silverlight アプリのデザインパターン。
4/24 すまべん
すまべん特別編「Windows Phone 7 開発スタートアップ」で講演してきたわけですが。
とりあえずプレゼン資料を公開。
(しかしまぁ、SkyDrive はこの URL の長さほんとどうにかならないかな・・・)
- XAML に対する最初のとっつきとしてはなかなかいい感じの資料になったんじゃないかと
- 「XAML ってどう書けばいいの?」「てか、なんで XAML なの?」「XAML で何が嬉しいの?」という辺り
- WP7 向けだけじゃなく、PC 版の Silverlight や、WPF の入門にも使えます
- (てか、プログラミング モデルってレベルの話だとこの3者はほんと全く同じなんで。)
- あと、ちょこっとだけ、WP7 における Silverlight の立ち位置の話とか、簡単に XNA の方の説明も入ってます
さて、プレゼン中ではデモを2つほど動かしたわけですが。片方だけ公開。2つ目はちょっと公開見合わせ中。公開する気ではいるんで、もうしばらくお待ちを。
- M-V-VM パターンの説明用の Silverlight 4 アプリ
- 実物: http://ufcpp.net/study/csharp/sl_MvvmSample.html
- ソース一式: MvvmSample.zip
- これのソースコードを見せながら、INotifyPropertyChanged、ICommand、INotifyDataErrorInfo などの説明をしました
- UI デザイナーさんの手を通す前後でアプリの見た目がどう変わるか比較サンプル
- ブラウザー版みたいにウェブ越しに現物見れたりしないのが何とも
- Silverlight 4 化してから公開するかも
- WP7 版のソース自体はすぐに公開してもいいんだけど・・・
- 実はまだデザイナーさんに手を入れてもらった部分の確認を自分でもしてないんで、それをやってから公開予定
VS 2010 リリース記念 C# たん
C++ たん、VB たん、F# たんと一通りそろったことだし再び C# たん描いてもらった。
Visual Studio 2010 も RTM になったことだし、なんとなくそんな雰囲気で。
作画: Paese
ちなみに、痛 IDE とかで使いたい場合、大きめのサイズもご用意いたしました。
- 今回絵師さんに付けた注文は「猫被ったバージョンって感じで」
- C# たんはキャラ設定的に「目的のためには手段選ばない子」なんで、猫も被るときは被る
- 普通に美形キャラ
- お子様キャラのはずだけど、絵師さんには「OL 誌あたりを参考にして。ませガキというか、年相応に見えないキャラで。」とお願い
Docs.com、WP7のプッシュ通知、等々
- Microsoft Docs
- Facebook と連携して Word, Excel, PowerPoint, OneNote 文書を共有(みんなで編集も可能)できるサービス
- 内部的に Office Web App(Skydrive で Office 文書見れるやつ)を使ってるらしい
- なので、ウェブ上での編集も可能
- 今のところ、文書のアップロードは招待性の限定メンバーのみができるみたい
- 関連:
- Fuse Labs (作ってるところ)
- Is Microsoft Docs really a ‘Google Docs killer’ and four other questions (and answers)
- Mary-Jo Fokey による MS への質疑応答
- Implementing Push Notifications in Windows Phone 7
- 「マルチタスクって言ったって、裏で定期的に HTTP Polling したいだけなんだろ。そういうの、消費電力的にもパフォーマンス的にも悪いからやめようよ。代わりにプッシュ通知の仕組み用意してるからさ。」みたいな話
- 通知の種類
- Raw: 起動中のアプリに通知イベントが行く
- Toast: ポップアップで通知
- Tile: メインスクリーンにピン止めしてあるアプリアイコンに通知が来てることを知らせる絵が付く
- 通知の方法
- MS の用意した Push Notification Service (以下、通知サーバー)ってのがいるらしい
- WP7 側から通知サーバーにリクエスト出して、通知 URL をもらう → 自前サービスに対して通知 URL を渡す & WP7 上では通知イベントを購読
- 自前サービスは以後、その URL にメッセージを投げれば WP7 にプッシュ通知されるようになる
- 「IME 2010」、単体で無償配布へ Office XP以降のユーザー向け
- そもそも Windows 標準添付のと Office 版とで分ける意味が分からないんですけどもねぇ
- Microsoft Translator 開発者向けサービス
- いつの間にか開発者向けのページが日本語になってた
- といっても、トップページだけだけど
- Studio Styles
- VS 2010 のスタイル共有サイト
- 黒背景が人気過ぎる・・・
- 白背景だったら標準のスタイルで別にいいじゃないってことかな
- SQL Server Modeling CTP (November 2009 Release 3) for Visual Studio 2010 RTM Now Available
- 内容的には CTP Nov 2009 のままだけど、VS 2010 の RTM 版に対応
その他、近況: Windows Phone 7 用開発環境のためにいまだに Visual Studio 2010 が RC 版な日々・・・
共変性(Covariance)/反変性(Contravariance)の話
ずっと思ってたことではあるけどいよいよ気になってきたんで、昔取ったメモを見返したり、圏論とか代数幾何を調べてみたりしながら書いてみる。
C#(に限った話じゃないんですけど)デリゲートとかジェネリクスの共変性・反変性、言いたいことはわかるんだけど、名が体を表してなくてものすごく気持ち悪いんですよねぇ。
元々、共変性・反変性って言葉の意味は「共に変化する」「反対に変化する」って意味だったんですけどね。デリゲートとかの共変性・反変性は何が共に変化して、何が反対に変化するか微塵も意味が残ってない。たどっていくとつながってないこともないんですけど、紆余曲折経てなんかよく分からないことに。
どうたどられていくかというと、デリゲートの共変性・反変性 → 圏論: 共変関手・反変関手 → 代数幾何学 → 多様体論における共変ベクトル。最後の共変ベクトルまで行くと、「基底と同じ変化の仕方をするベクトル」って意味になってるはず。
共変ベクトルと反変ベクトル(数ベクトルの場合)
直交座標しか使ってなかったり、座標変換ってものに触れないうちは気にしなくてもいいことなんですけども、ベクトルには座標変換のルールによって2つのタイプのものがあります。
- 共変ベクトル
- 基底を e1, e2 とでも置くと、a = p・e1, b= p・e2 となる (a, b) を作って、この数ベクトルで点 p を表す方法
- (a, b) の座標変換ルールは e1, e2 の座標変換ルールと同じになる(e1 を x 倍すると a も x 倍になる)
- 反変ベクトル
- 基底を e1, e2 とでも置くと、p = a e1 + b e2 と書ける (a, b) を探してきて、この数ベクトルで点 p を表す方法
- (a, b) の座標変換ルールは e1, e2 の座標変換ルールと逆になる(e1 を x 倍すると a は 1/x 倍になる)
ちなみに、共変ベクトルと反変ベクトルは互いに内積を取ると座標変換ルールが打ち消しあって、座標の取り方によらない量(スカラー)になります。こういう関係を「双対(dual)」といいます。
参考: 反変座標と共変座標
共変ベクトル(微分幾何学の場合)
力学(特に相対性理論とか)では、曲面上に拘束された物体の運動を微分方程式で表したりします。その過程で、微分可能な曲面とか立体の理論が発達しました。
概要だけいうと、以下のように共変ベクトルが定義されます。
- 曲面上の任意の関数は、接線を1つ与えれば、その接線に沿った微分が定義できる
- この「接線に沿った微分」のことを「接ベクトル」と呼ぶ
- 実際、微分演算子ってのは線形性を持つ(線形空間をなす)ので、何らかの基底を与えてベクトルとして表すことができる
- 例えば、偏微分演算子 ∂/∂x, ∂/∂y を基底として、a ∂/∂x + b ∂/∂y って感じのベクトルを作る。この微分演算子は接線に沿った微分を表す
- こうやって作った「接ベクトル」は共変性を持つ(微小変分 dx とか同じ変換ルールになる)ので、共変ベクトルと呼ぶこともある
ちなみに、この場合、反変ベクトルの方はというと以下の通り。
- 共変ベクトルの双対として定義
- 共変ベクトルが接ベクトルになるのに対して、反変ベクトルは微分形式として理解できる
- a dx + b dy みたいなの
参考: 共変ベクトルと反変ベクトル
共変ベクトル(多様体)
近代数学の進化の方向性の1つに「座標系の取り方によらない理論を作る」というのと「そもそも何らかの座標系の存在を仮定しない内在的な(intrinsic)な定義を目指す」というのがあります。で、曲面とか立体を、intrinsic な定義を目指して抽象化したものを多様体(manifold)といいます。
具体的にどうするかというと、
- 「共変ベクトル = 微分演算子」という考え方はそのまま使う
- 微分演算子の定義の仕方を、∂/∂x とかせず、以下のように行う
- 多様体(曲面とか立体)上の任意の関数 f, g に対して以下の条件を満たす写像 v を接ベクトルと呼ぶ
- v(f + g) = v(f) + v(g)
- v(a f) = a v(f)
- v(f g) = v(f) g + f v(g)
- 多様体(曲面とか立体)上の任意の関数 f, g に対して以下の条件を満たす写像 v を接ベクトルと呼ぶ
要するに、共変ベクトル = 接ベクトル = 微分演算子を以下のようにとらえる。
- 微分演算子ってのは 関数 → 関数 の変換(こういうのを、圏論的には関手(functor)と呼ぶ)
- 微分演算子は線形性を持つ(1 と 2)
- 微分演算子は積の法則(3)を持つ
こういう定義の仕方なら、座標(x とか y とか)が一切出てこないので、座標の存在を一切仮定しない = 内在的な定義って言われる。
参考: 接ベクトル・微分形式の内在的定義
代数幾何とか
上述の通り、共変ベクトルってのは微分演算子のことで、それは結局のところ、関数 → 関数 の変換の一種。
で、代数幾何学って分野において、「この 関数 → 関数 の変換って実は圏論(category theory)ってやつでいうところの関手(functor)よね」ということに気付いた(実際には代数幾何の発展の過程でそういう理論が整備された)らしく、共変ベクトルの性質を圏論を使って調べられるようになったとか。
多分、そういう歴史的背景から、共変ベクトルに相当する関手が共変関手、その双対(反変ベクトル)に相当するのが反変関手って名前になったんじゃないかと。(この辺りからちょっと自信ない。誰か詳しい人はいないものか・・・。)
ここまで来ると、こういう歴史的背景というか、順を追って理論知ってる人でないと元の言葉の意味(共に変化する・反対に変化する)が全く意味不明。
プログラミング言語における型の共変性・反変性
で、ようやくプログラミング言語における型の共変性と反変性って言葉。
- 型の継承関係的な順序を保つのが共変
- string ―[inherits]→ object なのに対して、IEnumerable<string> ―[assignable]→ IEnumerable<object>
- 戻り値にだけ型が使われてる
- 共変関手を使って説明できるとかなんとか
- string ―[inherits]→ object なのに対して、IEnumerable<string> ―[assignable]→ IEnumerable<object>
- 型の順序を逆にするのが反変
- string ―[inherits]→ object なのに対して IComparable<string> ←[assignable]― IComparable<object>
- 引数にだけ型が使われてる
- 反変関手を使って(以下同文)
- string ―[inherits]→ object なのに対して IComparable<string> ←[assignable]― IComparable<object>
参考: 共変性と反変性(圏論由来関連のとこにある説明はたぶん誤訳。正しくは「圏論における定義によって、計算機科学におけるこの用語の定義とベクトルにおけるこの用語の定義が統一的に理解できる。」とかかと。)
一応、「型の順序関係を反対にする方が反変」って覚え方はできるものの、もともとの「共に変化・反対に変化」ってニュアンスとはずいぶん変わってるんですよねぇ。
正直、最初にこれを共変性・反変性と呼んだ人は結構罪深いと思う。あと、C# で covariance/contravariance とかそれに類するキーワードじゃなくて in/out ってキーワードにしたのは非常にいい判断だと思う。(これに対して、MSIL の仕様上は covariant フラグと contravariant フラグって名前になってる。いまいち。)
なんかもっといい呼び名はなかったものかなぁ・・・
C# 4.0 and beyond、ジェスチャー制御&全方位プロジェクター、Silverlight 4 リリース、等々
- C# 4.0 and beyond by Anders Hejlsberg
- 「beyond」に関する話は55分頃から
- Compiler as a Service の話がちょこっと
- C# がスクリプト言語かのごとく Read-Evel-Print-Loop で動いてる!
- コマンドラインから1ラインずつコード入れて、フォーム出したり、フォームの背景設定したり、ボタン追加したり、ボタンにイベントハンドラー追加したり
- これ、もう C#er 的には IronXxx の類要らないんじゃね?ってレベル
- ↑ C# って言語自体の話じゃなくて、ライブラリの話だけだったけども
- とはいえ、これで念願の、Silverlight 使ったウェブ越しで C# の機能に触れれる環境が現実的になってきたなぁ
- Microsoft Research’s Gesture-Controlled Projector Creates an Indoor Planetarium
- Computer Human Interaction conference ってところでの MS Research のデモ
- ドーム状の小部屋の中で、全方向にプロジェクターで画像出して、かつ、ジェスチャーで色々操作ができるらしい
- なにこれ、ほんとすごい
- Silverlight 4 released. Availability of tools announcement
- おい・・・「If you need to continue doing Windows Phone 7 development, stick with the Visual Studio 2010 Release Candidate for now」って・・・
- WP7 開発続ける必要があるなら RC 版のままでいて
- Domain-Driven Design: Protect your persistence required methods
- 確かに、設計上ほんとは public にしたくないメソッドをこっそり隠して使うためにインターフェースの明示的実装使えるなぁ
- Visual Studio 2010 Quick Reference Guidance Refreshed to include latest Scrum Quick Reference Poster
- 日本語版、超欲しい。あるのかな?
- R の関数を C# から使う
- Matlab とかもそうなんだけど、言語はどうでもいいんだけどライブラリの部分だけ使いたかったりすること多々あるんですよねぇ(今の仕事になってからはその手機能に触れる生活送ってないけど)
- MSDN の逆引きサンプル コードに WPF とか Silverlight の逆引きサンプルが追加されたらしい
VS 2010のドッグフーディング、Azure Dynamic Scaling サンプル、VS 2010のキーボードショートカット一覧ポスター、etc
- "Dogfooding" VS 2010 and .NET 4
- MSは自社製品、とりあえず社内で使ってもむわけですが
- VS 2010 開発中における TFS の統計情報、えぐい数値がいっぱい並んでる・・・
- 3,668アクティブユーザー、896ビルド/月、等々
- Windows Azure Dynamic Scaling Sample
- 負荷を調べて自動的にサービスのスケールをさせるためのサンプル
- VS 2010 Keyboard Shortcut Posters Now Available for VB, C#, F# & C++
- 確かにポスターにでもしないとショートカットキー覚えられないw
- New Silverlight 4 Toolkit released with today’s Silverlight 4 RTW!
- Silverlight 4 自体が RTM になったのに合わせて、Toolkit の方も新しくなった
- 結構盛りだくさん
- コンテキストメニューとかもある
- A Mini-Review-Benchmark of Ruby’s Different Testing Frameworks
- IronRuby で C# コードのテストしてる
- Ruby はほんと無意味にテストフレームワーク多いなぁ
- てか、.NET だと Visual Studio とかの補助受けてやってるようなこと(コードカバレッジとか)までライブラリ的に実装してるんだから、ある意味ほんとにすごいのよなぁ、Ruby。
- Whirlwind 14: What’s new in C# 4 – Events
- イベントの内部実装がちょっと変わってたのね。初めて知った
- てか、MethodImpl 属性の Syncronized って lock(this) 相当の同期メカニズムなのね
- Bing Maps + oData + Windows Phone 7 – Nerd Dinner Client For Windows Phone 7
- 以前からある Bing Maps + OData のサンプルだけど、WP7 に対応
WP7、ペンタッチの研究、C#/VS の「次」で欲しい機能、Microsoft 「KIN」
- Using XNA libraries in your Silverlight Windows Phone 7 applications
- Silverlight で作ってる WP7 アプリから XNA ライブラリの機能を参照
- XNA 側で定義されてる SoundEffect とかのクラスを使ってるだけだけども
- Silverlight 中に XNA フレームワークで動いてるコントロールとか張り付けられると素敵なんですけどね
- あるいは逆に、XNA 中で XAML 使った UI を書けるとか
- それは無理
- Microsoft Research combines touch and pen input for computing sweetness
- まあ、ペンを使う方が色々操作はしやすいですしね
- あと、要望としては:
- 振動フィードバック的なもので表面の質感とかエミュレートできると素敵なんですけどねぇ
- 人間の触覚って圧力と振動数くらいしか感知してないみたいで、うまく揺らせばいろんな材質の表面をなぞってる感覚を再現できるらしい
- ペンなら振動を伝えやすいらしく、やりやすいとか
あと、VS 2010 がリリースされた前後でさっそく「次」への要望出してる人が。
- Beef up params in C# 5 to solve Lambda Abuse
- C# 5 でこんな機能入れてくれよという話
- Python の名前付きの可変長引数みたいなのが欲しいって
- void Method(params Dictionary<int> args) に対して Method(a: 10, b: 20, c: 30) みたいに書くと、辞書として可変長引数渡せるような
- 今でも、ラムダ式使って無理やり似たような構文書けないことはないけども
- VisualStudio.NET vNext Feature Request: Multi-target IntelliSense
- WPF 書いてる時でも Silverlight 互換のメソッド/オーバーライドだけを優先的に表示する「マルチ ターゲット」な IntelliSense が欲しい
そういや、MS 謹製スマートフォンの話も出ましたねぇ
- Zuneフォン登場!? 米MicrosoftがWindows Phone「KIN」を発表
- 「SNS 機能に特化」らしく、他の WP7 機とは微妙に仕様が違うとか
- デザインがまたもう日本じゃ受けなさそう・・・
- てか、どうせ mixi や GREE には対応しないのかな = 日本じゃ価値低い = そもそも日本じゃ出ないか?
Visual Studio 2010 リリース
日本でも Visual Studio 2010 Ready Day ってイベントがあったわけですが、ようやく VS2010 がリリースされました。(会場の電波状況悪かったんで、あんまり twitter でつぶやいてる人いないですけど、一応ハッシュタグは #vs2010rd)
日本語版は20日にリリースらしく、「日本じゃ Ready じゃないじゃん」とかひそかに思ってたり。(まあ、最近、Visual Studio は普通に英語版使ってたりしますが。)
- ITpro のニュース、同 CodeZine 、同 ITmedia
- 日本語版は4月20日提供、Express は27日
- Visual Studio 2010 and .NET 4 Released
- VS2010 のリリースに関して、Scott Cuthrie もブログを更新
- MSDN Subscriber、WebsiteSpark/BizSpark/DreamSpark 会員な人は VS2010 をダウンロード可能になりました
- 英語版は、無料の Express 版ももうすでにダウンロード可能(誰でも自由)
- その他、新機能に関する説明色々
- Silverlight 4 向けツールは SL4 リリースと同時(明日、15日の予定)
- Azure 開発は含まれてる模様
- このブログ中ではコメントでしか触れられてないけど、Windows Phone 7 開発環境は RC 版でしか動かないみたい
- Visual Studio 2010 /* 未来はコードで創られていく */ Windows 7 テーマパック配布中
- VS のロゴの ∞ をモチーフにしたなんかこじゃれた壁紙3枚公開
- 昨日の Ready Day では、発表者の PC の壁紙がことごとくこれだった
- Ten Cool Visual Studio 2010 Features
- ちょっと前の記事で、おさらいになるけども、VS2010 の10個のクールな機能
- デバッグ時に変数をピン止めしておける
- Box 選択
- オンザフライ検索
- ズーム
- Call Hierarchy を見れる
- シーケンス図生成
- 依存関係グラフ
- IntelliTrace とダンプ デバッグ
- マルチモニターのサポート
- Intellisense の向上
- ちょっと前の記事で、おさらいになるけども、VS2010 の10個のクールな機能