YourFileHost のエロ動画に、ニコニコ風のコメントがつけれる イクイク動画 というサイトを作って、昨晩プロト版を公開しました。もうすでにいろいろとフィードバックをもらっていますが、そのまとめは後日にして、サービスの説明とその経緯を簡単に紹介します。
イクイク動画
(18禁!)

イクイク動画は見てわかる通り、ニコニコ動画を劣化させて、取り扱う映像はエロ限定にしたようなサービスです。コメントする際にログイン等は必要ないので、誰でも即投稿できるようになっています。 また、特徴として、「シコシコボタン」を搭載しています。 動画を見て興奮してしまったら、是非この「シコシコボタン」を連打してみてください。 ゲージがたまると、「おたまじゃくし」の形をした何かが画面上に飛び出します。
イクイク動画プレイヤーの解説
さて、作ってみた経緯を簡単に。 まず、現状で叶えられているかは置いておいて、作ろうとした目的なんですが、 簡単に言うと「ネット上でエロ動画見ながら他人同士がコミュニケーションをとったらどうなるんだ」といった疑問に対する答えを知りたかったことが挙げられます。
学生の時、いや今でもありますが、男同士で集まるとよくアダルトビデオの話題になって、あの子がかわいいやら、あのビデオはいいやらと盛り上がって楽しいです。 また、おおっぴろげに言えませんが、中学性の時なんかは、みんなで友達の家にいって、エロビを一緒に見て楽しかった思い出があります。 そんなエロトークの面白さを不特定多数の人とネット上でやれたら面白いかも!というのが最初の動機です。 そこで、「動画でコミュニケーションといったらニコニコ動画だよね」、そして「エロビといったら今は YourFileHost だよね」という結論になり、YourFileHost の動画上に ニコニコ風コメントがつけれるサービスを作ろうとなった段です。なので、今回のイクイク動画はそこで性処理をすることを目的とあまりしていないというのが正直なところになります。
また、以前から「エロ動画で盛り上がるところはどこかをどうにかして知ることはできないかなー」と思っていました。そこで、動画を見ていてユーザーが興奮した場合に、何かリアクションをすることができるのならば、その場面がわかるのではないかと思いました。てなわけで、Usteam の shout 機能インスパイヤ で「シコシコボタン」が設置されることになったのです。公開してから見てみるとぶっちゃけこの目的は達成できていない、とわかるところがありますが、その辺もあとでまとめたいです。
ちなみに、実装は Flash によるコメントの表示部分や動画の読み込みなどの検証は以前から行っていて、 あとは GW 中にサイトの形になるまで作りました。 Flash のプレイヤーに関して、コメントの表示部分に判定がいくつも必要で、意外にも難しいです。 今でも、コメント同士がかぶっている現象があってしょぼいっす。ニコニコ動画のプレイヤーはほんとよくできているとわかりました。 大まかなシステムとしては、まず YourAVHost のフィード API から動画情報を取得して DB にぶち込んでおいて、個々のページに行くと Flash でできたプレイヤーが起動、その際 コメント情報や YourFileHost の FLV (Flashビデオ形式、裏APIをたたくとわかる) へのパスなどをバックエンドから受け取って表示という感じです。
実験的なサービス&まだ不具合多いですが、もしよろしければ、遊んでください。 「今会社だから見れないよー」という方も家に帰って「シコシコ」してみてプリーズ。 というわけで イクイク動画 よろしくね!
ITmedia の記事が想定以上の反響でびっくりしているわけですが、 記事を書いてくれた ユカタン こと岡田有花さんが取材してくれるまでの変態的裏経緯をまとめてみる。
2ヶ月ほど前に高校サッカー部からの友達 KC が引越しをするというので手伝った。 その時に今まで住んでいた家の床を「激落ち君」を使ってものすごく綺麗にしたんだよね。 うんで、どのくらい綺麗になったのかを自分で確認する意味も込めて、 その床をイジリー岡田ばりにぺろぺろ舐めてみた。 さらに、テンションがあがったため、そのままその様子の映像をニコニコにうpした。
そして日記に床≒ゆか(名前が「ゆか」の女性)と解釈して 「俺にぺろぺろされたい『ゆか』ちゃん募集中だよ。」と冗談で書いておいたのであった。
すると、今から1ヶ月ほど前、いきなり個人宛に ITmedia の中の人から取材依頼のメールが飛んできた。 うんで送信者の名前を見ると「岡田有花」って書いてあるじゃまいか!どっかで見たことがある名前だ。 調べてみると、どうやら有名な記者さんらしい。
岡田 有花(おかだ ゆか、1978年10月13日−)はITmedia記者である。兵庫県出身。自称としてIT戦士を良く称する。顔以外の露出が多い体当たり系の記事が得意であり、それにより人気を博している。京都大学教育学部卒業。愛称は「ユカタン」。
体当たり!キャラか、素晴らしい。 当初、「取材に来るとしても、我がオフィスは自宅+祖母の家ですよー(しょぼいよ)」と伝えたのだが、 その様子も見てみたいということで、取材に来てもらうことにした。
うは!ユカタン、これはもしかして、俺にぺろぺろされたいのか!
さらに、取材の前日、ニコニコ動画になんとその ユカタン をテーマにした初音ミクが歌うオリジナルテーマソングのビデオがうpされた。なんというタイミング!
こうして取材当日を迎え、ニコニコ動画でも大人気な ユカタン がやってきたわけだ。 掲載された ITmedia の記事についたはてブコメントに
そんなゆーすけべーに女の身一つで突撃する岡田有花さんは勇者。結婚してください。
とあるとおり、結婚したいかどうかはさておき、確かにエロギークの自宅に何も躊躇せずやってくる ユカタン の体当たり精神はすごいと思った。
で、肝心の ユカタン をぺろぺろしたかどうかについてはノーコメントとさせていただく。 ま、ネットで発信すれば、偶然かもしれないが、望みは叶うかもということと、個人的に開催されている「ユカタン」祭りについてまとめてみたという具合だ。みんなも、ゆかをぺろぺろする動画をニコニコにうpすれば ユカタン がやってくるかもよ!。
さて、ユカタン にはこれからも IT 戦士としてどんどんいろいろなところに突撃してもらいたいと思います。
- 岡田 有花 ITmedia News
- 単行本 / ソフトバンククリエイティブ
- Amazon 売り上げランキング: 23089
- Amazon おすすめ度の平均:

なんじゃこりゃ!
ネットで人生、変わってはないですけど、この本は面白いと思います。
ネットで有名になる記者の特徴とは
まるでタイムマシンのような一冊
- / レック
- Amazon 売り上げランキング: 7137
先ほどから ITmedia に 俺が代表取締役を務める「株式会社ワディット」のインタビュー記事が掲載されています。ライターは ユカタン の愛称で知られる 岡田有花 さんです。「鎌倉の自宅ではたらく、父子2人のIT企業」と題し、会社設立までの簡単な経緯、ワディットの目指すものなどが、親父のインタビューも含め「かっこよく」うまくまとめられています。さすが、ユカタン。
ちなみに、この記事へのはてブがかなりの勢いでされていて嬉しいのですが、 コメントで「父の方がすごい」的なことが結構書かれていて、父親に若干、いやかなり嫉妬しているところです。これを機に父子間で、代表取締役交代という下克上が起こるかもしれませんので、俺をよいしょするようなコメントをしていただけると助かります。
ということで、ワディットをよろしくお願いいたします。 記事、未読な方は是非読んでみてください。また、今回のような ワディット や、俺もしくは親父への取材はバンバン受けてつけていますので、そのような方は yusuke (at) kamawada.com までご連絡をください。
椎名誠さんに憧れて、山を中心に探検へ行くものの、あやうい目ばかりにあうためこう呼ばれている「あやうい探検隊」。GW ということで、そのあやうい探検隊で奥多摩にある大菩薩嶺という山を登ってきました。 第4弾企画です。 メンバーは俺、すがちゃん(隊長)、きーちゃん、そして初参加のあっつんでした。 この大菩薩嶺、標高は 2057m とそこまで高いわけではないので、「前回の奥穂高岳に比べるとちょろいもんだ」、なんて言って「舐めて」かかりました。すると案の定、あやうい目に会いました。しかも山を登りはじめる前に。
今回の行程は、28日の夕方に都内に集まり車で駐車場まで行き、そこで深夜のバーベキューをして、車中で寝る。そして、早朝から登り始め、登頂した後すぐに帰ってきて、29日中に都内へ戻ってくるというルート。
深夜バーベキューの準備をする隊員たち
(左)99年ショップクオリティでもうまい、(右)にんにく焼きがいい感じ
バーベキューは99円ショップクオリティの素材にもかかわらず、普通にうまい。 やっぱりみんなでわいわいやりながらだと楽しいもの。 が、しかし、萎える事態が発生した。
周りが暗かったからレンタカーのヘッドライトをつけていたのだけど、エンジンを回してない状態だったため、 バッテリーあがっちゃった。エンジンかけてなかった、すがの隊長、及びそれに対するツッコミをしなかった隊員の凡ミス。
駐車場には俺らの車以外見当たらないし、携帯の電波も通じないので JAF を呼ぶこともできない。 最悪の場合、登頂を中止して、助けてもらうための行動をとらなくていけない。 とはいえ、「なんとかなんべ」と楽観的にバーベキューを食べる隊員。
そんで結局どうなったかというと、よくデジカメとか PC 、携帯とかってバッテリーが無くなっても、 しばらく放置するとちょっと使えたりするという原理があるじゃん。それを利用した。 つまり、バッテリーが上がったことを確認して、ヘッドライトを消して、しばらく時間がたってからエンジンかけると、復活!やったー!あっつん++
てなわけで、「バッテリーが無くなってもしばらく放置すれば多少は動くようになるよ」メソッドはいろいろな範囲で使えることがわかった。
バーベキューを終えて車中で少し寝てから登頂開始。 大菩薩嶺への山道はそこまで急な登りもないため結構楽。 ただ、俺がものすごい眠くなって歩きながら寝だしたことと、隊員K さんが途中でう○こするなどで、やっぱり目標タイムよりかなり遅れてしまった。
登っている様子、(右)頂上付近には残雪があった
朝の7時30分に出て13時に登頂完了。その後は大菩薩峠にて昼飯食って、ダッシュでもと来た道を下山。目標タイムよりも今度は早めで16時30分に駐車場に戻ってきた。ぶっちゃけるとこの大菩薩嶺、イベントが少ないのと道が単調だったので、すんごい面白いわけではなかった。でも、大菩薩峠から大菩薩嶺への尾根を歩くところなんて見晴らしがよくって気持ちがよかった。
菩薩峠からの景色
菩薩嶺登頂をよろこぶすがの隊長
恒例の自分撮りによる記念写真を撮影、隊長が写ってない><
それにしても山を登っているとめちゃくちゃおならがでる。すかしも含めると50発くらいしたと思う。 「よく山に来て空気がおいしい」と言うけど、その空気の中には登山者のおならが含まれているに違いない。 おならがいい感じにスパイスになってからおいしく感じるのかな。 このように「山に登るとおならがたくさんでる」法則も実証できてよかった。
ということで、またおならをぶっこくため、あやうい探検隊は山に登ります。次回も楽しみです。
関連記事
- ジャン フェクサス ロミ Romi
- 単行本 / 作品社
- Amazon 売り上げランキング: 96502
- Amazon おすすめ度の平均:

だじゃれか・・・
書棚に哲学の香りを
この記事見つけて
以前紹介した「これは便利!誰でも簡単にグラフを描けるAPIがGoogleから登場!『Google Charts』」ですが、PHPから簡単に操作できるようにしたライブラリが公開されています。
Google Charts APIをPHPから簡単に操作できるようにしたライブラリ『googChart』 | IDEA*IDEA」より
同じようにGoogle Charts API を扱う Perl 版が欲しかったので、WebService::Simple(0.09以上が必須) を継承する形で「WebService::Simple::Google::Chart」というモジュールを作ってみました。
パラメータを渡すと、その Chart のURLを返してくれて(get_url)、その Chart のイメージをファイルに書き出す(render_to_file)ことができます。以下がコードサンプルです。
use WebService::Simple::Google::Chart;
my $chart = WebService::Simple::Google::Chart->new;
my $url = $chart->get_url(
{
chs => "250x100",
cht => "p3",
},
{ foo => 200, bar => 130, hoge => 70 }
);
#http://chart.apis.google.com/chart?cht=p3&chl=bar%7Cfoo%7Choge&chs=250x100&chd=t%3A33%2C50%2C18
print $url . "\n";
#一度 get_url でパラメータを渡したら、ファイル名を指定するだけで書き出せる
$chart->render_to_file("foo.png");
特徴は、get_url 及び render_to_file の第2引数に、チャートにしたいデータを ラベル名 => 値 という形のハッシュリファレンスを渡せば、自動的に割合を出してくれて URL のパラメータにする点です。 なので、最大値をみつけて、それぞれの値をその数字で割るなんてことは不要になります(なるはずです)。 第一引数はデータ以外のチャートへのパラメータを書けばOKです。
WebService::Simple は LWP::UserAgent を継承しているので、今回のファイルに書き出すという機能が簡単に実装できました。実際 Chart.pm の中身はこんな感じでファイルに保存しています。
$self->SUPER::get( $request_param , ":content_file" => $filename );
CPAN はここ(ただし、0.01 はインターフェースが違う&バグを持っているので 0.02 以上推奨)
CodeRepos はここに置いておきます。修正、突っ込み大歓迎です。
ちなみに、 Google::Chart という hanekomu さんが作っているそのものずばりのモジュールがCPANにあって coderepos にもレポジトリを移してもらいました。 が、しかし、これだとラベル表示ができなくて、対応するためにコードいじろうと手をつけてみたら、 設計までも変えてしまいかねないことに気づき、別モジュールという形で作ることにしました。ということでこれをhanekomu さんに見せたい。
Google AJAX Search API ってその名の通り JavaScript から利用することを前提に作られているんだけど、 先ほどドキュメンテーションに「Flash and other Non-Javascript Environments」という項目が追加されました。 JavaScript 以外の環境から Google AJAX Search API をこんな風に使えますよと書かれているようです。 今まで、例えば Perl から Web ページを検索する時には、Google のそれは「JS からしか使えないんでしょ」とあきらめて、Yahoo! の検索 API をよく使っていたところ、これで Google の検索結果も利用できるようになります。 JavaScript のレイヤーより一つ下くらいのところで、API が使えるとなると可能性も広がるかと思います。 ということで、早速、WebService::Simple を使って、Perl から Google AJAX Search API を使ってみたよ。
サンプルを紹介する前にこの API の仕様について軽く解説。 ベースURL は
http://ajax.googleapis.com/ajax/services/search/web
で、それに以下のようなパラメータを渡すと結果が JSON 形式で返ってくる。
q : 検索クエリー
v : API のヴァージョン、現時点でのデフォルトは 1.0
rsz : 検索結果をどのサイズで返して欲しいか、デフォルトは small の4件、large を指定すると8件
hl : 何語のウェブから検索したいか、日本語の場合だと ja
start : 検索結果を何番目から取得したいか、デフォルトは 0、おそらく最大で 24 っぽい
詳しくはここを参照→Class Reference - Google AJAX Search API - Google Code
取得できる JSON の形式はこちらを参考に→Developer's Guide - Google AJAX Search API - Google Code
では、WebService::Simple を使ったサンプルを紹介。 WebService::Simple には JSON のパーサーもあるので検索結果を Dump するだけのスクリプトだったらこんな簡単に書けちゃいます。
my $google = WebService::Simple->new(
base_url => "http://ajax.googleapis.com/ajax/services/search/web",
response_parser => "JSON",
params => { v => "1.0", rsz=> "large" }
);
my $response = $google->get( { q => "cat" , start=> 0 } );
print Dump $response->parse_response;
次に、検索クエリーを入れるとその結果が表示されるだけの簡単な Web ページを作ってみます。 パースしたコンテンツをそのまま Template::Toolkit のテンプレートに渡すという方針です。 ただ、これを実現するにはちょっとしたハックが必要になりました。 JSON のモジュールを使ってパースされたオブジェクトには utf8 フラグが立ってないっぽいんですよ。 utf8 flagged な値も、TT に渡したいので、混在しちゃうと文字化けしちゃいます(その値を uri フィルターかけたいから、フラグを落としたくないのです、なんか間違ってたらツッコミください)。 そこで、以下のハックで JSON モジュールが返してくれるオブジェクトに utf8 フラグを立ててます。
use WebService::Simple;
use WebService::Simple::Parser::JSON;
my $parser = WebService::Simple::Parser::JSON->new; # パーサーを作る
$parser->{json}->utf8(1); # utf8 フラグが立ったオブジェクトを返してもらう
my $google = WebService::Simple->new(
base_url => "http://ajax.googleapis.com/ajax/services/search/web",
response_parser => $parser, # パーサーオブジェクトを指定する
params => { v => "1.0", rsz => "large", hl => "ja" }
);
つまづいたのはこのくらい。完成版のPerl のコードと テンプレートは以下の通りです。
search.cgi
#!/usr/bin/perl
use strict;
use warnings;
use CGI;
use Template;
use WebService::Simple;
use WebService::Simple::Parser::JSON;
my $q = CGI->new;
my $query = $q->param('query');
utf8::decode($query);
my $start = $q->param('start') || 0;
my $parser = WebService::Simple::Parser::JSON->new;
$parser->{json}->utf8(1);
my $google = WebService::Simple->new(
base_url => "http://ajax.googleapis.com/ajax/services/search/web",
response_parser => $parser,
params => { v => "1.0", rsz => "large", hl => "ja" }
);
my $response = $google->get( { q => $query, start => $start } );
my $tt = Template->new();
my $html;
$tt->process(
"search.tt",
{
query => $query,
response => $response->parse_response
},
\$html
);
print $q->header( -type => "text/html", -charset => "utf-8" );
print $html;
search.tt
<html> <body> <h1><a href="search.cgi">Google Search</a></h1> <form action="" method="get"> <p> <input type="text" name="query" value="[% query %]" /> <input type="submit" value="Google Search" /> </p> </form> <p> [% SET count = response.responseData.cursor.estimatedResultCount -%] [% IF count -%][% count %] pages[% END -%] </p> <dl> [% FOREACH item = response.responseData.results -%] <dt><a href="[% item.unescapedUrl %]">[% item.title %]</a></dt> <dd>[% item.content %]</dd> [% END -%] </dl> <div> [% FOREACH page = response.responseData.cursor.pages -%] <a href="?query=[% query | uri %]&start=[% page.start %]">[% page.label %]</a> [% END -%] </div> </body> </html>
ということで、Google AJAX Search API を WebService::Simple 使って利用してみました。 取得できる件数に制限があるのがちょっと残念ですが、この API なかなか重宝しそうです。
シンプルに Web API を叩ける WebService::Simple の現在の最新版はヴァージョン 0.09 です。 ヴァージョン 0.03 からスーパーハカーによる修正が入ったこともあり、機能が(Simpleという名前を崩さない程度に)増えたり、多少インターフェースが変わったりしました。 そこで WebService::Simple 0.09 の使い方を POD より詳しめに解説します。 # shipit が便利だったので、調子に乗ってやたら使いまくったらヴァージョンがどんどんあがっちゃった><
最初に、インターフェースの変更点をあげます。大きく変わったのは一点のみです。 例えば、Lingr の API を扱う場合、base_url は http://www.lingr.com/ になりますが、 各メソッドの URL は 例えば http://www.lingr.com/api/session/create という風に、メソッドごとに変化します。つまり base_url に api/session/create みたいなパスを追加したいということです。 そのためには、 get メソッド の パラメータ にそのパスを記載するんですが、0.03 の時と引渡し方が変更になっています。 第1引数に extra_path を指定するようになりました。
my $lingr = WebService::Simple->new(
base_url => 'http://www.lingr.com/',
param => { api_key => "your_api_key", format => 'xml' }
);
my $response = $lingr->get( 'api/session/create', {} );
my $session = $response->parse_response->{session};
また、上記サンプルに記載されているように、get などで取得した WebService::Simple::Response オブジェクトをパースするには、parse_xml メソッドを今まで呼んででいましたが、parse_response メソッドを使うことを推奨しています(エイリアスを作っているので parse_xml でも動きます)。
あとは普通に使う分には今まで通りで問題ないです。 Flickr API を使ったキーワードによる検索結果を Dump するサンプルコードは以下のようになります。
use strict;
use warnings;
use WebService::Simple;
use Data::Dumper;
my $flickr = WebService::Simple->new(
base_url => "http://api.flickr.com/services/rest/",
param => { api_key => "your_api_key", }
);
my $response =
$flickr->get( { method => "flickr.photos.search", text => "cat" } );
print Dumper $response->parse_response;
response のキャッシュも以前と同じ書き方でできます。
use WebService::Simple;
use Cache::File;
my $cache = Cache::File->new(
cache_root => '/tmp/mycache',
default_expires => '30 min',
);
my $flickr = WebService::Simple->new(
base_url => "http://api.flickr.com/services/rest/",
cache => $cache,
param => { api_key => "your_api_key", }
);
次にこの WebService::Simple を継承したサブクラスを作って、もうちょっと楽に API を触れるという方法を紹介します。 例えば、Flickr API の flickr.test.echo 及び flickr.photos.search を呼び出す WebService::Simple::Flickr をこんな感じで作ります。
package WebService::Simple::Flickr;
use base qw(WebService::Simple);
__PACKAGE__->config(
base_url => "http://api.flickr.com/services/rest/",
);
sub test_echo {
my ($self,$str) = @_;
return $self->get( { method => "flickr.test.echo", name => $str } );
}
sub photos_search {
my ($self,$str) = @_;
return $self->get( { method => "flickr.photos.search", text => $str } );
}
そしたら外部から、よりスッキリとしたコードで API をたたくことができます。
use utf8;
use WebService::Simple::Flickr;
use Data::Dumper;
my $flickr =
WebService::Simple::Flickr->new( param => { api_key => "your_api_key", } );
my $ref = $flickr->photos_search("富士山")->parse_response;
print Dumper $ref;
この API ごとにサブクラス化するという方法なんですが、Yappo さんが作った WebService::Simple::Cabinet を使う方法と、「ある API に特化したモジュールもしくはメソッドを作る」という点で似ています。WebService::Simple::Cabinet は YAML 形式などで API の定義をしますが、この場合は Perl モジュールを作っています。API を使うシチュエーションによってどちらか選ぶというのもいいと思います。
最後にパーサー、つまりAPI から返却されたコンテンツをパースするのに使うモジュールが選べるようになったという機能を紹介します。デフォルトでは XML::Simple でパースするようになっていますが、例えば XML::LibXML を使いたい場合は、WebService::Simple::Parser を継承して WebService::Simple::Parser::XML::LibXML モジュールを以下のように作成します( このモジュールはWebService::Simple に同封されています)。
package WebService::Simple::Parser::XML::LibXML;
use strict;
use warnings;
use base qw(WebService::Simple::Parser);
use XML::LibXML;
__PACKAGE__->mk_accessors($_) for qw(libxml);
sub new
{
my $class = shift;
my $args = shift || {};
$args->{libxml} ||= XML::LibXML->new;
$class->SUPER::new($args);
}
sub parse_response
{
my $self = shift;
$self->libxml->parse_string( $_[0]->content );
}
1;
それで利用するスクリプトからは、WebService::Simple のコンストラクタの引数 response_parser の値で使いたいパーサのモジュールを指定します。
my $service = WebService::Simple->new(
base_url => "http://api.flickr.com/services/rest/",
response_parser => 'XML::LibXML',
params => { api_key => "your_api_key" }
);
これで面白いのは、とりわけ XML で結果が返ってくる API 以外にも対応するところです。 例えば、JSON もしくは JSONP 形式で返却される API を扱うこともできます。 WebService::Simple::Parser::JSON はもう既に定義済みのものがあるので、以下のようなスクリプトを書くだけで、JSON もしくは JSONP を パースしてくれてデータを利用することができます。
use strict;
use warnings;
use WebService::Simple;
use Data::Dumper;
my $flickr = WebService::Simple->new(
base_url => "http://api.flickr.com/services/rest/",
response_parser => 'JSON',
params => { api_key => "your_api_key", format => "json" }
);
my $response =
$flickr->get( { method => "flickr.photos.search", text => "cat" } );
print Dumper $response->parse_response;
あとは POST にも対応したので、使いたい場合は post メソッドを get と同じ引数形式で呼び出せばおkだと思います。
dmaki(lestrrat)さん、tokuhirom に(まるごと)書き換えてもらった&Yappo さんが WebService::Simple::Cabinet を作ったおかげで、面白いモジュールになった気がします。感謝です。
CPAN に最新版があがっているので、もしよろしければご利用ください。








最近のコメント
やっぱり on ゆかをぺろぺろしていたら、本当にユカタンが来た件: 取材されたら、お礼周
KC on ゆかをぺろぺろしていたら、本当にユカタンが来た件: 取材のきっかけになっ
ぴーた on ITmedia に ワディット のインタビュー記事が掲載されました: 和田さん、お久しぶり
funkanoll.myopenid.com on ITmedia に ワディット のインタビュー記事が掲載されました: はじめまして。 IT
だーしゃ on ITmedia に ワディット のインタビュー記事が掲載されました: すごい参考になりま
mikan on Google Charts API を Perl から簡単に操作できるようにしたモジュール『WebService::Simple::Google::Chart』: 初めて訪れました!!
シバタユウヤ on ウェブ関係で(略)恥ずかしい日本人100のブログを列挙祭り: 神田さんは都知事選で
にゃあ on ウェブ関係で(略)恥ずかしい日本人100のブログを列挙祭り: 「さとるのとまどいな
on ウェブ関係で(略)恥ずかしい日本人100のブログを列挙祭り: wikiもついてたら