2007年8月21日火曜日

.NET Framework 3.5 概要

Tech ed 2007

.NET Framework 3.5 概要
2007/08/21 17:14:20

・LINQ
・ASP.NET AJAX
・WCF,WF,WPF の機能強化
・Base Class Library 機能強化

関連開発ツール
Visual Studio 2008
マルチターゲット
WPF,WCF 正式サポート
Expression シリーズ


コア機能
CLR + BCL
CLR はほとんど変わらず⇒成熟?
BCL 強化
ハイパフォーマンス HashSet
デモ 乱数を発生させて、かぶらないかチェック
DateTimeOffset と TimeZoneInfoの導入
ローカルPCのタイムゾーンを使用可
複数のタイムゾーンにまたがった時間データの利用
デモ
など
実行速度の向上
ガベージコレクションの改善
64bit 環境でパフォーマンス向上
ThreadPool のパフォーマンス改善
Ngen のメモリ使用の効率化
Ngen におけるセキュリティチェック


機能強化テクノロジ
WPF
Firefox で XBAP(エックスバップと発音)をサポート
旭山動物公園
http://www.asahiyamazoo-aict.jp/
Silverlight (ってWPFじゃないじゃん)

WF
Workflow Embedded Service

WCF (Windows Server 2008 の発売もあって結構強化)
Web サービスだけのテクノロジーではない
統一されたプログラミングモデルで接続を実現
REST style
WebGet,WebInvoke,UriTemplate
デモ
JSON (javaScript Object Notation) サポート
AJAX や Silverlight との連携
RSS/ATOM によるフィード
System.ServiceModel.Syndication 名前空間
デモ ダウンロードできるようにするとのこと
SOAP対応のさらなる強化
部分信頼のサポート

新機能
LINQ
言語統合クエリ
言語:C# 3.0, VB 9.0, 対応させれば他の言語も可
ソース:Objects, DB, SQL, XML
デモ
押さえておくべきキーワード
クエリ表現
拡張メソッド
ラムダ式
匿名型
Expression tree

ASP.NET AJAX
ASP.NET の開発モデルそのままで AJAX サイト構築可


18:19:44

Visual Studio Team System 2008

Tech ed 2007 テクニカルセッション
Visual Studio Team System 2008
2007/08/21

長沢さん

前バージョンをすべて包括
役割によって Edition が異なる
・アーキ
・開発者
・テスタ
・DB
これらを Team Foundation Server で管理


製品名の変更
新機能コンセプト
品質
生産性
コラボ


ソフトウェア品質 ************************************************

Architecture Edition
運用もデザインして設計
VS のプロジェクト生成と同期


コードメトリクス
コードの複雑さ(5つ)
・クラスの結合度合
・クラスの継承の深さ
・コードライン数
・循環的な複雑度
・保守容易性インデックス
Windows のコード・開発情報をもとにコード計測の計算式を開発

メニュー「開発者」
色分け3段階

プロファイリング
動的にボトルネックを検出できる
ホットパス
レポーティング
コマンドライン

単体テストとコードガバレッジ
VS 2008 Professional Edition から
スクラッチから作り直した
期待できるかも
アセンブリ(dll exe)をベースにテストコードが自動生成
csv,DB,XML,などからテストデータを引っ張ってこれる
ガバレッジをとると、どこのコードをカバーしているかを視覚的に表示


Web テスト
http のレベルで動作を記録・自動実行
ロードテスト
負荷をかける
手動テスト

*************************************************************


チームの生産性の向上 ****************************************

Team Foundation Server でチームによる開発を支援
変更セットとバグ・仕様変更と連携
ビルド管理

新機能
ソースコード管理機能の強化
ポリシーの充実
フォルダ単位で管理
チームビルド機能の強化
ビルド管理の向上
結合・単体テストの自動実行


**************************************************************
途中。。。

2007年8月17日金曜日

マネージドアプリのプリコンパイル

.NET において、あらゆる実行ファイル(exe & dll) は中間言語として存在するわけだが、それをあらかじめ、その環境のコードにコンパイルするツールが

Ngen.exe (ネイティブ イメージ ジェネレーター)

 というやつ。ふつーの vista マシンでは C:\Windows\Microsoft.NET\Framework\v2.0.50727 にある。
 Ngen はネイティブイメージ(そのマシンのプロセッサ固有のマシンコードにコンパイルされたファイル)を作成してローカルコンピュータのネイティブイメージキャッシュ(どこよそこ?)にインストールし、ランタイムはキャッシュにあるネイティブイメージを使用できるというわけ。そして、ネイティブイメージによって、メモリ使用の改善と起動時間の短縮が期待できるらしい。
 
 ちなみに、Visual StudioとかBlendとかがネイティブイメージにキャッシュされてた。つまり、Microsoft お墨付きというわけだ。


使用法
インストール
ngen install [exe か dll]

アンインストール
ngen uninstall [exe か dll]

インストールされているイメージ?の確認
ngen display


 例:)
 で、現担当のアプリに適応すると起動が10 ~ 20 % くらい短縮された。

volatile 修飾子

C# にて

複数のスレッドからアクセスされるフィールドは lock 文で排他制御するか volatile をつけるべし

private volatile bool _running;
public bool Running
{
get { return _running; }
set { _running = value; }
}

public void Run()
{
try
{
while (_running)
{
// do something...
}
}
catch (SocketException e)
{
MessageBox.Show("SocketException : " + e.ToString());
}
}


2007年8月9日木曜日

Perl 開発環境

 Windows アプリケーションのパフォーマンスを測定しようとログを吐き出すようにしたものの、それを解析するのに位置からC#でコードを書くのが少々おっくう。

 大それたことをするわけではないから・・・じゃあ、お手軽にPerlで

エディタでチョコチョコ書いているときふと
「あ、Eclipse(for Perl) って最近どうなったんだろ」

と思いつき、導入したのが ↓のEPIC


お、色分けしてる、インデントとかの補完機能がある、インテリセンスもある・・・・ブレークポイントがはれる!!

まさか、Perl でブレークはってデバッグできるとは。。。

こうなると Perl って感じがしないけど、便利は便利

いやはや、半年振りの Perl でした。


# 最近の Windows では、IronPython、IronRuby ときたからには次は IronPerl か!?

2007年7月31日火曜日

Visual Studio 2008 Beta2 リリース


"Orcas" もとい、Visual Studio 2008 の Beta 2 がリリース

ココから

あれ?先月のVSUGフォーラムでは今年の12月に製品をリリースとか言ってたのになぁ・・・

ま、そんな細かいことは置いといて、今回のリリースの目玉は何といっても

 Silverlight!

これで Exprssion Blend に引き続き、Visual Studio にも Silverlight 環境が整ったということか。

しかし、しかしだ。

Silverlight 1.0 と Silverlight 1.1 には数字以上に大きな違いがあるのでは?

今回 Silverlight 1.0 は RCとなったが、 1.1 は alpha Refresh とかいう Beta にもなってない・・・

1.0 では使えるUIコントロールが基本的な物しかないのに対し、1.1 はWPF のコントロールをほとんど使えるようにしようとしているらしい(ってMSの人が言ってた)。

今後どうなることやら・・・(もうちょっと明快なロードマップでも示してくれないものか)

あ、Blend 2 August Preview も公開された模様
ただのRC対応か?


WPF パフォーマンス測定ツール

「WPF Perfomance Suuite」

download

Perforator
レンダリングの動作を分析
Visual Profiler
WPF サービス、ビジュアルツリー上の要素によるレイアウトやイベントハンドラといった WPF サービスの分析
Event Trace
イベントの分析やログファイルの生成
Working Set Analyzer
アプリケーションのワーキングセット特性の分析
※ワーキングセット・・・プロセスがある時点で使用中の仮想メモリページの集合
ETW Trace Viewer
WPF UI フォーマットでのイベント追跡ログファイルの記録・表示・閲覧

そして「WPF アプリケーションの最適化」(Optimizeing WPF Application Perfomance)


出典
"WpfPerf tools now available as a msi" 2007.06.12

2007年7月22日日曜日

スペシャルセッション

Tech Ed 2007 のスペシャルセッションの内容決定


Tech Ed 2007 のページにスペシャルセッションのページに追加された

今年は
  • LINQ to the Future ~ LINQ が創る次世代型データ処理技術 ~
  • ザ・ロードマップ ~ マイクロソフト製品の現在・そして未来 ~
の二つが講演される模様

 ぱっと見、Vista Application Developer としては後者の「ザ・ロードマップ」の方が気になるのだけど・・・"対象者"の欄に"Dev"はなく"Arc"と"IT"だけ。。。しかも前者の"対象者"は"Arc"と"Dev"。。。

 今まで&直近でも「データベース」とか「クエリ」といったキーワードとは無縁だったため、拒否反応に近いものを起こしてしまったことを認めざるをえない。

 次のテクノロジー「言語統合クエリ:Linq」は抑えておくべきか否か・・・データベースにも手を出すべきか・・・うーん悩む

2007年7月19日木曜日

Tech-Ed 2007 Yokohama

Tech-Ed 2007 Yokohama 参加登録

 新人研修も無事に終え、本業の Project も無事にGMを迎えられた。

そんなとこで見つけたのがこのTech-Ed 2007

学生の頃は、自分が講演しない限りカンファレンスの参加料など大学は払ってくれないので、この手のイベントはまったく Out of 眼中だったけど、今は違う!

で、上司をどううまく丸め込もうかと思案してたら・・・上司発見。

ま、言うだけ言ってみるかと言ってみたら・・・あっさりとOK

会社とはこんなものなのかと、電車賃を巡って大学の予算委員とすったもんだしてた去年を懐かしく思った。



さて、毎年夏真っ盛りの時期に行われるMicrosoft の開発者向けカンファレンス

基調講演は誰が話すかまだ分からないけど Windows Server 2008, Windows Server Virtualization, Visual Studio 2008, SQL Server 2008 とかの紹介がある模様。んー、システム寄りだ・・・

テクニカルセッションは大きく6つに分かれ、
  1. アーキテクチャ
  2. プラットフォーム
  3. 開発プラットフォームとツール
  4. 2007 Office System など
  5. セキュリティなど
  6. インフラ
となっていた。

自分にとっては"3"がメインかな。他には1・2で興味が引かれるのがあるかもという感じ。


T3-404 「WPF アプリケーションの最適化」は外せないな。スピーカーが川西さんというのもある。ぜひとも一度お会いしたい人だ。

AJAXはどうでもよくって、T3-302 「Visual Studio 2008 概要」とか T3-305「Visual Studio 2008 における Visual C# の新機能」とか T307 「.NET Framework 3.5 概要」が気になる。


あと、「Microsoft CPLS Hands-on Lab」という実際に手を動かすセミナーのようなものもぜひ受けてみたい。ただ、ざっと見 H-313「Expression Blend を活用したリッチなアプリケーションの実現」 くらいしか興味が惹かれなかった。しかもいかにも「さぁBlendを使ってみよう!」みたいなニオイがして、ショボイことしかやらなそうな・・・

ま、これからもっと情報も出てくるだろうし、じっくり吟味することにしよう

2007年6月2日土曜日

Aero Glass

すりガラス効果がついたウィンドウ


Vistaっぽいウィンドウにしているこの「すりガラス」とか「半透明」の効果、

実は2種類あった。

クライアント領域(アプリケーションウィンドウ内)での描写技術としてのWPFと
ウィンドウ同士の合成技術としてのWin32は別々のもの

つまり、↓こんなのはWPFの半透明で










円が透けて、下に赤い四角とボタンが見える


メディアプレイヤーの↓こんなやつはWin32のDWM(Desktop Window Manager)




WPF単体でも、ウィンドウのStyleをnoneにしてAllowTransparentをtureにすればウィンドウの下まで見える、半透明ウィンドウができるけど、DWMを使うとそのマシンに設定された枠で半透明になるのがちょっと違う。

で、最初のやつを背景(Window.Background を No brush)にして、DWMで半透明にすると、
↓こんな感じになる










ただし、ローカルでAeroが切られていると・・・










ちょっとカワイソウなことに・・・ま、デフォルトで斜めにグラデーションが入っているからそんなにみっともなくはない?

コード的には GlassHelperというDWMを叩くクラスを作って、

using System;
using System.Collections.Generic;
using System.Text;
using System.Windows;
using System.Windows.Media;
using System.Windows.Interop;
using System.Runtime.InteropServices;

namespace AeroGlass
{
class GlassHelper
{
public static bool ExtendGlassFrame(Window window, Thickness margin)
{
if (!DwmIsCompositionEnabled())
return false;

IntPtr hwnd = new WindowInteropHelper(window).Handle;
if (hwnd == IntPtr.Zero)
throw new InvalidOperationException("ガラス効果を加える前にウィンドウを表示せよ");

window.Background = Brushes.Transparent;
HwndSource.FromHwnd(hwnd).CompositionTarget.BackgroundColor = Colors.Transparent;

MARGINS margins = new MARGINS(margin);
DwmExtendFrameIntoClientArea(hwnd, ref margins);
return true;
}

struct MARGINS
{
public MARGINS(Thickness t)
{
Left = (int)t.Left;
Right = (int)t.Right;
Top = (int)t.Top;
Bottom = (int)t.Bottom;
}
public int Left;
public int Right;
public int Top;
public int Bottom;
}

// DWM の dll をロード
[DllImport("dwmapi.dll", PreserveSig = false)]
static extern void DwmExtendFrameIntoClientArea(IntPtr hwnd, ref MARGINS margins);

[DllImport("dwmapi.dll", PreserveSig = false)]
static extern bool DwmIsCompositionEnabled();

}
}



OnSourceInitialized をオーバーライドして実行

protected override void OnSourceInitialized(EventArgs e)
{
base.OnSourceInitialized(e);
GlassHelper.ExtendGlassFrame(this, new Thickness(-1));
}

2007年5月13日日曜日

Silverlight

 WPF をマルチプラットフォームへ・・・




 WPFをググってるとちょこちょこ顔を出すこの"Silverlight"

一体何者かというと、WPF Everywhere ということで、Windows 以外のOSでも

WPFの技術を使えるようにしようというもので、

"Silverlight は次世代の.NETベースのメディア及びリッチインタラクティブWebアプリケーションへの橋渡しとなるクロスブラウザー・クロスプラットフォームのプラグインです。"

とのこと。

WPF開発の定番Blend + Visual Studio 2005 の次バージョンにSilverlightが組み込まれるようで、

既に、Blend 2 + 次Visual Studio(Orcas) のセットがリリースされていた!

(最近Blend のベータがいつの間にかRCになっていたとビックリしたのに・・・)

Adobeの"Apollo"といい、時代の流れはマルチプラットフォーム - OSのみならずブラウザまでも - ということか。

2007年5月12日土曜日

Animation by Blend

Microsoft Expression Blend でつくるアニメーション


キーワードは「Event」と「Triger」。

あるイベント(ClickとかMouseDownとか)をアニメーション開始のトリガーとして設定。そしてそのトリガーは何のアニメーション(ストーリーボード)の引き金なのかを指定することにより実現する。


【ポイント】イベントにしたい要素(たとえばボタン)を指定(アクティブ)にしてから、"Triggers"の"+Event"をクリックする

そうすると、下段に
When "要素" "イベント" is raised
と表示される。





 ここでは左上のボタン「testButton」の「Click」を「testButtonClick」というストーリーボードのトリガーとして指定








 
 そうすると動画編集アプリみたいなものになる。

 ※プレビュー画面が赤い枠で囲まれている状態がアニメーションを編集している状態。





アニメーションは特定の瞬間の状態を定義するだけで、自動的にその間を埋めてくれる。
ここでは、ボタンをクリックされてから1秒後と4秒後のメインウィンドウの背景を変更

 

これで出来上がり♪