前々からやろうやろうと思っていてなかなか時間が取れずにいたのですが、やっとtdiaryを最新版にしました。gitで最新版をすぐに追えるようになったのでこれからはガツガツ最新版にしようと思います。これだけ長く使っているのだから開発やその周辺にも貢献したいところではありますが…。。。

日記には2002年からずっとtdiaryを使っています。何度も自分でskelをいじったりcssをいじったり、広告をいれてみたりなどいじいじしてきましたが、ちょっと思うことがありほぼ規定の状態に戻しました。ついでにDebianにパッケージがいつまでたっても来ないので自分でレポジトリから取得しつつバージョンアップしてみたりも。

さらにスマートフォンから見た時に見やすいようにスタイルを調整したりなども。

ずいぶんとシンプルにカスタマイズがない感じになりました。

何をやろうとしていたのかというと、カテゴリ表示を行ったときに、タイトルが化けてしまうので、それを直そうとしてました。結局なおらなかったわけですが。utf-8に移行したのが原因なのは明白なんだけど、どうしたらいいんだかよくわからない。時間がある時にソースを追ってみよう。

操作ミスをしてしまって、昨日あたりの日記を消してしまいました。残念。Googleさんのボットはみにはきてくれてインデックスに登録はしてくれていたみたいだけど、「キャッシュ」ボタンが出てきてませんでした。

たいした日記じゃないから別にいいんだけど、ちょっと残念…。

1件のコメント

tdiary2.3.3にバージョンアップして、文字コードをUTF-8にしました。一部まだプラグインを対応していなかったり、若干化けている箇所があったりしますが、まぁ、とりあえずIEでもそれなりにまともなレイアウトになったのでよしとします。残りはのんびりなおしていこう。

デザインを変えてからずっとカレンダーを表示し忘れていたので、今まで過去の日記にアクセスできなかったようです。失敗した…けど、あんまり誰も見ていないだろうから別にかまわないだろうと判断。

それにしてもこのシステムに乗り換えたのが2002年の6月だからもう7年弱も書いてますね。本当は大学入学時から書いてるので10年以上ですね。これだけ全世界に向けて駄文を書き続けられるということは一種の才能なのかもしれない。(あるいは病気か。)

現在のバージョンではどうなるかな?

うーん。Wikiスタイルであるということは考慮しないでHTMLタグをそのままべたで書いてしまうみたいですね。プログラムを書かなくちゃダメ…と。

1件のコメント

[xmlrpc][windowslivewriter] Windows Live Writer + tdiary + Metaweblog API

最近はtdiaryへの投稿にWindows Live Writerを使っているのですが、Windows Live Writerのバージョンが変わった(ベータ版から正式版になった)せいなのか、以下のことができなくなっちゃいました。

  • カテゴリの取得、指定
  • 既存の記事の取得

以前はどちらもできていた記憶があるのですが…。

Windows Live Writerのページには以下の記述が

  • さまざまなブログに対応

    Writer を使うと、Windows Live スペース、SharePoint、Community Server 上のブログに記事を投稿できます。また、 Metaweblog API と RSD をともにサポートしている他のブログサービスの記事の編集、投稿にも利用できます。

    ※ご利用中のブログサービスの Metaweblog API および RSD の対応状況については、当該のブログサービスにご確認ください。

  • tdiaryのxmlrpc.rbはMetaweblog APIおよびRSDに対応しているようです。

    でも、実際にカテゴリの取得を行っている際のパケットを見てみると以下のようなやり取りが。

    POST http://ebi.dyndns.biz/diary/xmlrpc.rb HTTP/1.0

    Accept: */*

    Accept-Language: ja-JP, en-US, en, *

    User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Windows Live Writer 1.0)

    Content-Type: text/xml

    Host: ebi.dyndns.biz

    Content-Length: 377

    <?xml version=”1.0″ encoding=”euc-jp”?>

    <methodCall>

    <methodName>metaWeblog.getCategories</methodName>

    <params>

      <param>

       <value>

        <string>ebi’s diary</string>

       </value>

      </param>

      <param>

       <value>

        <string>ユーザー名</string>

       </value>

      </param>

      <param>

       <value>

        <string>パスワード</string>

       </value>

      </param>

    </params>

    </methodCall>

     

    HTTP/1.1 200 OK

    Via: ProxyServer 

    Content-length: 310

    Date: Fri, 22 Aug 2008 04:10:03 GMT

    Content-Type: text/xml; charset=utf-8

    Server: Apache/2.2.9 (Debian) PHP/5.2.6-2+b1 with Suhosin-Patch mod_python/3.3.1 Python/2.4.4 mod_ssl/2.2.9 OpenSSL/0.9.8g mod_perl/2.0.3 Perl/v5.8.8

    Keep-Alive: timeout=15, max=100

    <?xml version=”1.0″ ?><methodResponse><fault><value><struct><member><name>faultCode</name><value><i4>1</i4></value></member><member><name>faultString</name><value><string>Method metaWeblog.getCategories missing or wrong number of parameters!</string></value></member></struct></value></fault></methodResponse>

    “Method metaWeblog.getCategories missing or wrong number of parameters!”ということなので明らかにWindows Live Writer側とtdiary(xmlrpc.rb)側でミスマッチな感じです。両者が対応しているMetaweblog APIのバージョンが異なるのでしょうか?でも、リクエストにバージョンなんてないですけどね。

    Windows Live Writer側のMetaweblog APIの認識は以下のドキュメントのものの模様。

    あとは、実際にxmlrpc.rbの内容を見てみて…ですかね。時間がとれたら自分で実装してみたいなぁと思います。

    [hatena][apache] はてなDiaryとtDiaryでの相互運用の問題みつけちゃった・・

    増田にトラックバックを飛ばしたら、増田側にはリンクが作成されましたが、そのリンクから正常にこちらのサイト(tdiary)にアクセスすることができませんでした。

    image

    どうやら、tdiaryのセクションに対して使われている「#」が益田側で生成されたリンク上で最終的に「%23」として扱われているのが原因のようです。この問題、どこかで以前読んだなーと思ったら、これでした。

    色々と難しい問題があるようですね。

    でも、なんとか今の構成のままこちら側の対応で何とかしようと以下のようにRewriteRuleに書いてみました。

    RewriteRule ^/diary/(.*)%23(.*)$ /diary/$1#$2

    ・・・でもだめでした(T-T

    誰か回避方法を知っている人がいたら教えてください・・・。

    [plugin] litebox.rbがIEでうまく動かなかった原因を教えてもらっちゃいました!

    以前からlitebox.rbプラグインがうまく動かなくて、仕方なくワークアラウンドを行っていましたが、プラグイン作者のはしもとさんが親切にも原因を調査してくださいました。はしもとさんありがとうございます!以下、その教えてもらった内容をです。

    直接の原因

    以下が問題が起こせる(たぶん)最小のHTMLです。記述されているjavascriptはlitebox.rbがadd_footer_procを使って出力しているものです。

       1: <html>
       2: <head>
       3: <script type="text/javascript" src="http://ebi.dyndns.biz/litebox/js/prototype.lite.js"></script>
       4: <script type="text/javascript" src="http://ebi.dyndns.biz/litebox/js/moo.fx.js"></script>
       5: <script type="text/javascript" src="http://ebi.dyndns.biz/litebox/js/litebox.js"></script>
       6: <head>
       7: <body>
       8: <div class="content">
       9:             <script type="text/javascript">
      10:             <!--
      11:             (function(){
      12:                 var anchors = document.getElementsByTagName( 'a' );
      13:                 
      14:                 for ( var i = 0; i < anchors.length; i++ ){
      15:                     var anchor = anchors[i];
      16:                     var rel    = anchor.getAttribute( 'rel' );
      17:                     var href   = anchor.getAttribute( 'href' );
      18:                     
      19:                     if( ( rel == null || rel == '' ) && href && href.match( /\.(?:jpe?g|gif|png)$/i ) ) {
      20:                         rel = 'lightbox';
      21:                         
      22:                         if( href.match( /\/(\d{8})_\d+\.\w+$/i ) ) {
      23:                             rel += '[' + RegExp.$1 + ']';
      24:                             
      25:                             var imgs = anchor.getElementsByTagName( 'img' );
      26:                             for( var j = 0; j < imgs.length; ++j ) {
      27:                                 var title = imgs[j].getAttribute( 'title' );
      28:                                 
      29:                                 if( title != null<
    /span> ) {
      30:                                     anchor.setAttribute( 'title', title );
      31:                                     break;
      32:                                 }
      33:                             }
      34:                         }
      35:                         
      36:                         anchor.setAttribute( 'rel', rel );
      37:                     }
      38:                 }
      39:             })();
      40:             
      41:             fileLoadingImage = 'http://ebi.dyndns.biz/litebox/images/loading.gif';
      42:             fileBottomNavCloseImage = 'http://ebi.dyndns.biz/litebox/images/closelabel.gif';
      43:             initLightbox();
      44:             // -->
      45:             </script>
      46: </div>
      47: </body>
      48: </html>

    つまり、<div class=”content”>〜</div>というdivタグの中にlitebox.rbの吐き出すjavascriptが入っており、このようになっているとIEではエラーが発生してしまうようなのです。

    以下のようにinitlitebox()をbodyタグに記述するようにすると、エラーは起きません。

       1: <html>
       2: <head>
       3: <script type="text/javascript" src="http://ebi.dyndns.biz/litebox/js/prototype.lite.js"></script>
       4: <script type="text/javascript" src="http://ebi.dyndns.biz/litebox/js/moo.fx.js"></script>
       5: <script type="text/javascript" src="http://ebi.dyndns.biz/litebox/js/litebox.js"></script>
       6: <head>
       7: <body initLightbox();>
       8: <div class="content">
       9:             <script type="text/javascript">
      10:             <!--
      11:             (function(){
      12:                 var anchors = document.getElementsByTagName( 'a' );
      13:                 
      14:                 for ( var i = 0; i < anchors.length; i++ ){
      15:                     var anchor = anchors[i];
      16:                     var rel    = anchor.getAttribute( 'rel' );
      17:                     var href   = anchor.getAttribute( 'href' );
      18:                     
      19:                     if( ( rel == null || rel == '' ) && href && href.match( /\.(?:jpe?g|gif|png)$/i ) ) {
      20:                         rel = 'lightbox';
      21:                         
      22:                         if( href.match( /\/(\d{8})_\d+\.\w+$/i ) ) {
      23:                             rel += '[' + RegExp.$1 + ']';
      24:                             
      25:                             var imgs = anchor.getElementsByTagName( 'img' );
      26:                             for( var j = 0; j < imgs.length; ++j ) {
      27:                                 var title = imgs[j].getAttribute( 'title' );
      28:                                 
      29:                                 if( title != null ) {
      30:                                     anchor.setAttribute( 'title', title );
      31:                                     break;
      32:                                 }
      33:                             }
      34:                         }
      35:                         
      36:                         anchor.setAttribute( 'rel', rel );
      37:                     }
      38:                 }
      39:             })();
      40:             
      41:             fileLoadingImage = 'http://ebi.dyndns.biz/litebox/images/loading.gif';
      42:             fileBottomNavCloseImage = 'http://ebi.dyndns.biz/litebox/images/closelabel.gif';
      43:             // -->
      44:             </script>
      45: </div>
      46: </body>
      47: </html>

    <div class=”content”>〜</div>は通常のtdiaryでは存在していないタグで、私の場合、自分でサイトのデザインを好き勝手にいじりたくてtdiary/skel内のファイルを直接編集しているためにこのようになっています。

    はしもとさんからはさらに以下のコメントをいただきました。

    litebox.rb で initLightbox(); の実行をwindow.onload = initLightbox;のようにonloadイベントハンドラで実行させるようにしていればこのエラーは起こらなかったのですが、このようにしなかったのは、

    • window.onload での実行は画像などすべてのコンテンツの読み込みが終わった後なので、実行タイミングが遅すぎて画像の多いページなどでは困る場合があること。
    • onloadイベントハンドラへの設定の仕方に注意しないと、他にonloadイベントハンドラに何かを設定するプラグインがあった場合、どちらかの設定が消えてしまう可能性があること。(litebox.rbで注意しても、他のプラグインが注意していないと上書きされて消えてしまう)

    などの理由からです。

    litebox.rb 以外でもJavaScriptを使うプラグインで似たようなエラーになる可能性を考えて、<div class=”content”>〜</div> の閉じ</div>の位置を add_footer_proc が埋め込む場所より前にした方がいいかもしれませんね。

    なるほど、勉強になります。これでもまだ「initLigthbox()の中では何が行われていて、どこがエラーの原因になるのか」など分かっていない部分もありますが、それはおいおいもしも時間があれば、ということにしようと思います。

    このサイトに関してはデザイン自体を見直すかJavascriptでrel属性を追加するのみにするかちょっと考えようと思います。