富永日記帳

新着順表示|タイトル一覧|更新記事一覧|カテゴリ一覧

新着順表示

新着フィード

不正なHTMLコメント

公開日時:2009年8月10日18時50分

ウイルスバスターに関して問い合わせたいことがあったのですが、即返答が欲しかったのでメールは却下、電話も繋がりにくそうなので、チャットを選択。

まずは入口のページ(trendmicro.ehosts.net)にアクセスし、各種項目を入力して「送信」。

※チャットの営業時間内(9時30分~17時30分)にアクセスしないとフォームは現れないようです。

が、何も起きない。ソースを見ると送信ボタンが type="button" で、JavaScriptを使っている…。仕方がないのでJavaScriptを有効にして再度試してみるが、それでも反応なし

原因を調べるため、ブラウザをFirefoxに変えてアクセスしてみると、姓を入力する部分をはじめとして、全体的に表示がおかしい。

ソースを見ると、211行目にこんな記述が。

<!-- --------------------------------------------------Start of Off Hours Page By: VhaL------------------------------------------------------------------------------------ -->

これは駄目ですね。

SGMLの規定では、区切り子COM("--")およびそれに囲まれたSGML文字が「注釈」とされており、次のような解釈ができます。

  • 「Start of Off Hours Page By: VhaL」という文字列は不正な位置にある。(この文字列の前に26個のCOMが存在する)
  • 「Start of Off Hours Page By: VhaL」の文字列の後ろには43個のCOMが存在する。奇数個であることから、末尾の ">" や、その下の行に続く文字列やマークもコメント扱いになる。

また、HTML4.01の仕様書にはそもそもコメントの中には連続したハイフンを入れるべきではないと書かれています。

A common error is to include a string of hyphens ("---") within a comment. Authors should avoid putting two or more adjacent hyphens inside comments.

On SGML and HTML(www.w3.org) より

結局、流れとしては次のようになっているようです。

  1. 送信ボタンを押下すると、JavaScriptが有効な環境では「checkFormFields」関数が実行される。
  2. checkFormFields関数の中で「var TimeCounter = document.counter.d2.value;」と、IDが"counter"なものを呼び出している。
  3. <form name="counter" ID="counter" > というフォームがあるのだが、これは例の不正コメントの直下にあり、コメント扱いになっているので、呼び出せずエラーになる。

…なんとなくですが、ひょっとしていまどきIEでしかチェックをしていないのでしょうか。

HTMLの仕様を理解していないエンジニアは掃いて捨てるほど居ますが、たとえ注釈宣言のルールを知らなくても、テスト段階で複数のブラウザで試してみれば「何かおかしい」ということに気づきそうなものですが…。(フェーズ的には結合テストあたりですかね。)

※(余談)私は仕事柄JSPをいじることが多かったのですが、コメントのあるソースを見ると片っ端からJSPコメント(<%-- --%>)に書き換えて、diff担当に苦い顔をされるというのがお約束でした。逆に、すごく感謝してくれる方も中には居ましたが。

なお、こういう時こそ(?)IEの出番なわけでして、IE7で試してみたところ、予想どおり入ることができました。が、次の瞬間、

コンテンツは、有効なセキュリティ証明書により署名されていないため、ブロックされました。

……退出!

もう2度とチャットはしない。

東急クハ9002、デハ9202のCU-503形冷房装置(三菱)が消滅

公開日時:2009年8月7日21時18分

大井町線関連でもう一つ。

大井町線へ転籍した9002Fの冷房装置は東横時代のままで、クハ9002、デハ9202の#1・#4は三菱CU-503、9402はすべて東芝RPU-2214Aとなっていました。

大井町線は2号車(9200形)が弱冷房車なので、これはたいへん無駄なように思っていたのですが、やはりというか配置が変更されまして、デハ9202はすべてRPU-2214A、デハ9402の#1・#4は東芝RPU-4018になりました。注目はクハ9002で、なんとCU-503が撤去されRPU-4018になっているではありませんか。

ほかの車両に転用されるかどうかは分かりませんが、とりあえずいったんは消滅、という事態になってしまいました。残念!

ちなみに平成19年から半年ほど大井町線へ転籍していた9001Fは、東横線に戻すことが前提だったためか、冷房装置の配置換えは行われていませんでした。

※なお、配置換え後の形式はキセを通して見える本体形状から判断したものです。銘板は確認していないので悪しからず。

大井町線9000系、8090系の自動放送が復活

公開日時:2009年8月7日20時31分

先週あたりから、大井町線各駅停車の自動放送が復活しています。

「次は…」が「まもなく…」へ変わったのは予想どおり、というか他路線どおりでしたが、放送開始地点を変えていないのか「まもなく」にしてはやけに早く放送が開始されます。

以下、とくに目立った変更点や注目点を。

  • 行先案内に種別が入る。B各停の場合は「田園都市線経由、各駅停車○○行きです」。
  • 携帯電話マナー放送変更。世田谷線上り列車(山下→宮の坂)で採用されている「吊り革がオレンジ色の…」バージョンに。下り列車は放送区間も変更。
  • 自由が丘発車時に流れていた「各車両に優先席が設けてあります。…」の案内は廃止。
  • 扉非扱案内が簡略化。
  • 大井町、溝の口停車中の放送が新設。
  • 大井町停車中は戸越公園の非扱案内を含む。なお、「前の車両にお移りください」ではなく「前の車両にご乗車ください」と放送される。
  • 溝の口到着後の「車庫に入ります」案内が新設。目黒線よりは若干簡略化されている。
  • 二子玉川の乗り換え案内変更。従来、鷺沼発着の列車は「渋谷・半蔵門線方面にお出でのお客様は、…」だったが、「田園都市線渋谷方面は、…」(B各停)、「田園都市線は、…」(G各停)となる。
  • 上野毛~二子玉川間で流れていた「お立ちのお客様は、吊り革・手摺りにお掴まりください。」は廃止。
  • 戸越公園到着時に「お降りの際は、足元にご注意ください。」が追加。荏原町は従来下りのみ行われていたが、上りにも追加。

大凡予想できたもの、または納得できる改変でしたが、携帯電話マナー放送が世田谷線上りバージョンになったのには驚きました。目黒線には採用されなかったのに…。

2009年10月3日追記: 田園都市線直通編を追加しました。

form要素、input要素のaccept属性

公開日時:2009年8月4日21時29分

HTML4、XHTML1および1.1のform要素、input要素にはaccept属性というものがあります。(ただし、form要素の方はHTML4.01で追加。)

これはファイルアップロードを行う際、クライアント側で送信できるファイルの種類を制限できるもので、HTML4.01の仕様書には次のように書かれています。

This attribute specifies a comma-separated list of content types that a server processing this form will handle correctly. User agents may use this information to filter out non-conforming files when prompting a user to select files to be sent to the server (cf. the INPUT element when type="file").

Forms in HTML documents(www.w3.org) より

たとえば、アップロードファイルをJPEG、GIFのみにしたい場合は、次のようにします。

<input type="file" name="image" accept="image/jpeg,image/gif" />

なお、ブラウザの動作としては、仕様書に書かれているとおり、指定外のファイル送信時にエラーを起こすといったことではなく、ファイル選択リストに表示しないようなことが期待されているようです。

で、実際に主要ブラウザ(Firefox3、IE7、IE8、Opera9、Safari4)でどのような動作になるかを試してみました。(ちなみにOSはWindows XP。)

パターンとしては、

  • form要素、input要素ともにaccept属性を指定
  • form要素のみにaccept属性を指定
  • input要素のみにaccept属性を指定
  • form要素、input要素ともにaccept属性を指定しない

の4種類が考えられますが、Opera以外はいずれの場合においても何の変化もなし、つまり未対応のようです。Opera9は、「ファイルを開く」ウィンドウにおいて、「ファイルの種類」のデフォルト値がaccept属性で指定したものになります。

※ちなみに、Linuxでもいくつか試してみましたが、いずれも未対応でした。メジャーどころでの対応はOperaのみなのでしょうか。

図1: 「image/jpeg,image/gif」が指定されたファイル選択フォームをOpera9で表示した様子。「ファイルの種類」のデフォルト値は1番目の指定値になります。

当然のことながら、「すべてのファイル」を選択して、JPEG、GIF以外のファイルを選択しても何の警告もなくアップロードできてしまいます。

このように、そもそも対応しているブラウザが少ないこと、また対応ブラウザでも指定外のファイル送信を阻止できるわけではないため、実際にはサーバ側でのチェックが必要になるわけです。

なお、Operaの動作にみられるように、複数のMIMEタイプを指定すると、2番目以降に指定した種類のファイルを選択しにくい、または人によっては気づかない恐れすら考えられます。現状においては許可したいMIMEタイプが一つの場合を除き、あまり使わない方がよいかもしれませんね。また、たとえば写真画像の投稿がメインな掲示板において、「accept="image/gif,image/jpeg"」などと指定すると多くの人が不便な思いをする可能性があるので、最低でも指定する順序はよく考えた方が良さそうです。

スーパービュー踊り子車両のドット絵?

公開日時:2009年8月4日16時11分

画像の表示テストです。

ちなみに、この写真は先日熱海駅で撮影したLEDの発車案内。橙、黄緑、赤の3色を使って「スーパービュー踊り子」車両の先頭車正面部分が再現されているのですが、凝った表示に感心しました。

ハヤテのごとく!!の聖地巡礼(hayatenogotoku.com)に行ったわけでは、ありません。