classics.

2010/07/28 Wedflickr

emonsterのバッテリー追加

一年ちょい前に買ったスペアバッテリー×2がいわゆる妊娠状態になり、emonsterの電池蓋が少し壊れてしまっていることもあって不自由していたので、また2個入りのバッテリーパックを購入した。

これでemonsterのバッテリーは計5個になったし、eneloop mobile boosterやHyperMac(あまり持ち歩かないが)もあるし、ちょっと旅に出るくらいではバッテリーがなくなって困り果てることはないでしょう。新しく買った方のスペアバッテリーは、前回3.7V-1300mAhだったのにしれっと3.7V-1400mAhになってました。emobileからAndroid端末が出るのもまだ少し先になりそうだし、延命措置としてはこんな感じです。

2010/07/25 Sunflickr

MacBook AirにBoot CampでWindows 7 Home Premium入れた

のでメモ。前提としては、SSD化してあって、いわゆる第二世代のMacBook Airです。

  • こんなの出てきたのでインストールディスクから修復した
  • けどパーティションで32GBやろうとしたらまた失敗して、20GBでやったらなんかうまくいった
  • 64bit対応してるのでせっかくなので64bit版買って入れた
  • 64bitだと最低20GB必要らしい
  • IME on/offが めんどい
  • トラックパッドがクソだと思ってたらインストールディスクからトラックパッドとか諸々のドライバ入れられた
  • 容量残り8GB

2010/07/07 Wedflickr

User Streamsのreplies=allはやばい

追記(2014/11/20)

仕様変更された様子
http://oquno.com/log/eid3105.html

追記(2010/08/02)

今確認してみたら、protectedな人からのreplyは流れてこないようになってました。
追記終わり。

Twitter APIの話です。

昨晩User Streamsの修正が入って、デフォルトだとhome_timelineと同じような内容になり、オプションでパラメータを渡せば今は亡きshow all @設定と同じような内容になるかを選べるようになったかに思えました。がしかしそうでもないので今のところの挙動をまとめて、確認してないけど、replies=allをつけないとhome_timelineと同じstatusが流れてくるという前提で、replies=allをつけるとどうなるのかハイパー図解してみます。

前提


赤いのが自分で、大きめの輪に入ってるのがfollowing、外が関係ない人。わかりやすいですね。

followingからfollowしてない人へのreplyが流れてくる

show all @ オプションと同じですね。要するにfollowしてる人のstatus updateが全部流れてくると。

上図での緑の線で表されるreplyが見えるということです。

followしてない人からfollowingへのreplyが流れてくる


上図での緑の線で表されるreplyが見えるということです。ちなみに、今の仕様だと自分がfollowしてないprotected(鍵付き非公開)な人からのreplyも流れてきます。要するにfollowing全員へのreplyが全部流れてくる。
これが新仕様ですね。User Streamsで取得できるfavoritesもprotectedな人のstatus流れてきますけど。

具体的にどうなる?

例えば自分がreplies=allつけたUser Streamsクライアント使っていて、よくreplyされるような有名人(ex. @takapon_jp)なんかをfollowしてると、その人へのreplyが全部流れてきて滑稽な感じになります。また、followしてる知り合いへのreplyを監視したりするのが簡単になりますね。あとはprotectedでfollow許可してくれない人とよくreplyしてる人をfollowすればその人との会話が見えるとかそんな感じです。trackでも似たようなことはできるけど、簡単になりますね。あとはreplies=allつけて、replyしたりされたり系のbotをfollowしてるとフィルタするのがめんどいとかですかね。

2010/06/24 Thuflickr

Ruby+MongoDB+MeCabで全文検索

これに検索コマンドをつけたのでメモ。MeCabを選んだのは気分です。

User Streamsから取得する際にそのままのJSONをMongoDBに入れてたのを、MeCabかませた配列も入れるコードを追加(過去ログもバッチ処理した)。

if status['text']
    status['keywords'] = MeCab::Tagger.new("-Owakati").parse(status['text']).split(' ')
end

あとインデックスを張る

$ mongo
> use userstreams
> db.status.ensureIndex({keywords: 1})

検索する関数

def search(keyword)
    keywords = MeCab::Tagger.new("-Owakati").parse(keyword).split(' ')
    return $db['status'].find({'keywords'=>{'$all'=>keywords}},{:sort=>['id', 'descending'],:limit=>10})
end

いろいろ書いた気がしていたけどあまり書いてなかったですね。{'keywords'=>{'$all'=>keywords}} の部分がどうするのかよくわからず、はまった。あとバッチ処理が長かった。

これまでの検索用関数はこういう感じで正規表現で楽勝じゃんみたいなのにしてたけどクエリが重くて、タイムアウトエラー吐いたりしたので思い直したのでした。

def search(keyword)
    return $db['status'].find({'text'=>/#{keyword}/},{:sort=>['id', 'descending'],:limit=>10})
end

2010/06/23 Wedflickr

Ubuntuにmecab-ruby入れるメモ

$ sudo apt-get install mecab libmecab-dev
$ wget http://jaist.dl.sourceforge.net/sourceforge/mecab/mecab-ruby-0.98.tar.gz
$ tar zxvf mecab-ruby-0.98.tar.gz
$ cd mecab-ruby-0.98
$ gem build mecab-ruby.gemspec
$ sudo gem install mecab-ruby-0.97.gem

libmecab-dev 入れてなくてはまった

2010/05/20 Thuflickr

emonster+MacBook AirでBluetooth PAN

結構前にPANはできないからDUNしかないみたいなのを見た気がしてたんだけど、普通にできました。第二世代MacBook Airだからかな?DUNでやると接続解除が遅くていらいらすることがあるので、極力PANかWMWiFiRouterを使っていこうと思う。

2010/05/17 Monflickr

MacBook Air SSD化など

先日書いた通り、MacBook Airがぶっこわれて、さっさとSSDなどを取り寄せて、HDD→SSDとLeopard→Snow Leopardの移行をしました。

手順は MacBook Air(第2世代)のHDDをSSDに交換する手順(その1) | 景観デザインを目指せ を参考に、自分の場合はHDDがぶっ壊れてるのでバックアップは取らずにとりあえずHDDをSSDに付け替えて、MacBook Air SuperDriveにSnow LeopardのDVDを入れてそこからブートしてクリーンインストールです。その後RunCoreのSSDについてきたUSBドライブ化キットみたいのにHDDを入れて、MacBook Airにつないだら、そこまで壊れてはいなかったみたいで、そこそこサルベージできました。HDDはそのままだとWindowsとかにつないでも読めないっぽいので、Macからそれなりの形式でフォーマットしてやると不良セクタはあるものの一応使えるようになりました。

MacBook Air SuperDriveあるしついでにBoot CampでUbuntu 10.04でも入れようと思ったのですが、なんかうまくいかない上にUSBポートが認識しなくなったりする(PMUリセットしないと戻らない)ので、夢は途絶えました。腹いせにWindows 7でも入れたいところですが、もう資金に余裕はないので断念。

で、SDD化してみて速いのかという点ですが、ベンチマーク取ってみるとそれなりの性能のようだけど、体感としてはあまりよくわからないです。まあ合うHDDがないからSSDにしただけなんだけども。

2010/05/02 Sunflickr

emonsterにAndroid 2.1入れたりした

ゴールデンウィークなのでAndroid入れたりしてみました。Snapdragon積んでるマシンで動かすようなものなので、emonsterでまともにつかえるわけではないです。機能的にはカメラとBluetooth以外は使える感じではあるけど、WM6の倍位動作が遅いので、常用には向かないですね。

あと、Windows MobileのROMが色々あるとかいうのを知らなかったのでちょっと調べてみたりしてたら、2年近く前に公式のROMバージョンアップが出てたのを知って入れてみたのだけど、SPB Backupがどうもうまくリストアしてくれず、結局元のROMのままになった。まあさほど機能追加はされてないみたいなのでいいですかね。あとはWM6.5のROMがあるというのは気になるけど、ATOK的なものがないと日本語扱いにくいらしいので、とりあえずはAndroidで遊んだりしようかと。

2010/04/26 Monflickr

TwitterのDMのデフォルトテキストを指定する方法

TwitterでDirect Message(DM)を送るのに、「Dしました」とかいう人がいるのですが、それはDirect Message送信用のAPIがあるのにDコマンド(d {screen_name} {message})をstatuses updateのAPIに投げる残念なTwitterクライアントが多いせいだということが独自調査の結果判明しています。nudgeみたいにコマンドが効かなくなることもあり得るし、編集してコマンドを間違えてしまうこともあるのであまり賢い手段じゃないですね。

それはそれとして、Twitterではhomeのテキストエリアに入るデフォルトのテキストをGETのstatusパラメータで指定できる( 例: http://twitter.com/?status=@oquno hi )のはよく知られていることです。じゃあDirect Messages作成時のテキストエリアに入るデフォルトのテキストも指定できるんじゃないかと思って、できるのを先日見つけて快挙かと思ったのですが反響がほぼなかったのでブログに書いておきます。

簡単に書くと、Direct Messages 送信用の URLが http://twitter.com/direct_messages/create/{screen_name} なので、例えば@oqunoにhelloと送りたい場合は、GETのtextパラメータを足して http://twitter.com/direct_messages/create/oquno?text=hello とやると、
how to set default text for direct messages
こんなかんじになってあとは送信するだけ状態にできます。イベントの参加確認とかに使うといいんじゃないですかね。自分は使わないと思うけど。

2010/04/23 Friflickr

User Streams+jabber botでTwitterのIMを復活させた

Streaming APIを使うコードをRubyで見つけたのでそのままRubyで書いたのだけど、jabber bot部分はxmpp4r-simpleとかいうのを使ってみた。アカウントはxmpp.jpとやらで適当に取得。ちなみにRuby1.9.1だとstatusがofflineになったり色々上手くいかないので、1.8-devで実行するようにした(Ubuntu)。jabberのrecieved messagesをそのままupdateのAPIに投げるのも書いた。そのうちwhoisコマンドのレスポンスも表示するようにしたりもしようかと。コードはコピペが多かったりしてきれいでもないので、万が一欲しい方がいたら応相談みたいな感じで。そのうちfollow, favoriteあたりのeventなんかも拾ってIMに投げるようにもしたいけど、ステータスのキャッシュとかAPI残り気にしたりとかめんどいですね。

思えば約3年前はIMでTwitter使いまくりで、IMが使えなくなってからは自暴自棄になり、酒に溺れた日々もありましたが、ようやく復活させることができたし、home_timelineのログをGmailにそのままバックアップすることもできるし、consoleに垂れ流しもいいけどjabberに投げるのもそこそこおすすめです。

あとIMが使えてた頃のprofile_imageを埋め込んで表示するadium pluginを改造して使おうと思ったけど、XCode(のライブラリ?)が謎過ぎて挫折した。そのうちいじれるようになりたいですね。