Flipboardの創業者はあのEvan Dollさんだった
iPad専用のソーシャルマガジンとして話題となっているFlipboardであるが、そのFlipboard社のブログに出ている写真を見て、あれどっかで見たことがある顔だな〜と思ったのだが、すぐには思い出せなかった。
で、さっき思い出したのだが、私がiPhoneアプリの開発を始めるきっかけとなった、あのスタンフォード大学のiPhoneアプリ開発講座で、講師をされていたEvan Dollさんだった。
どうりで見たことがあると思うわけなのだが、彼のTwitterアカウント([twitter:@edog1203])を見ると、プロフィールにCofounder at Flipboardと書かれているので、なんとFlipboard社の共同創業者になっていたのだ。
以前に以下のようなツイートをしていたので、会社を起こそうとしているんだな〜と思っていたのだが、まさかFlipboard社を創業していたとは。う〜ん凄い。
Actually, going to try building a software startup. Looking forward to lots of learning and growing. Will share more when I can... Evan Doll on Twitter: "Actually, going to try building a software startup. Looking forward to lots of learning and growing. Will share more when I can..."
でも、FlipboardのiPadアプリの完成度が高いのは、iPhoneアプリの開発講座の講師をしていた、元アップルのシニア・ソフトウェア・エンジニアが作ってる事を考えると、納得出来る気がする。
ちなみにそのEvan DollさんのiPhoneアプリ開発講座の講義は以下です。ご参考までに(iTunes Uへのリンク)。
参考記事
bit.lyのREST APIを使って短縮URLを作成する方法(改訂版)
以前に「bit.lyのREST APIを使って短縮URLを作成する方法 - Tomute’s Notes」という記事を書いたのだが、その後APIのバージョンが3.0に上がったため、内容が若干古くなっていた。そこで、bit.lyのREST APIバージョン3.0の使い方を以下に記載したいと思う(以前のバージョン2.0のAPIも、まだ引き続き使える)。
[準備]
その1:APIキーの取得
bit.lyのREST APIを利用するにはAPIキーが必須のため、そのAPIキーを取得する。取得方法は非常に簡単で、bit.lyのユーザアカウントを作成するだけでOKである(アカウントの作成はコチラから)。
アカウント作成後にAPIキーの表示ページに行くと、APIキーが表示されるのでそれを利用する。
その2:JSONパーサーのダウンロード
bit.lyのREST APIはデフォルトではJSON形式でレスポンスを返すため(XML形式も選択可)、JSONパーサーを利用するのが良い。今回はjson-frameworkを利用する。json-frameworkの使い方に関しては以下を参考にどうぞ。
その3:URLエンコード用のメソッドを用意する
bit.lyのREST APIで短縮するURLは、事前にURLエンコードされている必要がある。NSStringクラスのstringByAddingPercentEscapesUsingEncodingメソッドは不完全なため、カテゴリによってNSStringにURLエンコード用のメソッドを追加する。追加するメソッドは以下のブログを参考にする。
以上で準備は完了。
[利用方法]
その1:基本パターン
短縮URLを作成する具体的な方法は以下のような形である。
NSString *userName = @"tomute"; NSString *apiKey = @"your_api_key"; NSString *longURL = @"http://longurl.com"; // 短縮したいURL NSString *baseURLString = @"http://api.bit.ly/v3/shorten?&login=%@&apiKey=%@&longUrl=%@"; // URLをエンコードする(カテゴリによってNSStringに追加したメソッドを使用) NSString *encodedLongURL = [longURL stringByURLEncoding:NSUTF8StringEncoding]; // bit.lyのAPIをコールするためのURLを作成する NSString *urlString = [NSString stringWithFormat:baseURLString, userName, apiKey, encodedLongURL]; NSURL *url = [NSURL URLWithString:urlString]; // bit.lyのAPIをコールする NSString *jsonResult = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil]; // 取得したJSONフォーマットのデータをjson-frameworkを使ってパースする NSDictionary *dic = [jsonResult JSONValue]; // 短縮されたURLを取り出す if ([[dic objectForKey:@"status_code"] intValue] == 200) { NSString *shortenURL = [[dic objectForKey:@"data"] objectForKey:@"url"]; NSLog(@"%@", shorten); }
その2:簡易パターン
bit.lyのAPIはデフォルトではJSONフォーマットのデータを返すのだが、シンプルなテキストフォーマットのデータを返すようにする事も出来る。やり方は非常に簡単で、bit.lyのAPIをコールするURLの最後に&format=txtを付けるだけである。
NSString *userName = @"tomute"; NSString *apiKey = @"your_api_key"; NSString *longURL = @"http://longurl.com"; // 短縮したいURL NSString *baseURLString = @"http://api.bit.ly/v3/shorten?&login=%@&apiKey=%@&longUrl=%@&format=txt"; NSString *encodedLongURL = [longURL stringByURLEncoding:NSUTF8StringEncoding]; NSString *urlString = [NSString stringWithFormat:baseURLString, userName, apiKey, encodedLongURL]; NSURL *url = [NSURL URLWithString:urlString]; // bit.lyのAPIをコールする NSString *shortenURL = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil]; NSLog(@"%@", shortenURL);
上記のように、シンプルに短縮されたURLのみが返ってくるので、JSONのパース等は不要である。ただし、エラーが発生した場合に、エラーの原因などが分からないという欠点がある。
その3:ユーザのbit.lyアカウントを使用する
bit.lyのアカウントを作成してURLの短縮を行うと、その短縮したURLが何回クリックされたか等のトラッキングが可能となる。
iPhoneアプリでURLを短縮した場合でも、ユーザがそのURLをトラッキングしたいと思う事も想定されるが、bit.lyのAPIはそのような事を可能にする。
あらかじめユーザに、ユーザのbit.lyのユーザ名とAPIキーをiPhoneアプリ上で入力しておいてもらえば、あとはそれらをx_loginとx_apiKeyというパラメータで渡すだけである。
NSString *customerUserName = @"customer_user_name" NSString *customerApiKey = @"customer_api_key"; NSString *baseURLString = @"http://api.bit.ly/v3/shorten?&login=%@&apiKey=%@&longUrl=%@&x_login=%@&x_apiKey=%@"; NSString *urlString = [NSString stringWithFormat:baseURLString, userName, apiKey, encodedLongURL, customerUserName, customerApiKey];
なお、TwitterクライアントのEchofon等はこのような機能をサポートしている。
その4:j.mpを使う
最後に、bit.lyはj.mpという更に短い短縮URLサービスもやっているのだが、こちらのURLを生成したい場合には、URLの最後に&domain=j.mpを付ければ良い。
NSString *baseURLString = @"http://api.bit.ly/v3/shorten?&login=%@&apiKey=%@&longUrl=%@&domain=j.mp";
[参考記事]
ビジュアルQ&AサービスGazoPa Answersを使ってみる
類似画像検索エンジンGazopaの関連サービスとして、ビジュアルQ&AサービスGazoPa Answersというのがスタートしていたので、早速試してみた。
まず、GazoPa Answersで質問や回答をするためには、アカウントを作成する必要があるのだが、Facebook Connectに対応しているので、Facebookのアカウントを持っていれば、新規のアカウント作成は不要である。
具体的な質問の仕方は以下の動画を観るとすぐに分かると思うのだが、質問したい画像をアップロードして、質問を投稿するだけである。あとは誰かが質問に回答してくれるのを待つのみである。なお、画像をアップロードする替りに、画像のURLを指定する事も出来るし、自分で絵を書くことも出来る。
上記動画で示されている例を以下に列挙する。
パータン1:
市場で見たことのない野菜を見つけた時。そんな時は、その野菜の写真をアップロードして、「これは何?」と質問する。
パターン2:
どちらの服を買えばよいか決断出来ない時。そんな時は、それぞれの服の写真をアップロードして、どちらの服を買うべきか質問する。
パターン3:
このハンドバックが黒いドレスに似合うかな?という時。そんな時は、アマゾンのサイトでそのハンドバックの画像URLをコピーし、GazoPa Answersで聞いてみる。
パターン4:
写真の一部分に注目して欲しい時は、画像をアップロードしてから、「draw」機能を使って、その注目して欲しい部分に赤丸を付けたりする(「この看板の意味は?」というような質問の時に使える)。
また、Stack Overflowのようなポイントシステムがあり、以下のような形になっている。
行動 | ポイント |
---|---|
質問する | 1 |
質問に答える | 2 |
回答に投票する | 1 |
ベスト回答に選ばれる | 5 |
質問がFacebookにシェアされる | 1 |
このポイントがたまるとレベルが上がる仕組みで、レベルは0から10までとなっている。
レベル | ポイント |
---|---|
1 | 5-99 |
2 | 100-249 |
3 | 250-499 |
4 | 500-999 |
5 | 1000-2499 |
6 | 2500-4999 |
7 | 5000-9999 |
8 | 10000-24999 |
9 | 25000-49999 |
10 | 50000以上 |
まだサービスが始まったばかりという事で、質問もそれほど出ていない感じであるが、個人的には「この絵に写ってる場所ってどこだっけ?」といったような疑問を持つ事がしばしばあるので、そういった時にはなかなか便利そうである。といったわけで、今後も注目して行きたいと思っている。
アメリカの国立公園の公式Twitterアカウント一覧
偶然にもロッキーマウンテン国立公園の公式Twitterアカウント([twitter:@RMNPOfficial])が存在する事を知ったので、他の国立公園もTwitterアカウントを持っていないか調べてみた。すると結構な数の国立公園が公式Twitterアカウントを持っていたので、以下にその一覧を記載する。
- [twitter:@YellowstoneNPS](イエローストーン国立公園)
- [twitter:@EvergladesNPS](エバーグレーズ国立公園)
- [twitter:@PetrifiedNPS](化石の森国立公園)
- [twitter:@SequoiaKingsNPS](キングズ・キャニオン国立公園)
- [twitter:@GrandTetonNPS](グランド・ティトン国立公園)
- [twitter:@glaciernps](グレイシャー国立公園)
- [twitter:@CraterLakeNPS](クレーター・レイク国立公園)
- [twitter:@ZionNPS](ザイオン国立公園)
- [twitter:@ShenandoahNPS](シェナンドー国立公園)
- [twitter:@TRooseveltNPS](セオドア・ルーズベルト国立公園)
- [twitter:@DeathValleyNPS](デスヴァレー国立公園)
- [twitter:@DenaliNPS](デナリ国立公園)
- [twitter:@DryTortugasNPS](ドライ・トートゥガス国立公園)
- [twitter:@BryceCanyonNPS](ブライス・キャニオン国立公園)
- [twitter:@YosemiteNPS](ヨセミテ国立公園)
- [twitter:@RMNPOfficial](ロッキーマウンテン国立公園)
上記アカウントのリストはコチラ。あと、なぜかヨセミテ国立公園だけがCertified Accountであった。
参考情報
- NPS.gov Homepage (U.S. National Park Service)([twitter:@NatlParkService])
ShareKitを使ってiPhoneアプリのTwitter連携にトライ
「iPhoneアプリにソーシャルサイトでのシェア機能を3行で簡単実装できる「ShareKit」:phpspot開発日誌」という記事で紹介されていた、ShareKitというフレームワークが面白そうだったので、これを使ってiPhoneアプリのTwitter連携にトライしてみた(iPhoneアプリからツイートするという連携)。
結果的には、思った以上に簡単に使えたので、以下にその方法をメモしておく。
[事前準備]
Twitter連携のためには、Twitterとbit.lyのAPI Keyが必要なので、Twitterはhttp://dev.twitter.com/でAPI Keyの申請をし、bit.lyはアカウントを作成してからhttp://bit.ly/a/accountでAPI Keyを取得する。
事前準備はこれで終りである。
[設定]
1. ソースコードのダウンロード
http://www.getsharekit.com/install/で「Download ShareKit」と書かれたボタンを押して、ソースコードをダウンロードする。
2. iPhoneアプリのプロジェクトにソースコードをコピー
ダウンロードしたソースコードに含まれるShareKit.xcodeprojをダブルクリックしXCodeのプロジェクトを開く。次にXCodeプロジェクト内のClassesグループ内のShareKitグループのソースを、自身のiPhoneアプリ用のXCodeのプロジェクトにコピーする。
3. 必要なフレームワークを追加する
SystemConfiguration.framework、Security.framework、MessageUI.frameworkの三つのフレームワークをプロジェクトに追加する。
4. API Keyをヘッダファイルに記載する
プロジェクトに追加したShareKitのソースコードに含まれる、SHKConfig.hというヘッダファイルを開き(ShareKitグループ直下にある)、先程取得したAPI Key等を記載する。
今回はOAuthを使ったので、変更が必要だったのは以下の7つの定義(ShareKitはxAuthも使える模様)。
#define SHKMyAppName @"Tomute's Test App" #define SHKMyAppURL @"http://d.hatena.ne.jp/tomute/" #define SHKTwitterConsumerKey @"mytwitterconsumerkey" #define SHKTwitterSecret @"mytwittersecret" #define SHKTwitterCallbackUrl @"http://d.hatena.ne.jp/tomute/" #define SHKBitLyLogin @"tomute" #define SHKBitLyKey @"bitlyapikey"
設定は以上で終了である。
[使い方]
以下のように、UIWebView上に表示されているサイトのURLを、左下のボタンを押すことでツイートする事が出来る、というようなアプリを作る場合の実装例を示す。
左下のボタンを押すと呼ばれるメソッドがshareButtonだとすると、以下のような形になる。
#import "SHK.h" (snip) - (IBAction)shareButton:(id)sender { // UIWebViewに表示されているサイトのURLとタイトル指定して、SHKItemを生成する SHKItem *item = [SHKItem URL:testWebView.request.URL title:[testWebView pageTitle]]; // SHKItemを引数に指定してShareKitのアクションシートを生成 SHKActionSheet *actionSheet = [SHKActionSheet actionSheetForItem:item]; // ShareKitのアクションシートを表示 [actionSheet showInView:self.view]; }
上記の3行だけで、以下のような各種ソーシャルウェブサービスとの連携用のアクションシートが表示される。
このアクションシートでTwitterのボタンを押すと、以下のようにTwitterのOAuthの認証画面が表示される(初回認証時のみ)。
上記画面でユーザの承認が完了すると、以下の画面が表示される。サイトのタイトルとURLが挿入された状態のテキストエリアが表示されるので、「Send to Twitter」ボタンを押すとツイート完了である。
[まとめ]
ShareKitを使えば、Twitterだけでなく、Facebook、Instapaper、Delicious等の各種ソーシャルウェブサービスとの連携もかなり容易に出来そうである。
Twitter連携では画像の投稿が出来ないのが残念。
メニューが日本語化されていないという問題はあるものの、ソースコードがあるので日本語化はそれほど難しくは無さそうである。
ちなみにShareKitはMITライセンスで公開されている模様。
[関連記事]
iPhoneアプリの開発講座を開いている日本の大学
1年ほど前に「iPhoneアプリの開発講座を開いているアメリカの大学 - Tomute’s Notes」という記事を書いたのだが、そろそろ日本でもiPhoneアプリの開発講座を開いている大学が出てきているかなと思い、ちょっと調べてみた。結果は以下のような感じで、あまり沢山見つからなかったのだが、調べ方が悪いのかも。
1. 徳島大学
徳島大学では共通教育で「iPhoneアプリ開発入門」という講座を開いており、これは全16回のコースで、最後に作成したアプリの発表会もあるという、非常に本格的なもの。2回目の講義は「スティーブ・ジョブズの思想とシリコンバレーの創発力」という題で、これだけでも受けてみたくなる感じだ。
2. 多摩美術大学
多摩美術大学の「iPhoneアプリ開発プロジェクト」も、全14回の本格的なコース。多摩美術大学のキャンパス用のiPhoneアプリ「iTamabi」というのを作成するというのが最終ゴール。講義ノートが一部公開されている。
本講座の事は、ITmediaの記事(「キャンバスはiPhone、プログラミングで新たなアート表現を――多摩美術大学の挑戦 - ITmedia Mobile」)にも取り上げられていた。
3. 法政大学
正式な講座ではないようなのだが、法政大学情報技術(IT)研究センターが「iPhone アプリケーション開発基礎講座」という物を開催していた。ホーチミン市工科大学と法政大学が共同でiPhoneアプリケーションの開発を行う基礎講座という事で、今年の3月に2週間の日程で行われた模様。
4. 大阪電気通信大学
こちらも正式な講座というわけではないのだが、大阪電気通信大学の総合情報学部のデジタルゲーム学料では、学年を超えて構成した4〜5人のチームで、AppleのiPhone用ゲームを開発するプロジェクトを立ち上げているとのこと(「iPhoneゲームアプリ開発プロジェクト」)。
また、大阪電気通信大学は入学希望者向けのオープンキャンパスでも「iPhoneアプリケーション製作講座」を開いている模様。
【その他】
・こうちICTふるさと元気事業 『iPhoneアプリ開発入門講座』
上記の徳島大学のiPhoneアプリ開発講座で、講師をされている吉田敦也教授が、こうちICTふるさと元気事業として、高知大学で「iPhoneアプリ開発入門講座」を8月に開催される予定(2日間の無料講座)。
・名古屋文理大学 公開講座「初心者向けiPhoneアプリ開発講座」
名古屋文理大学の公開講座として、三日間の「初心者向けiPhoneアプリ開発講座」を7月に開催予定(こちらも無料)。
GoogleCLを試しに使ってみる on Mac
Googleのウェブサービスにコマンドラインからアクセス出来る、GoogleCLというツールをGoogle社がリリースしたという事で、早速試しに使ってみた。
GoogleCLの環境のインストールは、MacにMacPortsをインストールしていると非常に簡単で、ターミナルを起動して以下のコマンドを実行するだけで完了である。
$ sudo port install googlecl
上記のコマンドを実行して、以下のようなエラーが出た場合には、"sudo port selfupdate"を実行して、MacPortsを最新の状態に更新する。そして、もう一度上記のコマンドを実行する。
Error: Port googlecl not found Before reporting a bug, first run the command again with the -d flag to get complete output.
インストールが完了したら、早速コマンドを実行してみる。
今のところ、Blogger、Calendar、Contacts、Docs、Picasa、Youtubeの6つのサービスがGoogleCLに対応しているようなのだが、今回はGoogleカレンダに予定を追加してみる。
Googleのサンプルに従って、以下のようにコマンドを実行してみた(6月21日の午前11:00〜11:30までテストがある)。
$ google calendar add "テスト from 11:00am to 11:30am 6/21"
コマンドを実行すると、以下のようなメッセージが表示される。
(Hint: You can automatically launch your browser by adding "auth_browser =" to your config file under the GENERAL section, or define the BROWSER environment variable.) Please log in and/or grant access via your browser at https://www.google.com/accounts/OAuthAuthorizeToken?oauth_token=xxxxxxxxxxx then hit enter.
Googleカレンダに予定を追加するためには、OAuth認証が必要ということで、メッセージ中に表示されているURLをブラウザで開く。するとGoogle Accountのページが表示されるので「grant access」ボタンを押す。その後、ターミナルに戻ってEnterキーを押すと、カレンダーに予定が追加されている事が確認出来ると思う。(初回だけこの作業が必要)。
コマンドでGoogleのサービスにアクセス出来るということは、スクリプトを組んでおいて、決まった作業を定期的に自動実行するといった事が出来るので、色々と応用出来そうである。
参考記事