ASP.NET ルーティング

MSDN を読んでいたら、ASP.NET ルーティングということで、URLの書き換え方法が載っていた。

http://msdn.microsoft.com/ja-jp/library/cc668201.aspx

昔調べた方法から、IIS7 対応もあり、だいぶ変わっているようなので調べてみた。そうしたら、ええ~~、こんな簡単にできようになっちゃたんだー!と感動して、ためしに動かしてみようとしました。すると、CategoryRouteHandler がありませんと怒られる。そりゃそうだ、どこにもそんなコードがない。あれ??ということで調べてみると、どっとねっとふぁんBlog の小野さんが

ASP.NET ルーティングを実装する

で丁寧に解説してあった。さすが師匠wと感動する一方、やっぱりハンドラ書かないといけないのね。orz

LinqDataSource によるメモリ内コレクションのデータへの接続

http://msdn.microsoft.com/ja-jp/library/bb547113.aspx

Default.aspx.cs にMoviewLibraryクラスを追加。

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

namespace LinqDataSource
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }
    }

    public class MovieLibrary
    {
        string[] _availableGenres = { "Comedy", "Drama", "Romance" };

        public MovieLibrary()
        {
        }

        public string[] AvailableGenres
        {
            get
            {
                return _availableGenres;
            }
        }
    }
}

GridViewを追加。新しいデータソースを選択。

image

LINQを選択。

image

データソースの構成ダイアログで、MoviewLibraryを選択。

image

データの選択の構成ダイアログで、テーブル、Select, GroupBy, Where, OrderBy を指定可能。

image

実行すればこのとおり。

image

生成されたWPFコードは、

<asp:GridView ID="GridView1" runat="server" DataSourceID="LinqDataSource1">
</asp:GridView>
<asp:LinqDataSource ID="LinqDataSource1" runat="server"
    ContextTypeName="LinqDataSource.MovieLibrary" TableName="AvailableGenres">
</asp:LinqDataSource>

列名までしっかり処理されている。もう少し複雑なテーブルで試してみると、これがずいぶん便利だということに気が付く。

サービス参照の追加(VS2008) と Web参照の追加(VS2005)

VS2005 では、サービス参照の追加から、次のようなサービスを追加することができる。このダイアログの一番下に、参照設定ボタンがある。

image 

この参照設定ボタンをクリックすると、次のようなサービス参照設定の詳細を指定することができる。このダイアログの一番下に、互換性ということで、Web 参照の追加ボタンがある。.NET Framework 2.0 web サービステクノロジーに基づいたコードを生成することができる。

image

Web 参照の追加ボタンを押すと、昔懐かしいWeb 参照ダイアログが表示される。

image

.NET 2.0とそれ以降では、生成されるコードが若干違ってくるので、注意が必要。

ZAM3Dが生成するXAMLをC#で実装すると ー リソースモデル

リソースモデルはこんな感じ。

ZAM3Dが生成するXAMLをC#で実装すると

C++/CLI によるScreen Saver スケルトンコード

Windows Mobile の Today のプラグインを実装しようと思うと、WnProc を実装する必要があり、C#だけでは実装できない。

http://msdn.microsoft.com/en-us/library/ms839442.aspx

に、Creating a Pocket PC Today Screen Plug-in with the .NET Compact Framework という方法も載っているが、これだと共有メモリを使ってHTMLをレンダリングさせる方法なので、かえって見通しが悪そう。これなら、直接C++/CLIで実装して、一部を C#で書いたほうが楽そう。ただ、TodayのプラグインがC++/CLIで実装可能かどうか・・・C++/CLIでも実装可能なら、一部を C# で書くことも可能なので、ちょっと込み入った実装もだいぶ楽になるはず。

少し調べていたら、

http://www.atmarkit.co.jp/fdotnet/special/cppcli/cppcli_01.html

に「いままたC++が熱い!「C++/CLI」として大進化したVisual C++ 2005」の記事があり、C++/CLI によるScreen Saver のサンプルがあったので、試してみた。

結果はWinProc をC++/CLIで動かすことができる。ということは、おそらく Windows Mobile の Today のプラグインも同様に動くと思われると、思ったが、スマートデバイスのプロジェクトテンプレートでは、C++/CLI がサポートされないみたい orz

ピーデー 川俣 晶さんがアップしているコードを VS2008用にちょっと修正したので、とりあえずメモ。

  • コンパイル時の設定に、構成プロパティ→全般に 共通言語ランタイムサポート をセット。
  • 構成プロパティ→リンカ→追加の依存ファイルに scrnsavw.lib comctl32.lib をセット。
  • コンパイルしたイメージを /Sで起動。

#include <stdafx.h>
#include <windows.h>
#include <scrnsave.h>

#using <mscorlib.dll>
#using <System.dll>
#using <System.Drawing.dll>
#using <System.Windows.Forms.dll>

using namespace System;
using namespace System::Drawing;
using namespace System::Windows::Forms; 

UINT_PTR wTimer;
WORD wElapse = 1000;
int xText=0, yText=0;

#define ID_TIMER 1

LONG CALLBACK ScreenSaverProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
  switch (msg)
  {
    case WM_CREATE:
      {
        wTimer = SetTimer(hWnd, ID_TIMER, wElapse, NULL);
      }
      break;

    case WM_TIMER:
      {
        HDC hdc = GetDC(hWnd);
        xText = rand() % GetDeviceCaps(hdc,HORZRES);
        yText = rand() % GetDeviceCaps(hdc,VERTRES);
        ReleaseDC(hWnd,hdc);
        InvalidateRect(hWnd,NULL,TRUE);
      }
      break;

    case WM_DESTROY:
      if( wTimer ) KillTimer(hWnd, ID_TIMER);
      break;

    case WM_PAINT:
      {
        PAINTSTRUCT ps;
        HDC hDC = BeginPaint(hWnd, &ps);
{
System::Drawing::
Graphics ^ g = Graphics::FromHdc((IntPtr)hDC);
Font font("MS ゴシック", 160);
SolidBrush brush( Color::Blue);
PointF position( (float)xText, (float)yText );
g->DrawString( "テスト!",  %font,  %brush, position );
}
EndPaint(hWnd, &ps);
      }
      break;

    case WM_ERASEBKGND:
      {
        RECT rc;
        GetClientRect(hWnd,&rc);
        FillRect((HDC)wParam, &rc,
            (HBRUSH)GetStockObject(BLACK_BRUSH));
      }
      return 0L;

    default:
      break;
  }

  return DefScreenSaverProc(hWnd, msg, wParam, lParam);
}

BOOL WINAPI RegisterDialogClasses (HANDLE hInst)
{
  return TRUE;
}

BOOL CALLBACK ScreenSaverConfigureDialog(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
  return FALSE;
}

Visual Studio 2010 CTP

はるか昔に 2001年宇宙の旅を見て感動しましたが、いつのまにかVisual Studio 2010が・・・

ダウンロードは、Visual Studio 2010 and .NET Framework 4.0 CTP フィードバック

image

image

インストール手順、日本語キーボードに対応させる方法など、よくある質問に書いてあり、親切だー。

このあたりの注意事項や、今後の展開など、ディベロッパー製品開発統括部 Blog を参照。

そこには、「ウォークスルー ドキュメント (評価ガイド) の日本語版は、Visual Studio、ASP.NET、Visual Studio Team System の 3 部構成で、総ページ数 450 ページに近いその大半がまさに「操作手順書」です。これを片手に CTP を触ることで、迷わずに次世代 Visual Studio の新機能を体験していただけると思います。」と書いてあるが、450ページかぁ…・と思って、ウォークスルー ドキュメント を開いてみると、、、おおおーー日本語だーと思ったら、現時点で英語・日本語交じりで、重要度の高いところから集中的に訳している感じ。

中には、Parallel.For の素数を求めるサンプルが載っていたりする。ついに禁断のパラレルワールドへ・・・4KByte Memory, 300bpi, Assembler から育ってきた自分にとっては、当時の超大型コンピューター以上の性能をもったノートPCでゲームをしているあたり、隔世の感があります。

totalPrimes = 0;
sw = System.Diagnostics.Stopwatch.StartNew();
Parallel.For(2, UPPER_BOUND, i =>
{
  if (IsPrime(i)) Interlocked.Increment(ref totalPrimes);
});

マルチコア、パラレルプログラミングの環境がこんな簡単に与えるなんて・・・あちこちでデッドロック地獄が起こらないことを祈る・・・

Visual Studio を少し触ってみた感じては、操作性は大きく変わった感じはないが、主要な変更・拡張は

  • マルチモニターサポート
  • C#では、動的プログラミング、動的な型、PIA 非依存、Officeプログラミング
  • IDEでは、バックグラウンドコンパイル、呼び出し階層の表示・・・
  • 動的プログラミング
  • 複数バージョン対応
  • Office開発(リボン、アドインなど)
  • 並列コンピューティング
  • Microsoft Sync Framework
  • HTML コードスニペット

などなど山盛り

XNAでゲームプログラミング

TechEd Yokohama 2008 で、 XNA Game Studioで始めるゲームプログラミング の本が当たりました。先日、通勤の往復で読んでみましたが、非常にわかりやすく書いてあって、数時間で読めました。2Dであれば、かなり簡単に組めるんですね。C# でかけるのと、Windows Forms とかなり似たスタイルで書けるので、Windows.Forms/C#経験者であれば、すぐに簡単なゲームが書けそうです。3Dは一応簡単な例が載っていましたが、それなりのことをやろうと思うと、もう一段深く調べないといけないようですが、XNA初心者にはとてもお勧めの本です。ちょっとさわってみようかな・・・

51Jml6FfWfL__SL500_AA240_

まわる

もう少し簡単に書けるといいんだけど・・・          
 
Transform3DGroup tg = new Transform3DGroup();
tg.Children.Add(new TranslateTransform3D());
tg.Children.Add(new RotateTransform3D(new AxisAngleRotation3D(new Vector3D(1, 0, 0), this.Slider.Value *30)));
tg.Children.Add(new ScaleTransform3D());
this.BoxOR9GR10.Transform = tg;

Parallel Computing

 
Parallel Extensions Samples Tour

In this 20-minute tour of the Parallel Extensions sample code, you will learn where to focus your energy when you explore the samples. Watch this video in order to see how Parallel Extensions fit in the large picture and what goal it aims to solve.

Understanding the Parallel Class

The .NET incarnation of the solution to “imperative data parallelism” lives in the static Parallel class of the Parallel Extensions assembly. If that sentence confuses you a bit, watch the video for the full explanation.

Parallel LINQ

“Declarative Data Parallelism” with the Parallel Extensions is achieved through Parallel LINQ. This video explains how to parallelise your LINQ queries, how it works under the covers and how to configure it for advanced scenarios.