現在 Xt の勉強中。 @gongoさん > 窓の表示とともにただ線を引くというのが > イベントなのかどうかわからなかったため、 ご存知かもしれませんが一応説明しておきますと、X では ウィンドウの最初の map 時や、他のウィンドウに隠れていた ものが露出した場合に Expose イベントが飛んできます。 なので、X クライアントは Expose イベントが飛んでくるか どうかを見張っていて、飛んできたら描画/再描画しなくては いけません。これをしないと、ウィンドウ内が真っ白になります。 X サーバ側が再描画をしてはくれませんから (とりあえず バッキングストアのことはおいとくとして)。 なお、最初の Expose が飛んでくる前 (Map する前) に描画 しようとすると、core 吐くか、X Protcol Error になった ような記憶が。 # ↑Xlib のレイヤの話。Xt だけを使っているなら、 # イントリンシクスがよきにはからってくれます。 # http://X68000.startshop.co.jp/~68user/xprogram/xlib-1.html @gaoさん > kinput2をバックグラウンドで起動した後、 netscape を > 起動しようとすると以下のようなメッセージを残してすぐに > 落ちてしまいました。 > % kinput2 -canna -jserver remotehost & canna の場合は、-cannaserver じゃなかったかなぁ。 -jserver は Wnn 用だったような。 # でも kterm などで漢字変換できているのなら、 # これでいいのかも。 > % netscape & > [2] Bus error netscape(core dumped) OS 名と、Netscape をどうやってインストールしたか、 X のリソース設定 (~/.Xdefaults の中身や xrdb -query の 結果) を書いて下さい。 というより、FreeBSD/NetBSD/OpenBSD/Linux あたりなら 日本語リソース付のパッケージが用意されているでしょうから、 それを使うのが簡単です。もしパッケージを使っているのに こういう結果になるなら、変なリソース設定をしている or リソース設定が足らない、あたりが怪しいかと。 |
また、質問させてもらいます。 $aaa = 20000728; $datedata=substr($aaa,0,4) . "/" . substr($aaa,4, 2) . "/" . substr($aaa,6, 2); print "datedata=$datedata\n"; のように、20000728 を 2000/07/28のようにyyyy/mm/ddに変換していますが、 上記以外のスマートな方法を教えて下さい。 「perlでVBのFormat関数みたいのはないですか」って質問されたもので...。 よろしくお願い致します。 |
スマートでないやり方です. 修飾子での簡単な型式変換をつけました. print &format('20000728','yyyy mm dd',"yyyy/mm/dd\n"); print &format('20000728','y1 y2 mm dd',"'y2年mm月dd日\n"); print &format('20000726','yyy! m! d!',"m!月d!日\n"); $M{'m#07'}='July'; print &format('20000726','yyyy m# d!',"m# d!, yyyy\n"); sub format{ local($src,$format,$template)=@_; local(@format,$ptr,$s,$d,$len); @format=split(/ /,$format); $ptr=0; foreach $s(@format){ $len=length($s); $d=substr($src,$ptr,$len); if ($s=~/!/){$d+=0;} if ($s=~/#/){$d=$M{"$s$d"};} $template=~s/$s/$d/g; $ptr+=$len; } return $template; } |
> VBのFormat関数 というものを知らないので外しているかもしれませんが、普通は $date = 20000728; printf "%04d/%02d/%02d",$date=~m/^(\d\d\d\d)(\d\d)(\d\d)$/; か $date = 20000728; $date =~ s|^(\d\d\d\d)(\d\d)(\d\d)$|$1/$2/$3|; printf $date あたりかなぁ。 もし表示形式を指定できるようにするなら、date コマンドと同じ書式の http://www.jp.FreeBSD.org/cgi/mroff.cgi?subdir=man&man=strftime&dir=jpman-3.1.0%2Fman#toc0 にするかも。 |
すいません、返答がずいぶん遅れてしまいました。 68userさん、いろいろアドバイスありがとうございます。 それで、いろいろMewについて見ていったのですが、 たまたま見ていたEmacsのINFOの中にMewという単語を見つけ、 中を見ていったら、何と既にMewがインストールされていました。 色々お手数おかけしてすいませんでした。 ただ、色々試みているのですが、いまだにMewを起動させる事ができません。 M-x Mew と入力すると起動すると書いてあるのですが、 これをどこで(どういう場面で)入力すればいいのかが解りません。 教えて頂けますか? それから、最近、Netscape をkill した時に Bus error という表示が出て、.netscape フォルダの中に、 lock ファイルができてしまいます。 以前はこんな事はなく、Done という表示が出て lock ファイルも作られませんでした。 僕は最近、不必要だと思われるファイルを色々消していっているのですが、 その過程で、何か必要なファイルまで消していってしまったのでしょうか? |
@68user様 > X ではウィンドウの最初の map 時や、他のウィンドウに隠れていた > ものが露出した場合に Expose イベントが飛んできます。 ここら辺はなんとなくわかっていたのですが、 最終的にできてほしいプログラムのことを考えるあまり 頭の中でごちゃごちゃになっていました。 まだ線をひくのを確認していないのでやってみます。 |
@68user様 度々すみません。27日のご説明でイベントハンドラを 用いていましたが、呼び出されるイベントハンドラは あらかじめ決められた関数の形式(XtEventHandler型)で なくてもよろしいのでしょうか。 |
>68userさんへ 確認し、理解できました。ありがとうございました。 >Netboyさんへ 確認し、ちょっと理解できないところがありましたが、ありがとうございました。 引数2と引数3の関係がイマイチわかりません。 とりあえず、これで、失礼いたします。 ありがとうございました。 |
>引数2と引数3の関係がイマイチわかりません。 引数2は,引数1の切り分け方の指定です. print &format('28/07/2000','dd x mm x yyyy',"yyyy年mm月dd日\n"); のように使えます. 混乱させてしまって済みません. 関数名に予約語(format)を使ったのもまずかったです... |
@68userさん >うぅ、tcpdump で見ると確かに 53 でした ぼくも確認しなおしました。 記憶違いでなくてよかった・・・。 #68userさんが断言してらっしゃると、 #自分の記憶に自信があっても、ビビッちゃいます(笑 |
@gongo さん > 呼び出されるイベントハンドラはあらかじめ決められた > 関数の形式(XtEventHandler型)でなくてもよろしいのでしょうか。 void repaint(void) としたのは、てきとーに書いただけで、 void handler(Widget,XtPointer,XEvent*,Boolean*) が正しいです。まぁ XtEventHandler は typedef void (*XtEventHandler)( Widget /* widget */, XtPointer /* closure */, XEvent* /* event */, Boolean* /* continue_to_dispatch */ ); なので、void repaint(void) でも動くはずです。C言語では 呼び出し側が渡した引数を、呼び出された関数側で受けなくても 構わないからです (…ほんとかなぁ。動くかどうかは環境依存かも)。 @ちゃいぱさん > 「perlでVBのFormat関数みたいのはないですか」 ちなみに、この問いが「perl に strftime のような関数はないのか」 という意味なら、答えは「perl5 標準では、ない」です。 ただし Time::CTime モジュールをインストールすれば strftime 関数が使えるようになります。 @いちさん > M-x Mew と入力すると起動すると書いてあるのですが、 > これをどこで(どういう場面で)入力すればいいのかが解りません。 emacs を起動して、ESC キーを押して、x を押して、 mew とタイプして Enter です。コマンドラインから % emacs -f mew としても同じことになります。 > Netscape をkill した時に Bus error という表示が出て、 > .netscape フォルダの中に、lock ファイルができてしまいます。 常套手段として、rm -rf ~/.netscape で設定ファイルをクリア してから、再度 netscape を立ち上げて下さい。preferences.js、 bookmarks.html などのバックアップは忘れずに。 |
@68userさん ありあまる回答をして頂き、感謝いたします。 あがとうございました。 ただ、元々の質問者のレスがなく、ちょっと残念...。 @Netboyさん 理解できました! 関数名を変えれば、結構使えそうですね。 ありがとうございました。 |
需要があるかどうかは知らないけど、BBS の全文検索の試運転。 http://X68000.startshop.co.jp/~68user/cgi-bin/wwwboard/namazu.cgi namazu-2.0.4 でやってますが、replace に正規表現使えるし、 filter いじれば この BBS のデータ形式にも対応できるし、 いい感じ。 まだ自動更新はされません。 @hsj さん > #68userさんが断言してらっしゃると、 > #自分の記憶に自信があっても、ビビッちゃいます(笑 僕はかなりいいかげんな回答をしてます。 そもそも DNS サーバの設定をしたことがないくらいだし :-) |
> http://X68000.startshop.co.jp/~68user/cgi-bin/wwwboard/namazu.cgi あら、検索すると、データファイル中の remote host が丸見え。 filter で削るように設定したつもりだったんだが。というわけで、 いったん引っ込めます。 |
68userさん> 御回答ありがとうございます。 仰せのとおり Mew を起動させようとしましたができませんでした。 どうやら、Mew の help があるものの、Mew 自体はインストールされてないみたいです。 そこで、Mew と im をインストールしました。 次に、アーカイブを展開するというように説明に書いてあったのですが、 これって、圧縮されたファイルを解凍するという事ですよね。 そう思って、gzip で圧縮されていたので、gunzip で解凍しようとするのですが、 gzip: mew-1.94.2.tar.gz: unexpected end of file という表示が出て、うまくいきません。 どうしたらよいのでしょうか? それと、.netscape/ のことについてですが、 その中にあるファイルの bookmarks.html は何となく解りますが、 preferences.js はどういうファイルなのですか? その他の、cache/(ディレクトリ)内にある index.db そして、archive/(ディレクトリ)、cert7.db 、history.dat、 history.list 、key3.db 、plugin-list 、plugin-list.BAK、 registry 、secmodule.db はそれぞれどういったファイルなのでしょうか? 教えて下さい。 それから僕は、ディスク容量を節約するために、cache/ フォルダの中に、 99/ というフォルダを作り、その中に必要なキャッシュファイルを移動し、 他のキャッシュファイルは、全て自動削除するように設定しているのですが、 その 99/ フォルダに入れたキャッシュファイルの効果があるか、良く解らないのです。 (どうやらキャッシュフォルダは 00〜0f、10〜1f までしか作られないみたいなので、 99にする必要は別段ないのですが) これって、意味ありますか? もしくは、もっといい方法がありましたら教えて下さい。 |
FTPについての質問なのですが、 FTPでデータを転送するさい、失敗することはありえるのでしょうか ある場合、正しく転送されたか、チェックすることは可能なのでしょうか? ネットワーク関係は初心者なもので、よくわからないのですが FTPはTCPの上位プロトコルなので、 データのチェックはTCPレベルでやっているのでしょうか? 突然の質問、失礼しました。 |
返答ありがとうございます。 >> % netscape & >> [2] Bus error netscape(core dumped) >OS 名と、Netscape をどうやってインストールしたか、 >X のリソース設定 (~/.Xdefaults の中身や xrdb -query の >結果) を書いて下さい。 ~/.Xdefaults の内容は以下のようになっています。 kterm,netscape当りの設定内容のみを書き出してみました。 設定ミスなどがありそうですか? ---------------------------------------------------------------- kterm*VT100.translations: #override \ Shift <Key>space: begin-conversion(_JAPANESE_CONVERSION) KTerm*KanjiMode: euc KTerm*SaveLines: 1000 KTerm*ScrollBar: on KTerm*IMProtocl: kinput2 KTerm*Modifiers: @im=kinput2 *inputMethod:kinput2 *VT100*translations: #override\ Shift<Key>space: begin-conversion(_JAPANESE_CONVERSION) Netscape*useStderrDialog: False Netscape*international: True Netscape*inputMethod: kinput2 Netscape*XmTextField.fontList:\ -*-courier-medium-r-*--14-*-*-*-*-*-iso8859-1;\ -*-*-medium-*-*--14-*-*-*-*-*-jisx0208.1983-0;\ -*-*-medium-*-*--14-*-*-*-*-*-jisx0201.1976-0;\ -*-*-medium-*-*--14-*-*-*-*-*-jisx0212.1990-0: ---------------------------------------------------------------- xrdb -query ↑このコマンドは意味がわからないのですが、何を行うのでしょうか? |
> gzip: mew-1.94.2.tar.gz: unexpected end of file mew-1.94.2.tar.gz のダウンロードに失敗したんでしょう。 ブラウザで落としたなら、別の HTTP/FTP クライアントを試す。 ftp の ascii モードで落としたのなら、binary モード。 > それと、.netscape/ のことについてですが、 自分でエディタなどを使って覗いてみましたか? > その 99/ フォルダに入れたキャッシュファイルの効果があるか、 > 良く解らないのです。これって、意味ありますか? ls -lud 99/ で、最終アクセス時刻が得られます。その結果で 判断できるでしょう。 > FTPでデータを転送するさい、失敗することはありえるのでしょうか ユーザ認証の失敗とか、コネクションが張れないとか、ascii/binary の 設定ミス以外にビット化けするか、ということですか? IP データグラムでは、そもそもデータ部のチェックサムが存在しませんので、 ノーチェックです。一方、TCP データグラムはチェックサムがありますが、 「化けてもチェックサムが同じで、検出できない」ということがどれくらいの 確率で起こるのかはわかりません。おそらく論文のネタになっているでしょうね。 |
僕の回答を再掲します。 > OS 名と、Netscape をどうやってインストールしたか ちゃんと読んでますか? あと、原因の切り分けを行ってください。~/.Xdefaults の 各行をコメントアウト (リソースのコメント開始は `!' ) して動けば、原因はリソースなんでしょう。rm -rf ~/.netscape して動けば、原因は netscape の設定ファイルがおかしくなって しまったんでしょう。 |
> TCP データグラム TCP セグメントでした。 |
どうも、ご無沙汰しております、yujiです。(^^) 今、指定されたディレクトリ以下のファイル一覧を表示させたい、 と考えているのですが、再帰関数を使った場合、 ファイルハンドルがグローバルのため、値の上書きになって しまい、うまくいかないようです。ローカルなファイルハンドルというのは、できるんでしょうか?myやlocalで試してはみたのですが。(^^; なにかよい方法は、ないでしょうか。 また、$home/$fileのカタチで出力する場合、どのようにするのがよいでしょうか? "$home/$file"とすると、/$で変数ではなく文字として解釈されると 思うのですが。"$home/".$fileとして逃げたりしているんですが。(^^; こちらのほうでも、別の方法などありましたら、よろしくお願いします。 #!/usr/bin/perl GetFiles("."); exit(0); sub GetFiles(){ local($dir)=@_; print "In $dir\n"; opendir(DIR,$dir); while($file=readdir(DIR)){ if(-d $file && $file ne '.' && $file ne '..'){ &GetFiles($file); }else{ if($file ne '.' && $file ne '..'){print "$file\n";} } } close(DIR); } |
@68user様 ご回答、ありがとうございました。 もう少しTCP/IPについて勉強してみます。 |
local(*DIR); とします。なお、ハンドル DIR だけでなく $DIR も @DIR も %DIR も 全て localize されます。あるいは $handle = 'unique string'; opendir($handle,'.'); とか。あと、こういう疑問が出てくるなら、 http://www.oreilly.co.jp/BOOK/adperl/ をお勧めしておきます。 > "$home/$file"とすると、/$で変数ではなく文字として解釈される /$ でも問題ないです。\$ と勘違いされてませんか? |
すばやいお返事、どうもありがとうございました。 おかげさまで、うまくいきました。(^^) 書籍の情報、参考にさせていただきますので。 そうですね。すいません。(^^; >勘違い スラッシュとバックスラッシュを使っていまして。 FTPで、指定したディレクトリ以下を決まった時間に、 指定したFTPサーバーのディレクトリに、自動的にアップロードするスクリプトを 作成していまして。これで次のステップに進めそうです。(^^) 今後とも、どうぞよろしくお願いします。 #!/usr/bin/perl GetFiles("."); exit(0); sub GetFiles(){ local($dir)=@_; local(*DIR); local($file); print "In $dir\n";#ディレクトリの作成などに。 opendir(DIR,$dir); while($file=readdir(DIR)){ if(-d "$dir/$file" && $file ne '.' && $file ne '..'){ &GetFiles("$dir/$file"); }else{ if($file ne '.' && $file ne '..'){print "$file\n";}#ファイルごとの処理 } } close(DIR); } |
近況報告ですが、回線が専用線になりまして。(^^) 今後は、apache+php+データベースに取り組んでいきたいと考えております。 Xt、おもしろいですよね。以前、ちょっとだけ取り組みました。 ディレクトリには、1個以上のファイルが含まれることが 多いですから、こっちのほうがスマートでしたね。(^^; それでは、また。 #!/usr/bin/perl GetFiles("."); exit(0); sub GetFiles(){ local($dir)=@_; local(*DIR); local($file); print "In $dir\n"; opendir(DIR,$dir); while($file=readdir(DIR)){ if(-d "$dir/$file"){ if($file ne '.' && $file ne '..'){ &GetFiles("$dir/$file"); } }else{ print "$file\n"; } } close(DIR); } |
御回答ありがとうございます。 ちなみに僕の使っているOSはSunOS 5.6で、 Netscape はバージョン4.7です。 HTTP/FTP クライアントについては、 ネットワークプログラミングの基礎知識で今勉強中なのですが、 ftp の ascii モードと binary モード というのがなんなのか良く解りません。 .netscape/ については less で覗いてみて、 bookmarks.html は、ブックマークに登録してあるもの、 history.list は、 URLを入力する所の右の下向き矢印をクリックすると表れるURL一覧、 preferences.js は、設定ファイルだと思うのですが、 plugin-list 、plugin-list.BAK については解りません。 その他のファイルについては、見ようとすると "ファイル名" may be a binary file. See it anyway? という表示が出てきて、yesと答えても意味の解らないものが出てくるだけでした。 netscapeのキャッシュの事に関しては、 ls -lud 99/ と入力すると、99/ディレクトリにアクセスされていましたが、 その99/ディレクトリの中のファイルに関して、そのコマンドを入力すると、 アクセスされていませんでした。 これって、だめなのでしょうか? あと、umask というコマンドについてなのですが、 ファイル、ディレクトリ作成時に、 ファイルのパーミッションを -rw------- ディレクトリのパーミッションを drwx------ としておきたく、umask の値を変更したいのです。 umask が0の時のパーミッションは、 ファイルが -rw-rw-rw- で、 ディレクトリが drwxrwsrwx なのです。 groupの部分に s の表示があるため、umask 2067 としたらうまくいかないので、umask 77 としたら、 ディレクトリのパーミッションは drwx--l--- となりました。 groupの l も消すようにしたいのですが、どうしたらいいですか? |
@いちさん > ftp の ascii モードと binary モード > というのがなんなのか良く解りません。 http://X68000.startshop.co.jp/~68user/unix/pickup?ftp のように どこかの ftp サイトから mew-1.94.2.tar.gz をダウンロードして下さい。 get の前に binary とタイプすればいいです。 > .netscape/ については less で覗いてみて、 ね、自分で調べればそれなりにわかるでしょ。まずは 自力で調べて、それでもわからなければ質問して下さい。 その他については、strings で見ればわかるかもしれません。 それでもわからないものについては、多分僕にもわからないです。 > 99/ディレクトリの中のファイルに関して、そのコマンドを > 入力すると、アクセスされていませんでした。 > これって、だめなのでしょうか? ダメなんでしょう。ということは、おそらく % strings ~/.netscape/cache/index.db で、ファイル名が出ないでしょうから、そもそも URL と キャッシュファイルとのマッピングが出来ていないということです。 > あと、umask というコマンドについてなのですが、 umask 77 で、mkdir でディレクトリを作成したら drwx--l--- になりますか? SunOS 環境が今手元に ないので試せませんが、本当ですか? # l の意味は ls のマニュアルを参照のこと。 @yujiさん > 近況報告ですが、回線が専用線になりまして。(^^) 実はうちも専用線になったので Postgres をいじって遊ぼうと 思ってたら、仕事のせいで暇が全くなかったりします。 機能仕様書や詳細設計書を書いたり、Word や Excel に 苦しむ生活はもう嫌 (-_-# |
はじめまして。 私は今プログラマーの仕事をしております。 今回の質問というのはcronについてです。 現在、UNIXを使って「指定した時間にプログラムを実行させる」 ということをしようとしています。 crontabに日時などの情報とコマンドを記述するらしいということは わかったのですが、どうも思ったようにいきません。 crontabに日時、echoコマンドを記述したところ mailで返ってきました。 インターネットからの情報ではechoコマンドやエラーが出たときは mailで返って来るということなので、それはそれでよかったのです。 しかし、いざ実行したいシェルを書きますと、 シェルが起動してくれませんでした。 cronはシェルを起動することもできるんですよね? シェルはフルパスで指定しましたし、chmodで実行を許可しておきました。 そして、何せシェル単独では動くのです・・・。 cronを使ってシェルを起動させるのに、ほかに何か注意する点はありますか? お忙しいところすいません。 もし何かわかることがございましたら、お答えいただきたく思います。 それでは、よろしくお願いいたします。 |
> ほかに何か注意する点はありますか? 必要な環境変数が設定されているか、例えば PATH は 通っているか、などをチェックしましょう。cron で env コマンドを実行すればわかるでしょう。 |
この掲示板を観ていて、 ソース類を頻繁に書き込む掲示板では、独自タグでtextareaを表示できるようにすると 1.ドラッグによるテキスト選択がやりやすい(普通の表示だと異様にやりずらいブラウザがあります) 2.1ページのログの縦幅が減る という利点があると思ったのですがどうでしょうか。 #独自タグは人によって意見が全然違うのでしょうが ##「違うのでしょうが」っていうのは日本語としておかしいのでしょうが |
はじめまして、教えて下さい。 Apache 1.3.12 TurboLinux 6.1 の環境で cgi-bin フォルダがあります。 .cgi のファイルは正しく実行されるのですが、 .html のファイルまで実行しようとする様子で、エラーになってしまいます。 多分、Apache の設定だと思うのですが、資料がなくてわかりません。 ご教授よろしくお願いします |
perlでローカルタイムと標準時との間の相互変換をする方法について 質問です。 $t = time; ($sec,$min,$hour,$day,$mon,$year,$wday) = gmtime($t); または ($sec,$min,$hour,$day,$mon,$year,$wday) = localtime($t); とすると、現在の時刻に関する情報(秒、分、時、日、年、月、曜日)が 得られますが、この($sec,$min,$hour,$day,$mon,$year,$wday)がわかっているときに $tを得るにはどうしたらよいのでしょうか。 |
@じょんさん > .html のファイルまで実行しようとする様子で、エラーになってしまいます。 おそらく http:// hostname/~foo/cgi-bin/ でなくて、 http:// hostname/cgi-bin/ の話だろうと思いますが、デフォルトでは httpd.conf で ScriptAlias /cgi-bin /usr/local/www/cgi-bin などとなっているので、全てのファイルが CGI プログラムとして 認識されます。なので、 Alias /cgi-bin /usr/local/www/cgi-bin にすればよいです。ただし根本的には /usr/local/www/cgi-bin に CGI プログラムしか置かないというのが (apache の思想としては) 正しいです。 @Syuichi.K さん > ソース類を頻繁に書き込む掲示板では 空白の話ですよね。空白を に変換しようかなと考えて いたのですが、それだと > 1.ドラッグによるテキスト選択がやりやすい(普通の表示だと > 異様にやりずらいブラウザがあります) > 2.1ページのログの縦幅が減る というのは解消できないのでしょうか? 「ドラッグしづらい」 「縦幅が減る」の意味がちょっとわからないです。 @has > この($sec,$min,$hour,$day,$mon,$year,$wday)が > わかっているときに $tを得る Time::Local モジュールを使います。perldoc Time::Local を 参照のこと。perl4 なら require 'timelocal.pl' です。 ところで、お盆には行けない可能性が大になりました>has 今の状況だと、夏休みを取れるかどうかも怪しいという…。 |
@68user ありがとうございました。 調べてみますです。 お仕事大変そうですな。 時間のとれたときにでも、 ゆっくりお話ししましょう。 |
68user さんありがとうございます。 アドバイスを元に、試行錯誤してうまくいきました Apache って面倒ですね (^^;) 今後も、よろしくお願いします。 m(_'_)m |
@68user様 どうも、ご無沙汰しております。Xアプリケーション作成中のgongoです。 前回68user様に教えていただいた通り、イベントハンドラを用いて 線を描くことができました。そこで今度はXDrawLineだけではなく、 他のXlibの関数を用いて絵を描こうと思い実行してみたのですが 問題が生じてしまいました。前回のプログラムからちょこっと直したので 次のようになっております。 http://www.din.or.jp/~gongo/xtshirts.c (プログラム本体) http://www.din.or.jp/~gongo/color.dat (色設定) http://www.din.or.jp/~gongo/outline.dat (絵の輪郭のための座標) http://www.din.or.jp/~gongo/polygon.dat (絵を塗り潰すための座標) 今回やろうとしたのは、 1.絵を描くための窓を白で塗りつぶす(最初のみ) 2.窓に影をつける(見た目を格好よくしたかったため) 3.全ての窓に同じ絵を描く 4.その絵に輪郭をつける です。で、問題というのはこれらすべてはExposeイベントによって 処理されるようにしたのですが、どうも窓の名前(window1,window2など) が表示されてしまいます。窓に何も描いていない場合でない限り 窓の名前は表示されないものと思っていたのですが、今回絵を描いても 窓の名前が表示されたりされなかったりします。Exposeを何度も起こして (上に他の窓を持って来たりして)動作を確認していたのですが 窓の名前が表示されるときもさればそうでないときもあるため 原因がいまいちわかりません。 どうかよろしくお願い致します。 |
まず、 - Window?? というのは Xt のラベル - その下の服やらなんやらは Xlib です。 Xlib の方は Expose が発生すると再描画するように EventHandler を 設定しています。しかし、Xt の方は Xt が勝手に Expose を取得し、 再描画しています。 で、表示される/されないの現象を見るに、 - Xlib の方は、ウィンドウの一部が露出しただけで常に 再描画するようになっています。なぜならウィンドウ全体である form に Expose イベントハンドラとして、全ての Xlib な画像を 再描画するように設定されているからです。 - Xt のウィジェットの方は、自分自身のウィジェットが 露出しない限り、再描画しません なので、xtshirts のウィンドウの半分を別のウィンドウで覆い、 その後 xtshirts ウィンドウを露出させると、隠れていなかった 部分のラベルが消えます。これは、隠れていなかった部分の ウィジェットは再描画しなかったのに、Xlib の方が再描画 してしまったからでしょう。 対策としては、 - Xlib の方でも本当に関係ある Expose だけを拾うようにする。 - Xlib の方で Expose を受けたら再描画し、その後 XClearArea (だったかなぁ?) で隠れてしまったウィジェットの方に Expose イベントを送る でしょうか。あるいは重ね合わせを簡単に指定できる方法が あるのかもしれません。 以上、Xt 素人の意見でした。大外しの可能性もありますので、 盲目的に信用しないで下さい。 ちなみに initflag の部分は - 結局一度しか実行されない (main だから) - コールバックやイベントハンドラは一度設定したら、ずっと その設定が残る (再設定しない限り) なので、意味はないと思います。 |
@68user様 本当にありがとうございます! どうしてあのような状況になったのかだいたい理解できました。 >form に Expose イベントハンドラとして、全ての Xlib な画像を これについては最初は各ウィジェットごとにExposeイベント処理をしよう かとも思っていたのですが、アプリケーションの見た目のために 意味もなくつけた影となる窓もXlibを用いて色を塗っていたため 全部のウィジェットについてExposeを設定するよりもformの方が 簡単かなぁと思ってしまったためです。 ご提案してくださった対策法につきましては2つ目の方がちょっと まだわからないところがあるのでいろいろやってみたいと思います。 基本的にはXtのラベルには出てきてほしくないものなのですが・・・。 |
@68user様 Xtのラベルを表示させないようにするのは成功しました。 結局各ウィジェットごとにExposeイベントの処理を行うことにしました。 そこで次に各ウィジェットごとに服の色を変えようかと思い、 DrawOnWidgetの中でdrawgcの属性値を変えようとしたのですが どうもうまくいきません。1つのGCを各ウィジェットに対して 属性値を変えつつ使い回すのは無理なのでしょうか。 どうしても最初の窓用に設定した色で全て塗りつぶされてしまいます。 プログラムはこちらです↓ http://www.din.or.jp/~gongo/xtshirts.c http://www.din.or.jp/~gongo/color.dat http://www.din.or.jp/~gongo/fixedcolor.dat http://www.din.or.jp/~gongo/polygon.dat http://www.din.or.jp/~gongo/outline.dat まだ先の話ですが、いずれは1つの窓をクリックすることで 全ての服の色に影響を与え、再描画するようにしたいと考えております。 どうか宜しくお願い致します。 |
たぶん、DrawOnWidget の fscanf で、バッファオーバーランを 起こしています。そのため windownum が上書きされ、値が常に 0になってます。例えば POLNUM の数を増やすと動作しました。 開発初期段階のうちから if ( j >= sizeof(polpoints)/sizeof(polpoints[0]) ){ オーバーラン } というような自動チェックのコードを仕込んでおくこと をお勧めします。 あと、デバッグは、もうちょっと注意深くやってみましょう。 XChangeGC 周辺で windownum や pixelnum[windownum] の 値を表示させるだけで、おそらく気づいたことでしょうから。 |
ちゃうな。POLNUM は正しいのか。というわけで、 誤: fscanf("%d%*c%d%*c",&polpoints[j].x,&polpoints[j].y); 正: fscanf("%hd%*c%hd%*c",&polpoints[j].x,&polpoints[j].y); ですかね。XPoint のメンバ x,y は int でなく short int です。 |
@68user様 お手数おかけ致しまして申し訳ございませんでした。 DrawOnWidgetに入った時点でwindownumがきちんと受け渡されて 表示されていたので、てっきり大丈夫なのだと思いこんでいました。 以後もう少し気をつけてデバック致します。 |
よく参考にさせてもらってるのですが、発言ははじめてです。 よろしくお願いします。 今環境変数に興味を持っているのですが UGTOPの「確認くん」で一部の携帯電話で クライアントの電話番号が取得できる欄が ありました。この環境変数名(HTTP_???)は何かご存知ですか? もしかしてCLIENT_IPとかでしょうか? |
> この環境変数名(HTTP_???)は何かご存知ですか? http://www.zdnet.co.jp/news/0003/29/ido.html HTTP_X_UP_SUBNO だそうで。まぁおそらくデータの流れは 携帯←→センタ←→WWWサーバ でしょうから (かな?)、今はセンタ側で対応されてて、電話番号は 取れないのかも。 ところで、相変わらず http://www.ugtop.com/ って、Shift-JIS なのに Content-Type: text/html; charset=iso-2022-jp を を出してますな。なので、うちでは化け化け。何か意図があるんだろうか。 |
はじめまして perlで以下のことをやりたいのですが教えてください。 $aaa = 10000000; これを 10,000,000 というようにしたいのですか? 1000の場合は、1,000 です。 どうすればよいですか? よろしくお願いします。 |
> どうすればよいですか? どうすればよいと思いますか? # 考えるのがめんどくさい人はこちら。 # http://www.din.or.jp/~ohzaki/perl.htm#NumberWithComma |
どうも、おひさしぶりです! wrapperを使って色々テストしていたのですが、wrapperではエラー表示がなく 実際に実行すると得意の500 Internal Server Errorがでます。 ちょっと変なことをやってるんですが...。 (日付を数値で保存して差をみたかった) #!/usr/local/bin/perl $temp0 = 966500000; $temp1 = localtime($temp0); $temp2 = localtime(966000000); print "$temp1/$temp2"; 以上がテストした全文です。(属性は755) この調子だとプログラムに組みこんでもエラーですよね? 日付表示もしたいのでlocaltime($temp0)とかしてみたんですが...。 何処がマズイのでしょうか? |
> 空白の話 それはどういう不都合なのでしょうか? ドラッグというのは、マウスでソースを選択する時の事です。 |
@R-N さん > wrapperを使って色々テストしていたのですが、wrapperではエラー表示がなく > 実際に実行すると得意の500 Internal Server Errorがでます。 Content-type ヘッダを出力していない、ってことかな。 @Syuichi.K さん > ドラッグというのは、マウスでソースを選択する時の事です。 これはちょっと後ほど。というか、空白はなにかしらの 方法で画面に反映するようにするつもりではいます。 |
ぐはっ、そうでした...。 あいかわらず基本がおろそかでもうしわけない...。 ありがとうございました、でなおしてきまする。 |
@68user様 どうも、gongoです。 前回発言したときよりさらに進めて、今度は真ん中に表示される服を除く 服が選択されたときに、選択された服の色によって選択されなかった 他の服の色を塗りなおすということをやろうとしています。 そこで、あるウィジェットがマウスでクリックされるとWidgetChoice という関数に入るようにして、その中でChangeColorという関数を 呼び出すことで色のRGB値を書いたファイルcolor.datを書き直すことに しました。そして新たな色で再描画するようにExposeイベントを送る ことにしました(ただし、まだ実験段階なのでlabel1だけ 書き直そうとしています)。 ところが、Exposeイベントを送っても新たなカラーで描き直されません。 XtRealizeWidgetではだめで、XtUnmapWidgetをやってからXtMapWidget をやるとマウスでクリックした時に一瞬label1がチラッとするので Exposeイベントは送られているような気がします。しかし、新たな色が 有効になりません。また、XClearWindowをやってみたりもしましたが これだと服が消えてしまったままで再描画されません。 こういった場合は、DrawOnWidgetと同様のことをChangeColorの後に 書くべきなのでしょうか。できればExposeイベントを意図的に 起こすことで再描画してほしいのですが・・・。 どうか宜しくお願い致します。 |
@68user様 よくよく考えると、maninに入ってすぐにColor()を呼び出したっきり だからまずいのでしょうか。そうなるとExpose云々よりもまず クリックしてcolor.datが書き直された後にColor()を呼び出すべき なのでしょうか。う〜ん、お盆あけないと確認できません・・・。 |
ここでははじめましてです。どぞよろしく。 早速質問ですみませんが、 ・Cygwinで動くApacheのバイナリーパッケージを見かけた方か、 ・CygwinでApacheのコンパイルに成功した方か ・Windows用ApacheでCygwinのPerlのスクリプトを動かす方法を知っている方は いらっしゃいますか? いつもは会社でFreeBSDでCGIの開発、メンテをしているのですが、 (一般ユーザーで管理者ではなく、UNIXくわしくありません) 夏休み家人のWindows98マシンで作業をしなければならなくなり、 Cygwin、Perl、Meadow(Emacsですな)は入れて快適に使えているのですが、 肝心のApacheがどうしてもインストールできません。 具体的な現象でいうと、makeで「no rule for targat all. stop」とか言われます。 成功した人のページ(男塾の塾長さんらしいです ^^;)のマネをしているのだが、、。 ActivePerlを使うのが常道らしいですが、会社に最終的には持っていくのでUNIX互換にしたいし、 DOS窓とかWindowsのエディターは慣れてないので憂鬱です。 ぶしつけで申し訳ありませんがよろしくお願いします、、。 ああっでもペケロクの部屋なのにPCの質問ですいませんっ ではでは。 |
すいません、解決しちまいました、、。 pastyというフランス人のサイト(http://persoweb.francenet.fr/~pasty/cygport/)に B20(というCygwinのバージョン)用のバイナリーがあって、ぼくのはv1.1なんだけど、 動かしてみたら、動いた。 http://localhost/index.htmlに自分が書いたページ置いたら見えます。イエー! ただ、ここでまた問題がー。 /usr/local/apache/cgi-bin/の下に自作のcgi、hello.cgiを #!/usr/local/bin/perl print "Content-type: text/html\n\n"; print "<html><body>聞こえますか</body></html>\n"; とか書いて動かしてみたんですが、奇怪な現象が、、。 ブラウザがページを一生懸命ロードするんですけど、 いつまでたってもロードがおわりません。 で、停止ボタンを押すと 聞こえますか> ================================================ 転送を中断しました! とか表示されて、ページのソースを見ると、 <html><body>聞こえますか</body></html> と書いてある。ううん、動いてはいるようなんだけどなー。 コマンドラインで hello.cgi を動かしても、 Content-Type: text/html <html><body>聞こえますか</body></html> と出てくるし、Content-type のあとの改行を1個減らすと ちゃんと Internal Server Error になるんですけど。(^^;;; どなたか同様の経験を克服された方はいらっしゃいますか? 何回も聞いてすいません。 うーん、惜しい。惜しいんだけどなー、、、。 |
ホームページ開設のお知らせ・・・ ■残暑お見舞い申しあげます。さて、一風変わったサボテンホームページができましたのでご参笑ください。これで子供たちやご婦人方のサボテンファンがひとりでも増えれば幸いです。どうか今後ともいろいろご教示くださいね。 |
はじめまして、skel.103Mです。いつもこのホームページを参考にさせて いただいてます。 @ふくし さん >print "Content-type: text/html\n\n"; print "Content-type: text/html\r\n"; か print "Content-type: text/html\n\r"; にすれば動くかも、と思ったりしました。 |
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秒で表示されます。(^^;;; |