はかますたいる!きょろの技的雑記

井上恭輔(@kyoro353)の私的かつ技的な日記です。米国サンフランシスコで暮らすエンジニアです。

Titanium+RailsでHTTP通信するときに、デフォルトのままではUserAgentの問題にぶつかる

わお!もう1年近くはてな書いてなかったのか!と驚愕しつつ、
これからは余り気張らず、ちょくちょくメモ程度の軽い気持ちで書くことしようと思いました。
アウトプット重要。この1年は本当に色々あったなぁ。その話は後日。

      • -

本題。TitaniumからRailsで書いたAPIエンドポイントと通信しようと思って地味にはまった。
バージョンの関係もあるのだけど、現行版のTitaniumではTitanium.Network.createHTTPClient()が
デフォルトではUserAgentがセットされない(空っぽ)みたい。
で、UAが未設定だと、Railsで無条件に500を返して弾いちゃう。
ブラウザからAPIに同じリクエストを送っても何も問題なく表示されるので最初はわからなかった。

UsaAgent見設定だと、こんな感じになる。

Started GET "/count" for 67.188.150.120 at 2011-11-19 17:54:54 +0900
  Processing by CallbackController#count as 
Completed 500 Internal Server Error in 57ms

NoMethodError (undefined method `ref' for nil:NilClass):

で、これに対処するためにTitanium側では何らかのUAを設定してあげる。

var xhr = Ti.Network.createHTTPClient();
 
xhr.open('GET', 'http://www.example.com');
xhr.setRequestHeader('User-Agent','Titanium);
 
xhr.onload = function(e){
    // do something here
}
xhr.send();

さらに、Rails側は下記のページ参考にしてBeforeFilterでMimeTypeを設定してあげる。
めんどくさいときはApplicationコントローラでやってもいいと思う。

GET request with params in Titanium to a Rails backend
http://ariera.github.com/2011/08/30/get-request-with-params-in-titanium-to-a-rails-backend.html

    # config/initializers/mime_types.rb
    Mime::Type.register_alias "text/html", :titanium

    # app/controllers/application_controller.rb
    before_filter :handle_titanium
    
    def titanium_user_agent?
      @mobile_user_agent ||= ( request.env["HTTP_USER_AGENT"] && 
        request.env["HTTP_USER_AGENT"][/Titanium/] )
    end
    
    def handle_titanium
      request.format = :titanium if titanium_user_agent?
    end

これで問題なくRailsと通信できるよ。

enjoy !

Pythonでmixiの新しいAPIを使うプログラムを書いてみたよ

最近、RubyとかPythonをいじって遊んでいます。
先日書いたmixiAPIを使って写真つきボイスを投稿するサンプルをPythonで書いてみたので、置いておきますね!


【GitHub】kyoro / mixi_graph_api_sample_photovoice_python
https://github.com/kyoro/mixi_graph_api_sample_photovoice_python

#!/usr/bin/python 

import urllib,urllib2
import MultipartPostHandler
import json
import sys

# mixi Graph API Settings
CONSUMER_KEY    = '__please_change_your_setting__'
CONSUMER_SECRET = '__please_change_your_setting__'
REDIRECT_URL    = '__please_change_your_setting__'

if __name__ == '__main__':
    
    # auth

    auth_base = 'https://mixi.jp/connect_authorize.pl'
    auth_params = {
        'client_id'         : CONSUMER_KEY,
        'response_type'     : 'code',
        'scope'             : 'w_voice',
        'display'           : 'pc'
    }
    auth_url = auth_base + '?' + urllib.urlencode(auth_params)
    
    print "Aauthorize request in this page :"
    print auth_url
    print "Please input redirest url's 'code' parameter :"
    
    code = sys.stdin.readline().replace('\n','')

    # get token

    token_params = {
        'grant_type'    : 'authorization_code',
        'client_id'     : CONSUMER_KEY,
        'client_secret' : CONSUMER_SECRET,
        'code'          : code,
        'redirect_uri'  : REDIRECT_URL
    }
    token_res = urllib.urlopen(
            'https://secure.mixi-platform.com/2/token',
             urllib.urlencode(token_params)
             ).read()
    token_dic = json.loads(token_res)

    # post
    post_opener = urllib2.build_opener(MultipartPostHandler.MultipartPostHandler)
    post_base = "http://api.mixi-platform.com/2/voice/statuses/update?oauth_token=%s" % token_dic['access_token']
    post_params = {
        'status'    :   'voice post from python',
        'photo'     :   open('sample.jpg', 'rb')
    }
    post_res = post_opener.open(post_base,post_params).read()
    token_dic = json.loads(post_res)

    if token_dic.has_key('created_at') :
        print 'done. created at ' + token_dic['created_at']

今回はシークレットも間違われないだろう


こんな感じでいいのだろうか?
urllibとurllib2を併用してるところとか、なんとかならないものか。
あと、urlの生成ってこんな感じでお行儀は大丈夫なのかな、とかとか、身の回りにそんなにpython使う人が居ないので、何かご指摘などあれば頂けると嬉しいです!


だれかコードレビュー頼む!(笑)

mixiのAPIが個人向けに公開されたので早速試してみた - フォトボイス

mixiAPIがやっと一般公開

昨日、ついにmixiの提供する新しいGraphAPIが、個人開発者向けに公開されました!
APIを個人向けに開放するのは、今回が初めてのことです。



個人の方もmixi Graph APIがご利用可能になりました



新しいGraphAPIは、ボイス、フォト、メッセージ、チェック、更新情報、友人情報、などなど、色々と揃っていて、認証認可もOAuth2.0を使用しており、とっても使いやすく簡単です。


mixi Graph API » 技術仕様 » API共通仕様


どんな事が出来るかということですが、お遊びで、ねこのフォト付きボイスを投稿できる「今日のにゃんこボイス」というサンプルを作ってみましたので、興味がある人は使ってみて下さい。


f:id:kyoro353:20101221133345p:image


今日のにゃんこボイス



ということで、具体的にどうプログラムすればいいかを解説してみようと思います。
あなたも早速ボイスのAPIを用いて、写真付きボイスを投稿してみましょう!


ソースコードはGitHubに上げておきました。

ちなみにコンシューマキーとコンシューマシークレットは失効させてますので、ご自分で書き変えてご利用ください。ConsumerKeyとSecretの管理は厳重に!絶対人に教えちゃダメだよ!


【GitHub】kyoro / mixi_graph_api_sample_photovoice

最近GoogleCodeからgithubに乗り換えたのだけど、便利ですねー

アプリの登録と、ConsumerKey / ConsumerSecretの発行

まずはSAPポータルでアプリを登録してConsumerKeyとSecretを発行してください。


mixiDeveloperCenter/SAPポータル

f:id:kyoro353:20101221133346p:image


初回はクレジットカードの認証などが必要です。
課金というわけではなく、信頼性の担保という意味らしいです。APIの利用は無料。
アプリの登録にはメアドの確認なども要求されるので、説明に従ってください。

f:id:kyoro353:20101221133347p:image

登録が終わるとConsumerKeyとConsumerSecretが発行されます。
また、サービス登録時に設定したリダイレクトURLはプログラムでも使用するので
サービス設定とプログラムの同一性を保ってください。

サンプルプログラムを走らせてみる

githubに上げているサンプルを走らせてみます。
まず、constantsに書かれているCONSUMER_KEYとCONSUMER_SECRET、およびREDIRECT_URIを自分のものに書き換えます。
REDIRECT_URIは存在しないものでも大丈夫です。適当なものを設定してください。


変更はこれだけでOKです。
では実行。

perl post.pl

すると

Aauthorize request in this page :
https://mixi.jp/connect_authorize.pl?client_id=07c440f6acc01d7ae8f3&response_type=code&scope=w_voice&display=pc

Please input redirest url's 'code' parameter :

こんな感じで表示されるので、表示されたURLにアクセスしてアクセスを認可してください。
その後、リダイレクトされたページのURLの末尾に付いているcode=以下の値をコピペし、Enterを押します。

done.と表示されたら、自分のボイスのページを見て見ましょう。


f:id:kyoro353:20101221133348p:image

このように簡単に画像を投稿できます。

プログラムの解説

プログラムを解説します。といっても、すごい簡単です。
今回はperlで実装しましたが、どの言語もそんなに違いはありません。
クライアントライブラリなども使いません。使うのはLWPだけです(笑)

my $auth_uri = URI->new("https://mixi.jp/connect_authorize.pl");
$auth_uri->query_form_hash(
    client_id       => CONSUMER_KEY,
    response_type   => 'code',
    scope           => 'w_voice',
    display         => 'pc',
);

print "Aauthorize request in this page :\n";
print $auth_uri->as_string();
print "\n\nPlease input redirest url's 'code' parameter :\n";

認可画面のURLを生成します。
静的なURLなので、CONSUMER_KEYを変更しないのであればaタグとかでもいいです。

my $ua = LWP::UserAgent->new;

my $token_res = $ua->post('https://secure.mixi-platform.com/2/token',{
    grant_type      => "authorization_code",
    client_id       => CONSUMER_KEY,
    client_secret   => CONSUMER_SECRET,
    code            => $code,
    redirect_uri    => REDIRECT_URI,
});

my $token_res_hash = JSON::decode_json($token_res->content);
my $access_token = $token_res_hash->{access_token};

my $post_endpoint = sprintf("http://api.mixi-platform.com/2/voice/statuses/update?oauth_token=%s",$access_token);
my $post_res = $ua->post(
    $post_endpoint,
    Content_Type => 'form-data',
    Content => {
        status => 'neko neko koneko',
        photo => [ "sample.jpg" ],
    }
);

codeを受け取ったら、アクセストークンを取得します。
レスポンスはJSONで返ってくるので、デコードして格納します。
あとはAPIの仕様通りに、Content-Typeを設定して、パラメータを付けてPOSTします。


たったこれだけでOKです!
他にも面白そうなAPIが色々あるので、ぜひ皆さん遊んでみてね!

Google Chromeがローカルネットワークの情報を送信して現在値を割り出している件

※最後に色々追記しました

PC版のGoogle Chromが現在値を割り出すために、ローカルネットワークの情報を根こそぎ送信して現在地を推測しているようだ。


先日、Google Chromeをバージョン8に上げた。
PDFリーダも統合され超便利!って思って喜んでいたところ、こんな表示が出てきた。

f:id:kyoro353:20101206113624p:image:w450


えっ!?PCなのに現在地のトラッキングができるの!??


スマートフォン用のWebサイトを開発していて、ChromeUAAndroidのものにしていたら表示された。
最新版のChromeで、Googleのプレイスや乗換案内なんかを開くと表示されるよ!


で、最初はIPとかで場所特定しているのかと思っていたのだけど

f:id:kyoro353:20101206113625p:image

なんだか思ったより正確に表示される!

f:id:kyoro353:20101206113626p:image:w450

IPで現在地を割り出す系のサービスは、どれも長野あたりを表示するので、別の仕組みを使っているのだろう。


PlaceEngine的にwifiのAP情報とかで現在値を出す類かと最初は思ったけど、今アクセスしているのは無線機能の無いPCだ。
ルータを介してネットワークに接続しているし、ファイアウォールもある。
どうやっているんだ…?

と思って、プライバシーポリシーやら説明を読んでみた。

プライバシーとセキュリティの設定: 現在地情報へのアクセス

Google Chrome で現在地をサイトと共有できるようにすると、おおよその現在地を取得するために、ローカル ネットワーク情報がブラウザから Google Location Services に送信され、その後、現在地情報へのアクセスを要求したサイトと現在地が共有できるようになります。
Google Location Services では、接続できる WiFi アクセス ポイント、信号の強度、ローカル ルーター情報、パソコンの IP アドレスなどを含む、ローカル ネットワーク情報を使用して現在地を推測します。Google Location Services の精度や対応可能な範囲は、場所によって異なります。

※指摘を受けて前半部を追記//201012061308

ひぃ!ローカルネットワークの情報も根こそぎ送っちゃうのか!?><。


「現在地のトラッキング」というボタンを押して、ネットワーク構成情報を根こそぎ送って場所を推測しているというところまで普通の人は想像できるものなのだろうか。
「『許可』押してるからいいじゃん!」って話なんだろうけど、そのボタンを押す事が何を意味すのか十分な説明が無い状況でも同意とみなされるなら、安心感を誘う嘘ギリギリの文言を書いても良いってことになっちゃうから、それはそれで良いのかなぁと思う。
現実問題として「意識」していない動きは、消費者にとっては「勝手」な動きなんだと思います。


Googleのすることはいつもアグレッシブだなーと思うのだけど、どこまでやってもいいのか判断が難しいですよね。日本人って国内のサービスのプライバシーにはかなり厳格なのに、海外のサービスには本当に緩いよなぁと思います。英語で免責書けばなんでも許される文化はそろそろ危ないんじゃないだろうか。英語で話しかけられて、とりあえず「YES!」と答える日本人文化に通じているのかもしれないですね。


サービスを作る側の人間として、プライバシーとの付き合いは重きを置いて考えていかないといけませんね。。。



追記:

色々調べてみてわかったので追記。
まず、位置情報以外のことはサイト側には通知されない。なので情報漏洩とは言えないレベルで、危険性はほとんどないので安心してください!
僕も危険性があるとは思っていないし、それを喚起するというよりは、プライバシーって難しいねって話なので誤解しないでね><。
仕組みはここの解説が詳しいです。

http://blog.fkoji.com/2009/07041824.html

ただ、googleに対しては何らかの情報が送られているわけで、そこは危険な香りがしなくも無いのだけど、そもそもgmailで個人情報握られていたりするのであまり意味の無い議論なのかもしれない。もはやWeb時代において、Googleの提供する機能はOSのAPIと等価なのかもしれない。全面的に信用しないとこの世の中は成り立たないくらいにきている。

あと、長野県が出てくるのは完全に僕の早とちりで、日本だと判別され、その中心が長野ってことらしい。お恥ずかしい間違いをした。。。

この件は、Googleを批判するものでも、注意喚起を促すものでもなんでもなくて、プライバシーって難しいね、っていう程度のお話です。
気分を害された方、本当にごめんなさい。
この場を借りて謝罪いたします。

MacOSでVirtualBoxを使って開発環境を作ったのでメモ

MacOSのマシンに開発環境を構築することになった。
macportsでチマチマと開発環境を作るより、VMでLinux使って作ったほうがいいよ!」と言われたので、そのプランでやってみることにした。
ちなみに、ThinkPadはデフォルトのブートはWindowsなんだけど、やはり開発環境はVMでローカルに構築している。

VMにはVirtualBoxを使う

昔はVMWareだったのだけど、最近はよくVirtualBoxを使う。
ダウンロード時に入力を求められないとか、フルスクリーン時のコントロールエリアの表示がシンプルで好きとか、いろいろあるけど、どちらかと言えば気分的な問題なので特に意味はない。


Download VirtualBox


ここからdmgが落とせるのでそのまま落としてインストール

ゲストOSはUbuntu 10.10 Server

ゲストOSにはUbuntu 10.10のサーバ版を使った。
自分はメインのサーバにはFreeBSDを昔からずっと使っているのだけど、仕事もずっとLinuxだし、なにより簡単で便利なので、ごちゃごちゃ言うよりもうUbuntu一択でいんじゃね、って最近は思うようになってる。
どうせGUIは使わないのでサーバ版をいれた。実はサーバ版は初めて使ったのだけど、シンプルでいいね。


Get Ubuntu Server Edition Download

VM&インストール

次にvmを作る。名前はubuntuとかにして、メモリは1GB割り当て。HDDは15GB。
MacBook Airだったので若干節約気味だけど、開発用なので特にキツイって感じもしない。
ubuntuのisoイメージをマウントしてそのままインストール。何も悩まず次々選択していけばインストール完了。まじ楽。

sshd入れる

ubuntuにsshdを入れる。

$ sudo aptitude install ssh

次にsshd_configをいじる。

 $sudo vi /etc/ssh/sshd_config

#ルートログインを閉じる
PermitRootLogin no

#ローカルからしか繋がないので公開鍵じゃなくてパスワードにした。コメントアウトしてあるので外す。
PasswordAuthentication yes

#再起動
$ sudo /etc/init.d/ssh restart

VirtualBox側のポートフォワード設定

VMはNATでネットワークに接続する。
しかし、ローカルからVMの開発用サーバに接続したいので、ホスト側にポートフォワードを設定して対処する。


VMをVirtualBoxごと終了し、ターミナルを開いて次のコマンドを投入。
パスは標準で通ってる。

/* ssh の設定 */
VBoxManage setextradata "ubuntu" "VBoxInternal/Devices/e1000/0/LUN#0/Config/guestssh/Protocol" TCP
VBoxManage setextradata "ubuntu" "VBoxInternal/Devices/e1000/0/LUN#0/Config/guestssh/GuestPort" 22
VBoxManage setextradata "ubuntu" "VBoxInternal/Devices/e1000/0/LUN#0/Config/guestssh/HostPort" 5022

/* http の設定 */
VBoxManage setextradata "ubuntu" "VBoxInternal/Devices/e1000/0/LUN#0/Config/guesthttp/Protocol" TCP
VBoxManage setextradata "ubuntu" "VBoxInternal/Devices/e1000/0/LUN#0/Config/guesthttp/GuestPort" 80
VBoxManage setextradata "ubuntu" "VBoxInternal/Devices/e1000/0/LUN#0/Config/guesthttp/HostPort" 5080

これでホスト側5022がゲストの22(SSH)に、5080が80(HTTP)にフォワードされる。


最初、ネットに落ちてた情報を見てpcnetにしてたんだけど、ここは実際に設定されているNICに合わせないとエラーで起動しなくなる。
NICはデフォルトでIntelが選択されるのでe1000を使うようにしよう。


変な設定を行うとVMが起動しなくなる。
そんなときはVMの設定ファイルから項目を直接削除して再設定した。

/Users/kyoro/Library/VirtualBox/Machines/ubuntu/ubuntu.xml

とかにあるExtraDataItemで見覚えがあるのがあれば、それを消す。

接続テスト

ssh -p 5022 kyoro@localhost

つながった!

VirtualBoxのウインドウが常に出てるのって意外とウザイ。
なので、コマンドでVMの制御を行う。

#VMの列挙
VBoxManage list vms

#起動
VBoxManage startvm "ubuntu"

とりあえずこれでいろいろ快適!
あとはubuntu上で環境を作ります。

高専プロコンの記事を書きました!/帰ってきた井上恭輔: プロコン史上初の“超ド級”電脳戦、IT維新の志士たちはどう戦ったのか

ITmediaさんで今年の高専プロコンの記事を書かせて頂きました!!
なかなか入魂の一作ですので、ぜひご一読頂ければ嬉しいです。
きっと高専プロコンに興味を持って頂けるはず!


名前は何とも釣りっぽくて恥ずかしいですが、せっかく付けて頂いたので、ありがたく喜ばせて頂きます(笑)
@makeplex先生のご協力で実現しました。心から感謝申し上げます!

[http://www.youtube.com/watch?v=c8wkMdxCPSA:movie]




プロコンについて熱く語る「プロコンナイト」を開催したい!

※日時が11/13(土)から11/20(土)に変更になりました!

こんにちは!きょろです。
先週の第21回全国高専プロコン、参加された皆様、ネットからご覧頂いた皆様、
本当にお疲れさま&ありがとうございました!
素晴らしい大会になりましたね!
参加された学生さん、素敵な大会をどうもありがとうございました。

プロコンって何!?って人に簡単に説明すると、
全国高専生が年に一度集まって開催する、プログラミング頂上決戦です。
未踏みたいにシステムの開発をしてプレゼンや展示で競う自由・課題部門と、
開発したプログラムを予め決まったルールのゲームで戦わせてトーナメント形式に
直接対決する競技部門があります。競技の決勝は下記の動画をご覧下さい。
今年は高知で開催されました。500人規模が集まるかなり大きな大会です。

この競技部門ですが、実は対戦用の競技システムの開発を私が担当しました。
詳細は競技部門のオフィシャルサイトや、プロコンのサイトをご覧下さい。

【競技部門のサイト】
http://procon-online.net/

【プロコンのサイト】
http://procon.gr.jp/

さて!ここから本題。
今年のプロコンですが、競技内容がおかげさまでご好評を頂いていまして、
「OB戦や社会人プログラマを交えたオープン戦を開催しよう!」という話も
出てきたりして盛り上がっております。

また、20年以上の歴史を数えるプロコンにも、そろそろOB会的なものが
出来てきても良いころかなぁと個人的には思っておりまして、
もしご賛同頂ける方がいらっしゃるようでしたら、
私が発起人になってプロコンOB会を設立してもいいかなぁ〜なんて、思っていたりもします!!

ということで、今回の第21回全国高専プロコンお疲れ様&今後のプロコン競技やOB会の話などなど、熱く語れる場を設けたいなと思いまして、「第1回プロコンナイト」と題したイベントを開催したいなと思っています!!
美味しい料理を食べながら、お酒を飲みつつ、プロコンの未来や、プログラミング教育について熱く語りませんか!?
首都圏にお住まいのプロコンや高専OB、プログラミングやIT教育に興味のある皆様、若手エンジニアの皆様、どなたでも結構ですので、よろしければぜひご参加ください!!!

DSC_0105

■イベント概要
『第1回 プロコンナイト 〜プロコンの未来を語ろう!〜』

◇日時
2010年11月20日(土) 18:00〜

◇場所
田端にある「まれびとハウス」という大きめのシェアハウスをお借りできることになりました!
【まれびとハウス】
http://www.mare-bito.net/


◇内容

  • 18:30〜 乾杯!&自己紹介
  • 18:50〜 プロコンと今年の競技部門のご紹介
  • 19:00〜 競技部門決勝を3Dで再演しながら実況解説
  • 19:30〜 LTしたい参加者の方募集中!そのほかプロコンOB会やプロコンの未来、プログラミング教育について熱く語りましょう!
  • 自由解散。朝までいてもいいよ!(笑)

◇ごはん

  • おいしいごはんを作ってもらえることになってます
  • お酒は各種ご用意しております
  • お土産&持込大歓迎!

DSC_0078

◇募集人数
10人くらい!?基本はLT大会&飲み会なので誰でもOK!
高専&プロコンOBや、社会人プログラマ、現役学生さん、誰でもOK!

◇参加費

  • 社会人2500円、学生1000円、場所代&飲食代含む。カンパ歓迎!


参加方法は@kyoro353に「参加希望!」とtwitterでリプライを飛ばしてください!
下のATNDでもOKです。

http://atnd.org/events/9250

詳細な住所は参加者だけに連絡するので、必ずtwitter IDやメールなど
連絡の付く手段を書いておいてください。
メールはkyoro[あっと]hakamastyle.netです!

それでは、ご参加お待ちしております♪

mixiだって面白い!

ミクシィ楽しい!

id:amachangのように自分が面白い!って思えるサービスを、素直に「好きだ!」って言えるのは素敵ですね。
ということで、僕はミクシィの良いところを書いてみようと思います!

f:id:kyoro353:20101013052358p:image:w400


注意:この記事はid:amachangさんの記事「フェイスブックが面白い(http://d.hatena.ne.jp/amachang/20101011/1286805813)」へのオマージュです。
写真や文体、構成もお借りしているので、先にオリジナルをお読み頂くことをお勧めします。
最後に執筆の意図を記載していますので、よろしければお読みください。


はじめに


みなさんこんばんは!ミクシィしてますか?
HolyGrailさんが書いているように、最近改めてミクシィがおもしろいなーと感じます。


mixiはやっぱり素晴らしかった - 帰ってきたHolyGrailとHoryGrailの区別がつかない日記


というわけで、一時期のミクシィ大好きだったときから、使い方が落ち着いて新しい空気に入れ替わっていった雰囲気を思い出しつつ、僕が感じているミクシィの面白さ、特徴、楽しみ方などを紹介していけたらと思います。

ちょっと長くなっちゃいますけど、よろしくお願いします!


ミクシィの一番の面白さは「手っ取り早さ」


僕が感じているミクシィの良さは、一言で言ってしまえば「コミュニケーションの手っ取り早さ」なんだと思います。

手っ取り早さと言っても「とりあえずリアルなシーンで友人とコミュニケーションを取るのに必要十分な機能が備わっている」という意味での手っ取り早さです。

  • 手っ取り早くコミュニケーション!
  • 書き込むより気軽に「イイネ!」が伝わる
  • 「一緒に使ってる」ということが伝わる
手っ取り早くコミュニケーション!


まずは、システム的な部分ですが、リアルな友人とコミュニケーションを取りたい時に、とりあえず一通りのコミュニケーション機能が備わっているのは便利です。
地元の友人と同窓会の事を話したり、一緒に上京した学生時代の友人の近状を知ったり、飲み会の予定を調整したり、遊んだ時に撮った友人の顔が映りまくってる写真を参加者限定で公開したり、などなど、日常のリアルなシーンで発生しうるであろう、ほとんどのコミュニケーションをミクシィ上で行うことができます。


f:id:kyoro353:20101013023517p:image:w400


僕たち86世代以降の人間であれば「学生時代の仲のいい友人とはmixiでつながってる」って事も決して少なくはないはず。
リアルなソーシャルグラフに強いというのは、こういうプライベートな日常のシーンで色々と役に立ちます。
ガラケーや、iPhone/Androidなどのタッチデバイスそれぞれに専用のUIが用意されてているので、普段PC使わない人やガラケーしか持ってない人からAndroid女子まで、多くの人が現状で使っているのも嬉しいところ。
普段から仲のいい人がいるだけでも、それだけでコミュニケーションが加速します。

書き込むより気軽に「イイネ!」が伝わる


次に、「イイネ!」ボタンがなかなかいいです。
「イイネ!」ボタンとは、ミクシィのいたるところにちりばめられた「好意を伝えるためのボタン」です。
このボタンのいいところは、「わざわざコメント書くほどでもないけど好感を持った瞬間に押せる」ということです。
その「良かったよ!」という好感を伝えられることが、ミクシィ内のコミュニケーションを加速させています。
以下は「イイネ!」と「コメント」が入り乱れているフォトの例。


f:id:kyoro353:20101013024640p:image

画像は周りの人の名前が見えないように小さくしています。




twitterより井戸端感のあるミクシィのコミュニケーション
井戸端感のあるコミュニケーションといえばtwitterを思い浮かべますが、twitterとボイスを両方楽しんでいる人と話していると「twitterよりプライベートで集まってる感が強い」という話をよく聞きます。
僕はその原因が「感情の表現手法」にあると思っています。
ボイスへの返信やイイネ!は、タイムラインの中でスレッド形式に膨らんでいく形になっており、発言を元にして友人たちが集まってワイワイ言っている様子が見て取れるのです。(知り合いだけどマイミクじゃない人との絡みにも参加できて面白い)
また、twitterにはFavorite機能がありましたが、あくまで「お気に入り」機能であり、相手に好感を伝える手法ではありませんでしたし、好感を抱いた事を他人に示すことを前提にしたコミュニケーションではありません。
ボイスやフォトで行われている「井戸端に友達が集まってワイワイしている感覚」が、ミクシィのコミュニケーション体験を向上させているのだと思います。


「一緒に使ってる」ということが伝わる


最後にミクシィは、「一緒に使ってる感」が凄くいいです。
別の言い方をすると「誰かが自分の話に乗ってきてくれる」感が凄くいいです。
一般的に「自分の何気ない話」に乗ってきてくれる人がいると、話が盛り上がるし嬉しいですよね。
そのあたりも、ミクシィでのコミュニケーションを楽しくさせているんだろうなと思います。
今、一緒に使ってる感と言っていろいろあると思いますが、ミクシィの「今、一緒に使ってる」感は以下の2点によって、作られていると思います。

  • mixiでの会話がそのままリアルを補完する
  • 「イイネ!」を押した人は、そこに居て「自分に興味をしめしている」と分かる


f:id:kyoro353:20101013032140p:image:w400
mixiにはmixi同級生やmixi年賀状なんていうアナログなサービスもあるんです


ITスキルの高いエンジニアの方やアーリーアダプタ、はてな民の皆様はtwitterでの会話とリアルの会話をそれほど区別されていないと思いますし、現に私もそういう人間です。
ブログもtwitterfacebookmixiも対面も、同じ自由度で情報を発信し、受信し、認知することができるかと思います。それは素晴らしい事だと思うし、素敵な時代になったものだなと嬉しく思います。
しかし一方で、同級生や地元の友人など、自分からネットコミュニケーションを活発には行わない人たちとの素敵な出会いや思い出も人生の大切な宝物だと思います。
そういった人たちと気軽につながることができるだけのソーシャルグラフを持っているミクシィって、自分は意外と好きだったりします。
普通だったら疎遠になってしまいそうな、久々に会った友人と「そういえばこの前〜に旅行行ってたよね?どうだった!?」なんて会話で盛り上がったりすると、ミクシィがリアルのコミュニケーションを補完してくれているんだなぁと感じます。


f:id:kyoro353:20101013032141p:image


また、先ほど上で書いた「井戸端感」にも通じるものがあるのですが、みんなで集まってわいわいと盛り上がるのが目で見えるのは非常に楽しいです。
コメントを書く、イイネ!をつけるというのは、発信者だけに向けたフィードバックではありません。
日記やボイス、フォトの投稿に好感の意を示し、自分もそのコンテンツにどんどん乗って盛り上げることで、コンテンツ自身がより良いものに変わっていきます。
1人目のコメントは元投稿の本文に対しての返信だと思いますが、2人目のコメントは元投稿と1人目のコメントに対する返信です。
このように身近な人たちが集い、いつでも盛り上がれる場所って、面白いと思いませんか?






ツイッタ―との比較


よく比べられる、ツイッタ―とミクシィですが、違いは以下の3点にあると思います。

  • コミュニケーションは、誰かのページで行われる
  • RTなどはなく、知らない人にどんどん拡散していく怖さがない
  • 実名匿名色々あれど、誰が誰だか当事者間は知ってるリアルな友人コミュニティ
コミュニケーションは、誰かのページで行われる


ミクシィのコミュニケーションは誰かのページで行われます。もっと分かりやすく言うと、以下のようになります。

  • コミュニケーションは、誰かのボイス、写真、チェックなどに対して行われる
  • それらのコンテンツはオーナーのいるページに紐付く


ツイッターでは発言はどのスレッドにも紐付かない自由な粒子です。
その粒子はネット上を縦横無尽に駆け巡り、一人歩きすることもしばしば。

炎上がどうこうというのは、システム的な要因だけではないと思うし、twitterであれfacebookであれmixiであれ炎上する可能性はあるのだから、個人的には一概に言えないと思います。

ただ、twittermixiが違うのは、必ずコンテンツページにオーナーがいるということ。
おもてなしの精神ではないけれど、自分のコンテンツとして友人に見せる写真を少しでも楽しいものにしたいと、キャプションをつけたり、工夫することが多いです。
手間ととらえるか楽しみと捉えるかは人それぞれだと思うけど、楽しみたければ楽しめばいいし、もちろん工夫しなくて無加工で投げ込む使い方もできるので、気楽に扱うこともできます。
オーナーがいて、オーナーと気心の知れた人が集って、ワイワイする。
これって、小学生の時に友達の家に集まってみんなでスーファミやプレステで遊んだ感覚に近いなと個人的に思います。

RTなどはなく、知らない人にどんどん拡散していく怖さがない


mixiでのコミュニケーションは友人が基本!なので、無意味にどんどん情報が広がっていくことはありません。
たとえ顔が映ってるような写真を公開したとしても、デフォルトでは友人限定。合言葉を設定したり、共有する友人を選んで公開することなんかも簡単にできちゃいます。
完全ではないけれど、少なくともtwitpicで顔を晒すよりは普通の人にとってはリスクは小さいんじゃないかなと思っていたりします。

実名匿名色々あれど、誰が誰だか当事者間は知ってるリアルな友人コミュニティ


ミクシィは完全に実名かと言えばそうではないし、かといって匿名でもない。
ただ、唯一確かなのは、多くの場合、その名前が何であれマイミクになった人がどういう経緯で自分と知り合い、どういう人なのかということをそれなりに把握し、納得した上で友人になっているということ。
別にアニメキャラのような名前の友人であれ、中の人は誰だかわかってる。
そんな感じが個人的にはしています。




ミクシィの楽しみ方


最後に僕なりのミクシィの楽しみ方を紹介したいと思います。

  • 楽しむための準備
    • 「新着情報」を見る
    • マルチポストなど、見たくないボイスは非表示にもできる
  • 楽しみ方
    • 写真をたくさんアップする
    • 「イイネ!」をつけて好感をアピール
    • 話題に自分も乗ってみる
楽しむための準備


ここは本当に書いてある通り。
ミクシィにも現在は「新着順で見る」というモードがあり、友人の更新情報をコンテンツの種類関係なく一覧して眺めることができる。
新しい更新なんかを追っているだけでも楽しい。
また、twitterマルチポストしている友人のボイスなどは非表示にすることもできる。
twitterとすみ分けて使っている人には便利な機能なので、一度試してみるのもおすすめです。

楽しみ方


f:id:kyoro353:20101013052359p:image:w400


個人的にはフォトとかボイスがおすすめ。
ミクシィのフォトは容量も無制限!一度に200枚ウェブから一気にアップロードできたり、コメントやイイネ!などの友人とのコミュニケーション機能も充実しているから「日記は書かないんだけど」という人でも、文字以外のコンテンツで友人とつながることができる。
顔が写ってるようなプライベートな写真も、気ごころが知れてる人に向けてどんどん公開できるので
気に入ってます。
ボイスはtwitterとはまた違う空気が漂っていて、twitterをやらない層や、リアルに近い文化の人たちの「プライベートなおしゃべり」「井戸端会議」に近い感覚を得ることができて、これはこれで楽しかったりします。
フォトボイスという、フォトをつけてボイスを投稿する機能もあって、そこに上がってくる写真なんかもtwitterとは違う面白さがあったりします。



というわけで


日記だけのコミュニケーションだった3年前とは違った楽しさが、今のミクシィには戻ってきた感じがしています。
チェックやアプリ、mixi Graph APIの公開なんかでプラットフォームとしての可能性も見えてきて、デベロッパーの遊び道具も徐々に充実してきています。
mixi(笑)」という言葉だけで切り捨てちゃうのは勿体無いと思うので、よかったらぜひ一度、今のミクシィも覗いてみて頂ければ嬉しいです!><

追記:あ!ごめんなさい><。


ということで、なんかfacebook関連の話題や人々が殺伐としてきて、なんだか心が痛かったので「みんなサービスやお互いに偏見を持ったり疑いあったりせずに、いいものは認めあってWebを楽しくしていこうよ!」という思いを込めてこのエントリーを書きました。


元記事:
id:amachangフェイスブックが面白い」
http://d.hatena.ne.jp/amachang/20101011/1286805813


id:amachangさんの「自分が面白いと感じた事をどこまでも素直に伝えたいんだ!」という姿勢にすごく感動して、id:amachangさんの記事の体裁と文章をお借りしながら自分の大好きなmixiについて語ってみました。
行き過ぎた表現や、至らない記述、不快を誘う部分があればすぐに記事を取り下げようと思いますので、ご指摘ください。
素敵な元記事を、どうもありがとうございました。


ご覧のようにmixiとfecebookには共通する部分も多くありますが、コンセプトが違うところや、ソーシャルグラフ、コミュニケーションの違いなんかも多くあります。
それどころかブログに通じる部分やtwitterに通じる部分、色々あると思います。
でもこれは、それぞれのサービスが「いかにユーザのコミュニケーションの価値を最大化させるか?」という命題に真剣に取り組んだ結果だと思うのです。
私はfacebook好きですし(あんまり使いこなせてないけど^^;)、twitterも好きですし、mixiも大好きです。



人生における財産の一つに、「出会い」というものがあると思います。
その出会いの形は様々で、偶然な出会いも少なからずあると思いますが、大部分はコミュニケーションを通して作り上げたものではないでしょうか。
facebookにしろtwitterにしろmixiにしろメールにしろskypeにしろ、コミュニケーションツールを用いて作り上げたソーシャルグラフや価値観、共有した時間の記憶は、はかけがえのない大切なものです。
ですから、母校や地域、職場に愛着を感じるのと同じように、サービスやツールにも愛着を感じていたいなと個人的には思うのです。


「〜はダメだ」「〜(笑)」なんて寂しいことを言わずに、それぞれの価値観を認めて、お互いの素敵なところを伸ばしていきたいなと思いました。
良いものは良い!素敵なものは素敵!
偏見ってもったいないよね!

コーヒーまみれ

会社のコーヒー豆のストックが無くなったので買出ししてきた。
萌香たんの横には賽銭箱が設置してあり、利用者の人に寄付して頂いたお金で豆を購入し、運用している。
今回は1万円分の寄付があったのでがっつり豆を購入。多すぎワロタ。
重い、これ会社持っていくの大変だな(^^ω;)
いくらお金が集まっても、高いコーヒー豆では無く、コンビニで買えるレベルのしごく普通の豆を買うようにしている。
萌香たんの提供するコーヒーはもはや会社生活における日常であり、それなりの品質のものを、長く、安定して提供できることが重要だと考えるからだ。
たまに、らいちゃんが美味しい豆を買ってきてくれるので、そのコントラストを楽しみにすることもできる。
財源が尽きて、まずいコーヒーを飲むことも無い。
アリとキリギリスだとアリ戦法。


今日も萌香たんは原宿のどこかで頑張っている。

f:id:kyoro353:20091013000213j:image

香川旅行2日目:恐るべしアート王国香川

おはやっほー!きょろです♪
今日は香川旅行レポートの続きをまとめたいと思います♪

f:id:kyoro353:20090922073802j:image:w450
朝ご飯はもんじゃ母の手作りベーグルサンド!おいしいです。


f:id:kyoro353:20090922095036j:image:w450
2日目はついに憧れの直島を訪れます。


f:id:kyoro353:20090922095252j:image:w450
こいつなんだし。


f:id:kyoro353:20090922102700j:image:w450
直島にはフェリーで渡ります。
わっふるわっふる(^^ω)約50分の船旅です。


f:id:kyoro353:20090922120356j:image:w450
ついに直島上陸。
ドッツ オブ セッション!
黄色いかぼちゃこと『西瓜』にご対面です。


f:id:kyoro353:20090922125422j:image:w450
シルバーウィークの直島は、人であふれかえっていました。


f:id:kyoro353:20090922125733j:image:w450
お昼に食べた「アイランズエッグ丼」。
どっからツッコんだらいいのか迷いますが、とりあえずおいしくはなかったです。


f:id:kyoro353:20090922131257j:image:w450
食事がすんだら、お風呂に入りたくなりますよね!
ということで、8月にできたばかりの直島銭湯『I LOVE 湯』を訪れました。
毛穴の隅々まで大竹伸朗を感じるカオス空間でした。象なんだし。


f:id:kyoro353:20090922142826j:image:w450
本日のメインイベント『地中美術館』!!!!!!!!!11
ジェームス・タレルの青いやつには軽く感動を覚えました。
あと、モネすごいです(^^p)


しかし何よりすごいのは、安藤忠雄建築の地中美術館そのもの。
あのかっこよさ、直線美、機能美、シンプルさ、無機質さの中にあるあたたかさは、
どれをとっても刺激的なものでした。


f:id:kyoro353:20090922150411j:image:w450
途中、地中カフェでコーヒーブレイク☆
コーヒーブレイクといいながら、ブルーベリーソーダを飲みました。おいしかったです。


f:id:kyoro353:20090922164827j:image:w450
f:id:kyoro353:20090922165041j:image:w450
楽しかった直島を後にする前に、赤いかぼちゃに立ち寄りました。
こちらは中に人が入ることができ、内部もドッツオブセッションなメディアアート空間となっています。



f:id:kyoro353:20090922195902j:image:w450
夕ごはんは、片山家の客人が必ず連れて行かれると噂の『ねぶか庵』へ!
おいしい!おいしい!超おいしい!
出てくる料理何もかもがおいしすぎわろたwwwwwww
f:id:kyoro353:20090922203801j:image:w450
絶対採算の合っていないハイクオリティな料理に舌鼓をうちながら、
もんじゃともんじゃ弟との楽しい夜はふけていきました。
ごちそうさまでした。


続く

香川旅行1日目:恐るべしスイーツ王国香川

こんにちは!きょろです。
人肌恋しい季節になりましたね><

私はこのシルバーウィークに香川旅行に行ってきました!
今日は旅行の様子をまとめて振り返ってみようと思います。


9月21日
山陽本線で岡山を経由して電車で香川へ。
はじめて電車で渡る瀬戸大橋にわっふるわっふる!
坂出の工場地帯に萌え萌えキュン☆


観音寺駅でもんじゃと合流。
リサリサおすすめのうどん屋「十日屋」でお昼ごはんを食べました。
f:id:kyoro353:20090921124455j:image:w450

ちくわうまい、超うまい!!!!!!!1


腹ごしらえがすんだので、女子高生をwatchするために、観音寺第一高校を訪れました。
f:id:kyoro353:20090921131632j:image:w450
観音寺第一高校の制服は、みなみけの長女の制服と同じでした(^^ω)


その後、観一生御用達と噂の「山田牛乳」でアイスを食す。
f:id:kyoro353:20090921134101j:image:w450
f:id:kyoro353:20090921134610j:image:w450
このボリュームで350円!!しかも抹茶もアイスも超おいしかったです。


急に浜辺を走りたくなったので、近くの有明浜へ。
青い海、蒼い空、コントラストやばいです。
f:id:kyoro353:20090921142951j:image:w450
気持ち良さそうなので思わず海に入ったところ、高波におそわれてジーパンがびしょびしょに。
乾くまで近くのベンチでひなたぼっこを楽しみました。
夏って、いいですね。


おなかがすいてきたので、本日2度目のスイーツを食べに「北欧館」へ。
f:id:kyoro353:20090921153627j:image:w450
女子高生メイドさんには残念ながら会えませんでしたが、おいしいケーキとコーヒーをいただきました。


f:id:kyoro353:20090921163951j:image:w450

まだまだ夏の香り漂う9月、
讃岐平野は緑にそまっていました。


一通り観音寺市を満喫したので、もんじゃのご実家へ。
今日の夕ごはんは有り明浜で芋煮会とのこと!テンションMAX、Adobe MAX!
f:id:kyoro353:20090921174830j:image:w450
芋煮に白玉が入ってるのには驚きました。超うまい!
f:id:kyoro353:20090921180658j:image:w450
有り明浜から見る夕日に、僕は少し泣いた。


おうちに帰ってから、みんなで宴会!
目の前で揚げた天ぷらを肴に、おいしいお酒をいただきます。なんて幸せ(^^p)
f:id:kyoro353:20090921203251j:image:w450
もんじゃのお母さん手作りの、栗の渋皮煮をいただきました。
渋くない!うまい!
f:id:kyoro353:20090921223701j:image:w450


宴会の最後は、長谷川先生お手製のシフォンケーキをみんなでいただきました。
どんだけスイーツ食ってるんだ俺。
f:id:kyoro353:20090921225052j:image:w450


47度のお風呂に入り、疲れをとったあと、幸せに眠りにつきました。
スイーツ王国香川を満喫した1日でした。


続く

メディアアート空間を自宅に作ってみた(笑)

こんばんは!久々のエントリーです(^^ω)
皆様元気でお過ごしでしょうか?

さて、今日は前々からやってみたいなーと思っていたプロジェクターの床投影&メディアアートを、深夜の妙なテンションでついカッとなって作ってみました!

f:id:kyoro353:20090926004602j:image

前にプロジェクタがほしくなり、ジャンクで買ってきて直したものがあったのですが、それを本棚の上に設置。鏡を養生テープで固定して反射させ、床に投影しています。
思ったより上手くできました。自宅にお手軽メディアアート空間が誕生です!


ためしにiTunesのビジュアライザを表示してみましたが、なんともカックイイ!
思わず調子に乗ってマルチタッチインタフェース(笑)の真似事をしてみました。
ポスターは友達のモリキチがノリで作ってくれました!(モリチェキさん感謝!!)
詳しくは動画でどうぞ。

次は床投影ディスプレイで動くアプリケーションの開発に入りたいと思います。
わっふるわっふる!!

TokyoCabinet+TokyoTyrantをFreeBSDにインストールしてみたのでメモ

ネギ振りの負荷低減のためmemcachedを一部に使用していたのだけど、永続化させたいデータも出てきたのでTokyoCabinet+TokyoTyrantを導入してみることにした。
インストールはいつものお決まりのパターンでいけた。とても簡単。
ただしFreeBSDではgmakeを使うところだけ注意。
以下、インストールのメモ書きを残しておきます。

■TokyoCabinet

% wget http://tokyocabinet.sourceforge.net/tokyocabinet-1.4.19.tar.gz
% tar zxvf tokyocabinet-1.4.19.tar.gz
% cd tokyocabinet-1.4.19
% ./configure
% gmake #makeだと失敗したのでgmake
% su
# gmake install

■TokyoTyrant

% wget http://tokyocabinet.sourceforge.net/tyrantpkg/tokyotyrant-1.1.24.tar.gz
% tar zxvf tokyotyrant-1.1.24.tar.gz
% cd tokyotyrant-1.1.24
% ./configure
% gmake #makeだと失敗したのでgmake
% su
# gmake install

■起動
# /usr/local/sbin/ttservctl start #ポートは1978

■停止
# /usr/local/sbin/ttservctl start

あとは、普通にmemcachedクライアントから使えたりして超便利!!

新生Flash「ネギ振りカウンタ」とネギ振りグラフ

こんにちは、きょろです。
「春眠暁を覚えず」とは良く言ったもので、ここ数日は朝も夜も眠くてたまりません!
コーヒーの大量摂取で眠気を抑えながら、仕事から帰って少しずつmixiアプリを改良する日々です(笑)


さて、先日OpenSocialのお勉強を兼ねてお遊びで作ったmixiアプリ「ネギ振りカウンタ」ですが、なんと気づけばインディーズアプリランキング1位!利用者はまさかの1900人超えという、信じられないくらいの大盛況を頂くことができました!!
オープンβの参加者比で言うと、現時点で約2.5人に1人がご利用頂いている計算になります。


【ネギ振りカウンタ】
http://platform001.mixi.jp/view_appli.pl?id=680


またmixiアプリをご利用で無い方は前回のエントリーをご覧頂ければ幸いです。


mixiアプリで「はちゅね」さんのネギ振りアプリ作ってみたよ!】
http://d.hatena.ne.jp/kyoro353/20090408/1239213305


私もいまだに何が起こったのか全く信じられません!
まさか30万回以上もネギが振られる日がくるなんて…(笑)


ネタで作ったヤシガニな習作アプリでしたが、それなりに愛情をこめて作った作品ですので、皆様に使って頂けて心から嬉しく思います!
ご利用頂いたみなさま、どうもありがとうございました!!


下記サイトでも取り上げて頂いたみたいですので、この場を借りてご紹介させて頂きます。


【ねとらぼ:「ネギ振りミク」から「やる夫時報」まで mixiアプリ、200以上公開中】
http://www.itmedia.co.jp/news/articles/0904/17/news058.html

【出た!mixiで初のボカロなmixiアプリ「ネギ振りカウンタ」が登場】
http://vocaloid.blog120.fc2.com/blog-entry-3273.html


実はアプリをリリース後、少し忙しくバタバタしていたため、作者自身、全くネギ振りアプリを開いていなかったのです(笑)
ネギ振りアプリのサーバは私のアパートに設置してある自宅サーバなのですが、「最近どうもルータの光り方がおかしいな…」と疑問に思い、mixiアプリオープンβを開いてびっくり!
なんと利用者が1000人を突破していたのです。


「こ…こんなお恥ずかしいアプリを1000人以上の方々に使って頂いているなんて申し訳なくてたまらない!!(≧_≦)」


と思い、もう少し見栄えの良いものにバージョンアップさせたいという気持ちが一気に強くなりました。

f:id:kyoro353:20090423000642p:image

次はFlashで作るしかない!!と考えた私は、そこからFlashの勉強をはじめ、見よう見まねで酷いコードを書きながら、なんとか動く「新生はちゅね」を作りリリースさせて頂きました。
(丁寧にFlashのHowToを教えてくれたid:takimoどうもありがとう!!)


当初はバグを仕込んで障害を起こしてしまいましたが、利用者の方々からの暖かいご報告とご協力のおかげでバグを解消し、なんとか安定動作に持ち込むことができました。


Flash版リリース後はリアルタイム更新機能など、地味な改良を続けながらUIの向上に注力しました。
すると、ネギ振りの上昇率がどんどん上がっていきました。

f:id:kyoro353:20090423002049p:image


上のグラフは時間経過とネギ振り状況を解析したものです。
色々な出来事が起こりましたが、それらが面白いくらい反映されているグラフになっています。
特にFlash化によるUIの向上は劇的な変化を与えてくれたように思います。
皆様にとって少しでもネギが振りやすく、そして、楽しめるようになっていれば幸いです。


これだけの多くの方々にアプリを利用して頂き、作者としてこれ以上嬉しいことはありません!!!
この場を借りて皆様に、心から厚く御礼申し上げたいと思います。
どうもありがとうございました!!!


現状では単なるネタアプリの枠を出ないと思いますので、今後はネギ振りコミュニケーション(ネギニケーション)に特化したもっとソーシャル的な要素やゲーム性を追加していこうと思います。


精一杯がんばりますので、今後とも、どうぞよろしくお願いいたします!