ふにゃるんv2

もとは、http://d.hatena.ne.jp/Wacky/

姫君の条件

本屋さんに行ったら、姫君の条件を見つけたので、早速ゲット。

姫君の条件 第6巻 (花とゆめCOMICS)

前の伏線が徐々に繋がっていく所がスゴイよね。作者の朔野さんて、このコミックが初出だと思うんだけど、「本当に初出ですか?」ってなぐらいに、ストーリー展開がうまいし、キャラクターが生き生きとしている。

いや〜、久しぶりに満足ですたい。

外部のSubversionレポジトリからソースを取得する

最近、bulknewsで、SVNレポジトリが公開された。

SVN レポジトリの公開: blog.bulknews.net
http://blog.bulknews.net/mt/archives/001790.html


レポジトリから、どうやって取ってくるんだろう?と思ったのと、GmailBloglines ってのに興味があったので、ちょっとコードを閲覧させたもらう事にした。

続々 GmailBloglines: blog.bulknews.net
http://blog.bulknews.net/mt/archives/001802.html


ちなみに、今入れているSubversion関連の環境は、

コマンドラインからコードをゲット

事例が書かれていたので、早速試す。

適当にフォルダを作って、svn コマンドを呼び出す。

F:\Wacky\Test\bulknews>svn co svn://svn.bulknews.net/public/bloglines2email/trun
k bloglines2email
A    bloglines2email\Makefile.PL
A    bloglines2email\Changes
A    bloglines2email\bloglines2email
A    bloglines2email\MANIFEST.SKIP
A    bloglines2email\bloglines2email.conf.sample
リビジョン 1651 をチェックアウトしました。

F:\Wacky\Test\bulknews>pwd
/cygdrive/f/Wacky/Test/bulknews

F:\Wacky\Test\bulknews>tree /F
F:.
└─bloglines2email
        bloglines2email
        bloglines2email.conf.sample
        Changes
        Makefile.PL
        MANIFEST.SKIP

あっけな。

TortoiseSVNからゲット

フォルダを選択し、右クリックメニューから「SVN Checkout」(「TortoiseSVN」→「Export」とすると、単にファイルだけ取ってくる)し、Checkoutダイアログの「URL of repository」に、以下を入力。

svn://svn.bulknews.net/public/bloglines2email/trunk

少し待たされた後(30秒くらいか?)、シャカシャカとファイルがゲットできる。


TortoiseSVNだと、「Repository Browser」を使う事で、ツリーの構造やログを見る事ができるので便利ですな。

フォト蔵

フォト蔵ってのを以下で知った。

SNS画像共有サイト「フォト蔵」が正式サービス、招待なしで登録可能に
http://internet.watch.impress.co.jp/cda/news/2005/09/08/9077.html


自分のブログに貼り付ける事ができる。とある。


って〜事は何ですかいな?
フォト蔵に画像を置いて、はてなダイアリーでサムネイルを持ってくる事が可能なのかいな?どっかにFAQないかな?
(「Powered by フォト蔵」とか付けてもいいから、OKだといいな)


まぁ、どんなものなんだろ?と思って、登録してみた。が、ログインできねぇ。
混んでいるのかしらん?まぁ、暫くして、またアクセスしてみるか。

追記 20:00
再度アクセスしたら入れた。ふむふむ。

XML-RPCでメッセージに日本語を通す方法

pythonXML-RPC対応って、むっちゃ簡単だよね。

  • サーバ側:SimpleXMLRPCServer.SimpleXMLRPCServer で、公開したい関数 or クラスを登録するだけ
  • クライアント側:xmlrpclib.ServerProxy で、呼び出したい関数をコールするだけ

動かす際、Apacheとか何かと連携しないといけないのかと思ったら、全然そんな事なくて、単に書いて python hoge.py という風に呼び出すだけ。
DCOMやCORBAだと、色々 あれこれ しないといけないのに、「何これ?卑怯じゃん。漏れ、すっげー損してたよ!」って感じ。


で、早速遊んでいたら、string(文字列)引数に、日本語を突っ込んだら、エラーが発生する事に気付いた。

...
  File "/usr/lib/python2.4/xmlrpclib.py", line 1096, in __call__
    return self.__send(self.__name, args)
  File "/usr/lib/python2.4/xmlrpclib.py", line 1383, in __request
    verbose=self.__verbose
  File "/usr/lib/python2.4/xmlrpclib.py", line 1137, in request
    headers
xmlrpclib.ProtocolError: <ProtocolError for localhost:8000/RPC2: 500 Internal error>

さっそく ぐぐーる様に お伺いを立てるが、あまり言及する資料が無い。
メーリングリストで、自分と同じ現象で困っている人が居たくらい。

[Python-ml-jp 1497] xmlrpclibで日本語を扱うには?
http://www.python.jp/pipermail/python-ml-jp/2002-June/001494.html
Morf-hine : はてなダイアリーキーワード自動リンクAPI
http://www.zoili.net/203


う〜ん、あんまり日本語を通す要求って無いのかしらん?と思って、サーバとクライアントの両方をUTF-8にしたりして、トライ&エラーで、試してみた。


で、結局の所、
XML-RPCで日本語を通すには、UTF-8に変換して通す必要がある
という事がわかった。


という訳で、実証コードね。

server.py:
# -*- encoding: euc_jp -*-
import commands
import sys
import re
import  SimpleXMLRPCServer

def test(msg):
    print type(msg), len(msg)
    if type(msg) is unicode:
        print msg.encode("euc_jp")
    else:
        print msg
    return 0

def main():
    srv = SimpleXMLRPCServer.SimpleXMLRPCServer
    srv.register_introspection_functions( ) 
    srv.register_function(test)
    print "listen"
    srv.serve_forever()

if __name__ == "__main__":
    main()
client.py
# -*- coding: euc_jp -*-
import commands
import sys
import re
import xmlrpclib


def main():
    print sys.stdout.encoding
    print sys.getfilesystemencoding()
    srv = xmlrpclib.ServerProxy("http://localhost:8000")
    print srv.system.listMethods()
    while True:
        c = raw_input(">")
        if c == "q": break
        s = unicode(c, "euc_jp", "ignore").encode("utf-8")
        print type(s), len(s)
        print srv.test(s)

if __name__ == "__main__":
    main()

実行結果。(Python 2.4.1 for Cygwinでテスト)

クライアント側:
$ python client.py
US-ASCII
US-ASCII
['system.listMethods', 'system.methodHelp', 'system.methodSignature', 'test']
>ほげ
<type 'str'> 6
0
>hoge
<type 'str'> 4

サーバ側:
$ python server.py
listen
localhost - - [11/Sep/2005 12:20:38] "POST /RPC2 HTTP/1.0" 200 -
<type 'unicode'> 2
ほげ
localhost - - [11/Sep/2005 12:20:47] "POST /RPC2 HTTP/1.0" 200 -
<type 'str'> 4
hoge
localhost - - [11/Sep/2005 12:21:03] "POST /RPC2 HTTP/1.0" 200 -

当初、MLの内容から、コード自体をUTF-8で記述しないといけないのか?と思ってたんだが、そこまでする必要は無く、実際、検証コードも、EUCで記述している。
送受信時、ちと手間な変換作業が発生するが、まぁ 許容範囲でしょう。