Hikiのエントリをメールで書いてXML-RPCごしにPOST
November 30th, 2006 | Published in hack
Motivation
W-ZERO3でWikiのページをつくるとき、やっぱりブラウザからだとやりづらいのです。
あと、大量にあるBlosxomのエントリを、Wikiにまとめて移行したいけれど、手作業でやるには面倒すぎる。うまいこと自動化したいのです。
これらを解決するために、XML-RPCでWikiにエントリをPOSTするようなスクリプトを書きました。
hiki_client.rb
さっさと書いてみました。 40行程度。
require 'xmlrpc/client'
class HikiClient
def initialize(url)
= url
= XMLRPC::Client.new2()
end
def getAllPages
.call('wiki.getAllPages')
end
def getPage(p)
.call('wiki.getPage', p)
end
def getPageInfo(p)
.call('wiki.getPageInfo', p)
end
def getTaggedPages(tag)
.call('wiki.getTaggedPages', tag)
end
def putPage(p, c, a)
begin
pages = .call('wiki.putPage', p, c, a)
rescue XMLRPC::FaultException => e
puts 'XMLRPC::FaultException : -----------------'
puts e.faultCode
puts e.faultString
puts '-----------------------'
end
end
def set_auth(u, p)
.user = u
.password = p
end
end
見たままのコードです。いちおうBasic認証にも対応。
wiki_post.rb
#!/usr/bin/env ruby
require 'hiki_client'
require 'tmail'
require 'kconv'
WIKI_URL = 'http://some.wiki.host/address/'
hc = HikiClient.new(WIKI_URL)
mail = TMail::Mail.parse(ARGF.read)
body = Kconv.toutf8(mail.body)
body = body.split(/n/)
title = body.shift
keywords = body.shift.split(/,/)
hc.putPage(title, body.join("n"), {'keyword' => keywords})
たったこれだけ。とっても簡単。
まとめ
これで、メールから手軽にWikiエントリが送れるようになりました。編集とかは面倒なのであとまわしです。
やっぱり言語にとって大切なのは、便利なライブラリがそろっていることと、お手軽さだということがよく分かります。実現したい機能をさっとつくれることが何よりも大事。 xmlrpc.rbとtmail.rbサマサマです。
MacBook返ってこず
November 30th, 2006 | Published in Uncategorized
先週 買って早々修理に出したMacBookがまだ返ってきません。 AppleStoreで聞いたときにはだいたい1週間で済むという話だっ たのですが。 毎日一度はAppleの修理状況確認ページに行ってチェックするの ですが、いっこうに部品注文中から進もうとしないのです。
と、嘆いていても返ってくるわけではないので、今できることをやって おこうと思いました。 今週ののだめでも、千秋先輩が「今できることをやるしかないんだ」と 言っていたし。
コンピュータがなくてもできることはたくさんあります。 本を読んだり、アイデアを出したり。プログラミングさえ出来ます。 むしろ、紙とペンさえあればたいていのことはできるということが、コ ンピュータから離れてみて改めて分かるようです。 制約が工夫を生むなら、いまMacBookがなかなか返ってこないと いう状況を、どうやってうまく使い倒すことができるか、という ところにクリエイティビティを発揮しないと。
TOEIC 100 up
November 30th, 2006 | Published in Uncategorized
この前受けたTOEICの結果が返ってきました。 今年はじめにBerlitzに3ヶ月通っていたとか、海外に行っ てみたとかあったので、どれくらいの成果があったかが注目されていま した。
結果は、100点アップ。ようやく800点越えしました。 リスニングが大幅に上がっているのが効いています。
やはり話す機会を増やしたことが、結果につながったのではないでしょ うか。実戦で鍛えられると。 リスニングの音声とか聴いていても、実際の会話とはスピードもぜんぜ ん違うし。
それにしても、900点台への道はまだ通そうです。
HikiのXMLRPCに対するキーワード拡張
November 26th, 2006 | Published in hack
Hikiで、あるキーワードを持つWikiページの集合を返すようなXML-RPC拡張を書きました。19行程度。
背景
HikiでXML-RPCを使ったmigrationツールを書いています。 あるキーワードを持っているWikiページ郡をまとめて別のWikiにコピーする必要がありました。
Hikiに元々備わっているXML-RPCのインターフェイスを使ってやるには、
def getTaggedPages(tag)
pages = wiki.getAllPage();
acm = []
pages.each do |p|
info = wiki.getPageInfo(p)
if (info['keyword'].include? tag)
acm.push p
end
end
end
みたいなコードを書く必要がありそうです。 このコードでは、すべてのWikiページに対してwiki.getPageInfoのXML-RPCリクエストが飛ぶことになり、Wikiページ数に対してスケールしません。実際、手元でやってみたところえらく時間がかかります。
XML-RPCインターフェイスを拡張する
XML-RPCインターフェイスを定義している $HIKI/hiki/xmlrpc.rb
を見たところ、ちょこっと書き加えるだけでXML-RPCインターフェイスは追加できそうです。なので、ちょこちょこと書いてみました。
--- xmlrpc.rb.orig 2006-11-26 18:51:13.000000000 +0900
+++ xmlrpc.rb 2006-11-26 18:52:49.000000000 +0900
@@ -86,6 +86,25 @@
#add_multicall
#add_introspection
+
+ #
+ # getTaggedPages
+ # retrieve all pages having specified tag.
+ #
+ ('wiki.getTaggedPages') do |tag|
+ tag = utf8_to_euc( tag )
+ conf = Hiki::Config::new
+ db = Hiki::HikiDB::new( conf )
+
+ ret = []
+ db.pages.each do |p|
+ kws = db.get_attribute( p, :keyword )
+ if kws.include? tag
+ ret.push XMLRPC::Base64.new( euc_to_utf8( p ) )
+ end
+ end
+ ret
+ end
end
end
これで、1つのXML-RPCリクエストだけでキーワードを含む全てのWikiページを得ることができます。
まとめ
rubyのXML-RPCライブラリはお手軽で便利。 ActionScriptとかWebServiceKitだとこうさくっとは書けません。
MacBook 修理 2日目
November 25th, 2006 | Published in Uncategorized
着々と物事はすすんでいるようです。部品を注文中なのだとか。 いまかいまかと待ち遠しい。
MacBook 修理へ
November 23rd, 2006 | Published in Uncategorized
MacBookは届いてはや2日で修理に旅立ちました。
銀座のAppleStoreに持ち込んで相談してみました。 光学式ドライブにディスクを入れると、ものすごい轟音がすることが多々あるということで。
ネットのAppleStoreで買った場合は、電話で相談するのがストレートなやり方ですとのこと。 しかし、ここまで来ておいていまさら帰って電話するのも面倒だったので、その場で修理を依頼しておきました。直って届くのは、1週間後くらいとのこと。長い…
まだロクに中身をいじっていなかったので、ダメージは少ないのです。でもいったんあの速さを知ってしまうと、PowerBook 12”はなんて遅いのだろうと。
AppleStoreの人は、対応の感じが良くてすばらしい。なんかスタバの店員さんと接し方が似ているように思います。
MacBook Kuro 来た !
November 21st, 2006 | Published in Uncategorized
ついに来ました!
さっそくMacPortsを入れて、Subversionのコンパイルにかかる僕です。…と書いてるうちにmakeが終わってしまいました。Core 2 Duo はえええぇぇぇぇっっっっっ!!!! PowerBook 12” なら一晩かかっていたのに。
体感速度でいうと、軽く10倍は速くなっています。 これであと数年は快適ライフが送れそうです。
スペック
- 2GHz Intel Core 2 Duo
- 2GB RAM
- 120GB HDD
- 赤Discならなんでも焼ける光学ドライブ
んー、すごい。すごすぎ。
気になること
XCodeをインストールしようとインストールディスクを入れたところ、光学ドライブがものすごい唸り声をあげだしました。怖かった。 せっかく、やっと届いたMacBookを修理に出すのはなぁとか思うのですが、不良品だったら泣くのは自分なので、もう少しテストして様子を見ようというところです。
DEATH NOTE
November 20th, 2006 | Published in Uncategorized
デスノートの前編を観ました。漫画のほうも読んだことがなかったので、ストーリーを初めて知ったのです。知能戦っておもしろい。
藤原さんの演技が、以前の古畑任三郎のときを思い出させます。クールだけど悲しさを背負ってる、みたいな。
ジャンプってけっこうなんでもありなんやなぁと再認識します。ジョジョとか電影少女とか。
Boot It !
November 19th, 2006 | Published in Uncategorized
もうすぐMacBook黒にreplaceするPowerBook 12”なのです。内蔵HDDがダメになってしまったので、外部FireWireHDDからブートしてこれまで使っていました。
しかし、昨日いつものようにOptionキーを押しながらブートしてみたところ、いつものようにHDDが見えません。なんどやってもだめ。どうも内蔵HDDが悪さをしているようです。
これは困ったぞ、となかば諦めながらあたりを見回してみたら、電池がスカスカになってしまったiPodがありました。これにOSXをインストールすればなんとかなるんじゃ? と思い、1時間くらいかけてインストールしてみたのです。 そしたら、うまいことブートできました! しめしめとしながら、つぎは外部FireWireHDDからもブートさせるようにせねばということでどうしたらいいのかなとシステム環境設定あたりを覗いてみたところ、起動ディスクといういかにもそれっぽいものが。これでいままでどおりブートすることができるようになりました。
内蔵HDDを差し換えることができればいちばんなのですが、ちょっと調べてみたところそれはあまりにもリスキーすぎるみたいなので、躊躇してしまいます。とりあえずだましだましでも動くのでよしとしようかと。
PhatPad
November 19th, 2006 | Published in Uncategorized
手描きメモとかをデジタル化するのに、PhatPadが重宝しています。
- 標準のNoteよりもうまく、手軽に絵が描ける
- 録音もできる
W-ZERO3でいま一番使ってるアプリなのですが、唯一の問題はMacとの連携がうまくないことです。
ファイル形式をハックしてがんばってみるという手もありますが、ひとまず開発元に「Macでも使いたいよう」という旨のリクエストを出してみました。Windows向けのソフトばかり出しているところなので、聞き入れてくれる可能性は薄そうですが、そういったニーズもあるということを知ってもらうため。
現状は、
- 絵を描く
- PNGで保存
- MailでFlickrにupload
という面倒なステップを踏んでいます。ここを単純にして、より気軽にメモをとりたい。
理想としては、
- W-ZERO3でちゃちゃっとメモ
- あちら側に気軽にポスト。録音がある場合は、音声認識して自動的にテキストに。
- 絵の中に文字があれば画像認識して、テキストに。
Tags: palm