2012/02/22

マカー

いろいろあってマックを買った。

今日からマカー

うふっ

でもでも、いろいろあったよー

や○だで展示品の1世代前のマックを勢いで買っちゃったんだけど、
買ってから4日くらいで水濡れでマザーがさびたらしい。。。

Apple store?(ジーニアスバー?)で相談したらどうがんばっても修理だそうな

でもでも、ビックカメラのApple店員さんに買ったところに行ってみ?といわれ
翌日に突撃したところ返品ができた!

あまりにへこんでる姿を見かねたらしく、嫁さんが半額出してくれるとのことで新品マックを買うことに。

これからしばらくは初マックをいじるぜ!

以上!!

2012/02/15

DB内のテーブルをすべて削除する

あまりにテーブル数があるDBのテストデータ作成で、いったんすべてのテーブルをクリアしたいという要望が出てきた。

で、すべてのテーブルをテーブル情報からとってきてがっ!と消すストアドを作ってみた。

さらに、ただ消すだけだと、外部キー制約に引っかかるので、いったん外部キー制約を無効にするためのストアドを拾った。


が、しかし。

外部キー制約を無効にしたままエラーで落ちてしまったら恐ろしいため、この案は却下。

もしかして、今後使えるかもしれないので残すことにする。

以下、一括ですべてのテーブルをクリアするストアド

    DECLARE @tableName NVARCHAR(255)
    DECLARE @schemaName NVARCHAR(255)
    DECLARE TABLE_LIST CURSOR FOR
        SELECT TABLE_NAME, TABLE_SCHEMA FROM INFORMATION_SCHEMA.TABLES

    SET NOCOUNT ON

    OPEN TABLE_LIST

    FETCH NEXT FROM TABLE_LIST
    INTO @tableName, @schemaName

    WHILE @@FETCH_STATUS = 0
    BEGIN

        EXECUTE ('TRUNCATE TABLE ' + @schemaName + '.' + @tableName)

        FETCH NEXT FROM TABLE_LIST
        INTO @tableName, @schemaName
    END

    CLOSE TABLE_LIST
    DEALLOCATE TABLE_LIST

すべてのスキーマを対象にしているので、最初のテーブル一覧を取得するところで適当に絞ってね!

次に、外部キーをがっとオンオフ

CREATE PROCEDURE pr_Disable_Triggers_v2
    @disable BIT = 1
AS
    DECLARE
        @sql VARCHAR(500),
        @tableName VARCHAR(128),
        @tableSchema VARCHAR(128)

    -- List of all tables
    DECLARE triggerCursor CURSOR
        FOR
    SELECT
        t.TABLE_NAME AS TableName,
        t.TABLE_SCHEMA AS TableSchema
    FROM
        INFORMATION_SCHEMA.TABLES t
    ORDER BY
        t.TABLE_NAME,
        t.TABLE_SCHEMA

    OPEN triggerCursor

    FETCH NEXT FROM triggerCursor
    INTO @tableName, @tableSchema

    WHILE ( @@FETCH_STATUS = 0 )
        BEGIN
            IF @disable = 1
                SET @sql = 'ALTER TABLE ' + @tableSchema
                    + '.[' + @tableName + '] DISABLE TRIGGER ALL'
            ELSE
                SET @sql = 'ALTER TABLE ' + @tableSchema
                    + '.[' + @tableName + '] ENABLE TRIGGER ALL'

            PRINT 'Executing Statement - ' + @sql

            EXECUTE ( @sql )
            FETCH NEXT FROM triggerCursor
            INTO @tableName, @tableSchema
        END

    CLOSE triggerCursor
    DEALLOCATE triggerCursor

これ、実は、拾ったやつそのまま。

一応拾った場所のアドレスは以下
http://msdn.microsoft.com/ja-jp/magazine/cc163442.aspx

テーブルが大量にあるDBを使うプロジェクトでテストのときに使えそうだね。確かに。

以上!!

経過時間を正確に測るには?

C#

Stopwatchクラスを使用する。
使用方法
Stopwatch sw = new Stopwatch();
sw.Start(); // 時間の計測開始

何らかの処理

sw.Stop();  // 時間の計測終了

sw.Elapsed             // 経過時間の合計
sw.ElapsedMilliseconds // 経過時間の合計(ミリ秒)

※ ストップウォッチクラスを使いまわす
sw.Strat()し、sw.Stop()後に再度sw.Start()を行うと続きからカウントを開始する。
新たに計測しなおしたい場合は、sw.Reset()を実行し、sw.Start()を行うと計測できる。

XmlSerializerを使った時の実行時に発生する例外について

最近ハマってるシリアライズについて、気になる記事を発見

結構前から気になっていたけど問題ないので放置していたXmlSerializerでの例外について調べてみた。どんな問題かというとXMLをRead/Writeするときに必ず下のキャプチャのように

    'System.IO.FileNotFoundException' の初回例外が mscorlib.dll で発生しました。

という例外が発生するのだ。

確かに起動時に上記の例外が出ていたような気もしないでもない。

見失う前にリンクを張っておこうと思う。

http://yk.tea-nifty.com/netdev/2009/03/xmlserializer-a.html

以上!

2012/01/23

tips.Excelを読み取り専用で開く

Excelの読み取り専用で開くは、素直にやろうとすると一度Excelを起動して開くコマンドから読み取り専用で開かないといけない。

これだと、手間が多くて結局普通に開くことが多くなる。

でも実は、Excelファイル上の右クリックで「読み取り専用で開く」を追加することができる。

やり方は検索するとすぐ出てくるのだが、面倒なのでここに記載しようと思う。

検索でヒットしたやり方が記述されたサイト
http://civic.xrea.jp/2008/05/09/excel-readonly/

上記サイトでやり方が書いてあるけど、消えたら嫌なので自分の文章に変換して記載する。

エクスプローラのメニューから「ツール」→「フォルダオプション」を開く。
「ファイルの種類タブ」を開き、「拡張子」列で「XLS」を探す。
「XLS」を選択した状態で、「詳細設定」ボタンを押す。
図1 ファイルの種類-詳細設定
図1のような画面が開くので、「読み取り専用で開く」を選択して「編集」ボタンを押す。

図2 アクション編集
図2の画面が表示されるので、「アクションを実行するアプリケーション」の部分を以下のように設定する。
"C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE" /e
※ 「/h」を取り除くだけ。もちろんオフィスのインストール位置は各端末の設定のとおりに

DDEメッセージ欄を以下のように設定。
[open("%1",,True,,,,,,,,,,,,1,,1)]
※ Trueを追加するだけ

設定が完了したら、変更を保存して終了。

リンク先にも記載があるが、アクション欄の末尾に「(&R)」と設定するとショートカットが設定できる。

で、これで自分の端末では表示できたんだけど、リンク先にもあるとおり、設定した内容が強制的に書き換わっているので、レジストリから修正を行う。

HKEY_CLASSES_ROOT\Excel.Sheet.8\shell\OpenAsReadOnly\command
以下に、「アクションを実行するアプリケーション」に入力した内容が設定されているが、末尾に「%1」が付いているので取り除く。

これで右クリックから読み取り専用で開くことができる。

毎度探さなくてよくなったわぃ

2012/01/04

XMLのDIFF

仕事でXMLの比較ツールが必要になった。

しかし、めぼしいXML専用比較ツールは有料のものばかり。

TEXT比較ツールだと、XMLの使用上、正確な比較ができない。。。
(XMLのルール上、要素と属性の順序が常に同じである必要がないため)

てわけで、つくってみようかと思っている。

で、何で作るかだが。。。
最近、VSを使ってC#&WPFのしたらば掲示板参照ツールを作ったので、WPFは割と満足した(ぇ

なので、JavaとSwingでかっちょよくGUIアプリでも作ってみたいなぁと思った。


早速、GUI部分を調べたが、コードから作るのはとても面倒な事はよくわかっていて、それらしきフレームワークが何種類かあったが、使いこなすのが面倒そう。
てなわけで、NetBeansを使ってサクっとやろう、と決める。

次に比較ロジックだが、とりあえず、XMLをパースしてちゃんと比較するロジックを自力で作るのは大変そうなので、XMLを入力として、常に順序が同じXMLに編集するという仕様を考えた。
そうすれば、普通のDIFFで比較できるからね。

JavaでテキストのDIFFをとれるライブラリを探していたら、<a href="http://d.hatena.ne.jp/reiro/20080225/javadiff">こんな</a>記事を発見。
Java-DIFF?というライブラリで、一致か不一致で比較してくれるようだ。

まぁ、似ているは今回は気にしない方向でいこう。

とりあえず以下の仕様で作る方針にする。

・XMLは正確なもののみ(構文が間違っていない)
・親要素内、要素内の属性をソートする。
・ソートされたXMLの単純DIFFを取る。
・結果を表示

まぁ、そんなに困らなくても出来るだろうと思うが、楽しんでつくろうと思う。

2011/08/22

tips.ExcelVBA改行コード

VBAの最適化について調べていたら見つけたことを検証した。

VBAで文字列中に改行コードを表す場合、VBAで用意されている定数「vbCrLf」を使う場合と、「Chr(13) & Chr(10)」を使い場合で速度が異なるということだった。

以下、1,000,000回繰返し中に改行コードと文字列の結合を行った際にかかる時間を算出してみた。
OS:WindowsXPSP3
Office:2003 SP3

1,000,000回繰返しを行った際の秒数を10回の平均で出したもの。



明らかに時間がかかっていることがわかる。
定数の場合は4倍は早いようだ。

よっぽどのことが無い限り定数を使うほうがよさそうという結論。

上記とは別件だが、エクセルのセル内改行はLFを用いている様子。