「 プログラミング 」一覧

2000g→20g

それじゃマズイので
[^0-9]

任意の文字が3つ以上連続したら1つに置換

文字が分かっていれば
tr/A/A/s
じゃぁ任意の文字だったら?
s/(.)1{2,}/1/g
悩んだ・・・。

RSSパーサー

 ライブドアブログのサイドバーのプラグインにRSSを貼り付けられるのがあるが、これが記事を更新したりしないと最新情報に切り替わらないので自分で作ることにした。

 PerlのLWP::SimpleでrdfをgetしてXML::RSSに通すとあら簡単。RSSの要素をハッシュに取り込んでくれる。

 これをサイドバーに持ってくる方法として、IFRAMEとJavaScriptがあるが、なんとなくJavaScriptを選択。ハッシュの出力結果をdocument.writeするようなJavaScriptのソースを出力するCGIをつくり、これを外部JavaScriptファイル(*.jsと同じこと)として呼び出せば、ブログを開くたびに新鮮なrdfをgetして成型して出力するプラグインが完成。

 今後のTODO。

 このブログは大してアクセスがないので特に問題ないとは思うが、開くたびにrdfをgetしてしまうとさすがに先方のサーバに負荷をかけるので、一旦キャッシュに取り込んで、せめて30分間はキャッシュを使うようにしたほうが行儀がいいと思う。

 rdfの追加・編集・削除を行うための管理メニューを作成する。読み込みたいrdfのURLリストをMySQLに突っ込む。RSSの表示順を変更できるようにする。RSSから抜き出すデータの数を変更できるようにする。

iso-8859-1とwindows-1252

ある海外のWebページで、JavaScriptのエラーが出てしまう。 検索フォームにJavaScriptを用いているようで、一度エラーが出るとスクリプトが停止するためページ内検索ができない。

勝手に調べてみると、JavaScriptのエラーは文字列が閉じられていない、つまり終わりのクォーテーションがないという内容。 ソースを直ダウンロードしようとしてもだめだったので、IEの「名前をつけて保存(A)」で完全保存してみた。そうすると、ページ内で呼び出しているファイルも合わせて保存してくれるのだ。

で、そのソースを調べてみると、ダブルクォーテーションで囲ってあるだろう文字が文字化けしていて、その直後のダブルクォーテーションを食ってしまっていた。

その文字コードをバイナリエディタで見てみると、0x92と0x94。日本語2バイト文字の最初のコードの一部だ。何だろうと思ってみてみると、windows-1252という文字列セットでいうところのハイフンと™マークだった。ほぅ。そんなエンコード初めて聞いた。IEのエンコードでいうと西ヨーロッパ言語(Windows)だそうな。ISO-8859-1は西ヨーロッパ言語(ISO)の方らしい。

というわけで、Japaneseのbrowserではsearchがcannotよーって教えてあげた。 6月からたまにJapaneseからそんなこと言われるけどわかんねーとか。 そして、エラーの状態のムービーを撮って送ってくれだのOSやらブラウザのバージョンを教えてくれだの言われたので録画して情報を添えて教えてあげた。 教えてあげるけど、そんなの関係なくってYouのJavaScriptのhereがまずいんだよーって伝えた。多分、伝わったんじゃないかな。

そのときにこれ使ってくれーって言われたのがSnagItというソフト。キャプチャソフトだけれど、Windowsの動作を動画として保存することができる。おもしろい。言葉がないので、まずページを開いて、エラーが出たときの三角マークをマウスカーソルでぐりぐりアピールして、エンコードを変更したら検索もできるんだよーっていう動作をして見せた。

原因は、エンコードをMETAタグで指定してないから日本のブラウザは日本語のページと思ってしまい、windows-1252だけの特別な文字コードを2バイト文字の一部と解釈してしまうということだ。なので、とりあえずMETAタグでwindows-1252を指定すればよくって、でも根本的にはwindows-1252だけの文字は使わずiso-8859-1に合わせた方がいい。

昨夜というか今朝方2時頃だったかな、ちょっと今からpublishするからtestしてくれとメールが来て、たまたま起きてたから見てやった。 でも、一部は良くなってたけど一部はまだだめなまま。 とりあえず、眠くて仕方なかったからまた明日~って言ってとりあえず寝た。

そのだめな方を昼間にチェックしてみると、今度はJavaScriptじゃなくて本文にwindows-1252文字が入っていて、しかもMETAタグの宣言がiso-8859-1になっている。ブラウザは、iso-8859-1と思ったのにwindows-1252文字が入ってるし、とりあえずデフォルトのJapaneseにしておけ、という動作をしたのではないかと思う。

windows-1252という文字セットはiso-8859-1をマイクロソフトが独自に拡張したものになるのかな。その中の、Shift_JISでいうところの半角カナみたいな独自拡張部分が今回の悪さをしているわけで、世界標準がいかに大事かということを痛感した。標準を壊していくi-modeやMicrosoftみたいなのは困った存在だ。 シェアが大きいだけに。

もうずっと長いこと英語を書くということをやっていないので(さすがに読むことはある)、多分いいかげんな英語を書いてるんだろうなぁと思いながら、まぁでも伝われば何でもいいや、つまりロールは起き上がれば別になんでもいいというのと同じような前向き姿勢で臨んでいる。

時差があると大変だ。今晩は修正されるのだろうか。

XREAでIf-Modified-Sinceが来たときLast-Modifiedは・・・

XREAのサーバを借りている。
CGI側で親切にLast-Modifiedを返すようにしていたら、If-Modified-Sinceが来ると
500 Internal Server Error
を返すことがわかった。 続きを読む
1 2