Y.A.S.D.

ネクター

こないだブライトンのフェリエで頼んだら,「すいません今年は入ってないです」といわれたネクター・アンペリアル。 名駅高島屋にあったー。というわけで,今年はこれで。

あと,年賀状刷ったり。最初は若冲展のカタログから素材を拝借しようと思ってたんだけど いいのが見つかったんで方針転換で。かなり気に入ってるけど,ここ読んでる人と年賀状届く人は ほとんどかぶってない気がする...。

 

つれづれ

weblogger.el × metaWeblog (タグを通す編?)

XML-RPC Specification によると,'<' および '&' を '&lt;' および '&amp;' に escape して 送ればよいらしい。で,escape する処理を add-hook してできた! ...と思ったんだけど,なんか気づいたら add-hook しなくても通ってた。 いろいろ .el 書き替えたりしながらやってたので,混乱してたのかも? あとは weblogger-entry mode を minor-mode にして html-helper-mode と 一緒に使う (or その逆) ができたら完璧なんだけど,ちょっと面倒。

このサーバ

10/08 から ZFS root pool が使えるようになるということで, 出るのを待ってセットアップしたんだけど,やり方は docs.sun.com に細かく書いてあって簡単だった。初 ZFS です。あと,当初は CoolStack Tomcat 使ってたけど GlassFish に変えてみた。

OpenSolaris 11.2008

CF-R7 に入れてみた。ZFS というか TimeSlider が画期的。 ずっと避けてきた JDS (というか GNOME+metacity) に徐々に慣れていこうかと...。 GM965 が Xorg w/ intel ドライバで動かんな。とりあえず vesa で。 SolarisのくせにあっさりWiFiにつながるのは変な感じ。 Fn + F1/F2 は,「輝度変えてますよー」的な表示は出るんだけど実際は変わらず。

CS4

CREATIVE SUITE 4 へのアップグレードのご案内が来たんだけど, なぜか Design Premium 用の振込用紙が。持ってるの Design Standard なんだけど...。封筒に「CS4 オリジナルグッズ入ってます!」って書いてあるので 何かと思ったらステッカーだった...。

 

Nokia日本市場撤退

この経済危機を受けてということで。正直「まあ,そうだよなぁ」という。 「ガラパゴス」とか言われたりもするけど,いいか悪いかは別にしてやっぱり市場が特殊すぎる。 国内独自仕様のワンセグ・おサイフがデフォで (ユーザはホントにそれを求めてるのかな?というのは おいといて),しかも大した規模でもない市場。相手にしてもしょうがないよな。 一方で日本端末メーカは海外ではシェアを伸ばせないままで...。いいんだか悪いんだか。 「日本のケータイ」がダメだとも遅れてるとも進んでるとも思わないけど, グローバルに見て「違ってはいる」わけで,それが私の使い方に合ってないことは確かなので, 撤退は残念。

それより一番残念だったのは,某エバンジェリストの blog での言。 本意が判りにくいけど,「自分(達?)だけが判ってる」ような言い方は,がっかりだなぁ。 みんなそれぞれの意見を持ってるだろうし,私はいろんな意見を聞きたいけどなー。

 

weblogger.el × metaWeblog (タイトルを渡す編)

注:とりあえず現時点では weblogger-start-entry<f> 以外ではテストしていません。

Subject: に書いた文字列が title として Roller 側に渡らないのは, weblogger-api-new-entry が weblogger-api-blogger-new-entry<f> になってるからで, ほんとは weblogger-api-meta-new-entry<f> を使ってほしいところ。 根本的には weblogger-determine-capabilities<f> が悪いんだけど,とりあえず

(setq weblogger-api-new-entry 'weblogger-api-meta-new-entry)

しておくと,metaWeblog.newPost を使ってくれるようになる。 でも今度は Roller 側がエラーを吐く。原因を一言で言うと, そもそも値のないメンバを値 nil の boolean なメンバとして weblogger が request 生成してしまうから。

たとえば draft である *weblogger-entry* バッファには default では Date: フィールドがないんだけど,weblogger.el がこれを parse して (Date . nil) という構造で内部データとして持っていて(ここまでは別によい),最終的に

<member>
  <name>dateCreated</name>
  <value>
    <boolean>0</boolean>
  </value>
</member>

という request を生成しよる。なんでやねん。

同様に,内部データに (mt_tb_ping_urls . nil) と (mt_convert_breaks . nil) という MovableType 用(?) のメンバを勝手に追加しよる。 あと,(link . nil) とか (categories . nil) とかも。値が nil ならメンバごと要らんはず。

というわけで,どのタイミングでこいつらを消すかというのは微妙なところだけど, とりあえずこんな感じで動くには動いた。delq してるところを見ると, 作者は「消してるつもり」なんだろうと思う。 ちょっと泥臭いので,本当はこれより前に消しておいた方がよい気がする。 ただ,実際 boolean false を渡すべきメンバもあるかもなので,「assoc の結果が nil なメンバは 全部消して良い」ということはなくて,どっちにしても項目ごとに泥臭くチェックするしかないとは思う。

--- weblogger.el.orig
+++ weblogger.el
@@ -598,7 +598,7 @@
   (bury-buffer))
 
 
-(defun weblogger-save-entry (&optional publishp &optional arg)
+(defun weblogger-save-entry (&optional publishp arg)
   "Publish the current entry is publishp is set.  With optional
 argument, prompts for the weblog to use."
   (interactive)
@@ -1088,18 +1088,26 @@
 
 (defun weblogger-struct-to-request (entry)
   "Convert the struct to something that can be used in an xml-rpc request."
-  (delq nil
-       (list
-        (assoc "title"        entry)
-        (assoc "authorName"   entry)
-        (assoc "userid"       entry)
-        (assoc "dateCreated"  entry)
-        (cons "mt_tb_ping_urls"   (cdr (assoc "trackbacks"  entry)))
-        (cons "mt_convert_breaks" (weblogger-texttype-id-from-name
-                                   (cdr (assoc "texttype"    entry))))
-        (cons "link"              (cdr (assoc "url"         entry)))
-        (cons "description"       (cdr (assoc "content"     entry)))
-        (cons "categories"        (cdr (assoc "categories"     entry))))))
+  (let ((dateCreated           (assoc "dateCreated" entry))
+       (mt_tb_ping_urls        (cdr (assoc "trackbacks" entry)))
+       (mt_convert_breaks      (cdr (assoc "texttype"    entry)))
+       (link                   (cdr (assoc "url" entry)))
+       (categories             (assoc "categories" entry)))
+    (delq nil
+         (list
+          (assoc "title"        entry)
+          (assoc "authorName"   entry)
+          (assoc "userid"       entry)
+          (when (cdr dateCreated) dateCreated)
+          (when mt_tb_ping_urls
+            (cons "mt_tb_ping_urls" mt_tb_ping_urls))
+          (when mt_convert_breaks
+            (cons "mt_convert_breaks" mt_convert_breaks))
+          (when link
+            (cons "link" link))
+          (cons "description"       (cdr (assoc "content"     entry)))
+          (when (< 0 (length (cdr categories))) categories)
+        ))))
 
 (defun weblogger-server-userid ()
   "Get information on user."

dateCreated をちゃんと Roller 側に渡したい場合は,こんなこともしておくと良いかも。

(defadvice weblogger-save-entry (before TT:insert-date-field)
  "Insert Date: field."
  (goto-line 0)
  (insert (format-time-string "Date: %Y%m%dT%TZ\n" (current-time))))

安易に advice で済ませたくないけど, 残念ながら welogger-new-entry-hook に add-hook するのでは遅い...。

 

weblogger.el × Roller

weblogger という Emacs package があるらしいので使ってみたところ,動かなかった。

軽く追っかけてみたところ,Roller は <methodResponse> に xmlns:ex="http://ws.apache.org/xmlrpc/namespaces/extensions" という attribute をつけて返すみたいなんだけど,xml-rpc.el の xml-rpc-clean<f> が attribute をうまく処理できてないようだ。

こんな感じでとりあえず post できるとこまでこぎ着けたけど,まだ問題が...

  • HTMLタグが書けないぽい。書くと post 時にエラーになる。仕様っぽい? でも致命的。
  • Subject: に何か書いても,本文の冒頭がエントリタイトルとして使われちゃう。
--- xml-rpc.el.orig     2008-11-16 17:24:23.303673000 +0900
+++ xml-rpc.el  2008-11-16 17:54:01.583264000 +0900
@@ -515,7 +515,7 @@

 (defun xml-rpc-clean (l)
   (cond
-   ((listp l)
+   ((and (listp l) (listp (cdr l)))
     (let ((remain l)
          elem
          (result nil))
@@ -573,7 +573,7 @@
                                (buffer-substring errstart (point-max)))))

                        ;; Maybe they just gave us an the XML w/o PI?
-                       ((search-forward "<methodResponse>" nil t)
+                       ((search-forward "<methodResponse" nil t)
                         (xml-rpc-clean (xml-parse-region (match-beginning 0)
                                                          (point-max))))
 

 

[Masubi]
Copyright © 1998-2009 Tomoaki TSUMURA. Powered by Apache Roller 4.0.1.
tomoaki@tsumura.info