[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 05/09 10:30 / Filesize : 218 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C#, C♯, C#相談室 Part54



1 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 12:32:03 ]
(#゚ー゚)つ < C#、.NETの話題はこちらでどうぞ。

前スレ
C#, C♯, C#相談室 Part53
pc12.2ch.net/test/read.cgi/tech/1245150671/

Visual C# 2008 Express Edition 日本語版
www.microsoft.com/japan/msdn/vstudio/express/vcsharp/

その他テンプレ>>2-5くらい

901 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 13:23:36 ]
デシリアライズに型はいらん
デシリアライズした時点で実際の型は決まってる
少なくともRefMyClassの派生クラスであることが分かっているんだったらRefMyClassにキャストすれば十分

902 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 13:25:15 ]
>>901
それを親で子の型判定をすると>>871のようにどうしようもないコードになるわけなんですね…


903 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 13:28:25 ]
デシリアライズしたものはobjectのままあつかったらいいんでないかい。
キャストも要らんし。

904 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 13:28:55 ]
だからね、キャストするのはその型でその場で何かするためなのさ。
その型で何かする必要ないならキャストなんて必要ない。


905 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 13:31:01 ]
暗黙のアップキャストは低速。
明示的なダウンキャストは高速。

なんとも直感的でない動作。


906 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 13:34:24 ]
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

2ちゃんねるの有志の皆様へ

ただいまVIPで例のサイバーテロ集団の本拠地VANKに攻撃をしかける作戦を立てています

ただいま人数不足、不利な戦況となっております。

また、技術者部門の方も募集していますので、是非よろしくお願いします。

下記日時に間に合うように準備し、作戦に参加してくれたら幸いです

作戦決行日時:10月12日 18時00分

現行スレ→【yutori7.2ch.net/test/read.cgi/news4vip/1255316576/
まとめwiki(要編集)www20.atwiki.jp/vipvsvank/pages/1.html

■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■


907 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 13:36:01 ]
ダウンキャストが高速なのは型に互換があることが自明だからで、
コンパイル時に互換性の確認は済んでるから実際には何もしない。
アップキャストの場合は互換性の確認が実行時に行われる。

908 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 13:37:29 ]
何を言ってるの?
どう考えても逆だろ。

909 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 13:37:52 ]
その理屈なら逆だろ
ボックス化が絡む場合にダウンキャストの方が速いのは,アップキャストはヒープ確保が入るから



910 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 13:42:12 ]
ボックス化と関係ない参照型でもアップキャストの方が遅いってのがちょっと不思議な動作なわけ。


911 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 13:45:16 ]
>>907だがすまん、アップダウン逆にしてた。
アップキャストが派生クラスから基底クラスだね。



912 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 13:47:46 ]
多分.NETではベリファイアでの検証が絶対ではないために、
どっちにしても実行時にチェックが必要だからだろう。

実体の型そのものとのチェックは比較一発だが、基底クラスだと順に遡ったり、
インターフェイスだとインターフェイスマップとの照合が必要だから。


913 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 13:49:38 ]
ソースにパスワード認証を組み込む場合
if (textbox1.text == "passwd")
messagebox.show("ok");
else
application.exit

とかだと慣れてる人だとパスワード分かっちゃうのかな?

914 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 13:51:40 ]
試しに自分で書いてReflectorでも使ってみればいいじゃない

915 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 13:51:47 ]
測ってみたけど参照型間はアップキャストの方がちょっと速かった

916 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 13:52:29 ]
ソースに組み込んだりしないんだよ普通は。


917 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 13:54:45 ]
class Foo {}
class Bar : Foo {}

Foo f = (Foo) new Bar();
object o = (object) f;
Bar b = (Bar) o;

  IL_0000:  newobj     instance void Bar::.ctor()
  IL_0005:  stloc.0
  IL_0006:  ldloc.0
  IL_0007:  stloc.1
  IL_0008:  ldloc.1
  IL_0009:  castclass  Bar
  IL_000e:  pop

アップキャストも明示的にキャストを入れてみたが、
castclass が呼ばれるのはダウンキャストの場合だけだった。

918 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 13:55:32 ]
>>916
他にどんな方法が・・・?

919 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 13:57:00 ]
>>918
ハッシュで持つとかどう?



920 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 13:57:33 ]
>>915
ホントに?
俺が計った時はアップキャストのが遅かったぜ?
念のため、ダウンキャストはオブジェクトの実体の型へのキャストな。

インターフェイスへのキャストは更に遅かった。
まあそんな大差は無いけどな。
クラス階層やインターフェイスの実装数が多いと差が開きそうだった。
まあ当たり前だが。


921 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 13:59:01 ]
>>917
うぬう、何か条件が違ったかな?
ちょっといま試せる環境にいないんだよね…


922 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 14:00:11 ]
>>919
ildasmでパスワードを検証してる部分を消してilasmでコンパイルし直せばいいじゃん

923 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 14:01:52 ]
そもそも何のためのパスワード?
誰のためのパスワード?

924 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 14:03:57 ]
まあ破る奴はどうやったって破るからな
技術的な手段を講じてもあんまり意味がない

925 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 14:04:02 ]
ライセンスとかだとあんまりいい方法はないぜ?
アプリ実行に必須のデータを暗号化して持たせて
パスワードで解除するとかな。


926 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 14:05:50 ]
起動時に、パスワードが合えばソフトウェアを使用出来るようにしたいのです
本格的にやるのならばPCの固有番号をネットワークアクティベーションとかにするのでしょうけど、
もう少し簡単に、後々変更できなくてもいい代わりにプログラムを覗かれて、
パスワード認証を回避されないようにするにはどうすればいいか・・・と考えてました。

927 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 14:08:54 ]
Dotfuscator Proとか使えばいいじゃん
80万程度でお手軽に隠蔽出来るよ
リバエン防がないでパスワード隠蔽もなにもないでしょ

928 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 14:09:00 ]
dllをリソースに暗号化して埋め込んで、
パスワードで解除してからバイトでロード。
まあ簡単には出来ないよ。


929 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 14:09:47 ]
難読化されたところでパスワードを認証してる所を見つけるだけならそんなに難しくない



930 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 14:10:44 ]
そのソフトにどのくらいの価値があるかによるよね。
スキルのある人間から防御したいなら、
ロードモジュールがユーザーから覗けたり改変できる限り無理だし、
ど素人のちょっとしたいたずら除けにならちょっとした仕掛けで大丈夫かもしれない。

931 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 14:11:21 ]
だからね、パスワードを隠蔽するって方向では根本的にはダメなんだ。
実行に必須の何かをパスワードがないと復元不可能にしないとね。


932 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 14:22:15 ]
>>931
パスワード間違えたときの動作が未定義でいいなら確かに有効だね。

933 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 14:23:54 ]
Webアプリ作ればいいじゃん
不正アクセスも見つけやすいし
対処しやすいし

934 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 14:31:40 ]
>>932
チェックは、暗号化したデータの中にパスワードを埋め込むとか、まあいろんな方法で組み込める。

これはあくまでパスワードが間違ってた時にエラーで止めるためだけの目的ね。
このチェックは別に不正に抜けられても困らないから。


935 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 14:35:11 ]
うーむ
言い出しっぺがスキル不足で話について行けない
Dotfuscator Pro・・・良いですけど高いですな・・・
20万くらいまでならこれだけの為にでも投資したんですが;

936 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 14:35:13 ]
.Netアプリをネイティブにするツールってどこかにあったよな?
あれって何て名前だっけ?

937 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 14:38:52 ]
>>918
暗号化してconfigファイル

938 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 14:46:01 ]
>>934
いやパスワードなりCRCなりをチェックするにしても
偶然一致してしまう可能性を否定できないわけで。
まぁそのくらいで訴訟起こす人は日本には居ないだろうけど。

939 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 14:48:57 ]
パスワード付きでzip作って埋め込んで
入力されたパスワードでzip解答できたら有効にする、とか



940 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 14:49:30 ]
話ぶった切ってすまない
昨日ホットキーの登録について聞いたものなんだが、
using System.Runtime.InteropServices ; // for DllImport
[DllImport("user32.dll")]
extern static int RegisterHotKey(IntPtr HWnd, int ID, int MOD_KEY, int KEY); // return : error = 0
[DllImport("user32.dll")]
extern static int UnregisterHotKey(IntPtr HWnd, int ID) ; // return : error = 0

private void Form1_Load(object sender, System.EventArgs e)
// Regist Hotkey, ALT+A
RegisterHotKey(this.Handle, HOTKEY_ID, MOD_ALT, (int)Keys.A) ;

private void Form1_Closed(object sender, System.EventArgs e)
UnregisterHotKey(this.Handle, HOTKEY_ID) ; // UnRegist Hotkey,

protected override void WndProc(ref Message m)
base.WndProc(ref m) ;
if (m.Msg == WM_HOTKEY)
{
if ((int)m.WParam == HOTKEY_ID)
{
MessageBox.Show("Press Hotkey");
}
}
こうすれば、Alt+Aキーを押したときにメッセージ出るんだが、
例えば、Aキーのみを押したときにメッセージを出すようにするにはどうすればいいのか分かる人居ません?



941 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 14:51:11 ]
ローレベルフック使え。

942 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 14:51:35 ]
暗号化したデータにハッシュを追加するとかの方法で十分。
パスワードそのものでもまあいいけど、パスワードのハッシュのがまだいいかな。
偶然の一致なんて考える必要はない。


943 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 14:55:21 ]
今時少なくとも128ビット以上のハッシュが簡単に使えるんだから、
偶然の一致など確率的に無視できる。
デジタル署名とかと同レベルの信頼性なんだぜ?


944 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 15:41:34 ]
アメリカなんかだと被害の事例がなくてもその可能性があるというだけで訴訟起こされるからね。
実際どうなるかはわからないけど怖いから避けたいというのが各社共通の認識かと。

945 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 15:45:04 ]
1 / 2^128 の可能性でも「可能性がある」なんてことを認めてたら、
現代社会に信用できるものなんてなくなるんだが。

946 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 15:46:03 ]
940です
>>941さんの言ってる事が分からないのですが、
参考になるサイトとか有りませんでしょうか・・・><;

947 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 15:52:29 ]
>>946
msdn.microsoft.com/en-us/library/ms644985(VS.85).aspx

948 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 15:57:27 ]
銀行の暗証番号でさえ4けた14ビット以下だってのに何言ってんだか。
何も信用出来ないよ。
128ビットだって最低ラインで512ビットまで用意されてるし。
プログラムにバグがある可能性の方がはるかに高いわ。

949 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 16:03:27 ]
パスワードなんかより明日道歩いてたら上から植木鉢が落ちてきて
頭に当たって死ぬ可能性を心配するべきだな



950 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 16:10:38 ]
ちなみに今現在というか今後を含めて政府レベルで推奨されてる安全性がだいたい128ビットだな。
これはもちろん攻撃を受ける前提の話だが。


951 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 16:12:57 ]
多分隕石の直撃うけて死ぬ可能性の方が高い。


952 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 16:16:59 ]
水を掛けるようなことをいって申し訳ないが、
なんか質問者の意図をそっちのけして回答者同士で勝手に熱くなってない?w

953 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 16:18:11 ]
お前の暗号化で地球がヤバイ

954 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 16:18:12 ]
何か問題が?

955 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 16:19:27 ]
だが、それがいい。

956 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 18:10:42 ]
シンイチ、それより交通事故に気をつけろ

957 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 20:07:52 ]
ここまでSecuceStringの話しがないとか

958 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 20:19:05 ]
SecuceStringの話はどうがんばってもでてこないと思うよ

959 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 20:32:50 ]
どういう読み方だそれ。せくーすすとりんぐ?



960 名前:957 mailto:sage [2009/10/12(月) 20:35:17 ]
SecureStringだぜごめんね

961 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 21:06:14 ]
セキュリストリング



962 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 21:06:35 ]
>>893
山椒でんがな

963 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 23:06:43 ]
C#やり始めたんだけどメーリングリストとかある?
あとどこのコミュニティがおすすめ?
ここ以外でお願いします

964 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 23:21:05 ]
MSDNフォーラム
非公式でそこそこ人がいるのはわんくまくらいしか知らないけどVB系で質問者も回答者もレベルは高くない

965 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 00:32:18 ]
いやいや「わんくま」は幼稚園みたいな名前と雰囲気は好きになれんけど、
公平にいってそんなに低レベルってことはないでしょ。

966 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 00:36:05 ]
というか回答者がMSDNフォーラムと大体同じなので

967 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 00:47:07 ]
MVPいるしな。


968 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 01:13:13 ]
MVPとかどうでもいい
本当の本当に上手いプログラマはMVPなんかとらない。
時間の無駄なのさ。

969 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 01:28:01 ]
とれない無能プログラマに限ってそういうんだよな。
MVPの価値を下げてもおまえの価値はあがらねーっつうのw



970 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 01:29:18 ]
本物のプログラマはそもそも質問掲示板で回答なんかしない。
時間の無駄なんだよ。

971 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 01:31:51 ]
偽者プログラマは黙ってろや

972 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 02:39:18 ]
世の中偽者のプログラマだけが本物のプログラムをコーディングしてるんだ

973 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 03:58:24 ]
で、ここのプログラマはレベル高いわけ?
質問に対してパパッと適切にソース書いてる人間見た事無いけど

974 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 04:03:32 ]
レベルが高いのとすぐにソースを書くのって別に関係ないじゃん

975 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 04:04:46 ]
レベル高かったら名を名乗って答える罠
2ちゃんにまともな回答を求める奴が間違い

976 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 04:51:54 ]
この思いはソースでしか形にできないの・・・

977 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 07:41:30 ]
君の質問の答えは僕が作るプログラムの中で答えようと思う(´・ω・`)

978 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 07:57:33 ]
時間の無駄とか言ってる暇があったら
さっと回答しちゃった方が速いのが本物のプログラマ

979 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 08:02:48 ]
どこでもたいていは調べたらすぐわかる話題ばっかりだからここも含めてそんなに変わらん



980 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 08:17:29 ]
サクっとコードで即答できるレベルの質問をここですんな。
そんなの検索エンジンに訊いた方が断然速い。
ここは人間に相談する場所だぞ。

981 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 08:26:30 ]
検索エンジンの達人の方、代わりに検索してください

982 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 09:10:43 ]
サクッとコードで即答出来ないのは面倒だからとコードかかないくせにw


983 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 12:51:48 ]


























うんこ

984 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 20:06:44 ]
次から名前は名前欄に書いてねうんこさん

985 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 02:22:12 ]
すまそ

ImageButton objButton = new ImageButton();
objButton.ImageUrl = "img/test.gif";
objButton.Attributes["onmouseout"] = "src='img/test.gif'";
objButton.Attributes["onmouseover"] = "src='img/test2.gif'";

この ImageButton オブジェクトを Table に動的に配置したら、OnMouseOver がきくことはきくんだが、
なぜか最初にマウスを持っていった時に、ステータスバーに"localhost に接続しています"と出て、若干時間がかかる。

これって最初にサーバーに test2.gif を取りに行ってるってこと??
test.gif は ImageUrl プロパティで指定してるから最初に取りに行くけど、これと同じタイミングで取りに行かせる方法はないかな〜?
もしお門違いな質問してたらスマソ

986 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 02:27:09 ]
>>985
こういうマウスオーバーエフェクトはCSSでやるべき。
複数の画像を一つのファイルに組んで、background-positionで
切り替えるのは一番いい方法だと思う。

例えばこんなふうに
jsajax.com/CSSSpritesArticle951.aspx

987 名前:デフォルトの名無しさん [2009/10/14(水) 04:31:35 ]
App.config に配列を保存する時の方法として
適当な区切り文字を入れてsplit でばらしてるんですが

XMLで推奨されてる標準の手順はありますか?
区切り文字をいちいち設定せずにできたら楽なので
もし知ってる方おられましたら教えてください。

988 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 07:10:03 ]
本当に配列が必要?
配列の要素一つ一つに意味があるならそれぞれ設定項目にした方がいいと思う
本当に必要なら987の方法でもいいんじゃね

989 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 07:52:42 ]
OfType<T> すげえええ
TにCOMインタフェースを指定しても期待通りに動く



990 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 09:13:30 ]
>>987
要素がXMLシリアライズ可能な配列はデフォルトでXMLシリアライズできるはずだが……

991 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 12:16:41 ]
型を選択するコンボボックスの中に一個だけ長い名前の混じってるじゃん?

992 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 14:05:22 ]
文字列だけだろ

993 名前:デフォルトの名無しさん [2009/10/14(水) 17:23:29 ]
ArrayList.Add でリストの最後ではなく
リストの最初に追加するにはどうすれば良いですか?

994 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 17:28:58 ]
Insert

995 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 20:20:40 ]
関係ないけど今更ArrayListなんか使うな

996 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 20:21:48 ]
関係ないね

997 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 20:40:21 ]
ArrayListの代わりってなに?

998 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 20:44:16 ]
998 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!

999 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 20:46:48 ]
-2



1000 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 20:47:19 ]
List<T>






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<218KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef