月別アーカイブ: 11月 2005

WindowsXP ファイルと設定の転送ウィザード

WindowsXP ファイルと設定の転送ウィザード

知人の家でXPマシン間でファイルと設定を転送したいという話だったので XPファイルと設定の転送ウィザードを使おうかと思ったが、
現場での様々な要望によりほとんど使わずに終わってしまった。

最後に、IEのお気に入りを移したいという要望にこれを使おうと思ったが、
「旧マシンのファイルと設定の転送ウィザードで作成したファイルは、新マシンのウィザードで読み込めない」
という事態に大ガッカリ。
「新マシン側にある fastwiz.exe を利用して旧マシンでファイルを作る」というのが最初に手順として必要だった。

作業的には、巨大なOutlook Express データの移行(新マシンでもすでに利用していたため、新マシンのデータは消しちゃ駄目)に手間がかかった。

SQL Server データを PDF化

SQL Server データを PDF化

Reporting Services, iTextdotNET, iTextSharp のどれにしようか調査中。
とりあえず SQL Server 2005 の Reporting Services を使ってみているところ。

Bflets マンションタイプ

Bflets マンションタイプ

やっと開通した模様なので申し込み中。プロバイダは久々に hi-ho にしようかと思っている(050な電話番号ならIP電話が基本無料らしい)。でも一番重要なのは Flets.Net

ADO.NET 2.0 Factory デザインパターン

ADO.NET 2.0 Factory デザインパターン

SQL Injection対策として パラメータ化必須という状況において、
パラメータの解釈部分を抽象化してくれているわけではなさげ、だなあと思いつつちょっと使ってみていたところ。

FactoryのCreateHogeメソッドは、通常のSqlconnectionなどのクラスのコンストラクターと異なり、
引数をつかって初期化してくれる便利メソッドがあんまり実装されていないのでコードが若干冗長になり気味。

画像ファイルを保存するのに Image型のフィールドに入れようとしたら、DbTypeには Binary型(8000bytesまで) というのしかなくて、
その辺もサーバ環境依存だよなあ。
(追記)…と思ったけど、Binary型に対して、dbparameter.Size に長さを指定すれば8000bytesまでという訳でもないらしい。

MSがWebPartsとして汎用パーツの開発をする、というチャレンジにおいてFactory デザインパターンが必要だった、という状況は良く分かる。
が、現実の案件開発においては結局のところビジネスロジックを別レイヤーとして実装しておいて変更しやすくしておく、
ぐらいの方がよいと思われる。

チューニングを視野に入れると、例えば巨大ファイル対策として
SQL Server に BLOB 値を書き込むときのリソースの節約
までやろうとすると、更に依存性は高まるわけで。

SQL Server 2005 データベースミラーリング

SQL Server 2005 データベースミラーリング

ミラー構成されたデータベースに接続する場合、接続文字列に Failover Partner を指定することによりフェイルオーバーを実現する。

移動プロファイルが読めなくなった

移動プロファイルが読めなくなった

どういう拍子か移動プロファイルをサーバからもってこなくなって、WindowsXPデフォルトのプロファイルを延々と使う状態になってしまったノートPC。

システムプロパティのユーザプロファイルのところを見ると「一時」と表示されていて、実際のディレクトリとしては
C:/Documents and Settings/Temp に割り当てられている状態だった。
通常起動だと、別ユーザでログオンしてもこの C:/Documents and Settings/Temp を消せなかったのだが、
セーフモード起動したら「起動しただけで勝手に消えて」しかも再起動した。どういう仕掛けなんだか。
(セーフモード起動専用の RunOnce レジストリがあるのかもしれぬ)

ともかくセーフモード起動で直ったという話。

SQL Server 2005 自習書シリーズ

SQL Server 2005 自習書シリーズ

管理編 は主に Management Studio の使い方の練習になる。SQL Enterprise Manager との違いが大きいのはレプリケーション周り。
レプリケーションの初期設定ウィザードが接続のためのアカウント情報を要求してくるあたりは分かりやすくなっている。

開発編を読むのはこれから。11 月下旬公開予定のReporting Services基礎編はやくでねえかな。

画像ファイルを受け取ってPNGで保存する

画像ファイルを受け取ってPNGで保存する

FileUpload1 というサーバコンポーネントを貼り付けた ASP.NET ページで、
画像ファイルを受け取ってPNGで保存するコードは、基本的には以下の2行を記述して終了。楽すぎる。

System.Drawing.Image img = System.Drawing.Image.FromStream(this.FileUpload1.FileContent, false, true /* validate image */);
img.Save(@"C:\temp\test.png", ImageFormat.Png);

強制的にある解像度にリサイズするというようなコードを書いてみた。
ただし、IndexedColor画像をリサイズすると、リサイズ先はフルカラー画像になってしまう。
.NET Framework 内に IndexedColer に変換するようなメソッドが見つけられなかった。

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Drawing;
using System.Drawing.Imaging;

public partial class PictUploadTest : System.Web.UI.Page
{
    protected void Button1_Click(object sender, EventArgs e)
    {
        if (this.FileUpload1.FileBytes.Length > 0)
        {
            try
            {
                System.Drawing.Image img = System.Drawing.Image.FromStream(this.FileUpload1.FileContent, false, true /* validate image */);
                Trace.Write(String.Format("width: {0}, height: {1}, format: {2}/{3}", img.Width, img.Height, GetImageFormatName(img.RawFormat), img.PixelFormat));

                Bitmap bmp600dpi = new Bitmap(img, 921, 1346);
                bmp600dpi.SetResolution(600, 600); // 600dpi の指定
                bmp600dpi.Save(@"C:\temp\test.png", ImageFormat.Png);
                bmp600dpi.Dispose();
                img.Dispose();
            }
            catch (ArgumentException ex) // 画像フォーマットが不正な場合にこの例外となる
            {
                Trace.Write(ex.Message);
            }
            return;
        }
    }

    public static string GetImageFormatName(ImageFormat fmt)
    {
        if (fmt.Guid == ImageFormat.Bmp.Guid) return "BMP";
        if (fmt.Guid == ImageFormat.Emf.Guid) return "EMF";
        if (fmt.Guid == ImageFormat.Exif.Guid) return "EXIF";
        if (fmt.Guid == ImageFormat.Gif.Guid) return "GIF";
        if (fmt.Guid == ImageFormat.Icon.Guid) return "ICON";
        if (fmt.Guid == ImageFormat.Jpeg.Guid) return "JPEG";
        if (fmt.Guid == ImageFormat.Png.Guid) return "PNG";
        if (fmt.Guid == ImageFormat.Tiff.Guid) return "TIFF";
        if (fmt.Guid == ImageFormat.Wmf.Guid) return "WMF";
        return "unknown";
    }
}

ニンテンドーWiFiコネクション

ニンテンドーWiFiコネクション

暗号化はWEPのみ。WPAを実装した場合、リアルタイム性を求めるゲーム中に鍵交換するのはCPU資源的につらいのかなあ。

鍵交換は1時間に1回にして、「健康のために必ず休めや」という仕様にして欲しい。

VisualStudio2005のDataSet

VisualStudio2005のDataSet

日本語フィールド名が混じっていると全然通らなくなる。

xyzzyで DataSet1.xsd を開いたら、utf-8n エンコーディングと言ってくる。これを utf-8 エンコーディングに直したら通るようになった。

今までちゃんと調べてなかったが、utf-8nはBOM(Byte Order Mark)なし、utf-8 はBOM(Byte Order Mark)ありのファイルフォーマット。
ちなみにメモ帳はutf-8(BOMあり)になるらしい。