2008/12/18

EclipseでGAE with Djangoを使う

 GAEのアプリケーションを作成するのにpythonのデバッガを使いたい。いろいろ調べてみた結果、Eclipse上でpythonのデバッガが使えるらしい。だが、Eclipse上でGAEのサンプルを走らせるのはweb上で見つけたが、Djangoのモデルも使用できるものはとうとう発見できなかったので、Eclipse-Python上でGAE、しかもDjangoのモデルをGoogleのdatabase APIを使ってアクセスできる環境を作ってみた自分のための備忘録。

  • Eclipseは最新版をゲットし、Pydevをインストール。インストール先をHelp->software updates... ->Add sitesで入力。
  • MacOS X環境下でのテストのためにDjangoも正式サイトからダウンロードしインストールしておく。本来GAEにはDjangoが含まれているのだが、Djangoのチュートリアルなどが単独で動作できるようにしておく。
  • DjangoドキュメントVer1のチュートリアルに従い以下のコマンドを実行。プロジェクト名はofficeとする。
    django-admin.py startproject office
    cd office
    python manage.py runserver
    Validating models...0 errors foundが出てhttp://localhost:8000/でDjangoのスタートアップ画面がブラウザで確認できるはず。
  • GAE helper for Djangoをダウンロードする。
  • 該当プロジェクト内にコピーする。いくつのファイルが置換される。settings.py、urls.py、manage.pyとか。
  • cd office
  • python manage.py startapp pollsでチュートリアルと同じPollsアプリを作ってみる。
  • Eclipseでofficeディレクトリと同名のプロジェクトをworkspace内に作り、ファイルシステムから全ての ファイルをインポートする
  • Run configurationの肝は
  • Main Muduleの欄が
    /Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/dev_appserver.py
    とGAEのサーバをシミュレートするスクリプトに設定すること
  • このモジュールに渡すargumentsは${project_loc}すなわちPollsじゃなくてプロジェクトのディレクトリそのものとすること
  • Pollsアプリへのアクセスはhttp://localhost:[ポート番号]/Polls/で行うのかな?でもDjangoの最初の画面It works!と同じ画面でが出てくるぞ。要調査。
  • settings.pyのINSTALLED_APPS={}に'polls'を追加する
    INSTALLED_APPS = ( 'appengine_django', 'django.contrib.auth', 'polls',#-ここ # 'django.contrib.contenttypes', # 'django.contrib.sessions', # 'django.contrib.sites', )
  • プロジェクト名を含んだoffice.pollsと入れてしまうと、officeモジュールがないとEclipseでエラーが出る
  • polls内のmodels.pyは以下のように書かなければならない。
    pythonだから関数のブロックは適宜きちんとインデントすること。
    from google.appengine.ext import db import datetime

    class Poll(db.Model):
    question = db.StringProperty()
    pub_date = db.DateTimeProperty()
    def was_published_today(self):
    return self.pub_date.date() == datetime.date.today()

    class Choice(db.Model):
    poll = db.ReferenceProperty(Poll)
    choice = db.StringProperty()
    votes = db.IntegerProperty()

  • DjangoのチュートリアルページのSQLに関連したコマンドは一切使用できない

ただ、Djangoのmanage.pyで作成したファイルは__init.py__とmodels.pyとviews.pyだがすべてからのファイルなのでGooglAppEngineLauncherで追加ボタンで作製したアプリのディレクトリ内にGAE helperをコピーしてやって、それをEclipseからインポートする方が簡単かも。

とここまでがんばってみたが、Djangoの管理画面を出すことが出来ない。Djangoの管理画面はSQL文を使い、データベースのフィールド名もGAEと異なるのが原因と思われる。う〜ん、どうしたものか。

2008/12/01

Google App Engineで遊ぶ!!

 久々の更新です。あなたの家計簿は開発が滞っていたので、そろそろ奮起して次のバージョンを出します。

 さて日経ソフトウェア2009年1月号でGoogle App Engine(略してGAE)の特集をやってます。GAEはGoogleが運用しているサーバーやGoogleの分散ファイルシステム(Google File System)やデータベース「BigTable」などを使い、webアプリケーションを自作して公開できるというもの。アプリの登録などは無料です。WinやLinux,MacOS Xでのそれぞれの環境が用意されているそうなので早速Googleのデベロッパーホームへアクセス。ジェットエンジンに翼がついたようなかわいいアイコンの所がGAE。

同誌の解説ではwindowsでの環境構築が載っていたので、まずBoot Campでwinでの開発環境(SDK)をインストール。Pythonもバージョン2.5.xが必要だ。携帯で認証コードを受け取るようになっているけど、自分の携帯は.comなどのアドレスからのメール着信拒否をしていたのでしばし中断。認証コードをGetした後、本の通りにやってみるもconfigが通らないっていうエラーが出て進まない。しかも、本にはインストール時の動作確認のためのサンプルコードも載っていない。

何じゃこりゃといぶかりつつ、MacOS Xで試してみる。GoogleのサイトからLauncherをダウンロード。アプリケーションフォルダにコピーして起動すると、最新版のラウンチャーにアップデートを促してきたのでクリック。左下の+ボタンで新規のプロジェクトを設定するダイアログが出てくるので、自分の登録したアプリケーション名でプロジェクトを作るとアプリ名のフォルダが新規に作成され、サンプルコードも入っていた。後はRunボタンをクリックし、SafariでブラウズしてみるとあっさりHello worldが表示。こういう環境ってMacOS Xの方がWindowsより遅れる事が多いのだけれど、GoogleさんMacOS Xの方がはるかに力はいってますね。^_< Webアプリの開発はMacOSXのユーザが多いって聞いたけど、ご多分に漏れずという所かな。満足。

って事で、しばしMac OS XでGAEを触る事に決定。Googleのスタートガイドも親切だなという印象を受けた。

2007/11/19

NSCollectionView内の個々のViewを選択状態にするには

 Appleのサンプルを調べていると、SourceViewというプロジェクトがあり、その中でNSCollectionViewを使用している。カスタムコードらしきものは全くないのだが、きちんと選択したviewは背景がハイライトする。

 これは個々のViewと対になっているNSCollectionViewItemにそのものずばりのselectedというメソッドがあり、これをIB上でNSBoxのtransparentとbindingしてやることで実現している。

 このやり方を模倣し、sampleプロジェクトを手直し。今回は全くコードの追加をしていない。枠のみをハイライトさせるとしたら、NSCollectionViewItemのサブクラスを作製し、selectedメソッドをオーバライドし、NSCollectionViewItemは対応する個々のviewを[self view]で取得することが出来るので何とかなりそうだ。

2007/11/18

Sampleをアップデート

 iWeb上で書いた解説と実際のプロジェクト内のコードが異なる部分があったのを修正し、新しいコードをサンプルプロジェクトに追加。NSCollectionViewに限らず、CoreDataと係るviewは扱うNSManagedObject(またはそのサブクラス)の配列ではなく、集合を表示することになる。これは順序が定まっていないということなので、サンプルを実行するたびにデータの表示される順番がランダムになってしまう。

 そのため、ソートしたいエンティティに基づき、NSSortDescriptorをNSArrayControllerにセットしてやる必要がある。

 サンプルではデータが追加される順番にソートされるようにしてみた。ImageCellの-(void)awakeFromInsertのコードがそれだ。後は、ImageCell Array ControllerにindexでソートされるようNSSortDescriptorをセットしてやれば良い。

 次のサンプルアップデートは任意のImageCellのviewがクリックされたら、選択された部分の枠をハイライトすることに挑戦する予定。

2007/11/17

NSCollectionViewを使う

 MacOS X 10.5 Leopardは発売日にApple storeから手に入れ、時間のあるときにはXcodeと戯れる日々。10.5から使えるようになったNSCollectionViewはドキュメントがほとんどなく、使えるようになるには一苦労しそうだが、何とかサンプルらしきコードが書けたので公開してみる。

 画像データをファイル名とユーザが設定できるランキングを同時に表示できるようにしてみた。

 NSCollectionViewItemがモデルとなるNSManagedObjectと個々のViewとの橋渡しをする役割を持っているのがミソ。

実は数独パズルのためのアプリをまず作ってみたのだが、MVCをきちんと分けて考えないと、よけいなコードが入ってくる。viewの初期化にはinitWithFrameではなく、initWithCoderを使う必要がある等ちょいと癖があるのだが、そちらのコードはまた別の機会に公開する予定。

2007/01/25

久々にあなたの家計簿バグフィックス

 CoreDataに対応してからリリースしようと思っていた次期バージョンですが、CoreDataが多機能な分なかなか一筋縄ではいきません。

 現行バージョンの不具合報告がありましたので、バグフィックス版を出しておきます。機能が増えているわけではありません。

  • 口座管理の銀行取引部分で日付等でソートできない不具合を修正。

 次期バージョンはしばしお待ちを。

2006/06/09

あなたの家計簿Ver.1.34リリース

マイナーバグフィックスバージョンです。ダウンロードは右側のFilesメニューからどうぞ。

  • 一日のまとめ画面で収入・メモの幅を変更したとき画面が乱れるのを修正。
  • 固定費ドロワで入力した項目が保存されないときがあるのを修正。

 なお、次期バージョンからはMacOS X 10.4 Tigerの新機能[CoreData]を導入するため、動作環境はMacOS X 10.4以上となります。ご了承ください。

以前のログ