negipo@twitter
そういえば宣伝忘れてた。twitterアカウント持ってます。
negipo@twitter
どうでもいい1行つぶやきんぐはこっちにupして行くのでfriend登録よろしく。ていうか使おうよtwitter面白いよ。
TipsとしてはSign upした後、Settings->Phone&IMでGoogle Talkを登録しておくとGmailのページから更新できるので楽ちんです。さすがに専用クライアントを入れるのはヘビーすぎる感じ。
« 2007年04月 | メイン | 2007年06月 »
そういえば宣伝忘れてた。twitterアカウント持ってます。
negipo@twitter
どうでもいい1行つぶやきんぐはこっちにupして行くのでfriend登録よろしく。ていうか使おうよtwitter面白いよ。
TipsとしてはSign upした後、Settings->Phone&IMでGoogle Talkを登録しておくとGmailのページから更新できるので楽ちんです。さすがに専用クライアントを入れるのはヘビーすぎる感じ。
暇だったらから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);
(追記)
ごめん仕様書ちゃんと読んでなかった。
本家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);
(さらに追記)
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;}
と言う訳で可視化したよ!
negipoから2stepsまでのfriendsをeXpandaで可視化しました。ラベルの大きさはノードの次数になってます。amachangとHamachiya2でかすぎワロタ。
これまでのみちのり
Twitterを可視化するアプリ作ろう!
↓
Net::Twitter書き換えた。ぼくてんさい!
↓
Twitter API結構遅いやん。。でもめげずに実装!
↓
eXpandaめちゃんこ遅いやん。。
↓
アプリ諦め
↓
Cytoscapeで座標だけ取ってeXpandaに突っ込む。
↓
もう凝った可視化する気力neee..←いまここ
(追記)
そういや考察してなかった。
座標計算のCircularアルゴリズムは連結度の高いノードを近くに配置するので、Hamachiya2とamachangを同時にAddしているユーザは非常に多い。miyagawaとdankogaiも同様である。これはamachang達が主にネット関連の言語ギークで、miyagawaとdankogaiがPerl mongerであることに起因するのではないか。中央の円上に配置されているユーザは上記4人のいずれかのうち2人以上のfriendsなので、僕と同様ネットで遊びまくってるnerdsな可能性が高い。
そんじゃ泳ぎに行って来ます。
ひとことあそび
デザインパターンとかで有名な結城さん作成のtwitterクローンと言うか何と言うか、現状はlivedoorとはてなのIDが使える単なるチャットだが、段々リッチにしていく予定だとか。どうなるんだろう。
で、アプリの内容はともかく、僕が今回思ったのはtwitterによる情報の伝達速度ってすげーって言うことだ。今の世の中、エンジニアならばリスペクトしてるプログラマのブログの一つや二つぐらいはRSSリーダに登録しているだろうし、ソーシャルブックマークやら何やらで○さんがこんな面白いことやってるよ的な情報を取得することに、遅れは最大1日程度しかない。
だけどtwitterは、更に早い。
twitterは言わば世界中に繋がっているチャットソフトで、誰かがブログにエントリーを上げてtwitterに書き込んだ瞬間に、friends, followers全員にその内容が伝わる。僕がvia Adiumにhyukiの書き込みを読んで、"ひとことあそび"にアクセスしたのは結城さんがそれを宣伝した30秒後だ。
これってマジにすごいことだと思う。
以上、もう多分誰かが言ってる事だろうけど、twitter初めて1週間の身には衝撃だったのでエントリーにしてみました。
30分ほどレトリックを駆使して説得したにも関わらず全く翻意する様相が無い。
先日のタモリカレーイベントに行った社内の人がいたので最高のカレー日和。

まあカレーとかどうでもよくて要は酒です。今日はうちの社の新年度パーティで、社にソムリエを呼んであーだこーだやってました。カリフォルニアの白うめぇwww 今は一番搾り片手にコーディングしてたんだけど危険を感じたのでblog書いて帰ります:D
今年もこの季節がやって参りました。このpolog、トリンプ関連のトピックに関しては 毎回 逃す事無く エントリー 書いてます。なぜって?男だからさ!
さて今年はブラと言うよりはブラ+ボトムのコーディネート。
例年にも増してメッセージ性とその性能が破壊力抜群です。さしあたってどう考えても投票率を上げる以外の選択肢が浮かばないこのデザイン、なんせ投票すればするほどアレがそれです。不特定多数のユーザ満足度を上げると共に企業としての利益、また公益すらも遵守する。まさにトリンプはこのプレイヤー多きビジネスソサエティにおけるベストカンパニーと言えるでしょう。
(via GIZMODO Japan)
きょうじん君作ったよー。
pologの狂人日記を形態素でばらしてマルコフにし、そこから自動で短文を再構築してtwitterに投稿するbotを書きました。
記念すべき初の発言:
「イイ?と言うのです。」
きょうじんくんかわいい!
(追記)
昨日眠かったので適当すぎるw もうちょい詳しく書きます。
狂人日記から本文を抜き出した後、Mecabで形態素解析して、さらに文脈をテーブルで表現するために確率付きマルコフモデルに落とします。この場合各状態は単語になって、ある単語の次にどの単語が来るかが全て確率付きの状態遷移で表現できる。で、さらに文を開始する単語のセットを持つ。
以上で準備は終わり。Data::Dumperでダンプしておく。
あとは最初の単語群からから始まって句点で終わるようにマルコフを辿るコードを書いて、帰ってきたやつをNet::Twitterでupdateさせて終わり。
そんで30分に一度cronさせてましたが、意外とuzいので1時間に1回にします。
AM2:00からAM7:00ぐらいは寝かしといたほうが良いかな?
誰も書いてないみたいなので書いてみた
<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>
(追記)
それにしてもColdfusionの構造体やらリストやらアレイやらに値を代入するあたりの予約語や構文やらはうんこすぎる。今日アプリケーションサーバ全部に対する設定を記述する構造体を書かなきゃいけなかったんだけど、Coldfusionに合わせてロジックツリー書いて代入するのが面倒臭過ぎて全部単にcfsetするものをPerlで書いてコピペした。24inchのディスプレイが文字で埋まってちょっと溜飲が下がったよ。
http://twitter.com/yumeno
狂人日記の代わりに青空文庫の"少女地獄"を学習セットにしたもの。実は3日ぐらい前からcronは動いてたんだけどtwitterが重過ぎてユーザ登録できなかったぽ。
設定がちょっと長文派で、意味不明な恐怖感はきょうじんくんの比じゃないっす。
最近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化でもしておいて、バシバシ購入、正しい精神状態とやらをキープイットアップしておきたいなと思う。
先日サービスにアクセス解析を付けることになり、リファラの集合を束ねて欲しいと言われた。つまり、あらゆるURLから同じblogのものであるとか、同じニュースサイトであるとかをグルーピングして欲しいと言う事だ。これって結構ややこしい。
イメージ的には
http://polog.org/0.php
http://polog.org/1.php
http://polog.org/2.php
http://polog.org/index.php
http://polog.org/archives/cat1/
http://polog.org/archives/2007/02/
てな訳で僕のアイデアとしては、まっとうな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";
}
% perl hoge.pl http://blog.goo.ne.jp/hachitori/e/6cef002082f319664aa186b391a8dd51
sablog 18, hachitori, http://blog.goo.ne.jp/hachitori
風邪で朦朧としているので乱文失礼。
(追記)
title足した。
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;
}
perl hoge.pl http://www.asahi.com/national/list.html > hoge.txt
これまじですごく使い易い。覚えておくべき。
# 朝日の記事は後々何かに使う。
こんにちは、コーディングも料理もできる主夫を目指すねぎぽです。今日は天気がいいのでクラシックの演奏会に行く前に公園でランチ。

この情けない顔がイイ。