Windows Azure Eclipse PDTでのPHPプロジェクト開発手順

Posted in Azure, OS関連, PHP関連, 開発関連 on 7月 27th, 2011 by Site Administrator

http://msdn.microsoft.com/ja-jp/windowsazure/hh240574

こちらに手順がまとめられています。
私はPleiades 3.7を使って構築を行いました。

アナログチューナー延命

Posted in ハードウェア on 7月 26th, 2011 by Site Administrator

我が家はケーブルテレビ契約を行っており、しばらくは上位でデジアナ変換が行われることとなります。
おかげで一部のアナログ機器(パソコン用テレビチューナー)が使い続けられる、と思いきや、
アナログ放送用の番組表サービスが停止してしまうとか…。
アイ・オー・データのGV-MVP/GX2Wを使っているのですが、本日確認してみると番組表のダウンロードに
失敗してました。メーカー製ユーティリティなので設定もいじれず、お手上げ状態です。

http://www.valsoft.jp/delphi/tvs2hp.html
iEPGでの番組録画ができるようで、これを併用することで番組表の穴は埋められます。
キーワード録画もできるとのことで、こちらのTVスケジューラーを使えば、しばらくは困らなそうです。

ちなみになぜアナログ機器を使い続けるかというと、GV-MVP/GX2WはLAN外へのテレビの
再配信機能があるのです。ワンセグも選択肢にはあるのですが、屋内での視聴を考えると
IPネットワーク経由のほうが安定していることが多いんですよね。
外でサッカー中継を見たいとき、緊急ニュースを見たい時などにかなり重宝するので、
デジタル放送で同様の機能が正式に認められるまでは使い続けるでしょう。

Windows Azure MSDN特典の場合の契約期間

Posted in Azure, OS関連 on 7月 22nd, 2011 by Site Administrator

Windows Azureですが、MSDN契約者向けには無料使用権の特典があります。
ざっと調べてみると契約期間が8か月・16か月限定とか、MSDN特典の用途は
開発用途に限るとか、契約関連の情報で混乱してきたのでMSに問い合わせてみました。

契約期間→MSDNを契約している限りは有効
用途→特に制限はなし。商用利用も可能。

とのことでした。参考情報として公開です。
お約束ですが、ライセンスについて気にされている方は直接MSに問い合わせたほうが良いです。

Adaptec ASR-6805E、ASR-6405E

Posted in ハードウェア on 7月 20th, 2011 by Site Administrator

http://akiba-pc.watch.impress.co.jp/hotline/20110723/ni_c6805e.html

Adaptec(PMC-Sierra)のSAS/SATA RAIDカードです。
注目すべきはスロットがPCI Expressのx4、x1であること。

Intel DQ67SWではx16スロットでAdaptec 2405、2805ともに動作せず、
x8が使える空きスロットもないため泣くこととなりました。

ハードウェアRAIDでx1/x4に刺さるボードはあまり見かけないのでそのうち購入します。

ASP.NET Razor カスタムヘルパー内でのActionLinkの使用

Posted in ASP.NET on 7月 20th, 2011 by Site Administrator

Razorのカスタムヘルパー内でActionLinkを使用する場合、

@helper CustomActionLink(label As String, action As String, controller As String)
    @Html.ActionLink(label, action, controller)
End Helper

上記のように@Helper内でHtml.ActionLinkを使用するとエラーとなります。
Helperのインスタンスが
System.Web.WebPages.Html.HtmlHelper
となっているためです。System.Web.Mvc.HtmlHelperを使うため、

@helper CustomActionLink(html As System.Web.Mvc.HtmlHelper, label As String, action As String, controller As String)
    @html.ActionLink(label, action, controller)
End Helper

と明示的にHtmlヘルパーのインスタンスを渡すようにして回避しました。

BHR-4GRV

Posted in ハードウェア on 7月 14th, 2011 by Site Administrator

http://buffalo.jp/product/news/2011/07/13_01/

BHR-4RVの後継機種が発表されました。
VPNクライアント機能を搭載しているこのクラスのルーターってなかなか無いんですよね。

ASP.NET MVC コードファースト EF 4.1の規約とデータベースの初期化方法

Posted in ASP.NET on 7月 14th, 2011 by Site Administrator

連載:Entity Framework 4.1入門 第2回 EF 4.1の規約とデータベースの初期化方法

まだまだまとまった記事がないので貴重です。
既存のDBに合わせてコードファーストを使う場合に必要なテクニックになりますので
最初に読んでおいたほうがいいでしょう。

ASP.NET MVC コントローラの非公開メソッド

Posted in ASP.NET on 7月 13th, 2011 by Site Administrator

メソッドにNonActionAttribute属性を付与することで、外部公開されなくなる

    <NonAction()>
    Function Index() As ViewResult
    ...
    End Function

ASP.NET MVC コードファースト エンティティ数とパフォーマンス

Posted in ASP.NET on 7月 13th, 2011 by Site Administrator

コードファーストで、定義したエンティティクラスはcontextクラスにプロパティとして登録することになります。
便利な機能なのですが、ここでふと疑問が。contextはどういう単位で作成すべきなのか?
エンティティ単位にcontextを作成すべきなのか、一つのcontextに詰め込むべきなのか。
はたまた使用するエンティティの種類によって適宜切り替えるべきなのか。
(可能であれば一つのcontextに詰め込んだほうが作りがすっきりする)
想像するに、内部ではエンティティクラスを参照してSQLを組み立てたりしているので、登録されるエンティティが
多くなると、きっとパフォーマンスが悪くなっていくのでしょう。

しかし、いろいろなサンプルを参照しても、一つのcontextにすべてのエンティティをまとめているものばかり。
いったいどれだけのエンティティを詰め込んだらパフォーマンス的に支障が出るのか調べてみました。

調査

エンティティは下記の3クラスを1組とします。各クラスでリレーションが張ってあります。

Public Class SizeTest1Item1
     <Key()>
     <DatabaseGenerated(DatabaseGeneratedOption.Identity)>
     Public Property id As Integer
     Public Property option1_id As Integer
     Public Property data1 As String
     <ForeignKey("option1_id")>
     Public Overridable Property Item() As SizeTest1Item2
End Class
Public Class SizeTest1Item2
     <Key()>
     <DatabaseGenerated(DatabaseGeneratedOption.Identity)>
     Public Property id As Integer
     Public Property option2_id As Integer
     Public Property data2 As String
     <ForeignKey("option2_id")>
     Public Overridable Property Item2() As SizeTest1Item3
End Class
Public Class SizeTest1Item3
     <Key()>
     <DatabaseGenerated(DatabaseGeneratedOption.Identity)>
     Public Property id As Integer
     Public Property data3 As String
End Class

上記の組を名前を変えつつ1、10、20、…、300、500と増やし、contextに登録して計測します。

計測は下記の2つで計測します。
1.contextクラスのインスタンス生成
2.データ取得
2ではincludeを使用して、遅延ロードが行われないよう(joinしたSQLが発行されるよう)にしています。

        Dim sw As New Stopwatch
        sw.Start()
        Dim db As SizeTestContext = New SizeTestContext
        sw.Stop()
        Dim sec As Double = sw.ElapsedTicks / Stopwatch.Frequency
        System.Diagnostics.Debug.WriteLine("time " + sec.ToString())

        Dim id As Integer = DateTime.Now.Ticks Mod 10000
        sw.Reset()
        sw.Start()
        Dim data3 = (From a In db.SizeTest1Item1s.Include("Item").Include("Item.Item2")
                    Where a.id > id).ToList()
        sw.Stop()
        sec = sw.ElapsedTicks / Stopwatch.Frequency
        System.Diagnostics.Debug.WriteLine("sql time " + sec.ToString())

結果

組数 エンティティ数 インスタンス生成(s) データ取得(s)
初回 2回目以降 初回 2回目以降
1 3 0.0040139000 0.00002185 0.380862 0.00700525
10 30 0.0367546 0.000054625 0.6435081 0.0074485
20 60 0.085165 0.000098675 0.9136356 0.010602125
30 90 0.1359965 0.000155375 1.4051476 0.00925665
50 150 0.2135294 0.000204075 2.5750359 0.0142086
100 300 0.4460645 0.000499725 9.8501423 0.02892025
200 600 0.921872 0.001003225 53.739042 0.064910225
300 900 1.3339758 0.00120595 168.6336884 0.1096848
500 1500 2.2109845 0.0026371 718.1666749 0.3085771




組数として30(エンティティ数90)くらいが境目でしょうか。
これを過ぎると急激にパフォーマンスが悪化します。

逆に言えばエンティティ数90程度のシステムであれば、一つのcontextにまとめてしまっても
問題ないとも言えます。

このあたりは、システムの規模に合わせて要検討というところで。

ASP.NET MVC コードファースト データをJOINして一括取得

Posted in ASP.NET, DB on 7月 11th, 2011 by Site Administrator
Public Class Data1Record
    Public Property id As Integer
    Public Property item_id As Integer
    Public Overridable Property Item() As Data2Record
End Class

上記のようにエンティティモデルにOverridable Propertyを設定すると、対象のデータが
遅延ロード可能になります。これを遅延ではなく、joinした形でまとめてデータを取得したい場合は

    Function Index() As ViewResult
        Dim data = db.Data1Records.Include("Item").ToList()
        Return View(data)
    End Function

上記のようIncludeで対象Propertyを指定することによって、joinしてデータを一括取得できます。