back to home
ホームCONITについて業務内容CONIT LABS.採用情報お問い合わせ
  ホーム > CONIT Labs.
■CALENDAR■
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30   
<<前月 2010年09月 次月>>
■NEW ENTRIES■
■CATEGORIES■
■ARCHIVES■
■LINK■
■PROFILE■
■OTHER■
  • RSS 2.0
  • 処理時間 0.329037秒
  • なかのひと

 

弊社ブログは2010年4月26日からURLを変更いたしました。
ブックマークやRSSで登録されている方は、下記URLへ変更願います。
http://www.conit.co.jp/blog/
今後とも宜しくお願い申し上げます。
2010年4月26日 株式会社コニット

ドコモ、AUのAndroid携帯向けの開発環境
こんにちは、いちかわです。

今日から、Sony Ericsson XPERIA X10が発売されましたね。
そして、先日ついにAUからもSHARP JN-DK01発表されました。

続々と日本の市場にAndroid携帯が投入されてくるのは、アプリを開発する側からすると、期待がふくらむのと共に、開発したアプリケーションがすべてのプラットフォームで動くかが大きな悩みとして出てきます。

しばらくのブログネタとして、新たに発表されたAndroid携帯を開発するための環境作り、既存アプリの動作確認について書いていきたいと思います。

第1回として、シミュレーターのadd-onを追加するところから解説します。

まずは、XPERIA X10 から。
Sony Ericssonのサイトからツールをダウンロードしましょう。
Sony Ericsson Xperia™ X10 add-on for the Android™ SDK

AVDを作成
1.ダウンロードしたツールを解凍して、Android SDKの中にあるadd-onsの中に丸々コピーします。
2.ターミナルを開いて、「android list target」と入力して、ID番号を調べます。
私の環境だとこんな感じ↓

id: 7 or "Sony Ericsson Mobile Communications:X10:4"
Name: X10
Type: Add-On
Vendor: Sony Ericsson Mobile Communications
Revision: 1
Description: XPERIA X10 Device
Based on Android 1.6 (API level 4)
Skins: WVGA854, X10 (default), HVGA, WVGA800, QVGA


3.ID番号を指定してADVを作成します。
 「android create avd -n X10 -t 7」

次は、SHARP JN-DK01。
Sharpのサイトからツールをダウンロードしましょう。
シャープAndroid開発者向けウェブサイト「SH Developers Square」

AVDを作成
1.ダウンロードしたツールを解凍して、Android SDKの中にあるadd-onsの中に丸々コピーします。
2.ターミナルを開いて、「android list target」と入力して、ID番号を調べます。
私の環境だとこんな感じ↓

id: 6 or "SHARP Corporation:JN-DK01 (Beta version):4"
Name: JN-DK01 (Beta version)
Type: Add-On
Vendor: SHARP Corporation
Revision: 1
Description: SHARP JN-DK01 Add-on Beta version 1
Based on Android 1.6 (API level 4)
Skins: WVGA854, HVGA, WVGA800, QVGA, JNDK01 (default)
Adds USB support for devices (Vendor: 0x04DD)


3.ID番号を指定してADVを作成します。
 「android create avd -n JNDK01 -t 6 --sdcard 128M」

正しく追加されると、Android SDK and AVD Managerに表示されます。


では、早速シミュレーターを起動してみましょう!!
XPERIAの方は、AVD ManagerのStartボタンをクリックすると起動します。


JN-DK01は今のところコマンドからの起動にしか対応していないようなので、ターミナルから起動します。
「emulator @JNDK01 -qemu --cpu cortex-a8」と入力して起動。


iPhoneシミュレーターと比べると起動が遅いですが、見た目は製品のような形となっています。

次回は、既存のアプリをそれぞれのシミュレーター上で動かすまでを解説します。

| http://www.conit.co.jp/labs/index.php?e=325 |
| Android | 11:23 AM | comments (1) | trackback (0) |
DevFest 2010 Japan に参加してきた
こんにちは、いちかわです。

3/11に開催されたgoogle主催のDevFest 2010 Japan に参加してきました。

このイベントは、googleが開催するイベントの中では、
・Google I/O
・Google Developer Day
・Google DevFest
と、3番目に規模の大きいイベントとのこと。

イベント名にJapanと書かれるぐらいだから世界中で行われているのかとググってみたら、インドメキシコ (探せばもっとあるのかもしれない)でも開催されたみたいですね。

日本で行われたのは初めてらしく、募集から実際の運営まで色々と大変だったみたいです。
苦労話は書かれていませんが、開催者のブログ

今まで参加してきた他のイベントと違って募集の所からいろいろな工夫がありました。
参加できる資格を得るには、先着?名でも、紹介された人だけでもなく、クイズに答えて点数が良かった人が選ばれるとか、技術者心をくすぐる方法でした。
クイズ自体も、簡単な物から実際にプログラムを書かなければならないものなど、いろいろな種類が用意されていました。
そんなわけでコニットでは、応募した二人が(私を含め)参加しました。

場所は汐留という事で、先日迷子になったばかりの場所で多少の不安がありましたが、まんまと迷子に。。。

本日予定されているプログラムは手書きだったり、手作り感が漂うイベントです。


会場に入ってみるとすでにすごい人数。最終的には400人ぐらいの参加者があったそうです。
真ん中ら辺に座り、イベントが始まるのを待ちます。


仕事で最後まで参加できなかったため、自分が参加したセッションは3つ。
・たのしい Android: カスタム UI でAndroid アプリにワクワク感を加えよう
・Google App Engine - 分散クラウドコンピューティングの新しいパラダイム / リアルタイムソーシャルアプリケーション開発
・モバイルマッピング: Google Maps を利用した様々なモバイルマッピングの手法

どれも興味深く聞かせて頂きました。

しかし、このイベントのさらに良いところは、オフィスアワーというのが設けられており、各セッションのスピーカーや、googleエキスパートの人に直接話ができるという事です。
mixi向けのアプリでgoogle app engineを使っているわけですが、分からない事もありましたので直接GAE中の人に相談をしました。
GAE中の人は非常に親切で、イベント後も引き続き相談させて頂いています。
話を聞くだけではなく、このように相談できる機会を与えてくれるイベントは本当に助かります。

短い時間でしたが、色々と楽しませて頂きました。

ちなみに、汐留駅から離れた場所だったので、近くに食事を取るところがありません。
そんなわけで、会場内の弁当屋は大盛況。


googleが用意する弁当はどんなもの??と勝手に妄想しましたが、何種類か用意してあったうちのエビフライハンバーグ弁当を食べました。
セッションを聞きながら弁当を食べれるという、フランクな感じが良かったです。

| http://www.conit.co.jp/labs/index.php?e=317 |
| 雑談 | 12:18 PM | comments (0) | trackback (0) |
「Sony Ericsson "Create Now Tour in Japan"」に参加してきた
こんにちは、いちかわです。

2/27(土)に開催された「Sony Ericsson "Create Now Tour in Japan"」に参加してきました。

会場はSony本社ビルで、本社を移転してから初めて行ったわけですが、立派なビルでちょっと感動しました。
旧本社があった「御殿山テクノロジーセンター」とはだいぶ違う感じです。

イベントが行われたのはプレス向け(?)みたいなホールで、試写会も出来そうなデカいスクリーンと、天井にはクラブみたいに大量のライトがぶら下がっていました。きっと、色んな発表会で使われるんでしょうね。

しかし、せっかくのイベントなのにツイッターのタグとか用意されていない。。自然発生的に「#xperia」にみんなコメントを寄せてます。

イベントが始まり、最初にXperiaの紹介が簡単にあり、その後Sony Ericsson(SE)の方(外人さん)から開発者支援プログラム「Developer World」、アプリ/コンテンツ販売サイト「PlayNow」の話がありました。
海外向けのPlayNowでは今のところAndroid以外のSE端末向けのアプリをダウンロードできるとの事。今後、Android向けにも対応するらしいです。
ちなみに、PlayNowはドコモマーケットとバッティングするのかと思いきや、日本ではあくまでもアプリの紹介程度で、アプリの販売は行わないという話です。
http://www.sonyericsson.co.jp/playnow/

Android向けの音楽配信「mora touch」も予定しているらしく、Appleに対抗する準備は着々と進んでいると言う事でしょうか。
個人的には、どちらも仲良くしてもらって、iTunesでもSMEのアーティストの曲がもっと買えるようになったら最高なのに。

開発者向けのイベントという話でしたが、それほど開発者向けの情報は得られなかった感があります。

そんなわけで、Xperiaのタッチ&トライに期待が高まります。
アナウンスがあって、じゃー触りに行こうと席を立ったら、真後ろの席に知り合いの人が居たので、声をかけて少し話をしたら完全に出遅れてしまいました。。。
50台が用意されていたのですが、参加者が80人ぐらいでしたので、私と同様に早く端末が空かないかと会場内をさまよう人が多数。

皆さんもこの時間を楽しみにしていたからか、なかなか手放さない。
30分ほど待ってやっと手にする事が出来ました。

ソフトウエアキーボードはQWERTYのみに対応(フリックは無い)と言う事で「POBox Touch」が搭載されている。
SE(日本)の方の話では、日本向けにソフトウエアキーボードのカスタマイズをかなりしています!!と言う事で、母音「A」「I」「U」「E」「O」は他のキーよりも少し幅が広めになっていて、入力がしやすいらしいです。


残念ながら写真は日本語入力モードではないので、分からないですが。。(スミマセン・・)

その他、目玉の「Timescape」と「Medascape」、「Infiniteボタン」もコンセプトとして面白く、UIもAndroidとは思えない新しい感じがしました。
ここまで、豪快にUIをいじっているせいか、やはり最新のAndroid 2.0ではなく1.6が搭載されています。しばらく待てば、2.0へのアップデートが出るのかな??

Android 1.6が搭載されているって事は、弊社でリリースしているEatNowが動くはず!
なので、インストール(笑)して動かしてみた。


バッチリですね〜(笑)

ドコモからの発売という事で、AUユーザーの私としては乗り換えるかどうか悩みどころです。

| http://www.conit.co.jp/labs/index.php?e=307 |
| Android | 11:50 AM | comments (0) | trackback (0) |
英語って
こんにちは、いちかわです。

私は、Facebook向けのアプリケーションである「EatNow」の開発をメインで行っています。
必然的に会社にいる間ずっとFacebookを立ち上げている事が多いです。

Facebookの面白さの1つとして、世界中の人とつながる事が出来ることがあり、Wallやチャットを使って相手の人とコミュニケーションを取る事が簡単にできます。

一日中Facebookを立ち上げている私の場合、結構頻繁にチャットで話しかけられる事が多いです。
そんな訳で、今日は2回ほど友達登録している人とチャットで話をしました。
どちらのFriendも今日初めてチャットをしたのですが、向こうから基本的なあいさつで話しかけてきます。
あいさつは「Hello」であったり、「Hi」であったり、簡単な挨拶から始まるので、私も同じように返事をします。
中には、「konichiwa」とか、「hajimemashite」とローマ字で挨拶してくる人もいます(これって、すごい事だと勝手に思ってる)

ちなみに、日本でも言葉を略して書いたり、ネット用語的な言葉を使ってチャットをする事が多いですが、海外でもそれは当然のように行われているわけで。。。
例えば、挨拶の次の言葉として「How are you?」と続くのですが、人によっては「How r u?」と送ってきたり。
実際に発音を聞けば分かるのですが、文字だけで見ると「ハウ ル?」などと一瞬悩んでしまいますよね。

なぜか「OK」も「Okay」と書かれたりします。(長くなってるじゃん!、って突っ込みたくなる)
「cause」は、「coz」。。なんだか、発音が分からない単語だったら、何を書いているのか分からない。。。

単語だけではなく笑っている時を表現する言葉も、私としては「ははは」なら「hahaha」なのかと思っていたら、「hehehe」ってみんな書いてますね。
これは、結構意外でした。けど、今では私も「hehehe」って書きますけど(笑)

忙しい時にもチャットが来たりする事もありますが、勉強になると思ってなるべく返事はするようにしています。
もちろん、スラスラ英語が出てくるわけではないので、google翻訳や、スペースアルクを駆使しながらですけど。

最後に、隣に座ってる阿久津に教えてもらったアプリで、スペースアルクが出しているボキャブランキングPowerWordsが結構面白いです。
ランキング形式になっているので、ついついハマってやってしまいます。

| http://www.conit.co.jp/labs/index.php?e=295 |
| 雑談 | 07:23 PM | comments (0) | trackback (0) |
ブログディナーに参加してきました!! その後
こんにちは、いちかわです。

昨日のブログで、ブログディナーでロジクールさん提供のスピーカーをゲットした事を書いたのですが、その日は朝慌てて家を出たので、スピーカを忘れてしまったのです。

なわけで、今朝持ってきたので商品を簡単に紹介したいと思います。

Rechargeable Speaker S315i

まずは箱。意外とデカい。そして少し重い(バッテリー内蔵だから)



中身を取り出すと、説明書以外はACアダプターと本体のみ。

余計な物が無くて、良い感じです。

iPhoneを装着した。

後ろにいるサボテンは、渋谷ラボのお祝いで頂いたもの。(今年入ってから水あげたっけ??)

iPhoneはエアジャケットとか、シリコンジャケットなど、おもっきりゴッツイカバーを付けていない限り、問題なく装着できます。
実に使い勝手を考えた設計ですね。
私が家で使っているLogitecのスピーカー(LDS-PFI01)は、iPhoneがぴったりハマってカッコいいのですが、わざわざカバーを外す必要があって、めんどくさい時はiPhoneのスピーカーで済ませる事が多いです。

nanoを装着してみる


バッテリー内蔵なので、充電すれば最大20時間再生できるとの事で、アウトドアでも使えます。
また、3.5mmステレオミニジャックを搭載しているので、他のプレイヤーをつないでもスピーカーとしてバッチリ使えます。


| http://www.conit.co.jp/labs/index.php?e=276 |
| 雑談 | 10:23 AM | comments (0) | trackback (0) |
ブログディナーに参加してきました!!
JavaScriptのデバッグをしていたら、nakajima氏に突如「ブログディナーに行くぞ」的な誘われ方をして、デバッグ半ばの状態で会社をあとにしました。

そんなわけで、昨日は毎月開催されているブログディナーに初参加してきました。
開催場所は五反田のMAYA(インド・ネパール・チベット料理)でした。(毎回ここでやっているらしい)

他のお客さんも普通にいますが、お店の一角を陣取って、食って飲んでの状態です。
遅れて参加したのですが、入り口で参加費3000円(飲み放題、カレーおかわりOK)を払って席に着きました。
途中から来る人、途中で帰る人などなど、なんだかんだで20〜30名ほどいたのではないでしょうか。

席について早速ビールを注文。
そして出てきたのが、お通しなのか前菜なのかよく分からないけど1皿。



続けて出てきたのが、メインのカレー!!

ナンがデカいぞ!!
ダイエッターな二人にはちょっと量が多すぎる感じで、全部食べきれませんでした。。(すみません)

ビール2杯、グラスワイン1杯飲んだところで、ノートPCが回ってきました。どうやら、自分のブログをブラウザに表示しなければならないようです。
しかし、今日の趣旨は弊社とフェザンレーブ(Fais un REVE)さんで提供しているサービスであるEatNowをブロガーの皆様に知って頂こう!ですので、当然EatNowを開いて次の人に回します。
次の人と言ってもnakajima氏なので、弊社とジェイズアヴェニュー(J's Avenue)さんと共同で開発したフーフーミントンの紹介ページを開いて、次に回します。
はい。連続して自社の宣伝です(笑)

二人ともお酒を飲んではいても、しっかり紹介できたと思います。(私の場合、お酒が入らないと紹介できませんが・・)
他のブロガーの方が説明している最中に「チャチャチャチャ・チャンチャンチャン・チャ〜ラ〜ラ〜・・」と、聞き覚えのある音楽が聞こえてきたり(早速ダウンロードして頂いたようで)、評判は良かったのではないかと思います。

今回はなんと、ブログの紹介が終わると、じゃんけん勝ち抜き商品ゲット大会が始まりました!!
商品を用意してくれたのは、ロジクールさんでした。
2つ用意していたのですが、なんと2つめの商品をゲットしました!!!
(カミさんとのジャンケンでは、いつも負けて皿を洗っていますが、今日はなぜか強い)

ゲットした商品は、iPhone、iPod用のスピーカーです。

Rechargeable Speaker S315i
すごいです。すばらしいです。ロジクールさん太っ腹すぎます。
これで、いつも無音の弊社もnakajima氏のmusicで賑やかになる事でしょう。

人数が多かったので、他に参加された皆様すべてを紹介する事が出来ませんが、名刺を交換させて頂いた方やtwitterで見つける事が出来た方を紹介します。
airoplane
FeedTweet
Drift Diary XIII
nobilog2(林 信行(Nobi)さんの)
Harupiko Diary
iPod Style
Masafumi's Blog
Lhuga's blog
Kreab and Gavin Anderson
BlueBridge
日本経済新聞出版社
伊藤忠テクノソリューションズ
binWord/blog
Logicool

| http://www.conit.co.jp/labs/index.php?e=275 |
| 雑談 | 01:11 PM | comments (0) | trackback (0) |
Amazon Relational Database Service (Amazon RDS) を使う
コニットでは、提供しているサービスでAmazon Web Service(AWS)や、Google App Engine(GAE)を使う事があります。
AWSを使う時にデータベースを必要とする場合は、EC2上にデータベースを構築しますが、去年Amazonより発表があったAmazon Relational Database Service(Amazon RDS)について今回は触れたいと思います。

Amazon RDSとは簡単に言うと、通常のRDBをサービスとして提供する物である。(現時点では、MySQL5.1のみ)
このサービスを使う事により、EC2上にサーバーを構築した後にMySQLをインストールして、運用の設定もしてといった必要が無く、EC2上に新しいインスタンスを追加するような手軽さでデータベースを構築することが出来ます。

では、実際に構築の手順を説明します。
(以前にEC2などのツールを利用したことがあることが前提で進めます)

1.  AWSアカウントがAmazon RDSを使えるようにします。
http://aws.amazon.com/rds/にアクセスし、画面の説明に沿って登録を完了させます。

2. コマンドラインツールを入手
Amazonのサービスを利用する際、だいたいコマンドラインからの操作を行います。
(EC2やS3向けには便利なGUIのツールが出ている)
Developer Toolsからコマンドラインツールをダウンロードし、解凍します。

3. コマンドラインで操作する為のパスを設定(Mac 0S Xの場合)
export AWS_RDS_HOME=/ツールまでのパス/RDSCli-1.0.005
export PATH=$PATH:$AWS_RDS_HOME/bin

3.1.1 キーの設定
/RDSCli-1.0.005/credential-file-path.templateをコピーして、以下の部分を自分の環境に合わせます。
(今回は同じディレクトリー内に、「credential-file-path.txt」として作成)
AWSAccessKeyId=自分のAccessKey
AWSSecretKey=自分のSecretKey

設定ファイルを登録
export AWS_CREDENTIAL_FILE=$AWS_RDS_HOME/credential-file-path.txt


3.1.2 動作確認
rds --help

利用可能なコマンドの一覧が表示されれば、設定は完了です。
エラーが出る場合は、「JAVA_HOME」の設定が正しくされていない可能性があるので、こちらを参照


4. DBの作成
今回の環境は、
・5GBのストレージ
・Small DB Instance: 1.7 GB memory, 1 ECU (1 virtual core with 1 ECU), 64-bit platform
・MySQL5.1(これ以外の選択肢は今のところ無い)

4.1 DBインスタンスの作成
rds-create-db-instance ichikawa-instance --allocated-storage 5 --db-instance-class db.m1.small --engine MySQL5.1 --master-username <マスターユーザー> --master-user-password <マスターユーザーのパスワード> --headers
(最後の[--headers]は、結果を表示する時にヘッダーも表示するかを指定する)
実行結果
DBINSTANCE DBInstanceId Class Engine Storage Master Username Status Backup Retention PendingCredentials
DBINSTANCE ichikawa-instance db.m1.small mysql5.1 5 <マスターユーザー> creating 1 ****
SECGROUP Name Status
SECGROUP default active
PARAMGRP Group Name Apply Status
PARAMGRP default.mysql5.1 in-sync

詳細な情報を表示
rds-describe-db-instances --headers
DBINSTANCE DBInstanceId Created Class Engine Storage Master Username Status Endpoint Address Port AZ Backup Retention
DBINSTANCE ichikawa-instance 2010-01-13T02:01:54.980Z db.m1.small mysql5.1 5 <マスターユーザー> available ichikawa-instance.abcdefghijk.us-east-1.rds.amazonaws.com 3306 us-east-1a 1
SECGROUP Name Status
SECGROUP default active
PARAMGRP Group Name Apply Status
PARAMGRP default.mysql5.1 in-sync


5. セキュリティーの設定
5.1 セキュリティーの確認
rds-describe-db-security-groups default --headers

SECGROUP Name Description
SECGROUP default default

デフォルトの設定は、DB Security Groups(default)となっています。
defaultの設定では、外部からのアクセスを許可していない為、設定を変更する必要があります。
セキュリティーの設定方法は2種類あり、
・IPアドレスによる制限
・EC2のセキュリティーグループを適用する
があります。

5.2 セキュリティーの変更
5.2.1 IPアドレスによる制限
この例では、IPアドレスが192.168.1.123のマシンからの接続のみを許可
rds-authorize-db-security-group-ingress default --cidr-ip 192.168.1.123/1 --headers

SECGROUP Name Description
SECGROUP default default
IP-RANGE IP Range Status
IP-RANGE 192.168.1.123/1 authorizing

コマンドを実行してから、実際に適用されるまで少し時間がかかりました。
以下のコマンドで、Statusがauthorizedになるまで待ちましょう。
rds-describe-db-security-groups default --headers

SECGROUP Name Description
SECGROUP default default
IP-RANGE IP Range Status
IP-RANGE 192.168.1.123/1 authorized


5.2.2 EC2セキュリティーグループによる制限
この設定は、どのEC2セキュリティーグループに対して、アクセスを許可するかを設定します。
例えば、mywebserverというセキュリティーグループを許可する場合は、以下のようなコマンドになります。
rds-authorize-db-security-group-ingress default --ec2-security-group-name mywebserver --ec2-security-group-owner-id <Account Numberから"-"を除いた値> --headers
SECGROUP Name Description
SECGROUP default default
EC2-SECGROUP EC2 Group Name EC2 Owner Id Status
EC2-SECGROUP mywebserver <Account Number> authorizing


両方のセキュリティーを設定すると、以下のように設定されている事が確認できる
rds-describe-db-security-groups default --headers
SECGROUP Name Description
SECGROUP default default
EC2-SECGROUP EC2 Group Name EC2 Owner Id Status
EC2-SECGROUP mywebserver <Account Number> authorized
IP-RANGE IP Range Status
IP-RANGE 192.168.1.123/1 authorized


5.2.1 動作確認
MySQLに接続してみましょう

mysql -h ichikawa-instance.abcdefghijk.us-east-1.rds.amazonaws.com -P 3306 -u <マスターユーザー> -p
Enter password: <マスターユーザーのパスワード>
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 483
Server version: 5.1.38-log MySQL Community Server (GPL)

Type 'help;' or 'h' for help. Type 'c' to clear the buffer.

mysql>

無事接続できました!!

データベースを確認してみましょう。
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| innodb |
| mysql |
+--------------------+
4 rows in set (0.19 sec)

後は通常通りの方法でデータベースを操作することが可能です。


最後に、テスト用に作成したDBインスタンスであれば、削除する事を忘れずに!!
じゃないと、ずっと課金されてしまいます(笑)

6 DBインスタンスの削除
rds-delete-db-instance myinstance --skip-final-snapshot true --headers

Once you begin deleting this database, it will no longer be able to accept
connections.
Are you sure you want to delete this database? [Ny]y
DBINSTANCE DBInstanceId Created Class Engine Storage Master Username Status Endpoint Address Port AZ Backup Retention
DBINSTANCE ichikawa-instance 2010-01-13T02:01:54.980Z db.m1.small mysql5.1 5 <マスターユーザー> deleting ichikawa-instance.abcdefghijk.us-east-1.rds.amazonaws.com 3306 us-east-1a 1
SECGROUP Name Status
SECGROUP default active
PARAMGRP Group Name Apply Status
PARAMGRP default.mysql5.1 in-sync

以下のコマンドを入力しても、DBインスタンスが表示されなければ削除は成功です。
rds-describe-db-instances --headers




| http://www.conit.co.jp/labs/index.php?e=273 |
| 実験 | 02:52 PM | comments (0) | trackback (0) |
自分のサービスとTwitterの連携(OAuth)
とあるアプリで、Twitterにも情報を流したい!
しかも、TwitterクライアントからPostした様にしたい!
そんな要望があり、データベースにユーザーID、パスワードを持たせれば良いいじゃん!と言う話もあったが、セキュリティー的にNGでしょって事で却下。
じゃー、毎回ユーザーID、パスワードを入力させればいいじゃん!などと言う話もあったが、ユーザビリティー的にNGでしょってことで却下。

さて、どうしたものかと実装を先送りにしていたら、Davidからの情報でOAuthを使えば大丈夫じゃないとの事で、そのあたりを調べてみました。

Twitterのドキュメントによれば、
oauth/request_token
oauth/authorize
oauth/authenticate
oauth/access_token
を使えと。
元のソースを見るとOAuth Core 1.0 6. Authenticating with OAuthさっぱりわからん。。

次にたどり着いた記事は、gihyou.jpのゼロから学ぶOAuth
この例では、smart.fmを取り上げているけど、それをTwitterに置き換えれば、なるほど流れは理解できました。
簡単に言えば、ユーザー、コンシューマ(自分のアプリ)、サービスプロバイダ(Twitter)が登場人物として存在する。
ユーザー <==> コンシューマー の間で信頼関係(サービスを利用している)ができていて、さらにユーザー <==> サービスプロバイダー の間でも信頼関係ができている。
なので、ユーザーがOKを出せば、コンシューマー <==> サービスプロバイダー間でもユーザーの情報に関して信頼関係ができてもOKではないかと。
これを「アクセス権の委譲」と言うらしい。

さて、実装はと言うと。。。
こちらのサイト twitterでOAuthを使う方法(その1:認証まで)がわかりやすく解説してくれてました。

TwitterのサイトPHPの実装サンプルもありましたので、それを利用して今回はテストしてみます。

・アプリケーションの登録
さっそく、Twitterにアカウントを登録して、Cosumer Token/Secretを発行してもらいます。


・ユーザーとコンシューマーとサービスプロバイダー間で、アクセス権の委譲を行う。
ダウンロードしたサンプルに含まれている
・OAuth.php
・twitteroauth.php
をパスが通っている場所に格納します。

/** オブジェクトを生成します **/
$connection = new TwitterOAuth("コンシューマーキー", "シークレットキー");

/** トークンを要求します(6.1.1. Consumer Obtains a Request Tokenの部分) **/
$request_token = $connection->getRequestToken("Callback URL");

oauth_tokenとoauth_token_secretが帰ってくるので、どこかに保存します。

/** ユーザの許可を得る(6.2. Obtaining User Authorizationの部分) **/
$url = $connection->getAuthorizeURL($request_token);
生成された、URLにリダイレクトさせます。
ユーザーには以下のような画面が表示されます。


ユーザーが許可ボタンをクリックすると、Twitterの画面で登録したCallbackのURLが呼ばれますので、渡されてきたoauth_verifierを一時的に保存する。

/** オブジェクトを生成します **/
$connection = new TwitterOAuth("コンシューマーキー", "シークレットキー","6.1.1.で取得できたoauth_token","6.1.1.で取得したoauth_token_secret");

/** アクセストークンを取得する(6.3. Obtaining an Access Tokenの部分) **/
$access_token = $connection->getAccessToken($params['oauth_verifier']);

正規のoauth_tokenとoauth_token_secretが帰ってくるので、これを最終的な情報として保存します。

・TwitterのAPIを使う

/** オブジェクトを生成します **/
$tw = new TwitterOAuth("コンシューマーキー", "シークレットキー","6.3.で取得できたoauth_token","6.3.で取得したoauth_token_secret");

/** つぶやく **/
$tw->post('statuses/update', array(){'status' => 'Hello Twitter!'});

これで、つぶやきが登録されます。

今回は、サンプルに含まれているOAuth.php、twitteroauth.phpを利用したので、上記で登場したパラメータ以外のパラメータは指定していませんが、実際には
oauth_signature_method
oauth_signature
oauth_timestamp
oauth_nonce
oauth_version
なども指定する必要があり、oauth_signatureにはリクエストに含む情報を結合した文字列を特定のアルゴリズム(TwitterはHMAC-SHA1)で処理して、base64エンコードした値を設定する必要があります。
詳しい情報は、9. Signing Requests

| http://www.conit.co.jp/labs/index.php?e=267 |
| 実験 | 08:01 PM | comments (0) | trackback (0) |
HTML5で遊んでみる 番外編 Geolocation API その2
こんにちは、いちかわです。

前回のネタをまだ引っ張りますww

前回使用した「getCurrentPosition」は、今現在の位置情報ですが、今回試したいのは「watchPosition」

このインターフェイスは、位置情報を常に監視して変化があった時に、callbackに指定された関数を呼び出します。

では早速使ってみましょう!
今回作成したサンプルは、位置情報を地図上に表示して、それぞれの位置を線で繋いでいます。

実際に画面の位置情報を見ていると、徒歩でも頻繁に情報が変わるのがわかりますね。



ところで、リアルタイムで位置情報が取得できると、どんなことができるかと言うと。。。
・どこを通ったかトレースできるので、ジョギングなどで通ったルートを知ることができる。
 計算すれば距離も分かるので、消費カロリーの計算もできてしまう
・ある地点を登録しておいて、その近くに来たら情報を通知することも可能。
 (観光地図のWeb版みたいのがあれば、地図を開いておくだけで情報がポップアップされる)

過去にとあるコンテストにGPSを使ったマッシュアップアプリを作ったのですが、iPhone、AndroidなどGPSを搭載した便利なクライアントの登場により、これらの技術を組み合わせればもっとすごい物が作れそうです。
その時、作るのを手伝ってくれた2人は現在コニットの取締役です(笑)

| http://www.conit.co.jp/labs/index.php?e=258 |
| HTML | 10:51 AM | comments (0) | trackback (0) |
HTML5で遊んでみる 番外編 Geolocation API
こんにちは、いちかわです。

HTML5で遊ぶの第5弾は、Geolocation APIについて調べてみたいと思います。
Geolocation APIは、HTML5の仕様には含まれていません。(なので、番外編)
ただ単に、興味があったので調べてみました。

Geolocation APIとは、簡単に言うとブラウザでも位置情報を取得できると言う物。
国内3キャリアでは、HTMLを独自に拡張しているので、簡単に取得する事が出来ますが、世界標準ではありません。
これを標準の仕様としてまとめているのがW3Cです。
Geolocation API Specification

この仕様ではタグなどの拡張ではなく、javascriptのnavigatorオブジェクトを通して情報を取得できるようにしています。
if (navigator.geolocation) {
処理
}
と、ブラウザが対応しているか調べた上で、navigator.geolocation.getCurrentPosition() を使って情報を取得します。

早速サンプルを見てみましょう。

FireFoxで見ると、皇居にいる事になります(笑)
ここによれば、Wi-FiやIPアドレスから位置情報を特定するみたいです。
何となく、今回の場合は詳細な値をひろえなかったから、皇居の位置が返されたって感じでしょうか。

では、iPhoneで試してみると、


ちゃんと渋谷ラボが表示されます。

ちなみに、iPhoneで画面のキャプチャーを簡単にとりたい時は、ホームボタンを押しながら、上部の電源ボタンを押すと、シャッター音がしてカメラロールにキャプチャした画像が保存されます。便利だ〜〜。


| http://www.conit.co.jp/labs/index.php?e=250 |
| HTML | 02:34 PM | comments (0) | trackback (0) |