2008/05/27


追記
検索順位が変ってしまったようです。

おそらくこれ、Technoratiがやりたかった事のはず。

- Yahoo! Search Results
http://www.yr-bcn.es/demos/microsearch/

microsearch [Wiki]

Using microformats

We support two kinds of microformats: hCard and hCalendar. hCard is used to add personal information to your webpage, hCalendar is used to add events. You can use the hCard creator and the hCalendar creator to create the code that you will need to insert into your webpage.

http://www.yr-bcn.es/dokuwiki/doku.php?id=microsearch#using_microformats
1段目の引用部にあるリンクで、「mattn」と検索してみて下さい。おそらく10秒から20秒程かかりますが検索結果が現れるかと思います。他の検索サービスと違う事に気付いた方、すばらしい。
そう、microformatsを使ってるのです。このサイト「Big Sky」に埋め込まれたmicroformatsの内、「hCard」と呼ばれる物(ここでは「Osaka, Japan」)を使用して地図上の大阪付近に「mattn」とプロットしているのです。
microsearch
2段目の引用部

Using microformats

hCardとhCalendarという、2種類のmicroformatsをサポートしています: hCardとは、貴方のウェブページに個人情報を加えるのに用いられ、hCalendarはイベントを加えるのに使用されます。 これらをウェブページに追加するには挿入するにはhCard CreatorFOAF-a-matic -- Describe yourself in RDFを使う事でコードを生成出来ます。

から、Yahooもmicroformatsに何かしらの期待を持っている事が伺えます。いずれ検索メタデータとして扱っていこうという事でしょうか。
リンク先には、今後GRDDLへの対応も予定されているので、ちょっとYahooが面白い事をやってくれそうな気がしてきました。
Posted at by



2008/05/26


以前、「Big Sky :: 意外と知られていないvimのtips(calendar.vimの日記機能をGoogle Calendarと同期させる)」という記事を書いたのですが、どうやらこれを完成品にまで作り上げてくれた人が居るようです。
見たところ、私のソースを流用されてはいなさそうですが仕組みは似通っています。
diaryvgc - Google Code

Synchronism Python Script between VIM Calendar diary and Google Calendar .

DiaryVGC == Diary Vim Google Calendar

http://code.google.com/p/diaryvgc/
私の場合はファイルの存在や更新時刻で動作しますが、こちらはログファイルを使った全て。また私の様に「--- Google Calendar ---」という文字列で対象ファイルを絞ったり、イベント期間を設定出来たりはしません。
私の場合は「--- Google Calendar ---」という文言を見付けて、それだけを対象ファイルとしていますが、こちらはログファイルを使った全て。
ただ、中国の方のようでコード内にcp936やらgb2312といったエンコーディング名がちらほら。
適当にpatch当てて、動くまでは確認しました。
Index: diaryvgc.py
===================================================================
--- diaryvgc.py (revision 4)
+++ diaryvgc.py (working copy)
@@ -257,15 +257,15 @@
                             if sys.platform[:3] == 'win':
                                 try:
                                     diaryinfo = open(tfile).read()
-                                    info_done = unicode(diaryinfo,'cp936')
+                                    info_done = unicode(diaryinfo,'mbcs')
                                     #print "=============win===UTF8=============="+tfile
                                 except Exception,ex:
-                                    diaryinfo = codecs.open(tfile,'r','gb2312').read()
+                                    diaryinfo = codecs.open(tfile,'r','mbcs').read()
                                     info_done = diaryinfo.encode("utf-8")
                                     #print "============win====GB2312=============="+tfile
                             else:
                                 try:
-                                    diaryinfo = codecs.open(tfile,'r','gb2312').read()
+                                    diaryinfo = codecs.open(tfile,'r','mbcs').read()
                                     info_done = diaryinfo.encode("utf-8")
                                     #print "=============notwin===GB2312=============="+tfile
                                 except Exception,ex:

使い方は
diaryvgc.py --user your-gmail-id --pw your-pass-word --dir /path/to/vim/diary で更新です。
追記
よくみたら場所で「China」がデフォルトになってますね。
使う人は適当に「Japan」とかに書き換えるのが良いかと...

自分が作った物が何かしらの形で流用されるってのは、うれしいですね。
Posted at by




先日、Open Tech Pressの連載コラム「Vimマスターへの道」の中に「Vim/gVimをユーザフレンドリなエディタに変えるCream」という記事を見つけました。
Creamは以前から知っており、Creamの作者から「calendar.vim」の取り込み可否を尋ねられた事があります。現在は少し古いバージョンがCreamにバンドルされています。
上記本文中に、「...例えばカレンダ機能を追加するCalendarプラグインが使えないと自分は生きていけないと語っていた者と何回か出会ったことがある。」の文言を見つけた時には正直嬉しかったです。
ただ、Calendarに付属している日記機能は現状メモ書き用途にしか使えず、現状のCalendarは単なるカレンダでしかありません。何かとリンクする訳でもなく、このデータを使ってvimと連携する事もありません。しいて言うならば日記ファイルがあるとcalendar.vimで日付が点灯するくらいです。

vim_calendar1

今日は、あまりvimと関係しないかも知れませんが、このcalendar.vimとGoogle Calendarのスケジュールを同期するプログラムをご紹介したいと思います。
Google Calendarは、Googleが無償で提供するカレンダアプリケーションです。
携帯からも使用でき、ホビーユーザからヘビーユーザまで満足出来るアプリケーションです。
Google CalendarにはAPIが公開されており、Googleのアカウントをお持ちで開発経験のある方ならば自前のアプリケーションからGoogle Calendarに対してアクセスする事が出来ます。
今回はPythonを使用しますのでgdata-python-clientから「gdata.py-1.0.5.tar.gz」をダウンロードしました。
calendar.vimでは、ホームディレクトリに置かれた「diary」というディレクトリ(変更可能)から年月日をそれぞれディレクトリに分割した構成で拡張子「.cal」のファイルを管理します。
この「.cal」ファイルにGoogle Calendarのスケジュールを取得し、書き込みたいと思います。
gdata-python-clientでは、Googleアプリケーションのデータストレージ(gdata)に対する認証からカレンダへのアクセスまで行ってくれます。
認証は以下の手順で行います。
cal_client = gdata.calendar.service.CalendarService()
cal_client.email = myemail
cal_client.password = mypasswd
cal_client.source = "Google-Calendar_Python_Sample-1.0"
cal_client.ProgrammaticLogin()
これで、GData認証サービスへのトークン取得、認証までが完了しています。
そして以下がカレンダへのアクセスです。今回は当月から3ヶ月分のスケジュールを取得しています。
today = datetime.date.today()
query = gdata.calendar.service.CalendarEventQuery("default", "private", "full", "")
query.start_min = str(today + relativedelta(day=1))
query.start_max = str(today + relativedelta(months=+3,day=1,days=-1))
feed = cal_client.CalendarQuery(query)
for i, an_event in enumerate(feed.entry):
  for a_when in an_event.when:
    print an_event.title.text, a_when.start_time, a_when.end_time
今回は、横着して月始めと月末の計算に便利な「dateutil」を使用しています。
これで、当月の一日から、2ヵ月後の月末までのイベントオブジェクト(feed)が取得出来ましたので、これをcalendar.vimの日記ファイルとリンクします。
def update_schedule(path, an_event, a_when):
    dir = os.path.dirname(path)
    if not os.path.isdir(dir):
        os.makedirs(dir)
    lines = []
    resep = re.compile("^" + schedule_sep + "$")
    has_data = False
    if os.path.isfile(path):
        fp = open(path)
        for line in fp.readlines():
            if resep.search(line):
                has_data = True
            lines.append(line)
    if not has_data:
        lines.append("%s\n" % schedule_sep)
    lines.append("%s - %s\n" % (
        a_when.start_time.replace("-", "/"),
        a_when.end_time.replace("-", "/")))
    lines.append("\t%s\n" % an_event.title.text.encode("utf-8", "replace"))
    print "updating schedule of '%s'" % path
    fp = open(path, "w")
    fp.writelines(lines)
    fp.close()
schedule_sepは「--- Google Calendar ---」というセパレータを示し、「.cal」ファイルの下部からデータが開始します。
データは、「開始日付 - 終了日付」の次の行にイベント名をインデントした以下の形式にしています。 --- Google Calendar ---
2007/09/25 - 2007/09/26
    休暇予定
上記update_scheduleでは、セパレータ以降にGoogle Calendarから取得した開始日付、終了日付、タイトルを書き込んでいます。

ただ、このアプリケーションを何度も実行すると同じデータが繰り返し追加される事になりますので、update_scheduleと同様の処理でセパレータ以降をクリアするremove_scheduleを実装し # clean exising schedules
for i, an_event in enumerate(feed.entry):
  for a_when in an_event.when:
    remove_schedule(datetime2diary(a_when.start_time))

# append newer schedules
for i, an_event in enumerate(feed.entry):
  for a_when in an_event.when:
    update_schedule(datetime2diary(a_when.start_time), an_event, a_when)
とする事で毎回データを作り直しています。
これをあとは、プログラム引数からユーザIDとパスワードを貰い、動作するアプリケーションとして仕上げれば以下のようなCalendarの画面が出来上がります。

vim_calendar2

一応、Windows版のPython2.5で検証してますが、おそらく2.4でも動作するかと思います。
このアプリケーションには、まだ更新する機能がありませんが、ぼちぼち暇を見つけて更新して行こうかと思います。

ダウンロード:

Posted at by