Hatena::ブログ(Diary)

c/fe

2011-11-05

冷蔵庫買ったんですよ、400L以上の冷蔵庫ってでかいですね。

それはさておき、やっとConfig::Pitつかうようになりましたよ。こいつぁ便利ですね、Windowsだと使い物にならない気もするけど。(EDITOR環境変数的に)

#!perl
# usage 
# perl this.pl < unfollow_id_list.txt 
use Net::Twitter;
use Config::Pit;
use Data::Dumper;
use feature say;

# config
my $config = pit_get("twitter.com_oauth_uzulla" , require => {
    "consumer_key" => "req", 
    "consumer_secret" => "req", 
    "ACCESS_TOKEN" => "req", 
    "ACCESS_TOKEN_SECRET" => "req", 
});
die 'pit_get failed.' if !%$config;
my $consumer_key    = $config->{consumer_key} or die 'consumer_key not found.';
my $consumer_secret = $config->{consumer_secret} or die 'consumer_securet not found.';
my $ACCESS_TOKEN = $config->{ACCESS_TOKEN} or die 'ACCESS_TOKEN not found.';
my $ACCESS_TOKEN_SECRET = $config->{ACCESS_TOKEN_SECRET} or die 'ACCESS_TOKEN_SECRET not found.';

#setup twitter
my $t = Net::Twitter->new(
      traits   => [qw/OAuth API::REST/],
      consumer_key        => $consumer_key,
      consumer_secret     => $consumer_secret,
      access_token        => $ACCESS_TOKEN,
      access_token_secret => $ACCESS_TOKEN_SECRET,
  );

#do
while(<>){
	$id = $_;
	say $id;
	my $res ;
	eval { $res = $t->destroy_friend($id) };
	warn "$@\n" if $@;
}

なんかNet::Twitter::Liteでdestoroy_friendがうまくうごかなかったんですよね。

Net::Twitterいれたらうごいたんですけど。

でもNet::Twitterも何回かやってたらうごいてないような見え方したし。

TwitterのAPIは、特にフォローアンフォロー周りでよくわからない挙動するので(特に遅延)イヤですねえ…。


--

あと、Date::Parseを初めてしりましたね。

use Date::Parse;
use DateTime;
my $created_at_time = str2time('Thu Dec 09 11:59:52 +0000 2010'); 
$dt = DateTime->from_epoch(epoch => $created_at_time);
say $dt->ymd('/'); # -> 2010/12/09

PHPではstrtotimeってすごい便利な関数(大抵の時刻フォーマットテキストを、UNIX秒にもどしてくれる)があるんですけど、まさにそれですね。

いやこれ本当にないとぼくは目から血が噴き出して死ぬんですが、やっとみつけたわー。

きっとDateTime周りにあるんだろう…いつかは見つかるだろう…と思いつつ、いつも頑張ってパースしてたんですけど、そんなところじゃなかったんですねえ…。

2011-10-31

Hachioji.pm #10開催しましたね。

厚顔にも、YAPCで皆さんに宣伝してもらった効果すごいな!#10は16人中、新顔6人に参加いただきました。


https://plus.google.com/photos/114651309588721895816/albums/5669355651295732737

#10について、私の悪筆を尽くす事もできますが、この楽しげな風景で全てが物語られていますね(手抜き)。


詳しいレポートはその内 http://hachiojipm.org にまとまることでしょう…(さらなる手抜き)。

(「レポをつくるのだ、作らないと俺が血を吐いて死ぬ!」などといった、脅しにもとれる酷い要求をしたところ、今回は皆様に一層書いて頂けました、主催は涙が止まりません。)


いやとても楽しかった!皆さん++!有り難うございました!


ーー

次回Hachioji.pm #11 @Machidaはすごい多くて、現在で21人ですよ、もう今後Machidaでやればいーんじゃねーの?!

http://atnd.org/events/20693


そうそう

元々八王子地元のエンジニアを!っておもってたんですけど、キイロさん(@yellow844)が八王子で、これでついに八王子4人目ですよ!(あれ?5人目?)

やっぱりいるじゃないか、八王子にも。だれだ八王子なんかにはいないと言っていた人は!

2011-10-25

今日もPerl、Net::FTPでサーバー内のファイルを全部リスト出力する

仕事で大量にあるサーバーの中身をクロールしてファイル数などを勘定する必要があったので。


正直Getopt::Longのちゃんとした使いかたがわかってない。無駄な使われ方もいい所。

@tomitaさんのCPAN本の書き方だとなぜかエラーになったなー…。


#!perl

# perl c.pl --h='great.website.com' --u='famous_username' --p='super_strong_pass' --b='/htdocs' > file.list


use Net::FTP;
use warnings;
use strict;
use feature 'say';
use Getopt::Long;
use Data::Dumper;

my $opt = {
	h=>'localhost',
	u=>'web',
	p=>'pass',
	d=>'/htdocs',
};
GetOptions($opt, qw/h=s u=s p=s b=s/) or exit 1 ;

my $HOSTNAME = $opt->{h};
my $USERNAME = $opt->{u};
my $PASSWORD = $opt->{p};
my $BASE_DIR = $opt->{b};

my $ftp = Net::FTP->new($HOSTNAME, Debug => 0)
      or die "Cannot connect: $@";

$ftp->login($USERNAME, $PASSWORD) or warn("Login Error!\n");
listing($ftp, $BASE_DIR);
$ftp->quit;


sub listing{
	my ($ftp, $dirname) = @_;
	
	say $dirname ."/" ;
    $ftp->cwd($dirname);
    my @dir = $ftp->dir;

    my @file_names = grep /^\-/, @dir;
    my @file_names_full = @file_names[2..$#file_names];
    my @file_names_short = map { (split)[8]  } @file_names_full;

    foreach(@file_names_short){
		say " " x length($dirname), "+". $_;
    }

	my @dir_names = grep /^d/, @dir;
	my @dir_names_full = @dir_names[2..$#dir_names]; 
	my @dir_names_short = map { (split)[8]  } @dir_names_full;
	foreach(@dir_names_short){
		listing($ftp, $dirname."/".$_);
	}
    $ftp->cwd($dirname);
}

あれだよね、やっぱ @list = grep /^d/ @fromlist; とか say " " x $num ; っていいよね。phpでコレ書くのforで回すのかよって感じになるし。

まあ、こういうの使わないほうが、他人に渡す時(5年後の自分含む)読めるんだけどさ…

2010-10-18

YAPC::Asia Tokyo 2010 いてきた

木金土と奥さん放置してたので、もらったタダ券を使いに、夕方から先ほどまでTDLに行ってました。キャプテンEO!

f:id:uzulla:20101017181659j:image

EOみた帰りすがら、なんかカップルに写真を撮影してくれと頼まれまして(多分俺が一眼下げてたから、頼みやすかったのだと)、ものすごく久々に小さいコンデジ渡されて、ちょうど裏で電飾パレードが開催されている都合上、街灯が全部落とされており、カメラのスイッチは全く見えず設定ができません。さらに順光の光源が一切無いとかいうシチュエーションで、ライトアップされたシンデレラ城をバックに他人の思い出写真を撮るとかすばらしくプレッシャーのかかる事をやったりしました。スローシンクロはどこだ!

後であのカップルに「なんかあの人三回も取り直ししたくせに、ロクな写真とってくれなかったね。下げてた一眼は飾りだったのかな…」とかいわれてるんじゃないかとおもうとホントにきぇぇぇぇぇってなりますね。

まあそんなのはどうでもいいですね。


YAPCの感想をBlogでかこうっておもったんですが、もうちらほら皆さんBlogに上げてまして。まあとてもすばらしい感想なのですよ。

なので、もう書かなくていいんじゃねえの?って思いつつも、やはりYAPCに感謝の意味も込めてポストする事にしました。

なのでYAPCに行った人はこのポストは読まなくていいですし、はてブとかで他のポスト読んだほうがいいですね。

ただ、YAPCに行ったことない人はちょっと読んでみてもいいかもしれません。


YAPC初参加

実はYAPCはいままで未参加だったのです。

今年こそは参加してみようかなーと思っていた所、今回のLTにおいて、コボル×Perlという衝撃発表をおこなったminemaz氏(協賛企業のランカードコム社 社長さん)にチケットを頂いてしまいました。

自腹を切ってこそ!と思いもしたのですが、私も金持ちではないので自腹は次以降にとっておきます、リアル自腹は余っているのにね!(チャリティーTシャツは買っておきましたよ!)。


そんな折、久々にIRCにログインしたところ、突然IDコールをyusukebeより頂き、「LTやらないか?」の一言で前夜祭でLTをやらせてもらいました。

LTなどまったく初めてだったのですが、見よう見まねでスライドを書き、とにかくKYなLTをなんだかんだで楽しくやらせて頂きました。

後述もしますが、「ヒネリが少ない」などと苦言もいただき、今後は頑張りたいですね。

f:id:uzulla:20101014200638j:image

(yusukebe氏)

前夜祭の発表資料やらサンプルやらはこちらです

http://s.cfe.jp/yapc/


この開放的な空間

話をもどしますか。

f:id:uzulla:20101015154842j:image

見てください、どうですこの開放的な雰囲気。

これはメインの会場の入り口前ですね、寝っ転がっている人までいますよ。

こんなカンファレンスを見たことがありますか?私はありませんでしたね。

いくらPerl野郎どもが自由すぎて色々な界隈から恐れられていても、ここでは平和なのですよ。

実際、うっかりPHPの名前を出しても四方八方から串刺しにされる、という事はありませんでしたし、

はてなおや 改め ぐりなおや さんの発表に、天誅!と刃物を持った男が飛び込んだりもありませんでした。


冗談はさておき、一日中発表はつづきますが、勝手に一休みしてキャンパス内のベンチでご飯食べたりとか、実に楽しいです。

昼下がり、ベンチで食事をしながら、本当に、本当に、ああ、こんな日が続けば良いのに!と願いました。

永遠は無理ですが、これは2日間続くのです。


二日(三日)ある事の意義

所で、私はすごい引っ込み思案というか、まあ色々あって人に声をかけるのが苦手なんですね。

知らない人ばかりのイベントだと、まず十中八九飲み会ではぼっちになってますね。

いろんなイベント勉強会はありますけど、1日、というか数時間だけだとやっぱむずかしいんですね。1〜2人とお知り合いになるのがせいぜいです。

しかも、次回のイベントではまた声かけられないとかね、ホント俺は何なんだ。


しかしYAPCは2日間!前夜祭入れると3日間ですよ!なんだかんだで懇親会も連日あるわけで、それだけ顔をあわせていれば何人かとお話ができる!

三日目にもなればぼっちの時間はほとんどありませんでしたね。最高だ!

f:id:uzulla:20101016215333j:image

これは本当にすばらしい事ですね。

微妙な世間話しか出来ない微妙な距離関係から、ググっと入り込んで、たとえばGearmanやSchwartzの話、Perlから離れてnginxの話や、CSSの話しをしたりできるわけですよ、すばらしいすぎますね。


YAPCの価値

YAPCはYet Another Perl Conferenceという正式名称から分かる通り、カンファレンスです。しかも全世界的な。

カンファレンスを辞書でひくと「会議。協議。」とあり、なんか難しそうです。

YAPCのページを見ると、色々な発表があり、LTがあるとはいえ、まじめな勉強会に見えるかも知れません。


勿論それは私が見た限り大きな側面でした。

f:id:uzulla:20101015172215j:image

(注:makiさんが殴っているシーンではありません)

第一線で活躍している人から生の情報がゲットできる、質問もできる(まあ、発表後の質問は、日本らしく活発ではないですが…)。

ただ、ここまでインターネットが発達して、情報を入手しやすくなると、20分の発表を見る事にどれだけの意味があるでしょうか。二日潰して、お金を出す価値があるのでしょうか?


結論からいえば、YAPCにはその価値があります。

やっぱり発表はすばらしい、ただ、さらに発表の外がすばらしい。


勉強だけではない何かが

今回私は初参戦でありましたが、寝坊をしたり、なんだかんだで発表を熱心に見る人間ではありませんでした。

「…この発表よりあっちにいけばよかったかな…」等と思った瞬間もありました。

しかし、それを責められる事もなく、そしてベッドに入る時に後悔する事もありませんでした。


ま、これは私の感想ではありますが、YAPCは文化祭的な側面があるのだなーと、あの楽しい文化祭をもう一度!


技術者と技術者、技術で共感したい!

最後miyagawaさんのスピーチで、すごく強調されていた事だとおもいますが、とにかく人と人がつながっていく事はすばらしい事です。

さらに、それが技術者と技術者であれば、すばらしいに加えて、楽しい事だと思います。


私は小さい会社を掛け持ちしたりフリーランスやってたりと、ワンマンアーミーみたいな生き方をしていて、ほぼ「同僚」という物がいません。

「同僚」とは結構ビジネスライクな存在で、私が人生のかなりを注ぎ込んでいる「技術」について語り合ったり、教えあったりする人はいません。


多分、多くの人は会社の同僚と交流をしつつエンジニアをやっているとおもいますが、それはすごくすばらしい事です。

(そして、私にはものすごく、ものすごくうらやましい。会場にはLDやDena、Hatenaの人などが同僚と一緒にきていたりして、ホントにうらやましい!)

しかし、それが出来ない人だっているわけです。

そういう人は技術がだんだん生活の為の道具にしか見えなくなる瞬間があります。

下手すると「いい技術は儲かる技術」と短絡的に考えたりします。というか、私はかなりそんな感じです。


もしかすると、私みたいな立場の人間もいるかも知れません。

まったく同じという事はなくても、同僚以外のもうちょっと上の人と話してみたいとか、あるかも知れません。

そういう人は是非YAPCに来るべきだと思います。


まあオチてませんけど

とにかく言いたいことは、YAPC::Asia Tokyo 2011で会いましょう!


ロスタイム1) LTの感想とか

前夜祭LTやったんですけど、まあ感想ゼロなのですよ。

yusukebeに酔っぱらいながらどうだったんだ!俺は!ってウザーく食い下がったら「ヒネリがない」って言われまして、これがすごくうれしかった位ですよ。

皆感想ってどうやってもらってんの?って聴いてみたのですが、たいして感想はもらってないよ!と言われました。

それって寂しくないのか?


実は、そういう事はずっと考えていて(LT限定とかではなく)、現実世界の1対Nのコミュニケーションにおいて、なんかできないかナーっていうのはもうちょっと考えたいナーって思ってます。


ロスタイム2) アーカイブ

発表はどれもこれもすばらしい感じでした。

そして私は寝坊したおかげで二日間の午前中全く見れなかったりしました。

飯食ってて見れない発表もありました。


今も、そして今後も続々と当日の発表資料は公開されていっていますが、探すのがちょーめんどいです。

はてブでyapcタグとかをあさるのが良いとおもいますが、なんかもったいないなー。


いろんな勉強会とか、まあそういった物の多くも同様に、情報がその場でしか存在できないのはもったいないと思っています。

これもどうにかできないカナーっておもったりしていたりします。


ロスタイム3) Hachioji.pm? Takao.mt?

地方のPM(Perl Mongerのあつまり)の話しがLTされてたんですが、すごくいいな!と思いました。いいね!ボタンがあれば0.1秒で押す勢いです。

特に岡山.pmの人に失礼ながら勇気をいただき、東京の西部でもpmできないかな!とおもった訳です。


私は八王子に住んでいるのですが、都内(八王子の人は、23区を都内と呼びます、都内なのに)の会合に行くのは結構大変なんですよね。帰りは終電で、家に着くのは2時前ですよ!もっとさらっと集まって交流したい!

ということで西の方でなんかできないかなーって言ったらmakamakaさんがひっかかりました!


さあ、後5人くらい集めればなんとかなるぞ、是非八王子とか高尾とか国立とか、東の限度は三鷹位でエンジニアの方いらっしゃいましたらご連絡下さい!

立川の方も(八王子住民的に敵対関係ですが)勿論歓迎します!

ちなみに、Perlにかぎらずとも、と思っております。

2010-01-08

TwitterのストリーミングAPIをPerlでガンガンよんだりよまなかったり

TwitterのストリーミングAPIが公開されましたね。

http://apiwiki.twitter.com/Streaming-API-Documentation


curl http://stream.twitter.com/1/statuses/sample.json -uuzulla:PASSWORD

とかするとガンガン流れるのが見れて面白い訳ですよ。


で、こうやって流れてるのを見ると、実際どれくらいの流量があるのかリアルタイムに知りたいじゃないですか?

ってことで、てきとーにPerlで書いてみた(OSX LeopardのPerlでテスト)。

#!/usr/bin/perl
$|=1;
use strict;
use threads; 
use threads::shared;
use Socket;
use MIME::Base64;

# http://stream.twitter.com/1/statuses/sample.json
my $host = 'stream.twitter.com';
my $port = getservbyname('http', 'tcp');
my $iaddr = inet_aton($host) or die "$host:$port host not found\n" ;
my $path = '/1/statuses/sample.json';
my $user_id = 'uzulla';
my $password = 'PASSWORD';

my $data :shared = '';
my $thread = threads->new(\&dumpflow, "");
readflow( $host, $port, $iaddr,$path, $user_id, $password);

1;

sub readflow {
  my ($host, $port, $iaddr,$path , $user_id, $password) = @_;

  my $sock_addr = pack_sockaddr_in($port, $iaddr);
  socket(SOCKET, PF_INET, SOCK_STREAM, 0) or die "socket error\n";
  connect(SOCKET, $sock_addr) or die "$host:$port connection error\n";
  select(SOCKET); $|=1; select(STDOUT);

  print SOCKET "GET ".$path." HTTP/1.0\r\n";
  print SOCKET "Authorization: Basic\r\n ";
  print SOCKET encode_base64("${user_id}:${password}")."\r\n";
  print SOCKET "\r\n";

  while (<SOCKET>){
      {
        lock($data);
        $data .= $_;
      }
  }

  print 'read DONE';
}

sub dumpflow {
  my $_tmp = 0;
  for(;;){
    $_tmp = 0;
    $_tmp++ while $data =~ /\n/g;
    print $_tmp. "\n";
    {
      lock($data);
      $data = '';
    }
    threads->yield();
    sleep 1;#何秒毎に出力するか、1ならX Posts/sec、10ならX Posts/10sec。
  }
}


うごかすよ!

MONO:twitterflowmeter uzulla$ /usr/bin/perl ./engine.pl 
14
20
21
19
16
16
23
15
22
19
20
16
21
…

うん、オチをいうとね、どうも20Post/sec以上は出してくれないみたいなんだ、ぎゃふん。

つーか、3秒も考えればそんなの提供されるわけねーってわかるわなwwwTwitterなんてどんだけトラフィックながれてんだって話だよねwアホやw。

でも、もうちょっとリニアに変わってくれるとおもってたんだ…。

本当はこれとFlashのクライアントを連携して、適当Twitterスピードメーターとかつくってみたかったんよおっちゃん…。



超久々にPerlでスレッドとか、Basic認証を手で書いたりして、色々思い出したからヨシとします。