仮面's profile宇宙仮面の C# 研究室.Live SpacePhotosBlogListsMore Tools Help

Blog


    November 23

    .NET Micro Framework 4.0 Features

    Microsoftは、組み込みシステム向けの開発および実行環境である「.NET Micro Framework」の大部分をオープンソース化した。

    今回のエンハンスポイントは次にような感じらしい。

    1. HTTP と HTTPs:
      System.Net.HttpWebRequest、System.Net.HttpWebResponse、および System.Net.HttpListener のサポート
    2. Multi-touch
      multi-touch イベントが、オブジェクト モデルと、エミュレータでサポート。 ジェスチャ サポートの再設計により高速化かつ柔軟性の向上。
    3. バージョン管理:
      以下、意味がよくわからないけれど、バージョン管理の強化。構築時と、デバイス上のアセンブリ バージョン番号で、厳密なバージョニング、および不足しているアセンブリの再配布。同じアセンブリで別のバージョン番号に属する型のサイドバイサイドロードとバインドをサポート。 バージョン番号を含む名前付けアセンブリのサポート追加。
    4. SSL および HTTPS のエミュレータ サポート:
      SSL および HTTPs エミュレーションをエミュレータでサポート。
    5. ネイティブ XML Parser:
      XML パーサー ネイティブ コードでパフォーマンスを向上。
    6. ネイティブのコレクション:
      コレクション クラスはネイティブ コードで実装され、Queue と Stackをサポート。
    7. 時刻の同期:
      新しい時刻同期 API により、システム時刻を指定したサーバーの時刻から自動または手動で同期。
    8. 任意の表示サイズ:
      760 KB を超えるビットマップをサポート、カスタムのヒープと割り当て領域を提供。
    9. 大きなバッファ:
      新しい型、Microsoft.SPOT.Hardware.LargeBufferをサポート。これにより、マネージド ヒープに収まるらない 760 KB を超えるバッファの割り当てが可能。
    10. ウォッチドッグと電力制御:
      電力レベルとウォッチドッグ動作の振る舞いの制御が、Microsoft.SPOT.Hardware.PowerState、Microsoft.SPOT.Hardware.Watchdog により可能。Microsoft.SPOT.Hardware.dll を使用して、マネージ アプリケーションから制御。
    11. 太いペンやグラデーション塗りつぶし:
      ウィジェットとコントロールをデザインするため、豊富なグラフィック モデルを提供。
    12. TinyCore パフォーマンスの向上:
      イベントのディスパッチとレイアウトで TinyCore のパフォーマンスを強化。

    Visual Studio 2010 Beta 2

    Visual Studio 2010 Beta 2 がダウンロードできるようになっていますが、その新機能は・・・

    注意: 当然ながらリリース前なので、リリース時点でどうなるかはわかりません。

    全体にで洗練されたデザインになった感じがします。トップページは、作業の開始、ガイダンスとリソース、最新ニュースがタブになり、見やすくなっています。

    image

    新しいプロジェクトでは、.NET Framework 4 が標準でサポートされるようになっています。また、F#がサポートされるようになりました。F#は、関数型言語で、ML(Meta Language)の1つ。Beta 2では、プロジェクトに F#ライブラリ、F# アプリケーション、F# チュートリアル、F# Sliverlight ライブラリが用意されています。

    image

    また、C#プロジェクトでは、ASP.NET MVC 2 Web Application プロジェクトテンプレートが用意されていてます。

    image

    また、Office プロジェクトテンプレートでは、Office 2010 対応のアドインテンプレートが追加されています。いよいよ Office 2010 ですね。

    image

    また、新しいプロジェクトテンプレートとして、Enable Windows Azure Tools が追加されており、Azure 対応が可能になるようです。

    image

    さらに、SharePoint 関連のプロジェクトテンプレートが追加されていて、C# でパーツなどを開発できるようになるようですね。

    image

    Silverlight も同列のプロジェクトテンプレートとして、Silverlight アプリケーション、ナビゲーションアプリケーション、クラスライブラリが用意されています。

    image

    インストール関連では、InstallShield Limited Edition のプロジェクトが追加されています。

    image

    今回、フローティングウィンドウが、Visual Studio のメイン画面の外に移動することができるようになり、マルチモニターの大画面で広々と使えるようになります。VS2008まではかなり狭かったので、思いっきり広く使えるようになります。

    image

    Visual Studio 2010 では、Silverlight のプロジェクトテンプレートが追加され、今までより楽に Silverlight アプリケーションが作れるようになります。コントロールは現時点で次のようなものがあります。

    image

    また、コードエディタで、コードを修正すると、左側に修正したところを黄色、緑色などで表示し、どこを編集したいのかわかりやすくなっています。

    image 

    ちょっとみただけで、かなり大幅な機能エンハンスが行われています。ただ、まだベータ2なので、かなり不安定なところがありますね。このため、Virtual PC上で復元ディスクをイネーブルにして試したほうがいいです。

    インストール方法には、従来の DVD からインストールする方法に加えて、今回 Web Installer というものが追加されていて、Web Installer はわずか4.6MBです。この Web Installer を実行すると必要なものをネットからダウンロードしてきて、インストールを行ってくれます。

    あと、 これまで Visual Studio Team System と呼ばれていた最上位バージョンは、Visual Studio 2010 Ultimate という名前になっています。

    November 22

    クローム OS

    http://blog.chromium.org/2009/11/hello-open-source-developers-would-you.html

    の中で、電源ONから、数秒でブラウザが起動するビデオがあった。

    現時点では、Linux上で、ビルド&実行ができる。今は Ubuntu 8.04上で開発されている。

    November 15

    VHD Boot の方法

    MURA さんがまとめたページ。

    http://www.vwnet.jp/Windows/WS08R2/VHD-boot/VHDboot.htm

    そのうちお世話になりそうなので、メモっておく。

    Microsoft Online Services

    ここ

    https://mocp.microsoftonline.com/site/default.aspx

    で、Live Meeting Standard 5 ライセンスが月額 2350円でオンラインで買える。でも、最低5ライセンスから。

    image

    そのほかに、こんなものが使える。

  • Microsoft Exchange Online
  • Microsoft SharePoint Online
  • Microsoft Office Communications Online
  •  

    Live Meeting は、会社で電話会議のときに使っているけど、サーバー運用費を考えたら、かなりお得。1ライセンスから売ってほしいなぁ~。

    Google の Go 言語

    最近?アナウンスされたようですね。

    http://golang.org/

    いまのところ、コンパイラーは、Linux, Mac OS X のみ。

    コンパイラーターゲットは、linux/amd64, linux/arm, linux/386, darwin/amd64, darwin/386, and nacl/386.

    実行サンプルはこんな感じ。

    $ cat >hello.go <<EOF
    package main

    import "fmt"

    func main() {
    fmt.Printf("hello, world\n")
    }
    EOF
    $ 6g hello.go
    $ 6l hello.6
    $ ./6.out
    hello, world
    $

    言語仕様は

    http://golang.org/doc/go_spec.html

    C++に似ている。強い型。並列プログラミング、Garbage Collection をサポートしている。ここまではOK。

    その一方で、&, * による address operators を持っていて、c, c++のような、

    &x

    &a[f(2)]

    *p

    *pf(x)

    という表記ができる。この時点でパス。その時代には戻りたくないなぁ~。

    November 14

    Windows 7 on Virtual PC

    Visual Studio 2010 Beta 2 を入れようと思って、Virtual PC 上に Windows 7 をインストールしてみた。仕様としては、正式にサポートされていなので、まともに動かなくてもしかたないのだけれど、問題2点あり。

    image

    インストールは問題なく終わったのだが、なぜかマウスのクリックが効かない。バーチャルマシーンの追加機能をインストールしても、解決せず。デバイスマネージャ上も特にエラーが出ていないので、原因不明。回避策として、リモートデスクトップで接続すれば、問題なく使える。

    もうひとつ問題があり、パフォーマンスが悪い。ホスト側でアンチウィルスソフトの例外として VHD, Virtual PC を除外しても、改善せず。バーチャルマシーンの追加機能をインストールすると、Vista だとそこそこのスピードで動くようになる。今回は、むりやり Windows 7 をインストールしたのだが、追加機能はWindows 7用ではないはずなので十分なチューニングがなされていないのではないか。ちょっとこのスピードだと、使用に耐えない。Virtual PC for Windows 7 対応してくれないかな。

    Xbox 360からTwitterとFacebookを利用可能に

    http://itpro.nikkeibp.co.jp/article/NEWS/20091113/340527/

    によると、 マイクロソフトは2009年11月13日、ゲーム機「Xbox 360」の会員制インターネットサービス「Xbox LIVE」で、同月17日から米大手SNS「Facebook」とミニブログ「Twitter」を利用可能にすると発表した。11月17日よりXbox LIVEのポータル上に「マイ コミュニティー」チャンネルを開設し、TwitterとFacebookのアプリケーションを配信する。ただし、「ゴールドメンバーシップ」に加入した18歳以上の層を対象。

    November 12

    USB接続のグラフィックアダプターの使用感

    24インチディスプレイを買ったので、17インチ2枚と、24インチ1枚の3枚構成が可能なはずだったのに、グラフィックボードがデュアルしかサポートしていないので、悲しい2枚構成でした。
    そこで、USB接続のグラフィックアダプターを購入してみました。
    http://www.iodata.jp/product/tv/ga/usb-rgb_d/index.htm

    OS
    はWindows 7ですが、USBにさすだけでドライバーを自動認識してくれて、ドライバーをインストールすることなく、接続できました。すばらしい。
    USBなのに、ビデオを流してみても、表示的にはカクカク感もなく、全く問題ない。

    と思って、ちょっと使っているとことですが、ウィンドウを移動した瞬間、文字がにじむような感じになります。つまり、画面の書き換えを行う瞬間、データ転送速度が追い付いていないような感じでちょっと気持ち悪いです。

    やっぱり、マルチモニターにするなら、ディスプレーカードがお勧めですね。

    November 11

    Windows 7 に Virtual Server 2005 R2 SP1 をインストールできない

    Windows 7 に Virtual Server をインストールしようとすると、

    image

    というプログラム互換性アシスタントダイアログが表示される。

    オンラインで解決策の有無を確認する ボタンを押しても、

    image

    というように、解決策が見つかりませんとなり、インストールできない。

    インストーラの setup.exe を右クリックして

    image

    互換性のトラブルシューティングを選択し、プログラムの互換性ダイアログより”推奨設定を使用する”を選択してみる。

    image

    すると、Windows 互換モード: Windows XP (Service Pack2) ディスプレイ:標準、UAC:標準

    image

    を選択し、プログラムの開始ボタンを押すと、ジャーン

    image

    だめ。

    しかたないので、Virtual PC 2007 SP1 をインストールして、とりあえずそれで動かそうと思ってインストールしてたところ、こちらはすんなりインストールできた。

    Virtual PC を実行してみると、必要なバーチャルマシン モニタドライバが見つかりません。とダイアログが表示されて動かない。

    image 

    あれ?っと思って、管理者モードでインストールしなおしたら、無事起動した。

    image

    さて、Virtual Server が使えないのは、困った。

    July 16

    プロセスモニタ

    どこかで見たことのあるようなものをWPFで作ってみた。

    image

    簡単に作れるだろうと思っていたのだけど、いくつか、ハマり中。

    1.プロセスの情報を取るいいI/Fが見つからない。System.Diagnostics.Process.GetProcesses() だと、プロセッサタイムが取得できないので、しかたなしにWMIでプロセスの情報を取っているのだけれど、結構重くって、CPUパワーが食われまくり。パフォーマンスカウンターを全プロセス分持つのも芸がないし、Win32 SDKを叩くか?? .NETで、いい方法ない?

    2.画面のリサイズもフォントサイズとPolygon の関係をちゃんと考えないといけないので、意外と難しい。

    3.おまけに6角形にレイアウトするのも面倒。誰か、HexaFlowコントロール作ってくれないかな w

    でも、こんな感じで http://uchukamen.com/pmon/publish.htm 意外と見ていて面白い。

    PS. LINQ は偉大だ。もう LINQ 無しでは生きていけない体になってしまった。

    July 15

    Generic Dictionary の foreach

    あまり使わないので忘れないようにメモ

    Dictionary<uint, Process> processDict = new Dictionary<uint, Process>(100);

    foreach (KeyValuePair<uint, Process> val in processDiff)
    {
       Process p = val.Value;
             …
    }

    July 13

    WPF ユーザーコントロール

    <UserControl x:Class="WpfApplication6.Cell"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            >
        <Grid >
        <Polygon Name="Polygon" Margin="5 5 5 5"
        Points="25,0 75, 0 100,43 75,86 25, 86 0 43"
        Stroke="Purple"
        StrokeThickness="2">
                <Polygon.Fill>
                    <SolidColorBrush Color="Red" Opacity="0.8"/>
                </Polygon.Fill>
            </Polygon>

            <Label Name="label1" HorizontalContentAlignment="Center" Margin="6,15,6,0">Label</Label>
            <Label Name="label2" HorizontalContentAlignment="Center" Margin="4,47,8,21" >Label</Label>
        </Grid>

    </UserControl>

    用途は・・・

    Process 情報の取得に関するメモ2

    WMI を使用して Process 情報を取得する際に LINQ を使用しようとすると

    ManagementObjectSearcher query1 = new ManagementObjectSearcher("SELECT * FROM Win32_Process");
    ManagementObjectCollection queryCollection1 = query1.Get();

    var query = from proc in queryCollection1 select proc;
    foreach (var process in query)
    {
       …
    }

    エラー    1    ソース型 'System.Management.ManagementObjectCollection' のクエリ パターンの実装が見つかりませんでした。'Select' が見つかりません。範囲変数 'proc' の型を明示的に指定してください。    C:\Users\uchukamen\Documents\Visual Studio 2008\Projects\WpfApplication6\WpfApplication6\Window1.xaml.cs    140    38    WpfApplication6

    というエラーになる。

    回避方法は、範囲変数 proc の型を明示的に指定するために、queryCollection1.Cast<ManagementObject>()  としてあげるとうまくいった。うむむむむ・・・

    ManagementObjectSearcher query1 = new ManagementObjectSearcher("SELECT * FROM Win32_Process");
    ManagementObjectCollection queryCollection1 = query1.Get();

    var query = from proc in queryCollection1.Cast<ManagementObject>() select proc;
    foreach (var process in query)
    {
        Console.WriteLine(process["ProcessId"] + ":");
        Console.WriteLine(process["Name"] + ":");
        Console.WriteLine(process["KernelModeTime"] + ":");
        Console.WriteLine(process["UserModeTime"] + ":");
    }

    ------

    もうちょっと見やすく?すると、IEnumerable<ManagementObject> にキャストしてくれるということ。

    ManagementObjectSearcher query1 = new ManagementObjectSearcher("SELECT * FROM Win32_Process");
    ManagementObjectCollection queryCollection1 = query1.Get();
    IEnumerable<ManagementObject> procQuery = queryCollection1.Cast<ManagementObject>();

    var procs = from proc in procQuery select proc;

    foreach (var process in procs)
    {
        Console.WriteLine(process["ProcessId"] + ":");
        Console.WriteLine(process["Name"] + ":");
        Console.WriteLine(process["KernelModeTime"] + ":");
        Console.WriteLine(process["UserModeTime"] + ":");
    }

    Process 情報の取得に関するメモ

    Visual Studio 2008 , Vista で、GetProcesses() でプロセス情報を取得する際に、TotalProcessorTime などプロセッサタイムを取得しようとすると、Win32Exception により取得できない。なぜ??

    var query = from proc in System.Diagnostics.Process.GetProcesses()
                orderby proc.Id
                select new
                {
                    Id = proc.Id,
                    processName = proc.ProcessName,
                    TotalProcessorTime = proc.TotalProcessorTime
                };

    foreach (var process in query)
    {
        Console.WriteLine(process.Id + ":");
        Console.WriteLine(process.processName + ":");
        Console.WriteLine(process.TotalProcessorTime + ":");
    }

    -----------------

    WMI を使用すれば、取得可能。

    ManagementObjectSearcher query1 = new ManagementObjectSearcher("SELECT * FROM Win32_Process");
    ManagementObjectCollection queryCollection1 = query1.Get();

    foreach (ManagementObject mo in queryCollection1)
    {
        Console.WriteLine(mo["ProcessId"] + "\t" + mo["Name"] + "\t" +
            ":\tKernelModeTime=" + mo["KernelModeTime"] +  // in 100 nanosecond units
            ":\tUserModeTime=" + mo["UserModeTime"]);   // in 100 nanosecond units
    }

    July 06

    Visual Studio 2010

    image

    でフローティングを使用すると、

    image

    独立ウィンドウで開けるのがいい感じ。

    Visual Studio 2010 Parallel - Process

    シーケンシャルだと

    var query = from proc in System.Diagnostics.Process.GetProcesses() select proc;
    foreach (var process in query)
    {
        Console.WriteLine(process.Id + " : " + process.ProcessName);
    }

    これがパラレルだと、

    var query = from proc in System.Diagnostics.Process.GetProcesses() select proc;
    Parallel.ForEach(query, process =>
        {
            Console.WriteLine(process.Id + " : " + process.ProcessName);
        }
    );

    処理的には、パラレルでもシーケンシャルでも関係ないので、パラレルで実行しているほうが処理する人の感覚(意図)に近いのかもしれない。

    Visual Studio 2010 Parallel

    Visual Studio 2010 beta を入れてみた。

    image

     

    using System.Threading;
    using System.Diagnostics;

    Stopwatch sw = new Stopwatch();
    sw.Start();
    Parallel.For(0, 10, x =>
        {
            Console.WriteLine(x.ToString() + " : " + Thread.CurrentThread.ManagedThreadId.ToString());
            Thread.Sleep(5000);
        }
    );
    sw.Stop();

    実行結果

    x : ManagedThreadId

    -------------

    0 : 8
    5 : 10
    1 : 11
    6 : 12
    2 : 13
    7 : 14
    3 : 15
    4 : 8
    8 : 10
    9 : 10

    こんなことができてしまうなんて・・・

    May 25

    Codeseek 勉強会のWinRing0の資料をアップしました。

    第40回codeseek勉強会
    「宇宙仮面のWinRing0」
    (共催:tk-engineeringこみゅぷらすeパウダ~.Net/C# Group)

    開催日:2009年5月19日(火) 19:00~21:00 18:55に6F受付集合
    場所:マイクロソフト社新宿オフィス6F会議室
    募集締め切り:2009年5月16(土)23時59分59秒
    20名まで
    参加費無料

    Codeseek 勉強会のWinRing0の資料を
    http://uchukamen.com/wpf/WinRing0/
    にアップしました。
    May 19

    削除できなくなった Gadget を強制的に削除する

    いろいろ悪さをしていて、Gadget が消せなくなった場合の対処方法 w

    1. タスクトレイの [Windows サイドバー]を右クリック→終了。
    2. %USERPROFILE%\AppData\Local\Microsoft\Windows SidebarのSettings.ini を削除
    3. スタートメニュー→アクセサリ→Windows サイドバー で再起動。

    なお、この場合、サイドバーの設定がすべてリセットされます。