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


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

おまいら最強のリバーシプログラムしてみろよ part2



1 名前:デフォルトの名無しさん [2007/01/22(月) 06:13:18 ]
まずBearRevのDLLを作る
そして世界最強っぽいリバーシプログラムWZebraを倒すスレ
期間は三ヶ月以内で頼む
どんどんアイデアとプログラムを頼む

本格的リバーシ BearRev
www.vector.co.jp/games/soft/dl/win95/game/se098822.html

最強っぽいリバーシプログラムWZebra
www.radagast.se/othello/download.html

姉妹スレ おまいら最強の将棋プログラムしてみろよ part5
pc8.2ch.net/test/read.cgi/tech/1109307327/l50

459 名前:デフォルトの名無しさん mailto:sage [2007/01/30(火) 17:09:07 ]
>>456みたくソースにもコメントつけてくれ

460 名前:デフォルトの名無しさん mailto:sage [2007/01/30(火) 17:12:39 ]
みんなに自分の考えを伝える気が無いなら延々と一人でデバッグしとけば?

461 名前:デフォルトの名無しさん mailto:sage [2007/01/30(火) 17:15:46 ]
とりあえずaddress();消してみてるに100ペソ

462 名前:1 [2007/01/30(火) 17:19:59 ]
自己解決するしかないか...
コメントつけたとしても、それで伝わるとは限らないんですよ
全体をまんべんなく伝えきらなければ伝わらないと思うんです

463 名前:デフォルトの名無しさん mailto:sage [2007/01/30(火) 17:21:35 ]
試しもしないで何適当な事言ってんだか
人に伝えるのがそんなに面倒か?

464 名前:1 [2007/01/30(火) 17:22:32 ]
mt()ルーチンにだけコメントつけてみますね
ちょっとまってて下さい

465 名前:デフォルトの名無しさん mailto:sage [2007/01/30(火) 17:23:13 ]
伝わるとは限らないが、コメントはつけろ
まずはそれからだ

466 名前:デフォルトの名無しさん [2007/01/30(火) 17:29:40 ]
コメントをつけると伝わる可能性がちょっとは増えると思うけどな。
と言っても3%くらいだけど。

まずはハッシュの計算以外の関数をコメントアウトしろ。
それでハッシュ値が正しかったら、コメントアウトしたとこに原因がある。
徐々にコメントアウトを解除していって、絞り込んでいけ。

467 名前:1 [2007/01/30(火) 17:31:02 ]
void mt(){
BB:  //ラベル
s=t+u; // s = 現在の指し手 + 読みの深さ
x=ad[s]; // 読み位置のアドレス
if(te[5*x]<=128){z=64;te_add();} //手が壊れいたら新規に登録
tu=te[5*x+3]; //指し手の記録総数

if(tu==0){  指し手が0ならば
if(td==1){ ・・・ }  2度指し手が0なら勝敗を記録
else{ ・・・ } 1度指し手が0ならパスで指し進める
}

cn=te[5*x]&63; //現在の手の読み位置
z=te[5*x+3+cn]; //現在の手
situ(); //取れるコマを出す

if(sit[0]==masu[s][ch(F)]){ ・・・ } //すべてのコマが取れるなら勝敗を記録

if((masu[s][0]+masu[s][1])>=63){ ・・・ } //残りのマスが1つだけなら勝敗を記録

if(ha[u]==1){ ・・・ } //手を戻してやってきたとき
hmove();adress(); //手を進めてやってきたとき

FF:;
if(te_deteru)w=tu-1; else w=tu+3; //現局面の手がすべて出ているとき
kar[u+1]=kar[u]+rt[w][cn-1]; //確率の計算(対数を使う)
if((kar[u+1]<0) && (kar[u+1]<lg*(hash[p].k-1))){ //確率が残っていて、まだ指し進めていないとき
hash[p].k=1+(int)(kar[u+1]/lg);move();goto BB;}



468 名前:デフォルトの名無しさん mailto:sage [2007/01/30(火) 17:35:09 ]
( ゚д゚)ポカーン

469 名前:1 [2007/01/30(火) 17:38:13 ]
続き

LL:; //ラベル
if(hash[p].b==N){gote_hyoka();hash_bset(p,y);y=N+1-y;} //後手の評価が未登録ならば評価関数を使って値を記録
else{y=N+1-hash[p].b; //後手の評価が計算済みならばそれを使う
if(y==N+1){・・・} yがN+1ならば先手の勝ち、勝敗を記録する
}

if(y>te_max(x))te_change(); yが記録されている最大値より大きいならば手を交換して値を記録する

if(cn>=tu){ //手のカウントが、手の総数以上のとき
te_add(); //手を追加する
if(z==97){y=te_max(x);hash_bset(x,y);te[5*x]=129;remove();}} //手が追加出来ないときは最大値を、上のルートに記録して手を戻す(βカットというもの?)

if(y>g){if(y>hash[x].a)hash_aset(x,y);te[5*x]++;remove();} //yが予想評価値を超えたなら、それを上のルートに記録して手を戻す(αカットというもの?)

cn++;te[5*x]=128+cn;z=te[5*x+3+cn];situ();hmove();adress();goto FF; //αカット、βカットもおこらないならば次の手を調べる
}

470 名前:デフォルトの名無しさん mailto:sage [2007/01/30(火) 17:41:26 ]
ダメだこりゃ。。。

471 名前:デフォルトの名無しさん [2007/01/30(火) 17:42:02 ]
ごめんなさい。期待した俺が悪かったです。もうスパゲティーはたくさんです。

472 名前:1 [2007/01/30(火) 17:42:05 ]
>>461>>466
わかりました
やってみます

473 名前:デフォルトの名無しさん [2007/01/30(火) 17:42:42 ]
フローチャート書いてくれね?200倍わかりやすいと思う。

474 名前:1 [2007/01/30(火) 17:47:53 ]
わかりました
フローチャート書いてみます

475 名前:デフォルトの名無しさん mailto:sage [2007/01/30(火) 17:52:47 ]
お前ら釣られ過ぎ。
小学生の相手してても仕方ねーべ。

476 名前:1 [2007/01/30(火) 18:28:06 ]
フローチャート自動作成ツールはありませんかね?

477 名前:デフォルトの名無しさん mailto:sage [2007/01/30(火) 18:38:47 ]
>>BB:  //ラベル

こんな馬鹿なコメントは無いぞw
盤面の初期化とかもっとブロックを表すにふさわしいコメントつけろよw



478 名前:デフォルトの名無しさん mailto:sage [2007/01/30(火) 18:39:27 ]
>>467-469
1.ラベルのコメントは、そこからどんな処理をするルーチンが始まるのかを示せ。「//ラベル」は無意味。
2.概要として「αカット、βカットも…」の様な書き方は構わないが、変数名や定数が何を意味しているか分からないのでその詳細が不明。
3.何度もいわれていることではあるが、文ごと(ザックリ言うと;ごと)に改行すべし。
4.変数の使い回しみたいにコメント中の「差し手」も複数の意味で使い回してる?

479 名前:デフォルトの名無しさん mailto:sage [2007/01/30(火) 18:41:26 ]
フローチャートは廃れた。

箇条書きの日本語に流れを書け!
いまはこちらが主流。

480 名前:デフォルトの名無しさん [2007/01/30(火) 18:42:39 ]
初心者って絶対やるよな。

var = 1 + 1;//計算したものをvarに代入

とか意味の無いコメントw
まぁ、必ず通る道だと思うけどな

481 名前:デフォルトの名無しさん [2007/01/30(火) 18:44:38 ]
>>476
べつにそこまでちゃんと書かなくていい。
コメント書かないならどういう流れで処理をしたいのか、それがわかればいいんだから、
手書きで紙に書いてうpでもいいくらい。

とりあえず処理を順番に箇条書きで

482 名前:デフォルトの名無しさん mailto:sage [2007/01/30(火) 18:57:18 ]
//αカット、βカットもおこらないならば次の手を調べる
とあるので、上のif文見たけど分岐してない?
よく見るとremove()内で分岐している…

このような書き方は避けるべきだ。
制御構造が分かりづらい。

483 名前:デフォルトの名無しさん mailto:sage [2007/01/30(火) 18:59:05 ]
というよりもGOTO&ラベル使うな!

484 名前:デフォルトの名無しさん mailto:sage [2007/01/30(火) 19:42:30 ]
そうじゃない、コメントとソースはもういい

まずはアルゴリズムとか処理の流れを日本語で説明するんだ。

485 名前:1 [2007/01/30(火) 19:53:21 ]
186行目あたりが間違えてました

if((hash[x].h==y) && (k==w)){ad[s+1]=p;break;}
ではなくて


if((hash[p].h==y) && (k==w)){ad[s+1]=p;break;}
でした

486 名前:デフォルトの名無しさん mailto:sage [2007/01/30(火) 19:53:56 ]
コンパイルして逆アセンブルしてからのが読みやすいかもしれん

487 名前:デフォルトの名無しさん mailto:sage [2007/01/30(火) 20:01:04 ]
スパゲッティをコンパイルしてもスパゲッティしか吐いてくれんよ



488 名前:デフォルトの名無しさん [2007/01/30(火) 20:04:16 ]
最適化できないような絡み方してそう

489 名前:デフォルトの名無しさん mailto:sage [2007/01/30(火) 20:07:13 ]
ところで、part2になっても期間は三ヶ月以内なのか?
いつまでたっても〆切が来ないぞ

490 名前:デフォルトの名無しさん mailto:sage [2007/01/30(火) 22:03:21 ]
いい勝負しそうじゃね?
ttp://www0.us.ioccc.org/main.html


491 名前:デフォルトの名無しさん mailto:sage [2007/01/31(水) 00:17:32 ]
いきなりプログラム書かずに、日本語で書いてアルゴリズムを整理するべきだろ

492 名前:デフォルトの名無しさん mailto:sage [2007/01/31(水) 00:50:37 ]
>>491
1はそれで失敗してるんじゃなかったっけ?

493 名前:デフォルトの名無しさん mailto:sage [2007/01/31(水) 00:58:29 ]
お前ら、難読可ツール通したソースに何マジレスしてるんだ?





494 名前:デフォルトの名無しさん mailto:sage [2007/01/31(水) 01:11:08 ]
>>491
イメージをつかむため、
ダイアグラムなどを使ってマインドストーミングして、
仕様を日本語で書き、
仕様記述言語で書き、
プログラムを書き、
検証ソフトを使って検証するんだよ

495 名前:デフォルトの名無しさん [2007/01/31(水) 02:18:32 ]
面白い・・・

496 名前:デフォルトの名無しさん mailto:sage [2007/01/31(水) 04:57:48 ]
C言語初心者のもれも参戦。途中でやめるかも知れないが、生暖かく見守ってくれ。

497 名前:デフォルトの名無しさん mailto:sage [2007/01/31(水) 05:16:12 ]
さらに混乱の要素を増やすというのかw
がんばってかき回してくれ



498 名前:デフォルトの名無しさん mailto:sage [2007/01/31(水) 06:55:03 ]
>>496
君のような人が現れるのを待ってた
応援するよ

499 名前:デフォルトの名無しさん mailto:sage [2007/01/31(水) 11:31:49 ]
みんな、違うぞ

日本語で書いたアルゴリズムを、このスレで後悔しろと言っているんだよ

500 名前:デフォルトの名無しさん mailto:sage [2007/01/31(水) 12:10:06 ]
既に紙の上にはまとめてあるって言ってたよね?

501 名前:デフォルトの名無しさん [2007/01/31(水) 12:14:13 ]
バグが出ました



アルゴリズムとかかけ



バグ直りました


この流れから、アルゴリズムとか書けって言われたのは、バグ直すためだとおもってるんじゃね?
だから書かないんじゃね

502 名前:デフォルトの名無しさん mailto:sage [2007/01/31(水) 12:27:12 ]
能力が無いのに努力しないで言い訳ばかり
人とコミュニケーションが全くできない
自分の間違いを指摘されても正さない
人を見下している
平気で嘘をつく
1を見てるとイライラするね

503 名前:デフォルトの名無しさん mailto:sage [2007/01/31(水) 12:29:21 ]
1は小学生か幼稚園児だろ
大目に見てやれよ

504 名前:デフォルトの名無しさん mailto:sage [2007/01/31(水) 12:35:18 ]
まあ、>>1が小学生であろうと幼稚園児であろうと一向に構わないが、
とりあえず公の場でやると宣言したからには必ずやり遂げてもらわないと。
公の場で発言することの重要性を身をもって知ってもらわないとね。

とりあえず、>>1は毎日進行状況を全員に解るように報告しなさい。

505 名前:デフォルトの名無しさん mailto:sage [2007/01/31(水) 12:44:58 ]
>>496
本気ならトリ付きで。

506 名前:デフォルトの名無しさん mailto:sage [2007/01/31(水) 13:00:19 ]
>>496
1と同じ事されるのはごめんだけどやめても別に責めないよ
ところでC言語はどれくらい勉強したの?

507 名前:デフォルトの名無しさん mailto:sage [2007/01/31(水) 13:00:41 ]
誰か、1 に見本として見せられるような、日本語の良コメントのついたソース知らない?



508 名前:デフォルトの名無しさん mailto:sage [2007/01/31(水) 13:02:52 ]
どうせ見ないんじゃない?
論文教えても見なかった前科があるし

509 名前:デフォルトの名無しさん mailto:sage [2007/01/31(水) 13:13:08 ]
homepage1.nifty.com/~takaot/prprpr/comment.html
ja.wikipedia.org/wiki/%E3%82%B3%E3%83%A1%E3%83%B3%E3%83%88_(%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF)
homepage2.nifty.com/cat-chy/cp/how_to_write_comment.html
コメントの書き方でとりあえずこの辺りは参考になると思う

510 名前:デフォルトの名無しさん mailto:sage [2007/01/31(水) 17:12:44 ]
何この1www
プログラムも人間性もカスじゃんww

511 名前:デフォルトの名無しさん mailto:sage [2007/01/31(水) 17:21:59 ]
>>510
アルゴリズム・理論もね

512 名前:デフォルトの名無しさん mailto:sage [2007/01/31(水) 22:51:46 ]
>>1どこいった

513 名前:デフォルトの名無しさん mailto:sage [2007/01/31(水) 23:44:34 ]
今北産業

514 名前:デフォルトの名無しさん mailto:sage [2007/02/01(木) 01:22:37 ]
>>1最強のアルゴリズムできた→
goto多用、変数不明、コメントなしのスパゲッティ→
>>502>>1を温かく見守るスレ

515 名前:デフォルトの名無しさん [2007/02/01(木) 05:18:41 ]
プログラムよりプログラマがおもしろい

516 名前:デフォルトの名無しさん mailto:sage [2007/02/01(木) 09:09:46 ]
無能な1とそれに翻弄される住人達

517 名前:デフォルトの名無しさん mailto:sage [2007/02/01(木) 14:46:59 ]
>>1は準アニータ



518 名前:デフォルトの名無しさん mailto:sage [2007/02/01(木) 16:21:14 ]
ここ落ちてた?

519 名前:デフォルトの名無しさん mailto:sage [2007/02/01(木) 16:22:04 ]
2ch全部ね

520 名前:デフォルトの名無しさん mailto:sage [2007/02/01(木) 17:01:42 ]
電源工事だよ

521 名前:496 ◆8VT5lt6VLs mailto:sage [2007/02/01(木) 22:27:06 ]
>>498
ありがとう。期待に沿えるかわからないが。

>>505
いまのところ本気。

>>506
どう答えればいいのかな・・・。1のソースが理解できないぐらい。

522 名前:デフォルトの名無しさん mailto:sage [2007/02/01(木) 22:33:15 ]
>>521
1のソースは読まないほうがいいよ。
あれは悪い例だから決して真似しちゃだめだよ。

523 名前:デフォルトの名無しさん mailto:sage [2007/02/01(木) 22:35:23 ]
>>521
何か読んでる本とかサイトはある?
変数宣言とか条件分岐やループはわかる?
キーボードやファイルの入出力は?

524 名前:496 ◆8VT5lt6VLs mailto:sage [2007/02/01(木) 22:57:41 ]
>>522
了解しますた。

>>523
制御文、ポインタ、関数、構造体あたりは理解できます。
逆にキーボードやファイルの入出力が怪しい・・・。
よく見るサイトは
ttp://wisdom.sakura.ne.jp/

525 名前:デフォルトの名無しさん mailto:sage [2007/02/01(木) 23:07:20 ]
なるほど。
そこのC言語入門は一通り読み終えたのかな?
じゃあまず8x8マス分の黒・白・空の情報を持つ盤と
座標を引数として渡せば盤の石を返す関数を作ってみて。
まずは正しく動くように気をつけて書く

526 名前:デフォルトの名無しさん mailto:sage [2007/02/02(金) 01:35:55 ]
なんか面白そうだな
がんがれ>>496

527 名前:デフォルトの名無しさん [2007/02/02(金) 03:34:50 ]
期待age



528 名前:496 ◆8VT5lt6VLs mailto:sage [2007/02/02(金) 12:03:56 ]
できますた。突っ込み待ってまつ。
ud.gs/300hs
パスは鳥

529 名前:デフォルトの名無しさん mailto:sage [2007/02/02(金) 12:07:50 ]
>>528
おつ。
言われた以上の事をやってるな。
けっこうできるんじゃん。

530 名前:デフォルトの名無しさん mailto:sage [2007/02/02(金) 13:01:22 ]
既存のオセロプログラムのソースとか>>7のリンク先とかは読んだ事ある?
なんだか読んだ事がありそうっていうか多少知識がありそうな書き方だね。

531 名前:デフォルトの名無しさん mailto:sage [2007/02/02(金) 13:11:21 ]
>>528
パス付きはやめれ
up2moe.moe.hm/img/q564.zip

532 名前:デフォルトの名無しさん mailto:sage [2007/02/02(金) 13:19:26 ]
>>531
なぜパス付きはだめ?
このスレ見てればわかるのに

533 名前:デフォルトの名無しさん mailto:sage [2007/02/02(金) 13:26:32 ]
専ブラで右クリック即保存が出来ない。
逆になんでパス無しではだめ?

534 名前:デフォルトの名無しさん mailto:sage [2007/02/02(金) 13:44:42 ]
そんなのアップする人の自由

535 名前:デフォルトの名無しさん mailto:sage [2007/02/02(金) 13:54:04 ]
じゃあ聞き方を変えよう。なぜパス付きにしたいの?
特に理由が無いなら >533 とかの事情もあるし、配慮してくれればうれしいのだけど。

536 名前:1 [2007/02/02(金) 13:58:59 ]
思考ルーチン以外のバグが特定できないため一から作り直します

537 名前:デフォルトの名無しさん mailto:sage [2007/02/02(金) 14:03:59 ]
>>535
本人に聞けよ



538 名前:デフォルトの名無しさん mailto:sage [2007/02/02(金) 14:08:59 ]
>>535
いずれにしても直リン禁止のアップローダが多いと思うのだけど。

それはさておき、このまま>1が「最強の嗜好ルーチン」とやらを完成させるのと、
>496がみんなの支援を受けつつ充分強いプログラムを完成させるのと、
どっちが見込みある……かは>536が本人かどうかに関わらず明らかだね。

539 名前:デフォルトの名無しさん mailto:sage [2007/02/02(金) 14:33:03 ]
>>536
お前もうイラネ

540 名前:デフォルトの名無しさん mailto:sage [2007/02/02(金) 16:02:21 ]
>>528
なかなかいいね
この調子で頑張って

541 名前:デフォルトの名無しさん mailto:sage [2007/02/02(金) 16:10:42 ]
>>528
探索をするためには盤面を戻す操作も必要だから次はまずこれを実装してね。
ここでコピー方式と差分方式がある。差分がいいと思うけど。
既にやってたりもっと行けそうだと思ったりしたら進みたいとこまで進んでいいよ。

542 名前:デフォルトの名無しさん mailto:sage [2007/02/02(金) 16:14:13 ]
ここで衝撃の事実、>>1=>>496、が明かされる

543 名前:デフォルトの名無しさん mailto:sage [2007/02/02(金) 16:18:27 ]
それは俺もちょっと思ったけど。
別人でしょ。

544 名前:1 [2007/02/02(金) 17:45:16 ]
なかなかうまくいかないので、関数の入出力と、それを確認するプログラムを
始めに作ることにする

545 名前:デフォルトの名無しさん mailto:sage [2007/02/02(金) 17:47:01 ]
お前誰?
誤爆?

546 名前:デフォルトの名無しさん mailto:sage [2007/02/02(金) 18:13:12 ]
>>544
一つ一つの関数を検査する時には仕様どおりに動いても、グローバル変数を使い回す限り、
他の関数と組み合わさった時に認識困難で追跡困難、修正困難なバグがいくつも出てくるよ。

547 名前:デフォルトの名無しさん mailto:sage [2007/02/02(金) 18:33:42 ]
1が作る限り確認プログラムにも必ずバグが入る



548 名前:デフォルトの名無しさん mailto:sage [2007/02/02(金) 18:47:57 ]
test


549 名前:496 ◆8VT5lt6VLs mailto:sage [2007/02/02(金) 19:02:09 ]
>>529,540
ありがとう。そう言ってもらえるとうれしい。

>>530
>>1,7の日本語のページはどれも読んだことあります。英文はどんどん後回しに・・・。
ソースは Thell と Zebra をちらっと見た程度でつ。

>>531
このスレ見てない人に見られるのはちょっと抵抗が・・・。

>>538
そのためにはまだ知識不足なもよう(´・ω・`)

>>541
いま作ってる方法だと、1回分の着手場所と差分を記録するだけで10ワードにもなるんだ。
このどんぶり勘定が後々響いてきそうな悪寒。もっかい検討してみます。

>>542,543
スレへの出現の仕方とか似てますね。いや、別人ですが。


550 名前:デフォルトの名無しさん mailto:sage [2007/02/02(金) 19:35:02 ]
>>549
着手場所と、それぞれの方向への反転個数だけ記録すればでいいのでは。
どの方向も0〜6までの値しかとらないので、構造体にしてビットフィールド指定すれば
3bit*(8+2)=30bit = 1dword で済む気がする。

551 名前:デフォルトの名無しさん mailto:sage [2007/02/02(金) 21:07:15 ]
ダウンロードができないよ。

552 名前:デフォルトの名無しさん mailto:sage [2007/02/02(金) 21:32:51 ]
俺も>>528が落ちない
うpろだ死んでる?

553 名前:デフォルトの名無しさん mailto:sage [2007/02/02(金) 21:34:44 ]
>>1のソースと比べると雲泥の差だな

554 名前:デフォルトの名無しさん mailto:sage [2007/02/02(金) 21:39:30 ]
>>551-552
>>531 にコピーがある

555 名前:デフォルトの名無しさん mailto:sage [2007/02/02(金) 22:24:38 ]
>>554
サンクス。
落とせた。

556 名前:デフォルトの名無しさん mailto:sage [2007/02/02(金) 23:58:45 ]
レジスタ使わないほうが速いな。

Core2は同時に使用するレジスタ数が少ないと非常に高いパフォーマンスを発揮する。
しかしレジスタ数が増えるとパフォーマンスは劇的に低下する。
整数レジスタが3個+メモリ参照が1個+条件分岐命令が1個の場合、5命令同時に
1クロックで実行を完了する。しかし整数レジスタへのアクセスが1つ増えると処理に
かかるクロックが1クロック増加する(すなわち性能が半分になる)。

557 名前:デフォルトの名無しさん mailto:sage [2007/02/03(土) 00:04:26 ]
>>556
その手の話題はこちらへどうぞ

x86命令の所要クロック計測スレPart3
pc10.2ch.net/test/read.cgi/tech/1168399966/



558 名前:1 [2007/02/03(土) 00:53:47 ]
オセロだけではなく、将棋、囲碁プログラム再生用のチェックプログラムを
作ってやるぜ!これでみなさん作成がらくになりますよ

559 名前:1 [2007/02/03(土) 00:55:41 ]
作成でした






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

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

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