日記はScrapboxに移動しました。

  • このブログの mixi コミュニティを作成した

    いつも拝読しているステキブログ DESIGN IT! w/LOVE が、[mixi] DESIGN IT w/LOVE for community なんつって mixi にコミュニティを作ってるのを見て、ブログ時代になって見失われたように思われる、かつてあった掲示板的な距離感でのふれあいというもののよさを再認識した。つきましては、ものすごい勢いでパクらせていただき、下記コミュニティを作成した次第。

    DISったりDISられたり、モヒカン族の跋扈する mixi コミュニティで、殺伐とした交流を楽しみましょう!

  • mixi ミュージック、あるいは Web2.0 のレッスン

    ,

    mixi ミュージック、すごくいいよね!!!
    もうずっと前から Last.fm をずっと使っていたので、正直なところ「いまさら mixi ミュージックなんて、どうなの?」とか思ってたりもしてたんだけど、まったくの思い違いでした!
    聴いている曲を公開・集計する機能はもちろん、mixi ならではのコミュニティとの連携、好きな曲やアーティストによるユーザ同士の新たなつながりの発見、また、アーティスト情報をユーザが拡充できるようにしている点もステキ!!今後ますます盛り上がっていけば、それこそ日本のミュージックシーンに大きな影響をもたらし得るコミュニティになり得るのではないでしょうかっっ!!!
    さて、いかにもとってつけたかのような前置きはさっさと切り上げて、以下、本題。いや、mixi ミュージックの今後にはほんとに期待しているのだけどw
    もうかなりと前の話になるけど、mixi ミュージックのプレミアム会員への先行公開の報せを受けて、「mixi ミュージック送信 Perl モジュールを作ってみたよ!」なんてエントリを書いたりした。僕は貧しくてプレミアム会員になれないため、「mixiミュージック送信機をつくってみたよ! :: ぼくはまちちゃん!」を見ながら、どんなレスポンスが返るのかもよくわからないままに、Perl のモジュールを書いたのだった。
    その後、一般ユーザにも mixi ミュージックが公開され、Windows ユーザかつ iTunes あるいは Windows Media Player ユーザ、又は、 Mac ユーザかつ iTunes ユーザは素敵な mixi ミュージックを享受できるようになった。しかし、それ以外の、Windows を使っていても、iTunesWMP を使っていないひとたちや、Linux ユーザ等は、見るからに楽しそうな mixi ミュージックから締め出されてしまったわけだ。
    そこで、foobar2000 ユーザや、Linux ユーザ(xmms 使用)が、ありがたくも僕の書いたスクリプトを参考にして、独自に mixi ミュージックへ曲情報を送信するクライアントを書いたりする試みが現れた。僕のスクリプトは明らかに不備があるのでそのままでは動かないけど、mixi ミュージック開始当初の状況ならば、ちょっと修正すれば使えたはず。
    それが、はまちちゃんがちょっとはしゃいでみただけで mixi さんはオタオタして、曲情報の送信内容をエンコードするなんてな所業に打って出た。これで、mixi が提供するクライアント「mixi ステーション」以外は完璧に締め出されしまった。正直、本当に残念な思いがしたよ。Web 2.0 などといわれもする昨今の潮流を真逆に行く愚行である、と。

    1. そもそも送信される曲情報の間隔として許容し得る範囲を、適切に設定すればよい
    2. それでもはまちちゃんみたいなイタズラは現れるだろうが、そんなのは一時的ものなので、収まるのを待てばいい。どうせすぐに飽きるんだから
    3. というか、はまちちゃんのような単独でのプログラム的自動化を取り締まったところで、VIPPER 的人海戦術で般若心経が総合ランキング 1 位になっちゃうような祭り(このエントリの投稿時現在)は防げない
    4. だから祭りのことなどほっとく、というか当たり前のことだけど、ケースバイケースで判断しながら運用していくしかないでしょう
    5. あとは適切に設計した API を公開しておけば、グルコースのみに頼る必要もなく、mixi ミュージックが本当に面白いものであれば、foobar2k だとか Linux だとかを好んで使う少数派ユーザは、勝手にクライアントを作るわけで、みんなにとっての幸せの総量が増えることとなる

    上記したようなことは、なんにも知らない素人がお気楽に勝手なことを述べちらかしやがって……という感じかもしれないけど、まぁそこんところをうまいこと考えるのがサービス提供者の腕の見せ所なんじゃないですか?ということで。

    UPDATE:
    暇なので、ありがちな反論に反応してみるよ。

    2006年07月17日 taninsw Web2.0が潮流だからそうしろという意見は受け入れられない/mixi利用者のほとんどはWeb2.0を理解していない/大勢のライトユーザからのクレームに対して「放っておけば治まりますよ」と返答することは現実的か。

    まず、「祭り」が起こったとして、その状況をにわかには理解できないライトユーザからのクレームを「放っておけば治まりますよ」といって無視しろなどとはいっていない。はまちちゃん的なおふざけや、あるいは「般若心経」祭りなどが起こったら、単純に該当するデータのみを削除すればいいわけで、通信内容を暗号化することで元から絶つ必要はない、といってるだけ。それが「ケースバイケースで判断しながら運用していくしかないでしょう」が意味するところ。実際、はまちちゃんの時は、mixi ミュージックにとってノイズとされるデータを削除したわけだし。
    また、Web2.0 だから mixi もそうしろといってるわけではなく、適切に設計し、上記した運用方針を前提として mixi ミュージック API を公開にすることのメリットを具体的に述べており、潮流に乗るほうがユーザにとってもサービス提供者にとってもメリットになるといっている。また、その際に mixi ユーザのほとんどが Web2.0 なんてものを理解している必要などない。ユーザは、結果的にメリットを享受できさえすればいいのだから。

  • mixi ミュージック送信 Perl モジュールを作ってみたよ!

    ,

    mixi ミュージック送信モジュールを作ってみた!!はまちちゃんmixi ミュージック送信機をまんま Perl モジュールに移し変えただけだよ…!
    これがあれば、mixi station (mixi からダウンロードできるやつ win/mac) とか、iTunes なしで、お気に入りの曲をガンガン送信する Perl スクリプトが書けちゃうかもしれないよ!
    やったね!
    でもぼく貧乏でプレミアム会員になるお金がないから、このモジュールは全くの未テストなんだけど!
    使い方は、コード内の SYNOPSIS を見てね!手抜きじゃないよ、DRY だよ…!
    mixi プレミアム会員のひとは、よかったらためしてみてね!
    …ちゃんと動くかわかんないけど!
    でもあんまりやり過ぎると、はまちちゃんみたいに ID ban されちゃうよ!ほどほどにね…!

    追記。
    とかゆってたら、Yappo さんが Publish::MixiMusic をつくってたよ!みんな考えることは一緒だね…!

    package WebService::MixiMusic;
    use strict;
    use warnings;
    use Readonly;
    use LWP::UserAgent;
    use base qw(Class::ErrorHandler);
    Readonly my $login_uri  => 'https://upload.mixi.jp/music/login.pl';
    Readonly my $upload_uri => 'http://upload.mixi.jp/music/upload.pl';
    sub new {
    my ($class, %args) = @_;
    my $email    = delete $args{email}    || return $class->error('email is required');
    my $password = delete $args{password} || return $class->error('password is required');
    my $agent    = delete $args{agent};
    bless {
    email      => $email,
    password   => $password,
    ua         => LWP::UserAgent->new(agent => $agent || 'mmm/v0.1 (by glucose)'),
    session_id => undef,
    }, $class;
    }
    sub login {
    my $self     = shift;
    my $response = $self->{ua}->post($login_uri, {
    email    => $self->{email},
    password => $self->{password},
    });
    return $self->error('login failed...')
    if ($response->is_error ||
    !(($self->{session_id}) = $response->content =~ m|session_id=([0-9a-z_]+)|ims));
    }
    sub upload {
    my ($self, $report) = @_;
    my $response = $self->{ua}->post($upload_uri, {
    session_id => $self->{session_id},
    data       => $report->as_xml,
    });
    return $self->error($response->code.': '.$response->message)
    if ($response->is_error);
    }
    package WebService::MixiMusic::Report;
    sub new {
    my $class = shift;
    bless { tracks => [] }, $class;
    }
    sub add_track {
    my ($self, @tracks) = @_;
    for my $track (@tracks) {
    push @{$self->{tracks}}, $track;
    }
    }
    sub as_xml {
    my $self = shift;
    my $xml  = qq|<?xml version="1.0" encoding="utf-8"?>\n<report>\n|;
    for my $track (@{$self->{tracks}}) {
    $xml .= <<'EOS';
    <track>
    <name>@{[$track->{name}]}</name>
    <artist>@{[$track->{artist}]}</artist>
    <album>@{[$track->{album}]}<album>
    <genre>@{[$track->{genre}]}</genre>
    <timestamp>@{[$track->{timestamp}]}</timestamp>
    </track>
    EOS
    }
    $xml .= qq|</report>|;
    }
    1;
    __END__
    =head1 NAME
    WebService::MixiMusic - Hello! Hello! My name is Hamachi-chan...!
    =head1 SYNOPSIS
    use WebService::MixiMusic;
    use WebService::MixiMusic::Report;
    my $mm = WebService::MixiMusic->new(
    email   => email,
    pasword => password,
    );
    $mm->login or die($mm->errstr);
    my $report = WebService::MixiMusic::Report->new;
    $report->add_track(
    {
    name      => 'ぼくはまちちゃん',
    artist    => 'はまちや2',
    album     => 'こんにちは!こんにちは!',
    genre     => 'Rock',
    timestamp => '2006-05-23T21:35:55%2b09:00',
    },
    {
    name      => 'ぼくけんたろたん><ノ',
    artist    => 'けんたろたん',
    album     => '海ゆかば',
    genre     => 'Jazz',
    timestamp => '2006-05-23T21:35:55%2b09:00',
    },
    );
    $mm->upload($report);
    =head1 DESCRIPTION
    WebService::MixiMusic provides a perl interface to Mixi Music.
    =head1 METHODS
    =over 4
    =head2 login
    =head2 upload
    =back
    =head1 SEE ALSO
    =over 4
    =item Mixi Music
    L<http://music.mixi.jp/search_music.pl>
    =item Hamachi-chan's hack
    L<http://mxxi.hamachiya.com/2006/05/mixi_8.html>
    =back
    =head1 AUTHOR
    Kentaro Kuribayashi, <k.kentaro☆gmail.com>
    =head1 COPYRIGHT
    Copyright 2006 Kentaro Kuribayashi
    This library is free software; you can redistribute it and/or modify it
    under the same terms as Perl itself.
    =cut