« 2007年04月 | メイン | 2007年06月 »

2007年05月 アーカイブ

2007年05月01日

negipo@twitter

そういえば宣伝忘れてた。twitterアカウント持ってます。
negipo@twitter
どうでもいい1行つぶやきんぐはこっちにupして行くのでfriend登録よろしく。ていうか使おうよtwitter面白いよ。

TipsとしてはSign upした後、Settings->Phone&IMでGoogle Talkを登録しておくとGmailのページから更新できるので楽ちんです。さすがに専用クライアントを入れるのはヘビーすぎる感じ。

2007年05月04日

Net::Twitterで任意の人物のfriendsを取得

暇だったらからtwitterの可視化でもしようと思ってid/screen_nameからfriendsとfollowers取得出来るようにNet::Twitter書き換えた


56,57c56,58
< my ( $self ) = @_;
< my $req = $self->{ua}->post($self->{apiurl} . "/followers.json");
---
> my ( $self , $id ) = @_;
> my $p = ( defined $id ) ? "?id=$id" : "";
> my $req = $self->{ua}->post($self->{apiurl} . "/followers.json" . $p);
63,64c64,66
< my ( $self ) = @_;
< my $req = $self->{ua}->post($self->{apiurl} . "/friends.json");
---
> my ( $self, $id ) = @_;
> my $p = ( defined $id ) ? "?id=$id" : "";
> my $req = $self->{ua}->post($self->{apiurl} . "/friends.json" . $p);

んだけどどうも動かないんだよね。試しに友達のIDでやってみたら取得できたんだが、その後どんな値を引数に入れても返り値が変わらない。自分のfriendsも取得できない。キャッシュされてる?
ていうわけで進展したら報告します。てかちょっとだれかデバッグしてくれ。

(追記)
ごめん仕様書ちゃんと読んでなかった。
本家API仕様書

Parameters:
id. Optional. The ID or screen name of the user for whom to request a list of friends. Ex: http://twitter.com/statuses/friends/12345.json or http://twitter.com/statuses/friends/bob.rss

と言う訳で最終的なパッチはこれ。


63,64c63,65
< my ( $self ) = @_;
< my $req = $self->{ua}->post($self->{apiurl} . "/friends.json");
---
> my ( $self, $id ) = @_;
> my $path = ( defined $id ) ? "/friends/$id.json" : "/friends.json";
> my $req = $self->{ua}->post($self->{apiurl} . $path);

どうやら任意の人物のデータを取得出来るのはfriendsだけみたい。隠れパラメータあるのかもだけど指定の仕方が分からん。

(さらに追記)
show(あるユーザのステータス取得)してくれるモジュール無かったんで書き足したよ。


sub show {
my ( $self, $id ) = @_;
return if not defined $id;
my $req = $self->{ua}->post("http://twitter.com/users/show/$id.json");
return ($req->is_success) ? JSON::Any->jsonToObj($req->content) : undef;

}


適当な所にいれておいてちょ。

twitterで広がる友達の輪!

と言う訳で可視化したよ!

negipoから2stepsまでのfriendsをeXpandaで可視化しました。ラベルの大きさはノードの次数になってます。amachangHamachiya2でかすぎワロタ。

これまでのみちのり
Twitterを可視化するアプリ作ろう!

Net::Twitter書き換えた。ぼくてんさい!

Twitter API結構遅いやん。。でもめげずに実装!

eXpandaめちゃんこ遅いやん。。

アプリ諦め

Cytoscapeで座標だけ取ってeXpandaに突っ込む。

もう凝った可視化する気力neee..←いまここ

(追記)
そういや考察してなかった。
座標計算のCircularアルゴリズムは連結度の高いノードを近くに配置するので、Hamachiya2とamachangを同時にAddしているユーザは非常に多い。miyagawaとdankogaiも同様である。これはamachang達が主にネット関連の言語ギークで、miyagawaとdankogaiがPerl mongerであることに起因するのではないか。中央の円上に配置されているユーザは上記4人のいずれかのうち2人以上のfriendsなので、僕と同様ネットで遊びまくってるnerdsな可能性が高い。

そんじゃ泳ぎに行って来ます。

2007年05月07日

"ひとことあそび"に見るtwitterの情報伝達

ひとことあそび
デザインパターンとかで有名な結城さん作成のtwitterクローンと言うか何と言うか、現状はlivedoorとはてなのIDが使える単なるチャットだが、段々リッチにしていく予定だとか。どうなるんだろう。


で、アプリの内容はともかく、僕が今回思ったのはtwitterによる情報の伝達速度ってすげーって言うことだ。今の世の中、エンジニアならばリスペクトしてるプログラマのブログの一つや二つぐらいはRSSリーダに登録しているだろうし、ソーシャルブックマークやら何やらで○さんがこんな面白いことやってるよ的な情報を取得することに、遅れは最大1日程度しかない。
だけどtwitterは、更に早い。
twitterは言わば世界中に繋がっているチャットソフトで、誰かがブログにエントリーを上げてtwitterに書き込んだ瞬間に、friends, followers全員にその内容が伝わる。僕がvia Adiumにhyukiの書き込みを読んで、"ひとことあそび"にアクセスしたのは結城さんがそれを宣伝した30秒後だ。
これってマジにすごいことだと思う。

以上、もう多分誰かが言ってる事だろうけど、twitter初めて1週間の身には衝撃だったのでエントリーにしてみました。

彼女がモロッコへ行って性転換すると言うので

30分ほどレトリックを駆使して説得したにも関わらず全く翻意する様相が無い。

続きを読む "彼女がモロッコへ行って性転換すると言うので" »

2007年05月09日

カレー部

先日のタモリカレーイベントに行った社内の人がいたので最高のカレー日和。

まあカレーとかどうでもよくて要は酒です。今日はうちの社の新年度パーティで、社にソムリエを呼んであーだこーだやってました。カリフォルニアの白うめぇwww 今は一番搾り片手にコーディングしてたんだけど危険を感じたのでblog書いて帰ります:D

2007年05月10日

トリンプ新作ブラ

今年もこの季節がやって参りました。このpolog、トリンプ関連のトピックに関しては 毎回 逃す事無く エントリー 書いてます。なぜって?男だからさ!

さて今年はブラと言うよりはブラ+ボトムのコーディネート。
例年にも増してメッセージ性とその性能が破壊力抜群です。さしあたってどう考えても投票率を上げる以外の選択肢が浮かばないこのデザイン、なんせ投票すればするほどアレがそれです。不特定多数のユーザ満足度を上げると共に企業としての利益、また公益すらも遵守する。まさにトリンプはこのプレイヤー多きビジネスソサエティにおけるベストカンパニーと言えるでしょう。
(via GIZMODO Japan)

2007年05月11日

狂人日記@twitter

きょうじん君作ったよー。


http://twitter.com/kyoujin


pologの狂人日記を形態素でばらしてマルコフにし、そこから自動で短文を再構築してtwitterに投稿するbotを書きました。
記念すべき初の発言:
「イイ?と言うのです。」
きょうじんくんかわいい!

(追記)
昨日眠かったので適当すぎるw もうちょい詳しく書きます。
狂人日記から本文を抜き出した後、Mecabで形態素解析して、さらに文脈をテーブルで表現するために確率付きマルコフモデルに落とします。この場合各状態は単語になって、ある単語の次にどの単語が来るかが全て確率付きの状態遷移で表現できる。で、さらに文を開始する単語のセットを持つ。
以上で準備は終わり。Data::Dumperでダンプしておく。
あとは最初の単語群からから始まって句点で終わるようにマルコフを辿るコードを書いて、帰ってきたやつをNet::Twitterでupdateさせて終わり。
そんで30分に一度cronさせてましたが、意外とuzいので1時間に1回にします。
AM2:00からAM7:00ぐらいは寝かしといたほうが良いかな?

2007年05月16日

FizzBuzz on Coldfusion

誰も書いてないみたいなので書いてみた


<cfoutput>
<cfloop from="1" to="100" index="aI">
<cfif aI MOD 15 EQ 0>
FizzBuzz
<cfelseif aI MOD 5 EQ 0>
Buzz
<cfelseif aI MOD 3 EQ 0>
Fizz
<cfelse>
#aI#
</cfif>
</cfloop>
</cfoutput>

うーんそれにしても書き慣れん。ざっくり3分ぐらい。
と思ったら日本人でもう書いてる人がいたw 世の中広いなあ。

(追記)
それにしてもColdfusionの構造体やらリストやらアレイやらに値を代入するあたりの予約語や構文やらはうんこすぎる。今日アプリケーションサーバ全部に対する設定を記述する構造体を書かなきゃいけなかったんだけど、Coldfusionに合わせてロジックツリー書いて代入するのが面倒臭過ぎて全部単にcfsetするものをPerlで書いてコピペした。24inchのディスプレイが文字で埋まってちょっと溜飲が下がったよ。

2007年05月17日

夢野久作でバロウズカットアップ

http://twitter.com/yumeno
狂人日記の代わりに青空文庫の"少女地獄"を学習セットにしたもの。実は3日ぐらい前からcronは動いてたんだけどtwitterが重過ぎてユーザ登録できなかったぽ。
設定がちょっと長文派で、意味不明な恐怖感はきょうじんくんの比じゃないっす。


きょうじんはこちら
手法

2007年05月19日

Jazzy HipHop

最近Undergroundしか聞いてない俺ですが、良い通販サイト発見して表題のジャンルのCDを3枚購入しちまいました。
サイトトップ:zooooo.jp
oは五個。safariだとトップメニューバーが見えないので適当にカーソル動かしてみてちょ。


DJ NOZAWAのアルバムとかも良かったんだけど、一番気に入ったのはDJ Ryow a.k.a Smooth Current / Feel - Sequel To Family。多分世間的には選曲がいいだけのもの凄く普通のmix CDだと思う。
DJ Takumiのアルバムを陽介さんに貰ってから思っていたのが、この手のmix CDは月間ものすごい量が消費されていてほとんど絶対に再販されない、超生モノなんじゃないかってこと。ざっとリストを眺めてみても、超欲しい->Sold Out悲しいってな感覚を何度も味わった。折角社会人なんだしこのリストはRSS化でもしておいて、バシバシ購入、正しい精神状態とやらをキープイットアップしておきたいなと思う。

2007年05月20日

blogの各エントリーURLからauthorとblog homeのURLを決定する

先日サービスにアクセス解析を付けることになり、リファラの集合を束ねて欲しいと言われた。つまり、あらゆるURLから同じblogのものであるとか、同じニュースサイトであるとかをグルーピングして欲しいと言う事だ。これって結構ややこしい。
イメージ的には

http://polog.org/0.php
http://polog.org/1.php
http://polog.org/2.php

とかあったら、"http://polog.org/"で束ねられるじゃん、とか言われそうだが、そうも行かない。
blogにはありとあらゆる階層にページがあるので
http://polog.org/index.php
http://polog.org/archives/cat1/
http://polog.org/archives/2007/02/

URLだけではリファラ群を束ねるのが難しいのだ。voxならドメイン、fc2なら第一階層がユーザのルートディレクトリだ。

てな訳で僕のアイデアとしては、まっとうなblogサービスならrel="alternate"でrss付いてる筈なので、その中身をパースしてルートディレクトリをチェックすれば良い。authorも分かるしアクセス解析を閲覧するユーザには分かり易い。そして以降同じrssのurlを見ているページはまとめてしまえば良い。
などと言ったんだけどもう面倒くさいから第一階層(http://hoge.com/hoge/)でまとめようと言う話になってしまった。そんな。

前置きが長くなったけど以上のアイデアを実行するPerlコードを書いた。


use LWP::Simple;
use strict;
my $url = $ARGV[0];
$url =~ m%(http://[^/]+)(/.*/)?%;
my $domain = $1;
my $base = $1.$2;
my $html = get($url);
if($html =~ m%<link rel="alternate".+?type="application/(?:atom|rss)¥+xml".+?href="(.+?)".*?>%){
my $rss_url = $1;
$rss_url = ($rss_url =~ m%^http:%) ? $rss_url :
($rss_url =~ m%^/%) ? $domain. $rss_url :
$base.$rss_url;
my $rss = get($rss_url);
my $author = ($rss =~ m%<dc:creator>(.+?)</dc:creator>%) ? $1 :
($rss =~ m%<author>[^<]*?<name>(.+?)</name>[^<]*?</author>%) ? $1 :
'';
my $home = ($rss =~ m%<link>(.+?)</link>%) ? $1 :
($rss =~ m%<link rel="alternate".+?type="text/html".+?href="(.+?)".*?>%) ? $1 :
'';
my $title = ($rss =~ m%<title>(.+?)</title>%) ? $1 : '';

print "$title, $author, $home¥n";
}


alternateがあったら読みに行き、rss2,atom関係なくauthorとblogホームの情報を引っ張る。当たり前だけどxml tree作るのは面倒なのでgetして正規表現。

% perl hoge.pl http://blog.goo.ne.jp/hachitori/e/6cef002082f319664aa186b391a8dd51
sablog 18, hachitori, http://blog.goo.ne.jp/hachitori

これ書いたの20分ぐらいだと思うんだけど、現場でやらせて下さいって言っちゃったらColdfusion使って実装なんだこれが。Coldfusionでrobotて。

風邪で朦朧としているので乱文失礼。

(追記)
title足した。

2007年05月24日

Web::Scraperでasahi.comの記事一覧から記事を取得

Web::Scraper
スクレイピングとかしょっちゅうやってる気がするけど最近なかなかネタがなかったので使わず仕舞いだった。
今日ちょっと思いついた事があったので使ってみるよ。


#!/usr/bin/perl
use strict;
use URI;
use Web::Scraper;
use Data::Dumper;

my $articles = &GetArticles(shift);
print Dumper($articles);

sub GetArticles(){
my $url = shift;
my $asahi_list = scraper {
process 'ul.list>li',
'articles[]' => scraper{
process 'li>a', url => '@href';
};
result 'articles';
}->scrape(URI->new($url));
my @articles = ();
map{ push @articles, &GetArticle($_) } @{$asahi_list};
return \@articles;
}


sub GetArticle(){
my $str = shift;
my $url = 'http://www.asahi.com'.$str->{url};
my $title = $str->{title};
my $asahi_article = scraper {
process 'h1#cap', title => 'TEXT';
process 'p#date', date => 'TEXT';
process 'div.kiji', content => 'TEXT';
result qw/title date content/
}->scrape(URI->new($url));

$asahi_article->{url} = $url;

return $asahi_article;
}


記事リストのul class="list"の中のliの中のaタグから単体記事へのリンクを取得して、さらに単体記事からタイトル、更新日時、本文を取得し保存する。ul.list>liとli>aはこの組み合わせ以外だとなんかうごかず(ul.listとaとかだとだめ)。
んで実行。
perl hoge.pl http://www.asahi.com/national/list.html > hoge.txt

$VAR1 = [
{
'date' => '2007年05月24日01時09分',
'url' => 'http://www.asahi.com/national/update/0524/OSK200705230096.html',
'content' => '  スポーツ用品大手のアシックス(神戸市)は、バスケットボールシューズ「ゲルバースト アップセット」の2種類で、靴底が一部はがれる恐れがあるとして、24日から回収を始める。全国で約2万6000足を出荷し、うち約1万7000足が売られたとみられる。けがをしたなどの報告はないという。  同社によると、地面と接触する靴の裏部分の設計ミスが原因という。問い合わせは同社(0120・770・108)へ。 ',
'title' => 'バスケットシューズ欠陥 アシックス回収へ'
},
...


これまじですごく使い易い。覚えておくべき。
# 朝日の記事は後々何かに使う。

2007年05月28日

おべんと おべんと

こんにちは、コーディングも料理もできる主夫を目指すねぎぽです。今日は天気がいいのでクラシックの演奏会に行く前に公園でランチ。

この情けない顔がイイ。

続きを読む "おべんと おべんと" »

Powered by
Movable Type 3.34