Python:PyDevでGAE Djangoの環境構築 その2

さて、Python:PyDevでGAE Djangoの環境構築 その1では、プロジェクトを作っただけで、空でした。

次に、GAE用のDjangoの設定を行います。

参考したページは以下になります。

Django-nonrelとは、非RDBMSで使えるDjangoのようです。GoogleはGAEでDjangoを使うためのヘルパーを開発していたようなのですが、既に開発終了しており、後継としてこれを使うことを推奨しているようです。ヘルパーのサイトを日本語で見るとなんの説明もないのですが、言語を英語にすると注意書きが出てきます。日本語版もちゃんとメンテナンスしてくれ・・・。

  1. http://www.allbuttonspressed.com/projects/djangoappengineにアクセスして、Installationの通りにやる(キリッ
  2. というだけだと不親切だと思うので、もうちょっと補足します。ちなみにMercurial使わない版です。
  3. 以下のファイルを全てダウンロードします。

    全てを解凍しておきます。

  4. testapp内のファイルを、その1で作ったプロジェクトのsrcディレクトリにコピーします
  5. srcディレクトリの中に、解凍したライブラリ群をコピーします。

    内容が参照サイトからのほぼコピーになってしまってますが、
    以下のようにします。

    django-nonrel/django => project/src/django
    djangotoolbox/djangotoolbox => project/src/djangotoolbox
    django-autoload/autoload => project/src/autoload
    django-dbindexer/dbindexer => project/src/dbindexer
    djangoappengine => project/src/djangoappengine

  6. 全部のコピーが終わると、以下のような構成になります。

    project/src/django
    project/src/djangotoolbox
    project/src/autoload
    project/src/dbindexer
    project/src/djangoappengine

  7. プロジェクト上で右クリックして、PyDev > Set as Django Project を選択し、プロジェクト上でDjango用のメニューが出るようにします。
  8. ターミナルより、プロジェクト/src/ディレクトリに移動します
  9. python manage.py runserver を実行して、ローカルのGAEでDjangoを起動させます
  10. http://localhost:8000にアクセスして表示されればOK!のはず。
    以下のような画面になりました。

今のところ、これで起動しました。
あとは、情報収集しながらDjango開発すればいいんじゃないかと思います。


Python:PyDevでGAE Djangoの環境構築 その1

新しい言語を覚えたいと思い、Pythonを勉強中です。みんなのPython改訂版と、みんなのPython Webアプリ編を読んだ後、なんか作ってみようかなと思ってPythonのフレームワークであるDjangoのチュートリアルをやってみました。

なんとなくはわかったのですが、じゃあサービス作ってみようかなと思った時に、Djangoが使えるサーバを持ってない。xrea借りてるけれど、まぁせっかくPython使うんだから、GAE for Pythonでやってみたいよねと思ったので、Eclipse上での環境構築について。

ただ、私がPythonの開発環境にしているのは、EclipseじゃなくてTitanium Studioです。Eclipseベースのやつ。

  1. Google AppEngine SDK for Pythonをダウンロードしてインストール。Macな私はアプリケーションの中に放り込む。
  2. Titanium Studioで新規プロジェクトを作成。PyDev Google App Engine Projectを選択します。
    New Project
  3. PyDevプロジェクトの設定をしていきます。適当なプロジェクト名を付けて、Pythonのバージョンなどを指定していきます。GAEのPythonのバージョンは2.5なので、2.5を選択します。Interpreterの項目がない場合は、Click here to configure an interpreter not listed.をクリックしてプロジェクトのプロパティを開きます。ある場合は無視で。
  4. Pythonのインタプリターのパスを設定します。newボタンをクリック。
  5. /usr/bin/python2.5とかにたぶんあるから、それを指定します。
  6. Google AppEngine SDKの位置を指定します。
  7. 指定したら、使うライブラリを選択する画面が出てくるので、とりあえずデフォルトのままで。Djangoの1.2が使えるように必ずしておきましょう。
  8. 最後に、プロジェクトの簡単な設定をしておくか?と聞かれるのだけれど、今回はEmpty Projectを選択。

とりあえず、ここまでで、Google AppEngine for Pythonのプロジェクトができました。
今のままだと何にもできないし、Djangoの設定なども一切ないので、何も動きません。

次回に続きます。


日記:中国GTUGのHTML5ハッカソンに参加してきました

お盆ですね。今、実家です。といっても実家は携帯圏外なので、電波の届くところまで移動しています。

帰省する通り道の岡山で、8/13(土)に中国GTUG主催のHTML5ハッカソンがあるとのことだったので参加してきました。

中国GTUG:第8回勉強会

AndroidとSlim3ばっかり最近やっていて、HTML5は全く知らないという無謀な状態からでしたが、ChromeのExtensionの開発でもいいよという話だったので、そちらをやってみようと思ってました。

朝9時からスタートだったのですが、ちょっと遅れて会場入り。最後に到着したみたい。参加者は20名くらい。多い!四国では考えられない!!(ような…)
なんかもう説明終わってスタートしている模様…。適当にやっちゃってくださいという話だったのですが、他の人はもう既に取り組みはじめていて焦る。午前中はChrome Extensionの作り方の日本語サイトを見ながら勉強。チュートリアルを動かしたり。あ、開発環境はAptana Studio 3です。

Chrome Extensionの作り方の参考サイト
http://dev.screw-axis.com/doc/chrome_extensions/

作りたいものが全く見えぬまま、昼ご飯の時間に。岡山クラスタの方々とご飯に行って、エビ飯を食べた。色的には完全にそばめしなんだけれども味は洋食。デミグラスチャーハンって感じ?

ふと作りたいものというか、試しにやってみたいもの(たぶんもう既にあるんだろうなーとか思いながら)を思いついたので、練習がてらやってみることに。ChromeExtensionでjQueryを使えるようにとかできるんかもしれんけれど、そんなの調べていたら、本末転倒 になりそうだったので、 ガシガシと素のJavaScriptで書く。しかし文法をかなり忘れていた。

ハマってしまったのが、関数を変数に代入したいと思っていたのに、やっていることが関数の結果を代入になってしまっていたので、全然やりたいことができないでいた。
以下のように、returnに関数を渡すという方法があることに気付いてなかったので、それをやったところ、希望通りの動作をするようになった。

var eventFunc = (function(x) {
    return function(x) {
        // やりたい処理
    }
})(y);

参考にしたサイト
addEventListener で登録する関数に引数を渡す まゆの日記

とりあえずやりたいことができたところで、ほぼタイムアップ。
成果発表が行われていく中、自分の作ったもの程度で果たしてよいのだろうか?とビクビクしていた。ソース整理すると30行程度だったので、1日かけて何やっとんねんということにもなりかねない。

自分が作ったものは、ChromeExtensionで、タブがたくさん出ている時に、ページタイトルが見えなくなってしまってどのタブが何のページなのかわからなくなるので、ページタイトル一覧を表示して、そのタイトルをクリックしたらそのタブを表示するというExtensionです。(まだChromeStoreに公開してませんが後日公開してみようかと思います)

まぁ以下のような感じ。アイコンは、試しに音声エディタのやつを使ってます(ぇ

便利そうだという声を頂いたので、内容を調整したら、後日ChromeStoreにアップしようと思います。さっきデベロッパー登録だけは済ませましたw

家でネットが使えたらいいんですが、使えないから、電源のないジョイフルでEVOの3Gテザで戦わなければならず(そのジョイフルも車で20分くらいかかるし)、とりあえず目標は今週中ということにしておきます。まぁVer 0.1っつーことでアイコンだけ適当なもの作ってリリースしておいてもよいかなという気ががが。

ハッカソンの後はオープンラボ岡山との合同懇親会でした。もっといろんな人と絡めばよかったかなと思ったのですが、結構人見知りです、すみません…。Slim3の話も振ってもらえたので、slim3のハンズオンなら依頼があればやりますよ!自分でよければ(ただし、内容的にどうなのかは判断しかねる)


Android:MacでASMをAppにして起動する

※タイトルはちょっと語弊があるかもしれません。ASMをAppにするわけでなくて、App経由でASMを起動するという話です。

SHARPハッカソンのときに、@hyoromoさんが発表のときに使ってくださいと言っていたASMなるものを思い出した。ASMとは、Android Screen Monitorというもので、@adakodaさんが作られている。

Android Screen Monitor

実行するのは簡単。(ただしMacでしか試してない)
Android実機をMacにUSB接続して、ターミナルから、

java -jar asm.jar

とするだけ。これで、現在のAndroid実機の画面がMacの画面上に表示される。プレゼンでアプリの動作をみんなに見てもらうにはとてもいいツールだ。自分が使おうと思ったのは、講師をした場合にサンプルアプリの動きを見せたり、面白いアプリをみんなに紹介したりするときに使えそうだなぁと思ったのです。

ただ、その度にいちいちターミナル立ち上げてコマンド打つのも、なんか忘れてしまっていたら面倒だしなぁと思ったので、シェルスクリプトにしてデスクトップに置いて、ダブルクリックでOKかなーと思ったら、ダメでした。Xcodeが起動しちゃって。ということで、AppleScriptなるものに手を出すことにしました。

AppleScriptというのは、Mac用スクリプト言語なんでしょう。
初めて調べてのでよくわかってません!でもApp形式で出力が出来たりするようです。ということは、ダブルクリックで起動できはずですね。やってみました。

前提条件:

  1. asm.jarは@adakodaさんのサイトからダウンロード済み
  2. Android SDKのパスなどの環境変数は.bash_profileで設定している
  3. asm.jarは、/Users/{username}/asm/asm.jar に設置している

tell application "System Events"
set thisUser to properties of current user
set userName to name of thisUser
set shellScript to "source /Users/" & userName & "/.bash_profile && java -jar /Users/" & userName & "/asm/asm.jar"
do shell script shellScript
end tell

上のコードを丸々コピーしてAppleScriptエディタで保存してください。App方式で保存してDockに放り込んでおけば、超便利じゃないかなーと思います。たぶん。きっと。

以上です。


Slim3:modelToJsonでDate型を文字列にする

modelToJsonメソッドを使うと、modelクラスをそのままJSONに変換してくれるので、すごく便利なんですが、それはあくまでわかりやすい型のもので(ここでいうわかりやすい型ってのはニュアンスで悟ってください)、Date型はどうもUnixTimeになっているみたい。そんなの求めてないって!

ということで、人にわかりやすい文字列に変換する方法です。

参考URL:
Slim3 JSON機能の説明(非公式)

まずはmodel。ここではCommentクラスというものにしてます。
説明では必要個所のみに絞ってますのでよろしく。
アノテーションで、modelToJsonする場合に使われるcoderクラスを指定します。
ここでは、DateCoder.classというものにしています。

@Model(schemaVersion = 1)
public class Comment implements Serializable {
// 略
    @Attribute(json=@Json(coder=DateCoder.class))
    private Date created = new Date();
    
    @Attribute(json=@Json(coder=DateCoder.class))
    private Date updated;
// 略
}

次に、DateCoder.javaです。
org.slim3.datastore.json.Defaultを継承して作ります。

public class DateCoder extends Default {

    @Override
    public void encode(JsonWriter writer, Date value) {
        TimeZone.setDefault(TimeZone.getTimeZone("JST"));
        writer.writeString(value != null ? DateUtil.toString(value, "yyyy/MM/dd HH:mm:ss") : "");
    }
}

このようにすることで、例えばjQueryとかでJSONを受け取った場合に、json.createdと指定するだけで、2011/08/05 10:11:23 みたいな感じで日時を文字列で取得できます。