2005年11月29日

C# RegexクラスのMultilineオプション

   このエントリーをはてなブックマークに追加 Clip to Evernote
.NET Framework の Regexクラスのコンストラクタのひとつに、

[C#]
public Regex(string pattern,RegexOptions options);

というものがあります。第1引数は、正規表現を、第2引数は、オプションを指定します。このオプションですが、Multiline というものがあるんですね。
これを使えば、複数行のなかから、ある行を探すのに、1行ごとに Matchメソッドを呼び出すのではなく、複数行丸ごと、Matchメソッドの引数に渡すことができるみたいです。

でも、やってみたら、できません???
正規表現として

^ABC$

を指定し、検索してみても、ABC という行と一致してくれません。

理由は単純。改行コードは、\r\n なのですが、正規表現の $ は、\n と一致するので、Windowsで一般的な \r\n 付きの複数行テキストを検索するには、

^ABC\r$

のように、\r をつけてあげないとだめみたいです。
確かにその通りなんだけど、なんだかな〜
もともと 正規表現は、unixで発達したものなので、行末は、\n なのだけれど、.NETは、Windowsで動かすのだから、Multilineオプションを用意するんだったら、\r\n を 行末 $ と一致させるオプションも併せて用意してくれれば良いのにな。
それとも僕が知らないだけ?
  

Posted by gushwell at 22:05Comments(0)TrackBack(1)

2005年11月25日

C#のinterfaceの説明

   このエントリーをはてなブックマークに追加 Clip to Evernote
C#のインターフェースの説明すると、「どうもピンとこない」という反応が返ってくることがあります。
そこで、いろいろな文献などを参考に、僕なりの言葉でまとめてみました。

「インターフェースは、クラスの規格を定めたもの」と考えると理解しやすいかもしれません。工業製品には、様々な「規格」が存在し、その「規格」に合った製品を作ることで、製品同士を繋げたり、ある場所に正しく設置できたりします。
interfaceは、 プログラミング言語の文法に、この「規格」の概念を持ち込んだものなのです。


どうでしょう。
  
Posted by gushwell at 22:18Comments(2)TrackBack(0)

2005年11月24日

C#は難しいのか?

   このエントリーをはてなブックマークに追加 Clip to Evernote
C#は、初心者には向かないという意見を時々聞きます。
しかし、C#は、初心者プログラマに優しい言語なのではないかと思うようになってきました。
僕の会社では、Delphi(.NET版ではない)とC#を中心に使っているのですが、
新入社員にこれらの言語を教えると、C#の方が覚えが早いように思えます。
Delphiは、Pascal言語(Pascalは教育用として設計された)を基に、オブジェクト指向の機能を追加した言語なので、覚えやすい言語だと考えてきたのですが、プログラミング初心者には、Delphiより、C#のほうがやさしく感じるようです。
特に、自分でクラスを定義する段階になると、この差は明らかになります。
なぜなのかその理由はわかりませんが、経験上、C#は初心者に優しい言語なのだと思うようになってきました。
VS2005の発売開始を機に、C#人口が増えることを期待しています。  
Posted by gushwell at 22:19Comments(0)TrackBack(0)

2005年11月22日

ITイノベーションエリアのリンク集

   このエントリーをはてなブックマークに追加 Clip to Evernote
ITイノベーションエリアのリンク集のカテゴリ「Blog.IT技術者」に 僕のページがリンクされているようです。「リンク集にIT技術者ブログを追加」ていう トラックバックがしばらく前にあったのだけれど、見落としていました。

このサイトは、有限会社エクスブリッジというベンチャー企業が運営しているサイトで、
ITによる業務革新を成功させたい人のためのコミュニティサイトです。
ITコンサルタント、IT技術者(SE,PG)、企業内IT担当者など、ITに関わるあらゆる業種、あらゆる業務の方々との情報交換の場を提供します。

ということだそうです。

で、僕のページがどんな風にリンクされているのかを見に行ってみました。
「Blog.IT技術者」のカテゴリには、37のブログサイトが登録されていました。
まだ、このサイトは今年9月に開設したばかりのサイトなので、利用者もまだ少ないようですが、このページから、僕のページに飛んでくれてきた人もいるようです。
  
Posted by gushwell at 21:51Comments(1)TrackBack(0)

2005年11月18日

Unrestricted=falseって何?

   このエントリーをはてなブックマークに追加 Clip to Evernote
11月15日に書いた C#(というか.NET)における宣言セキュリティの続き。

[FileIOPermissionAttribute(SecurityAction.Deny, Unrestricted=true)]
private void Test() {
// ここでファイルを読み込む
}

とすると、Denyを指定しているので、ファイルアクセスを許可していないことになる。
当然、Test()を呼び出すと、例外が発生する。
では、以下のように Unrestricted=false とするとどうなるのだろう。

[FileIOPermissionAttribute(SecurityAction.Deny, Unrestricted=false)]

これだと、例外は発生しない。この場合は、具体的にどの操作を拒否するのかを指定しなくてはならない。簡単に言えば、読み込みを拒否するのか、書き込みを拒否するのか、ということを指定するわけだ。
たとえば、こんな感じ。

[FileIOPermissionAttribute(SecurityAction.Deny, 
Unrestricted=false, Read=@"D:\Temp")]


この場合は、D:\Tempフォルダ配下へのRead操作が拒否されることになる。

[FileIOPermissionAttribute(SecurityAction.Deny, 
Unrestricted=false, Write=@"D:\Temp")]

とすれば、読み込みはOKだが、書き込み操作が拒否されるわけだ。
こんな風に、こまかなアクセス制御が可能になる。

うーん、でもここまで神経を使わなくてはいけないんだろうか。
「SecurityAction Unrestricted」でgoogleで検索してもヒットする日本語のページはほんのわずかであり、きっと、ほとんど使われていないんだろな。

それと、MSDNでのUnrestricted の説明は、以下のようになっている。

属性によって保護されているリソースに対して完全な (無制限の) アクセス許可が宣言されているかどうかを示す値を取得または設定します。

僕は、この日本語をまったく理解できない。
これは、僕の日本語読解力の無さのせいなのか。それとも....
  
Posted by gushwell at 21:32Comments(0)TrackBack(1)

2005年11月15日

SecurityAction

   このエントリーをはてなブックマークに追加 Clip to Evernote
System.Security.Permissions.SecurityAction について

.NETのコードアクセスセキュリティでは、属性による許可制御として以下のような記述ができる。

[FileIOPermissionAttribute(SecurityAction.Assert, Unrestricted=true)]
private void Test() {
...
}

でも、この Assert とか、Demand とかが、具体的に何を意味するのかがマニュアルを読んでもピンとこない。
で、僕なりに分かりやすい言葉でまとめなおしてみた。

SecurityAction.Demand (アクセス許可を要求)
 このメソッドは、XXXXXXX処理を行いますので、許可してください

SecurityAction.Assert (アクセス許可を要求)
 このメソッドは、XXXXXXX処理を行いますので、許可してください。
 ただし、呼び出し元のチェックは行わないで良いですよ

SecurityAction.PermitOnly (アクセス許可を要求)
 このメソッドは、XXXXXXX処理のみを許可してください。
 それ以外の許可は与えないでくださいね。

SecurityAction.Deny (アクセス許可を拒否)
 このXXXXXXX処理は行ないません。
 もし、XXXXXXX処理が行われたら例外を発生させてください

というお願いをシステムにするわけだ。
システム側は、そのコードに付与されているアクセス許可を見て、動作不可ならば、例外を発生させる仕組みになっている。

ちなみに、XXXXXXX処理 には、FIleIO, EventLog,Print,SqlClient,UI...といったものが存在する。


じゃあ、Unrestricted=true ってなんだろう。
false にするとどうなるのかな。
  
Posted by gushwell at 22:07Comments(0)TrackBack(0)

2005年11月14日

共有フォルダ配下のフォルダが見えない

   このエントリーをはてなブックマークに追加 Clip to Evernote
会社で、新しいPCが配備されたので、環境の構築を行っている途中。
いやー、大変ですね。アプリケーションのインストールだけでも一苦労です。
で、この移行時に不思議な現象に遭遇。
古いPCから新しいPCにデータを移そうと古いPCのフォルダを共有フォルダにし、新PCからエクスプローラで、ドラッグ&ドロップでコピーしました。
(フォルダ構成も見直し以前とはフォルダ構成に変更していたので、フォルダを一つ一つ手作業でコピーしました)で、作業をしていると、いくつかのフォルダは、一瞬でコピーが終わってしまうのです。はじめは、「さすが、新しいPCは早いな」、なんて感心していたのですが、あまりにも早いので、なにかがおかしいことに気がつきました。
調べてみると、なんと、エクスプローラに表示されないフォルダがあるではありませんか。そのため、一部のフォルダの下にあるファイルがコピーされていなかったのでした。
エクスプローラで、その見えないフォルダのUNCを直接指定すると、フォルダにアクセスできるのに、上の階層のフォルダに戻ると、そのフォルダが見えません。
そんなのってあり?

結局原因がわからないので、新PCで操作し、旧PCのデータを持って来るのではなく、逆に、旧PCで操作をし、新PCの共有フォルダへコピーする、という方法でデータの移行を行いました。

なにか大きな見落としがあったんだろうか...  
Posted by gushwell at 22:38Comments(1)TrackBack(0)

2005年11月12日

MCP70-316合格

   このエントリーをはてなブックマークに追加 Clip to Evernote
MCP70-316「Developing and Implementing Windows-based Applications with Microsoft Visual C# .NET and Microsoft Visual Studio .NET」に無事合格しました。
この試験は、Windows Forms および Microsoft .NET Framework を使用して Windows ベースのアプリケーションを開発および実装する能力を評価するためのものです。
問題数は43問。試験時間の割には、問題が少なめかなと感じました。
出題の範囲は多岐にわたり、C#の文法さえ知っていれば解けるものから、クラスのメソッド、プロパティの意味を問うもの、ツールやIDEの利用方法、配置、運用まで様々な問題が出題されます。
.NETの幅広い知識が問われるため、合格するには、やはり試験勉強が必要かなと思いますね。
ただ、どんな試験でもそうですが、
「MCP70-316の試験に合格した = .NET での開発ができる」
という式は、成り立たないような気がします。
  
Posted by gushwell at 15:31Comments(0)TrackBack(0)