HTTP Clockを支える技術 ACT.4

2025-04-13 oss web

現代のWebで、今もっとも「迷走した」技術、HTTP Clock

HTTP Clockを支える技術 ACT.1HTTP Clockを支える技術 ACT.2HTTP Clockを支える技術 ACT.3 では、様々な方針で様々な時計をストリーミングしてきました。

私は完全にネタ切れだったのですが、@lemoncmd 氏より、 「RTLを使ったらどうか」 との、「素敵な助言」を賜りました。

どういったものなのでしょうか。

RTLとは?

そもそも、RTL (Right-To-Left) とは何でしょうか。

現代日本人である我々は、普段、左から右へと文章を書いています。

しかし、そうでない言語もある訳ですね。

その様な言語では、(外来語と混ぜて書くなど) 文中で記述方向が入れ替わることもあるようです。

それを上手くやるために Unicode Bidirectional Algorithm があります。

しかしながら、それでも満足できないユースケースのために、例えば、右から左へと描画をする状態へ「強制的に」推移させる符号 (Right-To-Left Override) などがあるようです。

注釈1: 当然、その逆もあります。

注釈2: 昔、Windows向けマルウェアでは、見かけ上の拡張子をチョロまかすために、よく使われてましたね。.exe.scr を強引に文中へ移動させ、.avi.jpgなどを後方に……。。

参考: 「EXEファイルをPDFに見せかける」、拡張子偽装のウイルスが猛威 | 日経クロステック(xTECH)

注釈3: 著者はWinny世代ではありません。

<textarea> 内でのRTLの挙動

ところで、これを <textarea> 内で突然使うとどうなるでしょうか。

RTLと有るように、後ろに来る文字が、左側に表示されるのです。

例えば、以下のようなHTMLは:

<textarea>&#8238;ABCDE</textarea>

EDCBA の様に表示されるわけですね。(&#8238;はHTML上でのRTL Overrideの表現です。)

では、Eに続いてFGHIJK...と書き続けるとどうなるでしょうか。

新しいコンテンツが来ても、<textarea> は自動スクロールの様な器用なことはしません。

よって、 KJIHGFEDC... のようになる訳ですね。

既存コンテンツが右へ右へと流され、画面外へと追いやられていくのです。

あとから来た文字列が、「あたかも行頭に有るかのように見える」ではありませんか!

事実上の「表示の更新」ですね?

HTTP Clock - RTL Edition

つまり、

&#8238;(TSJ) 00:51:81 31-40-5202&#8238;(TSJ) 10:51:81 31-40-5202....

このように書くと、過去の時刻を右へ右へと追いやりながら、左方向へとても長い行を形成することで、現在時刻を描画することができるのです!

(複数回の &#8238; は冗長ですが、実装上の都合であるため、気にしないでください。)

ブラウザ互換性

ACT.2 で紹介した、SELECTタグを使った、SELECT Edition は最も †エレガント† でしたが、Safari では期待した描画結果を得られませんでした。

なんと、今回のRTL Editionは…

【朗報】Safari互換達成!

なんと、今回の RTL Edition は Safari でも動くようです!

やったー!

【悲報】Firefox非互換!

これは、HTTP Clock決定版と思ったのですが、Firefoxでは期待通り動きませんでした。

<textarea> コンテキストに突入した際、描画が一時停止されてしまうようです。残念。

次回?

あるのでしょうか。ご期待ください(?)。