2008年7月13日日曜日

Protocol Buffers

GoogleがProtocol Buffersなるものをオープンソース化した

僕が感じたイメージは
データを管理するクラスの定義を言語依存せずに記述できるもの。
XMLのスキーマを定義するものに近いと思います。

データクラスの定義。
各メンバの型、変数の定義が可能
C言語でいう enum も定義可能
また、可変長の配列の定義も出来るのが面白いなと思った。

外部に定義したクラスの読み込み(import)も可能
一通り網羅出来ていそうですね。

XMLのスキーマ覚えるよりは簡単そうやし、
時間みつけてちょっと遊んでみようかな

--
■Protocol Buffers, our serialized structured data, released as Open Source
http://google-code-updates.blogspot.com/2008/07/protocol-buffers-our-serialized.html

■Language Guide
http://code.google.com/apis/protocolbuffers/docs/proto.html

2008年5月8日木曜日

正規表現その1

少し調べたので簡単な基本文法から。

文字列のパターンマッチングに使用する。
決まったパターンの文字列を検索する場合など。

文字列をそのまま記述すると部分一致となる。
 a ⇒ a がマッチする

[]:[]内に記述した1文字と一致する。
 [abc] ⇒ a か b か c がマッチする。
 良く使うのは
  [a-z]半角英の小文字
  [A-Z]半角英の大文字
  [0-9]半角数字
  [a-zA-Z0-9]半角英数字

*:直前の1文字を0個以上繰り返す
 a*b ⇒ b, ab , aab , aaab, aaaab , aaaaab などがマッチする
[0-9]*b ⇒ b, 0b, 99b, 123b, 009b, 033302b などがマッチする

+:直前の1文字を1個以上繰り返す
 a+b ⇒ ab , aab , aaab, aaaab , aaaaab などがマッチする
    (1以上繰り返しのため b はマッチしない)
[0-9]+b ⇒ 0b, 99b, 123b, 009b, 033302b などがマッチする
    (1以上繰り返しのため b はマッチしない)

?:直前の1文字を1個または0個
 a?b ⇒ b, ab がマッチする
[0-9]?b ⇒ b, 0b, 9b, 3b, 5b などがマッチする

^:直後の1文字が行の最初の文字にマッチする。
$:直前の1文字が行の最後の文字にマッチする。


1以上の数値にマッチさせる正規表現(先頭ゼロ埋めを許さない)
[1-9][0-9]*

1 // マッチ
11 // マッチ
900 // マッチ
009 // マッチしない

.

2008年4月27日日曜日

BSTR型⇒_bstr_t型へ型変換

前回BSTR型を調べてリンク集がありますので前提知識としてどぞ
知識のゴミ箱:BSTR型[http://mzs184.blogspot.com/2008/03/bstr.html]

BSTR型を_bstr_t型へ型変換について。
_bstr_tはBSTRのスマートポインタですね。
BSTRはそのまま使うとメモリリークが怖いので一度_bstr_tに型変換して使った方が良いですね。

// OK
{
BSTR testBSTR;
// BSTR型のメモリ確保と解放
testBSTR = ::SysAllocString(L"testBstr");
::SysFreeString(testBSTR);
}

// OK
{
BSTR testBSTR;
testBSTR = ::SysAllocString(L"testBstr");

// 第二引数がfalseなのでtestBSTRをコピーせずに_bstr_t内部で保持
_bstr_t testBstrT(testBSTR, false);

// スコープ抜ける際に_bstr_tのデストラクタでtestBSTRを解放
}

// OK
{
BSTR testBSTR;
testBSTR = ::SysAllocString(L"testBstr");

// 第二引数がtrueなのでtestBSTRをコピーして_bstr_t内部で保持
_bstr_t testBstrT(testBSTR, true);

// testBSTRを解放
::SysFreeString(testBSTR);

// スコープ抜ける際に_bstr_tのデストラクタでコピーしたtestBSTRを解放
}

// NG
{
BSTR testBSTR;
testBSTR = ::SysAllocString(L"testBstr");

// testBSTRをコピーして_bstr_t内部で保持
_bstr_t testBstrT(testBSTR); // コンストラクタで引数をコピーして保持する

// スコープ抜ける際に_bstr_tのデストラクタでコピーしたtestBSTRを解放
// ※testBSTR自身が解放されない。
}

.

2008年3月21日金曜日

BSTR型

COMをはじめました。
扱いに気をつけないといけない型にBSTR型というものが。。

BSTRがさすアドレスは文字列の先頭を指しているんですが、
BSTRがさすアドレスの前4バイトに文字列の長さが格納されているとのこと。
メモリの確保とか解放も専用の関数を使わないといけないし

メモリの解放のタイミングがまだよく掴めていない。。。
扱いが非常に難しい、きっちり意識して解放していかないと簡単に
メモリリークが起きるとのこと。

BSTR型は _bstr_tに変換して扱った方がよさそう。
変換方法は以下 (間違ったこと書いてないか不安。。。)
----------
void func(BSTR bstr){ // 引数のBSTRは関数処理後にメモリ領域は解放される
_bstr_t str1;
str1 = bstr; // この方法だと内部でメモリを確保(SysAllocString)してコピーして

BSTR bstr2; // ローカル変数を宣言して値を入れた場合は解放する必要あり
_bstr_t str2;
str2 = bstr2; // この方法だと内部でメモリを確保(SysAllocString)してコピーしている
::SysFreeString(bstr2); //ローカル変数の解放
}
---------

以下調べた結果のURLを纏めておきます。

COM のデータ型
http://msdn2.microsoft.com/ja-jp/library/sak564ww(VS.80).aspx

BSTR型の仕様
http://msdn2.microsoft.com/ja-jp/library/ms221069(en-us,VS.80).aspx

BSTR 用のメモリの割り当てと解放
http://msdn2.microsoft.com/ja-jp/library/xda6xzx7(VS.80).aspx

BSTRリークの可能性
http://hp.vector.co.jp/authors/VA014436/prg_memo/windows/COM/002.html

.

2008年3月20日木曜日

HTMLソースを表示する

HTMLのソースコードを表示するには<>をコードで書けばいいので

< 、>をそれぞれ&lt; 、&gt;に変更することで表示できる

このほかにも< pre >があるようです。

上記のような特殊文字はほかにもあります
"   &quot;
&  &amp;
<  &lt;
>  &gt;
などなど

JavaScriptで画面遷移

JavaScriptで値を渡して画面を遷移する方法

<FORM id='frm' name='frm1' METHOD='POST' >
<INPUT TYPE='hidden' NAME = '1' VALUE = ''a">
</FORM>
<SCRIPT LANGUAGE="JavaScript">
document.frm1.action = 'frm.htm';
document.frm1.submit();
</SCRIPT>


・Formを指定して値を決定する
・actionで遷移先を指定
・submit()で実行

だとおもう・・・JavaScriptはじめたばかりなので微妙そう

2008年3月4日火曜日

OS再インストール時に残したデータ。

次回する時のためにメモっておこうっと。

■メールのデータ
 まず思いついたのがこれやったな
 これは必須やわ。

■ブラウザのお気に入り
 ソーシャルブックマークサイト使っているけど、
 やっぱりブラウザのお気に入りは残しとかないとね。

■秀丸エディタの設定とマクロ
 ソースコードを見るための強調やショートカットキーの設定など。
 設定し直すのめちゃ大変やし作業効率が全然ちゃう
 作ったマクロも忘れずにっと。

■自作ツールのソースコード
 これ忘れかけたし。。
 ローカルにしか無かったのも問題かも?
 メンテナンスできなくなるので必須やね。

■フリーツールのインストーラー
 取得し直してもええんやけど。
 検索するの面倒なんでw


こんだけやった。
多いのか少ないのか。。。

.

ラベル