月別アーカイブリストの年別表示にはサイドバーなどで用いる月別アーカイブリストを年別に表示する方法が紹介されている。これを参考にして自分のサイトでもやってみたのだけど、この方法はダイナミックで生成しているページではうまくいかないことが判明した。バグなのか仕様なのかよくわからないのだけど、どうもスタティックとダイナミックでは変数の振る舞いに違いがあるようで、そのことが原因になっているらしい。ダイナミックでは変数にMTタグの値を代入しようとした場合、タグの値が代入されるのではなく、タグへのポインタが代入されるような仕組みになっているらしい。値が永遠に同じままになり、年を区切るためのタグが生成されなくなってしまうのだ。そこでこれを何とかダイナミックでも使えるように、自分なりに工夫してみた。問題なく動作しているので、そのやり方をここに公表しておいてみる。ウィジェットの中身を次のように記述するとうまくいった。タグを使うことにある。閉じタグを記述する必要がある(青字の部分)。検証はできていないのだけど、1月からブログを始めた場合にはこのままだと閉じタグが余計に生成されてしまうことになるかも知れない。その際はこの部分を削除すればよい(はず)。ブックマークレットによるクイックポストという機能が用意されている。使用していると利用できないのだ。ブログ記事投稿画面の下部に表示されているリンクをブックマークして利用しようとしても、そのままだと「不正な要求です。文字コードEUC-JPに含まれない文字データを送信しています。」というメッセージが表示されて、ブログ記事投稿画面に到達することができない。側ではその文字列の処理を拒絶してしまうようなのだ。(うむらうす)にはスクリプトからページ・タイトルや選択文字列を送信する部分をカットするという方法が紹介されている。これはこれで一つの方法には違いないけれど、本質的な解決にはなっていない。勉強がてら腰を据えて取り組んでみて、苦難の末にどうにかうまく成功したのでここに記録しておくことにする。側で受けとった文字列のコードを変換して扱うようにできないか、ということだった。これはソースを見てもよくわからないし、下手にいじってほかの機能がダメになっても困るので断念。そこでスクリプトを修正して文字列を送信する側でコードを変換することを考えた。いう便利なものが公開されていて、それ自体は簡単にできる。ブックマークレットで外部ライブラリを読み込むことも特に難しくはない。それで普通にやってもなかなかうまくはいかないのだ。外部ファイルを動的に読み込む場合、処理が非同期に行われることに原因があるらしい。読み込みが終わらないうちに文字コードの変換を行おうとするのでエラーとなるようだ。この仕様には利点もあるものの、ブックマークレットのような場合には大きな障害となる。これは本職のプログラマにとっても対処するのがなかなか難しい問題のようだ。ブックマークを2回クリックすると2回目の時点ではすでに読み込みが終わっているので無事ブログ記事投稿画面にたどり着くことができる。実用上はこれで十分といえるかも知れないが、それでは何ともすっきりしないので回避できる方法はないか調べてみた。いくつかの方法が紹介されていたのだが、それに従ってやってみても私のやり方がまずいのか自分の環境ではなかなかうまくいかなかった。