2011年5月30日月曜日

Cookpad 開発コンテスト24の表彰式に行ってきた

このエントリーをはてなブックマークに追加
先日,Cookpad株式会社主催の第2回 開発コンテスト24に参加しましたが,光栄なことに第2位を受賞しましたので,白金台にあるCookpad株式会社にて開催された表彰式に参加しました.

また,折角の機会なので,事務局様にお願いして事前にCookpadのオフィスを見学させてもらいました.(見学を快諾していただきありがとうございました)

▼閑静な住宅街を抜けると,そこはおしゃれなオフィス入口

▼オフィス横にある暖かい雰囲気の談話&ミーティングスペース

▼噂の温水器 存在感がすごいですw

▼オフィス横のまったりくつろぎスペース

▼くつろぎスペースにはウクレレやら各種ボードゲームやら

▼くつろぎスペースからの外の風景 絶景!

▼各種お茶・お菓子も準備万端

▼表彰式風景


Ustreamで配信していました.ずっと公開されているかわかりませんが,下記から表彰式の映像を見ることができます.
USTREAM: 24 contest

▼壁一面にはホワイトボード(ワーキングスペースは撮影禁止でしたが同様に一面ホワイトボードです)

▼懇親会の料理 オシャレすぎておいしすぎて困りました

▼お土産のCookpadエコバッグ!かわいい

▼ワーキングスペース
社員の人たちのデスク周りは撮影禁止だったのですが,設備的にも非常に良い印象を受けました.特にイスがリープチェアだったのが素晴らしいです!!働く人のことを大切に扱い少しでもよい環境を,という心遣いを感じることが出来ました.

■感想
Cookpadの環境・仕事・人はどれをとっても素晴らしく,一気にファンになりました.
このような機会を設けてくださったことに感謝いたします.

そんなCookpadに対して僕からのお願いは二つ.

・料理に興味がある女性には,Cookpadはかなり愛用されていると思いますが,料理に興味がない男性を巻き込むようなサービス展開をしてくれればと思います.(もちろんこんなことはとっくに社内で議論されているとは思いますが)

・開発コンテスト Season Ⅲ 期待しております!

[スライド]


[関連記事]
ayakix-lablog: 第2回 開発コンテスト24に参加しました

2011年5月9日月曜日

AndroidでBluetoothのアドレスを取得する

このエントリーをはてなブックマークに追加
Bluetoothを使う際にアドレスを取得しようと思ったのですが,ハマってしまったのでエントリにします.

環境は下記の通りです.
HW:HTC Desire HD
OS: Android 2.2

Androidでは,ローカルのBluetoothデバイスを利用するためにBluetoothAdapter APIが用意されています.

プログラムで実行したいことは,BluetoothAdapterオブジェクトを用いて,Bluetoothを利用可能状態にした後,そのアドレスを取得する,といった動作です.

下記プログラムでは,onCreateメソッド内にて,BluetoothAdapterオブジェクトを生成し,そのisEnabledメソッドにより,BluetoothがON or OFFを判断します.そして,OFFの場合は,Intentを発行後,BluetoothをONにします.
その後,getAddressメソッドを呼び出しアドレスを取得します.

しかし,このgetAddressメソッドの戻り値は"UNKNOWN"となり,ここでエラーが発生します.

この問題を解決し,正しいアドレスを取得するには,onActivityResultメソッドをオーバーライドし,この中で,getAddressメソッドを呼ぶ必要があります.

初めはonCreateメソッド内で全処理を行っていたのですが,BluetoothをONにするのを待つことなく,getAddressメソッドが呼び出されたことが原因かと思います.

そこで,RESULTを返すようにし,BluetoothをONにした後に呼び出されるonActivityResultメソッド内で処理を行います.

※このプログラムではBluetoothをOFFにできないので,試した後は手動でOFFにしてください.
package jp.ayakix;

import android.app.Activity;
import android.bluetooth.*;
import android.os.Bundle;
import android.util.Log;
import android.content.Intent;

public class BluetoothTest extends Activity {
private static final int REQUEST_ENABLE_BT = 3;
private BluetoothAdapter bAdapter;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

bAdapter = BluetoothAdapter.getDefaultAdapter();

// デバイスがBluetoothを備えているか?
if (bAdapter == null) {
Log.d("MYTAG", "Device does not support Bluetooth");
} else {
// Bluetoothが利用可能状態か?
if (!bAdapter.isEnabled()) {
// 利用可能状態でない場合=>利用可能にする
Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
}

// アドレスを取得できない
Log.d("MYTAG", bAdapter.getName());
Log.d("MYTAG", bAdapter.getAddress());
}
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_ENABLE_BT) {
if (resultCode == RESULT_OK) {
Log.d("MYTAG", "Device can use Bluetooth");
// アドレスを取得できる
Log.d("MYTAG", bAdapter.getName());
Log.d("MYTAG", bAdapter.getAddress());
} else if (resultCode == RESULT_CANCELED) {
Log.d("MYTAG", "Device cannot use Bluetooth");
}
}
}
}