2011年10月29日土曜日

[こんなん作ってみました]Otaku Yellow Page

Ruby on Railsを使って何かつくってみたいな、と思って
「Otaku Yellow Page」なるものをつくってみました。


いろいろいじってみてください。

ソースコードは全てGitHubにあげています。
Rails3.1のサンプルコードとしてチェックしてみてください。
RSpecごとぶっこんでます。
ツッコミどころがあれば教えてくださいね。


推しメンを登録して、推しカブリを検索できるサービスです。
とりあえずTwitterとmixiとAmebaに対応しました(プロフィールにリンクするのみ)。

主に使っているのは以下のものです。
・Ruby1.9.2
・Ruby on Rails 3.1.0
・Haml
・SCSS (ほとんど使えてない、、、)
・RSpec2.6.4
・Capybara
・Bootstrap, from Twitter

本当はOmniAuthを使ってTwttier, mixi, Amebaと連携したかったのだけれどmixiとAmebaのAPIではあまり思ったことがやれなさそうだったので使わずにイエローページという位置づけにしてみました。


2011年10月24日月曜日

Rails3.1をHerokuで動かす

どハマりしましたが、とても参考になる記事がありました。


書いていある通りでうまくいきました。

2011年10月15日土曜日

アプリのvalidationで失敗したら

XCodeを4.2にアップデートしたら過去のアプリがvalidationに失敗するようになってしまいました。以下のようなメッセージが出ます。

application executable is missing a required architecture. At least one of the following architecture(s) must be present: armv6

XCodeを更新したことでarmv7のアーキテクチャ(のみ)でビルドしようとするようになったらしく、古いバージョンまでサポートするように(Deployment targetを4.0にする、など)設定していると、ダメだよ!と言われるようです。

「Build setting」の「Architectures」を見ると「$(ARCHS_STANDARD_32_BIT)」となっていて、これがarmv7を指しているみたい。
なのでここに「+」して「armv6」を追加してやります。
これでvalidationが通るようになります。

2番目の回答が今回の解決方法に相当します。


2011年10月13日木曜日

Bing APIで検索してみよう

画像検索用のAPIはいくつか公開されていますが、Bingはその中でも簡単に使えて制限が少ないと思います。


何はともあれまずはAppIDが必要になるので、こちらから登録しておきます。
AppIDを取得したら

http://api.search.live.net/json.aspx?Appid=(AppID)&query=(検索文字)&sources=(検索対象)

とGETしてやれば結果がJSONで返ってきます。

sorcesには以下のように種類があります。詳細はドキュメントを参照してください。

web、image、video、newsなどなど。

oasisの画像検索をしたい場合は

http://api.search.live.net/json.aspx?Appid=(AppID)&query=oasis&sources=image

となります。


iPhoneアプリで利用する場合、ほぼ確実に年齢制限が必要になるのでAppStoreにリリースする際はちゃんと設定しましょう(リジェクトされます)。

2011年10月4日火曜日

[iOS]突然シミュレータ上で起動しなくなる場合

クリーンしてからビルドし直してシミュレータで起動しようとしたところ、アプリが起動しようとしたところでクラッシュ。
何度もやり直してもダメ。
コンソールには以下のようなメッセージが残っています。

app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Could not load NIB in bundle〜(省略)〜

MainWindow.nibが読み込めませんでした、というようなことを言っているのだけどさっぱり理由が分からない。そんなんいじってない。
なんで、こうなったのかはさっぱり分からないのだけど、とりあえず解決したのでメモ。。。

1) プロジェクト名/ja.lproj と en.lprojフォルダにある「MainWindow.xib」を2つともファイルインスペクターに追加する

2) ビルドする

で、OK。
なんかの拍子でプロジェクトから消えてしまうらしい。。。
誤ってDeleteでも押したんだろうか。。。


2011年10月1日土曜日

[iOS]UITableViewを下に引っ張って更新するUI


Twitterクライアントでよく見かけるテーブルを下に引っ張るとアイコンが回転してロード中を示すUIがあります。
左の画像みたいなもの。

これを実現する便利なライブラリは2つあります。

1つ目は「PullToRefresh」というもの。
左の画像は「PullToRefresh」のGitHubのReadmeから引っ張って来たものです。
簡単なのはこちらで、Readmeに書いてある通り(英語ですが迷わない程度に簡単です)です。
ごくごく簡単なサンプルも付属しているので、こちらも併せて読めば簡単です。
でもこれはUITableViewControllerを拡張する形になっているので、複数のパーツから構成されている画面に存在するUITableViewを拡張したい、というケースでは使えません。

そういうケースでは「EGOTableViewPullRefresh」を使います。

1)EGORefreshTableHeaderView.h/mをコピーする
2)FrameworkにQuarzCoreを追加する
3)対象のUITableViewを持つControllerクラスでEGORefreshTableHeaderDelegateの実装を宣言
4)同様にUIScrollViewDelegateも実装宣言する
5) EGORefreshTableHeaderViewのインスタンス変数を定義
6)下記のような感じで初期化する
  EGORefreshTableHeaderView *view = [[EGORefreshTableHeaderView alloc]
initWithFrame:CGRectMake(0.0f, 0.0f - self.tableView.bounds.size.height,
self.view.frame.size.width, self.tableView.bounds.size.height)];
view.delegate = self;
[self.tableView addSubview:view];
_refreshHeaderView = view;
[view release];
[_refreshHeaderView refreshLastUpdatedDate];
 最後のrefreshLastUpdatedDateは引っ張ったときに出てくる最終更新日時を設定するものです。適宜呼んでやりましょう。

7) UIScrollViewのdelegateを以下のように実装する
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
[_refreshHeaderView egoRefreshScrollViewDidScroll:scrollView];
}
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
[_refreshHeaderView egoRefreshScrollViewDidEndDragging:scrollView];
}
8)
EGORefreshTableHeaderDelegateで定義されるメソッドを実装する
- (void)egoRefreshTableHeaderDidTriggerRefresh:(EGORefreshTableHeaderView*)view
 ※ロード中アイコンが表示されている間にやっておきたい処理を実装する(非同期で)
- (BOOL)egoRefreshTableHeaderDataSourceIsLoading:(EGORefreshTableHeaderView*)view
 ※ロード中かどうかをBOOL値で返す(NOを返したタイミングでロード中解除)
- (NSDate*)egoRefreshTableHeaderDataSourceLastUpdated:(EGORefreshTableHeaderView*)view
 ※最終更新日時を返す。基本的には[NSDate date]しておけばよい