Androidアプリ「二郎系」をリリースしました。

ラーメン二郎や二郎系のお店をまとめたアプリ「二郎系」をリリースしました。


選択したエリアにあるお店をリスト表示したり、Google Mapでお店をマーカーで表示し、
GPSなどの位置情報を使って近くにお店があるかを調べることができます。




お店の詳細画面からは食べログのページを表示したり、
Twitterの検索結果をリスト表示してお店について詳しく調べることができます。


iOS版をリリースして2年以上経ちましたが、
重い腰を上げて初のマルチプラットフォーム(大袈裟)に挑戦してみました。
泣く泣く機能を削ったり、まだやってみたいことはたくさんあるので
それらのタスクをこなしながら、どんどんアップデートを行っていこうと思います。

ぜひインストールしてみてください!

iOSアプリ「五郎系」をリリースしました。

TV版「孤独のグルメ」で、主人公(井之頭五郎さん)が実際に食したお店をまとめたiOSアプリ「五郎系」をリリースしました。


既にリリース済みのラーメン二郎・二郎系をまとめたiOSアプリ「二郎系」のソースをベースに、
TV版のシーズン毎にリスト表示したり、マップでのピンの色分けをして見やすくしています。
FoursquareTwitterなどのソーシャルアプリとの連携やTwitter検索機能も実装しています。


ふと五郎さんが入ったお店を調べたくなった時や、実際に孤独のグルメの舞台になったお店に行く際の情報源としてぜひご活用下さい。





タイル上に並べられた写真をタップして同じ写真を揃えてタイムを競うiOSアプリ「PairGram」をリリースしました

ゲーム開始時にInstagramのタグを選択してタイル上に並べ、そのタグに関連する写真をタップして揃えていき、
すべて揃えるまでのタイムを競うiOSアプリ「PairGram」をリリースしました。


是非、カワイイワンちんやネコちんの写真におっとりしながらペチペチタップして揃えてみてください。
無料です。


今回は画面デザイン(配置)や画面遷移処理にはStoryBoardを一切使わず、
ゲームエンジンとして一般的に使われているCocos2Dを使って、
シーン(画面)の切り替えやスプライト(写真)を配置しています。
フォントもビット調(っていうのかな?)を使ってレトロゲームみたいに仕上げてみました。


また、タイムなどの計測したデータはCoreDataでは一切保存せず、
NSUserDefaultsでバイナリーをゴロっと保存しています。
メリットはあんまりありません。手軽なくらいです。
要は今まで作ったアプリとは少し違ったアプローチで実装したかっただけです。



もしダウンロード数が増えてきたらGameCenter機能を実装してみようと思います。



DataFixturesのloadでext_translationが無いよエラーの対処

Symfony2の備忘メモ。

$ app/console doctrine:fixtures:load

を実行した時に、

[PDOException]
SQLSTATE[42S02] : Base table or view not found: 11046 Table '[DB名].ext_translations' doesn't exit

みたいなエラーが出た場合、いったん以下で更新を掛けたら解決しました。

$ app/console doctrine:schema:update --force


ただし、強制更新なので手動で構成を変えた場合は元に戻るので注意。

PHPからMySQLにアクセスした時に「connection failed: could not find driver」と出る時の対処メモ

PHPインストール時にすっかり抜けてたのでメモ。
ターミナルで以下を実行します。

$ yum install php-mysql


MySQLのPDO関連のドライバーが入ってないのが原因でのエラー。
上記のコマンドでインストールされました。


MacVirtualBoxをインストールし、やっとゲストOS(CentOS)でさくらVPSと同じ環境を構築できた...。

時間を進捗ベースでリスト管理できるiOSアプリ「Targets」をリリースしました

カテゴリーごとに目標時間を設定し、カテゴリー内のタスクの時間を計測することで
時間ベースの進捗管理ができます。
カテゴリーのカラーも6色から選択できます。
セクション部分のカラーとして使ったり、UITableViewCellの背景色にも透過率を変えて使ったりして、
リストをカラフルにしてみました。


タスクについては実際の時間を簡易ストップウォッチで記録していき、
完了チェックを付けると進捗に反映されます。


技術的には、CoreDataの本を一通り読んで理解したので実装に無駄をなくしました。
(まだあるかもしれませんが、後ほど見直します...)
以下の技術書は本当に良書です。大変お世話になりました...m(_ _)m

iOS Core Data徹底入門

iOS Core Data徹底入門


それと、UITableViewのセクション部分のタップ処理をどう実装するかをいろいろとググって解決しました。
アプリの内容は大変シンプルなものですが、今までに実装したアプリでは使ってなかったUICollectionViewや、
セクション部分のみ表示するようにしたり個人的には壁に打ち当たりながらも何とか進めてきました。


初期の実装では、ViewDeckを使ってみたり(GMailアプリにある左側にスライドして出る仕組み)、
レベルと経験値の概念を入れてみたりしたのですが、コンテンツ不足のためお蔵入りになってしまいました。
いつかはリベンジしたい!


ということで、当アプリをぜひ使ってみて下さい。

NSUserDefaultsを使ってデータを保存

アプリ内でデータを保存する場合にCoreDataを使うという手もありますが、
テーブル定義が〜とか定義を変更した時にマイグレーション処理が〜など色々とめんどいので、
代わりにNSUserDefaultsを使って比較的楽に保存する方法があります。


NSUserDefaultsは、iPhoneiPadのアプリの設定画面の情報を
取得したり設定できるクラスです。


二郎系アプリでは設定画面は用意していませんが、
NSUserDefaultsを使ってお気に入り機能を実装しました。
お気に入り登録したお店情報リスト(NSData)をまるっと保存しています。


・保存時

//お店情報リスト
NSArray *shopList = [NSArray arrayWithObjects:@"お店1", @"お店2", @"お店3", nil];

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
//お店情報リスト(NSArray)をデータ化(NSData)
NSData *shopData = [NSKeyedArchiver archivedDataWithRootObject:shopList];
//shopListキーを指定してデータを保存
[defaults setObject:shopData forKey:@"shopList"];
if (![defaults synchronize]) {
	NSLog(@"defaults setObject error");
	return;
}


・取得時

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
//shopキーのデータを取得
NSData *shopData = [defaults dataForKey:@"shopList"];
//データをリスト化
NSArray *shopList = [NSKeyedUnarchiver unarchiveObjectWithData:shopData];