端数の切り上げ処理に注意

端数処理というと、切捨、切上、四捨五入、JIS丸めの4種類と思われがちですが、
端数を切り上げて整数にするという場合のルールは実は2種類あります。

①整数値を少しでも超えていたら切り上げるケース
例)0.01→1

②端数処理後有効桁の次の桁、つまり少数第一位に対して切り上げを行うケース
例)0.01→0、0.10→1

一般的には①が正しいとされEXCELのROUNDUP関数もこの仕様ですが、②を採用したシステムも世の中には存在しており、料金計算などでシステム間の値が合わないといったトラブルの原因となる為、あらかじめ確認が必要です。

エクスプローラの縮小版表示を簡単に行う方法(VB.NET,C#)

WinFormでエクスプローラの縮小版表示を行う一番簡単な方法は、WebBrowserコントロールを利用します。

FormにWebBrowserコントロールを貼りつけ、以下のようにイベントを記述します。



Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles Me.Load
Me.WebBrowser1.Navigate("C:\WINDOWS")
Me.WebBrowser1.ActiveXInstance.document.CurrentViewMode = 5
End Sub

ユーザーインターフェイスについての考察1

一般的に明細部分を見やすく表示する為には、背景色を1行ごとに交互に変えると
良いといわれていますが、これは本当でしょうか?

まず、背景色が一色の場合、

確かに★が何行目にあるか瞬時にはわかりませんね。
では、

★が行目か瞬時に判別できますね。
・・・本当ですか?先入観で見やすくなったと思い込んでませんか?
行間が狭いため、右から左に目で追いかけないと
上下の同じ色の部分と見間違えそうになります。

では、これならどうでしょう?

あまり見かけない感じですが、一瞬で★が何行目にあるかわかりますね。
つまり、背景色を2色で交互に変えるより、3色使う方が格段に見やすくなります。

実行ファイルにリソースとしてソースファイルを圧縮格納する方法

ソフトウェアの開発・保守にて、プログラムソースの管理をどんなにしっかり行っていても、実行モジュールに対応したソースがどれだかわからない。あるいはソースコードが行方不明になるという事故が発生することがあります。

今回は VisualStudio2005、2008 を使って実行ファイル(.exe、.dll)にソースファイルを含めてしまうことで、実行ファイルソース等価性を確実に保証し、実行ファイルから完全なソースコード復元できるようにする方法を紹介したいと思います。


あらかじめコマンドラインから呼び出せるフリーのアーカイバである7-zipをインストールしておく必要があります。

VisualStudioより、ダミーの「src.zip」をプロジェクトに追加し、ビルドアクションを「埋め込まれたリソース」にします。




VB.NETの場合だと、プロジェクトのプロパティ⇒コンパイル⇒ビルドイベントより
(※ VB.NET Express Editionではビルドイベントの設定はできません。C# Express Editionでは設定可能。)


[ビルド前に実行するコマンドライン]


DEL "$(SolutionDir)src.zip"

"C:\Program Files\7-Zip\7z.exe" a -tzip "$(SolutionDir)src.zip" "$(SolutionDir)" -x!src.zip -x!obj -x!bin -r

[ビルド後に実行するコマンドライン]

type nul > "$(SolutionDir)src.zip"


をそれぞれセットします。

また、プロジェクトを作成・保存する際には、「ソリューションのディレクトリを作成」チェックボックスを外しておきます。

(※チェックを付けたくない場合、ビルドイベントの$(SolutionDir)を$(ProjectDir)としてやる必要があります。)


以上の手順で、ビルドする際に自動的にソースフォルダが圧縮され、リソースとして実行モジュール(.NETアセンブリ)に格納されることになります。

実行モジュールから簡単にソースファイルを取り出すには.NET Reflector等を利用すると良いでしょう。

SQLSERVER 行ロックの真実

SQL SERVER2005にて行ロックの実験をしてみたいと思います。

下記のSQLをManagementStudioより実行します。


まずはテーブルを作成してデータをセットします。


CREATE TABLE IKENIE(A INT)
INSERT INTO IKENIE SELECT 1
INSERT INTO IKENIE SELECT 2
INSERT INTO IKENIE SELECT 3
INSERT INTO IKENIE SELECT 4
INSERT INTO IKENIE SELECT 5
INSERT INTO IKENIE SELECT 6
INSERT INTO IKENIE SELECT 7
INSERT INTO IKENIE SELECT 8
INSERT INTO IKENIE SELECT 9
INSERT INTO IKENIE SELECT 10


次に1件だけを対象に行レベルの更新ロックをかけてみます。


BEGIN TRAN


SELECT TOP 1 *
FROM IKENIE WITH(UPDLOCK,ROWLOCK)
ORDER BY A



利用状況モニタより、ロックの状況を確認してみましょう。

このようにロックエスカレーションせずに、テーブル内のすべての行が確実に行ロックされているのが確認できますね。!!!んっ!?