Sat, 3 July 2010

LINQ to Exchange WebDAV

Exchange 2000, 2003, 2007にはWebDAVでアクセスするためのインターフェースがありまして、SQLを含んだXMLを投げつけるとExchangeの中のデータを取り出せたりします。Searching Folders (WebDAV) のような感じですね。まあ2010では廃止されちゃったのですが。

さてExchange 2003のデータを.NET Frameworkのプログラムから取り出したいということがあるわけですが、今までぷちぷちSQL文字列を組み立ててXDocumentでちくちく処理していました。が、なんかめんどくさいしやっぱりLINQ使いたいですよね!!ということでLINQ プロバイダを作ってみました。死にゆくExchange 2003のための誰得LINQプロバイダです。

ダウンロード: Misuzilla.Data.ExchangeWebDav-20100703.zip (Visual Studio 2010, .NET 4)

IQueryable/IQueryProviderまわりを勉強しながらだったので何となく動くところまでしかやってないので細かいとこはアレなのと、Exchange 2003でしか動作確認していないので多分2000とか2007だとそのままでは動かないかもしれません。

使い方はExchangeDavQuerySampleを見てもらえればわかるのですが、次のようなコードでメールの一覧を取ってこれたりします。

var credential = new NetworkCredential("yui@k-on.local", "P@ssw0rd");
var baseUrl = "http://exch2k3.k-on.local/exchange/yui/受信トレイ/";

// WebDAVアクセスのためのクライアントを作成する
ExchangeWebDavClient davClient = new ExchangeWebDavClient(credential);
// LINQプロバイダを作成する
ExchangeDavQueryProvider provider = new ExchangeDavQueryProvider(davClient, baseUrl, baseUrl, TraversalType.Shallow);
provider.Log = Console.Out;

// クエリを作成する
var q = new ExchangeDavQuery<DavMessageHeaderEntry>(provider)
    .Where(x => !x.IsFolder && !x.IsHidden)
    .OrderByDescending(x => x.CreationDate)
    .Select(x => new { Subject = x.Subject, From = x.From, To = x.To });

// 実行する
foreach (var entry in q)
{
    Console.WriteLine("--------------------------------------------------");
    Console.WriteLine("Subject: {0}", entry.Subject);
    Console.WriteLine("From: {0}", entry.From);
    Console.WriteLine("To: {0}", entry.To);
}

これを実行すると以下のような結果が出てきます。

---- Query: 2010/07/03 15:57:34 ----
BaseUrl: http://192.168.0.36/exchange/yui/受信トレイ/
Start: 0, End: 49
SQL:
SELECT
    "urn:schemas:httpmail:subject", "urn:schemas:mailheader:from", "urn:schemas:mailheader:to"
FROM
    SCOPE ('SHALLOW TRAVERSAL OF "http://192.168.0.36/exchange/yui/受信トレイ/"')
WHERE
    (NOT(("DAV:isfolder" = true)) AND NOT(("DAV:ishidden" = true)))
ORDER BY
    "DAV:creationdate" DESC

---- Query End: 135.0077ms ----
--------------------------------------------------
Subject: 2010年夏合宿
From: "Tsumugi Kotobuki" <mugi@k-on.local>
To: "Yui Hirasawa" <yui@k-on.local>, "Azusa Nakano" <azunyan@k-on.local>, "Ritsu
 Tainaka" <ritsu@k-on.local>, "Mio Akiyama" <mio@k-on.local>
--------------------------------------------------
Subject: とんちゃんの写真の件
From: "Yui Hirasawa" <yui@k-on.local>
To: "Azusa Nakano" <azunyan@k-on.local>, "Tsumugi Kotobuki" <mugi@k-on.local>
--------------------------------------------------
Subject: test
From: "Yui Hirasawa" <yui@k-on.local>
To: "K-ON Club -Internal" <K-ONClub-Internal@k-on.local>

更新などには別途何か必要なのですがそうでなくても、データ取得が簡単にできるようになるので便利だと思います。どうぞご利用ください。

Thu, 30 July 2009

WinDbg/CDBで.loadby sos mscorwksしてSOSデバッガ拡張コマンドを使うとmscorwks.dll/mscordacwks.dllのバージョンが違うと怒られる

Windows Server 2003 環境の.NET FrameworkとWindows Vista SP2の.NET Frameworkは微妙にバージョンが違ったりします(W2k3は最新で2.0.50727.4016、Vistaは2.0.50727.3053)。

そんな感じで手元とは異なった環境で取ったメモリダンプファイルを開いて、SOSデバッガ拡張でのぞき見ようとすると次のようにエラーになったりします。

0:023> .loadby sos mscorwks
0:023> !DumpHeap
*********************************************************************
* Symbols can not be loaded because symbol path is not initialized. *
*                                                                   *
* The Symbol Path can be set by:                                    *
*   using the _NT_SYMBOL_PATH environment variable.                 *
*   using the -y  argument when starting the debugger. *
*   using .sympath and .sympath+                                    *
*********************************************************************
PDB symbol for mscorwks.dll not loaded
Failed to load data access DLL, 0x80004005
Verify that 1) you have a recent build of the debugger (6.2.14 or newer)
            2) the file mscordacwks.dll that matches your version of mscorwks.dll is 
                in the version directory
            3) or, if you are debugging a dump file, verify that the file 
                mscordacwks___.dll is on your symbol path.
            4) you are debugging on the same architecture as the dump file.
                For example, an IA64 dump file must be debugged on an IA64
                machine.

You can also run the debugger command .cordll to control the debugger's
load of mscordacwks.dll.  .cordll -ve -u -l will do a verbose reload.
If that succeeds, the SOS command should work on retry.

If you are debugging a minidump, you need to make sure that your executable
path is pointing to mscorwks.dll as well.
0:023> .cordll
CLR DLL status: ERROR: Unable to load DLL mscordacwks_x86_x86_2.0.50727.3053.dll, Win32 error 0n2
0:023> .load C:\Windows\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll
0:023> .cordll -ve -u -l
CLR DLL status: No load attempts
0:023> !DumpHeap
CLRDLL: C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscordacwks.dll:2.0.50727.4016 f:0
doesn't match desired version 2.0.50727.3053 f:0
CLRDLL: Unable to find mscordacwks_x86_x86_2.0.50727.3053.dll by mscorwks search
CLRDLL: Unable to find 'mscordacwks_x86_x86_2.0.50727.3053.dll' on the path
CLRDLL: Unable to find mscorwks.dll by search
CLRDLL: ERROR: Unable to load DLL mscordacwks_x86_x86_2.0.50727.3053.dll, Win32 error 0n2
Failed to load data access DLL, 0x80004005
Verify that 1) you have a recent build of the debugger (6.2.14 or newer)
            2) the file mscordacwks.dll that matches your version of mscorwks.dll is 
                in the version directory
            3) or, if you are debugging a dump file, verify that the file 
                mscordacwks_<arch>_<arch>_<version>.dll is on your symbol path.
            4) you are debugging on the same architecture as the dump file.
                For example, an IA64 dump file must be debugged on an IA64
                machine.

You can also run the debugger command .cordll to control the debugger's
load of mscordacwks.dll.  .cordll -ve -u -l will do a verbose reload.
If that succeeds, the SOS command should work on retry.

If you are debugging a minidump, you need to make sure that your executable
path is pointing to mscorwks.dll as well.

そんなときは対応するDLLを取得できるようにシンボルパスを設定してあげます。

WinDbg の File → Symbol File Path ... で Symbol path: に

symsrv*symsrv.dll*c:\localcache*http://msdl.microsoft.com/download/symbols

Reload チェックボックスをオンでOKで閉じます。

もしすでに .loadby sos mscorwks を実行して怒られたあとなら、一度次のコマンドで再読み込みできるようにします。

.cordll -ve -u -l

あとは普通にデバッガ拡張コマンドが使えるようになってるはずです。

Tue, 30 December 2008

Windows Vista の Flip3D を無効化する

普段 Windows Vista を利用していて大体不満を感じないのですが、一つどうしても気になっていたことがあります。それは Vista のウリである Flip3D を Alt+Tab を押すつもりで Win+Tab で間違えて発動してしまいガッカリすることです。いくら Vista スキーとはいえアレはいらないのです。

ということで無効化する方法を調べたところ、HKLM\Software\Policies\Microsoft\Windows\DWM (HKCU でもよい)に DisallowFlip3d というキーを作って 1 を設定すればよいようでした。

コマンドプロンプト(管理者権限で起動してください)で以下のようなコマンドを実行すれば無効化されます(この例ではユーザーローカルなHKCUに書き込んでいます)。

reg add HKCU\Software\Policies\Microsoft\Windows\DWM /v DisallowFlip3d /t REG_DWORD /d 0x1
sc stop uxsms & timeout 5 & sc start uxsms

逆に有効にしたい時は以下のように実行すれば戻ります。

reg delete HKCU\Software\Policies\Microsoft\Windows\DWM /v DisallowFlip3d
sc stop uxsms & timeout 5 & sc start uxsms

Sat, 10 November 2007

Apple Wireless Keyboard Helper for Windows Updated 20071102

20071102版をリリースしました。JIS配列のキーボードでカナキーと英数キーに対してアクションを割り当てることができるようになりました。

JIS配列のサポートについてはりちゃさんにご協力いただきました。ありがとうございました。

Tue, 23 October 2007

Apple Wireless Keyboard Helper for Windows Updated 20071023

20071023にアップデート。一緒に含めていたMasterVolumeControlLibraryをアップデート(XPで起動時にエラーが出ていたのが直るはずです)。

ちなみに初期のリリースからの間にはJP対応とスクリプト再読込でビルトインモジュール(Trueとかすらなくなる)が吹っ飛ぶ問題も直してあります。

しかしソースをみて悩んだですよ……何しろリポジトリにつっこむ前になおしたつもりの現象がなぜか起こるので。なんかファイルが古いので逆コンパイルしたら直す以前だったという。

Mon, 15 October 2007

Apple Wireless Keyboard (新型)を Windows で使う

先週、銀座のApple Storeに行ったら薄っぺらいアルミニウムな新型のWireless Keyboardが入荷されていたので買ってきました。勢いで買ったのでWindowsにつながるかどうか心配になったのは家に着いてからです。というかやっとFnキーを使えるようにするやつを公開したのでエントリを書けることに。

SBSH00921.JPG こんな感じでとても薄く、軽いのです。線もないのでジャマになったらぽいっとどかせるのがよいですね。肝心のWindowsとの接続はMicrosoft Wireless Laser Mouse 8000のBluetooth トランシーバとVAIO type T(TZ)のBluetoothともに接続できました。よかったです。

さて買ったのはUSモデルなので、Aの横にはいらない子(Caps Lock)があるのでそこらに転がっているレジストリ変更でつぶしました。が、どうもCaps LockをCtrl化したキーは反応が若干遅いっぽく、C-vとかC-hとかを打とうとするとたまに取りこぼします。ううーん。これは結構ストレス。配列にはこだわらないので元からAの左にCtrlがある日本語のほうがよかったかも。(そもそもCaps Lockが遅延気味?Macでも遅延気味なのかも?(コメント欄))

そしてもう一つの罠。「Windowsキーになるキー(Command)がある!これでCommand+Lでロックできますね!」→デスクトップをロック→「あ、DelがないからCtrl+Alt+Delを押せない!孔明の以下略」。というわけでF12をDelに変更しました。(CapsLockをCtrl、F12をDelにするレジストリファイル)

そしてほかにもPrintScreenがないとか、Fnキー使えれば!という感じだったのですがBootCampでもないしはうはう。でもご安心ください、解決方法はちゃんとあります。そして、やっと本題。

そんなWindowsでは全く認識されないFnキーさん、悲しいことです。どうも探した感じではBootCampのやつを使うとかぐらいしか方法がないようでした。でもHID読めるよというヒントがあったので、ヘルパーアプリケーションを作れそうと思って作りましたよー。

というわけで Apple Wireless Keyboard Helper for Windows なのですが、これでFn+F何とかでiTunes操作や音量の調節、Fn+Up/DownでPageUp/Down、Fn+Left/RightでHome/Endなどができるようになります。Ejectや電源ボタンにも機能をふれます。これでいらない子とかいわれないです。

もちろんカスタマイズできます。設定ファイルの書式はどうしようかなと思った末、Pythonスクリプトにしました。IronPython+DLRでがんばって楽をするという裏技。IronPython+DLRは最近出た2.0-A5です。Pythonスクリプトなのでいろいろできます。デフォルトの設定ファイルとか。

あと、HIDを直接読んでるのでもしかしたら日本語配列だと動かないかもですが、その辺はうごかないよーといってもらえれば何とかします(できればですけど)。多分。あとボリューム操作もXPで動くのか謎です。求む動作結果または日本語配列キーボード。

そんなわけでCtrl化したCapsLockの反応がアレな以外は満足です。うんうん。

むー。休止から帰ってきてロック画面になると使えなくなってしまう。ロック解除するとつかえるんだけど。Bluetoothキーボードには起こりがちなのかなー?要調査

Wed, 3 October 2007

Misuzilla.Build.Tasks.Eject

Twitter更新タスクに続いてまたMSBuildのタスクです。まあ、名前からやっぱり想像できると思いますが、MSBuildでビルド中にCD/DVD-ROMドライブのトレイをイジェクトできます。もちろんNotify::Ejectリスペクトです。

これをAfterBuild ターゲットあたりに書いておけば、ビルドが終わったことをドライブがガコーといってお知らせしてくれます。予想では超便利なはずです。どうぞご利用ください。

使い方というか書き方はTwitterのそれと同様、Sample.projを参考にしてください。

ダウンロード: Misuzilla.Build.Tasks.Eject-r349.zip / ソースコード Subversion (Trac)

次はMSBuildでUSBミサイルランチャー?

Twitterのと併せて一つのアセンブリにすればよかったかも?

Misuzilla.Build.Tasks.Twitter

MSBuildのタスクです。このタスクを使えばMSBuildでビルド中にTwitterのステータスを更新できます(まだステータス更新しかないです)。これはgyuqueさんの「ビルド結果をTwitterに投げるようにしてみた」をみて思いついたものです。

これをAfterBuild ターゲットあたりに書いておけば、ビルドが終わったことをTwitterに通知できます。

使い方というか書き方は同梱のSample.projを参考にしてください。

ダウンロード: Misuzilla.Build.Tasks.Twitter-r312.zip / ソースコード Subversion (Trac)

Mon, 17 September 2007

MacFace Pattern Editor

MacFace用の顔パターンを作るための簡易エディタです。なぜかMac版がないのにWindows版です。

ダウンロード: MacFacePatternEditor-r316.zip

簡易ぺらぺら画像一枚のスクリーンショット兼使い方。これまたてきとーでやる気がない。

残念ながらfaceDef.plistのインポートはできません。あとまあいろいろ不便があるんですが面倒で直していない現実です。

Yet Another 名称未設定 59

名称未設定 59さんをアップデート。

何やらりゅうさんからUntitled 59 blueアナザーパターンをいただいたのでそれを含めました。ありがとうございます。

開発コンセプトは「へたれながんばりやさん」で、メモリが足らなくなってくると頑張ってみたりしますが、へたれなのでやがてダメな感じになります(謎)だそうです。まあ確かにオリジナルはイマイチです(作りながらちょっと思った)。

»ページの一番上に戻る