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


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

C/C++ CGIスレッド



1 名前:nobodyさん [04/02/26 08:58 ID:GDAQuNNS]
C言語CGI専用スレッド
pc2.2ch.net/test/read.cgi/php/988918264/

C/C++ CGI 専門のスレッドです。

スクリプトを検索できるサイトです。

cgi.resourceindex.com/Programs_and_Scripts/C_and_C++/
www.cgifiles.com/scripts/cc++/index.shtml

前スレ
pc2.2ch.net/test/read.cgi/php/988918264/

5 名前:nobodyさん mailto:age [04/02/26 10:01 ID:???]
スクリプトを検索

6 名前:nobodyさん mailto:sage [04/02/26 13:43 ID:???]
相変わらず CGIどまりですか?

apache module はやらないんですね…

7 名前:nobodyさん mailto:sage [04/02/26 20:33 ID:???]
次は
C/C++ Webアプリ全般スレッド
かな

8 名前:nobodyさん mailto:sage [04/02/26 20:43 ID:???]
>7
いつになることやら

9 名前:nobodyさん [04/02/27 01:38 ID:qZWWODH+]
>>8
荒れればあっという間

10 名前:nobodyさん mailto:sage [04/02/27 02:32 ID:???]
#include <cgi>

11 名前:nobodyさん mailto:hoge [04/02/27 03:00 ID:???]
#include <2c.h>

12 名前:nobodyさん mailto:sage [04/02/27 10:27 ID:???]
C/C++のネイティブ感がたまらん。

13 名前:nobodyさん mailto:sage [04/02/27 16:32 ID:???]
>>6
そこまで行くとこの板の範疇じゃ無いだろ。



14 名前:nobodyさん mailto:sage [04/02/27 23:40 ID:???]
C++っていいよね。

15 名前:nobodyさん mailto:sage [04/02/27 23:58 ID:???]
前スレからC++がいいと言う人が何人かいますが
そういう人はどんなコンパイラを使っているのでしょうか?

16 名前:nobodyさん mailto:sage [04/02/28 01:47 ID:???]
ふつうにgccじゃないの?

17 名前:nobodyさん mailto:sage [04/02/28 19:52 ID:???]
書くときは VC++ 2003。

18 名前:nobodyさん mailto:sage [04/03/01 00:38 ID:???]
CGI書くのにわざわざVC++使いますか?

19 名前:nobodyさん mailto:sage [04/03/01 10:31 ID:???]
MinGWのGCCは、std::wstring周りがうまくいかない希ガス

20 名前:nobodyさん mailto:sage [04/03/02 18:04 ID:???]
>>13
apache modle で blog とか 掲示板とか をつくったりするなら
web prog じゃないかなって思ったんだけどね

21 名前:nobodyさん mailto:sage [04/03/02 23:32 ID:???]
cのCGI動かす時、apacheの設定どうしてますか?

perlのスクリプトと混在してると
perlに送られてエラー500返されちゃうので困ってます。

22 名前:nobodyさん mailto:sage [04/03/02 23:33 ID:???]
( ゚д゚)ポカーン

23 名前:nobodyさん mailto:sage [04/03/02 23:34 ID:???]
>>21
(゚Д゚)ハァ?



24 名前:nobodyさん mailto:sage [04/03/02 23:47 ID:???]
尋ね方がおかしかったでしょうか。
それとも根本的な勘違いでしょうか。

後者なら出直して参ります。

25 名前:nobodyさん mailto:sage [04/03/03 00:28 ID:???]
スレ汚し申し訳ありません。
”とんでもない勘違い”をしていました。

無事動作致しました。

26 名前:nobodyさん mailto:sage [04/03/09 16:32 ID:???]
CGIに不正入力はつき物だが

その場合戻り値でmainまで報告するか、それともexitを使ってその場で終了か
どっちがいいかの。

27 名前:nobodyさん mailto:sage [04/03/09 18:35 ID:???]
C++なら例外投げるヨロシ

28 名前:nobodyさん mailto:sage [04/03/10 07:03 ID:???]
Cで書いた CGI で画像を表示したいと思ってるんだが、どうもうまく行かない。
鯖は Windows の Apache、C で書いたテキストベースの CGI は問題無く動作してるのだが・・・。

CGI 本体はこんな↓感じ。

infile = fopen( filename, "rb" ); /* もちろんファイルネームは入れてあるよ */
if( NULL != infile ) {
  i = fread( rbuf, 1, SIZE, infile ); /* SIZE は画像ファイルのサイズだよ */
  printf( "Content-Type: image/gif\n\n" );
  setmode( _fileno( stdout ), _O_BINARY ); /* Windows だからこうする(涙) */
  fwrite( rbuf, 1, SIZE, stdout );
  setmode( _fileno( stdout ), _O_TEXT ); /* そして元に戻しておく */
  fclose( infile );
}

で、MIME タイプを書き出す printf だけをやめて、鯖 PC でこの CGI を直に実行して
リダイレクトで画像ファイル作ると、ちゃんと出来てるんだな これが。

呼び出す時は何の変哲も無く img タグによる CGI 呼び出しなんだが、
バッテンしか表示されない・・・。

正直、行き詰まってます。どなたかお助けを・・・。

29 名前:nobodyさん mailto:sage [04/03/10 13:08 ID:???]
>>28
img じゃなくて ダイレクトにそのCGIを呼んだらどうなる?

30 名前:28 mailto:sage [04/03/11 09:03 ID:???]
ごめんなさい呼び出す HTMLが間違ってました吊ってきます・・・

あ、ちなみに上記のよーなソースで、ちゃんと出来ましたですよ。これで Cでも画像出すのはオッケー。

31 名前:28 mailto:sage [04/03/11 09:05 ID:???]
>>29
えとですね、MIMEタイプで imageにしちゃってるんで、imgタグでないと無理です、たぶん。
吐き出してる内容はバイナリなんで、MIMEタイプを textにするってワケにも行きませんし。

32 名前:nobodyさん mailto:age [04/03/11 09:46 ID:???]
MIMEタイプで imageにしちゃってるんで、imgタグでないと無理

33 名前:nobodyさん mailto:sage [04/03/11 10:27 ID:???]
ブラウザのアドレス欄にそのCGIのURL入力でも表示できるだろ。



34 名前:nobodyさん mailto:sage [04/03/11 14:15 ID:???]
>>31
試してみた?

>>32
したっかぶりっこ?

MIMEがついてるんだからこそブラウザ側で判断してくれてちゃんと画像として表示されるよん

35 名前:nobodyさん mailto:sage [04/03/11 14:22 ID:???]
したっかぶりっこ?

36 名前:nobodyさん mailto:sage [04/03/11 14:33 ID:???]
つーか、ブラウザで.gifへのリンクが開けないとでも思っているのか、と。
pc2.2ch.net/ba.gif

>34
>32は晒し上げしているのではないかと。

37 名前:34 mailto:sage [04/03/11 16:01 ID:???]
>>36
ああ 本当だ すまそ >>33

38 名前:28 mailto:sage [04/03/11 19:49 ID:???]
>>29
あ、ダイレクトに、ってのは、ブラウザからって意味ですか・・・。
すみません、思い切り勘違いしてました。
(imgタグでない、他の方法で HTMLに記述しろ、という意味かと思ってました・・・ formとか)

試してませんが、たぶん出来ると思います。>>33>>34>>36さんの言ってる通りではないかと。

お騒がせしたです・・・。

39 名前:sage [04/03/12 01:21 ID:vGYEPhj3]
Web製作版から出直しな

40 名前:nobodyさん mailto:sage [04/03/12 01:22 ID:???]
書くとこ間違えた_| ̄|○

41 名前:nobodyさん mailto:sage [04/03/12 02:23 ID:???]
WindowsでLinux用バイナリを吐くことができる
C++コンパイラってありますか?

42 名前:nobodyさん mailto:sage [04/03/12 08:35 ID:???]
>>41
答えにはならないけど、LiveCD使うといいのでは?
漏れはLinuxユーザだけど、FreeBSDのサーバで動かすために
FreeBSDのLiveCDを使ったらうまくいった

43 名前:nobodyさん mailto:sage [04/03/12 11:09 ID:???]
>>42
FreeSBIEとかいうやつ?



44 名前:nobodyさん mailto:sage [04/03/12 11:36 ID:???]
>>43
livecd.sourceforge.net/
www.freesbie.org/
www.netboz.net/

漏れはひとつめのLiveCDというのを使った
aaacafeで動いてる
libc(?)以外のライブラリは静的リンクにしてある

% ldd hoge.cgi
hoge.cgi:
libm.so.2 => /usr/lib/libm.so.2 (0x28091000)
libc.so.4 => /usr/lib/libc.so.4 (0x280ad000)

linuxだとgccやglibcのバージョンに気をつけて選ぶといいかもしれない

45 名前:nobodyさん mailto:sage [04/03/12 17:02 ID:???]
>>42-44
試してみます。ありがとうございました。

46 名前:nobodyさん mailto:sage [04/03/14 14:00 ID:???]
Lindowsじゃ無理?

47 名前:nobodyさん mailto:sage [04/03/14 14:37 ID:???]
>>46
個々のdistroの詳細は板違いなので
Linux板のdistro比較のスレなどを見たほうがいいかも

とりあえずこのへんをチェック
www.distrowatch.com/
www.distrowatch.com/table.php?distribution=lindows

48 名前:nobodyさん mailto:sage [04/03/14 22:45 ID:???]
CでCGI書くとき、filelockはどうやってます?

49 名前:nobodyさん mailto:sage [04/03/14 23:13 ID:???]
fcntl

50 名前:nobodyさん mailto: [04/03/15 08:03 ID:???]
pc.2ch.net/test/read.cgi/linux/1077124382/221
あのキモヲタがゴリゴリCでCGIを書く時のライブラリを作っているらしい。

51 名前:http:// FLA1Aah099.kyt.mesh.ad.jp.2ch.net/ mailto:girl/23 [04/03/15 09:04 ID:???]
guest guest/98

52 名前:nobodyさん mailto:sage [04/03/16 00:14 ID:???]
>48
mkdir

53 名前:nobodyさん mailto:sage [04/03/16 13:40 ID:???]
flock()



54 名前:nobodyさん mailto:sage [04/03/16 23:46 ID:???]
fcntl(2)
flock(2)
lockf(3)

55 名前:nobodyさん mailto:sage [04/03/18 02:03 ID:???]
resize.plの C版みたいなの知りませんか?
ここ検索すれとか、何か情報キボン。

いちおうググってみたいけど、ロクなのが見つからない・・・ OTL

56 名前:nobody55 mailto:sage [04/03/18 02:04 ID:???]
みたいけど

みたけど

57 名前:nobodyさん mailto:age [04/03/18 17:25 ID:???]
ロクなのが見つからない

58 名前:nobodyさん [04/03/21 00:25 ID:NzuooVWx]
いかりや長介さん、亡くなっちゃいましたね。
ご冥福をお祈り申し上げますです。

59 名前:nobodyさん mailto:sage [04/03/21 00:45 ID:???]
それはいいが
なぜこのスレに書き込んだのかが、大きな問題だ。

60 名前:nobodyさん [04/03/21 00:47 ID:h03qa3k8]
>   【訃報】いかりや長介さん逝去
> すばらしい笑いと、円熟の演技を与えてくれたいかりや長介さ
> んが亡くなりました。
> ご冥福をお祈りします。
>
> なお、現在news系のサーバはアクセス過剰で繋がりにくくなっ
> ています。
> いかりやさんを偲ぶのには以下の板をご利用ください
> live8.2ch.net/livesaturn/
> live10.2ch.net/livevenus/

61 名前:nobodyさん mailto:age [04/04/01 03:11 ID:???]
acpp.sourceforge.jp/
こんなの見つけた

62 名前:nobodyさん mailto:sage [04/04/01 22:19 ID:???]
>>61

説明ド下手糞な気がするんだが

63 名前:61 mailto:age [04/04/01 23:23 ID:???]
>>62
俺もそう思った



64 名前:nobodyさん [04/04/12 09:09 ID:/q6VLnQf]
age

65 名前:nobodyさん mailto:sage [04/04/14 20:29 ID:???]
char AtoH( char c ){

if( ('0' <= c) && (c <= '9') ) return c - '0';
if( ('A' <= c) && (c <= 'F') ) return c - 'A' + 10;

return 0;
}


// 特殊記号を変換する
void form::Escape( char* src )
{
if(src){
char *dst;
for(dst = src; *src; src++ ){
if( *src == '%' )
*dst++ = ( AtoH( *++src ) << 4 ) + AtoH( *++src );

else if( *src == '+' ) *dst++ = ' ';

else *dst++ = *src;
}
*dst++ = '\0';
}
}

URLエンコード文字列をデコードする関数なんですが、
これがVC2003でうまく動かないんです(VC6ではできたのに)。

原因がわかる人がいらしたら教えてください。
VC2003はほとんど初期設定です。

66 名前:nobodyさん mailto:age [04/04/14 20:34 ID:???]
( ゚д゚)ポカーン

67 名前:65 mailto:sage [04/04/15 18:39 ID:???]
自力解決しますた…
お騒がせスマソ…

68 名前:nobodyさん mailto:sage [04/04/17 18:21 ID:???]
なんて過疎

69 名前:nobodyさん mailto:age [04/04/21 16:53 ID:???]
CGI/1.2ドラフトを訳していたのですが、質問です。
cgi-spec.golux.com/cgi-120-00a.html

章8.2 のLocationに関する項目を読むと、絶対URIがスクリプトによって返されると、
サーバは'302 redirect' HTTP応答メッセージを発生させるだろう、とあります。

しかし、302はMoved Temporarilyで、307 がTemporary Redirectになります。
これは誤植と解してよいのでしょうか?

70 名前:nobodyさん mailto:sage [04/04/21 21:33 ID:???]
>>69
スレ違いな気もするけど…。
307コードがHTTP/1.1以降だからでは。

71 名前:nobodyさん mailto:sage [04/04/21 21:54 ID:???]
ああ、このドラフトはHTTP/1.0策定時点のままということか。
了解しました。サンクス。
www.itmedia.co.jp/dict/internet/www/server/03011.html

つーか、ドラフトのまんまでなぜ決定しないんでしょうかね。

72 名前:nobodyさん mailto:sage [04/05/01 20:42 ID:???]
M$が不要と言うから

73 名前:nobodyさん mailto:sage [04/05/02 15:38 ID:???]
1月1日はドラフト記念日



74 名前:nobodyさん mailto:sage [04/05/04 00:34 ID:???]
このスレを活気付かせるにはどうしたらいいものか

75 名前:nobodyさん mailto:sage [04/05/05 01:01 ID:???]
>74 が C/C++ による CGI 用のフレームワークを作成してくださるそうです。

76 名前:nobodyさん mailto:sage [04/05/05 03:48 ID:???]
aprを積極的に利用してみるスレにしたら

77 名前:nobodyさん mailto:sage [04/05/05 21:54 ID:???]
巨大なクエリ来た時にどうするのが王道でしょうか

78 名前:nobodyさん mailto:sage [04/05/06 02:53 ID:???]
無視する

79 名前:nobodyさん mailto:sage [04/05/06 07:13 ID:???]
>>61情報thx。

acpp.sourceforge.jp/
どうもプリプロセッサっぽい感じなんだが、こういう言語仕様に踏み込むもんより、
便利関数ライブラリの方が喜ばれると思うんだがなぁ。

とは言うものの、今困ってるのはサムネ画像生成だけなんで、他はいらんけど・・・。

80 名前:nobodyさん mailto:sage [04/05/06 07:24 ID:???]
>>77

>>78が正解でしょ。
より詳しく書くなら、まず「大量とは、どれだけなのか」を規定し、規定以上のは無視。って事で。

81 名前: ◆Ad8rdfdZgs mailto:sega [04/05/06 18:24 ID:???]
>>65

関係ないが
char AtoH( char c ){
if( ('0' <= c) && (c <= '9') ) return c - '0';
if( ('A' <= c) && (c <= 'F') ) return c - 'A' + 10;
return 0;
}



char AtoH( char c ){
if( ('0' <= c) && (c <= '9') ) return c - '0';
if( ('A' <= c) && (c <= 'F') ) return c - 'A' + 10;
if('a'<=c)&&(c<='f')) return c-'a'+10;
return 0;
}

EzWeb機が%ffみたいに送ってくるから、後々のためにもこの方が。

>>77
if(atoi(getenv("CONTENT_LENGTH"))>=1024000) return 0;
char *buf = new char[atoi(getenv("CONTENT_LENGTH"))+1];
//あとは好きにしる

delete [] buf;

82 名前:65 mailto:sage [04/05/06 18:38 ID:???]
>81
あるんだそういうの
サンクス


ちなみに
*dst++ = ( AtoH( *++src ) << 4 ) + AtoH( *++src );



*dst = AtoH(*++src) << 4;
*dst = AtoH(*++src);
dst++;

にしたらうまくいったんすよ
なんかやっぱMSだなと思た

83 名前: ◆Ad8rdfdZgs mailto:sage [04/05/06 18:59 ID:???]
>>82
dstの位置変わってないから
*dst = AtoH(*++src) << 4;
の意味がなくなってる気もするんだが。

*dst = AtoH(*++src) << 4;
*++dst = AtoH(*++src);
dst++;
とでもしないと、dstに下位4ビットだけを突っ込んでる気がしてならないんだが。



84 名前:nobodyさん mailto:sage [04/05/06 20:02 ID:???]
*dst += AtoH(*++src);
だた


85 名前: ◆Ad8rdfdZgs [04/05/06 21:54 ID:mtQhCRig]
>>84
あ、漏れの書いたのが間違ってた・・
こっちのほうがまずいw

納得

86 名前:nobodyさん mailto:sage [04/05/06 23:36 ID:???]
>>77
エラートラップ。

>>82
> *dst++ = ( AtoH( *++src ) << 4 ) + AtoH( *++src );
二箇所の*++srcのどちらが先に処理されるかは未定義。

87 名前:nobodyさん mailto:sage [04/05/07 02:51 ID:???]
>>65>>82

>>86も言ってるが、今はコンパイラが働き者だから、1行で済ます必要は無いと思うぜ・・・。
恥を忍んで言うが、漏れが *dst++ = ( AtoH( *++src ) << 4 ) + AtoH( *++src );  こんなの書こうとしたら、
数行になってしまう。でも間違いにくいから良いんだと思ってる。勝手に。

副作用とかいちいち憶えてらんないし・・・マクロ書く時に苦しむのもやだし。

88 名前:nobodyさん mailto:sage [04/05/07 09:40 ID:???]
>>87
いいこといった。

89 名前:nobodyさん mailto:sage [04/05/09 14:01 ID:???]
>65
>なんかやっぱMSだなと思た

自分のバグを他人のせいにするな。


90 名前:65 mailto:sage [04/05/09 16:10 ID:???]
ごめn

91 名前:nobodyさん [04/05/23 22:40 ID:Mos9rAOM]
なんだかどうも、プログラムの引数に「=」の文字を入れると動作がおかしいのです。

というのは、
たとえば Perl の CGI で
 test.cgi?a=5
とすれば、$ENV{'QUERY_STRING'} の中身は "a=5" になるのに、

C で作った CGI (printfするだけのモノ) だと
 test.cgi?a=5
としても、main(int argc,char *argv[]) の argc が 1 で引数が受け取れてないのです。
test.cgi?a5
とすれば、argc は 2 になって、argv[1] の中身が "a5" になるのですが。

そういうわけで引数に「=」を使えない理由と対処をキボン願います。


92 名前:91 mailto:sage [04/05/23 22:43 ID:???]
ちなみに、自宅サーバで
Apache HTTP Server 2.0.49
を使ってます。Apacheの設定に問題があるのかな…


93 名前:nobodyさん mailto:sage [04/05/23 22:58 ID:???]
釣り…か?

Perlの$ENV{QUERY_STRING}に相当するものはstdlib.getenv("QUERY_STRING")なわけだが。



94 名前:nobodyさん mailto:sage [04/05/23 23:31 ID:???]
別にC言後とは関係ないけど引数で処理したかったら

hoge.cgi?-hoge+true+-fuga+false
などとすれば

./hoge.cgi -hoge true -fuga false
こうなる

あとはgetopt(3)でも使えばオプションの処理ができるかな
まあ一般的ではないな

95 名前:nobodyさん mailto:sage [04/05/24 15:40 ID:???]
>>91
Cで作る CGI プログラムは、普通のコンソールアプリと基本的には同じだが、
main関数でもらえる「引数」と、CGI で渡される「引数」は、全くの別物だ。

main関数の「引数」は、コマンドラインで与えられるものだが、CGI の方は
サーバから環境変数を経由して与えられる。なので>>93が言ってる事を試してみそ。

>>93
釣りにしてはあまりにあまりな・・・・なので、さすがに釣りではないと思うよ。

96 名前:91 mailto:sage [04/05/24 23:40 ID:???]
>>93-95
なる。基本的なところを忘れてました。環境変数でしたね。
getenvでできましたです。ありがとうございました。


97 名前:nobodyさん mailto:sage [04/05/24 23:58 ID:???]
>>96
(・∀・) オメデトウ!コレカラモガンガッテイコウ!

98 名前:nobodyさん mailto:sage [04/05/25 09:45 ID:???]
POSTの場合は?
ってゆうかそのあたりも含めて楽になるperlのCGIモジュールみたいなのとかあるんでしょうか?


99 名前:nobodyさん mailto:sage [04/05/25 13:14 ID:???]
POSTはstdinから。
aprとか使えば少しは楽になるかも
apr.apache.org/

100 名前:nobodyさん mailto:sage [04/05/25 17:05 ID:???]
GETも POSTも、環境変数渡しという点ではほとんど同じ。POSTの方がちょっぴり手間が多いだけ。

POSTの場合は、環境変数 CONTENT_LENGTHに、POSTされた文字列長が入っているので、
そのぶんだけ stdinから読み込む。簡単に書くとこんな感じ。

int i;
char * env_p;

env_p = getenv( "CONTENT_LENGTH" );
if( NULL == env_p ) {
 /* 何もないです */
}
else {
 for( i = 0 ; i < atoi( env_p ) ; i ++ ) {
  /* ここで getchar とかする */
 }
}

こういう定型処理をラクにするライブラリとかは、いろいろ出回ってるから探すが吉。

101 名前:nobodyさん mailto:sage [04/05/28 21:45 ID:???]
自分もその辺気になりつつも資料見つけられず躊躇してたんですが
挑戦してみようと思います。

/*ただスクリプトの時にはあまり気にしなかったメモリ管理とか不安もあります。
何かしら”C/C++ゆえに気をつけるべき事”とかあるんでしょうか?*/

102 名前:nobodyさん mailto:sage [04/05/29 10:51 ID:???]
C++はあまり詳しくないが、Cについて気を付けるべき事はたくさんありすぎて、とてもここでは書ききれないがな。
漏れが言えるのはこれくらい。レベル的にバラバラの事書いててスマソ。

・取得したメモリリソースは必ず解放せよ
・変数の型には気を付けすぎるくらい気を付けよ(ロジック調べても分からんバグの原因になる)
・ポインタは理解して使え
・コンパイルするので、変数名は長くてもいい、分かりやすいものを!
・同じ理由で、コメントもしつこく書け
・同じ理由で、短く書こうとするな(バグの原因になる事がある)
・1つの関数を長くしすぎるな
・==演算子で定数と変数を比較する時は、定数を左辺に書け(間違って=にしてもすぐ分かる)
・プログラムテストは慎重に細心に、完璧を目指せ


103 名前:nobodyさん mailto:sage [04/05/30 01:08 ID:???]
C++でも入出力系はstdioのほうがやり易いと思う
小さいし



104 名前:nobodyさん mailto:sage [04/05/30 05:37 ID:???]
>>101
Cなら文字列操作とメモリ管理のライブラリをどこかから調達するか、
自作してから取り掛かった方がいいよ。
バッファオーバーフロー対策が一番面倒だから。

105 名前:nobodyさん mailto:sage [04/05/31 18:03 ID:???]
perlとかにあるsplit関数に当たるものがあると便利






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

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

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