仮面'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 のパフォーマンスを強化。
    March 14

    VS2008でASP.NETプロジェクトを作ると落ちる

    image

    イベントビューアーで調べると・・・

    障害が発生しているアプリケーション devenv.exe、
    バージョン 9.0.21022.8、タイム スタンプ 0x47317b3d、
    障害が発生しているモジュール mswebprj.dll、
    バージョン 9.0.21022.8、
    タイム スタンプ 0x4731806d、例外コード 0xc0000005、障害オフセット 0x00018fba、
    プロセス ID 0x179c、アプリケーションの開始時刻 0x01c9a468c04aeb50。

    ふむううう。

    イベントビューアーで調べたら、直前に警告で

    テンプレート (C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\ProjectTemplates\CSharp\Windows\1041\WPFBrowserApplication.zip)、ファイル (csWPFBrowserApplication.vstemplate) にエラーがあります。不明な要素 (EnableEditOfLocationField) です。解析で修復を試行します。

    と出ている。ファイルがおかしくなっているせいか?

    くそっ、C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\ProjectTemplates\CSharp\Windows\1041 以下を消して、再インストールしてみる。

    そうしたら、また修復も、アンインストールもできない罠。orz

    image

    January 26

    Culminis : 1/22/2009 Announcing the APAC Regional Board

    シアトルでルームシェアしたインド人の Ashwin からのチャットで、次のお知らせをもらった。

    http://thevoice.culminis.com/APAC/Lists/Posts/Post.aspx?ID=4

    北端さんが DAL (Director-at-Large): で日本代表として参加されているとのこと。

    プロファイルは

    http://new.culminisconnections.com/BOD/APAC.aspx?PageView=Shared

    October 03

    ZAM 3D CTP 135 がアップされています。

    ZAM 3D CTP 130 が9月末日でエクスパイアしたと思います。
    報告して、対応をお願いしたら、
    ZAM 3D CTP 135 がダウンロード可能になったとの連絡がありました。
     
    こちらです。
     
    あと、日本語フォントのドロップダウンのバグも報告したら、日本語版のリリースも予定されているとのこと。
     
    August 11

    Web Service の Web サイトの発行時の単なるメモ

    Web Service の Web サイトの発行時の単なるメモ。

    たまにしか、Web Service の発行はしないので、毎回迷う。メモっておこう。

    Web Service の発行時のターゲットの場所
     
    この下に、ソリューションのファイル(Service.asmx, etc) がコピーされる。
     
    Virtual Directory が作成される。そこにホスティング管理ソフトより Script の実行権を付与する必要がある。
     
    Web Service の発行時のターゲットの場所に、
    を指定してしまうと、既存のファイルが消されてしまい、復旧が面倒なので注意。
     
     
     
    April 22

    Visual Studio Orcas Beta 1 ダウンロード開始

    March CTP をさっきインストール終わって、触ってみるかと思いつつ・・・
    あれ? Beta 1 でてるじゃん・・・ orz
    ということで Beta 1ダウンロード中。おそ!
    ISOで自分でインストールか、Virtual Image でインストール済みのイメージも提供されている。
     
    January 07

    Visual Source Safe のクライアントライセンス

     
    によると、
     

    ライセンス

    Visual SourceSafe のライセンスは、製品をインストールまたは使用するコンピュータごとに必要です。たとえば、100 人が Visual SourceSafe データベースを使用する場合、著作権法を遵守するためには、100 個の Visual SourceSafe ライセンスを購入する必要があります。ユーザーがクライアント コンピュータに Visual SourceSafe をインストールする場合、ライセンスされた製品パッケージの CD キーを各ユーザーごとに用意する必要があります。すべてのユーザー用に同じ CD キーを使用してインストールすることはできますが、その場合でも、ライセンス数はユーザー全員の分を用意する必要があります。

    とあり、ユーザーー全員の分が必要となる。小売価格で8万円~9万円するので、大規模開発だと相当な出費になる・・・CVSやSource Forgeに走るのも無理ない。

     

    October 23

    Microsoft .NET Compact Framework の P/Invoke とマーシャリング入門

     
     
    よくまとまっていそうなので、メモ。
    あとでよく読んでみよう・・・と思う前に、読んで試してみた。。。
     
    メモリーはこんな感じ。
    さすがにW-ZERO3はゼロスピンドルなので、ページファイルは何も帰ってこなかった。w

            private struct MEMORY_STATUS
            {
                public uint dwLength;
                public uint dwMemoryLoad;
                public uint dwTotalPhys;
                public uint dwAvailPhys;
                public uint dwTotalPageFile;
                public uint dwAvailPageFile;
                public uint dwTotalVirtual;
                public uint dwAvailVirtual;
            }
            [DllImport("coredll.dll", SetLastError=true)]
            private static extern void GlobalMemoryStatus(ref MEMORY_STATUS ms);
            private MEMORY_STATUS GetMemStatus()
            {
                MEMORY_STATUS ms = new MEMORY_STATUS();
                GlobalMemoryStatus(ref ms);
                return ms;
            }
    -------------
    CPU負荷も、こんなことしないとだめなのね・・・
    dwStartTick = GetTickCount();
    dwIdleSt = GetIdleTime();
    // タイマーか、何かの処理
    dwStopTick = GetTickCount(); dwIdleEd = GetIdleTime(); PercentIdle = ((100*(dwIdleEd - dwIdleSt)) / (dwStopTick - dwStartTick));
    October 22

    TextureBrush OutOfMemoryException with .NET Compact Framework 2.0

    I encounterd TextureBrush OutOfMemoryException with .NET Compact Framework 2.0.
     
    Environment:
               Visual Studio 2005 Team Suite / Japanese version.
               .NET Compact Framework 2.0 Service Pack 1
               Sharp W-ZERO3 WS004SH for the target machine.
              
    By using TextureBrush with extensive FillPolygon results in OutOfMemoryException.
    Forcing GC does not help.
    I used the using pattern, and those instances should have no leak.
     
    If I replace
                    g.FillPolygon(textureBrush, drawArea);
              with g.FillRectangle(textureBrush, 0,0,100,100);
    then, it works fine.
    Therefore, it could be a potential bug of .NET Compact Framework 2.0.
     
    I have checked out the same symptom by the Google and found a few people reported same issue.
    But, there seems to be no solution yet.
    -----------------
    // Run following code and wait for a few minutes, then results in the exception.
    // Please note that you have to add a timer with 100mSEC interval and enabled state.
    -----------------
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    namespace TextureBrushOutOfMemory1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            private void timer1_Tick(object sender, EventArgs e)
            {
                this.Invalidate();
            }
            private Bitmap backBuffer = null;
            Point[] drawArea = { new Point(10, 10), new Point(90, 10), new Point(90, 90), new Point(10, 90) };
            Bitmap bmp = null;
            Random rnd = new System.Random();
            private void Form1_Paint_1(object sender, PaintEventArgs e)
            {
                using (Graphics g = e.Graphics)
                {
                    doPaint(sender, g);
                }
            }
            private void doPaint(object sender, Graphics gr)
            {
                // Make a new back buffer if needed.
                if (backBuffer == null)
                {
                    backBuffer = new Bitmap(this.ClientSize.Width, this.ClientSize.Height);
                }
                if (bmp == null)
                    bmp = new Bitmap(100, 100);
                // Create Image for TextureBrush
                using (Graphics g = Graphics.FromImage(bmp))
                using (SolidBrush redBrush = new SolidBrush(Color.Red))
                using (SolidBrush blueBrush = new SolidBrush(Color.Blue))
                {
                    float val = 0.5F;
                    g.FillRectangle(redBrush, 0, 0, 100, 100);
                    for (int i = 0; i < rnd.Next(300); i++)
                    {
                        g.FillRectangle(blueBrush, (int)(val * rnd.Next(100)), 100 - (int)(val * rnd.Next(100)), (int)(val * rnd.Next(50)), (int)(val * rnd.Next(50)));
                    }
                }
                // FillPolygon on the backBuffer with textureBrush
                using (Graphics g = Graphics.FromImage(backBuffer))
                using (TextureBrush textureBrush = new TextureBrush(bmp))
                {
                    g.FillPolygon(textureBrush, drawArea);
                    // g.FillRectangle(textureBrush, 0,0,100,100);
                    // FillRectangle works fine.
                    // But, FillPolygon results in Out of Memory Exception.
                }
                // Force GC by GC.Collect() or WaitForPendingFinalizers() is not effective.
                GC.Collect();
                GC.WaitForPendingFinalizers();
                // Draw the backBuffer to the FormWindow
                gr.DrawImage(backBuffer, 0, 0);
            }
            protected override void OnPaintBackground(PaintEventArgs pevent)
            {
                // avoid flicker
            }
            private void button1_Click(object sender, EventArgs e)
            {
                Application.Exit();
            }
        }
    }
    October 01

    XMLスキーマから、DataSetから継承したクラスを作成する方法

    xsd.exe /l:cs /d xmlschema1.xsd

    を実行すると、次のような DataSetから継承したクラス(名前はデフォルトでDocument)を作成してくれる。
    とりあえずメモっておこう。

    //------------------------------------------------------------------------------
    // <自動生成>
    // このコードはツールによって生成されました。
    // ランタイム バージョン:2.0.40607.42
    //
    // このファイルへの変更は、以下の状況下で不正な動作の原因になったり、損失したりします:
    // コードは再生成されました。
    //
    //------------------------------------------------------------------------------

    using System;

    //
    // This source code was auto-generated by xsd, Version=2.0.40607.42.
    //


    [Serializable()]
    [System.ComponentModel.DesignerCategoryAttribute("code")]
    [System.ComponentModel.ToolboxItem(true)]
    [System.Xml.Serialization.XmlSchemaProviderAttribute("GetTypedDataSetSchema")]
    [System.Xml.Serialization.XmlRootAttribute("Document")]


    public partial class Document : System.Data.DataSet {

    Culminis

    ラテン語の“culmin”と英語の“culmination”にちなんで作った造語。どちらも「頂上」というような意味がある。

    Culminisは、Windowsを中心とする情報システムに関与するIT Proコミュニティの活性化に向けて、全世界規模で活動する非営利団体である。約2年前に設立され、現時点では、全世界60カ国で700を超えるユーザー・グループが参加しており、これらのユーザー・グループに参加しているIT Proを総計すると100万人を超える(2006年6月30日時点で102万5731人)。Culminisの目的は、全世界にあるIT Proのユーザー・グループやコミュニティを支援することで、それらのコミュニティに参加するIT Proのスキルアップや問題解決、地位向上、若手技術者育成などを促すことだ。具体的には、ユーザー・グループの効率的な運営指導、技術セミナーなどで利用できる各種カリキュラムの提供、ユーザー・グループ間の連携支援などを行っている。

    http://www.atmarkit.co.jp/fwin2k/itpropower/powerinterview/culminis/culminis_01.html