昨日社内で行った勉強会で話題になったことです。
MSの開発ソフト無料配布作戦に学生は?学生証明書を取れば、Visual Studio 2008 Professional Edition 日本語版、Expression Studioなどが無償で使えるというものです。学生証明書は1430円で取れるということです。
Visual Studio 2005 では Standardでできたモバイル開発が、2008ではProfessional以上でないよできなくなり、あちこちで不満が出ていただけに、学生うらやましすぎです。
2005は、Vistaにインストールするのが面倒なので、2008を使いたいのですが、滅多に使わない用途で2008 Professionalにアップグレードするのは厳しいので、結局、未だにExpress Editionしか持っていません。
- 2008/06/22(日) 16:29:07|
- .NET
-
| トラックバック:0
-
| コメント:0
2006/11/25(土)、
VSUG DAY 2006 Winterに行ってきました。
以下、私が出席したセッションについて報告します。
【.NET Framework 3.0 の登場!! 〜 Are you ready for a new day? 〜】
まず、「至上(ママ)最多の新製品群」ということで、Vista、Office 2007、Expression等々の説明が簡単にあり、その後本題の.NET Framework 3.0について説明がありました。
本題の内容は、以下の通りです。
・Windows Presentation Foundation (WPF)
・ASP.NET AJAX
・Windows Communication Foundation(WCF)
・Windows Workflow Foundation(WF)
・Windows CardSpace(WCS)
内容は正直、ネット等で既に得られるレベルでしたので、ここでは省略します。
【鋼鉄製のニシキヘビにまかれて】
.NET版PythonであるIronPythonについてのセッションです。正直、興味はあっても仕事には関係無いかなと思っていたのですが、そうでもないかなと思いました。
IronPythonは、.NET Frameworkにアクセスできるインタプリタ言語ということで、たとえば以下のような使い道があります。
・プロトタイピング
・デバッグ用ドライバ
・エンドユーザカスタマイズ
たとえば、性能や整合性が重要な業務ロジックはC#等で作成し、要件が明確でない・変更の激しい部分はIronPythonで作るということを勧めていました。これはいいかもしれません。
【新世代スレッド・アプリケーション開発方法 インテルスレディング・ビルディング・ブロックの紹介】
CPUのマルチコア・メニーコア化が進む中で、スレッドプログラミングがますます重要になるという前置きの元、インテルのスレッド向けソフトウェア製品の宣伝のセッションでした。
スレッドといっても、C++等を使ったネイティブ系スレッドの話なので、今後関係する人は少ないのではないかと思いながら聞いていました。
最初は、OpenMPの話でした。OpenMPは、関数単位ではなくて関数の一部をマルチスレッド化するアーキテクチャです。インテルの各種製品が対応しています。
たとえば、マルチスレッド化したいforループの直前に
#pragma omp for schedule(dynamic)
などと追加することで、そのforループがマルチスレッド化されます。
また、正当性やパフォーマンスの確認が、Visual Studio上で使えるツールにより、簡単にできます。
次に、主題になっているスレディング・ビルディング・ブロック(TBB)の紹介がありました。これは、C++のテンプレートを利用したライブラリということでし。これを使えば、パフォーマンスを目的としたスレディングが容易に可能ということでした。
OpenMP対応の製品もTBBも、Windows向けだけでなく、Linux版やMac OS X版もあるということです。特にTBBはライブラリなので、インテルのコンパイラ以外でも使えるということです。
インテルのサイトから評価版が落とせるということなので、興味のある方は動作確認してみてはいかがでしょうか。
【Windows Vista Desktop Windows Manager Advanced Programming】
VistaのAero等を実現する、Desktop Windows Manager(DWM)についてのセッションです。
私はGDIやDirectX等の知識がないので、ついて行けない部分もありましたが、めちゃくちゃおもしろかったです。
以下に、簡単にメモっておきます。
DWMは、dwm.exeというユーザモードプロセスが担っています。ユーザモードなので、タスクマネージャで簡単に殺すことができます。しかし、すぐに復活します。
Aeroですが、実は、リモートデスクトップにも対応しています。この場合、クライアント側で描写されます。従って、サーバ側はAeroに対応していなくても、クライアント側が対応していれば、Aeroが使えます。
デモでは、Virtual PCを使い、実マシンから仮想マシン側へリモートログインして、Aeroが使えていました。
DWMが機能する状態では、GDIもGDI+も、ソフトウェア・レンダリングとなるということです。トップレベルウィンドウごとにDouble Bufferとなります。
従って、トップレベルウィンドウが増えると、メモリ使用量が増えます。
一方、DWMが機能しない状態では、従来通りとなります。
このことにより、DWMの状態により、WM_PAINTイベントの回数が全く異なることになります。DWMが機能しない場合、ウィンドウ上で別のウィンドウをごりごり動かすと、WM_PAINTイベントがばんばん飛んできます。一方、DWMが機能する場合、ほとんど飛んできません。この結果、レスポンスがよくなる可能性がありますし、両方のモードで動作が異なる可能性がでてきます。
このように、DWMが機能する場合は裏の動きが変わるため、場合によってはこれまで性能のために行ってた手法が逆効果になるということもあります。たとえば、XORラバーバンドという手法は最悪で、DWMが機能する場合、めちゃくちゃ遅くなります(デモで見せて貰いました)。
もしかしたらあり得るので覚えておいた方がいい話として、DirectDrawでクライアント領域外にWriteしてしまうと、Aeroが無効化されてしまうということでした。
他にもいろいろおもしろい話やでもがたくさんあったのですが、書ききれないので、省略します。ただし、重要な点を1つ書いておきます。それは、Vistaで動くWindowsアプリケーションを作成する場合、テストがめちゃくちゃ大変になるということです。
上記のように、DWMが機能するかしないかによって、裏の動作ががらっと変わってしまいます。さらに、途中で状態が変わるということもあります。
さらに、リモートデスクトップをサポートするのであれば、そちらもテストする必要があります。
業務アプリでここまでの機能を使う画面はこれまではあまりありませんでしたが、Vistaの登場で、今後は要求されるかもしれません。その場合、こういった点に注意する必要があります。
【感想】
.NET Framework 3.0の情報を聞きに行ったつもりでしたが、ちょっと毛色が違う話が多くなってしまいました。Visual Studioユーザといっても、業務系だけでなくいろいろな人がいるでしょうから、話が多岐にわたるのはやむを得ないのか
もしれません。
聞いたセッションの中では、とにかくDWMの話がおもしろかったです。私には毛色が違いすぎて難しい話が多かったのですが、暇があったらぜひいろいろ試してみたいと思いました。
- 2006/11/26(日) 20:17:13|
- .NET
-
| トラックバック:0
-
| コメント:0
C#とかVB.NETとかの2005 Express Editionをインストールすると、なぜか、SQL Server 2005 Express Editionのインストールでエラーになっちゃいます。
ログ(C:\Documents and Settings\xxx\Local Settings\Temp\dd_vserror80.txt)を見ると、こんな記述が。
[12/16/05,00:48:57] Microsoft SQL Server 2005 Express Edition x86: [2] Component Microsoft SQL Server 2005 Express Edition x86 returned an unexpected value.
[12/16/05,00:49:07] ExpressUI: [2] DepCheck indicates Microsoft SQL Server 2005 Express Edition x86 is not installed.
- 2005/12/16(金) 22:16:54|
- .NET
-
| トラックバック:0
-
| コメント:0
Reflector for .NETで逆コンパイル(その1)書いてて思ったのが、C#にあって
VB.NETに無い機能はどうなろうってこと。
たとえば、演算子オーバーロード(VB.NET 2005にはありますが)。
using System;
class MyString
{
string str;
public MyString(string s)
{
str = s;
}
public static MyString operator+( MyString s1, MyString s2)
{
string ss1 = s1.ToString();
string ss2 = s2.ToString();
return new MyString(ss1 + ss2);
}
public override string ToString()
{
return str;
}
}
class TestMain
{
public static void Main()
{
MyString s1 = new MyString("abcde");
MyString s2 = new MyString("12345");
MyString s3 = s1+s2;
Console.WriteLine(s3.ToString());
}
}
これをVB.NETに変換した結果が、これ。
Imports System
Friend Class MyString
' Methods
Public Sub New(ByVal s As String)
Me.str = s
End Sub
Public Shared Operator +(ByVal s1 As MyString, ByVal s2 As MyString) As MyString
Dim text1 As String = s1.ToString
Dim text2 As String = s2.ToString
Return New MyString((text1 & text2))
End Function
Public Overrides Function ToString() As String
Return Me.str
End Function
' Fields
Private str As String
End Class
End Namespace
と
Imports System
Friend Class TestMain
' Methods
Public Sub New()
End Sub
Public Shared Sub Main()
Dim text1 As New MyString("abcde")
Dim text2 As New MyString("12345")
Dim text3 As MyString = (text1 + text2)
Console.WriteLine(text3.ToString)
End Sub
End Class
End Namespace
Namespaceがおかしいのは置いておいて、やっぱりコンパイルできないソースになりました。
- 2005/11/20(日) 06:35:36|
- .NET
-
| トラックバック:0
-
| コメント:0
.NETで逆コンパイルしたくて、ツールを探しました。逆アセンブルといっても、Ildasm.exeのようなILのコードじゃなくて、C#やVB.NETのコードにできるものを。
まず見つけたのが、
Anakrino。しかし、実行してもエラーになっちゃいます。
次に見つけたのが、
Reflector for .NET。残念ながら、デフォルトでは直接フファイルに結果を出力することはできないようですが、使えそうです。
C#で作ったプログラムを表示したのがこれ。
同じファイルをVB.NETで表示したのがこれ。
なぜか、Delphiにもできます。
当然というか、ILでも。
なお、本来のコードは以下の通り。
using System;
namespace StringTest11
{
class StringTest11
{
[STAThread]
static void Main(string[] args)
{
string str = "";
foreach(string arg in args)
{
str += arg;
}
Console.WriteLine(str);
}
}
}
foreach()がfor()になってるのが分かります。
- 2005/11/19(土) 22:39:09|
- .NET
-
| トラックバック:0
-
| コメント:0