WS-Discovery Implement色々

TechCollab2007-09-17


せっかくの連休だったのに体調を崩して散々な日々。ある目標に無茶している時には体調管理も重要です。というわけで今日はWS-Discoveryまわりのお試し実装として目についたものを整理として列挙するのみ。

MS Researchで公開されているWS-Discoveryの実装コードのようですが、いまいち読み解きづらいです。

WCFベースのWS-Discoveryの実装ということですが、内部構造をまだ把握していません。WCFはやはりあくまでも通信プラグの動的結合&強力なWEBサービスのためのフレームワークというイメージでいますが、こういう実装もありなんですかね。WCFにはPeerChannelのBindingもあるし、WCFのパワーを存分に活かした設計というものがまだまだ理解できない今日この頃です。

WS-Discoveryのスキーマが見やすいということでのご紹介。

書評

フィードがグーグルの世界制覇を阻止する!―ウェブからリアルへの逆流が始まった

フィードがグーグルの世界制覇を阻止する!―ウェブからリアルへの逆流が始まった

気分転換に本屋で見つけて、タイトルに負けて即購入。もうちょっと論理的な展開を色濃くしたら一般受けしたんじゃないかなーと思いました。しかし、小川さんのフィードビジネスへの熱い思いは伝わりました。この本は結構な酷評をもらっていますけど自分は結構好きです。小川さんの考え方はかなり賛同できる部分が多い。
最近ではWeb2.0という名のもとにWEBという仮想世界の上にビジネスモデルを展開しようと色々躍起になっているという現状がある。しかし、その上で世の中で注目を浴びてきているものすべてが有効なものだとは決して思わない。セカンドライフなんかはその顕著な例かもしれない。今Googleが世の中を牛耳っているのは、「検索」という世の中の一般人の生活そのものを便利にしたという前提があって、その上でアドセンスをビジネスとして成功させた。しかしセカンドライフだと、ビジネスモデルがあるからこのヴァーチャルワールドに来い、という色が強い気がする。セカンドライフをやることによって日々の生活がよくなるわけでもなく、そのもしかしたらのビジネスチャンスのために帰宅後の貴重な時間をPCの前に数時間も座るのはやはりナンセンスだと思う。各種シンクタンクさんなどの白書などでは今後数年はバーチャル世界でのビジネス展開が伸びる!とかいう予測もあるが、自分は全くそうは思わない。IT関連に関わっている人間の思うほど、人々はパソコンが好きではない。正直自分は検索キーワードを選ぶのも面倒。この本の中にもあったがやはり「ウェブの世界の今後はリアルな世界との融合」であると思うしそうあって欲しい。あくまでも「何としてでもビジネスモデルを展開させていこう」と考えるのではなく、「人々の生活をこの情報技術を駆使して便利にするにはどうすればいいか」これを突き詰めて考えていくことが大事だと思うし、これを突き詰めて支持が得られれば自然とビジネスモデルが展開できるようなもんだと思う。ビジネスはあくまでも人々の生活を豊かにするために切磋琢磨していくものであるべき。
と、経営者の苦労もしらずに色々とりとめもなく思ったことを言ってみました。

なんか最近のエントリは書きなぐった感が強くなってしまってますね。。。次回あたりは全うに書いてみようかと。
※ご意見、反論等あればお気軽にw

People Near Me 解析 Part1

TechCollab2007-09-10


最近、People Near Meの内部構造について調査する機会があったのでここに軽くまとめておく。こんなマイナーなことに興味のある人間も少ないと思うので自分への備忘録として。People Near Meのアーキテクチャについて公開されている情報は少なく、WS-Discoveryに上に実装されているという情報程度。今回はより詳細な情報を得るためにPeople Near Me(PNM)の流すパケットについて観察し解析してみた。

とりあえず、PNMのSignIn/SignOutによるパケットフローがどうなっているのかを観察。公開情報の通り、サービスへの参加/脱退などの管理はWS-Discoveryが使用されているみたい。参加、脱退に応じてHelo/Byte/Prove/ProbeMatchメッセージが流れていたことを確認。ちなみにWS-DiscoveryのメッセージングはSOAP over UDPDestination=ff02::c、Port=3702が基本。詳しくはSpecification参照。

WS-Discoveryパケット解析

Hello Message
  • Packet Summary

Source Destination Protocol Info
fe80::100d:43ef:d5fc:452f ff02::c UDP Source port: 49375 Destination port: 3702

  • Message Data

の意味するところは不明。

<?xml version="1.0" encoding="utf-8" ?>
<soap:Envelope 
      xmlns:soap="http://www.w3.org/2003/05/soap-envelope" 
      xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" 
      xmlns:wsd="http://schemas.xmlsoap.org/ws/2005/04/discovery" 
      xmlns:NearMe="http://schemas.microsoft.com/p2p/2005/08/NearMe">
    <soap:Header>
        <wsa:To>urn:schemas-xmlsoap-org:ws:2005:04:discovery</wsa:To> 
        <wsa:Action>http://schemas.xmlsoap.org/ws/2005/04/discovery/Hello</wsa:Action>
        <wsa:MessageID>urn:uuid:a148bddf-d5ac-4c15-a959-8f08f424579f</wsa:MessageID>
        <wsd:AppSequence InstanceId="5" MessageNumber="8"></wsd:AppSequence>
    </soap:Header>
    <soap:Body>
        <wsd:Hello>
            <wsa:EndpointReference>
                <wsa:Address>uuid:a0707166-1d8e-430a-899e-019b291bcad0</wsa:Address> 
            </wsa:EndpointReference>
            <wsd:Types>NearMe:a4c1fbe4-6d30-46c9-8bba-b8663d615706</wsd:Types>
            <wsd:MetadataVersion>1</wsd:MetadataVersion>
            <NearMe:NearMeData>wAkAAAcAAAAUAAAACgAAABsAAABWaXN0YQAAVklTVEEtUEMAAA==</NearMe:NearMeData>
        </wsd:Hello>
    </soap:Body>
</soap:Envelope>
Bye Message
  • Packet Summary

Source Destination Protocol Info
fe80::100d:43ef:d5fc:452f ff02::c UDP Source port: 49375 Destination port: 3702

  • Message Data
<?xml version="1.0" encoding="utf-8" ?>
<soap:Envelope 
      xmlns:soap="http://www.w3.org/2003/05/soap-envelope" 
      xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" 
      xmlns:wsd="http://schemas.xmlsoap.org/ws/2005/04/discovery">
    <soap:Header>
        <wsa:To>urn:schemas-xmlsoap-org:ws:2005:04:discovery</wsa:To>
        <wsa:Action>http://schemas.xmlsoap.org/ws/2005/04/discovery/Bye</wsa:Action>
        <wsa:MessageID>urn:uuid:047bc593-719a-4d19-ac2f-b1c47a4807c1</wsa:MessageID>
        <wsd:AppSequence InstanceId="405" SequenceId="urn:uuid:388e6fd3-9bab-4ad9-b3b2-4b13f814ab88" MessageNumber="8"></wsd:AppSequence>
    </soap:Header>
    <soap:Body>
        <wsd:Bye>
            <wsa:EndpointReference>
                <wsa:Address>urn:uuid:9e31c20e-8d9c-4b30-a030-0b94823a087a</wsa:Address>
            </wsa:EndpointReference>
        </wsd:Bye>
    </soap:Body>
</soap:Envelope>
Probe Message
  • Packet Summary

Source Destination Protocol Info
fe80::100d:43ef:d5fc:452f ff02::c UDP Source port: 49375 Destination port: 3702

  • Message Data
<?xml version="1.0" encoding="utf-8" ?>
<soap:Envelope 
      xmlns:soap="http://www.w3.org/2003/05/soap-envelope" 
      xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" 
      xmlns:wsd="http://schemas.xmlsoap.org/ws/2005/04/discovery" 
      xmlns:NearMe="http://schemas.microsoft.com/p2p/2005/08/NearMe">
    <soap:Header>
        <wsa:To>urn:schemas-xmlsoap-org:ws:2005:04:discovery</wsa:To>
        <wsa:Action>http://schemas.xmlsoap.org/ws/2005/04/discovery/Probe</wsa:Action>
        <wsa:MessageID>urn:uuid:606b61ea-d552-4876-97ee-08058c90e3e0</wsa:MessageID>
    </soap:Header>
    <soap:Body>
        <wsd:Probe>
            <wsd:Types>NearMe:a4c1fbe4-6d30-46c9-8bba-b8663d615706</wsd:Types>
        </wsd:Probe>
    </soap:Body>
</soap:Envelope>
ProbeMatch Message
  • Packet Summary

Source Destination Protocol Info
fe80::9d0d:76ac:ebc:60c fe80::100d:43ef:d5fc:452f UDP Source port: 3702 Destination port: 49374

  • Message Data

HELOと同じくNearMe:NearMeDataは不明。

<?xml version="1.0" encoding="utf-8" ?>
<soap:Envelope 
      xmlns:soap="http://www.w3.org/2003/05/soap-envelope" 
      xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" 
      xmlns:wsd="http://schemas.xmlsoap.org/ws/2005/04/discovery" 
      xmlns:NearMe="http://schemas.microsoft.com/p2p/2005/08/NearMe">
    <soap:Header>
        <wsa:To>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</wsa:To>
        <wsa:Action>http://schemas.xmlsoap.org/ws/2005/04/discovery/ProbeMatches</wsa:Action>
        <wsa:MessageID>urn:uuid:5cc237c2-0b5f-44b0-9f6e-3f863018217a</wsa:MessageID>
        <wsa:RelatesTo>urn:uuid:eb50636a-2548-4fca-83cc-f8b03183df24</wsa:RelatesTo>
        <wsd:AppSequence InstanceId="1" MessageNumber="21"></wsd:AppSequence>
    </soap:Header>
    <soap:Body>
        <wsd:ProbeMatches>
            <wsd:ProbeMatch>
                <wsa:EndpointReference>
                    <wsa:Address>uuid:0192e97a-fdc1-4883-b33d-5fa2650784fa</wsa:Address>
                </wsa:EndpointReference>
                <wsd:Types>NearMe:a4c1fbe4-6d30-46c9-8bba-b8663d615706</wsd:Types>
                <wsd:MetadataVersion>1</wsd:MetadataVersion>
                <NearMe:NearMeData>wA4AAAsAAAAUAAAADAAAAB8AAABTb3VzdWtlYmUAAFNPVVNVS0UtUEMAAA==</NearMe:NearMeData>
            </wsd:ProbeMatch>
        </wsd:ProbeMatches>
    </soap:Body>
</soap:Envelope>

PNMパケット解析

で、WS-DiscoveryによりPNMネットワークへの参加、脱退などの仕組みは実現できることが納得できたけど、PNM APIのオブジェクト公開とか、アプリケーション招待などの仕組みがまだわからないということでもう少し調査。予想としてはWS-Discoveryパケット内に組み込んでいるのだとも思ったがそうではないらしい。オブジェクトデータ、アプリケーションデータのやりとりはTCP接続でPeer対Peerでの送受信が行われる模様(下図赤線部分)。で、ここで重要なのは受け取る側は誰で、送る側は誰なのか?ということ。どうも、分散ハッシュ的な考えが使われている模様。つまり、あるオブジェクトデータを保持・管理しているのはオブジェクトデータを公開したPeerとは限らない誰かということ。オブジェクト要求するPeerは分散ハッシュのようなイメージで、オブジェクトを保持しているPeerへのインデックス情報を取得。そしてその後オブジェクトデータを管理している誰かとコネクションをはってデータを取得するようだ。ちなみにこれらの情報はp2phost.exeの上でオンメモリで管理されている模様(?)ここら辺は明日にでも図の説明を追加するつもり。

いやー。People Near Meは意外と奥が深いですね。もっと技術情報を公開してくれれば良いのですが。。。こんな逆アセンブリ&パケット解析などは邪道すぎる;

小休止

TechCollab2007-09-02


最近MS技術のネタばかり書いてので、今日は気分転換ということで趣味のネタを。

Saxophone!!

また最近吹いてないな。。。

フュージョン系はあまり好きではないけど、こういうのもたまにはGood。

  • Kevin C. Funk Saxophone

荒い感じだなー、と思ったけど、今はこのパワフルなプレイが結構お気に入り。

  • Amstel Saxophone Quartet live in Amsterdam

バーバーのアダージョはやっぱり泣ける;

やっぱり須川さんは抜かせない!

Thailand!!

タイのトゥクトゥクはこんなキレイじゃなかったけどなー。

次回はマッシュアップエディタまわりか、MACのネタを書く予定。。。かも。

TechEdをふりかえる Part3

TechCollab2007-09-01


さて、Part3となりましたが引き続きTechEd情報をまとめてみます。おそらくTechEdネタはこれで最後となると思いますので(もちろん以外のMS技術ネタも今後まとめていきます)、張り切ってまとめていこうと思います。ということで、最後の今日は.NET3.5におけるWCF拡張についてを中心にまとめていこうと思います。

関連セッションとしては下記のセッション。

  • Windows Communication FoundationによるWeb2.0的"Webスタイル"サービスの開発〜REST、POX、JSON、とRSS/ATOM
WCFとは?

省略。皆さん知っているでしょうという前提に基づいての省略であって、決して面倒だからというものではないです。。。

.NET3.5におけるWCFのWebスタイルサービスサポートの概要

.NET Framework 3.0におけるWCFでは、Webサービスの利用といえば基本的にSOAP/WSDLベースのみがサポートされていたが、.NET Framework 3.5のWCFでは、よりWebフレンドリーなサービスがサポートされる(本セッションではWebスタイルサービスとして定義)。具体的な新機能の内容としては、「RESTスタイルサービスのサポート」、「メッセージフォーマットとしてPOX、JSONRSS/ATOM、その他バイナリをサポート」など。

.NET3.5におけるWCFのWebスタイルサービスサポートの詳細

具体的な実装としては次のようなものが追加。

  • アセンブリとしてSystem.ServiceModel.Webが追加
  • [WebGet]/[WebInvoke]属性の追加:サービスコンストラクトに付与して利用
  • バインディング種別としてwebHttpBindingが追加
  • サービスホスティングのクラスとしてWebServiceHost、WebScriptHostが追加
  • エンドポイントのビヘイビアとしてWebHttpBehavior、WevScriptBehaviorが追加
  • UriTemplateクラスの追加([WebGet][WevInvoke]属性と合わせての利用がメイン)
お試し実装(JSON利用)

Visual Studio 2008 Beta2 にて"WCF Service Application"のテンプレートを基に実装してみる。

  • サービスインタフェースとロジック実装

ここで重要なのはWebGet属性の追加。UriTemplateによりメソッドをRESTスタイルにコールできる。そしてResponceのフォーマットとしてJSONフォーマットを利用。つまり「/Data?nickname="hoge"」とGetData("hoge")が等価なイメージ。

[ServiceContract]
public interface IService1 
{
    [OperationContract]
    [WebGet(UriTemplate = "/Data?nickname={nickname}", ResponseFormat = WebMessageFormat.Json)]
    Person GetData(string nickname);
}

public class Service1 : IService1
{
    public Person GetData(string nickname)
    {
        Person p = new Person();
        switch(nickname){
            case "TechCollab":
                p.FullName = "Sousuke Hirayama";
                p.Hobby = "Saxophone";
                break;
            default:
                p.FullName = "Hoge Taro";
                p.Hobby = "music";
                break;
        }
        return p;
    }
}
  • コンフィグレーション

WCFのコンフィグレーションファイルには次のように記述。重要なのはbindingの属性としてwebHttpBindingを指定すること。

<configuration>
    <system.serviceModel>
        <services>
            <service name="Service1">
                <!-- Service Endpoints -->
                <endpoint contract="IService1" 
                  binding="webHttpBinding" 
                  bindingConfiguration="Service1Binding" 
                  behaviorConfiguration="Service1EndBehavior"/>
            </service>
        </services>
    
        <behaviors>
            <endpointBehaviors>
                <behavior name="Service1EndBehavior">
                    <enableWebScript/>
                    <webHttp/>
                </behavior>
            </endpointBehaviors>
        </behaviors>
    
        <bindings>
            <webHttpBinding>
                <binding name="Service1Binding" />
            </webHttpBinding>
        </bindings>
    </system.serviceModel>

</configuration>
  • サービスホスト(.svc)
<%@ ServiceHost Language="C#" Service="WCFService1.Service1" CodeBehind="Service1.svc.cs" 
    Factory="System.ServiceModel.Activation.WebScriptServiceHostFactory" %>
  • 実行結果

以上の準備でサービスの実装が完了するが、これらをデバッグ実行して開発サーバ上でホスティングしてもうまく動作しない(下記エラー)。これはバグらしく、IIS上にDeployして実行する必要がある。詳しくはこちらを参照。

"IIS specified authentication schemes 'Ntlm, Anonymous', but the binding only supports specification of exactly one authentication scheme. Valid authentication schemes are Digest, Negotiate, NTLM, Basic, or Anonymous. Change the IIS settings so that only a single authentication scheme is used."

http://localhost/wcfhost/Service1.svc/Data?nickname=%22TechCollab%22

ということで、IIS上にデプロイしサービスを実行し、上のクエリーを投げたところ次のJSON形式のオブジェクトが返答される。

{"d":{"__type":"Person:#WCFService1","FullName":"Sousuke Hirayama","Hobby":"Saxophone"}}

実際のサービス利用時にはプロキシを生成することになるが、JavaScript用のプロキシを生成することも可能。プロキシ用のコードが見たければ下のクエリで取得。

http://localhost/wcfhost/Service1.svc/js

ネタ

きましたね。BlackBerryiPhone端末もDocomoさん!?

こういうのは既存の主要インフラにのってかないとうまくいかない気がする。SuicaPasmoEdyなどなどやはり何かに統一されたら、この手のサービスものっかりやすいだろうし、発展もしやすいと思う。

最近はGoogle Gearsをおってないんで、これを機会に再勉強してみますかね。

ほほー。

メモとして。

http://www.artofoffice.com/artists/
Officeでartを創る意義は良くわからないが、色々かっこいいのもたくさんありますね。

TechEdをふりかえる Part2

TechCollab2007-08-28


さて、前回に引き続き復習がてらTechEd情報を色々とまとめてみます。今日は、データアクセスという観点で、LINQADO.NET Entity Frameworkなどを中心に。ここらへんは苦手分野なんで議事録程度にまとめる。ここは実践的に使っていかないと、なかなか習得できないものですね。記述が間違ってた場合はご指摘下さい。。。

関連セッションとしては下記2セッション

  • LINQ to the Future 〜LINQが創る次世代データ処理技術〜
  • ADO.NET Entity Frameworkの適応方法
LINQ概要

今更LINQについて説明することもないが、とりあえずざっくりとまとめる。LINQとは「.NET Framework 3.5に搭載される予定の言語埋め込み技術」。ロジック内のデータクエリーとして次のようなコードが書ける(LINQ to Objects)。様々なデータソースに対するアクセスを同等なプログラムモデルで記述できる(LINQ to SQLLINQ to Objects、LINQ to XMLLINQ to LDAP、etc)。

public void Linq1() {
    int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };

    var lowNums =
        from n in numbers
        where n < 5
        select n;

    Console.WriteLine("Numbers < 5:");
    foreach (var x in lowNums) {
        Console.WriteLine(x);
    }
}

LINQ to SQLによるデータアクセスの流れは、1. O/Rマッパーとして.dmblファイルを作成、2.LINQコード記述、3.実行時の動的T-SQL変換のようなイメージ。LINQコード記述は上のLINQ to Objectsと全く同じ。

ADO.NET Entity Framework

オブジェクトモデル実装におけるRDBアクセスの問題として、インピーダンスミスマッチの問題があるが、ADO.NET Entity Frameworkでは「EDM(Entity Data Mode):概念データベースモデル」、「eSQL(Entity SQL):EDMに対するクエリ言語」という概念をベースとする。実装モデルを概念データモデル層で扱えることにより、それによりリレーショナル、オブジェクトの両方に対してシームレスに落とし込めるようになる=インピーダンスミスマッチの解消。O/Rマッピングを洗練させるというよりも一気に概念データモデルにおいてアクセスをしていこうというスタンス(ちと怪しいかも。そもそも.NETのO/Rマッピングってどうなってたんだっけ?)。具体的な実装のイメージとしてはこちらを参照(CSDL、MSL、SSDLまわりがまだわかってない;)。

LINQの本質

LINQADO.NET Entity Frameworkを合わせてみてみると、LINQとは「eSQLのマッピング仕様」(訂正:正しくは、「LINQ や eSQL を使うと、概念レベルのクエリが記述できる」)ということがわかる。つまり、LINQとは概念データモデルを操作するためのプログラミングモデルということ。なんで、データソースがなんであれシームレスにアクセスすることができる。これがLINQの本質。

考察

ということで、LINQはソフトウェア開発におけるデータモデリング手法を大きく変えるような技術であることはわかるが、実際にどうやってモデリングして開発していくのかが、今いちまだわからない(自分の技術力の無さのせいだけど。。。)。今のDBまわりの開発は、基本的にDBモデリングから始まり、それをコード(オブジェクト)にマッピングして実現していくという流れのような気がする。つまり、いきなり論理モデルによるモデリングをやるというスタンス。概念モデルのレイヤーでモデリングをするというとは現実としてあまりないような気がする。やはり概念モデリングにおける実践的な手法をよく考察していく必要がありそうです。

関連情報などなどはこちら。

下写真はTechEd休憩中の参加者。皆さんくつろいでましたね。

ネタ

今日のエントリと近いネタ。いい加減すんなりと英語を聞きこなしたいものです。。。

実際のblogはこちら。どんな内容がかかれていくんでしょうね。ちょっとおってみます。どんんどんとRSSリーダのエントリが増えてきた。やっぱり今後は情報の個人適応化という分野でビジネスができるような気がします。世の中情報が多すぎ!

So yes, Microsoft does have hackers, and its time to introduce you to some of them and show you what it is, exactly that they do.

文字まわりをやっている人を大きく泣かせてくれるのが、JIS X0213:2004と合わせてやはりサロゲートペアの問題。何が問題かって基本的な情報を的確に整理して抑えていくのが面倒なこと。

AptanaってAIRiPhoneアプリも統合的に開発できるし結構使える開発環境だと思うんですが、皆さん使っているんですかね。


次回は、TechEd Part3としてWCF拡張についてか、マッシュアップエンジン機能比較(HugeDomains.com - Shop for over 300,000 Premium Domains←Good!)、とかを書いていこうと思います。

TechEdをふりかえる Part1

TechCollab2007-08-26


先週は招待を頂いたということもあり、TechEd 2007 Yokohhamaに参加してきました。年一度のイベントということで、21日から24日までの全4日間の日程に参加。全般的に多くの技術情報を収集することのできた良い機会となりましたが、MVPのメンバーなどある程度先行して情報収集している方々にとっては少々物足りないものと感じているのではないでしょうかね。正直これが有償セッションか、というものもありましたが、逆にとてもすばらしく興奮させてくれるセッションもあり、総合的には十分に有意義なカンファレンスだったのではないでしょうか。今回はServer 2008、.NET3.5、Silverlight、DLR、PowerShellWCF拡張などの話題が熱かった気がします。

ということで気になったセッションについてを色々と技術内容の確認と共にちまちまとまとめていこうと思います(書いててやっぱりスタイルが気になってきたのでいい加減変えようかな…)。

Silverlightを語ろう! -Webアプリのこれから

Part1としてはこちらのセッションについてをご紹介。

基本的にSiverlightについて語る場という感じ。スピーカーは青柳さん。やはり皆さんの注目は1.1となり、1.1が中心に議論。

基本的なSilverlightアーキテクチャ(省略)。1.1のランタイムは.NET3.5相当(LINQオッケー!)

  • デモ

各種面白いデモの紹介。

Balls animation test: Silverlight (JavaScript and CLR) vs DHTML vs Flash (Flex) vs WPF vs Apollo vs Java (Swing)
各種ランタイム、開発フレームワークに応じた性能結果(FPS)をまとめたサイト。こんなのあったんですね、知らなかった;

windowsvista - windowsvista.si
SiverlightでVistaデスクトップを表現してしまおうというもの。気合の入った人もいるものですねぇー。

SilverlightプラグインはなぜWindows Updateで提供しないのか」という意見が出た。Silverlightはあくまでもプラットフォーム非依存なので(WIN、MACIEFireFoxSafari etc...)、WSUSなどによるUpdateは不適なのだからじゃない!と突っ込みを言いたかったけど、案の定突っ込みが入る。その後はSilverlightのUpdate機能について話が盛り上がる。詳しくはこちらを参照。

  • フォントサポート

Silverlightはまだ日本語サポートはされていない。現在サポート中のフォントは9種類のみ。どうしてもフォントとして日本語を扱いたかったら、フォントファイルをダウンロードしてそれを参照させることで対応できる(FontUriで指定する感じ。下参照)。確か、Silverlight XPS ViewerXPSをほどいて、XAML変換して、フォントファイルをダウンロードさせてた気がする。

<Canvas Width="816" Height="1056" xmlns="http://schemas.microsoft.com/xps/2005/06">
    <Glyphs 
           Fill="#ff000000" 
           FontUri="file:///D:/Windows/Fonts/Meiryo.ttc" 
           FontRenderingEmSize="40" 
           StyleSimulations="None" 
           OriginX="20" OriginY="60" 
           Indices=";;,80,10,-30;;" 
           UnicodeString="ABCDE" 
    />
</Canvas>

Silverlightの開発においては、Visual StudioやExpression Studioを使うことになるが、基本的にコントロールは不足している。SilverlightのStarter Kitにはある程度のコントロールまがいなものが入っているらしい。1.1では色々なコントロールが追加されるもよう(アコーディオンも!?)。
http://community.netikatech.com/
ここのGOA WinForms Live Demosは結構本格的なものがあるようです。


未踏ソフトウェア創造事業キックオフ

TechCollab2007-08-25


今日は未踏ソフトウェアのキックオフミーティングでプレゼン。

今週はTechEdへの参加や、TechEd報告記事執筆(CodeZine用)、未踏プレゼン準備などなどで色々慌しかったですが、とりあえずやることはやった感じです。自分はやはりプレゼンが好きらしい。人前で発表するときは頭から何か物質が出てるような感じがして非常に興奮する。やはり自分はこういうことが向いているらしい。
未踏のキックオフの発表者はみんなとても優秀な方ばかりでした。キックオフの内容については1期採択者の方がメモを取っているのでそちらを参照して下さい。自分もこれ以上に頑張らなくてはと思わせてくれる刺激的なミーティングでした。採択の契約でもめている採択者もいますが、是非参加して欲しい!優秀で熱い思いを持った若者の意思を年配者がつぶすなんてありえない。若者を伸ばすのが人生経験者のやるべきことであり、そして自分が年配になってもそうでありたい。

また、キックオフの最後の畑PMのお話の中に、「技術習得の観点としてはそこそこ広く、そこそこ深くがいい」ということがあったが、これはかなり難しい。どこまでが深く?どこまでが広い?というフラストレーションが常につきまとってしまう。この業界の技術はやはり同じ業界とはいえ様々な技術分野が存在する。技術分野が異なれば話すらできない場合もある。自分がある分野に精通したと思っても、すぐに別な分野で自分の無力さを感じる。そしてこれを実感してしまうと自分の無力さを常に感じてしまう。技術が無ければこれすら実感しないする人もいる。やはり、難しいことだが継続は力なり!こつこつ色々なことに興味を持って世界観を広げるべきですね。これは技術観点だけでなく、人生全般としていえること。

ということで、下写真は今日の自分へのご褒美。My Mac Book Proも良く頑張った!
ちなみに今日の1枚はタイのマーケットの1風景。

明日は、TechEdについての報告をしたいと思います。

ネタ

FASTは最近色々とメディアに出てくる機会が多くなっている気がしますね。

ん、これはどういうこと?Live Searchになぜ集約しない?意図を後で調べてみよう。

SilverlightのDreamSceneが公開。なかなかGood!ちなみにDreamSceneをいれるにはEnglishの言語パックをインストールする必要あり。