Y.A.S.D.

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))))
 

SmartConnect

S60 Living によると,以前の Nokia 端末にあった Access Point Group の機能を実現する SmartConnect が Download! から free で落とせるようになってるということなんだけど,私の Download! には現れないな-。Office フォルダにあるという噂なんだけど...。

以前は BirdStep のサイトから入手可能だったらしい?

 

Mobbler

昔は「持ってるCD全部が入る iPod じゃなきゃヤダ!」と思ってたんだけど,最近「やっぱ滅多に聞かないモノは聞かないよな」という当たり前のことを実感して,なんかもう携帯プレイヤー E71 (SDHC 8GB) でいいかという感じ。

Mobbler は,background で走らせておくと Music player で聞いた(左)曲ログを裏で scrobble してくれて(中),online ならリアルタイムで,offline ならあとで online になったときに Last.fm に upload してくれる。おまけに Last.fm の station まで聞ける(右)という。すばらしすぎる。

 

 

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