2014年7月15日火曜日

hadoop 2.4.1や2.7.0用winutils.exeとhadoop.dllのダウンロード

試用したかったので、懸案のwinutilsを自前でビルド致しました。

拙作自炊のwinutils.exeとhadoop.dllがダウンロードできます。

hadoop-2.4.1-VC11-winutils.7z
https://drive.google.com/file/d/0Bygl-em20CSKRW5mODhCOXI2clk/edit?usp=sharing

プラットフォームごとに分けています。

x86\hadoop.dll
x86\winutils.exe
x64\hadoop.dll
x64\winutils.exe

Notes
  • jdk1.7.0_45を使いました。
  • Microsoft Visual Studio Express 2012 for Windows Desktopを使いました。
  • Static linkedです。C Runtime Libraryの心配は、ございません。

hadoop-2.7.0用 ダウンロード

2014年6月30日月曜日

切断したネットワークドライブ Dokan

Dokanを使い、仮想ドライブを作っています。

ネットワークドライブ、という扱いにすると、どうしても「切断したネットワークドライブ」になってしまいます。Windows 7だけ? Windows XPではならない、という情報も。。。


http://dokan.googlecode.com/svn/trunk/sys/howtobuild.txt

上のURLのテキストに、次の文言が記されています。

** Network filesystem/provider support

Dokan supports network filesystem mode. You need dokan network provider dll in \dokan_np.
Please build it and copy dokannp.dll into Windows\system32 directly.
You need to register network provider dll to system : dokanctl.exe /i n 
(Unregister network provider : dokanctl.exe /r n) 
You probably need to restart your computer after register or unregister network provider.
And try "mirror.exe /r root_path /l drive_letter /n". 
/n option means to mount as network drive 
Network filesystem mode is an experimental implementation and not tested well. 

どうも、Dokan専用、network providerを提供する必要が有るようです。

ーーー

(2014/8/2追記, 9/19編集)

判りました。

結論的には、Windows 7の64ビット版でも対応可能、デジタル署名がなくても実現可能です。



但し、64ビット環境では、32ビット用DLL、64ビット用DLLの、両方のDLLを用意する必要が有ります。

レジストリでは、設定は一か所だけ。例のようになっていると思います。

例:%SystemRoot%\System32\davclnt.dll

両方を同時に設置できる謎は、レジストリの仮想化、ファイルシステムの仮想化に有ります。

次のパスのように、仮想化によって実在場所の解釈が異なるので、各々設置できるようになっています。

C:\Windows\System32\davclnt.dll
C:\Windows\SysWOW64\davclnt.dll

これがトリックの全貌でした。。。

2014年6月9日月曜日

Accessで、ODBCリンクテーブル。SQL Native Clientで接続

10分間、つまり600秒間、通信(SQLクエリ)が無いと、接続が切れてしまう。

切れてもエラーにはならないが、再接続までにちょっと時間が掛かる点がネックとのこと。。。

ーーー
リモート クエリの制限時間を設定する方法 (SQL Server Management Studio)
http://msdn.microsoft.com/ja-jp/library/ms189040(v=sql.100).aspx

「remote query timeout オプションは、リモート操作を実行してから MicrosoftSQL Server がタイムアウトになるまでの時間 (秒単位) を指定する場合に使用します。既定値は 600 で、10 分間待機できます。」
ーーー

これかな?

設定方法は次のKBが詳しいです。

SQL Server でリンク サーバー クエリを実行するとエラー メッセージ "タイムアウトが発生しました" が表示される
http://support.microsoft.com/kb/314530/ja

確認方法は良くわかっていませんが、
クエリ「select * from sys.configurations;」で引き出すことはできました。

2014年6月6日金曜日

アイコン作成・編集ソフトウェア 調査の件

@icon変換 (DL)

概要:
  • 画像ファイル⇔アイコン 変換するソフトウェア
気になるメリット:
  • PNG形式の入出力Ok
  • 透明度の編集Ok
確認している難点:
  • ICOファイルを開く際、Vistaアイコン(PNG形式のアイコン)を読み込みできない場合有り。
  • 16色のアイコンをPNG出力すると、透明度情報が無くなる。

Pixelformer (DL)

概要:
  • アイコン編集ソフトウェア

ExplodeICO (DL)

概要:
  • ICOファイルの中身をPNGファイルで出力する。
気になるメリット:
  • Vistaアイコン対応。
確認している難点:
  • 手抜きの為、すべて32ビットPNGで出力してしまう。


2014年5月15日木曜日

nsisでMsiQueryProductState

Access Runtime 2010が入っていなければ、チェックを入れる。
Microsoft SQL Server 2008 Native Client x86/x64が入っていなければ、チェックを入れる。
例:
!include "LogicLib.nsh"

  !macro _IsProductInstalled _a _b _t _f
    Push $0
    !insertmacro _LOGICLIB_TEMP
    StrCpy $0 `${_b}`
    System::Call 'msi.dll::MsiQueryProductStateA(t) i(r0) .r0'
    StrCpy $_LOGICLIB_TEMP $0
    Pop $0
    !insertmacro _= $_LOGICLIB_TEMP 5 `${_t}` `${_f}`
  !macroend
  !define IsProductInstalled `"" IsProductInstalled`

Function .onInit
  ReadRegStr $0 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{90140000-001C-0000-0000-0000000FF1CE}" "InstallLocation"
  ${If} $0 == ""
    SectionSetFlags ${AccessDatabaseEngine} 1
  ${EndIf}

  ${If} "$PROGRAMFILES32" == "$PROGRAMFILES64"
    ${IfNot} ${IsProductInstalled} "{A51AFEE1-ED96-45F1-85E4-6A41BC4461C3}" ;x86
      SectionSetFlags ${x86} 1
    ${EndIf}
  ${Else}
    ${IfNot} ${IsProductInstalled} "{5F3BA538-ADB6-48C4-90B1-179C0358C53E}" ;x64
      SectionSetFlags ${x64} 1
    ${EndIf}
  ${EndIf}

FunctionEnd
若干、修正しました。5/15 11:43, 11:52

INSTALLSTATEの定義は次の通り:
typedef enum tagINSTALLSTATE
{
 INSTALLSTATE_NOTUSED      = -7,  // component disabled
 INSTALLSTATE_BADCONFIG    = -6,  // configuration data corrupt
 INSTALLSTATE_INCOMPLETE   = -5,  // installation suspended or in progress
 INSTALLSTATE_SOURCEABSENT = -4,  // run from source, source is unavailable
 INSTALLSTATE_MOREDATA     = -3,  // return buffer overflow
 INSTALLSTATE_INVALIDARG   = -2,  // invalid function argument
 INSTALLSTATE_UNKNOWN      = -1,  // unrecognized product or feature
 INSTALLSTATE_BROKEN       =  0,  // broken
 INSTALLSTATE_ADVERTISED   =  1,  // advertised feature
 INSTALLSTATE_REMOVED      =  1,  // component being removed (action state, not settable)
 INSTALLSTATE_ABSENT       =  2,  // uninstalled (or action state absent but clients remain)
 INSTALLSTATE_LOCAL        =  3,  // installed on local drive
 INSTALLSTATE_SOURCE       =  4,  // run from source, CD or net
 INSTALLSTATE_DEFAULT      =  5,  // use default, local or source
} INSTALLSTATE;

Windows Installerの細かい所は存じませんが、5が帰ってきたらセットアップ済みのようです。

MsiQueryProductState function
http://msdn.microsoft.com/en-us/library/aa370363(v=vs.85).aspx

INSTALLSTATE_UNKNOWN (-1)
The product is neither advertised or installed.

INSTALLSTATE_ADVERTISED (1)
The product is advertised but not installed.

INSTALLSTATE_ABSENT (2)
The product is installed for a different user.

INSTALLSTATE_DEFAULT (5)
The product is installed for the current user.

2014年4月4日金曜日

DataRowやDataRowViewで、DBNullやnullやNullableを設定したり取得したりする件

IsNullになっている列から、値を取得

DataRow → DBNull
DataRowView → DBNull

結論: DataRow.IsNull(...) == true の場合、DataRow[...] では DBNull 型のインスタンスが返って来る。

※ クラス(例: String)でも値型(例: TimeSpan)でも、DBNull が出て来る。
※ クラス(例: String)の場合、null を突っ込んだ後でも、DBNull が出て来る。

値を設定

結論: 代入で null に設定したい場合は、常に DBNull.Value を渡すのが無難。

クラス(例: String)の場合:

[Ok] DataRow ← DBNull
[Ok] DataRowView ← DBNull
[Ok] DataRow ← null
[Ok] DataRowView ← null

値型(例: TimeSpan)の場合:

[Ok] DataRow ← DBNull
[Ok] DataRowView ← DBNull
[例外発生] DataRow ← null
[例外発生] DataRowView ← null
[例外発生] DataRow ← new Nullable<TimeSpan>();
[例外発生] DataRowView ← new Nullable<TimeSpan>();

※ 『追加情報: Column 't' を null に設定できません。DBNull を使用してください。』

オマケ LINQ to DataSet でのクエリ
DataRow.Field<T>("列名");
DataRow.SetField<T>("列名", 値);
T には int? など Nullable が利用できます。

総括

判定は、{クラス・値}、{DataRow・DataRowView}の別に関わらず、DBNull で実施する:
  • dr["Column"] is DBNull
  • drv["Column"] is DBNull
代入もDBNullで実施する。
  • dr["Column"] = DBNull.Value
  • drv["Column"] = DBNull.Value

2014年4月2日水曜日

ClickOnce アプリのデバッグと、セキュリティの警告

「現在のプロジェクト設定は、プロジェクトが特定のセキュリティのアクセス許可でデバッグされることを指定しています。このモードでは、コマンドライン引数は実行可能ファイルに渡されません。デバッグを続行しますか?」


ーーー

コマンドライン引数を確かめますと、確かに指定しています。


ーーー

解決するには、XXX.csproj.userファイル中、

<EnableSecurityDebugging>false</EnableSecurityDebugging>

こちらをfalseに設定します。

ーーー

「特定のセキュリティのアクセス許可」とやらは提供されなくなりますが、そういう複雑なプロジェクトを組んでいらっしゃる方は、普通、入口を切り分けると思いますので。。。

            if (ApplicationDeployment.IsNetworkDeployed) {
// ClickOnce 起動時は、こちら
// 追加の処理…
}
else {
// それ以外 (exe ファイルの直接起動時、デバッグ時など)
// 追加の処理…
}

Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
return;

ーーー

画面の設定手順としましては:

プロジェクトのプロパティ
→「セキュリティ」タブ
→「詳細設定」ボタン
→「このアプリケーションを選択されたアクセス許可のセットでデバッグする」 チェックを外す。

ーーー

ただし、アセンブリ参照の内容によってはこの画面まで至ることができません。その場合、ファイルの直接編集が有効です。