2007年07月30日

Lucascape

   このエントリーをはてなブックマークに追加 Clip to Evernote
自宅PCのブラウザをIE7からLunascape ver4に変更。
lunascapeは、ver3の時には利用していたのだけれど、IE7が出た段階で、IE7に乗り換えていた。

僕は、「RSSバー」という IE のエクスプローラバーを愛用しているのだけれど、購読しているRSSの数が増えてしまったせいか、IE7で新しいタブを開くたびに、 だんまり状態になってしまった。
たぶん、タブを開くたびに、RSSバーの初期化が走るのだと思う。
空白タブを開くのにも、イライラするような状況なので、lnascapeに変更。
このブラウザは、IEのプラグインがそのまま利用できるので、「RSSバー」も問題なく動作する。
Lunascapeの良いところは、RSSバーのインスタンスがひとつしか作成されない点だ。
このため、いくつタブを開いても、RSSバーの初期化が走ることはないので、今までよりも快適に使えている。

IEとGeckoの2つのエンジンを切り替えられるのも良い。  

Posted by gushwell at 22:03Comments(0)TrackBack(0)

2007年07月27日

JSON

   このエントリーをはてなブックマークに追加 Clip to Evernote
個人的な興味で、JavaScriptでXMLHTTPRequest を使ったコードを書いてみたのだが、クロスドメインの問題で、上手く動作しない。

そもそも、Webアプリケーション作成の知識が少ないため、クロスドメインという用語すらも知らなかったくらいだから、解決の糸口がなかなかつかめなかった。

やっと、たどり着いたのが dojo というフレームワーク。
でも、サーバーから取得するデータは XMLではなく、JSON という形式でないと利用できないみたい。

JSON この名前は知っていたが、具体的にどんなものか知らなかった。

http://d.hatena.ne.jp/brazil/20050915/1126709945

によれば、JSON(JavaScript Object Notation)は、軽量のデータ交換フォーマットで、言語に依存しないものということだ。

ということは、C#でも使えるってことだな。

XMLよりは軽量そうだけれど、本当にそうなのかな?
直感的にはそう思うけど、属性がたくさんある場合はどうだろうか?

軽量っていうよりは、JavaScriptでの扱いやすさってのが一番のメリットだな。

  
Posted by gushwell at 09:06Comments(2)TrackBack(0)

2007年07月26日

Dispose(bool disposing) の override

   このエントリーをはてなブックマークに追加 Clip to Evernote
http://msdn2.microsoft.com/en-us/library/fs2xkftw.aspx
のコードをみて、以下のように書いたら、base.Dispose() が呼ばれない可能性があるということで、FxCopの警告が出た。

   protected override void Dispose(bool disposing) {
if(!this.disposed) {
try {
if(disposing) {
addedManaged.Dispose();
}
this.disposed = true;
} finally {
base.Dispose(disposing);
}
}
}


なので、以下のように書き換えた。

   protected override void Dispose(bool disposing) {
try {
if(!this.disposed) {
if(disposing) {
addedManaged.Dispose();
}
this.disposed = true;
}
} finally {
base.Dispose(disposing);
}
}



この場合は、base.Dispose(true)が複数回呼ばれる可能性がある。でも基底クラスのDispose()もパターンに則って書かれているはずだから、問題はでないはず...
僕の好みは、前者なんだけど、まあいいか。

でも、ドキュメントに書かれているコードで、FxCopが警告を出すってのは、どうなんだろう?
  
Posted by gushwell at 22:18Comments(0)TrackBack(0)

2007年07月25日

メッセージキューシステムへのアクセスが拒否されました。

   このエントリーをはてなブックマークに追加 Clip to Evernote
MSMQを使ったサービスぷ戸グラムを作成しサービスを起動したら、

「メッセージ キュー システムへのアクセスが拒否されました。」

というメッセージが出て、キューへのアクセスが出来ない。

サービスの起動アカウントを ローカルシステムからローカルなAdmin権限を持ったユーザに変えてみてもダメ。

ためしに、起動アカウントを通常ログオンしている開発用のドメインアカウントに変更すると、OKだ。

なんで、ローカルなAdministrator権限のユーザでダメなんだろう。

調べて分かったのは、Message Queueそのもののセキュリティ設定が絡んでいることが分かる。
たぶん、キューを作成したユーザには、フルアクセスの権限が与えられるのだけれど、それ以外のユーザには、Administratorなユーザであっても権限が付与されないということなのだろう。

コントロールパネル、コンピュータの管理の画面で、キューのセキュリティ設定に新たなユーザを追加して無事解決。  
Posted by gushwell at 22:02Comments(0)TrackBack(0)

2007年07月18日

アセンブリ名でロードする

   このエントリーをはてなブックマークに追加 Clip to Evernote
"TestLib.TestClass, TestLib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"

という typeネーム に対して、

Type type = Type.GetType(data.Type);
obj = Activator.CreateInstance(type);

としたら、エラーになる。
そうか、CreateInstance()は、勝手にアセンブリをロードしてくれないんだ。

ということで、
Assembly.LoadFrom(asm);
として、ロードしようとしたら、これまたエラーだ。
LoadFromには、ファイルパスを指定しないといけない。
アセンブリ名で、ロードするには、
Assembly.Load(asm);

としないといけないみたいだ。

ところで、記事先頭のタイプ名文字列から、アセンブリ名を取得するって、やはり自力でやらないといけないのかな。
まあ、それほど難しいコードじゃないけど、あっても良さそうなのに。  
Posted by gushwell at 20:24Comments(0)TrackBack(0)

2007年07月17日

指定されたサービスは削除の対象としてマークされています。

   このエントリーをはてなブックマークに追加 Clip to Evernote
サービスをアンインストール後、installutil を使って再度サービスをインストールしたら、
-----
インストール段階で例外が発生しました。
System.ComponentModel.Win32Exception: 指定されたサービスは削除の対象としてマークされています。
-----
というメッセージが出て、インストールに失敗する。

MSのサポート技術情報のhttp://support.microsoft.com/kb/823942/jaのページに、


「再起動しろ」と書いてあったので、再起動して、installutilを 再度実行したら、今度は正常にインストールできた。

でも、僕の環境は、WindowsXPで、Windows2000じゃないし、
Microsoft Visual Studio .NET 2003 じゃなくて、Microsoft Visual Studio 2005
なんだけど。。。

本当の理由は分からないけど、まあ、いいか。
  
Posted by gushwell at 20:33Comments(0)TrackBack(0)

2007年07月12日

ASP.NETのWebサービスで、System.Diagnostics の Trace

   このエントリーをはてなブックマークに追加 Clip to Evernote
久しぶりに、ASP.NETのWebサービスを作成、でも、System.Diagnostics の Traceが取れない?
この原因がなかなか分からずに、かなり手こずってしまった。

Web.configの変更が必要なんだっけ?
違うと思いつついくつかのオプションを追加してみたが、改善しない。
ためしに、Visual Studio 2005 からASP.NET 開発サーバーを使い、ローカルでデバッグしたら、こっちは問題なくTraceが取れた。

これで、セキュリティの問題かなと、なんとなく見当がついた。

Webサービスの起動アカウント(デフォルトでは、Network Service)のアクセス権を
IISのマネージャから変更することで解決。
書き込み権限が付与されていなかったためです。
  
Posted by gushwell at 21:53Comments(0)TrackBack(0)

2007年07月11日

必要な情報は親から貰うんじゃなくて子供から貰え

   このエントリーをはてなブックマークに追加 Clip to Evernote
このタイトルは何を言いたいのかというと、

ある処理をするのに必要な情報は、それを呼び出す親プログラムから引数などで渡してもらう、ってのが普通のやり方だと思います。

でも、発想を逆転してあげることで、とても設計がすっきるとする場合があります。
引数で渡して貰うんじゃなくて、サブクラスから情報を貰うようにするわけです。
要は、Template Method を上手く活用するってこと。

特に、受け取りたいデータが沢山ある場合は、引数で受け渡すことにすると、呼び出す側の負担が増えるし、コードも読みにくくなります。

virtualなメソッドを定義し、必要な情報をサブクラスから貰うようにすれば、呼び出す側のコードがすっきりするし、責任範囲が明確になります。


もっとも、どんな場合でも使えるっていうわけじゃないけどね。
  
Posted by gushwell at 20:56Comments(2)TrackBack(0)