2013-04-07

PCH file built from a different branch ((clang-425.0.24)) than the compiler ((clang-425.0.27))

Xcodeを4.6.1にアップデートしてビルドすると、
 PCH file built from a different branch ((clang-425.0.24)) than the compiler ((clang-425.0.27))
とかいうエラーになった。

[Product]メニューから[Clean]を選択して、再ビルドすると成功した。

しかし、ビルドの設定を変えた方がいいという警告が出ていた。詳細はよく分からないまま、Xcodeの言いなりで[Perform Change]を行った。たぶんこれで問題ないと思う。

AppStoreでXcodeをアップデートできない

AppStoreアプリでXcodeをアップデートしようとすると、「ほかのアカウントで使用可能なアップデートがあります」「このアプリケーションをアップデートするには、購入時に使用したアカウントでサインインしてください」というメッセージが出て、アップデートができないで困った。

ネットで検索すると、Spotlightのインデックスを再構築をするとアップデート可能になるという情報があったので試してみたのだが、これにインデックスの再構築に数時間かかった上にアップデートできないままだった。

Xcode.appをゴミ箱に入れて再インストールすることで解決できた。再インストールは、AppStoreアプリから行える。

2012-11-19

VirtualBoxにインストールしたAndroid-x86をネットにつなぐ

Androidを起動したあと、ALT + F1 を押して、コンソールで、
# netcfg eth0 dhcp
# setprop net.dns1 8.8.8.8
とやる。元の画面に戻るには、ALT + F7 を押す。

このとき。VirtualBoxのネットワークの設定は、次のとおり、
Adapter 1: PCnet-FAST III (Bridged adapter, en0: Ethernet)
WiFiでなくて、ケーブルで繋いでいるのでちょっと不便かもしれないが、これでネットワークに繋がるはず。

Androidで、ALT + F1 のあと、
# netcfg eth0
とやればIPアドレスを取得できるので、そのIPアドレスを使ってホストマシーンで、
adb connect {取得したIPアドレス}
とすれば、デバッグなどもできるようになる。


Android-x86のダウンロードはこちら(広告が大きいので注意)
インストールなどは、次の記事が参考になる。
http://d.hatena.ne.jp/goriponsoft/20110212/1297510921
http://d.hatena.ne.jp/kikupi084/20100712/1278948166
http://stackoverflow.com/questions/10069121/no-network-in-android-x86-on-virtualbox-4-1-2

***
と、書いてきたのだが、次のサイトでVirtualBox用に最適化されたAndroid-x86が配布されている模様。これを使うのが良さそうだ。
http://www.buildroid.org/blog/?page_id=121

2012-10-25

iPad mini対応は何もやらなくてOK

最近ようやく自作のアプリのいくつかをiPadに対応させました。たとえば一挙に韓国語翻訳などです。
新たにiPad miniなるものが世に出るということで、これの対応も考えなくてはいけないのかと思って、Mac App StoreでXcodeのアップデートを確認して見ましたが、リリースはありませんでした。

これからアップデートがあるかもしれないと思って調べてみたのですが、どうやらiPad mini対応をする必要はまったくなさそうです。シミュレータは新しいのが出るでしょうが、Xcodeの更新はないでしょう。
なぜかというと、iPad miniは画面のサイズがこれまでよりも小さい7.9インチになるものの、画素数はiPad 2と同じ1024×768ドットだからです。つまり、ボタンなどのコントロールや文字がちょっと小さく表示されるだけで、他は従来のiPadなんら変わるところはないということになります。これまで動いていたプログラムは、少しちいさくなった画面の中でまったく同じように動くことでしょう。

2012-10-12

DjangoにDBのマイグレーションを行うプラグインを入れる

Djangoで manage.py syncdb をした場合、すでに存在するテーブルについては何も変更されません。models.pyをいじってスキーマを変更しても、それがDBに反映されません。
そこで、マイグレーションを行うプラグインの出番となります。どうもSouthが定番のようなので、これを入れます。

$ sudo pip install South

インストールに成功したら、settings.py を若干変更します。
INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'myapp', #自作のアプリ
    'south', #southをインストールする
    )
個人的な趣味としては、
import sys
import os
sys.path.append(os.path.join(os.path.dirname(__file__), "..", "south_migrations"))
SOUTH_MIGRATION_MODULES = {
    'myapp': 'migrations.myapp',
}
という具合にして、マイグレーションのときに生成されるファイルが、プロジェクトのディレクトリの外につくられるようにしておくのがいいと思います。その方が、ローカルのプロジェクトをサーバー上にあげるときに都合がいいからです。

settings.py の編集が終わったら、普通に、manage.py syncdb をします。これによって、southが利用するDBのテーブルがつくられます。SOUTH_MIGRATION_MODULESを明示的に指定した場合は、親となるモジュール(上記の例ではmigrations)が存在しないとエラーになるので、ここでつくっておきます。ここまでできたら、

$ python ./manage.py convert_to_south myapp

を実行します。これにより、既存のアプリをsouthで管理するように設定できます。今後、モデルに変更があった場合は、

$ python ./manage.py schemamigration myapp --auto
$ python ./manage.py migrate myapp

とやれば、たいていはsouthが何とかしてくれるはずです。

2012-10-06

CentOSにPostgreSQLをインストール

yumでインストールします。
$ sudo yum -y install postgresql-server
依存関係により、

  • postgresql-server
  • postgresql-libs
  • postgresql-server

の3つがインストールされることになります。現在はバージョンは、8.4.13-1.e16_3です。

これでインストールはできているのですが、データベースサーバーが起動していないので、まだ利用することはできません。最初の起動のため、次の2つコマンドを打ちます。
$ sudo service postgresql initdb
$ sudo service postgresql start
ここで、initdbをせずにpostgresqlを起動しようとすると、次のようなエラーになります。
/var/lib/pgsql/data is missing. Use "service postgresql initdb" to initialize the cluster first.
                                                           [失敗]

CentOSを再起動したときにpostgresqlも自動的に起動されるように設定しておきます。
$ sudo chkconfig postgresql on

これでデータベースサーバーの起動はOKです。後は、ユーザーの設定を行います。
PostgreSQLのインストールと同時にpostgresというユーザーがつくられるようです。
$ id postgres
uid=26(postgres) gid=26(postgres) 所属グループ=26(postgres)
このユーザー "postgres" にパスワードを設定します。
$ sudo passwd postgres
パスワードが設定できたら、ユーザーを変更します。デフォルトでは、Ident認証という方式で認証を行うため、CentOSのユーザーとPostgreSQLのユーザーが一致していないとエラーになるようです。
$ su - postgres
後は、createdbでデータベースを作成したり、 psqlで接続したりできます。

Ident認証ではなく、パスワード認証に変更したい場合は、postgresqlにユーザーを追加した後で、設定を変更します。
postgresユーザーでパスワード認証を行いたい場合は、次のようにしてパスワードを設定します。
ALTER  USER  postgres  WITH PASSWORD  'newpassword';
という具合です。postgresユーザーは最初から存在するのでALTER USERですが、新規ユーザーを追加するのであれば代わりに、CREATE USER文を使います。

パスワード認証を行うためには、DBの設定も変更する必要があります。設定ファイルなどは、たいてい「/var/lib/pgsql/data/」以下にあるようです。今回修正するのは、
/var/lib/pgsql/data/pg_hba.conf
というファイルです。「local    all    ident」という行をコメントアウトして「local    all    password」を追加します。
#local   all         all                               ident
local   all         all                               password
これでパスワードで認証することができます。たとえばユーザーがpostgresのときに、
psql  -U  postgres
とやれば、postgresユーザーで接続できます。


DjangoからPostgreSQLに接続する場合は、データベースの設定に、django.db.backends.postgresql_psycopg2を指定します。さらに次のコマンドで必要なモジュールをインストールしなくてはいけません。
$ sudo yum -y install python-psycopg2

2012-10-04

DjangoでImageFieldやFileFieldが空でないか調べる

たとえば、次のようなモデルがあったとします。
class MyModel(models.Model):
    thumbnail = ImageField(upload_to="path", null=True, blank=True)

ここで、ImageFieldにファイルがセットされているかどうか見分けて処理を切り替えたい場合の判定方法ですが、単に、
m = MyModel.objects.get(id=1)
if m.thumbnail:
    file_is_set() #ファイルあり
else:
    file_is_empty() #ファイルが空
という具合に判定すればOKなようです。