GoWest Lab
(株)ゴーウエスト エンジニア向け技術ブログ-
Rails3,Ruby1.9.xでGoogle Data APIを使う
Posted on 11月 29th, 2011 No commentsRails3,Ruby1.9.2でGoogle Data APIを利用する場合はGemfileに以下の行を追加する。
gem 'gdata_19',:require => "gdata" require部分はgemファイル名とライブラリ名が違うため追加するオプションである。 これがないとuninitialized Constantというエラーが出てしまう。 参照URL Google Data On Rails http://code.google.com/intl/ja/apis/gdata/articles/gdata_on_rails.html
-
Aptana Studio3でメニューが出てこない
Posted on 8月 26th, 2011 No commentsUbuntu 11.04になってUnityが導入されて、Macのようなメニュー形式になったためにAptina Studio3のメニューがWindow以外表示されない状況になってしまう。
回避方法として以下のようなシェルスクリプト経由でAptanaStudioを起動するようにする。
#!/bin/bash export UBUNTU_MENUPROXY=0 (インストールディレクトリ)/AptanaStudio3
AptanaStudio3.shといったファイル名で保存してこのシェルスクリプトを起動すると以下のようにメニューが全て出てくるようになる。
参考情報
http://wiki.appcelerator.org/display/tis/Installing+Studio+on+Linux -
HamlでUndefined Conversion Errorが出る
Posted on 2月 28th, 2011 No commentsPadrinoでHamlを使っているが以下のようなエラーが発生する。
Encoding::UndefinedConversionError – “\xE4″ from ASCII-8BIT to UTF-8″
対処方法としては-# Encoding:utf-8をファイルの最初の行に追加する。
Ruby1.9になって明示的に文字コードを指定しないとASCII-8BITと認識するみたいだ。 -
WordPress 3.0のパーマリンクを変更したらページにアクセスできなくなった時の対処方法
Posted on 11月 2nd, 2010 1 commentUbuntu 8.04上でWordPress3を動かして、管理画面で作成した固定ページのパーマリンクを変えた時、404 Not Foundエラーが出てしまうので半日はまった。
最初、WordPressの設定が悪いのかと思って色々設定を変えたが変わらず。
ネットで調べていると以下のページでApacheのrewriteモジュールが有効になっていないことに気づく。WordPressでパーマリンク設定後に404エラーが出る場合
以下のコマンドでRewriteモジュールを有効化する。
sudo a2enmod rewriteApacheのサイト設定ファイルのディレクトリ設定の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これで変更したパーマリンクをブラウザで指定すると該当ページが表示されるようになる。
-
herokuでgit pushした時のエラーの対処
Posted on 9月 15th, 2010 No commentsRails3のアプリケーションをクラウドサービスのHerokuを使ってみた。
登録方法はこちらを参照した。git push heroku masterコマンド発行時、fatal errorが発生。
以下のコマンドでgitリポジトリの設定を行う。git remote add heroku git@heroku.com:プロジェクト名.git
これでgit push heroku masterコマンドが成功。
http://プロジェクト名.heroku.comでちゃんとRailsが動作していることが確認できた。
-
VirtualBox上でUbuntu10.04の解像度を変更できるようにする
Posted on 7月 14th, 2010 No commentsVirtualBox 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 /mnt4 /mnt下のautorun.shをルート権限で実行する。
6 別ウィンドウにビルドの経過が表示される。終了したらリターンキーをたたく。
5 インストール終了後再起動する。
6 VirtualBoxメニュー 仮想マシン-フルスクリーンモードにする でフルスクリーンになるか確認する。
-
Ubuntuにバージョン管理システムBazaarをインストールする
Posted on 3月 3rd, 2010 No commentsUbuntu 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 -
iPhoneのTableView のセルを削除するときにはまったところ
Posted on 9月 9th, 2009 No commentsiPhoneのTableViewでセル削除を行わせたいとき、以下のような画面を表示して行う。

これを行うためにテーブルビューコントローラーはUITableViewDelegateプロトコルとUITableViewDataSourceプロトコルを実装してcommitEditingStyleメソッドを実装する必要がある。
@interface HogeTableViewController : UITableViewController &gtUITableViewDelegate ,UITableViewDataSource< { 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変数の要素数とテーブルビューのセル数が違っているとエラーではねる仕様になっているらしい。
データソースはおそらくヘッダーファイルで一番最初に宣言されている配列をデータソースとしているのではないかと思われる。
従って、以下のようにデータソースの要素を削除してからテーブルビューのセルを削除すると正常に終了する。@interface HogeTableViewController : UITableViewController { NSMutableArray *array } @end @implementation ... - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { if (editingStyle == UITableViewCellEditingStyleDelete) { // Delete the row from the data source NSInteger row = [indexPath row]; [self.array removeObjectAtIndex: row]; [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; } } @end少し気持ち悪い仕様だが、iPhoneでソフトウェアを作るかぎりでは仕方ないのだろう。
-
iPhoneのナビゲーションで詳細ページを出す時のテクニック
Posted on 8月 28th, 2009 No commentsiPhoneのアプリでよくあるインターフェースがリストを表示してアイテムを選択すると詳細ページを表示するというパターンだ。

上のリストの一つをタップすると詳細ページが表示される。
これだけだったら以下のコードを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 SDK3でビルドするとコンパイルエラーする
Posted on 6月 30th, 2009 No commentsiPhone 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」を選択する。





