Category Archives: logging

logging

inteiten – teiten.org powered mobile fixed-point observation utility

teitenのdescriptionにはTeiten is a free social fixed-point observation utility.と書いてあるけど、カメラが動かないようではいけない。カメラが動かないのならば自分が動かなければいけない。

自分も今ではjavascriptとObjective-Cばかり書いているけれど、学生の頃にはPHPやperlでプログラムを書いてた。ちょうど、今のソフトバンクモバイルの前のボーダフォンの前のJ-PHONEという会社がカメラがついているケータイを初めて出したころ。シャープの栄光はここから始まった。いまではどんなケータイにもカメラがついているけど、出た頃はみんなケータイにカメラがついてるからってどうしろというんだ、と思ってた。数字はよく覚えてないけど、そのカメラは30万画素とかで96×72ピクセル、できあがるJPGファイルのサイズが10KBもないようなものだった。

ある日La Hortensia Azulのサイトで、画像つき掲示板みたいなのを作りたい、という話があった。そのころは今では過去のものになりつつあるMovableTypeみたいな伝統的ブロギングプラットホームもなかったので(あった?)、そういうものなしにサイトをデジカメ写真+テキストで更新しようと思ったらHTML+FTPで何とかしなければいけなくて結構な手間をかけないとできなかった。そのときに、その何に使うのかよくわからないケータイのカメラで写真を撮ってメールで送ることで、画像付き掲示板が作れるんじゃないかと思った。ケータイならHTML+FTPと違って誰でも使えるし。

これはいいんじゃないかと思って、後でヤプース!という、ケータイで写真を添付してメールで送ればサイトが更新される、というサービスを作った。今はどこのブログにもついている機能だけど、当時は大塚日記とあともうひとつ、なんだったっけ… 忘れちゃったけど自分の知ってる限りではふたつしかなかった。昔の話だから。

そういうサービスをやっていたので、ケータイではひたすら写真を撮っていた。今は自宅のベッドと職場の机との間を行ったり来たりしているだけだけど、その頃は学生だったのでおかねさえあればわりといろいろなところに行けた。行ったところで気になったものがあれば写真で撮って送っていた。初めて終電を逃したときに、この状況をリアルタイムでサーバに遅れるのに気がついたときには興奮した。今自分で書いていて、そんなあたりまえのことで、と思ったけど。今ならTwitterで普通にやってることもそのころやろうと思うとなかなか難しかった。誰も自分が常に見ているべきタイムラインなんてものも持っていなかったから書いたところで見てもらえなかったし。今なら誰でも、つまらないミーティングの隅に座っているときは”ミーティングがつまらない”とTwitterにpostする。それと同じように、自分もどんなときでも写真を撮ってpostしたいときには写真を撮ってpostしたかった。ミーティング中とか関係ないのと同じように。でもやっぱり電車の中で撮ったりすると周りの人が気にする。自分は何も撮ったらまずいものを撮ってるわけじゃないからわざわざ気にしないでほしい。だからケータイを買い換えたらまずバラしてスピーカをはずして音が出ないようにしてた。一度だけ、いつものようにスピーカを外してガワを閉じたら電波が入らなくなっていて焦ったことがあって、それ以来面倒になってやめちゃったけど。その電波が入らなくなるかと思ったケータイの構造の複雑さにびびったのもある。

そのころにライフスライスを知った。最近はTwitter上で子煩悩パパっぷりをみせつけてくれるヒマナイヌkawaiさんの作品。細かいコンセプトとかは知らないんだけれど、10分に一度自動的に写真を撮ってくれるデジカメで(30分だったかも)、あとでPCに繋いで写真を取り出して並べればその日一日が見えてくる、というもので、それだけでもうロガーの血が流れている人にはたまらないデバイスだ。自分がライフスライスのことを知ったときにはもうライフスライスは手に入らなかった。なんでも記録しておきたくてしょうがない人が世の中にはわりといて、そしてそれはだいたい男なので記録することに執着するのは男だけなのだと思う。とにかくずっとライフスライスのようなものがほしかった。

3年か4年前、ボーダフォンのV702NK/V702NK2(Nokia6630)でならpythonでアプリが書けて、当然のようにカメラを操作できて写真が撮れることを知ったときにはすぐにヤフオクで落札してきてマイライフスライスを作った。しかも、なぜかアプリからだとシャッター音が出なかった。日本独自仕様だったのかな。6630はヤフオクで買ってもライフスライスよりもかなり高かったけど、そのぶん格段に画質がいいしMMCカードを刺せたのでいくらでも写真を撮れてさらにBluetoothまで繋がるというハイテクライフスライスを作れた。そのpythonコードも写真もどこかにいってしまって見つけられないけど、わりと面白かった。ただ、自分的にはやっぱりリアルタイムでサーバに送りたかった。今見たものは今送りたい。でもボーダフォンのパケット定額プランは、アプリのパケット通信は定額の枠外だったので、とてもリアルタイムにサーバに送ることなんでできなかった。

それで、そんな自分から言わしてもらえれば、teitenはもったい。せっかく、やっと、いろんな人があきらめてきたものが今すべてそろっているのに、なぜカメラを固定しなければいけないのか。iPhoneアプリであれば通信も定額、カメラも使いたい放題、AppStoreで販売もできる。審査パスできるのか知らないけど。とにかく、長年の夢であったリアルタイムライフスライス、自分が今、目にしているものを同時に多数の人に見せることができる環境があるのに、なぜカメラが自分が見ている方向ではなく、自分を向いているのか。自分はそれが許せなかった。だからNorio Nomuraさんiphonetestのコードを夏ライオン for iPhoneの裏側にくっつけて暇をつぶせるようにして、自動的に写真をteitenに送り込むものを作った。ゴールデンウィークの終わりくらい。いまならそんなことしなくてもnotificationでいけるのかもしれない。

Teitenslice

これで自分のteitenは自分の外にあるカメラではなく、自分というカメラのteitenになった。自分は一度目にしたものはもう自分のものだと思ってる。もちろん、学生の頃に盗撮、というほどではないけれど、盗撮だと言われかねないことをやっていたから、何人も、その承諾なしに、みだりにその容ぼう・姿態を撮影されない自由を有し、警察官が、正当な理由もないのに、個人の容ぼう等を撮影することは、憲法一三条の趣旨に反し許されないという判例があるのは知ってる。でももうみんないつだってケータイを持っていて、そのカメラがCCDの電荷をメモリに移動させているかどうかなんてわからない。自分みたいなどうしても記録を残したいロガーがアプリをつくって常にバックグラウンドでカメラに写ったものをメモリに書き込み続けているかもしれない。だから自分は逆にいつだって、人が持っているケータイは自分を撮影してるんじゃないか、と思って怯えている。思ってないけど。たまに姿勢がいい人が顔の真正面までケータイを持ち上げて見ているときにはそう思う。あのケータイは俺のことを撮影している、と。iPhoneはストラップをつけるのがめんどうだったから、地面ばっかり写ってたけど、Nokiaの6630でやっていたときはストラップで首から下げていて使っていた。そのNokiaのケータイの裏でずっとpythonのコードが写真を撮影してメモリに書き込み続けているけれど、そのことはメニューにあのpythonの気持ちのよくないヘビのアイコンが出ていて、それがなんかよくわかんないスクリプトを実行していて、そのスクリプトはカメラからデータを読み出してメモリに書き込みまくっている、ということは、pythonのコードが読めないとわからない。そう思うと、ケータイのカメラが動いていないなんて誰にわかるだろうか?動いていないように見えても実は裏でアプリがカメラに写ったデータをflickrにアップロードしまくってるかもしれない。

Memory Plus 生ログ – 気紛 – きまぐれ -を読んでくれたら、最先端のちょっとおかしいロガーたちはそのようなことを当たり前のように考えて(奇異の目で見られることをも厭わずに)やっているっていうのもわかる。

だから、少し前にTumblrに流れてきたanalog | 赤の他人の醜態を写メする悪意のない人々の恐ろしさを読んだときも、この話自体は犯罪で捕まるけれど(電車内で高校生の足を撮影していた人が有罪になっていて、その判決文によれば相手に羞恥を覚えさせることがいけないのだ。泥酔している男が羞恥するのかには議論の余地もあるが)、話はそう単純でもないと思った。この投稿はtumblrに誰かがquoteしているのをdashboardで読んで知った。その誰かにtumblrの他の人が書いたコメントは、無理な合理化をしようとするものも多かったが、自分はperiscopeさんが書いていた日本の社会は、すでに各個人に記録端末が行きわたっているの部分に共感を覚えた。

前述の何人も、その承諾なしに、みだりにその容ぼう・姿態を撮影されない自由を有し、警察官が、正当な理由もないのに、個人の容ぼう等を撮影することは、憲法一三条の趣旨に反し許されないという判例を根拠に、監視カメラの合法性を問う声もある。警察が設置する監視カメラはともかく、商店街などが設置する監視カメラは法的にはきわどいので、犯罪捜査に協力するためのみに映像を利用するということになっていると4年ほど前に読んだ(警視庁のPDF資料だった気がするが見つけられなかった)。しかし、全自動で常に周囲を撮影することが容易になった結果、全自動で撮影することを前提にしたサービスが生まれてきている。

先日ひとまずグーグルの「ストリートビュー」は違法にあたらず–総務省の研究会が見解:ニュース – CNET JapanということになったGoogle Street Viewはその撮影結果が無料で公開されていて公共の福祉に資するのだと抗弁することも可能だろうが、ジェイマジック、画像解析技術で屋外広告を「誰が、いつ、何人見たか」測定する新サービス:ニュース – CNET Japanのようにカメラを設置した側にしか利益のないものも現れている(これは映ったデータをリアルタイムで解析し、撮影データは保存されないから”撮影”にはあたらないのかもしれない)。

Picture 4-29
最後にteitenのオフィシャルなFlashがサーバに送信しているデータの形式だけ解析したときのこと。はじめてTwitter / IEIRI Kazuma: Shotted: hbkr http://teite …経由でteitenを見たときに、これが自分がずっと求めていたライフスライス記録サービスだと確信した。どうでもいいけどshottedじゃなくてshotだとも思った。だからあのでかいコンピューターに繋がれた可哀想なシベリアンハスキーのようなカメラではなく、自分が見ているものといつもつねに同じものを見ることができるカメラからデータを送り込めるようにする必要があった。はじめはperlでpostするスクリプトを作った。gistにteiten hacksという名前でpostしてるスクリプトだ。

teitenのオフィシャルFlashがアップロードしているデータを少し見てみればわかるんだけど、送信しているデータの最後にh=120&w=160というパラメータがある。この120×160というサイズはteitenで表示される写真のサイズと同じだ。これを見たときに自分はもう終わったようなものだと思った(あとでいかに自分が愚かだったかを知ることになる)。これでteitenに自分が見たもののログを送り込めると。でもteitenはそんなに甘くなかった。160×120で各ピクセルをRGBの順で%02xでフォーマットしてteitenに送信してもどうしても画像が乱れる。アナログのテレビでいう走査線がずれたような画像がアップロードされてしまう。

でも、ここで学生のときにあったなんとか実験第2みたいなののパートナーだったやつから聞いた話が役に立った。彼は実験の間に、ゲームのディスクからデータを読み出してきて、そのどうなっているかわからないデータをうまいこと人間が視覚的に理解できるキャラクタのビットマップに再構成するまでの話をしてくれた。もうteitenのことは忘れよう、諦めかけたときにそのキャラクタを再構成する彼の話を思い出した。キャラクタはたしか格ゲーのキャラだった。画像が規則的にずれるときは画像の幅が間違っている、そう彼は教えてくれた。

自分は改めてteitenのFlashが送信しているデータの数を数えてみた。驚いた。160×120だと19,200ピクセルのはずなのにteitenのFlashは19,481ピクセル分のデータを送信していた。いったいこれはどういうことだろう。それでも自分は19,481という数字はピクセルの数と一致しているはずだと考えて素因数分解してみた。中学校の数学で習う、ひとつの数字をそれ以上余りなく割り算できない整数にまで細かくするやつだ。教科書にも役に立つことは載っている。ただみんなそれが役に立つような場面にいることに気がつかないだけだ。素因数分解は格ゲーのビットマップやteitenの画像がずれて困るときに問題解決の糸口を与えてくれる。

素因数分解の結果を見て自分はすぐに気がついた。19,481は161×121だった。コードを書き直して縦を121ピクセルにしてデータを送り直すとteitenはこちらが送ったつもりの画像を表示するようになった。h=120&w=160はなんなのかとかcolorsのところはもっとバイト数節約できるんじゃないかとかそんな細かいことはどうでもよかった。

数日後、開発者向けに公開されていたiPhoneOS3.0をインストールしたら、いろいろなアドレスが変わったようでinteitenには何も映らなくなった。

というわけでgist: 138764 – GitHubみたいに書けばUIImageをteitenに送りこめるので誰か作ってください。

一度2manjiののりで書いた文章をあとからふつうに書き直して飽きたのをtakaakik.comの河上さんに会って話をしたのきっかけにもう一度書き直したものです。一部に2manjiテイストのときに入れた嘘と誇張が残っております。

果たしてtumblrにアルファリブロガーは存在するのか

Tumblrのdashboardで

そして、所々にいる人がまさに電脳ハブとなっています。
有名人というよりも基本的には無名、だけどもごく一部では・・・という人が
ゴロゴロしています。followerが多いのも理由ですが、それだけではありません。
Tumblrは恐ろしい。(誤字訂正) – 湊子の徒然

というのを読みました。

それとはあんまり関係ないかもしれないけど、先日tumblrのnotes tokenを割り出す #2方法を編み出してからTumblrのデータを集めているので、実際にひとつのpostがどう広がっていくかを見てみましょう。Tumblrのreblogツリーはあることに関して誰からそれを知ったのかという地味だけど今までなかなか知れなかったことを不完全ながらも教えてくれます。それはまるで豊川信用金庫事件 – Wikipediaの真相を知るかのようなおもしろさがあります。

Introducing: Tumblr v5

reblog notesを集めるのはけっこう大変なので、そんなにたくさんデータがあるわけではないのですが、とりあえず今持っているデータの中で最もreblog(含like)されているのは712notesのIntroducing: Tumblr v5 | Tumblr Staff でした。

それがreblogされる様子をタテ8300ピクセルの巨大なPNGにしました。でかいので一部だけ紹介。

tumblr v5 video reblogtree

Tumblrの公式ブログだというのもあって、followしている人も多く、Tumblr Staffから直接reblog/likeしているひとが199人います。アイコンの横の数字が、その人からreblog/likeした人の数を表しています。2番目に表示されているjacobは最近新しくTumblrに加わった彫刻みたいな顔のデザイナーの人です。このひとから16人がreblog/likeしています。

ざーっとみていくとわかるのですが、700もreblog/likeされていても、ひとりのひとが4人以上からreblog/likeされていることは稀にしかありません。4reblog/likeが3人、3reblog/likeが4人で、ほとんどはゼロ(reblogされることのないlikeも含まれているので多くなります)か1です。16人からreblog/likeされているのはかなり珍しいです。ほかに多くの人からreblog/likeされているのはTumblrをつくったDavidの26reblog/likeだけです。

try to hide. by ~lemonsuicide on deviantART

reblog/likeの数が一番多かったTumblr v5ビデオの例はちょっと特殊なので、もうちょっとふつうのpostがどう広まるのかを見てみましょう。

下の写真はtry to hide. by ~lemonsuicide on deviantARTからgipsによってtumblrにpostされたもので177reblog/likeを集めています。

Try To Hide  By Lemonsuicide-1

これもタテ4200ピクセルくらいのPNGにしてみました。

lemonsuicide reblogtree

この写真はTumblr v5ビデオと違って、はじめにpostしたgipsからはkielaしかreblogしていません。ここでreblogされていなかったらtumblrの中では広がらず、177reblog/likeを集めて今ここでどのようにreblogされて広まっていくかの題材として紹介されることもなかったわけです。

Tumblr v5ビデオでは3reblog/likeは稀でしたが、このpostでは4reblog/likeくらいはわりと多く見られるのと、reblogしたひとからさらにreblogされる率が高く、結果としてツリーがどんどん深くなっていっているのが分かります。その深さ、一番深いところでは20人を介して一番はじめにTumblrにpostしたgipsに繋がります!

もしこのpostをreblogしたひとがいたら、これが自分のDashboardにどうやって流れ着いたのかをたどってみてください。自分の場合はgipsから深さ16のところで繋がっていました。それをreblog元へとずっとたどっていくと、何度かそのひとひとりしかreblogしていない危なっかしいところを経由して、自分のdashboardにまさに流れてきているのがわかります。

このpostに関して一番影響力があったと言えるのは深さ12のところで出てくる、エロ系のrebloggerの間では有名なbiccchiからの12reblog/likeが最多です。でもここからはあんまり深くならず、下には3段階しかのびていません。潜在的にreblogしそうなひとたちは深さ12になるまでにもうほかの人からreblog済みで、もうreblogする可能性のある人が少なくなっていたからかもしれません。

感想

マスメディアだろうと、ブログだろうと、Tumblrだろうと、見ている人が多いメディアが大きな影響力を持つのは変わらない、と思っていたけれど、try to hide. by ~lemonsuicide on deviantARTがTumblrでreblogされていく様子を見ると、見ている人の多さが直接の影響力に繋がっているわけではないみたいです。

集めたデータからあるユーザが何人のひとにreblogされている数からfollowerの数を推測することができるのですが、はじめのgipskielaもそんなにfollowされている数は多くはありません。followerが多そうな人を探してreblogtreeをたどっていくと、深さ6のところのroshroshroshは、ほかの人と比べて倍くらいの人にfollowされているようです。でもここから直接reblogしたひとは4人しかいません。kielaはその半分くらいの人にしかfollowされていないのに6人の人がreblogしています。

同じものをreblogしているひとたちはだいたいお互いにfollowed/followingの関係にあるので、dashboardで見ている時には時系列の逆順におなじpostが流れてきているのでしょう。だからroshroshroshをfollowしているひとはroshroshroshがreblogしたときにはじめてこのpostを見ることになります。そして、dashboardをさかのぼって何度か同じpostを見た時のどこかでやっぱりいいねと感じてreblogするからfollowerの多いroshroshroshからreblogするひとが相対的に少なくなっているのかもしれません。

ちょうどマスメディア広告である製品を知って、そのときは、へー、と思っただけだったけど、ともだちがその製品を使っているのを見て実際に買った、みたいなのと同じように、多くの人にfollowされている人はあるpostの存在をfollowerに認識してもらう役目を果たしているだけで、それを実際のreblogに繋げているのは意外とそのfollowerのほうなのかも。

半井小絵

Searchresult

少し前に恵比寿の写真美術館で土田ヒロミという写真家が20年間自分の顔を撮り続けているのを見た。

若い写真家で2年とか3年とか撮っている人がいるのは知っていた(違う人だけどYouTube – Me: Girl takes pic of herself every day for three yearsとか、自分を撮り続けている人はたくさんいる)。20年も撮っている人がいたとは。ただ、こういうのは長寿世界一みたいなのと同じで、あとからはじめた人が先にはじめていた人よりもすごくなりようがない。

こないだたまたま半井小絵という名前がついている写真がFlickrにたくさんあるのに気がついた。半井小絵って誰だよ、と思って調べたら半井小絵 – Wikipediaに載っていた。NHKのテレビの天気を教えてくれる人だった。

へー、と思ってFlickrの検索結果を見ていると、テレビの天気予報をキャプチャしてそこから切り出したと思われるPNG画像がえんえんでてくる。全部同じようなタイミングで切り取られている。これが500枚以上出てくる。そしてそれは全部一人のユーザによってアップロードされている。wikipediaの記述には夜の7時のニュースのあとの天気予報に出演している、と書かれているので、この写真は1日で1枚しか撮れない。それが500枚以上あるということは1年以上にわたって7時のニュースの天気予報をキャプチャして、そこからFlickrにアップロードするための瞬間を切り出していることになる。これが自動で行われているのか、手動で行われているのかはわからない。

自動で行われているのなら、テレビをキャプチャする設備があれば、この半井小絵だけでなく、テレビに出ている人すべてを毎日キャプチャしてそこから一瞬を切り出してFlickrに並べることがかんたんにできるということだ。写真家は自分で自分自身の顔を毎日撮り続けているが、それと同じことを毎日テレビに出てくる人であれば誰であっても毎日撮り続けることができることになる。自動で。

しかしこれはおそらく手動で行われている。たくさんある写真をLDRize+AutoPagerizeでえんえん見ていくと、ときどきキャプチャにまぎれてアナログのテレビをふつうのカメラで撮って、それをアップロードしているものがいくつか紛れ込んでいるのを見つけることができる。おそらく、このひとは働いていて、ときどき出張したりするような仕事で、出先のホテルであっても欠かさず夜の7時台の終わりの天気予報の時間にはテレビで半井小絵をチェックして、カメラで写真を撮っている。それを1年以上続けている。半井小絵への愛おしさがそこまでさせていることに恐ろしさすら感じた。3年とか4年とか自分の写真を撮ってるのより期間は短いけれど、この手法は自分自身ではなく毎日テレビに出てくる人なら誰でもを対象にすることができる。写真を撮る自分自身ではなく、全然関係のないテレビに出ている他人の毎日の変化を記録できる。

これをtumblrに流し込もうと、検索結果を上からひたすら送り込んだ。はじめは全部送り込んでいた。500以上あるので、途中で全部送り込むことはないなと思って、ざーっと流してちょっと好きなやつをtumblrに入れることにした。そうして一枚一枚を少しだけだけどちゃんと見るようになると、同じように見えたキャプチャも一枚一枚違っている。まず服が違う。NHKだから、わりと無難な服装が多いけれど、それでも日によってドレープのあるゴージャスなシャツだったり、たまにスーツだったりする。アクセサリーも違っていて、大きな丸い玉が連なっているネックレスをよくしてるな、というのに気づいた。表情も違う。作られたかんじの笑顔が大半だけれど、テレビの電波状態と切り取ったタイミングによっては、暗い顔をしていたり、媚びていたり、笑いをこらえているように見えたり、変な顔になっていたりする。

はじめは単に、写真家が自分自身の顔でやっていることを、テレビに映っている人であれば知らない他人の顔でできるということに、ほかの人が気がついてくれるかもしれない、と思ってtumblrにポストしていたけれど、途中からそんなことは忘れて、あ、この表情いいな、とか、この日の服はいいな、とか、そういうどの一枚がいいかといういつもと同じ基準で選ぶようになっていた。はじめは、誰だよこれ、くらいに思っていたのに、1日ごとにスライスされた写真をずっと見ているうちに、この服さっき着ていたような、とか、大きな玉の連なっているネックレスが好きなのかもしれない、とか、いつの間にか常にこっちに微笑みかけている半井小絵に親近感を持っていて、どの一枚がいいかをまじめに検討しているほどにひきこまれていた。

そしてその裏にいる1年以上にわたってテレビをキャプチャしてそこから最もいい瞬間を選んで切り出してFlickrにアップロードしている半井小絵が好きな誰かのことを思った。

追記 2008.7.6

http://blog.livedoor.jp/shunsuko/ とかも
はてなブックマーク – bookmark0x / 2008年07月06日

で教えていただいた滝沢クリステルバージョンのあら?クリステル – livedoor Blog(ブログ)は3年続けられています。期間的には半井小絵より長いけど、見せ方がキャプチャ+文章だとロギング感が薄れてあんまり迫ってこないなーと思いました。写真だけ取り出して並べてみたいです。

Google SpreadsheetsにGreasemonkeyスクリプトとかの出力を保存する

もともとは普段みてるページにどれくらいメタデータ入ってるのか知りたいからログとりたくて、ログとるのはいいけどバックエンド用意するのめんどい、というのから。Google Spreadsheetsがわりと楽そうでした。

デスクトップアプリケーションですら、クラッシュレポータなんてものがついていて、ネットワーク経由でアプリケーションの異常を送信できるのだから、Greasemonkeyスクリプトでもおんなじことする、とかにも使えます。

記録用のシートを作る

シートにカラムは作っておく必要があります。シートに書かれてないパラメータは送ってもシートに記録されません。

キーとワークシートID

Google Spreadsheetsのドキュメントは、Excelでいうファイルがキーというもので管理されてて、ExcelでいうシートがworksheetIdというので管理されてます。これを知るのにAPI経由だとめんどくさいので、書き込みたいシートonlyでpublishして

more publishing optionsでRSSのURLをみるのが一番はやいです。

feeds/listの後にある長いやつがキーで、数文字のやつ(上のスクリーンショットだとod6)がworksheetIdです。

スクリプト

自分のシートに自分で記録する場合。自分のシートに人に書いてもらう場合は明示的な認証とか必要になってきてめんどくさくなります。

var key = 'o09670103056371318321.5625818402836282329';
var sheetid = 'od6';
function GoogleSpreadsheets(key, sheetid) {
  this.key = key;
  this.sheetid = sheetid;
  
}
GoogleSpreadsheets.prototype.toSpreadSheetXML = function (data) {
    var xml = ['<atom:entry xmlns:atom="http://www.w3.org/2005/Atom" xmlns="http://schemas.google.com/spreadsheets/2006/extended">'];
    for (var name in data) {
      xml.push( 
        '<' + name + '>' +
          data[name].replace(/</g, '<').replace(/</g, '>') + '</' + name + '>'
      );
    }
    xml.push('</atom:entry>');
    return xml.join("\n");
  }
GoogleSpreadsheets.prototype.addRow = function (data, onload) {
  var opts = {
    url: "http://spreadsheets.google.com/feeds/list/" + this.key + "/" + this.sheetid + "/private/full",
    method: "POST",
    headers: {
      "Content-Type": "application/atom+xml"
    },
    data: this.toSpreadSheetXML(data),
    onload: onload
  };
  GM_xmlhttpRequest(opts);
}
var sheet = new GoogleSpreadsheets(key, sheetid);
sheet.addRow( {
  url: document.location.href,
  generators: generators,
  relnext: relnext,
  relalternate: relalternate,
  relmeta: relmeta,
}, function (res) {
  console.log(res);
});

これを実行するとシートに1行ずつデータが追加されていきます。
Spreadsheetsの裏側にcomet入れてあるのかなんなのか、シートを開いているとデータが追加された瞬間にシートの表示にも反映される。

Google Spreadsheetsのドキュメントによると、10,000レコードまでしか記録できないのでそこは注意。

なんかあとFill formとかいうモードがあるらしいので、もしかしたらそれ使うと安全に(悪い人にカラム名を書き換えられたりすることなく)不特定多数に使ってもらえるのかも。

セルベースの場合

Spreadsheets APIにはデータの変更モードにrow-basedとcell-basedっていうのがあってcell-basedだとすごくめんどくさい。cell-basedのときはセルのバージョン(セルじゃなくてシートかも)をとってきて、それをパラメータにつけて送らないとだめ。

細かいこと忘れたけどZend_GDataが送信してたデータのログ貼っとく。一番難しいのはxmlどう書いたらいいのかわかんないことだった。

rawdata: <atom :entry xmlns:atom="http://www.w3.org/2005/Atom"><atom :category term="http://schemas.google.com/spreadsheets/2006#cell" scheme="http://schemas.google.com/spreadsheets/2006"/></atom><atom :id>http://spreadsheets.google.com/feeds/cells/o09670103056371318321.5625818402836282329/od6/private/full/R1C1</atom><atom :link href="http://spreadsheets.google.com/feeds/cells/o09670103056371318321.5625818402836282329/od6/private/full/R1C1" rel="self" type="application/atom+xml"/><atom :link href="http://spreadsheets.google.com/feeds/cells/o09670103056371318321.5625818402836282329/od6/private/full/R1C1/11ip" rel="edit" type="application/atom+xml"/><atom :title type="text">A1</atom><atom :updated>2008-04-03T08:32:39.842Z</atom><atom :content type="text">100</atom><gs :cell xmlns:gs="http://schemas.google.com/spreadsheets/2006" row="1" col="1" inputValue="100"/>
contentType: application/atom+xml
uri: http://spreadsheets.google.com/feeds/cells/o09670103056371318321.5625818402836282329/od6/private/full/R1C1/11ip

Firefox3のCanvasにFlashが映るのでYouTubeをスライスできるからやった(でもWindowsはだめ)

補足 2008.3.12

Bug 313462 – plugin content not drawn via drawWindow()にファイルされていました。

This works fine on OS X on Trunk, but (I imagine) isn’t fixed in 1.8.

Comment #26

って書いてあるのでOSXでは動く状態になったけど他がまだ、という状態みたい。

あと書かれている通りwmode="transparent"になっていればWindowsでも映るのを確認。でもふつうはwmode="transparent"になっていないのでWindowsだと事実上映らない。

この問題はVistaのタスク切り替えみたいにタブのサムネイル一覧を出したときに、Flashの部分が映らないのはnot attractiveだから直したいみたいなので期待してよさそう。

bugzilla調べたらたいてい載ってるというのを学んだ。

Twitter / dotimpact: firefox3b4いれたら非互換addonがあるとクラッシュしたというのを見て、今回はバージョンあげるのやめとこうかなと思いながらもMozilla Firefox 3 Beta 4 Release Notesで何が変わったのかを見ていたら

[Improved in Beta 4!] Full page zoom: from the View menu and via keyboard shortcuts, the new zooming feature lets you zoom in and out of entire pages, scaling the layout, text and images, or optionally only the text size. Your settings will be remembered whenever you return to the site.

というのがあって、たぶんこれはCanvasのzoomを使って実現してるんだろうと推測していたので、もしこれでFlashが映るようになっていたらcapture.tumblr.js ブラウザでキャプチャしてtumblrにpostするやつもFlashが映るようになってるかも、と思ってやってみたらFlashが映るようになってるのです!Firefox3になってから試してなかったのでFirefox3であれば映るのかもしれませんが、とにかくFirefox3beta4からCanvasにFlashの中が映るようになりました。でもこれOSXだけ(?)なのかWindowsのFirefox3beta4ではやっぱりCanvasにFlashの中は映りません。FirefoxのFull page zoom機能ではWindowsでもちゃんとFlashがzoomされるので、原理的には映るような気もするけどそもそもfull page zoomはCanvasでできてる、という推測が違うのかな。

それで、もうなにがきっかけだったか忘れちゃったけど、ずっと前からやりたかったTAGIRIみたいにYouTubeの動画を一定時間ごとにキャプチャしてスライスを作る、というのができるようになってうれしい。YouTube – Fujiya & Miyagi Ankle Injuriesを使ってビデオのスライスを作った。上に数ピクセルゴミが入ってるのと、コントローラが入ってるのはてきとうに調整してあげたらなくせるけど面倒なだけでやればできるからそのままにしてある。

1秒に1回でローカルディスクに書くのだとコマ落ちせずにいけるかんじ。

Miyagi Sliced

そのあと1秒に1回でcapture.tumblr.jsのコードをちぎって貼ってtumblrにアップロードしてみると、tumblr側がレスポンスを返してくるのに5~10秒くらいかかるのでだんだんリクエストがたまるんだけど、結果的には問題なさそう。

jsでFlashのプレイヤーを操作したり、ビデオの長さを得たりできるとスクリプトで自動的にキャプチャを止められるんだけど、そのへんは詳しくないので手動で止めた。後で調べたら再生時間はswfArgs.lに書いてあった。

480×394のサイズでキャプチャ。87ファイルで35MBになった。PNGでエンコードして1ファイル平均で400kBくらい。jpegだとたぶん1/3くらいのサイズになる。

ためしてないけどYouTubeだけじゃなくて任意のFlashのプレイヤーのやつが撮れるはず。

ダウンロード

使ったJSActionsスクリプト。参考までに。
youtubeのページを開いて再生してる状態で実行すると1秒単位でスライスして /home/kuma/Desktop/miyagi/ にたくさんファイルができる状態になってます。てきとうに書き換えたらtumblrにアップロードされるようにもなる。

tagiru.tumblr.js

APNGと組み合わせる

APNG Edit :: Firefox Add-onsで使われているMozilla2:Image Encoding – MozillaWikiを使えば、これでスライスした画像をそのままAnimation PNGにするとかもできる。理論的には可能だけど実際やったらメモリの都合でできなかったりしそうだけど。

ビデオで、特定の部分だけ切り出してそこだけ動画にしてpostする、みたいなのがさくっとできるようになるといいなーと思います。このアプローチじゃ絶対に音が出ないので使えないんだけど。

参考

getBoundingClientRect を翻訳、 getClientRects を更新 – A Better Project@はてなダイアリー
getBoundingClientRect()を知らなくて困っていたところで助けられました。どうでもいいけどおなじくIE由来でFirefox3で導入されたdocument.activeElementもすごい便利で助けられてます。
プラダを着た悪魔
こないだ、服かわいいなー、これ全部スライスしたいなーと思いながら見てました。
SCRAPBLOG : canvas要素によるWebページのスクリーンショット保存機能
Code snippets:Canvas – MDC

Google Web History 活用事例 – ダウンロードした画像の出所を探す

ウェブを見ていてちょっと好きだった画像をローカルに保存しておいて、画像のアップロードテストの時とかに使うことにしている。そうすると画像をアップロードしたりするのが少し楽しくなるから。

気がつくとデスクトップに compiler って書いてある画像が置かれているけれど、どこのページにあったものなのかがぜんぜん思い出せない。

Compilerbanner

コンパイラの話が書いてあるようなブログだったらチェックしたいなと思って思い出そうとしても思い出せない。spotlightを使っているとspotlight情報のところにダウンロード元のURLが書いてあると聞いたけれど、オフにしているからか書かれていない。ファイル名でイメージ検索してみても出てこない。あとはファイルの最終更新日時だけ。

でも Google Web History を使っていたらこれで十分だった。更新日時は 5/19 16:53 なので、それより前に見たウェブサイトがわかればそのどこかからダウンロードしてきているはず。というわけで履歴を探すと簡単に見つけることができた。

4:54pmにPopflyを検索してWIREDのCompilerというところに書かれていた Microsoft PopFly Looks Like Yahoo Pipes On The Xbox を見て、バナーが気に入ってダウンロードしたんだった。

というわけで、データが全部残っていると意外なところで役に立ったりします。

散財.com

うおー 散財.com すげー!!
おととし支出の管理のために携帯で家計簿(支出だけしか管理しないけど)をつけていたとき、GNUplotでグラフを作ってみたらうれしくなって、グラフを眺めるだけで支出を数字として管理することはなかったものの3,4ヶ月つけていて、携帯で入力できると意外と続くと思った。
一時期これでもりあがって costcentre.net っていうドメインまでとった(今見たら入金だけしてとってなかった….)けど放置してて、はてなグラフのリリースに、やっぱグラフだよ!と思ったりしたこともあった。

これみんなすっごい時間かけてどこでいくらで何買ったか書いてるじゃん。すげー。個人的には地図にしてほしい。新宿区はカネの集まる街だ!とか見たい。あーいいなー。年収をいれさせるところとかツボだ。
おさいふケータイと完全連動とかなら便利だけど、完全手動だとつづくかなー。
APIがほしい。いろいろグラフを作って遊びたい。
オートジェネレートでてきとうな家計簿を流し込んだりしても自分としては楽しい。(そのうち誰かに怒られそう)

すっかりうれしくなっておそくなった….
ステータスにしてたO氏、ありがとう。

geko201 トラックデータを google maps に落とす

先日横浜に行った時、ずっと以前に買ったまま(たぶん地図ナイトの後な気がする)使っていなかったgeko201を持っていってトラックログをとった。
ので、それを google maps にGPolylineでレンダリングしてみた。safariとfirefox1.5で確認。AdSense対策で消しました。

データ自体は1秒間隔でとっていたけれど、それだとあまりにポイントが多すぎるので1分ごとに間引いて処理。デフォルトだと10秒間隔だけれど徒歩ならばそれで十分な精度が出せると思われる。実際歩いたコースを知っていないとわからないけれど、屋根があるところに入ると不正確なデータが取れているようで、ところどころ軌跡が大きく飛ぶのはその影響。正しくないならばいっそのこととれない方がいい。
geko201から吸い出したデータのフォーマットをよく見ていないのでわからないけれど、測位精度も一緒に入っているのなら精度が低い時は捨てるとかするときれいに出せるかも。

そのへんはまた後日レンダリングする機会があったら。