2008年5月23日金曜日

Emacsのインストール

Obtaining/Downloading GNU Emacsにアーカイブの取得方法が書いてあります。


Windows用のバイナリはFTPサーバのwindowsディレクトリにあります。

そのときの最新は、22.2でしたのでemacs-22.2-bin-i386.zipをダウンロードしました。
因みに、emacs-22.2-barebin-i386.zipは、LispコードとドキュメントがないバージョンだということがREADMEに書かれています。
(Windows版に関しては、GNU Emacs FAQ For MS Windowsを参照するようにも書かれています...まだ、読んでません(^_^; 個人的にはCombined on one pageのほうが見やすいと思います)

ダウンロードが完了すれば、あとはインストールと言っても、好きなフォルダに解凍するだけ。
「Program Files」など空白を含むフォルダだと無用なトラブルに巻き込まれないとも限らないので、僕は「C:\usr\emacs-22」に解凍して使ってます。

binフォルダ内のemacs.exeをダブルクリックで起動するのですが、ショートカットを作っておくといいでしょう。

余談ですが、僕はアンチ・マイクロソフトです! いや、本当に...

2008年5月22日木曜日

C#のインターフェース

さっき、他人のサンプル見てて、見つけたんですが、
C#で、


public interface IPlugin
{
void InitializePlugin();
}

のような、インターフェースを実装するクラスで、

public void InitializePlugin()

のように書くところを、

void IPlugin.InitializePlugin()

と書けるようです。

それなら、

void IPlugin.Initialize()

と書いて、名前の衝突を気にすることなく、短いメソッド名が使えるということですね!?

今さら気付いたか...ですか(^_^;

DataGridView::RowFilter特殊文字のエスケープ

DataColumn.Expression プロパティ (System.Data)に記されているのですが、分かりづらいのでまとめてみました。
(実際のコードでしまします)


class EscapePair
{
public EscapePair(char specialChar, string prefix, string surfix)
{
SpecialChar = specialChar;
Prefix = prefix;
Surfix = surfix;
}
public char SpecialChar;
public string Prefix;
public string Surfix;
}

// ~ ( ) # \ / = > < + - * % & | ^ ' " [ ]
private EscapePair[] EscapePairs = new EscapePair[]
{
new EscapePair('~', "[", "]"),
new EscapePair('(', "[", "]"),
new EscapePair(')', "[", "]"),
new EscapePair('#', "[", "]"),
new EscapePair('\\', "[", "]"),
new EscapePair('/', "[", "]"),
new EscapePair('=', "[", "]"),
new EscapePair('>', "[", "]"),
new EscapePair('<', "[", "]"),
new EscapePair('+', "[", "]"),
new EscapePair('-', "[", "]"),
new EscapePair('*', "[", "]"),
new EscapePair('%', "[", "]"),
new EscapePair('&', "[", "]"),
new EscapePair('|', "[", "]"),
new EscapePair('^', "[", "]"),
new EscapePair('\'', "[\'", "]"), // 注意:シングルクォーテーションは二つ並べる
new EscapePair('"', "[", "]"),
new EscapePair('[', "[", "]"),
new EscapePair(']', "[", "]"),
};

private string EscapeSpecialChar(string text)
{
StringBuilder src = new StringBuilder(text);
StringBuilder dst = new StringBuilder(text.Length * 2);

for (int i = 0; i < src.Length; i++)
{
bool escaped = false;

foreach (EscapePair ep in EscapePairs)
{
if (src[i] == ep.SpecialChar)
{
dst.Append(ep.Prefix);
dst.Append(src[i]);
dst.Append(ep.Surfix);
escaped = true;
break;
}
}

if (!escaped)
{
dst.Append(src[i]);
}
}

return dst.ToString();
}

HaloScan...

HaloScanをインストールしました。

Blogger(このブログ)にはトラックバックの機能がないのです(・oT)

さっき参考にさせてもらったピーコ@げてもの...ぢゃない...おすぎ@にせものさんのブログに愛のトラックバックを送りたかったのですが、そういえば、Wikipediaにそう書いてあったような(^_^;

という訳で、「blogger trackback」とググって、同じBloggerらしき@akaさん(カスタマイズばりばりでカッコいいんだから(*^o^*))の記事に辿り着きました!

@akaさんいわく、「打つのが面倒」だそうですが、何とか僕のラブコールはおすぎさんに届いたようで...あ、@にせものさんね(^_^;

承認していただけるかどうか...

C# .NET Bitmap シリアライズ

プラグインベースのシステムを作っていて、
あるプラグインから別のプラグインにビットマップオブジェクトを渡す必要ができました。

GUIは基本的にC#で組んでいるのですが、システム全体がC言語も含むので、
プラグイン同士のデータの受け渡しは、(もちろんカプセル化して)メモリブロックを使っています。

メモリレイアウトを規約で決めて、お互いがレイアウトを知っているという前提で読み書きしているのですが、やっぱり、予想通り、.NETのオブジェクトをそのまま渡したいケースが出てきてしまったという訳で、

「C# .NET Bitmap シリアライズ」でググってみたところ、

おすぎ@にせものさんのブログに「XMLシリアライズ時にビットマップも含める」という記事があり、参考にさせてもらいます。

なんだか、スマートな感じにbyte配列に変換しています。
無論、逆変換もできるのでしょう♪

真似して以下のようにしてみました。
Load and Save objects to XML using serializationを参考にされたということです...時間と気力があれば見てみたいとおもいます(^_^;)


public Bitmap Picture{ get { return _picture; } set { _picture = value; } }
private Bitmap _picture;

public byte[] PictureByteArray {
get {
if (Picture != null) {
TypeConverter BitmapConverter =
TypeDescriptor.GetConverter(Picture.GetType());

return (byte[])BitmapConverter.ConvertTo(Picture, typeof(byte[]));
} else {
return null;
}
}
set {
if (value != null) {
Picture = new Bitmap(new MemoryStream(value));
} else {
Picture = null;
}
}
}

2008年5月21日水曜日

OCamlしたいのに...Emacs!?

OCamlというのは今はやりの関数型言語(Objective Caml-Wikipediaをみてね)。

オキャムルと読むらしい。
ラクダの表紙の入門書があったりするのは、その発音がCamel(ラクダ)と同じだからとか違うとか...たしかにCamelのeはあいまい母音だから本当はキャメルじゃなくて、キャムルのほうが近いのかな?

それならば、僕はOCamlはオゥキャムルと発音したいと強く主張する!
主張はするけど、検索に引っ掛からなくなるので、ま、オキャムルということで(^_^;

ところで、今日から勉強開始なのに、今、Emacs Tutorial(Emacs入門ガイド)やってます(^_^;

前出のラクダ本『プログラミング in OCaml ~関数型プログラミングの基礎からGUI構築まで~』を著された五十嵐先生のウェブサイト「Objective Caml入門」を羅針盤に、いざ出航!

って、意気込んでたら、「Emacsエディタでのプログラム編集/実行のための設定を行う」と...