IP unreachable な環境にいたので、しばらく書き込め ませんでした。で、ネット外でいろいろあって、これから しばらくは書き込まないと思います。ご了承ください。 とりあえずはこの掲示板はそのまま置いておきますが、 一時的に書き込み不可にするかもしれないし、しないかも しれないです。要は未定ってことです。 |
はじめまして。にゃと申します。 @ふくし さん おそらく接続がKeep-aliveのままに なっているのではないかと思います。 Connection: close というヘッダを追加して試してみてください。 ローカルでCGIのテストをするときはLinuxでApacheを動かしていますが、 こちらではCGIを動かすと自動的にこのヘッダを付けてくれるようです。 あとskel.103M さんも指摘されてますがヘッダの部分は 改行コードを"\r\n"にしたほうが良いかもしれません。 ヘッダの部分だけ書くとこんな感じかな? print "Connection: close\r\nContent-type: text/html\r\n\r\n" |
skel.103Mさん、にゃさん、お返事ありがとうございました。 \r\n も、\n\r も、\r\n\r\n も、\n\r\n\r もダメでした。(;.;) ちなみに httpd.conf で KeepAlive Off にしています。 Telnet でたたいてみると(この発想がなぜかありませんでした ^^;)、 $ telnet localhost 80 Trying 127.0.0.1... Connected to tokumei.kibou.catv.ne.jp. Escape character is '^]'. GET http://localhost/cgi-bin/test.cgi HTTP/1.0 HTTP/1.1 200 OK Date: Fri, 18 Aug 2000 13:25:42 GMT Server: Apache/1.3.12 (Cygwin) Connection: close Content-Type: text/html <html>どうなんでしょうね</html> とここまで表示して端末の動きが固まってしまい、 Ctrl-Z を押すと、 Connection closed by foreign host. $ と出て終わります。 (ふつうの html を表示させるときは固まりません) また、上のように、Connection: close は Cygwin でも挿入されるようですねー。 (KeepAlive On にしてみても挿入されました) とまれ、どうもありがとうございます。 引き続き何かありましたらよろしくおねがいします。 ちなみに、勉強用に使っているのはオライリーの「ねずみの本」ですが、 これでは \n\n になっているんですが、\r\n が正式なんでしょうか? あるいは Cygwin だから Windows 改行にした方がいいということですか? これも合わせてよろしくおねがいします。 質問ばかりで申し訳ありませんが、ご無理のない範囲でどうぞよろしくお願いします。 |
> これからしばらくは書き込まないと思います。 と言いながら、早々に復帰してみたり。 Windows も cygwin も詳しくありませんが、スクリプトの最後に close(STDOUT); を入れるとどうなりますか? でもまぁ、どの方法で解決したとしても挙動が変なわけで、 > 肝心のApacheがどうしてもインストールできません。 > 具体的な現象でいうと、makeで「no rule for targat all. stop」 をなんとかするか、別の WWW サーバを入れるのが 正しい道のような気もします。 |
68userさん> お忙しいところ、お返事ありがとうございます。 close(STDOUT); を早速入れてみましたが、ダメでした。 うーむぅApache以外のhttpdかー、考えませんでした。 どんなもんがあるんでしょうね(自分でも調べますが) とまれ、どうもありがとうございましら。 |
@gongo さん 作成したプログラムをそのまま投げてデバッグしてもらおうと するのはやめましょう。回答者の負担が大きすぎます。 例えば、color.dat を書き換えるとか、10個のウィジェットを使う、 なんてのは Xt の理解とは関係ないはずです。問題が発生する 最小限のプログラムを作ってから質問して下さい。 また、最小限のプログラムを作る過程で、自力で解決してしまう ともあるはずです。例えば前の fscanf の件は、ファイル操作部分を 切り離して定数化しようとしていたなら、自力で原因を突き止められて いたかもしれません。 あと、web にプログラムを置く際、改行コードを 0x0D に直しておくとか、 文字コードを EUC にしておくなどの気遣いがあるといいですね。 本題ですが、WidgetChoice の中に DrawOnWidget(label1,client_data,NULL); と書いてみるといかがですか。当方の環境では、選択したウィジェットの 色が label1 に反映されていました。 |
@68user様 本当に面倒ばかりおかけして申し訳ございませんでした。 今まで状況をどうやって伝えたらよいのかわからず 全部お見せするという形をとってしまいましたが、 これからは良く考えます。 で、プログラムについてですが、結局、68user様のご返事を いただく前に自分で試した方法でなんとかなりました。 方法としてはWidgetChoice()内でChangeColor()をやった後に Color()をやって、あとは再描画したいウィジェットについて XtUnmapWidget()とXtMapWidget()を行いました。 これによって新しい色が有効になってExposeイベントが 発生し再描画できました。 68user様がご提案してくださった方法についても実行してみます。 とにかく本当に御忙しいところすみませんでした。 何卒これからも宜しくお願い致します。 |
Yuukiです。 ふくしさん > 肝心のApacheがどうしてもインストールできません。 > 具体的な現象でいうと、makeで「no rule for targat all. stop」 ここのバイナリを使うっていうのはどうですか? 一番楽だと思います。 http://www.apache.org/dist/binaries/win32/ http://www.apache.org/dist/binaries/win32/apache_1_3_12_win32.exe |
>Yuukiさん 情報ありがとうございます。 これも知っていて、インストールしてみたんですが、結局Cygwinとは共存できないんですよね? (Cygwin の / から始まるファイルシステムにDocumentRootを乗せてCygwinのPerlを実行することができない) 会社でFreeBSDのApacheを使っていて、もうだいぶUNIX用のCGIスクリプトを書いていて、 プログラム内のパス名とか全部UNIX風に書いてしまっているし、flockやsystemなどのUNIXコマンドも使っているので、 できればCygwinにApacheを入れたいんです。 あるいは、Windows用のApacheをCygwinで使う方法があるんでしょうか? 今は別のPCにLinuxを入れてハブでつないで作業してるんですけど、 やっぱりどうしてもノートに入れて出先でデバッグとかしたいので、 またmakeから再挑戦しています。 いずれにせよ、ありがとうございます。 |
はじめまして > 肝心のApacheがどうしてもインストールできません。 > 具体的な現象でいうと、makeで「no rule for targat all. stop」 この件ですが、試しにソース(1.3.12)を持ってきてコンパイルしてみました。 結果、多少の問題があるものの、以下手順でインストールまで出来ました。 ・./configure --prefix=/usr/local/apache ・以下のパッチを当てる ・make EXTRA_LIBS=-lcrypt ・make install INSTALL=install.exe ただ、「no rule for targat all. stop」ってエラーには遭遇しませんでした。 Makefileの作り方を間違えていませんか? >ふくしさん また、下のhello.cgiも動いているようです。(^^; ---- ▽パッチ ここから diff -ru old/apache_1.3.12/src/main/http_main.c new/apache_1.3.12/src/main/http_main.c --- old/apache_1.3.12/src/main/http_main.c Sat Feb 5 21:01:54 2000 +++ new/apache_1.3.12/src/main/http_main.c Sat Aug 19 07:29:30 2000 @@ -116,7 +116,7 @@ #endif #ifdef WIN32 #include "../os/win32/getopt.h" -#elif !defined(BEOS) && !defined(TPF) && !defined(NETWARE) && !defined(OS390) +#elif !defined(BEOS) && !defined(TPF) && !defined(NETWARE) && !defined(OS390) && !defined(__CYGWIN__) #include <netinet/tcp.h> #endif #ifdef HAVE_BSTRING_H diff -ru old/apache_1.3.12/src/support/logresolve.c new/apache_1.3.12/src/support/logresolve.c --- old/apache_1.3.12/src/support/logresolve.c Wed Jan 26 13:36:02 2000 +++ new/apache_1.3.12/src/support/logresolve.c Sat Aug 19 09:09:00 2000 @@ -101,7 +101,7 @@ * statistics - obvious */ -#ifndef h_errno +#if !defined(h_errno) && !defined(__CYGWIN__) extern int h_errno; /* some machines don't have this in their headers */ #endif ---- △ここまで |
@ふくしさん ううっ、外してましたか。 一応答えられるところだけ。 >ちなみに、勉強用に使っているのはオライリーの「ねずみの本」ですが、 >これでは \n\n になっているんですが、\r\n が正式なんでしょうか? 確か調べたことのある範囲ではHTTPの1.0と1.1で ヘッダの改行はCR LF(\r\n)が正式だったと思います。 ただ改行が\nで不具合を起こした経験はないですし 多分問題はないと思います。 |
> 確か調べたことのある範囲ではHTTPの1.0と1.1で > ヘッダの改行はCR LF(\r\n)が正式だったと思います。 ですね。 > ただ改行が\nで不具合を起こした経験はないですし > 多分問題はないと思います。 ですね。WWW サーバ君が勝手に変換してくれます。 でも、少し前の apache ではどうやっても (\r\n を 出力しても) \n になってしまって、なんでかなぁと 思った記憶があるんですが、今やってみたら再現しない。 記憶違いか。 ところで、勝手に他人のリンク集にリンクチェック かけてしまうという、かなり無礼なページを作りました。 http://X68000.startshop.co.jp/~68user/links/ しかし、よいリンク集ってのは簡単には見付からないものだなぁ。 |
T.T.さん、ありがとうございました! 教えていただいた通りにビルドしたら、インストールできました!(^o^)/ ただし、CGI がなかなか表示されない問題はそのままです。まとめると、 ・普通の HTML を表示すると、すぐ表示され、流星もすぐ止まる。 ・CGI で text/plain だと(cgi-bin に入ってる TEST-CGI とか) 表示はされるものの、流星は止まらない。 ・CGI で text/html だと、表示じたい待たされる です。 \r\n問題、Connection: close 問題、KeepAlive 問題も試しましたが、無効だったようです。 あと、apachectl stop でたまに死んでくれず、そうするとapachectl start で生き返ってくれない問題がありました。 これは、apache/logs/httpd.pid が消えずに残っているせいで、手動でぶち消してやると再度生き返りましたが、 同様の問題に遭遇された方はいらっしゃいますか? ときに、T.T.さんはhello.cgiを無事動かされたそうですが、 WindowsはNTですか、98ですか? CygwinはB20ですか、v1.1ですか? 教えていただけると幸いです。 なんだか掲示板を私物化しているようで心苦しいですが、CygwinでApacheが動くと使い道があると思うので御寛恕ください。 あらためてみなさんありがとうございます。(_ _) |
@ふくし さん 私の環境は Windows2000 + Cygwin-1.1.4 です Cygwinを使うなら、NT系の方がいいですよ。 特に、外部プロセスの呼び出し辺りは95/98だと怪しいから... おそらく、ふくしさんの問題も外部プロセス呼び出しに起因する問題でしょう。 Windows98で作業を行いたいのであれば、割り切って使うしかないと思います。 Netscape6だと</html>までを読み込んだ時点で表示してくれるようなので、 読み込みが完了しないことさえ気にしなければどうにかなるでしょう。 |
うーん、そうかぁ、、。 NTも2000も持ってないし、使いたいマシンはノートなんで、 あんまりネイティブ インストールしにくいものがあるんですよね。 (ハイバネの設定とかいろんなドライバーなど、めんどくさいので、、。 メーカー、サポートしてくんないし。 最近のノートは「プロダクト リカバリー ディスク」とか入ってるけど OSのディスクじたいついてこないんだもんなー、、、) プロセスの問題というのは納得がいきますね。 ということでどうやらCygwin固有の問題でだらだらと引っ張ってきたようですね。 どうもすいません。(_ _) NC6 を入れてみます。重ねてどうもありがとうございました。 |
たびたびすみません。 CGIがなかなか出てこない問題で、10分ぐらいたつと表示されると書いていたのは、 ApacheのTimeoutで表示が中断させられていたということがわかりました。 Timeoutをデフォルトの300(秒)から1とかにすると、見かけ上は1秒で表示されます。(^^;;; |
T.T.さま> NC6試してみました。いいビルドに当たったのか、意外と安定しててビックリ。 ということで今回のソリューションとしては 「NC6でみて納得したら読み込み停止」で納得することにします。 すいません、今回の情報の公開について打ち合わせしたいことがあるので、 わたしあてに E-Mail いただけるでしょうか。お手間は取らせません。 他のみなさんも、情報をいただき大変ありがとうございました。 ここ数日でずいぶん物知りになりました。 今後もよろしくお願いいたします。 |
全然関係ない話題ですが、FYI ということで。 > NC6試してみました。いいビルドに当たったのか、意外と安定しててビックリ。 僕も数日間使いましたが、一度も落ちませんでした。 1998 年の末に、NC4 のコードを捨てて再出発したときは どうなることかと思いましたが、まぁよくもここまできたもんだ。 Mozilla5 の最新 Milestone は M17。Netscape Communicator 6 PR2 は、 これに Netscape 社が Plug in などの付加機能を付けたもの。 Mozilla5 は http://www.mozilla.gr.jp/download.html から自分の OS 用アーカイブを落としてきて、 % tar zxvf mozilla-*-M17.tar.gz % cd package % ./run-mozilla.sh これだけで動きます。mozilla5 は ~/.mozilla を使うので、 ~/.netscape の退避は必要ありません。 mozilla を使って http://www.mozilla.gr.jp/jlp/ を見て、 M17-langjajp-ja.xpi か M17-langjajp.xpi をクリックするだけで、 メニューなどが日本語化 (これをしなくても日本語ページは閲覧可)。 FreeBSD ユーザは (ports-current を追っかけているなら) ports で入れるのもいいでしょう。 # http://www.gnome.gr.jp/~yatt/mozilla/index.html まぁ元々重い上にデバッグ情報を吐くので、かなり重いです。 自分で build するなら HDD を 1GB くらいは 空けておいた 方がいいかもしれない。 興味を持ったなら、 http://www.mozilla.gr.jp/ からいろいろ辿って下さい。 |
ふくしさん 全然解決にはなってませんが、一応参考までに。 Content-Lengthヘッダ等でサイズを指定してやれば ブラウザの方で接続を切ってくれるようです。 まあ、あまり役には立たないかもしれませんが・・ |
> Content-Lengthヘッダ等でサイズを指定してやれば またまた全然関係ないんですけど、頭の体操でも。 お手軽に Content-length を出すにはどうすればいいかなと 考えてみて、 http://X68000.startshop.co.jp/~68user/tmp/content-length.txt というスクリプトを書きました。BEGIN と END の部分を挿入すれば、 どんな CGI スクリプトでも Content-length が出せるはずでした。 コマンドラインからだとうまく動きます。でも、web 経由だと http://X68000.startshop.co.jp/~68user/tmp/content-length.cgi と、Content-length が後に出力されてしまいます。 暇な人は原因を考えてみてください。僕は1時間悩みました。 Windows だとちゃんと動くのかもしれない。UNIX だと 動く環境もありますが、動かない環境の方が多いと思います。 |
>にゃさん をーホントだ(^^)。 ではじぜんに Content-length を計測して、それをはさむ仕組みを考えればいいですね。 どうもありがとうございました。 |
@68userさん >暇な人は原因を考えてみてください。 perlは「何となく読める」ぐらいしかわからないのですが、 考えてみました。 原因がわかったとき脱力しました(笑 |
@68user様 Xウィンドウでの色の扱い方についての質問です。 Xアプリケーション工房のXlib編(3)で、RGBの値を0から255の範囲で指定して いらっしゃいますが、これはどうしてなのでしょうか。 XColor構造体のred、green、blueのメンバは色のRGB値が入りますよね。 そして実際これらのメンバはunsigned shortのはずだから0から65535までの 値になるはずなのになぜ0から255の範囲で指定していらっしゃるのでしょうか。 試しに自分で簡単なプログラムを作ってみて、 同じように値(例えば"rgb:00/00/F0")をいれて見たのですが、 結果的にXAllocNamedColor後に各RGB値を見たところ、Red=0 Green=0 Blue=63420 となっていたので、きちんとunsinged shortになっています。 よって動作としては問題ないと思うのですが、どうして0から255の範囲で指定して いたものが勝手に0から65535の範囲に直されたのかがよくわかりません。 それとXAllocNamedColorの一番後ろの引数には指定した色の正確なRGB値が入る とのことなので調べたところ、Red=0 Green=0 Blue=61680 となっていました。 ということは指定した色に最も近いRGB値が入ったということなのでしょうか。 (厳密に同じRGB値になってほしいのですが) そもそも自分の環境が一体何万色中何色同時発色できるのかというのが いまいちよくわかりません。RGBの各々の強度を8ビットで表現すると 組合せとして約1677万色(フルカラーというのでしょうか)になりますが 実際はどうなのでしょう。前述のようにXColor構造体のRGBの各メンバは unsigned shortです。ということはRGBそれぞれが16ビットで表現されるので 組合せとしては大変な数になってしまいます。 また同時発色についてはカラーマップが問題となってくる(?)のでしょうか。 本には、同時に画面に表示できる色の数はプレーン数から決まる と書いてありました。で、私の使用しているディスプレイの情報を調べたところ --------------------------------------------------- *Information of Visual Class* -visual class : TrueColor -red_mask : 00007c00 -green_mask : 000003e0 -blue_mask : 0000001f -bits_per_rgb : 5 -map_entries : 64 *Other Informations* -depth :16 -the number of cells in the colormap : 64 -the number of planes : 16 --------------------------------------------------- となりました。プレーン数が16ということはカラーマップのエントリは 最大65536色まで作れる(ということは65536色同時発色できる!?)とも 思ったのですが、カラーマップのセルの数は64という情報まで出てきました。 いくらなんでも64色ということはないと思うのですが・・・。 色に関してかなり頭の中が混乱しているのですが 何卒宜しくお願い致します。 |
質問なのですが… 皆様はじめまして。今回初歩的な質問なのですが、 どうしてもわからなく投稿させて頂きます。 UNIXコマンドでuptimeがあると思うのですが ロードアベレージ部の1分、5分、15分のところに表示される 0.09などといった値は何を基準に表示されるのでしょうか? 申し訳ありませんがお答え頂きたく思います。 よろしくお願いいたします |
@hsj さん > 原因がわかったとき脱力しました(笑 僕と同じ思いをしていただいたようで、なによりです :-) @gongo さん > Xアプリケーション工房のXlib編(3)で、RGBの値を0から255の範囲で指定して > いらっしゃいますが、これはどうしてなのでしょうか。 一言で言えば X の仕様です。X(1) に rgb:<red>/<green>/<blue> <red>, <green>, <blue> := h | hh | hhh | hhhh h := single hexadecimal digits とあります。たぶん、rgb:f/f/0 = rgb:ff/ff/00 = rgb:ffff/ffff/0000 ですね。 ちなみに rgb 表記は X の色が指定できるところならどこでも使えます。 # Ex. kterm -background rgb:00/33/55 > 本には、同時に画面に表示できる色の数はプレーン数から決まる > と書いてありました。で、私の使用しているディスプレイの情報を調べたところ > -depth :16 depth って、1色ごとの bit 数じゃなかったかなぁ。 なので、この環境だと 256*256*256 で 1677万色 出…ないかなぁ。違うかなぁ。 正直カラーマップのことはわかってないので、ちょっと調べて みますが、あまり期待しないで下さい。 @YAGI さん > ロードアベレージ部の1分、5分、15分のところに表示される > 0.09などといった値は何を基準に表示されるのでしょうか? これは後ほど。というか、正しい & わかりやすい説明をする 自信がないので、誰か答えていただけるとありがたいです。 |
>68userさん あれー、会社のApache1.3.9と自宅に構築中のApache1.3.12は 期待通り(というか期待を裏切ってというか)Content-length:13 を返しますねー。 これって最近話題になった改○○ー○を勝手に変えてくれる問題ですか? |
@68user様 カラーマップについては私も調べているのですが、 どうもよくわかりません。ただ、少なくとも私の環境では ビジュアルクラスがTrueColorとなっているため カラーマップを書き換える事ができないようです。 >とあります。たぶん、rgb:f/f/0 = rgb:ff/ff/00 = >rgb:ffff/ffff/0000 ですね。 >ちなみに rgb 表記は X の色が指定できるところならどこでも使えます。 〜省略〜 >なので、この環境だと 256*256*256 で 1677万色 ということはrgbを二桁(00やF0)で表せば必ず指定した通りの色が でるのでしょうか。そうなるとなぜ四桁(FFFFなど)で表現する方法も あるのでしょうか。逆に四桁だとカラーマップにないという事態に なる確立が高まってしまうのでしょうか。 それと256*256*256というのはどこからわかるのでしょうか。 う〜ん、もう少し考えてみます。 |
いつもながらおかしな質問だったらごめんなさい。 perlでプログラムを作っていて、whileの中に置いたdo-whileの中で ある条件のときはlastでdo-whileを抜けようとしていたのですが、 うまくいきませんでした。 結局いろいろ調べているうちに、lastはdo-whileをループと見なして いないらしく、その外にあるwhileを抜けてしまっているということが わかったのですが、これはそういうものなのですか? |
@ふくしさん > 改○○ー○ ではないんです。答えを書いちゃうと - $tmp = "tmpfile.$$"; + $tmp = "/tmp/tmpfile.$$"; です。あほらしくて泣きそうです。 @has そういうものだと思います。perl では do { block } while (expr) の do は直後のブロックを実行するための命令で、 while は修飾子です。要は foo if ( expr ); と同じ形なわけですね。これはループではないので last も next も redo も使えません。まぁ、 { do { block } while (expr) } とすれば大丈夫ですが、そこまでして do〜while を 使いたいかという話になりますか。 @gongo さん > ということはrgbを二桁(00やF0)で表せば必ず指定した > 通りの色がでるのでしょうか。 じゃなくて、X の内部では RGB それぞれ16ビットだけど、 16ビット×3なんていちいち指定するのがめんどくさいだろうから、 1. ユーザは色名 (red とか) で指定できる 2. ユーザは rgb:x/x/x rgb:xx/xx/xx rgb:xxx/xxx/xxx という 簡略化した形式で色を指定できる とした、ということだと思います。どの指定方法でも XAllocNamedColor の内部で RGB それぞれ 16ビットの 色情報に展開されると。 # X のソースを持ってるなら GetColor.c あたりを # 追っかけると、展開方法はわかると思います。 > XAllocNamedColorの一番後ろの引数には指定した色の > 正確なRGB値が入るとのことなので調べたところ、 > Red=0 Green=0 Blue=61680 となっていました。 ということは、rgb:00/00/f0 は rgb:0000/0000/f0f0 に 展開されたということですね。 で、その 16ビットに展開した色情報が本当に使えるかどうかは、 カラーマップや X サーバ次第、ということです。 > ビジュアルクラスがTrueColorとなっているため > カラーマップを書き換える事ができないようです。 TrueColor だと XAllocColorCells でプライベートカラーセルを 取得できないんでしたっけ? もしできないとしたら XCreateColormap と XInstallColormap を使うんですかね (わかってない)。 > depth って、1色ごとの bit 数じゃなかったかなぁ。 これは違いました。多分。depth は1ドットごとのビット数です。 ところで、gongo さんはカラーセルを使って何をしようと 思っておられるんですか? |
>68userさん あそっかぁ、、ぼくはこれを動かすために cgi-bin を 733 にしました。(^^; >has さん 68user さんも書かれてますが、do の外側をさらに { } で囲むとあら不思議、 実行できるようです。 |
68user & ふくしさん、どうもありがとうございました。 {}でくくればいいなんて、なんか不思議な感じがします。 |
@68user様 > じゃなくて、X の内部では RGB それぞれ16ビットだけど、 > 16ビット×3なんていちいち指定するのがめんどくさいだろうから、 ということは二桁で表現するというのは本来0から65535なものを 大雑把にわけているということでしょうか。だとしたら大雑把に 分けているやつぐらいカラーマップに必ずあってほしいものですが・・・。 > # X のソースを持ってるなら GetColor.c あたりを こ、これってどこにあるのでしょうか。 > 取得できないんでしたっけ? もしできないとしたら XCreateColormap > と XInstallColormap を使うんですかね (わかってない)。 確かプライベートカラーセルは取得できなかったような気がします。 XCreateColormap や XInstallColormap についてはまだちょっと 詳しいことがわかりませんので本を見てみます。 > ところで、gongo さんはカラーセルを使って何をしようと > 思っておられるんですか? 色を正確なRGB値で自由自在に扱いたいと思っております。 そして最終的には色の探索をするようなプログラムを作りたいと考えております。 以前お見せしたプログラムでは中央に窓を1個、 周りに10個の窓を表示しました。 で、各窓にはいろいろな色の服を表示しました。 具体的には中央の窓の服をターゲットとして、 周りの10個の服からユーザーがターゲットに最も近いと思われる 1つの服を選び、それによってあるアルゴリズムを通して 10個の服の色のRGB値をターゲットの色に近づけるように 改善したいと考えております。 1.服の提示(各窓の描画) 2.ユーザーによる選択 3.あるアルゴリズムを通して10個の服の色のRGB値を改善 この1から3の操作を繰り返すことで、提示されている10個の服の色が ターゲットの服の色に収束していくようにしたいと考えております。 また実験段階なのでターゲットを表示しますが、 最終的にはターゲットの表示をやめ、ユーザーが心に思い描いた色へ 収束するようなアプリケーションを作りたいと考えております。 ここで問題なのは正確なRGB値を入れてもその色がカラーマップにない場合です。 近い色で勝手に代用されてしまうと、3で用意したアルゴリズムでの有効性 (いかによりよい色へどのくらいの回数で収束するかなど)を確認したいのに 別のところで収束する要因がうまれてしまうことになってしまいかねないからです。 |
@68user様 カラーマップの内容を知るための例みたいなのが本に載っていたので 試してみました。以下のtmp[k]はXColor構造体です。 尚、この例はRGB各32階調カラーマップのカラーセル内の表示色値を得る といったものだそうです。 ----------------------------------------------------------------------------- cmap = DefaultColormap(dummy_dpy,dummy_screen); for(k=0; k<32; k++) { tmp[k].pixel = k | k << 5 | k << 10; tmp[k].pad = 0; tmp[k].flags = DoRed | DoGreen | DoBlue; XQueryColor(dummy_dpy,cmap,&tmp[k]); } ----------------------------------------------------------------------------- で、結果的に ----------------------------------------------------------------------------- Red=0 Green=0 Blue=0 Pixel=0 Red=2114 Green=2114 Blue=2114 Pixel=1057 Red=4228 Green=4228 Blue=4228 Pixel=2114 Red=6342 Green=6342 Blue=6342 Pixel=3171 〜省略〜 Red=61306 Green=61306 Blue=61306 Pixel=30653 Red=63420 Green=63420 Blue=63420 Pixel=31710 Red=65535 Green=65535 Blue=65535 Pixel=32767 ----------------------------------------------------------------------------- といったようにPixel値が32767まできました。 ということは私の環境では 32*32*32=32768色 が カラーマップにエントリされているようです。 実際 Red=61306 Green=4228 Blue=6342 などのように 色を指定したところ、XAllocColorを通してもRGB値が 変化しませんでした。 TrueColorということでカラーマップを書き換えられないので この範囲内でうまくやりくりするしかないのでしょうか・・・。 XCreateColormap と XInstallColormap について 本を見てみましたが、まだよくわかりません。 |
>あほらしくて泣きそうです。 なるほど。やはりopenの返り値は常にチェックすべきなのですね。(^_^; しかし、こういうライブラリを作っておくと便利そうですね。 勉強になりました。 |
えっと、手短に返答をば。 @has > {}でくくればいいなんて、なんか不思議な感じがします。 そうか、よく考えてみれば、変な仕様なんだな。 でも、ちょっと試してみましたが、next/last/redo が そのまんま使えるわけでもないようで。 @gongo さん > ということは二桁で表現するというのは本来0から65535なものを > 大雑把にわけているということでしょうか。 です。ちと調べてみたところ、rgb:e/8/2 ってのは e は 14/15 なので、ffff の 14/15 = 61166 8 は 8/15 なので、ffff の 8/15 = 34952 2 は 2/15 なので、ffff の 2/15 = 8738 で、rgb = 61166/34952/8738 になるようです。 > 確かプライベートカラーセルは取得できなかったような気がします。 これはやはりできないようですね。 > こ、これってどこにあるのでしょうか。 例えば http://www.ring.gr.jp で「R6.4」などというキーワードで 探せば、http://ring.etl.go.jp/pub/X/opengroup/R6.4/tars/ に 行けます。 XFree86 など各種 X サーバというのは、(基本的には) これに X サーバの 実装を追加したものです。こっちのソースは例えばここ。 http://ring.etl.go.jp/pub/XFree86/ > 近い色で勝手に代用されてしまうと、3で用意したアルゴリズムでの有効性 > (いかによりよい色へどのくらいの回数で収束するかなど)を確認したいのに > 別のところで収束する要因がうまれてしまうことになってしまいかねないからです。 なるほど。でも、色が足りないのは根本的には仕方がないですよねぇ。 @にゃ さん >なるほど。やはりopenの返り値は常にチェックすべきなのですね。(^_^; ですね。ちなみにこれまでで一番はまったのは CGI やりはじめの頃。 open(IN,"foo |"); ってのが動かない。理由は foo が core dump してたから、ってのです。 コマンドラインからは動くし、nobody 権限で動いていたから core が できないので core 吐いてることがわからないという…。 @YAGI さん > ロードアベレージ部の1分、5分、15分のところに表示される > 0.09などといった値は何を基準に表示されるのでしょうか? FreeBSD の w(1) から引用すると、 平均負荷は、最近の1分、5分、15分間における実行キュー内の ジョブ数の平均値を表します。 です。すいませんが、わからなければ再度質問して下さい。 # これを説明し出すと長いんだわ、これが。 |
@68user様 いろいろありがとうございました。 >なるほど。でも、色が足りないのは根本的には仕方がないですよねぇ。 なので、カラーマップに存在する色だけを使って動くように 頑張ってみます。今後とも宜しくお願い致します。 |
>> なるほど。でも、色が足りないのは根本的には仕方がないですよねぇ。 > なので、カラーマップに存在する色だけを使って動くように 最初は TrueColor でも XCreateColormap/XInstallColormap で いけるんじゃないか思いました。でも、手元のサンプルプログラムが ことごとく動かないので、やっぱり TrueColor でもダメなのかと あきらめかけました。ところが、X の設定を 8bpp (depth8) に 変えて PseudoColor にしても同じくサンプルプログラムが動きませんでした。 というわけで、サンプルプログラムがダメなのか、もともと TrueColor だと不可能なのかはわかりませんでした。 ちなみに何をしたかったかと言うと、 - netscape の起動時に -install オプションを付けると、 マウスが netscape の中に入ったときだけカラーマップが 変更され、netscape だけが色を独占できる - その代わり、netscape 以外の部分の色はちょっと変になる。 - マウスを netscape から外すと、netscape の中の色が変になり、 それ以外の色が正常に戻る というようなやつです。 |
@68user様 > 最初は TrueColor でも XCreateColormap/XInstallColormap で > いけるんじゃないか思いました。 私も本をみて XCreateColormap/XSetWindowColormap/XInstallColormap といった感じで動かしてみようと思いましたが、うまくいきませんでした。 本の例をまねてXCreateColormapの2番目の引数(window)を DefaultRootWindowにしたがまずかったのか、実行すると窓が画面左上に出て 動かせなくなってしまいました(ウィンドウマネージャが動いていない!?)。 窓の表示位置がおかしいのはともかくとして、肝心のRGB値がどうなったかというと XAllocColorの後にやはり近い値に置き換えられたと思います。 しかも、プログラムを終了して、そのプログラムを書き換えようとmuleで 開いたらmuleが勝手に画面左上に行って動かせなくなってしまいました。 で、あわててXUninstallColormapをプログラムに書き加えて 再度実行したら元の状態に戻りました。 う〜ん、難しいです・・・。 それとちょっと思ったのですが、showrgbで表示される全ての色は本当に カラーマップに存在するのでしょうか。結構数値が細かく変わっている ところもあるので、本当にあるのかなぁと疑問に思いました。 それとも256*256*256を本当に表示できる環境を想定して 細かく用意されているのでしょうか。 |
>68user様 レスありがとうございます。 大体のイメージは浮かぶ事が出来ました。 ただ、また質問となってしまうのですが、 その数値(0.01)はどれくらいの値になっていれば 高負荷がかかっているといえるのでしょうか? やはり、1.00以上だと高負荷なのでしょうか? |
以下の説明には多分何個・何十個もの嘘がありますが、「ここは 嘘かもしれない」と注釈を付け出すと、全部に注釈を付けるはめに なるので、略。ツッコミは歓迎します。 まずは基礎知識。 プロセスにはいくつかの状態がありますが、簡略化して、以下の4つを考えます。 実行状態 … まさに CPU がそのプロセスの処理をおこなっている状態 実行可能状態 … CPU は同時に複数の処理をできないので、CPU が現在 実行しているプロセスの処理を終えるまで待っている状態 入出力待ち … ディスクに書き込む/読み込む命令を出した後、ディスク コントローラからの「終わったよ」という知らせを 待っている状態 sleep 状態 … sleep を使っているか、デバイスやソケットを見張っている (listen や select や read している) が、まだデータが 届いていない) 状態 プロセスは必ず上記のうち1つの状態を取ります。 さて、本題。 load average というのは、ある瞬間の「実行可能状態のプロセスの個数」 の平均です。個数ですから整数なんですが、平均を取るので、0.12 などと いった小数になります。 例えば 0:00:00 の時点での実行可能状態のプロセス数が3 0:00:01 の時点での実行可能状態のプロセス数が0 0:00:02 の時点での実行可能状態のプロセス数が1 なら、load average は 4/3 = 1.33 です。これは3秒間だけプロセス数を 数えましたが、最近1分、5分、10分のそれぞれのプロセス数の平均を 取ったものが、top や uptime で表示される load average です。 つまり、 - load average が 1 なら、常に CPU が何かしらの処理をしている。 CPU が遊んでいる時間がない。 - load average が 1 未満なら、実行可能状態のプロセスがない 瞬間がある。その間、CPU は遊んでいる。 - load average が 1 超なら、実行可能状態のプロセスが多く、 待たされているプロセスがある。 ということです。 # あくまでも平均なので、本当はそうでない瞬間が多くあるでしょう。 だからといって、1 を閾値 (いきち) として負荷が低い/高いと 言っていいかというと、多分違うと思います。 なお、 A.「変数を1ついじくって 1秒 sleep する」という処理を永遠に繰り返す というプロセスと、 B.「変数の内容を1増やし続ける」という処理を永遠に繰り返す というプロセスでは、負荷が全く違います。 A は、実行可能状態から実行状態に移ると、変数を1ついじくって、 すぐに sleep 状態に入ります (実行可能状態でなくなる)。1秒経つと 再度 実行可能状態に移ります。 B は、実行可能状態から実行状態になると、変数の内容を1増やし 続けます。一定時間が経過すると、カーネルが強制的にプロセスを 実行状態から実行可能状態に戻します。 B のようなプロセスを実行すると、load average は大体 1 だけ 上がるはずです。なぜなら、B のプロセスは入出力待ちも sleep も しないため、「常に実行可能状態になり得るプロセス」だからです。 たとえば C でもシェル上でもいいので、無限ループするだけの プログラム % while (1) while ? end を実行すると、load average が大体 1 上がり、もう1つ同じのを 実行すると さらに 1 上がるでしょう。 |
つかぬことをお聞きしますが,"リンク集のリンク集"のSSIはいつ動作するようになるのでしょうか。 |
おろ、いつのまにか止まってやがる (笑)。というか、SSI が効いてないのか…。 ウチに帰ったら直します。御指摘どうもです。 |
> SSI が効いてないのか…。 8/28 AM8:30 ごろから5時間ほど、SEGA BBS の過去ログの CGI に 199.172.149 あたりから怒涛のアクセスがあったようです。 apache のログを見ると、500 エラーが 9000件ほど記録されてました。 # トップページのカウンタも、壊れてもうた。 どうもそれ以来 apache の動作がおかしく、一部のページで SSI が 動作していないようです CGI 側で同時起動の制限が必要なのかもしれませんね。 ま、こういうこともあるということで。 |
皆様 始めまして。 ともと申します。 UNIX暦 3ヶ月の超初心者です。 スクリプトを書いておりますが、そのスクリプトのあるステップでどうしてもユーザーをスイッチしなくてはいけない事になってしまいました。 現在 su コマンドを使ってその部分だけわざわざパスワードを入れて、またスクリプトを実行するという 2スクリプト制になってます。 もしユーザーの変更も自動的にスクリプト上でできればとても楽なんですが、よい方法ありませんでしょうか? 当分はスクリプト自体にパスワードをハードコードしてもいいと思ってます。 どなたか お知恵をお貸しください! とも |
最も簡単なのは root 権限でスクリプトを動かし、適時 su で 特定のユーザ権限を得るか、su username command とすることです。 それが無理なら、suid なプログラムを作ればよいです。 http://X68000.startshop.co.jp/~68user/unix/pickup?setuid > 当分はスクリプト自体にパスワードをハードコードしてもいいと思ってます。 su は端末 (/dev/tty) からパスワードを読もうとするので、 標準入力などからデータを流し込むことは不可能です。 |
> 8/28 AM8:30 ごろから5時間ほど、SEGA BBS の過去ログの CGI に > 199.172.149 あたりから怒涛のアクセスがあったようです。 今日も同じ時間帯に同じところから。うっとうしいのので、 SEGA BBS の CGI をしばらく止めます。 ところで、またカウンタが壊れました。/var/log/messages を 見るに、オープンしたファイル数が OS の最大値を越えたため だと思われます。 # よく見ると、カウンタで open のエラーチェックを # 全くしてなかった。そりゃ壊れるわな。 > su username command とすることです。 su username -c command でした。 |
シェルを創っているのですがSyslog(/var/log/messages) にログを出力したいのですがコマンドでできないのでしょうか?教えてください。 よろしくお願いします |
以前から気になっていたことなんですが、 NTじゃなく一般のWindowsがTCP上で行っているサービスには、 どんなものがあるんでしょうか。 もし知っておられたら教えて下さい。 また、こういった類の情報はどうやったら入手できるものなのか、 よろしければあわせて教えて下さい。 |
眠い。ので、手短に。 netstat -a とか。少なくとも Win98 にはあります。 標準では netbios 関係くらいしか listen してないと思います。 logger(1) など。 |
「httptalker(http-client)について」 とてもわかりやすいサイトで unixでいろいろできるんだなぁ、と感心してます 使い始めて三ヶ月位です(vinelinuxを使ってます httptalkerでうまくget出来ないところがあるので 質問させてください httptalker.pl -getに続けて 1:news.yahoo.co.jp/headlines/top/ 2:username.hypermart.net/hoge/huga.html この二つに関してですが1,2とも wgetでは問題無く取れますが httptalkerでは404や「そのページは存在しない」 となります。サイトにある telnetでgetする方法だとでは1のみ問題無し 2ではやはり404となります 何か別の(httpdなどの)知識 が必要なのでしょうか? 何かアドバイスがあれば よろしくお願いします |
> なむさむ さん うーむ、ハイマは、バーチャルホストがなんたら.. Host: username.hypermart.net(CRLF) つければいいのかな。。 |
>やままさん アドバイスありがとうございます バーチャルホストについて勉強してみます 確かにhost付けてなかった・・・ ところで(CRLF)っていうのは \r\nとか、そんな意味ですか? |
バーチャルホストについては。 http://x68000.startshop.co.jp/~68user/net/http-4.html ここにあったよ。 CRLFはUNIXなら\r\nでいいみたいです。 |
hypermart は Host ヘッダです。 > 1:news.yahoo.co.jp/headlines/top/ こっちは yahoo の WWW サーバが悪いです。 WWW サーバの返すヘッダとボディの間のセパレータが CR LF LF (もしくは CR LF で、最後の LF はボディの 一部かもしれない) となっているので、httptalker が ボディ部もヘッダの一部だと解釈しています。 まぁ、セパレータが CR でも LF でも CR LF でも 認識できるようにするのがダウンローダとしては正しい道でしょう。 |
su についてのご返答ありがとうございました。 早速挑戦してみます。 |
あ゛・・・きちんと読んでなかった 取り敢えずhost付けてやってみたら 上手く行きました yahooの方はちょとむつかしくて ヘッダーの役割とかがいまいち解ってないので、 もう一度きちんと読んでからやってみます 取り敢えずありがとうございました |
@68user > netstat -a とか。 > 標準では netbios 関係くらいしか listen してないと思います。 なるほど、どうもありがとうございました。 |
ところで やままさんへ。 1時間に一度くらいこのページにリンクチェックをかけておられる ようですが、このページは Last-modified を GMT で出しています。 しかし、そちらのページでは JST として扱っているようで、 常に 9時間前に更新されたものと見なされています。 |
はじめまして、カワエといいます。今受験生です。 私は将来プログラマーになりたいのですが、PCを買ってまだ半年、まともに触ったこともない超初心者です。 プログラマーの具体的なことについても知らず、ネットで検索したりしているのですが、 他の掲示板で「大変だ」「引退が早い」「プログラミングは趣味にしておくべきだ」等の発言をよく見ましたが、実際のところどうなのでしょうか? それと、やはり女性差別があったりするのでしょうか? 68user様、プログラマーの方、教えてください。 |
あらら、進路相談ですか。 ゲームプログラマになりたいのなら、ここより http://www.lares.dti.ne.jp/~yagiyama/ で聞くのがいいでしょう。 でなくて、いわゆる SE を目指すならば http://village.infoweb.ne.jp/~watany/selink/index.htm を読むといいかもしれません。 僕は一応 SE ですが、社会人一年目なので、軽々しくアドバイス するのはやめておきます。 |
有り難うございます。 では、そっちに行ってみることにします。 |
すみませんが、HPの紹介をさせてください。 ゲーセンはゲーマーだけの物って誰が決めた!! もっとゲーセンを楽しもう!!をテーマに ゲームセンターのゲームをゲーマーのみならず カップルや女の人も楽しめるように、 情報をセレクト&紹介するページです。 内容は音ゲーの手ほどきや僕のホームグラウンドの ゲーセンの最新機種入荷情報などです。 是非おいでください。 この書き込みが掲示板の意に反する内容でしたら、 お手数ですが削除してください。 |
はじめまして。 インフォシークからとんできました。 今、一生懸命UNIXのことを書いたHPを作っています。 ここに書いてあることがとっても役立ちました。 また参考にさせていただきます。 学校でunixを使っていて、けっこうはまってきました。 家はまだウィンドウズですが・・・ もしよろしかったら私のHPにも足を運んでください。 けっこう頑張って勉強しています。 |
> 今、一生懸命UNIXのことを書いたHPを作っています。 ほほぅ、一番オジサンっぽいコマンドが cal ですか (笑) 僕は cpio と vi じゃないかと思います。なんとなく。 |
@68user様 どうも、gongoです。 Xウィンドウ・システムのことで質問があります。 以前見ていただいたプログラムなどで画面に表示される窓を なんらかの形で保存して、texなどにはりつけたいと考えております。 そこで画面を保存するにはどのようにしたらよいのでしょうか。 xwd というコマンドを用いると窓の内容を保存できるようなのですが 自分の環境ではこの方法で保存した .xwd ファイルを xv で 表示しようとすると真っ黒になっていました。 で、他のマシンでもやってみたところ、中には窓を取り込めるものも ありました。しかし、そのマシンだと今度は以前見ていただいたプログラムが 期待通りに動きません(カラーマップのインデックスがすくない模様)。 自分のマシンと xwd がうまくいったマシンでは OSは一緒です。 ちなみにOSはFreeBSD 2.2.8Rです。インストールした人間が違うので ひょっとすると何かX関連で細かい設定がまずいのかもしれませんが そこら辺の確認の仕方もよくわかりません。 なにか良い方法はないでしょうか。 また xwd 以外に窓を取り込む良い方法はないでしょうか。 よろしくお願い致します。 |
@68user様 度々すみません、gongoです。 >また xwd 以外に窓を取り込む良い方法はないでしょうか。 自分で書いておいてあれなのですが、xvの機能でGrabというのが あるようなので試してみます。 |
> 自分の環境ではこの方法で保存した .xwd ファイルを xv で > 表示しようとすると真っ黒になっていました。 原因や正しい回避方法は知りません。ただ、display や xwud で 見ると正しく表示されるので、僕は特に困ってないです。 おそらく xwd 形式で保存しておく必要はないのではないでしょうから、 (TeX に貼るということなので) % convert foo.xwd foo.eps しておけばいいでしょう。 > xvの機能でGrabというのがあるようなので試してみます。 あと、import ってのもあります。display, convert, import は ImageMagick に含まれています。 |
@68user様 xvのGrabで保存でき、表示もうまくできました。 >% convert foo.xwd foo.eps こちらについても試させていただきます。 >ImageMagick に含まれています。 このImageMaickというのは何なのでしょうか。 標準でインストールされるもの(?)なのでしょうか。 何はともあれなんとかTexにはれそうです。 ありがとうございました。 |
> 標準でインストールされるもの(?)なのでしょうか。 されないです。FreeBSD なら ports か packages でインストール しましょう。結構有名なプログラムなので、NetBSD でも Linux でも パッケージは作成されているはずです。 |
@68user様 >FreeBSD なら ports か packages でインストールしましょう。 なるほど、わかりました。 あぁ、でも勝手にマシンに入れちゃうとまずいかも・・・。 私のマシンではないので様子を見てインストールできたらやってみます。 |
HTTP クライアントを作ってみよう(2) http://www2.startshop.co.jp/~68user/net/http-2.html のhttp-client.plを実行すると下記のエラーで止まってしまいます。 Use of uninitialized value in subroutine entry at http-client.pl line 14. Use of uninitialized value in concatenation (.) at http-client.pl line 21. 対策方法をお知らせください。 perlはperl, v5.6.0 built for MSWin32-x86-multi-threadを使っています。 OSはWin98SEです |
こちらの perl-5.6 では動いているので、おそらく 7行目の $port = getservbyname('http','tcp'); で値が取得できていないんでしょう。 $port = getservbyname('http','tcp') || 80; でどうですか。 |
>$port = getservbyname('http','tcp') || 80; >でどうですか。 うまくいきました。ありがとうございました。 ところでこのスクリプトを会社の2台のUNIXで走らせたら 1台は動作してもう一台はUse of uninitialized valueの エラーで止まってしまいました。それではとWINDOWSでやって みたら同じエラーで止まってしまいました。原因がわからないので 質問をさせて頂きました。WSによって動いたりそうでなかったり する原因は何なのかな?っと言う新たな疑問がありますが 宜しければお知らせください。 |
man getservbyname すればわかりますが、この関数は /etc/services (NIS を使っているなら ypcat services の 結果) を読むだけの関数なので、/etc/services がオープン できないとか、ファイルはあるけど中身に http 80/tcp というエントリがない、などというときポート番号の取得に 失敗します。 サンプルとはいえ、本来は getservbyname に失敗したら 80 に 決め打ちするか、あるいは die すべきですね。次回更新時に 直しておきます。 |
お返事ありがとうございました。 perl http-client.plとするとうまく動作するのですが ブラウザから起動するとInternal Server Errorとなります。 起動例(http://www.???.ne.jp/cgi-bin/http-client.pl) もともとそういうスクリプトなのかもしれませんがスクリプト内 もしくは引数でわたされたアドレスのhtmlやjpg,gif等を ブラウザに表示するのはどうしたらよいのでしょうか。 よろしくお願いします。 |
#!/usr/bin/perl print "Hello world"; は CGI 経由では動きません。しかし #!/usr/bin/perl print "Content-type: text/html\n\n"; print "Hello world"; は動きます。そういうことです。 |
くだらないことですが・・・ HPを置いているサーバにbashのファイルがありますが、 これはunixシェルが使えるということなのでしょうか。 そして、Apacheを使うときにはDNSの設定を行う必要がありますか? もしよろしければお答えください。 よろしくお願いします。 |
> HPを置いているサーバにbashのファイルがありますが、 どこにどういうファイルがありますか? /bin/bash や /usr/local/bin/bash ですか? また、どうやってその ファイルを見付けましたか? > Apacheを使うときにはDNSの設定を行う必要がありますか? ローカルでテスト用に使うのですか? なら必要ありません。 # ってこともないんだけど。自ホストさえ引ければ問題なし。 apache を使って web を一般に公開するにしても、普通に telnet や nslookup が使えているなら、DNS の設定は不要 です (それは DNS が設定済ということだから)。 |
ftpソフトでファイルを取得すると、 一覧のところに .bash_logout .bash_profile .bashrs というファイルが置かれています。 ちなみに、binディレクトリ内には何もありません。 (これはcgiが使えないということ?) bashファイルに関しては所有者が私になっているので、 (rootではないということ) ・・・・どういうことなんでしょう。 なんか、よくわからない質問で申し訳ありません。 |
@68user様 どうも、gongoです。 X関連(というよりもC言語かもしれませんが)で質問があります。 label = XtVaCreateManagedWidget(name,・・・) と書けば、labelというウィジェットを生成できますが 複数個のウィジェットを生成したい場合 for文などでこの文章を繰り返して生成することは可能でしょうか。 例えばlabel00,label01,label02,・・・、そしてname00,name01,name02,・・・ などのように変化させていくつもりで unsigned char labelname[]="label00" unsigned char widgetname[]="name00" といったように最初のlabel00とname00をchar型の配列に入れて for文で回るたびに数値のところだけを書き直すといったことを やろうとしたのですが、どうもうまくいきませんでした。 for(i=0; i<NUM; i++){ labelname = XtVaCreateWidget(widgetname,・・・); labelとnameの数字をカウントアップする; } といった感じでウィジェットを生成できれば簡単なのに・・・と思ったのですが やはり個々に宣言しないとまずいのでしょうか。 labelnameのところは本来Widget型じゃないといけないからうまくいかない のでしょうか。widgetnameのところは本来String型ですがこちらもよくわかりません。 また、同様にイベント処理でイベントハンドラを用いる時も for文で回すことは可能でしょうか。 つまりは以前見て頂いたプログラムのようにlabelをいくつも用意し、 それぞれの窓にButtonPressをイベントハンドラとして登録するという一連の文を 書くと結構大変ですし、後々窓の個数を変える時のことを考えると for文で回せたらよいなぁと考えた次第です。 何卒宜しくお願い致します。 |
@gongo さん > label = XtVaCreateManagedWidget(name,・・・) むむ? 前のソースではそこらへんをやっておられたと思いましたが…。 Widget label[10]; char name[256]; for( i=0; i<sizeof(label)/sizeof(label[0]) ; i++ ){ snprintf(name, sizeof(name), "name%02d", i); label[i] = XtVaCreateWidget(name, ...); } ではダメですか? > 最初のlabel00とname00をchar型の配列に入れて for文で > 回るたびに数値のところだけを書き直すといったこと はできません。C 言語では、変数名や関数名などのシンボルを 動的に生成することはできないからです。 # …という表現は正しいかな? > unsigned char labelname[]="label00" > labelname = XtVaCreateWidget(widgetname,・・・); また、「labelname の*内容*」と「メモリ領域」には何の関係も ないので、XtVaCreateWidget の戻り値を格納する領域がどこにも ない、ということになります。 @みちこさん > これはunixシェルが使えるということなのでしょうか。 一言で言えば、 「~/.bash* がある、ということだけでは何とも言えない」 です。相手側に telnet サーバが上がっているか、IP アドレスにより telnet の接続元を限定していないか、パスワードエントリが適切に 設定されているか、ログインシェルが適切に設定されているか、 などを全てクリアすればログインできるでしょう。 逆に言うと、プロバイダが客にリモートログインさせないように するには、たくさんの方法があるということ。その情報がない 以上、ログインできるとも できないとも判断できません。 > ちなみに、binディレクトリ内には何もありません。 > (これはcgiが使えないということ?) bin と CGI には関係はありません。 あと、質問の仕方がいまいちですね。例えば、「binディレクトリ」 というのは、/bin なのか、ホームディレクトリの bin なのか 判断ができません。何を書けばよいかがわからない、というのは 理解できますが、その場合は調べた情報を全て書いて下さい。 |
最近うちに届いたメール。 From: * <*@mti.biglobe.ne.jp> Date: Sat, 2 Sep 2000 00:24:57 +0900 (内容なし) From: * <*@da.mbn.or.jp> Date: Wed, 6 Sep 2000 21:24:05 +0900 (内容なし) From: * <*@calltoweb.com> Date: Fri, 8 Sep 2000 12:43:55 +0900 (内容なし) From: *@themis.dricas.com Date: Sat, 9 Sep 2000 12:49:08 +0900 (JST) (内容なし) From: * <*@d7.dion.ne.jp> Date: Sun, 10 Sep 2000 09:11:30 +0900 Subject: あの ホームページみました。何とかしてください。 From: * <*@f7.dion.ne.jp> Date: Sun, 10 Sep 2000 10:29:26 +0900 届きました? From: *@nifty.ne.jp Date: Tue, 12 Sep 2000 00:05:51 +0900 (JST) このホームページはどうなっているんですか? From: *@aol.com Date: Tue, 12 Sep 2000 09:44:30 EDT Subject: エラー表示ありとでました。 和議申請について 和議申請とは この人たちにはコミュニケーション能力というものがないのだろうか。 好意的に解釈すると、「SEGA BBS 過去ログが見れません」 と言いたいのかとも思うのだが、本当にそうなのか。 うちにイタズラメールを送ろうという活動でもやっているのでは ないか。あるいは、どこかの web をクリックするとここにメールが 送られてくるような仕組みになっているのではないか、とも思えてくる。 謎である。真実を知っている人がいたら教えてください。 |
@68user様 素早いお返事ありがとうございます。 >むむ? 前のソースではそこらへんをやっておられたと思いましたが…。 たしか前のではすべてのlabelに対してXtVaCreateManagedWidget()やXtAddEventHandler()などをやっていたと思います。(^^; >Widget label[10]; >char name[256]; >for( i=0; i<sizeof(label)/sizeof(label[0]) ; i++ ){ > snprintf(name, sizeof(name), "name%02d", i); > label[i] = XtVaCreateWidget(name, ...); >} snprintfというのが使ったことがないので明日調べて 試させていただきます。 ありがとうございました。 |
質問の仕方がうまくなくて、ごめんなさい。 これからもっと磨いていきますので、 よろしくお願いいたします。 初心者にはココに質問するのはちょっと高度なことなのでしょうか。 とかちょっと思ってしまった。 なにか超初心者向けのページがあったらご紹介ください。 ご迷惑おかけしました。 というわけで今日も本を読むばかりです。 コンピュータって難しい・・・ 聞く人もいないのがホントにつらいところです。 |
> 質問の仕方がうまくなくて、ごめんなさい。 というところにさらに説教くさいことを書くのもアレですが、 回答をもらったときに「理解できたかどうか」「解決したか どうか」をちゃんと書くことも重要です。 「ありがとう」と、お礼のみを書かれてもこっちは何も得る ものがないわけですが、 「〜が理解できた/できなかった」 「〜と〜の関係がわからない」 「言われた通りにやってみたら〜というトラブルが出たが、 〜とすることで解決できた」 という返答が得られると、回答者が「こういう解説の仕方で 相手に理解させることができた」「この部分で嘘を言ってしまった」 「わかりにくい表現をしてしまった」などということに気づく ことができます。 で、みちこさんは apache の件も bash の件も、解決したのか、 理解できたのか、を書いておられません。これでは回答した 僕には何のメリットもありません。 要は「お礼よりも結果報告」です。 これは初心者向けのコミュニティでも上級者向けのコミュニティでも 同じですので、今後は注意されることをお勧めします。 > なにか超初心者向けのページがあったらご紹介ください。 逆に、fj やメーリングリストなど、ここよりもずっとレベルの 高いところに行くのもいいでしょう。しばらく読み続ければ、 「よい質問の仕方とはどういうものなのか」がわかってくると 思います。 > @68user様 ところで、「様」はご勘弁を>gongo さん |
@68userさん > snprintfというのが使ったことがないので明日調べて > 試させていただきます。 と思っていたら、マシンが起動しなくなってしまいました。 試す以前に修理手続きやら何やらやらなければ・・・。 D◯S/Vパラダイスというお店で去年の6月に購入したマシンなのですが、 昨日突然フリーズして以後起動しなくなりました。(泣) HDDのランプとかはつくのですが一瞬HDDのカラカラって音が鳴って それ以後進まなくなってしまいました。 それとsnprintfというのはsprintfのことでよろしいのでしょうか。 今日、本を見た感じではsnprintfというのがなかったもので。 どっちにしろsprintfも使ったことがなかったので 他のマシンで試してみます。 |
@68userさん sprintf()を使ってやってみたらうまくいきました。 といっても、最初はうまくいかなくて labelを生成するところで segmentation fault で 止まってしまったので、2番目の引数である sizeof(name) というのを 削除したら通るようになりました。 |
>apache を使って web を一般に公開するにしても、普通に >telnet や nslookup が使えているなら、DNS の設定は不要 >です (それは DNS が設定済ということだから)。 やはりDNSの設定はいらなかったようです。 Perlがうまくインストールされていなかったため、 動作しなかったようでした。 しかしながら、単にパソコンの調子が悪いだけだったかも、 という疑問も捨て切れません。 というのも、Apacheを立ち上げると、突然フリーズしたりするので。 詳しい理由はちょっと見当がつきません。 >相手側に telnet サーバが上がっているか、IP アドレスにより >telnet の接続元を限定していないか、パスワードエントリが適切に >設定されているか、ログインシェルが適切に設定されているか、 >などを全てクリアすればログインできるでしょう。 IPアドレスによってtelnetの接続もとの限定をしているかどうかは、 向こうに聞かないとわからないのでしょうか。 特にそのような項目はメール確認の時にはふくまれていなかったのですが。 またログインシェルが適切に設定されている、とはどういう状態をいうのですか。 >例えば、「binディレクトリ」 >というのは、/bin なのか、ホームディレクトリの bin なのか >判断ができません。 おっしゃるとおりです。 私が言ったのはホームディレクトリのbinのことです。 少しはましになったでしょうか。 MLも探してみることにしました。 もう少しうまく質問できるようになったら またこちらにこさせてください。 お世話になります・・・ |
@gongo さん > それとsnprintfというのはsprintfのことでよろしいのでしょうか。 失礼ながら、man の見方はご存知でしょうか? man snprintf です。 日本語訳はこちら。 http://www.jp.FreeBSD.org/cgi/mroff.cgi?subdir=man&man=printf&dir=jpman-3.1.0%2Fman§=3 なお、(FreeBSD なら) section 3 の日本語訳は現在の jman には 含まれていないので、web 上でしか見られません。 @みちこさん > IPアドレスによってtelnetの接続もとの限定をしているかどうかは、 > 向こうに聞かないとわからないのでしょうか。 基本的にはそうですが、まぁ実際に telnet で接続して みればわかる場合もあります。 Connection refused とか Connection closed by foreign host とか、 言われたら、無理ということです。 # Connection refused だからといって、IP アドレスによる # 制限をかけている、とは断言できませんが。 あと、こういうことはプロバイダに確認すべきことです。 ちゃんとお金を払っているのでしょうから「telnet 接続は 可能か」と堂々と問い合わせましょう。 > またログインシェルが適切に設定されている /etc/passwd (あるいは /etc/master.passwd, /etc/shadow など) の話です。 username:*:1001:1001:HOGEHOGE:/home/username:/bin/csh username:*:1001:1001:HOGEHOGE:/home/username:/nonexistent 前者はログインできますが、後者は /nonexistent というシェルは 存在しないので、結果的にシェルが起動せずログインできません。 |
@68userさん >> それとsnprintfというのはsprintfのことでよろしいのでしょうか。 >失礼ながら、man の見方はご存知でしょうか? man snprintf です。 manの見方は知っていましたがほとんど使ったことがなく、C言語辞典の ようなものにも載っていなかったものでてっきり近くに載っていた sprintfだと思っていました。 >snprintf(name, sizeof(name), "name%02d", i); お教えいただいた日本語マニュアルHPの方を見ました。 で、読んだ結果snprintfの前にprintfもなんだか わからなくなってきてしまったので、"name%02d"の部分について 確認させてください。まず、「%d」と書けば整数を表示させると 思いますが、その前の「2」というのは整数二桁の精度ということですか? あと、その前の「0」はiが一桁の時、01、02、・・・のように「0」を いれてくれるということでしょうか。 そしてsizeof(name)についてですが、これがあるsnprintfと、 ないsprintfの違い(両方ある必要性?)がいまいちよくわかりません。 snprintfではsizeof(name)の容量を超えるものを 一番目の引数のnameに入れることを許さない ということなのでしょうか??う〜ん・・・。 |
はじめまして。 Perlで質問があります。 パケットを送るときにその容量を どうやって指定するのですか? 例えば1000バイトをUDPで送りたい場合 どうすればいいんでしょうか? そのパケットの作成方法がわかりません。 よろしくお願いします。 |
@gongo さん > manの見方は知っていましたがほとんど使ったことがなく わからなければ、とにかく man です。まずマニュアルを読まないと、 理解できる/できないというレベルにさえたどり着けませんから。 > printfもなんだか わからなくなってきてしまったので、 ま、これは宿題ということで。いろんな値を %d, %2d, %02d で 表示させてみればわかるでしょう。 # printf(3) は、よく使うわりにわかりにくいマニュアルの # 代表だと思うので、あまり気にしなくてよいと思います。 > これがあるsnprintfと、ないsprintfの違い snprintf だと、適切な値を第二引数に与えれば、いかに 生成される文字列が長くても、その領域を越えて書き込む ことはありません。要は、バッファオーバーラン対策です。 strncat/strncpy/strlcat/strlcpy も同じです。 @ケイさん > パケットを送るときにその容量をどうやって指定するのですか? > 例えば1000バイトをUDPで送りたい場合どうすればいい > んでしょうか? C の send/sendto と違い、perl の send では長さを与える 必要はありません。perl 君がよきにはからってくれます。 > そのパケットの作成方法がわかりません。 まさか IP データグラムを自前で作る、とかいう話じゃないですよね? |
@68userさん > ま、これは宿題ということで。いろんな値を %d, %2d, %02d で で、やってみたところ %d は左寄せで0,1,2,・・・というようになり、 %2d は二桁分書く場所を確保しつつ、値が一桁なら十の位を 空白で埋め(見ため右寄せ)、%02d は二桁分書く場所を確保しつつ、 値が一桁なら十の位を0で埋めていました。 > snprintf だと、適切な値を第二引数に与えれば、いかに > 生成される文字列が長くても、その領域を越えて書き込む > ことはありません。要は、バッファオーバーラン対策です。 なるほど、わかりました。 プログラムは snprintf でうまくいきました。 |
68user-sanこんばんは、 HTTPクライアントのサンプルコードを少し変更してある特定のサイトの CGIに任意のデータを渡しリードしたHTMLを表示するCGIファイルを作り ました。リードしたHTMLをブラウザに出力する前にリンク先等を変更 して出力したいのですが良い方法がありましたらお知らせください。 例)リードしてきたHTMLのファイル等のリンク先が ./hogehoge/hoge/hoge1.jpgの場合ブラウザに出力する前に ./hoge_hoge/hoge1.jpgに変更してブラウザに出力する。 |
@konanさん 68userさんでなくて申し訳無いですが・・・ #しかも多分役に立たない内容です。スミマセン ただのテキストのやり取りなワケですから、 いったん読み込んだHTMLをブラウザに渡す前に 内容を書き変えてやれば良いだけですよね? そう言う話でなくて、その書き換えのやり方を聞いてらっしゃるのなら それは答えようの無い話だと思います。 それを考えるのがプログラマの仕事なワケですから。 |
>まさか IP データグラムを自前で作る、とかいう話じゃないですよね? IPデータグラムって要はパケットのことですよね? 自前で作ることになるのかな?よく分かりませんが 例えば、適当なゴミパケットを送りたい時はどうすればいいですか? そのゴミパケットの作り方を教えて頂きたいです。 別に中身のあるデータじゃなくていいんです。 |
@konan さん > ./hogehoge/hoge/hoge1.jpgの場合ブラウザに出力する前に > ./hoge_hoge/hoge1.jpgに変更してブラウザに出力する。 s|\./hogehoge/hoge/|\./hoge_hoge/|g とかそういうことですか? @hsj さん > 68userさんでなくて申し訳無いですが・・・ 言うまでもないですけど、どなたでもご自由に回答して いただいて結構でござんす。 @ケイさん 普通、パケットを自前で作ると言えば GET /index.html HTTP/1.0 というようなアプリ層のプロトコルに、TCP ヘッダを付けて TCP セグメントを作ったり、さらに IP ヘッダを付けて IP データグラムを作ったりすることを指すような気がします。 こういうレベルの処理は、普通 OS がやってくれるものです。 > 例えば、適当なゴミパケットを送りたい時はどうすればいいですか? こういうアプリケーション層のプロトコルは、クライアントと サーバが協調して動けばいいので、クライアントとサーバ 両方を作るならば、プログラマが勝手に決めればよいです。 send(SOCKET, 'hoge', 0, pack_sockaddr_in(1234,inet_aton('10.0.0.1'))); というふうに。 ところで UDP の解説って需要あるのかしら。Perl/Tk で IP Messenger http://www.asahi-net.or.jp/~VZ4H-SRUZ/ipmsg.html を作りかけたんだけど、途中で飽きちゃってそのまま… (実用レベルではありません)。UDP の解説を書こうとしたんですが、 あんまり読みたい人もいないかなと思って、未着手です。 ちなみにこの IP Messenger を作ろうとすると、UDP は理解できるわ、 ブロードキャストもバッチリだわで、とても勉強になります。時間の ある方、チャレンジしてみては。 |
昨夜68userさん宛てにメールで質問してしまい、失礼しました。 掲示板なるものがあるんですね。 さっそくですが、 もしどなたか知ってる方がいらっしゃったら教えてほしいのですが。 GETの場合 HTTPアクセスするときに http://www.foo.com/bar.cgi?data1=hoge&data2=fuga とすることで結果(HTMLソース等)を取得できますよね。 でも、 POSTの場合 このdata1=hoge&data2=fugaを見せないようにするために ストリームでサーバに送信しますよね。 でも、この送信部分を自分で作成した時にどのように 送信すれば良いのかが不明です。 言語はJavaです。 Javaだと、どのストリームに変換すれば良いのか、データにヘッダ情報 のようなものが必要なのかも不明ですし、実際の通信ではどのソケットを 開いてサーバ側と接続すれば良いのか全く分かりません。 他の言語でも良いのですが(可能であればJava)、 プログラム自身がPOSTでデータを送信して結果(HTMLソース等)を取得する ようなサンプルコードってないものでしょうか? |
Java のことなら、まずは java house にあたってみる のがいいでしょう。 http://java-house.etl.go.jp/ml/archive/j-h-b/015871.html#body で POST できることは確認しました。 # アプレットではなくアプリケーションから、ですが。 ここらへんに詳しくなるには http://java-house.etl.go.jp/ml/archive/j-h-b/015872.html#body で紹介されている tutorial を読むのがよさそうですね。 |