2008年6月12日
#
1年以上お休みしてましたが、そろそろ再開しますね!
6/28 大阪には参加で!
あれれ、、、登録できないですぅ~
2007年2月20日
#
先週から、ファイル検索ツールを作っているんだけど。
ファイル名をワイルドカード検索対応しよう!っと思ったので
ワイルドカードぽい動きを正規表現(System.Text.RegularExpressions.Regex)で実装(C#)。
実装したワイルドカードは、
[*]:0文字以上の文字列
[?]:1文字の文字列
ってのが仕様です。
ある程度出来たので、Windowsのエクスプローラの検索コンパニオンと比較テスト
(検索コンパニオンの犬は、ローバー犬のロッキー君らしいです)
そこで、わかった事が!
ロッキー君は、検索キーワードに半角スペースを入れると、想定外の結果を返す。
(私の思い込みの想定外ですが)
***********以下 ロッキー君でのファイル検索テスト結果************
<検索対象フォルダに格納されているファイル一覧>
データダウンロード.xls
データダウン[半角スペース]ロード.xls
データダウン[半角スペース][半角スペース]ロード.xls
データダウン[全角スペース]ロード.xls
データダウン@ロード.xls
データダウン@@ロード.xls
データダウン@ロード.xls
関係ない.xls
【検証1】
検索文字:
ダウンロード
ヒットファイル:
ダウンロード.xls
【検証2】
検索文字:
ダウン[半角スペース]ロード
ヒットファイル:
データダウンロード.xls
データダウン[半角スペース]ロード.xls
データダウン[半角スペース][半角スペース]ロード.xls
データダウン[全角スペース]ロード.xls
データダウン@ロード.xls
データダウン@@ロード.xls
データダウン@ロード.xls
【検証2】
検索文字:
ダウン[半角スペース][半角スペース]ロード
ヒットファイル:
データダウンロード.xls
データダウン[半角スペース]ロード.xls
データダウン[半角スペース][半角スペース]ロード.xls
データダウン[全角スペース]ロード.xls
データダウン@ロード.xls
データダウン@@ロード.xls
データダウン@ロード.xls
【検証3】
検索文字:
ダウン[全角スペース]ロード
ヒットファイル:
データダウン[全角スペース]ロード.xls
【検証4】
検索文字:
ダウン[半角スペース]@[半角スペース]ロード
ヒットファイル:
データダウン@ロード.xls
データダウン@@ロード.xls
【検証5】
検索文字:
ダウン[半角スペース]@@[半角スペース]ロード
ヒットファイル:
データダウン@@ロード.xls
【検証6】
検索文字:
ダウン*ロード
ヒットファイル:
なし
【検証7】
検索文字:
*ダウン*ロード*
ヒットファイル:
データダウンロード.xls
データダウン[半角スペース]ロード.xls
データダウン[半角スペース][半角スペース]ロード.xls
データダウン[全角スペース]ロード.xls
データダウン@ロード.xls
データダウン@@ロード.xls
データダウン@ロード.xls
【検証8】
検索文字:
*ダウン[半角スペース]ロード*
ヒットファイル:
なし
【検証9】
検索文字:
???ダウン?ロード????
ヒットファイル:
データダウン[半角スペース]ロード.xls
データダウン[全角スペース]ロード.xls
データダウン@ロード.xls
データダウン@ロード.xls
【検証10】
検索文字:
???ダウン[半角スペース]ロード????
ヒットファイル:
なし
【検証11】
検索文字:
[半角スペース]
ヒットファイル:
データダウンロード.xls
データダウン[半角スペース]ロード.xls
データダウン[半角スペース][半角スペース]ロード.xls
データダウン[全角スペース]ロード.xls
データダウン@ロード.xls
データダウン@@ロード.xls
データダウン@ロード.xls
関係ない.xls
【以下推測】
どうやら、*、?の一般的なワイルドカードを使わない検索の場合に使う半角スペースは、
*と同様に、0文字以上の文字列に相当する。
ただし、キーワードに *、? があると。。。その機能は変わる。
【検証8】で、
データダウン[半角スペース]ロード.xls
が、ヒットしないのは謎
どのようになるかは、不明
(誰か知ってる人は教えてください。)
全角スペースは、文字として認識されワイルドカードのような機能は無いようだ。
まあ、そんな感じなので、俺俺ワイルドカードメソッドは、
*と?のみの対応にしよう。。。
検証環境 WinXp Pro Sp2
2007年2月15日
#
今日は、直接仕事とは関係なかったが、
非同期処理(delegateデリゲート)を使って処理をキャンセル出来る実装を試してみた。
今までは、局所的に非同期呼び出しを行った事はあったけど、キャンセル出来るようにしたのは、初めてだ。
非同期で処理する、重たい可能性のあるメソッドの内容は、
指定したパス(サブフォルダ)に含まれるSystem.IO.FileInfoをリスト化するっていう仕様
うむ、出来た!
とりあえず動いた!
まだ、フラグ判定とか、甘いかもだけど、とりあえず動いた!
もうちょっと、テストして、これで良いんでないの?
って段階になったらBlogにするので、突っ込みお願いします。
いや、ほんと簡単に出来るもんだYo!
こういうのって、案件によっては使わない技術だよな。
逆に言うと、案件によっては必須の技術でもある。
この前の勉強会のパネルディスカッションで話にでてた、
2:8の法則の2には、入らないような気がするな。
とりあえず、これで一歩実力が3に近づいたなw
2007年2月13日
#
昨日、うちのおかん(還暦越え)の家にインターネットの設定に行って来た。
無知なおかんにネットを提供するのは、いささか怖い感じもするのだが。。。
もう、60超えて、そんなにアクティブに動けないので、
想像以上にネットしたいと意欲的なので、しょうがなく色々と面倒見てあげて昨日モデムが着たので、設定に行きました。
モデムを設置して有線LANでネット接続確認。
「やっぱり、わたしも無線が良い」
というので、近所のコジマ⇒ミドリ⇒コジマとまわり、一番格安な無線LANルータを買ってきて設置。
3時間ほどで、ローカルPCの環境等全てできました。
その中で、気になったのは、
モデムやルータのデフォルトセキュリティ
モデムへのログインは、ADMIN,ADMIN
ルータのほうは、root,パス無し。。。
モデムの方は、有線だし、たぶんWAN側からはログイン出来ないんだろう(試してないけど)から、まあしょうがないとしても
無線のルータのデフォルトが、それじゃあまずくない?
おまけに、無線にセキュリティをかけたけど、取扱説明書の記述が。。。
用件定義書レベルで、詳細設計書は、どこですか?ってぐらいだし。
こんなんじゃ、設定したことの無い、一般の方じゃきっと無理だろうなんて思いながら。。。
なんとか、
SSIDの隠蔽
MACアドレスでのフィルタリング
WEP(WAPじゃないのは手抜き)の設定
程度だけしておきました。
ちなみに、おかんの家の周りには、セキュリティのかかってない(かけてない?)YBBの無線が、3つほど見えてたのも。。。
2007年1月16日
#
おめでとうございます。
今年から、新しい業務について、ますます微妙な感じですが、心機一転、初心に戻って。。。
がんばってみましょう。
new System.Random()を使用して、ランダムな文字列を2回連続して生成してると、2回とも同じ値になってハマッテしまったので、メモ
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/cpref/html/frlrfsystemrandomclassctortopic2.asp
どうやらMyPcは、上記リンク先の解説に記述される、高速なコンピュータに該当するらしく、同じ乱数が取れるようです。
MSDNのサンプルだと、2回は行けるけど、3回.....と違う乱数を発生させれる方法は?
んと、ちと考えよ
2006年12月7日
#
.NET Framework アプリケーションでは、system32やパスを通したフォルダにDLLを集めても駄目なのね。
知らなかったっす。。。
<codeBase>や<probing>は、知ってたし使ってた事あったんだけどね。
だけど、今回のは。。。参照する側のexeも多いし、参照される側のdllも多いし。。。(謎w)
かといって、○○○個もGACに入れる事も(汗
まあ、フラットで配置するしかないのかなー
明日、もうちょっと勉強がてら調べてみようと
(とりあえず開始URL)
ランタイムがアセンブリを検索する方法
http://msdn2.microsoft.com/ja-jp/library/yx7xezcf(VS.80).aspx
コードベースまたはプローブによるアセンブリの検索
http://msdn2.microsoft.com/ja-jp/library/15hyw9x3(VS.80).aspx
@it 第3回 アセンブリのロード
http://www.atmarkit.co.jp/fdotnet/technology/idnfw11_03/idnfw11_03_01.html
かなり話題には、乗り遅れた感は、あるがやっとJoel On Softwareを先週買って今日読み終えた。
オリジナルを日本語に翻訳したサイトは、何度か見たことあったんだけど。
購入の、きっかけは、Kazzzさんの
http://d.hatena.ne.jp/Kazzz/20061121/p2
を見て、その日に紀伊国屋に買いに行きました。
以下、感想
Joelは、実利的な考え方を大事にし、非常にバランスの取れた考えの出来る、人だなってのが全体的な感想。
色々、共感できる事があったが、
特に、
「日常使うことの90%は、1週間で学習できるが、残りの10%を学習するのには、2,3年かかるかもしれない」
フムフム。。。
そうなんだよね~
残りの10%が時間かかるんだよね~
ほんと、本質まで理解してる人には、頭がさがる。
どちらかと言うと90%までは、得意なんだけど。。。
残り10%は苦手。。。
いや、それが難しいだよな~
でも、まあほんと、いい本でした。
色々と下がりがちな、モチベーションを回復させてくれました。
とりあえず、営業に回してよんで貰おうっと。
そろそろ、来年に向けて、考えていかないとな~
2006年11月17日
#
たまに、必要になると忘れてるのでメモメモ
ORACLE内の任意テーブルのカラムに、設定してるコメントをカラム順に取得
↓↓↓↓↓こうやって作ったコメントね↓↓↓↓↓
COMMENT ON TABLE HOGE.テーブル名 IS 'カラム名とかね'
SELECT USER_COL_COMMENTS.COMMENTS
FROM USER_TAB_COLUMNS
JOIN
USER_COL_COMMENTS
ON USER_TAB_COLUMNS.TABLE_NAME = USER_COL_COMMENTS.TABLE_NAME
AND USER_TAB_COLUMNS.COLUMN_NAME = USER_COL_COMMENTS.COLUMN_NAME
WHERE USER_TAB_COLUMNS.TABLE_NAME = 'テーブル名'
ORDER BY COLUMN_ID
2006年9月16日
#
あいかわらず、
昼はVS2005(C#)でWinApplication
夜は、エディタでレガシーASPを開発中。。。
もう、疲れてくると構文がごっちゃ混ぜで、ビルドエラーの発生。。。
最近、書こうかと思ってかけてないネタを忘れそうなので、後の為に備忘録としてこ
こに。。。
・Visual Studio 2005 で、レガシーASP(.Netではない)をデバック&修正
こちょこちょと、設定を変えてやると出来た。
それにしても、VBScript&JavaScriptは疲れる。
・NetUserEnum(API)をラップして使ってみた。
ただ、やりたかっただけ。忙しさのあまりやけになって
・リフレクション初体験
少しつまったけど、出来た。
分かってはいたが、こんな事できるんやと、ちょっと感動
ちょうど文字列から、オブジェクト生成しないといけない作業が発生したため。
以上詳しくは、忙しい&家に愛用のNotePcが無いので書けませぬ。
2006年9月1日
#
<概要>
DataGridViewのあるカラムに、カンマ付き数値を表示。
編集のタイミングでカンマを取って編集したい。
<例>
private void dgvList_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
if (e.ColumnIndex == 8)
{
//編集中じゃなきゃ、カンマ付きにフォーマット
if (dgvList[e.ColumnIndex, e.RowIndex].IsInEditMode == false)
{
//e.Valueのチェックとかいるかもね
e.Value = e.Value.ToString("###,##0");
}
else
{
}
}
}
private void dgvList_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
{
if (e.ColumnIndex == 8)
{
//フォーマットの仕方は、ご自由に
dgvList[e.ColumnIndex, e.RowIndex].Value = dgvList[e.ColumnIndex, e.RowIndex].Value.ToString().Replace(",", string.Empty);
}
}
<例 補足>
e.ColumnIndex == 8の列には、数値系型のデータがバインドされてる。
実装時には、DataGridViewTextBoxColumn等のカラムオブジェクト.Indexがスマートかな?
<ポイント>
・CellFormattingイベント内で、IsInEditModeによって、編集中かどうかを判断。(カンマをつける)
・CellBeginEditで、イベント内で編集用フォーマットに切り替える。(カンマを取る)
・CellBeginEditでカンマ取っても、Valueにセットする行為で、CellFormattingイベントが発生するのでIsInEditModeでの判断を入れないと無駄(取った瞬間、カンマ付きになるので永遠にカンマ付き)
<まとめ>
表示フォーマットと編集フォーマットが違う場合には、上記でいけそうだ。
注意するのは、「単純に表示時にカンマつけてよ!」って仕様書に書いてる時は、CellFormattingでしちゃだめです。
理由は、重いから。昨日のエントリ見て下さい。
http://blogs.wankuma.com/koutarou/archive/2006/08/31/37323.aspx#37324
<今日の感想>
DataGridViewは、イベント多すぎで手ごわいな。。。
ヘルプとかだけじゃ掴みきれないし、Google様もあまり教えてくれない。