灯台下暗し -カッターナイフで恐竜を腑分けした記録-

仕事で携帯向けアプリを書いて、趣味で携帯電話を買い、趣味で同人小説を書いて、何もしていません。

テレビやケータイのソースコードをダウンロードしてみよう

2007-06-21 23:59:40 | 携帯電話

一つの記事の紹介から。

Linux を使用している薄型テレビや携帯電話を購入した人は、Linux 部分(正確には他にもいくつか)のプログラムのソースコードをダウンロードできます。

つきねこ様は FOMA N903i を購入してらっしゃるので、NEC から Linux 部分のソースコードをダウンロードできます。

なぜ、こんなことになっているのか。製品を購入した人にソースコードを渡すことが、Linux を使用することの条件だからです。

現在、ソフトウェアの使用を認めるときにはライセンス契約を課すことができます。Linux が課すライセンス契約は「GNU 一般公衆利用許諾契約書」です。その中の条項が、実行バイナリを配布したら、実行バイナリを受け取った人がソースコードを求めた場合にはソースコードを渡さなければならないと定めています。正確な内容はライセンス契約自体を参照願います。

ここで不正確な表現で、ショップで販売されているソフトウェアとの違いを示します。ショップで販売されているソフトウェアをインストールしようとしたらライセンス契約が表示され「コピーしたら訴えるぞ」と主張するのに対し、Linux では「コピーしなかったら訴えるぞ」と主張しているのです。この表現は不正確で、N903i を購入しただけのつきねこ様には、ソースコードを知人にコピーする義務はありません。もし N903i を知人に譲ったときの判断は難しいですが、譲り受けた知人が直接 NEC からソースコードを受け取れば問題ないでしょうか?

面白いです。面白すぎます。ソースコードが手にはいると思っただけでわくわくします。プログラマとしては実際に中を見るまで喜ばない心づもりでなければいけないのですが。

さて、自由にコピーしていいソースコードなので、第三者から受け取ることもあるやもしれません。そのときの問題は、それが NEC (その他、パナソニックやソニーやあれやこれや)が使ったソースコードと真に同じものと確かめられるか、です。どうしましょうか。多くの人がパッケージのハッシュ値を比べて真偽を確かめているかもしれません。私はそれは調べていなくて、勉強が足りないなあ…

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

私が作ったサイトのバグでした

2007-06-21 00:15:19 | 携帯電話

私が遊びで携帯電話向けに作ったサイトでトラブルがあったので、携帯電話の問題かと思ったら、私のバグだったと気づく出来事が今日ありました。

情けない話なのですが、バグの現れ方がツボにはまって笑っちゃうくらいなので、サイトのトラブル解決は泥臭い話だという実例として。

プログラムできない人にはわかりにくい話ですが、ご容赦を。

特定のページを Vodafone 902T で表示させたら、 白い背景に次のような文字だけが表示されるトラブルが起きました。

エラーが発生しました。リクエストが不正です。(WJ46053E)

端末やネットワークのトラブルもあるかもと思っていましたが、試しに PC のブラウザで表示させたらページが真っ白になり、慌てて Apache HTTP Server のログを見たら HTTP のステータスコードが記録されていませんでした。となるとサイトのトラブルです。

トラブルの原因は PHP プログラムの次の1行。

header('HTTP/1.1 Not Modified');

これは全くの凡ミスなので、修正しました。

header('HTTP/1.1 304 Not Modified');

「304」を書き加えただけですが、それが大事です。その後は PC のブラウザでも Vodafone 902T でも、トラブルは起きなくなりました。

ツボの一つ目は、大変なトラブルに見えて、実は凡ミスで1行間違えただけだった(間違えると致命的な1行なのですが)こと。

ツボの二つ目は、端末でページの再読込を行ったときはトラブルが発生しないこと。

上記の行は、Vodafone 902T や PC のブラウザが「前にこの URL のコンテンツを取得したときは 200X年X月XX日 XX時XX分XX秒 に更新されたと聞いたけど、それから更新されていなければ '304 Not Modified' とだけ答えて。更新されていれば '200 OK' の返答とコンテンツの内容を送って」と要求したときにサイトが「304 Not Modified」と答える部分です。

端末で再読込を行ったときは、端末は(古いか新しいかは関係ないとあきらめた上で)「この URL のコンテンツを送って」という(先ほどの例とは違う)要求をして、サイトは単純にコンテンツの内容を送ります。プログラムの問題の部分は使われていませんでした。

私が、単純にコンテンツの内容を送り続ければトラブルは減るところを、パケットを減らそうと細工をしたら、詰めのところで失敗しました。

ユーザから見ると、そのページを2回以上見たときにトラブルが起きて、再読込するとトラブルが消えます。前に読めたページが読めなくなって、再読込すると読めるようになると、端末が不安定になったように見えますが、技術的にはサイトのバグなんです。

しかもサイト管理者自身 -つまり私- がユーザと同じように勘違いしているわけです。

馬鹿としか言いようがないのですが、ウェブサイトのトラブルの原因は直すまで分からないものだと、嫌というほど分かりました。

追記 2007-08-16

エラーコード WJ46065E の情報を探して、このエントリをご覧の方へ。

このバグで出したエラーコードは WJ46065E ではありません。数字の下二桁が違うことにお気づきと思います。

おそらくエラーコードには個別の意味があり、WJ46065E のトラブルは HTTP ステータスコードが欠けたからではないと想像します。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする