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


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

[プログラム板] C#, C♯, C#相談室 Part47



1 名前:名無しぃ♯ [2008/06/21(土) 17:51:22 ]
(#゚ー゚)つ < C#、.NETの話題はこちらでどうぞ。
c++厨の嵐はスルー汁。

前スレ
C#, C♯, C#相談室 Part46
pc11.2ch.net/test/read.cgi/tech/1208791919/

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

357 名前:デフォルトの名無しさん mailto:sage [2008/07/25(金) 19:09:17 ]
>>353
マルチすんなゴミ

358 名前:デフォルトの名無しさん mailto:sage [2008/07/25(金) 19:12:00 ]
ReflectorでSystem.Randomクラスのコードをパクる奴とかいそうだな

359 名前:デフォルトの名無しさん [2008/07/25(金) 19:23:59 ]
>>355 ありがとうございます。

>>357 期限が迫ってたので色んな場所で聞こうと思っただけです。気を悪くしてすいません。

360 名前:デフォルトの名無しさん mailto:sage [2008/07/25(金) 19:32:50 ]
ほんとにKYですね^^
死んでください

361 名前:デフォルトの名無しさん mailto:sage [2008/07/25(金) 19:35:51 ]
気を悪くしてすいませんだと?
気を悪くしたのはこっちだ!クソが!

362 名前:デフォルトの名無しさん mailto:sage [2008/07/25(金) 20:43:39 ]
期限が迫ってたので色んな場所で聞こうと思っただけです

363 名前:デフォルトの名無しさん mailto:sage [2008/07/25(金) 20:47:26 ]
こういうゴミに教えてあげるような偽善者も死ねよ

364 名前:デフォルトの名無しさん mailto:sage [2008/07/25(金) 21:43:47 ]
自己中乙

365 名前:デフォルトの名無しさん mailto:sage [2008/07/25(金) 22:26:13 ]
レポートの最後に「参考:2ch プログラム板」って書いておけよ



366 名前:デフォルトの名無しさん mailto:sage [2008/07/25(金) 22:36:26 ]
>>361 気を悪くさせての間違いです^^

>>365 課題落とされるかもしれないので書けません 教えてくれた人ありがとうございました^^

367 名前:デフォルトの名無しさん mailto:sage [2008/07/25(金) 22:36:57 ]
今プログラミングスレがいっぱい上がってるがどゆこと?

368 名前:デフォルトの名無しさん mailto:sage [2008/07/25(金) 22:45:14 ]
>>367
なに言ってんだお前

369 名前:デフォルトの名無しさん mailto:sage [2008/07/25(金) 22:46:18 ]
しまった板違いwwwAA板じゃねえwwwww

370 名前:デフォルトの名無しさん mailto:sage [2008/07/25(金) 23:00:15 ]
>>369
斬新な板違いだなおい
しかもよりによってスレタイに[プログラム板]って付いてるこのスレで

371 名前:デフォルトの名無しさん mailto:sage [2008/07/26(土) 01:30:27 ]
なんでこんな荒れてんの?

372 名前:デフォルトの名無しさん mailto:sage [2008/07/26(土) 01:35:00 ]
荒れてないよ

373 名前:デフォルトの名無しさん mailto:sage [2008/07/26(土) 12:06:15 ]
突然すみません。
C/C++のように構造体配列の定数データを持ちたいんですが、
C#ではどうすればよいのでしょう?


374 名前:デフォルトの名無しさん mailto:sage [2008/07/26(土) 12:21:19 ]
無理

375 名前:デフォルトの名無しさん mailto:sage [2008/07/26(土) 12:23:06 ]
static readonlyな配列で良いんじゃね



376 名前:デフォルトの名無しさん mailto:sage [2008/07/26(土) 12:30:22 ]
static readonly な ReadOnlyCollection<T>

377 名前:デフォルトの名無しさん mailto:sage [2008/07/26(土) 17:04:31 ]
GDI+でICONへは変換不可ですか?

378 名前:デフォルトの名無しさん mailto:sage [2008/07/26(土) 17:27:39 ]
>>377
可能
Dim bmp As New Bitmap("hoge.bmp")
Dim ico As Icon = Icon.FromHandle(Bitmap.GetHicon())
Dim fs As New FileStream("hoge.ico", FileMode.Create)
ico.save(fs)
fs.Close()
ico.Dispose()
bmp.Dispose()

379 名前:デフォルトの名無しさん mailto:sage [2008/07/26(土) 17:40:09 ]
ども、やってみます!

380 名前:デフォルトの名無しさん mailto:sage [2008/07/26(土) 18:15:04 ]
ただし制限きついけどなー

381 名前:デフォルトの名無しさん mailto:sage [2008/07/26(土) 19:11:37 ]
>>378
意味不明な質問には「日本語で書け」と叱責してやるのが本人のためだと思うけど。
ああちゃんと嫌味の意味でVBで答えてるわけかw

382 名前:デフォルトの名無しさん mailto:sage [2008/07/26(土) 19:33:38 ]
>>381
そういうことwww
お前は、エスパーかw

383 名前:デフォルトの名無しさん mailto:sage [2008/07/26(土) 22:03:26 ]
Using使えよって思った。

384 名前:デフォルトの名無しさん mailto:sage [2008/07/26(土) 22:04:52 ]
キモすぎ

385 名前:デフォルトの名無しさん mailto:sage [2008/07/26(土) 22:12:36 ]
>>381
意味不明な質問には「日本語でおk」だろ?



386 名前:デフォルトの名無しさん mailto:sage [2008/07/26(土) 22:15:29 ]
意味不明な質問にわざわざ絡む奴ってなんなの?
いじめられっこ?

387 名前:デフォルトの名無しさん mailto:sage [2008/07/26(土) 22:19:19 ]
>>382
自作自演乙

388 名前:デフォルトの名無しさん mailto:sage [2008/07/27(日) 04:59:50 ]
>>381
二行目で気づいたならその時点で書き直せよ気持ち悪い

389 名前:デフォルトの名無しさん [2008/07/27(日) 15:52:58 ]
GraphicsクラスのDrawImageメソッドで
画像の表示位置や高さ幅は通常intで指定すると思います。

ところが、実はfloatで指定する方法も用意されています。
public void DrawImage(
Image image,
float x,
float y,
float width,
float height
)

floatで指定すると何かよいことがあるのでしょうか?
基本的には四捨五入でintに繰り上げていると思うのですが、
そのような理解で正しいでしょうか?

390 名前:デフォルトの名無しさん mailto:sage [2008/07/27(日) 16:07:44 ]
>>389
WMFとかベクター画用じゃね?

391 名前:デフォルトの名無しさん mailto:sage [2008/07/27(日) 16:10:09 ]
Graphicsの描画単位はPixelだけじゃないぜ?

392 名前:デフォルトの名無しさん mailto:sage [2008/07/27(日) 16:14:24 ]
DirectXで使うためでしょ

393 名前:デフォルトの名無しさん mailto:sage [2008/07/27(日) 16:15:14 ]
ピクセル単位が整数だとしても
縮小拡大の原点が0,0で固定されないで
指定点から始まると困ることが多数あるのです。

394 名前:デフォルトの名無しさん mailto:sage [2008/07/27(日) 16:47:49 ]
いやそういうことじゃないでしょw
>>391が言ってることが全てだよ。

よく言われることだが、そもそもピクセルなんていうのは
デバイス側の勝手な都合に過ぎん。

395 名前:デフォルトの名無しさん mailto:sage [2008/07/27(日) 17:48:10 ]
VB6時代にもTwipsとかあったな。
GraphicsUnit列挙体がGDI+で扱える単位すべてじゃね?



396 名前:デフォルトの名無しさん mailto:sage [2008/07/27(日) 18:50:20 ]
画像表示するアプリ作ったときWin32APIのStretchBlt使ってたら
スクロールの更新部分だけ描画させるたら非更新部分と結果がずれて困ったことあったな。
無効領域だけしか処理しないから全体を更新すればいいんだけど
大きい比率で拡大したときに表示してくれないから結局自前で処理するしかなかった。
GDI+が出たときに少数単位で渡したらずれなかった。

397 名前:デフォルトの名無しさん [2008/07/27(日) 19:01:47 ]
画像を反転させるには
RotateFlip(RotateFlipType.Rotate180FlipXY);
というメソッドを使えばいいことがわかりました。

画像Aと反転後の画像Bを作りたいのですが、
Cloneメソッドを使うと両方反転してしまいます。
Imageオブジェクトをコピーする良い方法はありますか?

398 名前:デフォルトの名無しさん mailto:sage [2008/07/27(日) 19:09:50 ]
RotateFlipしたあとにCloneしてるってオチじゃないだろうな

399 名前:デフォルトの名無しさん [2008/07/27(日) 22:51:02 ]
ものすごくヘビーな処理をしています
計算途中でスリープやサスペンドに入られるとちょっと困るので、計算中は一時防止したいのですが
何か良い方法はないでしょうか?

400 名前:デフォルトの名無しさん mailto:sage [2008/07/27(日) 22:56:56 ]
何か処理してれば普通サスペンドしないだろ

401 名前:デフォルトの名無しさん [2008/07/27(日) 23:01:32 ]
いや、寝る前に仕掛けて朝起きたらサスペンドしていてちっとも処理が進んでなかったです。

402 名前:デフォルトの名無しさん mailto:sage [2008/07/27(日) 23:18:35 ]
>>399
処理と重力定数は関係ない・・・

403 名前:デフォルトの名無しさん mailto:sage [2008/07/27(日) 23:21:21 ]
電源の設定でサスペンドしないように出来ない?

404 名前:デフォルトの名無しさん mailto:sage [2008/07/27(日) 23:44:05 ]
>>399
WM_POWERBROADCASTのPBT_APMQUERYSUSPENDの応答でサスペンド入りを拒否できるらしい。

405 名前:397 [2008/07/28(月) 02:27:50 ]
>>398
違うようです。
シャローコピーのようで、
Imageクラスの中ではイメージ実態への参照(ポインタ)
を持っているようです。
一方、回転するのはイメージ自体です。



406 名前:397 [2008/07/28(月) 02:48:15 ]
大ボケかましました。
RotateFlip(RotateFlipType.Rotate180FlipXY);
だと画像が回転せず
正しくは
RotateFlip(RotateFlipType.Rotate180FlipNone);
でした。
頭悪すぎてすみません。
暑さでやられましたorz

407 名前:デフォルトの名無しさん mailto:sage [2008/07/28(月) 11:10:24 ]
rubyにおけるmechanize的なクラスとか無いんですか?

408 名前:デフォルトの名無しさん mailto:sage [2008/07/28(月) 11:40:56 ]
よほど自明でない限りrubyのmechanizeを説明するのが先だろ

409 名前:デフォルトの名無しさん mailto:sage [2008/07/28(月) 12:05:25 ]
C#にはスクレイピング用の定番ライブラリはないんじゃないかな。

410 名前:デフォルトの名無しさん mailto:sage [2008/07/28(月) 12:15:43 ]
逆行列、最小二乗法のフリーのライブラリないでしょうか?

411 名前:デフォルトの名無しさん mailto:sage [2008/07/28(月) 12:31:34 ]
ライブラリっつーか、ソース探してきては

412 名前:デフォルトの名無しさん mailto:sage [2008/07/28(月) 19:17:38 ]
CLapackなんかの必要な関数だけC++/CLIでラップして使うのが楽

413 名前:デフォルトの名無しさん mailto:sage [2008/07/28(月) 19:41:02 ]
string に格納されたデータが整数に変換可能な形なら int に
浮動小数点形式なら float に変換する方法教えてください。

414 名前:デフォルトの名無しさん mailto:sage [2008/07/28(月) 19:44:33 ]
TryParse

415 名前:デフォルトの名無しさん mailto:sage [2008/07/28(月) 19:44:49 ]
TryParse



416 名前:デフォルトの名無しさん mailto:sage [2008/07/28(月) 20:24:51 ]
プロパティというのは、クラスのフィールドを外部に公開する時に、柔軟性や冗長性を持たせるために、
必要ならば何らかのラップ処理を行うためのものだと、今まで思っていました。

つまり、プロパティは必ずpublicなものしか存在しないのかと。

ところが、最近、外人さんのソースを読んでいると、すべてのフィールドに対してプロパティを用意して、
クラス内部のアクセスに対しても、privateのプロパティを経由して行っているプロジェクトが多いです。

個人的には、フィールドは小文字で、publicなプロパティは大文字の命名規則(Pascal)だったのですが、
外人さんの流れでは、privateなプロパティもPascal記法になっていて、
クラス内部のすべての操作が大文字から始まるメンバを操作しています。

皆さんはどうされてます?もしかして、外人さん流儀の方が主流なんでしょうか?
C#以外の言語も含めて、そっちの方が主流になるんでしょうかねぇ。
個人的には、ローカルなnullチェックなどはプロパティの中ではなく、メソッドの中で操作する前に
行うほうが行儀が良いんじゃないかと思ったりもするのですが‥‥。

417 名前:デフォルトの名無しさん mailto:sage [2008/07/28(月) 20:42:03 ]
>>416
質問の意図がクリアーじゃない気がするよ。
も一度他人の目線で自分の文章読みなおしてみ?

418 名前:デフォルトの名無しさん mailto:sage [2008/07/28(月) 20:53:45 ]
>>417
単に話題提起してるだけなので、こんなもんじゃないでしょうか。解析的に解ける問題でも無いし。
興味を持たない人には、一生縁のない内容でもあると言えるし。
おそらく、LL言語的にはプロパティはあって当然の記述なので、おそらく外人さんが正しいのでしょうが。

419 名前:デフォルトの名無しさん mailto:sage [2008/07/28(月) 21:36:43 ]
サンプル見ると、MS 自身も private なプロパティ使ってるね。

クラス内部であっても、プロパティの実装変えたときのこと想定しとけよってことだと思う。

420 名前:デフォルトの名無しさん mailto:sage [2008/07/28(月) 21:41:28 ]
>>418
だから何を問題提起してるのか読み取れない、と言ってるんだよ。
質問内容にケチをつけているのではない。
ナニが言いたいのか分からないといってるの。

421 名前:デフォルトの名無しさん mailto:sage [2008/07/28(月) 21:44:35 ]
>>416
Delphi(Win32,.netじゃないやつ)のVCLをみると
private/protectedのレベルではpropertyは使われてない。
(protectedまで使ってるものもあるがTCustom〜と直接使わないクラス。ここから継承してほかのコンポネを作る)
でも内部ではプロパティを使ってアクセスしてる。(Get/SetとCreateをのぞく)


422 名前:デフォルトの名無しさん mailto:sage [2008/07/28(月) 21:47:38 ]
外人さんの手法はクラスが大きくなると有効じゃね


423 名前:デフォルトの名無しさん mailto:sage [2008/07/28(月) 21:52:49 ]
>>420 読解能力がないか、話に興味が持てないならスルーすればいいんじゃね?

話からずれるが
C#じゃ配列のプロパティはインデクサとして1つしか使えないと思ってたけど
配列型をプロパティの型にしてしまえば一応いくらでも使えるのだな。今初めて気がついた
public Boolean[] Hoge { get;set;}

でも、配列としてデータを持ってるんでなくてその場で計算して値を出したり入れたりしてたり、
内部では別の型のデータとして扱ってて、便利のためにほかの型でのアクセスさせるためにほかの配列使ったりってことはどうやったらいいの?
int[,] でかると = int[100,100];
public int 極座標[int R,double Rad] { (ry とか
しかもこういうのがほかの変数にも必要だったりする場合にはどうやって対処すればいいの?


424 名前:デフォルトの名無しさん mailto:sage [2008/07/28(月) 21:57:52 ]
メソッドを使いなさい

425 名前:デフォルトの名無しさん mailto:sage [2008/07/28(月) 22:00:32 ]
>>423
妄想力と読解力は違うよ。
ま、区別がつかない人間に縷々説明して分かることとは思わないけど。



426 名前:デフォルトの名無しさん mailto:sage [2008/07/28(月) 22:06:20 ]
>>423
VBからだと引数付きのプロパティは作れるのだけどこれをC#から使う場合がヒントになるかな。
Public Property NameProp(ByVal index As Integer) As String
    Get
        Return array(index)
    End Get
    Set (ByVal Value As String)
        array(index) = Value
End Set
// C#から使う
o.set_NameProp(1, "nnnnn");
o.get_NameProp(1);



変なのが沸いてるけど無視していこう。


427 名前:デフォルトの名無しさん mailto:sage [2008/07/28(月) 22:20:48 ]
そこまでして[]を使いたい意味がわからん

428 名前:デフォルトの名無しさん mailto:sage [2008/07/28(月) 22:21:12 ]
だから言わんこっちゃない。

説明能力がない奴がろくに推敲もせずに書いた文章を
エスパーしてやることが親切だと勘違いしている馬鹿が多くて困るが、
意味不明な文章(例えば>>423)にははっきり「意味不明だ」と言ってやるのが
結局は一番親切な事だとなぜ分からないのだろう。

429 名前:デフォルトの名無しさん mailto:sage [2008/07/28(月) 22:35:17 ]
インデクサほとんど使わないんだよなぁ

430 名前:デフォルトの名無しさん mailto:sage [2008/07/28(月) 22:54:54 ]
だから423はスルーしたのか


431 名前:デフォルトの名無しさん mailto:sage [2008/07/28(月) 22:56:45 ]
>>423
配列を返すプロパティは実装変えられなくなるからダメ

432 名前:デフォルトの名無しさん mailto:sage [2008/07/28(月) 22:59:12 ]
インデクサと GetEnumerator を持つコレクションクラスを返すプロパティを作るの推奨。

433 名前:デフォルトの名無しさん [2008/07/28(月) 23:00:51 ]
晒しage

434 名前:デフォルトの名無しさん mailto:sage [2008/07/28(月) 23:04:13 ]
配列使うってまだ.netに慣れてない人に多い気がする。

435 名前:423==421 (IDが出ない板は面倒くさい) mailto:sage [2008/07/28(月) 23:16:40 ]
>>431
確かにそうだけど
ListBoxはObjectCollection返してるけど、こうするとどう変わってくるの?
暇なときに調べるか…



436 名前:デフォルトの名無しさん mailto:sage [2008/07/28(月) 23:18:19 ]
ここっていつも空気悪いよね

437 名前:デフォルトの名無しさん mailto:sage [2008/07/28(月) 23:23:41 ]
そりゃいつも低脳がでしゃばるからな

438 名前:デフォルトの名無しさん mailto:sage [2008/07/28(月) 23:30:24 ]
>>435
挙動変えたいときに、ObjectCollection継承したクラス作って
インデクサとかGetEnumeratorをoverrideしてしまえば
利用側に迷惑かけずに挙動変えれるでしょ。

439 名前:デフォルトの名無しさん mailto:sage [2008/07/28(月) 23:32:48 ]
IList<>かICollection<>でいいだろ。

440 名前:デフォルトの名無しさん mailto:sage [2008/07/28(月) 23:43:33 ]
IEnumerator<>という手も

441 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 00:02:38 ]
>>439-440
多分、今作るならそういう実装になってると思う。

442 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 00:29:07 ]
>>441
ちゃんと理解できてない&元使用言語によっては配列使いまくりになるよ。
VB厨が使うVB.netなんていい例

443 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 00:43:42 ]
ちゃんと理解できてない?
それはたぶんお前さんのことでもあるんじゃないの?
別に配列を返すプロパティやメソッドが一義的に悪いとも思えないけどね。

もちろん配列を返した場合の弊害を知らないのは愚かだと思うが、
村の掟でもあるまいし、無条件に否定するのも同様に愚かだろう。

444 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 00:53:05 ]
配列を返すプロパティがガイドライン違反であることには留意すべきじゃないか

445 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 02:42:46 ]
>>443
まぁ、探してみてみろよ、わかるから。
お前の想定レベルみたいな生半可なもんじゃねーぞ、VB厨は・・・
そのうち.netの仕事が増えれば嫌でも見る事になると思うよ。



446 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 07:06:09 ]
もし配列を返すことが目的ならばindexerを使うのはおかしい。
逆にindexer代わりに配列を使うのも変だな。
配列だけでなく変更可能なクラスをプロパティにするならある種の副作用は覚悟しなければならない。
getで予防的コピー、setで妥当性の検査や値のコピーといった措置は必要になるだろう。


447 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 07:42:27 ]
メンバのコレクションの中身だけを渡したいときは配列使うようにしてるかも。
実測してないが早いと聞いたので。

448 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 08:29:40 ]
速くはあるだろうが安全じゃない。ケースによってはここまでやらないと。
int [] _hoge = new int [5];
int [] Hoge {
  get { return (int []) _hoge.Clone(); }
  set {
    if (value == null) throw new NullReferenceException();
    if (value.Length > _hoge.Length) throw new ArgumentOutOfRangeException();
    value.CopyTo(_hoge, 0);
 }
}


449 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 09:01:18 ]
>>428
君のプロパティに関する意見はどうなの?
他の人がここまで書いているんだから、何か無いの?
無いのなら、無い奴に限って枝葉末節にこだわる黄金則が‥‥。

450 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 09:45:33 ]
>>448
getで返す配列への変更が元のインスタンスに反映されないので、
プロパティじゃなくてメソッドにすべき

451 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 11:05:59 ]
ケースごとに分けて考えようぜ。

配列の参照自身が書き換わってよい場合。また内容も外部から任意に書き換えることが出来る。
 フィールドをpublicにする。
 単純に配列の参照そのもをプロパティにする。

配列内容が任意のタイミングで書き換わってよい場合。ただし配列の参照自体やサイズが変わることは禁止。
 配列の参照をgetだけするプロパティまたは取得だけの関数を使用する。 >>449はこれ

配列の内容が書き換わるタイミングを管理したい場合。配列の参照やサイズが変わることは禁止。
 インデックサかそれに準じる添え字を引数にした読み書き用の関数を使用する。
 get setのプロパティで予防的コピーを行う。 >>448はこれ


452 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 11:06:58 ]
>>451
>>449はこれ 

>>450の間違い、訂正します。

453 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 12:27:22 ]
今北産業

454 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 12:28:20 ]
インデクサ使ったほうがかっこよくね
vs
ハァ?メソッドでいいだろ

455 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 12:39:08 ]
x.Foo[128] = 123; // 配列プロパティでインデックサみたいなことができるよ〜
int [] f = x.Foo; f[3] = 123; // こんなことや
x.Foo = null;  // あんなことされて平気? ・・・産業




456 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 12:47:21 ]
>>455
や、それが平気じゃないならgetのみにするんではないか?

457 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 12:58:00 ]
配列じゃないがこういうケース、書き換わらないと思ったら値型かよ!
hoge.Point.X = 100;
正解はこちら、めんどくせ〜
hoge.Point = new Point(100, hoge.Point.Y);

>>456
3番目のケースはそれでカバーできるが、2番目のは割り切りが必要かな。






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

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

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