@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 を読むのがよさそうですね。 |
ありがとうございましたー。 これでおそらくブラウザの代わりにプロキシからjavaでリクエストを POSTできると思われます。 相手(webサーバ)がCGIでも何で書いていても、同じだと思っていい んですよね?httpで標準化されてるんでしょうから。 |
ありがとうございました! アドバイスのおかげで処理方法が浮かびました。 >ところで UDP の解説って需要あるのかしら。 あります! もし時間があるなら是非解説をやって頂きたいです! |
@osa さん > 相手(webサーバ)がCGIでも何で書いていても、同じだと思っていい > んですよね?httpで標準化されてるんでしょうから。 そういうことです。 # 1年ぶりに Java を使ったので、僕の知識はあやしいですが。 @ケイさん >> ところで UDP の解説って需要あるのかしら。 > あります! へい、暇を見付けて書いてみます。 多分「IP Messenger を作ってみよう」になると思いますけど。 # 他に UDP でおもろいネタってあるかなぁ。resolver を作っても # あんまりおもしろくなさそうだし、NFS なんて全くわからんし。 ただし、最近人生に疲れていて (笑) 書く気力がないので、 気長にお待ち下さいまし。 |
はじめまして。 Kshについて質問があります。 シェルスクリプトの中で設定した変数、例えば、x=300とかを 別のスクロリトで参照することはできないのでしょうか? export x=300 と、言うようにしてもだめでした。 もう少し具体的に書くと、script1の内容は x=300 print "設定した値は$x" script2の内容は print "設定した値は$x" と、言ったようにscript1で設定したxをscript2で参照したいのです。 ご回答、よろしくお願いします。 |