2008/12/18
EclipseでGAE with Djangoを使う
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以上となります。ご了承ください。
GAEのアプリケーションを作成するのにpythonのデバッガを使いたい。いろいろ調べてみた結果、Eclipse上でpythonのデバッガが使えるらしい。だが、Eclipse上でGAEのサンプルを走らせるのはweb上で見つけたが、Djangoのモデルも使用できるものはとうとう発見できなかったので、Eclipse-Python上でGAE、しかもDjangoのモデルをGoogleのdatabase APIを使ってアクセスできる環境を作ってみた自分のための備忘録。
django-admin.py startproject office
cd office
python manage.py runserver
Validating models...0 errors foundが出てhttp://localhost:8000/でDjangoのスタートアップ画面がブラウザで確認できるはず。
/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/dev_appserver.py
とGAEのサーバをシミュレートするスクリプトに設定すること
INSTALLED_APPS = ( 'appengine_django', 'django.contrib.auth', 'polls',#-ここ # 'django.contrib.contenttypes', # 'django.contrib.sessions', # 'django.contrib.sites', )
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のmanage.pyで作成したファイルは__init.py__とmodels.pyとviews.pyだがすべてからのファイルなのでGooglAppEngineLauncherで追加ボタンで作製したアプリのディレクトリ内にGAE helperをコピーしてやって、それをEclipseからインポートする方が簡単かも。
とここまでがんばってみたが、Djangoの管理画面を出すことが出来ない。Djangoの管理画面はSQL文を使い、データベースのフィールド名もGAEと異なるのが原因と思われる。う〜ん、どうしたものか。