Hatena::ブログ(Diary)

c/fe

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はまともに動く事が全く保証されていないので、これでうっかり全件削除になることが想像できます。

省略しましたが、できるだけフェイルセーフいれましょう。


しかし…全くモチベーション上がらないコードだった…用途的に…。

2006-11-07

URL

GoogleCalendarとWindowsMobile機をSyncするらしい、試してない。

http://www.goosync.com/

IPアドレスから国(地域)を判別

http://www.hostip.info/use.html