2008年12月26日金曜日

複数行コメントのユーザー定義

秀丸にこんな機能あったんですね。。
しかも6.0から追加されていたんですとー。
http://hide.maruo.co.jp/software/hidemaru6/new2_2.html

秀丸の強調表示では複数行(改行コードを含む)正規表現が
不安定だったので、探していて発見しました!
非常に便利です!

普通の強調表示同様正規表現も使えますし、
エスケープ文字を指定しておけばエスケープ文字の後の終了文字列をスキップさせることも出来ます。

コメントの定義というよりは、
複数行の強調表示という名前が僕はしっくりくるんですけどね^^;

もっと知らない機能を発掘していこっと。
.

2008年12月24日水曜日

C#文字列のバイト数

何度調べたことか。。。
覚書として残しておきます。

.NET2.0 では、Stringクラスに文字数を取得するLengthというPropertyしかないんよね。
バイト数が知りたいと思ってもメソッドがありません。
全角文字やと1文字が2バイトになり。
入力制限を設けるのに嵌りました。

@ITにそのままの記事があったのでリンクを載せておきます。
http://www.atmarkit.co.jp/fdotnet/dotnettips/012strcount/strcount.html
----抜粋------------
String str;
Encoding sjisEnc = Encoding.GetEncoding("Shift_JIS");
int num = sjisEnc.GetByteCount(str);
--------------------

Encoding のGetByteCountメソッドを使ってバイト数を求めます。
文字コードがUTF-8の場合などはGetEncodingの引数を変更すればOKです。

.

2008年12月16日火曜日

mixiアプリ

巡回サイトを見回っていたところ。
mixiアプリなる言葉を発見。

まだ法人向けにβ版を公開しただけみたいですが、
今後個人にも公開予定だそうです。

ん~楽しみ!
何か考えてみよっかな。作る作らないは別として。。。


詳しくはmixi EngineersBlogに記事があります。
http://alpha.mixi.co.jp/blog/?p=280

mixiアプリの例もmixi Developer Centerにありましたのでリンクっと。
http://developer.mixi.co.jp/appli/example

.

2008年12月15日月曜日

一年のふりかえり。

12月になると毎年行っている
自分の年間ふりかえり。

1月から12月の現在まで様々なあった出来事。
自分自身が去年と変わったこと。
将来像に向かって進んでいるか?
また足りていないのはどこか?
仕事のこと、プライベートのこと。
どんな人と知り合ったか。

僕は一月単位で振り返っています。
時間をたっぷり確保してじっくりふりかえっています。

しっかりふりかえったら、
来年の目標を立て他は忘れる!
そして良い年末年始を迎えましょう!

そろそろふりかえりを始めるかな。
.

2008年12月11日木曜日

.netframeworkのバージョン取得方法と豆知識

VisualStudioで使うframeworkですが
.netframeworkのバージョン取得方法は以下のとおり

System.Environment.Version.ToString ();

現在.netframework2.0に3.0を入れても大丈夫かを
調べ中。今頃な話ですが。。。
そこで見て驚いたのですが
.netframework3.0を上記方法で取得するとバージョンは
v.2.0.50727
って表示されるらしいですねw

3になれなかった.netframework

なんかの題名になりそうww

2008年12月5日金曜日

GoogleReaderデザイン変更

全体的に白くなってますねー。
雰囲気は好きですわ。

『Add a Subscription』のボタンの位置が上部に来ているのには
ちょっと探してしまいました^^;
使いやすくなっていればよいのですが。。。

.

2008年12月3日水曜日

Objective-Cお勉強中。

C/C++に似ていると言われながらも触ってみるとかなり違いましたよ。

まずは、

クラスの宣言
@interface MyObject : NSObject
@end

ん〜なんかしっくりこないね。
括弧で囲いたい。。

メンバ変数
@interface MyObject : NSObject
{
int a;
int b;
}
@end
ここに来て括弧が登場。


メンバ関数
@interface MyObject : NSObject
{
int a;
int b;
}
- (int) method:(int)arg;
@end

戻り値、引数の型を括弧で囲むってのが不思議〜。
関数宣言のマイナスってprivateみたいな意味に見えてしまうが、
関数はすべてpublicです。

privateな関数はクラス宣言に記述しないで、
実装のみなんやってー。
クラス宣言がスッキリしてよいかも!
C++もそうしたらええのにと思ったわ。

.

2008年11月21日金曜日

Gmailにテーマが出来たー。

今朝メールをチェックしようとしたら。。
デザイン変わってるやん!

上部に『テーマが出来ました。設定のタブで変更できますよ。』
というような内容の英文が表示されていました。

もしかしたら日本語版はまだかもしれません。。。

とりあえず緑っぽい色に変更!

.

2008年9月3日水曜日

Google Chrome

ついにGoogleからブラウザがでましたねー。

早速インストールしてみたので感想をっと。

レンダリングエンジンにはsafariと同じ appleWebkitが使われてるため
表示はsafari同様速いです!
javascript も高速化しているとのことなんで全体的に早く感じます。


個人的にはタブのドラッグ&ドロップ中の表示が気に入ってます!
新しいウィンドウにする時に画面のサムネイルが表示されて移動します。

これからのブラウザだと思うので気長に見守っていこうと思います。
拡張機能はユーザーからも作れるようになるというのをどこかで聞いたので、
今後に期待ですね!

プロキシの設定はIE同様のインターネットオプションだったので…
早くプロキシ切り替えの拡張機能が欲しいところです

.

2008年8月11日月曜日

インディアン襲来

Windowsではリトルエンディアン。
これで長い時間悩まされたので…

int型をchar型の配列にキャストして演算しているソースがあり

めっちゃ混乱させられました。
以下のソースを実行させてみてください。
結果がわかると思います。
--------------------------
#include

void print(int d, void* bcd){

char* p = (char*)bcd;
int i = 0;
int n = d>>1;
for(i = 0; i< n; ++i) {
printf("%x,",p[i]);
}
}

int main(void) {
int work = 0x12345678;
print(8,&work);
return 1;
}
--------------------------

Windows環境やと。
78,56,34,12
って表示されます。

引数で渡している型と関数内でキャストしている型が違うってどないやねん!
こんな難しいソース書くなといいたいですね…

.

2008年7月18日金曜日

日曜プログラミング開始!

久々に日曜プログラミングし始めたので残していこうかなと。

Windowsアプリケーション。
開発環境はC#2008Express .NET2.0
DBはSQLLiteなるものを使ってみようかと。
設計にはJUDE/Community
メモやアイデアまとめにはGoogleWiki

さーこの元気がいつまで続くやら。

2008年7月16日水曜日

Internet Explorer 8 Beta 1 for Developers ホワイトペーパー

Internet Explorer 8 Beta 1 for Developers ホワイトペーパー(日本語)
が公開されました。

どういうモノになるのか楽しみです!

Internet Explorer 8 Beta 1(英語)はダウンロード可能なので、
興味ある人は試してみてはどうでしょうか?

--
Internet Explorer 8 Beta 1 for Developers ホワイトペーパー
http://msdn.microsoft.com/ja-jp/ie/cc216837.aspx

2008年7月15日火曜日

バッチファイル作成のまとめ

cd・・・カレントディレクトリの移動

基本、事項するファイルがあるディレクトリに移動しておかないと
何もできない。もちろん、絶対パス使えればそれでいいんですけどね。

echo ~
文字を表示する。

if a==1 (echo true) else (echo false)
if文ってあったんだねぇ~w

goto ~
:ラベル
ラベルの記述へ飛ぶ

こんなもんでしょうか・・・・
まだまだありますけど。今回使ったのはこんなもんだけ

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


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

.

2008年2月29日金曜日

フォーム遷移について

VBにてフォームを遷移(画面遷移)する上で次のような処理をすると
他の画面がバックに強制的に表示される場合がある
frm0から処理で
frm1.show()
frm1.visible = false
frm2.show()
とする方法を行うとfrm0が表示されずに
ほかの画面がバックに表示されることがある

次の方法を行うと解消された
frm0から処理で
frm1.show()
frm1.TopLevel = false
frm2.show()

画面遷移は本来こっちで行うほうが正しい?

2008年2月14日木曜日

VBの文字列

VBでマクロを書いていた時のこと
文字列の二重引用符で嵌りました…

VBで文字列を扱う場合二重引用符(")で囲みます
例:"文字列"

じゃー二重引用符はどうやって文字列で表現するのー!

C言語とかと一緒で (\")こんなんでいけるかな~と
まったくだめ…そのまま (\)が文字列として扱われやがった

こういうときはマイクロソフトさんで検索っと
ありましたありました。
「Visual Basic における文字列の基本」
http://msdn2.microsoft.com/ja-jp/library/ms234766(VS.80).aspx

二重引用符を続けて2回書けばよいんだそうで…(csvの仕様とそっくりやわ)
""""と書くと⇒ " として扱われる。

1つ勉強になりました。

.

2008年2月6日水曜日

Outlookで受信しか出来ない

Outlook2007を使っている知り合いに頼まれて調べてた。
OSはVistaです。

現象としてはメールの受信しか出来ない。
送信が出来ず、メールの削除も…てことらしい。

以下のようなメッセージボックスが操作するたびにでてくるねん。
「C: Users¥ユーザー名¥AppData¥Local¥Microsoft¥Outlook¥outlook.pstでエラーが検出されました。
outlookとすべてのメール処理機能を備えたアプリケーションを閉じてください。
そして、受信トレイ修復ツール(Scanpst.exe)を使用してファイルを診断し、
ファイル内のエラーを修復します。詳細については、受信トレイ修復ツールのヘルプを参照してください。」

受信トレイがぶっ壊れてます修復してくださいと。。。
とりあえずヘルプ開いて Scanpst.exe で検索。
修復ツール関連のヘルプが出てきました。

修復ツールは既定では以下のフォルダにインストールされているとのこと。
C:\Program Files\Microsoft Office\Office12\Scanpst.exe

Outlookをいったん閉じ
Scanpst.exe を実行して、後はメッセージボックスに表示されてた
C: Users¥ユーザー名¥AppData¥Local¥Microsoft¥Outlook¥outlook.pst
を選択して開始ボタンをクリックすればOK

勝手に調べてくれて別ウィンドウで修復しますかって聞かれるからそのまま修復してもらう

Outlookを起動し直せば完了っと

とりあえず動いてるっぽ。

ネットで調べたら、結構同様の現象が起こっている人が多いみたい。
Outlookが起動しないとか、同じように修復すれば動作するみたいですわ。

とりあえず以下参考サイト
http://support.microsoft.com/kb/881358/ja

http://office.microsoft.com/ja-jp/help/HA100758311041.aspx


個人的に Outlook 好きじゃないので
秀丸メール使ってます。エディタと一緒に使えるから使ってますw

MozillaのThunderbirdも好きやな~。
タグでメールを管理できるのが使いやすい
http://www.mozilla-japan.org/products/thunderbird/


フリーのメーラーも結構あるので試してみてもええかと

.

初期化の大切さ改めて実感

初期化していないがためのバグ
コンパイル時の最適化と合わさって
検出にえらい時間がかかってしまった…

問題になったコードの要点だけ抜き出してみた。
C++/CLIでは変数宣言すると勝手に初期化してくれるという
前提やのに。。。動いてなかってん。
------------------------
int i = 0;
for(i = 0; i < 20; ++i) {
int b; // ゼロで自動的に初期化されてるねん♪
b++;
printf("%d\n", b);// 必ず1が出力されることを期待
}
------------------------

ループの中で変数を宣言すると、毎回メモリ確保やん。
効率悪いってのでコンパイラが自動的にループの外で宣言してくれるねん。

↓コンパイル後はこのような意味のコードになってる
------------------------
int i = 0;
int b; // ゼロで自動的に初期化されてるねん♪
for(i = 0; i < 20; ++i) {
b++;
printf("%d\n", b);// 必ず1が出力されることを期待
}
------------------------
そりゃ期待する結果が得られるわけ無いやん…。


変数宣言時に初期化するように修正したコード
------------------------
int i = 0;
for(i = 0; i < 20; ++i) {
int b = 0; // 明示的にゼロで初期化してやった!
b++;
printf("%d\n", b);// 必ず1が出力されることを期待
}
------------------------

コンパイルするとこのような意味のコードになってる
------------------------
int i = 0;
int b; // ゼロで自動的に初期化されてるねん♪
for(i = 0; i < 20; ++i) {
b = 0; // ここが違う!
b++;
printf("%d\n", b);// 必ず1が出力されることを期待
}
------------------------
これで修正完了っと。
他にもコンパイル時の最適化はいろいろあるので覚えておいて損は無いかも。
WikiPedia「コンパイラ最適化」


教訓:
初期化し忘れで出たバグは非常に見つけ難い…(^^;
変数宣言時は初期化する癖をつけよう!

.

2008年1月22日火曜日

VBより呼び出したExcelが終了しない

VBより呼び出したExcelを終了させてもタスクに残る場合があります。
その場合は次のようなことをしたら幸せになれるかも

Dim App As Object

App = CreateObject("Excel.Application")

App.quit() 'エクセルの終了
App = nothing 'オブジェクトの開放
System.GC.Collect() ’ガベレージコレクションを強制的に行う

2008年1月17日木曜日

IMEモードの設定方法

ControlクラスのImeModeのプロパティで設定できます。
数値入力だけして欲しいときやカナ入力のみの場合などで使えます。

TextBox textBox1 = new TextBox;
textBox1.ImeMode = System.Windows.Forms.ImeMode.On;


おまけ
・IMEとはWindowsの日本語入力補助システムのこと。

・IMEと同義で使われていたFEPってのも調べてみた。
> 古くからのパソコンユーザーの一部は昔の名残で今でもFEPと呼ぶ者がいるが、これは誤用である。
という事がWikiPediaのFEPのページに書いてありました。

.

2008年1月16日水曜日

ガベージコレクション(GC)

ガベージコレクションについてのサイトを見つけたのでメモメモ。

GCアルゴリズム詳細解説
いくつかのアルゴリズムがわかりやすくかいてあります。

上記サイトを見た後で前に読んだ
.NETのガベージコレクションについての記事を読み直しました。
http://www.microsoft.com/japan/msdn/net/mag00/GCI.aspx
かなり詳しく書いてありますので一度読んでみてはどうでしょうか?

僕の頭のなかでのまとめ。
ガベージコレクションはあくまでも new したオブジェクトを解放してくれるもので
ファイルリソースやネットワーク接続リソースについては
明示的に解放する処理を記述する必要があります。


メモリ管理は非常に大切ですね。
.

DataGridViewのセルに複数行表示させる

プロパティより設定可能
コードはこんな感じ
dataGridView1.Columns[0].DefaultCellStyle.WrapMode = DataGridViewTriState.True

あとは表示データに改行を入れてやればおk

2008年1月8日火曜日

クリスタルレポートに表示する値を渡す

クリスタルレポートに固定の表示する値をVBから渡す方法。

まず、レポートにパラメータフィールドを追加。
適当な名前をつける。今回はTEXTとつける。
次にVBのコード側に次の式を記入

CrystalReport.SetParameterValue("TEXT", "適当")

これで、レポート側に適当と表示される。

なお、これはdatasetからデータをセットした後に記入すること
データセット前に行うと表示されない。
初期化されてるのかな・・・

クリレポの行数指定改ページ

クリスタルレポートの行数を指定して改ページする方法。

ページヘッダに「式フィールド」を追加して次の式を記入
WhilePrintingRecords;
numberVar line := 0;

次に詳細(行数を指定するセクション)に式フィールドを追加して次の式を記入
WhilePrintingRecords;
numberVar line;
line := line + 1;

最後に詳細のセクションエキスパートにある「出力後改ページ」にチェックして、式を追加
WhilePrintingRecords;
numberVar line;
line = (出力したい行数を記入)

最初がページ毎に行数を初期化
二つ目はラインが1つ増えるごとに1足す処理
最後がラインが特定になったときに改ページする条件
のはず

ラベル