68user's page 掲示板

Prev< No. 1054〜1062> Next  [最新発言に戻る] [過去ログ一覧]
No. 1054 # has 2000/08/07 (月) 16:27:37
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を得るにはどうしたらよいのでしょうか。

No. 1055 # 68user 2000/08/07 (月) 17:46:23
@じょんさん
> .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 さん
> ソース類を頻繁に書き込む掲示板では
空白の話ですよね。空白を &nbsp; に変換しようかなと考えて
いたのですが、それだと
> 1.ドラッグによるテキスト選択がやりやすい(普通の表示だと
> 異様にやりずらいブラウザがあります)
> 2.1ページのログの縦幅が減る
というのは解消できないのでしょうか? 「ドラッグしづらい」
「縦幅が減る」の意味がちょっとわからないです。

@has
> この($sec,$min,$hour,$day,$mon,$year,$wday)が
> わかっているときに $tを得る
Time::Local モジュールを使います。perldoc Time::Local を
参照のこと。perl4 なら require 'timelocal.pl' です。

ところで、お盆には行けない可能性が大になりました>has
今の状況だと、夏休みを取れるかどうかも怪しいという…。

No. 1056 # has 2000/08/07 (月) 20:39:23
@68user
ありがとうございました。
調べてみますです。

お仕事大変そうですな。
時間のとれたときにでも、
ゆっくりお話ししましょう。

No. 1057 # じょん 2000/08/08 (火) 12:06:08
68user さんありがとうございます。
アドバイスを元に、試行錯誤してうまくいきました
Apache って面倒ですね (^^;)

今後も、よろしくお願いします。 m(_'_)m 

No. 1058 # gongo [E-mail] 2000/08/08 (火) 20:14:01
@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を何度も起こして
(上に他の窓を持って来たりして)動作を確認していたのですが
窓の名前が表示されるときもさればそうでないときもあるため
原因がいまいちわかりません。

どうかよろしくお願い致します。

No. 1059 # 68user 2000/08/08 (火) 22:51:30
まず、
    - 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 だから)
    - コールバックやイベントハンドラは一度設定したら、ずっと
        その設定が残る (再設定しない限り)
なので、意味はないと思います。

No. 1060 # gongo [E-mail] 2000/08/09 (水) 03:23:55
@68user様
本当にありがとうございます!
どうしてあのような状況になったのかだいたい理解できました。

>form に Expose イベントハンドラとして、全ての Xlib な画像を

これについては最初は各ウィジェットごとにExposeイベント処理をしよう
かとも思っていたのですが、アプリケーションの見た目のために
意味もなくつけた影となる窓もXlibを用いて色を塗っていたため
全部のウィジェットについてExposeを設定するよりもformの方が
簡単かなぁと思ってしまったためです。

ご提案してくださった対策法につきましては2つ目の方がちょっと
まだわからないところがあるのでいろいろやってみたいと思います。

基本的にはXtのラベルには出てきてほしくないものなのですが・・・。

No. 1061 # gongo [E-mail] 2000/08/09 (水) 21:13:23
@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つの窓をクリックすることで
全ての服の色に影響を与え、再描画するようにしたいと考えております。
どうか宜しくお願い致します。

No. 1062 # 68user 2000/08/09 (水) 21:54:47
たぶん、DrawOnWidget の fscanf で、バッファオーバーランを
起こしています。そのため windownum が上書きされ、値が常に
0になってます。例えば POLNUM の数を増やすと動作しました。

開発初期段階のうちから
    if ( j >= sizeof(polpoints)/sizeof(polpoints[0]) ){
        オーバーラン
    }
というような自動チェックのコードを仕込んでおくこと
をお勧めします。

あと、デバッグは、もうちょっと注意深くやってみましょう。
XChangeGC 周辺で windownum や pixelnum[windownum] の
値を表示させるだけで、おそらく気づいたことでしょうから。

Prev< No. 1054〜1062> Next  [最新発言に戻る] [過去ログ一覧]