まだ生きているようです

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
-------- : スポンサー広告 :
Pagetop

MS社員は全員Windows Phone7 支給してもらえるそうで

いいなぁ、うらやましい・・・と一瞬思ってしまいましたが、僕自身だったら正直微妙な感じかもしれませんね。

マジシャンは、プライベートでマジックを楽しむことはできなくなると聞きます。
テレビ局関係者も、プライベートでテレビ番組を楽しむことはできないでしょう。

それと同じで、もし僕がまだ社員だったら、純粋にPhone7を楽しむことはできないかなと思います。
実際、MS社員だった頃、Windows Mobile機を支給されていましたが、楽しむではなく、仕事として、社員としてどう接するかの方が重要なわけで・・・

そういう意味では、僕は内部もある程度知ったうえで、1MSファンに戻ることができて幸せなのかもしれませんね。

http://www.gizmodo.jp/2010/07/windows_phone_7_5.html

日本で販売されるなら、ぜひとも購入したいと思っています。(申請が受理されればですがね、、、)
スポンサーサイト

テーマ : 独り言
ジャンル : 日記

tag : 日記 思い

2010-07-25 : 日記 : コメント : 3 : トラックバック : 7
Pagetop

ADO.NET Entity Frameworkでコードファースト

Entity FrameworkのCTPが出ていたのは知っていたのですが、やっぱり平日は時間が全く取れなく、、、ようやく先ほど確認できました。

こちらが新たに公開されたCTPです。

Microsoft ADO.NET Entity Framework Feature Community Technology Preview 4

これが一体何か?簡単に書いておきますね。

Entity FrameworkはVS2010になってVer.4となり、非常に沢山の機能追加がされました。

例えば、、、
・POCOサポート
・遅延実行サポート
・セルフトラッキングエンティティサポート
・モデルファースト
・・・
他にもたくさんありますが。。。

 

その中で、新たな開発スタイルを提供してくれたのが、モデルファーストです。
(従来EFでは、データベースありきで、そこからモデルをジェネレートするスタイルのみが可能でした。モデルファーストは、モデルを作った上で、そこからDB上のオブジェクトを作成するスタイルです。)

今回のCTPは、Ver.4に入れられなかった新しい開発のスタイルの提供が目的(のはず)です。 これはずばり、「コードファースト」になります。

 

以下が特徴です。

・デザイナやXMLのマッピング定義ファイルを使用しない開発
・ベースクラスを必要としないプレーンなクラス定義で書かれたシンプルなモデル定義
・CoC(Convention over Configuration):「規約は設定に勝る」をベースにした永続化
・規約を上書きして、永続化マッピングをフルカスタマイズできるAPI

 

つまり、デザイナーベースの開発スタイルである、「データベースファースト」「モデルファースト」に加えて、コードセントリックな「コードファースト」が新たに加わったと言うことになります。

 

ちなみに上記は、ScottGu's blogs(Code-First Development with Entity Framework 4 )からの情報を適当に意訳したものですが、
Scott Guthrieは以下のようにも書いています。


Code-First Development enables a pretty sweet development workflow.

 

「コードファースト」は、pretty sweet developmentなんですよ!
(実際やってみると非常によくわかります。 )

 

また、開発チームブログから「コードファースト」は、より開発生産性にフォーカスした手法と、通常の「コードファースト」の2つの方向性が提示されています。

 

以下では、開発チームブログにある、開発生産性にフォーカスした手法を紹介します。

EF Feature CTP4 Walkthrough: Productivity Improvements

プロジェクトにあるのは、以下のProgram.csのみです。他はなんにもありません。
(もちろん今回のCTPの参照設定は必要です。)

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
using System.Data.Entity.ModelConfiguration;
using System.Linq;

namespace EF.PI.Walkthrough
{
    class Program
    {
        static void Main(string[] args)
        {
            Database.SetInitializer(

new RecreateDatabaseIfModelChanges());

           

using (var context = new ProductCatalog())
            {
                // Use Find to locate the Food category
                var food = context.Categories.Find("FOOD");
                if (food == null)
                {
                    food = new Category { CategoryId = "FOOD", Name = "Foods" };
                    context.Categories.Add(food);
                }

                // Create a new Food product
                Console.Write("Please enter a name for a new food: ");
                var productName = Console.ReadLine();

                var product = new Product {Name = productName,

                         Category = food };
                context.Products.Add(product);

                int recordsAffected = context.SaveChanges();

                Console.WriteLine(
                    "Saved {0} entities to the database.",
                    recordsAffected);

                // Query for all Food products using LINQ
                var allFoods = from p in context.Products
                                where p.CategoryId == "FOOD"
                                orderby p.Name
                                    select p;

                Console.WriteLine("All foods in database:");
                foreach (var item in allFoods)
                {
                    Console.WriteLine(" - {0}", item.Name);
                }

                Console.WriteLine("Press any key to exit.");
                Console.ReadKey();
            }
        }
    }

 

    public class Category
    {
        public string CategoryId { get; set; }
        public string Name { get; set; }

        public ICollection Products { get; set; }
    }

 

    public class Product
    {
        public int ProductId { get; set; }
        public string Name { get; set; }
        public string CategoryId { get; set; }

        public Category Category { get; set; }
    }

    public class Supplier
    {
        [Key]
        public string SupplierCode { get; set; }
        public string Name { get; set; }
    }

 

    public class ProductCatalog : DbContext
    {
        public ProductCatalog()
            : base("MyProductCatalog")
        { }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity().Property(s => s.Name).IsRequired();
        }

        public DbSet Categories { get; set; }
        public DbSet Products { get; set; }
        public DbSet Suppliers { get; set; }
    }
}

 

これを実行して、適当にデータを入力します。

20100718_EF1

これでデータベースはどうなったのか?確認してみましょう。

20100718_EF2

こんな感じです。

 

あわわわ・・・

いつデータベースやテーブルが作られたの?

名前は?

スキーマは?

qあwせdrftgyふじこlp

と混乱するかもしれませんが、これがCoCならではの機能です。

 

実は以下の箇所がデータベース名を再設定しているところです。

public ProductCatalog()
            : base("MyProductCatalog")
        { }

これがなければ、EF.PI.Walkthrough.ProductCatalogと言う名前になります。これが規約ですね。

ちなみに、Productテーブルのスキーマは以下にようになっています。

20100718_EF3

なぜ、ProductIdがキーなのだろうか・・・

これも規約です。(詳しくはこちらに書いてあります。)

 

じゃあ、規約に反してコードを修正すると、テーブルスキーマが変更になるのでしょうか?

Yesです。

 

以下のコードがあると、モデルの変更時にデータベースが再生成されます。

Database.SetInitializer(

new RecreateDatabaseIfModelChanges());

 

これをコメントアウトしてしまうと。。。(テーブルスキーマの変更が発生する類のコードの変更を行って・・・)ちょっとやってみました。

20100718_EF4

自分でデータベースを変更するか、SetInitializerしなさいとエラーになります。

=================

かつてJasperというテクノロジーがCTPであったのですが、その一部の精神がここに生きているように思えます。(あとはASP.NET DynamicData)懐かしいです・・・

 

こうしたCoC系のソリューションは大規模や厳密なものにはそぐわないかもしれませんが、上記にあるScott Guthrieブログに紹介された、MVCと組み合わせた軽量なWebサイトの構築などには、もってこいかもしれません。あぁそういえばMVCとコードファーストで、RoRもどきの完成ですね(笑)

Web Metrix、IIS Express、SQL Server Compact Edition、Razor、そして今回のEFのCodeFirstと、一連の発表からMSの方向性が見て取れそうですね。(PHP on Azureなんかもそうかもしれませんが・・・)
この辺はMS井上さんの記事が参考になります。
もっと Web 開発を簡単に ~ IIS Express と SQL Server Compact ~
もっと Web 開発を簡単に ~ ASP.NET の 新しい View Engine “Razor” ~
もっと Web 開発を簡単に ~ 復活!? WebMatrix ~

 

また、コードファーストのもう一つ、厳密なコードファーストは以下にあります。
EF Feature CTP4 Walkthrough: Code First

家族が起きてきたようなので、この辺で!(早朝でした)

テーマ : プログラミング
ジャンル : コンピュータ

tag : EntityFramework

2010-07-18 : EntityFramework : コメント : 0 : トラックバック : 1
Pagetop

UQ Wimaxを導入してみました

データ通信用の手段が欲しくてE-Mobileなどを検討していたのですが、ヨドバシの週末特価につられてUQ Wimaxを導入しました。

端末を1円で購入、かつ1年間割引価格で契約ができました。(3700円ぐらいだったかと)

実は事前に2週間無料レンタルを利用して、自宅や職場周辺の運用をチェックして全く問題なかったということも大きいです。

実際に自宅で運用してみると、以下のような結果になりました。

Demo

 

これなら正直なところADSLいらないです(笑)

購入した端末はルータタイプですし、しばらく併用してみて、問題ないようならADSLは解約しようと思います。(上記の半分ぐらいのパフォーマンスしかでていませんしね)

 

昔、PHSでネットを行っていたときは、月3000円+従量課金+プロバイダ代で、下り
28800bpsだったような記憶があります。
技術の進歩って本当にすごいですね。

その後の記事はこちら

テーマ : なんとなく書きたいこと。。
ジャンル : 日記

tag : 日記

2010-07-12 : 日記 : コメント : 0 : トラックバック : 0
Pagetop

スピーカー分類を利用したTechEdの歩き方

ふと気が付くと、TechEdのセッション一覧が公開されていました。
ふむ、今年はレベル200(概要)セッションは一つもなくなってますね。

MS奥主さんが「今年は期待して下さい」と書いていたことと、Twitterの発言「原点回帰」というのはこのことだったのかもしれません。
昔のTechEdのような、、、分からないヤツは、分かってから来い!的なストイックさと言いますか、、、
レベル500のセッションなんかもありますし、イベントの性格をそうした形に定めたのでしょうね。

さて、以前の記事に書いたように、自分の独断と偏見に基づいた、「スピーカー分類を利用したTechEdの歩き方」を書いてみたいと思います。

こうしたイベントに参加すると、セッションスケジュールの中で、「どちらにも参加したい」あるいは「特に興味がないのでどこに行ってもよい」と言う時間は時折あります。

そんな時、何を基準に選択するのか?
もちろん人それぞれだと思いますが、スピーカーで決めるのも一つの手かなと。
当然ながら、スピーカーがどのような人なのか分からないと判断できないのですが、それは伝聞でなんとかしてみましょう。(笑)

もう少し言うと、スピーカーのキャラを「ある基準」で分類して、それを判断の基準に用いたいのです。
この「ある基準」というのは、以前書いた記事、
Dr.こだかの"俺用"プレゼン メソッド~その4~  デモとデモラーを系統分類してみる
ここにある、デモラー(スピーカー)を6種類の系統で分類する方法です。(HxHの水見式分類モデルと呼んでおります 笑)
以下にもう一度書いてみますね。

解説 アプリ ケーション自体、機能、コーディングの持つフィーチャーを実際に動かすことによって端的に解説する。日本でごく一般的に行われるデモの殆どがこのタイプ、 「見ていただいた方が早い」がキーワード。
証明 実際に1から手順を踏むことで機能やコーディングの過程 と結果両方を理解してもらう。
コーディング職人タイプの人が行うことが多い、資料もなく、証明デモに終始してしまうこともある、また、USではこのタイプは比較的多い。
事例 お客様事例や開発事例の一部を紹介する、美しい見た目や、見栄えのする結果が必要。
マーケティングの担当社員やキーノートなどで行うことが多い、内部の細かい情報ではなく、そのものの成果を前面にだす。
参考 プレゼンの本流に付け加える情報や、よりアドバンストな説明を行う。
時間が余ったときに行うデモであったり、お客様の期待値に対してコントロールする場合でも行う。「知っている人が多いので、もう少し難しいデモを・・・」 といった場合など。
「ちなみに」とか「説明していませんが」などがキーワード。
Wow 見た目や結果が楽しく、見ている人を驚かせたり、注目を 集める目的で行う。アイスブレイクもこの一種。
エンターテイメント性を前面に出し、受けや滑りなどの意識も必要。
その他 見ている人に実際に操作してもらうなど、通常のプレゼンの範疇に入らないタイプのデモ。
例として、MSではTechFieldersセミナーの道場スタイルという形で実際に行われています。

ちなみに僕自身は、解説型と自己分析しております。
レーダーチャートで表すとこんな感じです。

Demo

このレーダーチャートの上下に並んだ関係の系統は「苦手分野」、両隣の系統は「準得意分野」と考えてください。
つまり、解説型の僕は、事例型デモは苦手で、参考型と、証明型のデモは、そこそここなすと言った感じです。
ただ、僕は純粋な解説型ではなく、多少証明型に寄っているかなと思っています。

さて、失礼は承知なのですが、現役エバンジェリストの方を何人か系統付けてみましょう。
(すみません、お許しを・・・)

まず、師匠である松崎さん。(今年はAppFabricですね、Velocity側に興味深々です。)
僕は松崎さんは参考型かなと思います。とにかく引出しが豊富で臨機応変に情報が出てくるイメージです。(そのせいで時間オーバーもたまにあります 笑)
参考型なので、解説デモとWowのデモも、上手いと思います。松崎さんの場合のWowはFunnyではなく、Interestingと言った趣ですね。

次に、僚友の井上大輔さん。(今年はOData担当ですね。絶対見に行きます。)
多分僕と同じ解説型で、それも純粋な解説型かなと。
とにかく、端的なデモと説明が素敵です。短くズバッと説明してくれますね。

最後に、僕のプレゼンの師匠と勝手に思っている、高橋忍さん。(Blend4&Silverlight4ですね、もちろん見ます!)
本当に失礼なのは承知で、あえて分類してみると、Wowと事例の中間型かなと思います。
高橋さんのデモは、非常に美しいものが多いですし、おぉ!というものもかなりあります。
だからと言ってソースコードを蔑ろにしているわけではなく、美しいデモの中から、コードもポイントになる部分をしっかり紹介してくれるので、よくある概要セッションに留まりません。(現役時代は、高橋さんのプレゼンビデオを何度も見て参考にしました)

ちなみに、ジニアスはWow型です。(ここに異論はないでしょう 笑)
ジニアス、今年はSharePointとOffice開発なんですね。ちょっと意外ですけど間違いなく面白いでしょう。

と言った感じで、事前にスピーカーの情報を収集して、迷ったらそれで決めてみるのも面白いかなと思います。
松崎さん、井上さん、高橋さん、平井さん、ネタに挙げてしまいまして申し訳ありませんでした。
(依頼があればすぐに修正いたします。)

テーマ : なんとなく書きたいこと。。
ジャンル : 日記

tag : 日記 お知らせ

2010-07-08 : 日記 : コメント : 6 : トラックバック : 0
Pagetop
ホーム

カレンダー

プルダウン 降順 昇順 年別

06月 | 2010年07月 | 08月
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31


カテゴリ

openclose

タグクラウドとサーチ

メールフォーム

名前:
メール:
件名:
本文:

プロフィール

こだかたろう

元MSの小高と申します。
(↓こんな人です。)
こんな見た目です

ずっとエバンジェリストをしていましたが、この度転身いたしました。
よろしくどうぞ。

Select Template

RSSリンクの表示

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。