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


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

C#, C♯, C#相談室 Part59



1 名前:デフォルトの名無しさん [2010/05/16(日) 23:13:52 ]
(#゚ー゚)つ < C#、.NETの話題はこちらでどうぞ。

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

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

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

357 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 07:02:30 ]
ほぼ正解

358 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 09:15:18 ]
>>347
TableLayoutPanelコントロールを使えばOK

359 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 12:33:22 ]
入力チェックについて相談させてください。
フォーム内に登録されているコントール全ての Validating イベントを発生させるには
どうしたらよいのでしょうか?

現在、それぞれの項目の入力チェックは Validating イベントの中で処理し、
内容が正しくない場合は ErrorProvider を使用してアイコンを表示するようにしています。

このままですと一度もフォーカスを得ないままのコントロールは入力チェックがなされないままになってしまいます。

なので、登録ボタンを押下したタイミングでも全ての項目の入力チェックを行なおうと考えたのですが
うまい方法が思いつきませんでした。
ContainerControl の Validate メソッドで子コントロール全てを Validate できるのかと思ってためしたのですが
だめでした・・・

360 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 14:06:01 ]
つValidateGroup

361 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 14:37:35 ]
>>360
ValidatingGroup ですね。
ASP.NET 用ですか・・・ Windows Form では使えなさそうですね。

362 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 14:46:57 ]
ContainerControl.ValidateChildrenは?

363 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 15:20:58 ]
>>362
おおお! まさしくそれです
ありがとうございます
実装してみたところ期待通りの動作となりました


しかし・・・
なぜか自分ところの環境(VSEE2008)だと
ValidateChildren がインテリセンスにもオブジェクトブラウザにも出てこない・・・
ターゲットは .NET 2.0 にしてるしビルド自体は通るから問題なさそうなんだけどなんでなんだろう


364 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 15:24:10 ]
Browsable(false)属性付きだから
なんでそうしてるかは.NETの中の人に聞かないといけないが

365 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 15:34:56 ]
なるほど。
Form の方では Browsable(true) になっていました。
メソッドの性質を考えるとなるべく上位で使って欲しいからとかそんなとこなんでしょうかね。

重ね重ねありがとうございます。



366 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 16:38:40 ]
やるな

367 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 17:01:44 ]
ADO.NETで質問なんですが、
DataRow一行だけを編集するような画面を作る場合でも
TextBoxとかComboBoxにバインドするのが一般的な作り方なんでしょうか?
それとも一々内容を移しかえるやり方が一般的なんでしょうか?

368 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 17:15:30 ]
たった1行でも入力項目が多ければバインドする〜

369 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 19:02:49 ]
ADOは見通しが悪いよね

370 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 19:07:50 ]
手書きのADO.NETはそう悪くないんだけど
ウィザード生成の型付きデータセットが意外と解り辛くて不評。


371 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 22:06:03 ]
WebRequestでのFTPPUTはたまにリモートサーバーに接続できないエラーになるけど、
やはり、ソケットで作らないとだめなのかしら?

372 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 22:11:05 ]
んなことはない。

373 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 22:18:06 ]
IEのHTTP/GETだってたまにリモートサーバーに接続できないエラーになるぜ

374 名前:デフォルトの名無しさん mailto:sage [2010/06/07(月) 04:51:02 ]
いやそれはルータが腐ってるw

375 名前:デフォルトの名無しさん mailto:sage [2010/06/07(月) 09:11:05 ]
ルーターも然り、相手の環境のせいも然りってことでしょ。
いろんな環境原因も含めてHTTPやFTP、その他の通信でも失敗することはある。



376 名前:デフォルトの名無しさん mailto:sage [2010/06/07(月) 12:12:39 ]
FFFTPとかのいい加減枯れてるツールでも結構なるしな
そう言うモンだと思って回復手段作り込むしかあんめ

377 名前:デフォルトの名無しさん mailto:sage [2010/06/07(月) 12:21:13 ]
タイムアウト、リトライ、リジュームあたりを実装したら、
FTPはまともな動きになるだろう。

378 名前:デフォルトの名無しさん mailto:sage [2010/06/07(月) 20:51:14 ]
そこまで望む場合は自分で作ればいい。
FTPなんてチョー簡単だし。(PASV実装とかチョイ面倒くさい程度)

379 名前:デフォルトの名無しさん mailto:sage [2010/06/07(月) 21:33:36 ]
>>378
.net frameworkだけで手軽に実装できるだろ。

380 名前:デフォルトの名無しさん mailto:sage [2010/06/07(月) 23:19:51 ]
Windowsアプリケーションにて、画像の上に透過的な四角い枠線(色付き)を重ねたいのですが、
どのように実装したらよいでしょうか?
宜しくお願いします。

381 名前:デフォルトの名無しさん mailto:sage [2010/06/07(月) 23:50:40 ]
>>380
Panelでできないっけ。
今もPanelあるんだっけ。

382 名前:デフォルトの名無しさん mailto:sage [2010/06/08(火) 00:02:47 ]
>>380
現状ではコントロールは親コントロールに対してしか透過してくれないんだよね。
まぁ動かしたりするんなら糞重たくなるけど、その枠が乗る範囲が対象の画像のどこにあたるかを計算してその部分の画像データを枠を描画するコントロールの背景に描画とか。

まぁサクサク動いて透過もできてってなるといっそのことDirectXやOpenGLに2次元的な描画をするしかない。

383 名前:デフォルトの名無しさん mailto:sage [2010/06/08(火) 00:58:16 ]
PictureBoxの子に枠線のPictureBoxなり追加すりゃいんでね

384 名前:デフォルトの名無しさん [2010/06/08(火) 08:05:10 ]
>>383
WinFormだと透過を扱うのは面倒だよ

385 名前:デフォルトの名無しさん mailto:sage [2010/06/08(火) 08:31:38 ]
OnPaintの内部で好きなように描けばいい。



386 名前:デフォルトの名無しさん mailto:sage [2010/06/08(火) 10:13:32 ]
PictureBoxをはみ出す可能性があるなら厄介
OnPaintだったら一切コントロール使わずに重なる可能性のあるもの全部
自分で描かないといけない

387 名前:デフォルトの名無しさん mailto:sage [2010/06/08(火) 10:32:26 ]
どのレベルの運用なんだろう?

例えばユーザーがドラッグドロップした部分に枠を描画してそれを消したりすることが出来なければいけないなら
自分でレイヤーみたいなデータを順番に記憶してクリックされたら枠線描画して移動できるようにする

とかいろいろ考えられるけど


388 名前:デフォルトの名無しさん mailto:sage [2010/06/08(火) 11:33:45 ]
透明なウィンドウを重ねるのが確実
そういうの多用するんだったら努力するだけ時間の無駄だからさっさとWPFへ

389 名前:デフォルトの名無しさん mailto:sage [2010/06/08(火) 23:31:04 ]
FtpWebRequestのAbort忘れかも。

390 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 02:02:52 ]
枠引くくらいなら枠線用のPictureBoxなどを配置して上に置いて
Regionで内側を切り出すのがほどほど楽だと思うよ。

391 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 05:21:48 ]
コントロールの重ね合わせは数が増えると重くなるからスピードが必要ならDirectX

392 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 09:55:17 ]
C#2.0 マルチスレッドで質問です

short型の変数Aがあるとします。
メインスレッドはある変数Aを読み込むだけ
サブスレッドはある変数Aを書き換えるだけ

上記のような状態で通常
書き込み時に適当なオブジェクト等を使用してロック・読み込み時もロック
するような気はするんですが

仮に
両方ロックしない場合で

サブスレッドで
変数Aが 0(16bit全てOFF)の値になっている時に
変数Aを65535(16bit全てON)に変更したとします。

この場合変数Aは限りなく瞬間的に全てのビットを順番にONしていくと思うのですが、
その途中にメインスレッドが読み取りを行った場合に例えば8bitだけONになったりしている状態を読み取る場合ってあるのでしょうか?

ちょっと質問の仕方が微妙かもしれませんがお願いいたします。



393 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 10:18:11 ]
CPU命令の最小単位考えたらわかるべ

394 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 10:21:15 ]
>>392
> この場合変数Aは限りなく瞬間的に全てのビットを順番にONしていくと思うのですが、
> その途中にメインスレッドが読み取りを行った場合に例えば8bitだけONになったりしている状態を読み取る場合ってあるのでしょうか?
32bitプロセスでは32bitまでならアトミック
そんなの気にするよりvolatile

395 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 22:28:13 ]
>>392
download.intel.com/jp/developer/jpdoc/IA32_Arh_Dev_Man_Vol3_i.pdf
この資料のp.258に
> インテルPentium 4 プロセッサ、インテルXeon プロセッサ、P6 ファミリ・プロセッサ、
> インテルPentium プロセッサ、Intel486 プロセッサでは、キャッシュ可能メモリへのア
> クセスで、バス幅、キャッシュ・ライン、ページ境界をまたがっているものは、アト
> ミック操作が保証されない。
とあるので、そういう状況が起こる可能性はゼロじゃない。
本当にアトミック操作が必要な場合は、あなたの言うとおり、ロックするなりアトミック操作
命令をつかうなりする。



396 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 23:29:37 ]
shortの変数がそれらをまたがる可能性があるということか

397 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 23:46:29 ]
C#の場合はアライメント境界整列は保証されるとどっかで読んだ記憶が
まあ将来に渡って保証されてる訳でもないだろうけどな

398 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 00:46:26 ]
MSDNのInterlocked.Readとか読んでると保証されるとも取れるようなことが書いてあるよ

399 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 01:13:01 ]
StructLayoutした構造体でも適用されるのだろうか・・・
マーシャリング機構が魔法を使ってくれてるかもしれないから否定しているわけじゃない。

400 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 02:10:54 ]
>>392
それやると大抵は読み込むだけのスレッド側の処理は最適化で消えて読み込まなくなるから
中途半端に読み込む状態を仮定する以前の動作になるよ。

401 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 02:52:11 ]
volatileぐらいわかるよバカやろう

402 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 03:34:05 ]
>>392
なんでそういう事をわざわざ考えるのかよくわからないけど
ReaderWriterLockつかえば解決とか言う話でもないの?

403 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 03:38:57 ]
アトミックな操作が本当にそうなのかについて疑問に思ったんじゃないの?
いいことだと思うよ。

404 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 06:40:13 ]
なんでそうなるのかとかは知っといた方がおもしろいよね。

405 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 12:34:40 ]
GCが配置する時に8バイト境界にするってどこかで見た覚えがあるんだがどこだったかな



406 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 12:42:42 ]
レジスタのビット書き換えフェーズ中に割り込みか同時読み込みできる
そういうすごいCPUの話じゃないの?


407 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 13:36:17 ]
>>392
short型ならすべてのビットが同時に書き換えられる。1ビットずつ順番ではない。
もちろんプログラムが1ビットずつ書き換えるように作ってあれば話は別だけど、単純に

A = 0;
A = 65535;

のように代入するだけならすべてのビットが同時に変更される。
もし中途半端な状態が発生したら、それはメモリの故障。

408 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 13:51:19 ]
>>406
物理コアが複数だと、そう言い切れなかったりする
上でも何回か出ているアライメント境界の問題で、
複数回フェッチが起こる可能性があるからだ
ここらはキャッシュコヒーレンシとか色々関係しててややこしい

409 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 15:08:02 ]
横レスなんだけど
>>407
いろいろ読む限り仮にこれが32bitOSでLongだったら書き換えは複数回に分割されてしまうということなんだろうか?


410 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 15:28:17 ]
仕様としてはどうなっているんだ?

411 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 15:50:08 ]
5.5 変数参照の分割不能性
bool、char、byte、sbyte、short、ushort、uint、int、float の
各データ型および参照型の読み取りと書き込みは分割不可能です。
また、上記の型を基になる型に持つ列挙型の読み取りと書き込みも
分割不可能です。long、ulong、double、decimal などのその他の
データ型、およびユーザー定義型の読み取りと書き込みは、分割不可能
であることが保証されていません。この目的で設計されたライブラリ関数を
除いて、インクリメントやデクリメントの場合などでの分割不可能な
読み取り/変更/書き込みは保証されていません。


412 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 19:34:34 ]
>>411
CPUレベルではともかく、CLRレベルでは保証されてるってことか。

413 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 20:38:48 ]
32bit以上での実装を事実上想定しているわけだ。

414 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 21:36:58 ]
16ビットCPUだったらintも16ビット長じゃね?
.netが16ビットでも動くかは知らんけど

415 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 21:41:29 ]
intは32bitと決められている。



416 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 21:50:44 ]
intが可変な言語って数えるほどしかない

417 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 21:52:51 ]
CLRは32ビットプロセスなら32ビット境界に、64ビットプロセスなら64ビット境界に整列することを保証してる。
もちろんライアウトを変えた場合は別。

だから、少なくとも32ビット以下のプリミティブ型の読み書きはアトミック保障。


418 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 21:53:06 ]
そういう言語では組み込み型はそのまま使わずにtypedefしてサイズを固定するという
アホらしいノウハウが定着してる事実

419 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 21:53:57 ]
ああ書き方おかしかった。
ライアウト→レイアウト。
で、そういうことやってない限りは保障されてる。


420 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 21:56:44 ]
>>402
何のためだよw


421 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 21:58:16 ]
つうわけで現実的には、32ビット以下ならvolatil変数、
32ビットを超えるものはlockするのが簡単。


422 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 22:09:14 ]
ところでlongはvolatileにできないけど
IntPtrや参照型のvolatileは64bitプロセスでどうなってるんだろう?

423 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 23:33:39 ]
64bit環境なら普通に問題ないだろ。

424 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 23:38:28 ]
64ビット環境では当然64ビットの読み書きは分割不可能。


425 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 23:47:07 ]
x64とia64で違ったりしないのかな



426 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 01:13:50 ]
分割「不可能」って表現はどうなんだろうねえ。

427 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 01:19:47 ]
atomicの定訳がないからねえ。「不可分」で良さそうなもんだが。

428 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 01:40:34 ]
相談室の方だしアトミックとだけ言っとけば通じるんじゃないか?

429 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 02:33:51 ]
今更このスレでアトミックや分割不可能の意味がわからん奴もいないと思うんだが・・・
まぁMSDNにもそう書いてあるんだし、そのままでいいんじゃないか?

というか、やっぱPGて細かく突き詰めると深いよなぁ と改めて思う

430 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 11:50:42 ]
なぁ、紐づく・紐付ける・紐づいたXX って英語でなんていうんだ?
てか、紐づくの語源はどっから?

431 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 12:00:03 ]
そんなの
関係する
とかに置き換えたらいかんの?

語源はググってくれ

432 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 12:34:12 ]
そう言えば、英語と1対1な用語じゃないような気がするねえ。
link,bind,relationshipのいずれかを局面に応じて使うんじゃないかな。

433 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 12:47:27 ]
associateとかもあるな

434 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 18:55:47 ]
A (which is) tied together with B とか

435 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 22:53:09 ]
assigned とかは?
命名スレ行きかな



436 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 18:00:58 ]
wiredだな

437 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 01:55:45 ]
weirdとな

438 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 13:04:54 ]
ttp://techbank.jp/Community/blogs/mymio/archive/2010/03/07/25216.aspx
この記事の意味わかる人いる?


439 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 13:11:10 ]
確かに全くわからない
new { trueValue = new BitVector32(-1), falseValue = new BitVector32(0) }と
new { trueValue = new BitArray(1)[0] = true, falseValue = new BitArray(1)[0] = false }
を比較したら処理速度以前に値型と参照型の違いで前者が速いに決まってる
何がしたいのかも意味不明

440 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 13:24:00 ]
>new BitVector32(-1)[(int)BitFlag.TrueIndex]
BitFlag.TrueIndexは0のことだから、

>new BitVector32(-1)
-1じゃなくても何を渡してもたとえ0でもTrueになるしな。


441 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 13:26:43 ]
>new { trueValue = new BitArray(1)[0] = true, falseValue = new BitArray(1)[0] = false }
これに至ってはビットセットしてるつもりで実は取得しかしてない気がする。


442 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 13:27:44 ]
Microsoft MVPかよw

443 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 13:41:36 ]
>>441

設定はしてるけど取得はしてない
trueValueに代入されるのはリテラルのtrue

444 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 14:10:33 ]
(int16)trueが1になったり-1になったりする!大発見!スイーツ(笑)
ってことか?

445 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 14:16:21 ]
回数増やすと差が開くのはGCが動くからかな?
なんにせよそんなBitArrayの使い方ありえない



446 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 14:30:00 ]
本人も言ってるけど、本当に
> プログラミング言語論やアルゴリズムに元々興味がなかった
んだろうな。

447 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 14:42:15 ]
そうだとしてもこれ普通に仕事に支障が出るレベルじゃね

448 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 14:44:24 ]
Console.WriteLine("BitVector32の-1: {0}", ....

そりゃ何やったって-1が出るよな。

449 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 14:53:20 ]
>>440
BitVector32の仕様を理解してない? インデクサの引数をマスクじゃなく
インデックスだと思っているとか。

450 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 14:54:15 ]
>>438
あれ? コメント消えた?

451 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 15:07:19 ]


452 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 15:08:41 ]
貼ったのは本人かよwwwwww

453 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 15:13:54 ]
というか記事自体消えたw

454 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 15:26:45 ]
流石はMVPだな

455 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 19:55:01 ]
丸ごと消して逃げるってのは技術者の態度としては酷いなあ
別に誰だって間違いはあるんだから、素直に分かってませんでした、でいいのに。



456 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 20:05:52 ]
…ほかの記事も全部巻き込んでコメント消えたな…
どうなってんだ…真面目に聞いてたのに…

あーあ、どうせ荒らされたからコメント停止したとか、そういうことにされてんだろうな

457 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 20:12:09 ]
まあそれぐらいで許してやれよ。
打たれ強い人ばかりじゃないんだ






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

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

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