裏表(Phinloda のもう裏だか表だか分からないページ)

コンピュータ・プログラミング系の話がメインのそれなりにごちゃごちゃしたネタばかり出てくるサイトです。多分。
c = a + a++;

知恵袋の質問に出てきたのだが、 これは未定義なのか不定なのかでかなり迷った。 JIS X3010 には次のように書いてある。

直前の副作用完了点から次の副作用完了点までの間に、式の評価によって一つのオブジェクトに格納された値を変更する回数は、高々1回でなければならない。さらに、変更前の値の読み取りは、格納される値を決定するためだけに行われなければならない。

(6.5 式)

タイトルの場合、a の値を変更する回数は1回だけなのでok。 後半の「変更前の値の読み取りは、格納される値を決定するためだけに行われなければならない。」がよく分からなかったのだが、変更前の値の読み取りというのは、a++ という式の値を読み取るタイミングの話だと解釈すれば、これは a を増分するのに使っているので、規約上は問題ない。

ということで、不定であると判断したのだが、未定義だと主張する人がいたので、正直いって、ちょっと迷っていたりする。 調べてみたのだが、この種の式を判断したページが見つからない。

c = a++ + a++; とか、a = a++; のようなのは山ほど見つかるのだが…。もちろん、両者とも未定義となる。

JUGEMテーマ:コンピュータ
| プログラミング | 21:17 | comments(1) | trackbacks(0)
workspace を作る場所を間違えてしまったのだが

Eclipse で java と ruby を使った開発が出来るようにして、 workspace を /usr/local/java と /usr/local/ruby にするつもりだったのだが、 なぜか /user/local/java と /user/local/ruby にしてしまった。 修正しないといけないのだが…あー面倒くさい。

こういうのって、directory を rename して、さりげなく workspace を指定し直しただけで動くのかな? 駄目もとでやってみればいいのか。

JUGEMテーマ:コンピュータ
| プログラミング | 17:09 | comments(0) | trackbacks(0)
そういえば今年はうるう年なのだが

うるう年って4年に一度の例外処理なので、 コンピュータとかソフトとかいろいろおかしくなる可能性を秘めているのだが、 明日は大丈夫なのだろうか。 ていうか、Excel みたいに1月からおかしなことになるケースなら問題なさそうだが…。

PHP で曜日判定するプログラムを最近見たのだが、結構ややこしいことをしていたので驚いた。

date("w", $time)

これで求まりそうな気がするのだが、例の公式を使ってややこしいコードを書いていたのである。 date を使うと何かパフォーマンスの問題とかあるのだろうか? ちなみに、'L' を指定すればうるう年の判定も date がやってくれると思うのだが。

JUGEMテーマ:コンピュータ
| プログラミング | 21:54 | comments(0) | trackbacks(0)
Java と PHP の速度差

某所で PHP より Java が遅いと散々騒いでいる人がいて、 その人の他の書き込みを見た限りは全く信用できないのでどうでもいいのだが、 実際の速度差はどうなのだろうかと思って調べたら、次のページを発見した。

Java 7 -server speed ÷ PHP speed | Computer Language Benchmarks Game

これによれば、pidigits 以外は Java が勝っているのだが、 pidigits はなぜ PHP の方が速いという結果が出ているのだろう?

JUGEMテーマ:コンピュータ
| プログラミング | 23:26 | comments(0) | trackbacks(0)
apache axis が 10 min で timeout する件

default の timeout は 10分に設定されているため、 応答に10分以上かかったら受け取れない。 設定の xml ファイルで変更できそうな気もするのだが、 servlet に組み込んであってその設定ファイルがどうも見当たらないので、 API を呼び出すところに細工をしてみた。

((org.apache.axis.client.Call) call).setTimeout(20 * 60 * 1000 * 10);

これで 20分まで待ってくれるはず。 ていうか実際に待ってくれるようになった。

JUGEMテーマ:コンピュータ
| プログラミング | 13:38 | comments(0) | trackbacks(0)
Date と Timestamp の誤差?

Java の話。 何か処理をするときに、オブジェクトに全部タイムスタンプを付けておいて、 新しいものだけ処理したい。 ということで、処理前にまず時刻を get して、 その後いろいろやって、 最後に、処理前に get した時刻とタイムスタンプを比較して、 基準の時刻以後に作られたオブジェクトだけを処理の対象とする。

ところが、この基準時刻が Date で、 タイムスタンプが java.sql.Timestamp だった。 実行すると、基準時刻の後に作ったはずなのに、 なぜか基準時刻前と判定されてしまう。 そんなことがあるのかな、と思った訳だが、 もしかすると時刻の精度が違うために逆転する可能性があるのかもしれない。

まあ基本的には違った型のものを比較するというところで危険な橋を渡っているようなものである。

JUGEMテーマ:コンピュータ
| プログラミング | 23:21 | comments(0) | trackbacks(0)
networkdays は同じ日を指定したら1になる

networkdays というのは稼動日数を求める関数で、 network-days ではなくて、net-workdays という意味だ。 Excel とかに実装されているのだが、 土日や祝祭日を除外した日数を求めてくれる優れものである。 これを Java で書こうとしたら結構大変だった。

何日稼動したかという意味から想像できるように、 同じ日を開始日、終了日に指定すると、1という値になる。 1日稼動したことになるからだ。 しかし、土日は計算に入らないから、土曜日から日曜日まで2日間を指定したら、 0という値が返ってくるはずだ。

JUGEMテーマ:コンピュータ
| プログラミング | 23:20 | comments(1) | trackbacks(0)
WinSCP の転送時間予測

大量、多数、というハンディがあるのである程度は仕方ないと思うが、 転送予想時間(Time Left)を見ていると、4:00:00(4時間) 〜4 00:00:00 (4日)の間で行ったり来たりする。誤差が大きすぎる。

転送速度にかかる時間は、A*(number of files) + B*(data size) によっておよそのものが決まる。 ファイル数が多かったり、ウィルスチェックとか途中にあると、A の効果がかなり影響するのだが、 WinScp の予測を見ていると、data size だけを計算しているような気がする。

JUGEMテーマ:コンピュータ
| プログラミング | 12:15 | comments(0) | trackbacks(0)
Mechanize を使って Jugem にログインする処理

Ruby 系の話題。 ログインできなくなったという話を昨日書いたが、 何をボケ手いるのか分からないが Mechanize と書くべきところを webrick と書いてますね。 webrick は http サーバーで、クロールとは関係ない。

ということで、昨日のページは修正しました。 気を取り直して紹介してみると、 Jugem にログインする処理は、次のようなスクリプトである。

    @myLogName = "jugem.log"
    @log = Logger.new(@myLogName)

    @agent = WWW::Mechanize.new { |a| a.log = @log }

    @loginUrl = "http://jugem.jp/"
    page = @agent.get(@loginUrl)
    form = page.forms[0]
#    form = page.forms[1]
    form['account_name'] = myId
    form['password'] = myPassword
    page = @agent.submit(form)

説明のために抜き出したので、実際はいろいろ他の処理が入っている。 問題は、コメントアウトしたところの forms[1] で、数ヶ月前は、これが 1 でないと動作しなかった。 今はなぜか 0 でないと動作しない。 さらに不思議なのは、 この forms[0] と forms[1] という2行が最初から書いてあったということで、 つまり、その前は 0 でないと動作しなかった期間があったのである。

html を受け取って応答を返すようなプログラムを書くときは、 どのようなデザインになるのか、 ページを公開する側に選択権があるので、 デザインの変更も考慮して処理を作るようにする必要がある。 今回の場合は、 より安全に処理するためには、 まず form がいくつあるかを調べて、 それらを順にチェックし、ログインのためのフォームがどれかを自動的に判断するような処理を書くようにすればいい。 ただし、実際はそこまでやっても手間に比較してあまり報われることはない。

JUGEMテーマ:コンピュータ
| プログラミング | 05:17 | comments(0) | trackbacks(0)
RealPlayer のファイルを mp3 に変換してみた

変換は Free RM to MP3 Converter というフリーソフトがあるので、それを使ったのだが、 このソフト、rmj のファイルはそのままでは処理してくれなくて、 ファイル名を変更して .rmj を .ra にすれば処理できるようになる。

この作業を手でやっていると埒が明かないので、 ruby でチャチャっと書いてみた。 肝になる処理はこんな感じ。

Dir::foreach('.') {|filename|
  File.rename(filename, "#{$1}.ra") if filename =~ /(.*)¥.rmj/
}
JUGEMテーマ:コンピュータ
| プログラミング | 22:42 | comments(0) | trackbacks(0)
<< 2/18PAGES >>
Powered by "JUGEM"
▲このページの先頭へ
CALENDAR
S M T W T F S
    123
45678910
11121314151617
18192021222324
252627282930 
<< November 2018 >>
NEW ENTRIES
CATEGORIES
ARCHIVES
NEW COMMENTS
NEW TRACKBACKS
LINKS
PROFILE