どうやらTwitterは本当にインフラになったらしい。昨日の講演のまとめ Twitter By The Numbers - O'Reilly Radar を見ても、規模の大きさを実感出来る。日本ではTwitterドラマも始まったらしい。
そんな中で、独り言と会話の積み重なりは何を生むのだろう。編集をすることでブログにもなるしWikiにもなる。日本語にとっては140文字は制限ではないとよく言われる。もしかしたら、外国人とはTwitterに対する考え方が違うかもしれない。そんなあらゆる考えを受け止めているTwitterは、やっぱり凄い。
そもそも僕は、Twitterにすぐには飛びつかなかった。当時アルファブロガと呼ばれる人達が使い始めて、まあ独り言掲示板なら書いていても負担ではないし、やってみるかという随分軽い気持ちで初めて、もう3年くらい続けている。ローカルに保存している日記は毎日続いているが、はてなダイアリーは滞りがちになっていて、成程ブログを置き換えるものだったか、と今になって分かった。
デザイナ分野の中には、Twitterによって思考が細切れになって、大きな視野を失うと言っている人が居るらしい。事実だと思う。メモ書きのつもりが、結構その140文字未満の言葉に縛られて、視野が狭くなるという現象が起こりやすい。それを防ぐために、適度にfollowして他人の考えを得、また自分でもそうならぬよう制御しているつもりだ。
ほぼリアルタイムで、みんなの思考が流れている。『攻殻機動隊』の電網の海もこんな感じだったではないか。その中を優雅に泳ぎ、情報を得る。見た目は独り言と少しの会話だが、その実態は情報の津波だ。巻き込まれるだけなら事故だし、波を制御出来たらそれはとても価値のある力になるだろう。
動物、ビールサーバ、トースタ、トイレ、等々。
今週は DoS攻撃で長い障害があった Twitterだが、メッセージを垂れ流す最適な場として、暫く不動だろう。
Arduinoを使えば、ハード的なノウハウは無視して、プログラミングに専念するだけで、こういうおもちゃが作れる。何でもオープンソースだ。設計図が間違っていれば、誰かが直す。
今の段階で、僕がTwitxrにポストしたメッセージ数は1216、もう少し前から使っているTwitterのメッセージ数は4194、となっている。Twitxrは未確認だが、Twitterは1ページ20個メッセージ表示で http://twitter.com/laclefyoshi?page=41 より古いメッセージを参照することが出来ない。Twitterが提供している検索サービスを使っても出ないし、どうやら古いメッセージはデータベースから削除しているか、どこかに隔離する仕様の様だ。
この手のサービスはマイクロブログ(micro-blogging)と言うのだから、メッセージはサービス上にあるが自分のログであるわけで、消されるのは面白くない。自分でバックアップを取って自分で再利用出来るようにしておくべきだろう。
Pythonで、TwitxrのAPIメソッドの1つであるgetUserTimelineを叩いて最新20個のメッセージ(XML)を取り出し、 lxml で解析、 sqlite3(pysqlite2) でデータベースに保存する。画像はバックアップしていない。
SQLiteのデータベースに保存するのは、XMLのまま保存するとかCSVに変換することも考えたが、ある程度サイズが大きくなることを考慮したため。
#!/usr/bin/python
import urllib
import lxml.etree
import sys
if sys.version_info[:2] >= (2, 5):
import sqlite3
else:
from pysqlite2 import dbapi2 as sqlite3
DB_FILE = 'twitxr_backup.db'
def init_db(con):
con.execute("""CREATE TABLE twitxr(
id INTEGER PRIMARY KEY,
url TEXT,
timestamp INTEGER,
text TEXT,
lat TEXT,
lon TEXT,
place TEXT)
""")
print("create db '%s'" % DB_FILE)
def update_db_fromxml(con):
url = 'http://twitxr.com/api/rest/getUserTimeline?user=laclefyoshi'
res = urllib.urlopen(url)
t = lxml.etree.fromstring(res.read())
for udelm in t.xpath('//update'):
id = udelm.xpath('./@id')[0]
cur = con.execute('SELECT * FROM twitxr WHERE id == %s' % id)
if cur.fetchone() == None:
url = udelm.xpath('./url')[0].text
timestamp = udelm.xpath('./timestamp')[0].text
text = udelm.xpath('./text')[0].text
lat = udelm.xpath('./location/lat')[0].text
lon = udelm.xpath('./location/lng')[0].text
place = udelm.xpath('./location/place')[0].text
con.execute("INSERT INTO twitxr VALUES(?, ?, ?, ?, ?, ?, ?)",
(int(id), url, int(timestamp), text, lat, lon, place))
con.commit()
print("insert %s: %s" % (id, text))
else:
continue
cur.close()
def main():
con = sqlite3.connect(DB_FILE)
try:
init_db(con)
except sqlite3.OperationalError:
print("db '%s' is existed" % DB_FILE)
update_db_fromxml(con)
con.close()
main()
最新20個以前のメッセージは、HTMLを辿って、lxml.htmlで解析して取り出した。
これをcrontabで15分程度毎(メッセージのポスト数が20を越えないであろう時間間隔)に実行すれば、メッセージのバックアップが取れる。
ここまでするなら、Djangoでも使って自分専用マイクロブログサービスを作った方が安心で有意義なんじゃないかと、一瞬思った。
Twitterがもしも先進的でなく(先進的の如く扱われず)、乱立するショートメッセージングサービスの1つだったとしたら、正直積極的に使いたいとは思えない程、Twitterは不安定で間が抜けている。
最近はTwitxrからTwitter Gateway経由でTwitterのFollowerに通知をしているのだけれど、これは携帯電話のGPS機能で遊んでいるのであって、Twitterを避けているのではない。
TwitterはメッセージについてはIDと時間、IDは他のIDと関連付けられているが、この関連ももどかしいと思い、徹底的にシンプルに関連を無くしてあったとしたら、これもまた流行の中心に居なかっただろう。
というわけで、色々責任があるのでTwitterは頑張れ。
/.Jの記事はRoRが早くも落ち目である事を過大広告するつもりなんだろうか。
Twitterはメインストリームになんて、なるつもりは無いのではないだろうか。短いメッセージを通した、現実あるいは他のコミュニティサービスと別の何かと連携するための、糊の様なものとして存在し続ける方が、Twitterらしい気がする。
こういう論調の記事で取り上げられると、Twitterは何か変わらないと認められなくなる可能性が大きくなった。
最近はFONのメールマガジンで知った Twitxr.com を使って、GPSで取得した位置情報と時々写真を、Twitter的メッセージと結び付けて遊んでいるのだけれど、これもTwitterを超える様なものでは無い。
Second Lifeについても言える事だが、この手の手法の成功は、実世界と如何に上手く結び付くか、に掛かっているのかな。
システムはシンプルに。使い方はユーザ任せ。
BloggerはGoogleに買収され成功だったが、Odeoは失敗だったんだ。それを活かせたのは、やはり努力や才能があったんだろう。
日本での流行は、Twitterの進化に一役買っていたらしい。
何だ、このカジュアルな格好は。とても良いじゃないか。
Oxford English Dictionaryのweblogの項より。
何を以て「weblog」あるいは「ブログ」なのかは、揉め易いところ。
日本のインターネット、Web上のテキスト文化については、ばるぼら『教科書には載らないニッポンのインターネットの歴史教科書』に詳しい。
glucoseの会社。
Twitterがあまりにオープンで緩いものだから、色々なサービスや考えが生まれるのだけれど、Twitterから見れば制限を設けたに過ぎなかったり。
マッシュアップと言うより、リデザインと言った感じ。