kr_ryo 徒然日誌 <2003年11月16日分>

三國志製作記39〜完敗または迂回(--;〜

秋ですね〜と言いたいところですが、なぜかあったかいです(^^;去年ならこちらは紅葉が見頃だった頃のはずなんですが、今年は小春日和が延々続いているようです。このあったかさのせいではないでしょうが、三國志製作は泥沼にはまってます(T-T)いつからの泥沼かなと思ったら、先月頃の話題から全然進んでないじゃないですか!(ToT)そう考えると、一月くらい、同じ問題でぐるぐる〜ぐるぐる〜まわってたことになりますね(ToT)あ〜あ、そりゃしんどいわ(^^;

何が問題かというと、インターネットプロバイダに接続できないことと、三國志の軍団結成のための武将選択リストの挙動不審(--;

まず、インターネットプロバイダ。じぇんじぇん接続できない状態が先週まで続き、先週はとうとうほんとに〔月曜プログラマーの部屋〕になってしまいました(T-T)日曜25時とかではなく、日曜30時とかですからねえ〜日曜ではないですねえ〜(--;)あやうく仕事に遅刻しかけました(T-T)

それにしても、どのエラーどのエラーも、単にサーバーに接続できない、というわけではなく、電話はつながっているものの、サーバーへ接続するための条件としての「PPP制御プロトコルに同意できません」というエラーで、接続がタイムアウトで切れた、という感じのようです。それにしても、どんな条件だろう?

色々Windowsのヘルプを探ってみてもいまいちはっきりしないものの、ネットワークの設定の、「単一リンク接続でマルチリンクのネゴシエーションを有効にする」というのをオフにして、さらにファイアーウォールをオフにして、ようやく普通に接続することができました(^O^)この、マルチリンクのネゴシエーション、という設定についてのヘルプで、リモートアクセス サーバーに接続できない可能性がある、という点が今回の状況に似ていたので、もしや?、と思っていましたが、まさにこれが原因だったようです(~_~;この設定、ウィザードを使った設定では勝手にオンにされ、私のプロバイダのlivedoorのオンラインヘルプでも、なんにも注意が書かれていません。

さらに、ファイアーウォールが起動していると、これまたつながりにくくなります。つながってからファイアーウォールを起動させればいいんですが、MSブラスト系のウィルスが怖いですねえ〜まあ、つながらなきゃどうしようもないのでこれは仕方がないですね(;_;)ファイアーウォールも、使いましょうという指導がなされているのに、使っているとつながらない、というのもなあ…(--;)

結局、livedoorのサーバーは、マルチリンクの交渉(ネゴシエーション)を拒否し、ファイアーウォールでこちらの状況もよくわからなかったため、接続しなかったんでしょう。ううむ、2年前から状況は変わってないのになあ(^^;急に契約を打ち切られた下請け企業という感じ?(T-T)

とまあ、設定を変えたおかげでとりあえずなんとか今週からは大丈夫な気がします(^o^)十分試したわけではないですが、まあ、何度か試した感じでは、平均して40kbpsを超えているし、結構いけそうです。それにしてもここら辺のネットワークの設定については、やっぱしいまいちわかりにくいですねえ〜(*_*)

さて、ひとつ何か月かぶりの懸案を解決したものの、もうひとつの懸案もなかなか手ごわい!(*_*) 三國志製作の軍団結成のための武将リストの挙動不審という問題です。

この間何度か紹介しているものの、先のネットワークの設定同様、書いている私がいまいちわかっていないので、説明内容もはっきりしない感じです。ただ、やりたいことは単純です。これがなぜかうまくいかない…(T-T)ここで再び述べてみましょう。

まず、新軍団結成コマンドが選択されれば、軍団の総大将となれる武将リストを表示し、ユーザがそのうち一人をクリックします。その際クリックした武将を軍団総大将にしますか?というダイアログを表示し、はい、なら、次に、軍団に加入できる武将リストを表示し、複数選択した上で、決定ボタンを押します。そうすると、軍団内の役割(副将など)を決定したり、軍資金を分け与えたりする画面に移る、とまあこんな感じです。

以前、K君が苦心惨憺(?)した不具合は、最初の総大将の選択のためのクリックで、クリックした際に生じさせる続きの処理が、なぜか2回繰り返されてしまう、というものでした。K君が1行づつ挙動を確認して、なんとか見だした原因は、リストを「クリックした」ことそのものと、リスト表示を総大将候補から軍団参加者候補に書き換えた際に、先程の「クリックの結果」表示させる予定の帯を表示することのそれぞれが、それぞれとも「クリックされた」という情報になってしまい、処理が行われるということでした。

前半はともかく、もちろん後半は不要な結果です。そこでこれを回避しないといけません。本来1度だけ処理は行われてリストの役割は終了なのですが、私の行いたい処理は、同じリストを使い回しして別の処理を行おうというものです。まあ、結果としてはこれが間違っていました(*_*)

K君が行った回避策は、2回クリックされたことになるということを前提に、1回目のクリックされたという処理に、2回目には1回目の処理には行かないような情報を付け加えて繰り返させるというものです。とりあえずはこれでうまくいってました。ところが軍団を再編成するというコマンドを設計するうちに、おかしなことに気がつきました。総大将を選択し、軍団員は選択していない、という状況で、なぜか選択していない軍団員が軍団に加入していることになっています(‥;)

なんじゃこりゃ〜!と、またまた1行づつ確認していくことに。何度も何度も繰り返して見ているうちに、この原因はやはり、以前からの問題と同じかな〜と思いだしました。要するに、1度目のクリックによる処理は、その時点で処理をすべて完結させ、情報なども消したんですが、それでも、「クリックされている」という情報が2度目のクリックの処理をパスしたとしても、次の軍団員選択リストにまで及んでしまっている、ということのようです(~_~;それにしても、そもそもリスト内容すら消して、枠だけ同じで内容はすべて入れ代わってしまっているのに、クリック情報だけは生き残っているとは!(*_*)

まあ、一連の処理の起点が、リストをクリックしたというところからはじまっており、それを完結させずに同じリストを使い回したため、結果として最初の処理の情報が最後まで残ったままで、何度も同じ処理を繰り返したけれども最初の情報も残ったまま、ということが今回の挙動不審の原因とみました。今日は一日この不具合を色々回避しようとプログラムをこね繰り回しているうちに、最初のクリック情報と繰り返した後のクリック情報との矛盾も生じて、エラーが出るわおかしな動きはするわ、とうとうまともに動かなくなってしまいました(;_;)

う〜ん、似た仕組みは使い回そうとしてがんばっていたんですが、どうも無理のようです(T-T)効率化をはかろうと、結果として非効率かつ無駄に労力を費やしてしまいました(ToT)ええ加減もうしんどい、作るのやめよ〜(ToT)と思い始めていたんですが、このサイトもあることだし、発想をかえようかと思いなおし、最初のリストと次のリストを別物にしてみました。

…思い通りまともに動くじゃないか(;_ゞありゃ(^^;ちょっとさすがに、これまでの回避策のために技巧を凝らしたつくりをしていて(^^;あちこち継ぎ接ぎをあてた感じのプログラムになってきていたため、その継ぎ接ぎと合わずにエラーが出ることもありますが、一応予想通りの動きを返してくれます。これまでは予想通りの動きをまったくしてくれなかったので、これだけ素直に予想通り動いてくれるとかえって感動ものです(^o^)エラーまで予想通りなので、ある意味ほっとしました(^^;

いやあ、結局使い回しを考えすぎて、無理が出てたんですねえ〜最初から別の処理として別の扱いをしておけばよかった(^o^)まあおかげでかなり技量アップははかれたというものの、ここ何週間も同じところでうろうろしていたのは痛い!(*_*)それにしても、別のリストを作ることで、いかにもプログラムがシンプルになりました(^^;これまでのプログラムはかなり小細工技巧手練手管の限りをつくしていたという感じだったんですけども、そこまでしなくても結局よかったんだ〜(^o^)押しても駄目なら引いてみなとはよくいったもので、完敗を認め、最初から別ルートにすればよかったですね〜(^^;;;

一応ようやく動きだしそうな感じなんですが、小細工の後始末が割合かかりそうです。まあ来週はそれでも、なんとか違うことができそうな、、、ほっ(^O^)

index

〔TopPage〕

このページへのリンクはフリーです。
このページについてのご意見、ご質問などは、kr_ryo_green@yahoo.co.jpまでお願いします。
Copyright 2003© kr_ryo All rights reserved.
訪問件数