2011-03-04
新型MBPとWideMailの悪夢
えーと、新MBP買っちゃった!2倍速くなったとか書いてあったら買うしかないじゃん!(まあそれが最大の理由ではないが)
と、いう事で過去のMBPから移行アシスタントでスムーズに移行したんだけど、Mail.appがなぜかWide Mailプラグインを読み込んでくれないのね。同じ10.6.6なのになぁ。
しかたないのでしばらく諦めようとおもったのさ。
ただ、mail.appをよくよく見てみたら、なんかおかしい…さっぱりしてる…あっ!リストに件名カラムがない!すごい不便!
WideMailは独自のコンボ表示で、件名と差出人などを一カラムに表示できるのだけれど、件名だけはデフォルトで表示必須で、カラムヘッダーを右クリックしても消せない特殊カラムだった。
なので、WideMailがSubjectを独自に消す機能があったのだが、それが有効になったまんまっぽい。
これを戻すには、WideMailが必要なわけで…あうあうあう。
うへー、これはこまったなーとおもって公式サイトをみたら、過去SnowLeopardに上がったときに同様の問題が皆で発生したらしく、これで手動でplistいじれば回避できるよ!って記事があった。
http://widemailplugin.com/?p=29
~/Library/Preferences/com.apple.mail.plist
You must edit keys within:
Root/TableColumns/
Within each of these keys are a list of ids, the subject column id is “2″.
Inside each of the subject column ids change the value of “isVisible” to YES.
ほう、xcodeで編集しろと?なんかWindowsのレジストリいじってた頃を思い出すな…。
やってみたら再度表示された!たすかった!よかった!
2010-06-23
TwitterをMechanizeでさわる
一個だけ注意だ、WWW::Mechanizeだと動かん。WWW::Mechanize::GZipつかうんだ。
OAuthのaccess Tokenをバルクにとってくるとか、人に聞かれたら嘲笑される(用途的な意味で)系のコード書いてるんだが、どうもTwitterってGzipのヘッダー無しでGzipなContentを返してくるから注意だぜ!
(ものすごいバイナリな感じの出力がされる。出力を保存して gzip -dc < imifu して読める物がでてきたら、gzip圧縮されとる)
※以下のコードは単体では意味をなしません。BOT量産する俺みたいなクズにしか用はないと思うので、細かい解説はしない。
#!/usr/bin/env perl use utf8; use strict; use warnings; use DateTime; use WWW::Mechanize; use WWW::Mechanize::GZip; my $LOGIN_ID = 'uzulla'; my $LOGIN_PASS = 'password'; my $mc = WWW::Mechanize::GZip->new(); my $OAUTH_GW = ' ここら辺参考に>http://d.hatena.ne.jp/uzulla/20100216#p2 '; my $res = $mc->get($OAUTH_GW); $res = $mc->submit_form( form_id=>'login_form', fields => { 'session[username_or_email]' => $LOGIN_ID, 'session[password]' => $LOGIN_PASS }) or die 'login failed' ; $res = $mc->follow_link( url_regex => qr/oauth_verifier=/i ); print $res->content(); exit;
最近Twitterエラーが多すぎるので、適切にエラー処理、リトライなりを挟みましょう。
Twitterで自動フォロー削除
まあbotにはフォロー返しに伴う自動フォロー削除は必須ですよね。
#!/usr/bin/env perl use utf8; use strict; use warnings; use Array::Diff; use Data::Dumper; use Net::Twitter; my $CONSUMER_KEY='***********'; my $CONSUMER_SECRET='**************'; #$botは適当に想像してちょ my $twitter = Net::Twitter->new( traits => ['API::REST', 'OAuth'], consumer_key => $CONSUMER_KEY, consumer_secret => $CONSUMER_SECRET, ); $twitter->access_token($bot->{oauth_token}); $twitter->access_token_secret($bot->{oauth_token_secret}); die('Auth failed:'.$bot->{username}) unless ( $twitter->authorized ) ; my $cr = $twitter->verify_credentials; my $own_id = $cr->{id}; my $nextc = -1; # paging default. my @following_id_list; # outgo do{ my $following_list = $twitter->friends_ids({ id=>$own_id, cursor => $nextc }); $nextc = $following_list->{next_cursor}; foreach my $id (@{ $following_list->{ids} }){ push(@following_id_list, $id) ; } }while($nextc!=0); @following_id_list = sort @following_id_list; $nextc = -1; my @followers_id_list; # income do{ my $followers_list = $twitter->followers_ids({ id=>$own_id, cursor => $nextc }); $nextc = $followers_list->{next_cursor}; foreach my $id (@{ $followers_list->{ids} }){ push(@followers_id_list, $id) ; } }while($nextc!=0); @followers_id_list = sort @followers_id_list; my $diff = Array::Diff->diff(\@following_id_list, \@followers_id_list); foreach my $delid (@{ $diff->{deleted} }){ $twitter->destroy_friend($delid); }
これはフォロー外しされたときに報復する事しかしませんけど、
数行くわえれば自動フォローにもなります。
Twitterはまともに動く事が全く保証されていないので、これでうっかり全件削除になることが想像できます。
省略しましたが、できるだけフェイルセーフいれましょう。
