GoWest Lab

(株)ゴーウエスト エンジニア向け技術ブログ
RSS icon Email icon Home icon
  • Rails3,Ruby1.9.xでGoogle Data APIを使う

    Posted on 11月 29th, 2011 admin No comments

     

    Rails3,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 admin No comments

    Ubuntu 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 admin No comments

    Padrinoで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 admin 1 comment

    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

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

  • herokuでgit pushした時のエラーの対処

    Posted on 9月 15th, 2010 admin No comments

    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上でUbuntu10.04の解像度を変更できるようにする

    Posted on 7月 14th, 2010 admin No comments

    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にバージョン管理システムBazaarをインストールする 

    Posted on 3月 3rd, 2010 admin No comments

    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 のセルを削除するときにはまったところ

    Posted on 9月 9th, 2009 admin No comments

    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変数の要素数とテーブルビューのセル数が違っているとエラーではねる仕様になっているらしい。
    データソースはおそらくヘッダーファイルで一番最初に宣言されている配列をデータソースとしているのではないかと思われる。
    従って、以下のようにデータソースの要素を削除してからテーブルビューのセルを削除すると正常に終了する。

    @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 admin No comments

    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 SDK3でビルドするとコンパイルエラーする

    Posted on 6月 30th, 2009 admin No comments

    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」を選択する。