Rails3,Ruby1.9.2でGoogle Data APIを利用する場合はGemfileに以下の行を追加する。

 

Ubuntu 11.04になってUnityが導入されて、Macのようなメニュー形式になったためにAptina Studio3のメニューがWindow以外表示されない状況になってしまう。

回避方法として以下のようなシェルスクリプト経由でAptanaStudioを起動するようにする。

AptanaStudio3.shといったファイル名で保存してこのシェルスクリプトを起動すると以下のようにメニューが全て出てくるようになる。

PadrinoでHamlを使っているが以下のようなエラーが発生する。

Encoding::UndefinedConversionError – “\xE4″ from ASCII-8BIT to UTF-8”

対処方法としては-# Encoding:utf-8をファイルの最初の行に追加する。
Ruby1.9になって明示的に文字コードを指定しないとASCII-8BITと認識するみたいだ。

Ubuntu 8.04上でWordPress3を動かして、管理画面で作成した固定ページのパーマリンクを変えた時、404 Not Foundエラーが出てしまうので半日はまった。
最初、WordPressの設定が悪いのかと思って色々設定を変えたが変わらず。
ネットで調べていると以下のページでApacheのrewriteモジュールが有効になっていないことに気づく。

WordPressでパーマリンク設定後に404エラーが出る場合

以下のコマンドでRewriteモジュールを有効化する。
sudo a2enmod rewrite

Apacheのサイト設定ファイルのディレクトリ設定のAllowOverrideをAllに設定する
/etc/apache2/sites-enable/000-xxxx

Options FollowSymLinks MultiViews
AllowOverride All < -- 変更 Order allow,deny allow from all

Apacheを再起動する。
sudo /etc/init.d/apache2 restart

これで変更したパーマリンクをブラウザで指定すると該当ページが表示されるようになる。

Rails3のアプリケーションをクラウドサービスのHerokuを使ってみた。
登録方法はこちらを参照した。

HerokuでRuby1.9とRails3を使う

git push heroku masterコマンド発行時、fatal errorが発生。
以下のコマンドでgitリポジトリの設定を行う。

git remote add heroku git@heroku.com:プロジェクト名.git

これでgit push heroku masterコマンドが成功。
http://プロジェクト名.heroku.comでちゃんとRailsが動作していることが確認できた。

VirtualBox 3.2.6は、シームレスモードやカーソルがキャプチャーされないなど使い勝手がかなりよくなった。
しかし、Ubuntu 10.04をゲストOSで使う場合はアドオンモジュールを入れないと画面解像度が800×600に固定されて変更ができない。

Ubuntuで画面解像度を変更できるようにするには以下の手順で行う。

1 VirtualBox上でUbuntuを立ち上げる

2 Virtualboxメニューのデバイス- CD/DVDデバイスでVBoxGuestAddisions.isoを選択する。

3  UbuntuのターミナルでCDROMデバイスをマウントする
# mount /dev/cdrom /mnt

4 /mnt下のautorun.shをルート権限で実行する。

6 別ウィンドウにビルドの経過が表示される。終了したらリターンキーをたたく。

5 インストール終了後再起動する。

6  VirtualBoxメニュー 仮想マシン-フルスクリーンモードにする でフルスクリーンになるか確認する。

Ubuntu Server 8.04(Hardy)にBazaarをインストールする場合、普通にapt-getをすると古いバージョンがインストールされてしまうので、開発サイトから直接インストールできるようにする。

/etc/apt/sources.listに以下の2行を追加する。

deb http://ppa.launchpad.net/bzr-beta-ppa/ppa/ubuntu hardy main
deb-src http://ppa.launchpad.net/bzr-beta-ppa/ppa/ubuntu hardy main

以下のコマンドをシェルで実行して公開鍵の登録を行う

# sudo apt-key adv –keyserver keyserver.ubuntu.com –recv-keys 37B19B80

以下のコマンドをシェルで実行する

# sudo apt-get update
# sudo apt-get bzr

参考URL
https://launchpad.net/~bzr-beta-ppa/+archive/ppa

iPhoneのTableViewでセル削除を行わせたいとき、以下のような画面を表示して行う。

holidaystableview

これを行うためにテーブルビューコントローラーはUITableViewDelegateプロトコルとUITableViewDataSourceプロトコルを実装してcommitEditingStyleメソッドを実装する必要がある。

@interface HogeTableViewController : UITableViewController &amp;gtUITableViewDelegate ,UITableViewDataSource&lt; {
    NSMutableArray *array
}
@end

@implementation HogeTableViewController
...
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
if (editingStyle == UITableViewCellEditingStyleDelete) {
    [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]  withRowAnimation:UITableViewRowAnimationFade];
    // Delete the row from the data source
    NSInteger row = [indexPath row];
    [self.array removeObjectAtIndex: row];
    }
}
@end

(EditModeに変更するコードは省略)

テーブルビュー上でセルを削除すると上のcommitEditingStyleが呼ばれる。
しかし、上のコードではdeleteRowsAtIndexPathsメソッドを呼んだ時点でエラーになってしまう。
どうやらテーブルビューはデータソースの状態をモニターしているらしく、上のコードで言うとarray変数の要素数とテーブルビューのセル数が違っているとエラーではねる仕様になっているらしい。
データソースはおそらくヘッダーファイルで一番最初に宣言されている配列をデータソースとしているのではないかと思われる。
従って、以下のようにデータソースの要素を削除してからテーブルビューのセルを削除すると正常に終了する。

少し気持ち悪い仕様だが、iPhoneでソフトウェアを作るかぎりでは仕方ないのだろう。

iPhoneのアプリでよくあるインターフェースがリストを表示してアイテムを選択すると詳細ページを表示するというパターンだ。

table

上のリストの一つをタップすると詳細ページが表示される。
これだけだったら以下のコードをtableViewControllerに追加すれば実現できる。

tableViewController.m

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
	// テープルコントローラーで何番目のセルが選択されたか
	NSInteger row = [indexPath row];
       // nibファイルを読み込んで詳細ページのコントローラーを生成
	if (detailViewController == nil){
		LocationMemoDetailViewController *memoDetail = [[LocationMemoDetailViewController alloc] initWithNibName:@"MemoListDetailView" bundle:nil];
		detailViewController = memoDetail;
		[memoDetail release];
	}
       // 詳細ページへ切り替え
	[navController pushViewController:detailViewController	animated:YES];
}

上のコードはtableViewControllerのリストアイテムがタップされたときに呼ばれるdidSelectRowAtIndexPathメソッドである。
コードのdetailViewControllerが詳細ページのコントローラークラスである。
これで詳細ページに何か情報を渡したいい場合は以下のようなコードを追加すればよさそうに思われるだろう。

tableViewController.m

detailViewController.nameField.text = @"山田 太郎";

ここでnameFieldは詳細ページ上にあるUITextFieldのオブジェクトである。
しかし、これで詳細ページを表示しても設定された値は表示されない。
どうやら詳細ページの中身が生成されるのは表示されるときのようなのでnibファイルを読み込んだだけではアクセスできないようである。
この場合、detailViewControllerクラスにテキストフィールドに表示するデータを一時保管しておく変数を追加する。

detailViewController.h

@interface LocationMemoDetailViewController : UIViewController {
...
NSString *name;
}
@propety(nonatomic,retain) NSString* name
</pre>

detailViewController.m
<pre name="code" class="java">
...
@synthesize name

そしてtableViewController側にはviewWillAppearメソッドを以下のように追加する。

- (void)viewWillAppear: (BOOL) animated {
	self.nameField.text = self.name;
}

つまり、詳細ページが表示されたときに一時保管してある文字列をテキストフィールドに設定するのである。

このあたりはiPhoneのUIの中身が隠蔽されているのでわかりにくい部分だ。
APIを呼ぶだけで結構な仕事をしてくれるので楽なのだが、その引き換えに中の動きがわかりずらくとまどうことが多い。
このあたりもiPhoneで開発する上でのノウハウなのだろう。

iPhone SDK 3でターゲットを「Simulator – 3.0|Debug」にしてビルドすると(プロジェクト名)_Prefix.pchファイルで以下のようなエラーが出ることがある。

error: syntax error before ‘AT_NAME’ token
error: syntax error before ‘}’ token
fatal error: method definition not in @implementation context

原因はコンパイラーのバージョンによってiPhone OS 3.0用実行ファイルのコンパイルができないようである。
回避方法は以下の通り。

1  XCodeのメニュー「プロジェクト」-「プロジェクト設定を編集」を選択する。
2  一番上のタブの「ビルド」を選択する。
3  「コンパイラのバージョン」項目を選択する。
4  「C/C++コンパイラのバージョン」の値を「GCC 4.0」にする。
5  「C/C++コンパイラのバージョン」が選択されている状態でウィンドウの左下隅にある歯車アイコンをクリックし、「ビルド設定条件を追加」メニューを選択する。
6  新しいエントリーが追加されるので一番左の項目をクリックし、「Device – iPhone 3.0」を選択する。そして一番右の項目をクリックし「GCC 4.2」を選択する。
7  もう一度5,6の作業をくりかえし、左の項目「Simulator – iPhone3.0」を選択し右の項目「GCC 4.2」を選択する。