Amazon

2011年1月30日日曜日

JavaScriptのメモ

1. データ型(基本型と参照型)
データ型は基本型と参照型に大別され、それぞれの振る舞いは異なるので注意。
基本型 数値型(number), 文字列型(string), 真偽型(boolean), 特殊型(null/undefined)
参照型 配列(array), オブジェクト(object), 関数(function)

基本型は値を直接参照するのに対して、参照型は参照先(ポインタ)を参照する。
よって、以下のような結果の違いが出る。

- 基本型
var x = 10;
var y = x;
x = 20;
window.alert(y); // 10(コピーされた値を表示)

- 参照型
var x = [0, 1, 2]; // 配列
var y = x;
x[0] = 10; // 配列の先頭の要素を書き換え
window.alert(y); // 10,1,2(参照元の値を表示)




2. 変数のスコープ
クラスやメソッドにてvarをつけて宣言した変数の有効範囲(スコープ)は、そのクラスまたはメソッド内。
逆にvarのついてない変数はスコープ外の変数だと判断される。

- 変数の有効範囲を、その変数のスコープという
- 暗黙的に宣言された変数は、必ずグローバル変数になる
- 関数の内部で暗黙的に宣言された場合でも、グローバル変数になる
- var文で宣言した変数は、ローカル変数になる

2011年1月20日木曜日

[iPhone] セルの削除を行えるようにする

セルの削除を行えるようにする

次に、編集モードで左側のマイナスボタンを押し、削除ボタンが押された時の反応を書きます。commitEditingStyle:forRowAtIndexPath:メソッドを以下のように変更します。


- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle
        forRowAtIndexPath:(NSIndexPath *)indexPath {
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        [stringArray removeObjectAtIndex:indexPath.row]; // 削除ボタンが押された行のデータを配列から削除します。
        [myTableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
    } else if (editingStyle == UITableViewCellEditingStyleInsert) {
        // ここは空のままでOKです。
    }
}

[iPhone] ナビゲーションバーに編集ボタンを追加する

ナビゲーションバーに編集ボタンを追加する

ナビゲーションバーに編集ボタンを追加す るためのヒントはViewDidLoadにあります。UITableViewの使い方1でコメントはそのままにしておきましょうと言った2行です。 あの2行のうち、下の行のコメントを外せば編集ボタンがナビゲーションバーの右側に現れます。なおこのボタン、システム側で用意しているものなので、既に 多言語対応になってます。 英語ならEdit、日本語なら編集…と各言語で表記が変わります。自分でローカライズ対応する必要はありません。 ただし、Resourcesのinfo.plist(この場合標準だとTableTest-info.plistという名前になっているはずです)の Localization native development regionをJapanにするか、 ローカライズ対応言語の中に日本語を入れておくかの設定は必要です。ナビゲーションバーの 右側に編集ボタンが見えるはずです。
- (void)viewDidLoad {
    [super viewDidLoad];
    self.title = @"テーブル設定のテスト";
    self.navigationItem.rightBarButtonItem = self.editButtonItem;
}


2011年1月9日日曜日

OpenSocial Development Environment (OSDE)のサンプルアプリケーション


前回のOSDEのインストールに引き続いてOSDEのサンプルアプリケーションを作成してみよう。

参考にしたのはCodeZineの以下の記事。

もちろん今回もAptanaを使用する。

OpenSocial Development Environment (OSDE)のサンプルアプリケーションの作成

1. Aptanaを起動したらProject Paneで右クリックして New -> Projectとし、ProjectのタイプをOSDEのカテゴリからOpenSocial Projectを選択

2. Project名を適当につける

3. 作成するアプリケーションの設定を行う
File NameのGadget spec file: gadgetのファイル名
Title: gadgetのタイトル
Author Email: 作成者のメールアドレス(適当)
Description: 作成するgadgetの説明(適当) 
Features: 作成するgadgetのOpenSocialのバージョン

 4. 作成するgadgetに含むOpenSocialのビュータイプとそれぞれのビューで表示する内容を選択して"Finish"


  • Canvas: Type HTML, Create the external JavaScript file for this viewにチェック、Generate a set of sample codeにチェックを入れて、以下の3つにチェックを入れる


HTML出力のオプション
項目名出力されるサンプルコード
Fetching a person data and friends.自分と友人の情報を取得して表示する
Posting an activity.アクティビティを登録する
Sharing data with friends.アプリケーションデータを登録し、友人と共有する


  • Profile: Canvasと同様の設定
  • Preview: Not supported (mixiではPreviewビューはサポートされないため)
  • Home: Canvasと同様の設定



5. プロジェクトを作成するとOSDEのパースペクティブを開くか確認されるので、Yesを選択する。作成したプロジェクトには指定したJavaScriptとGadgetのXMLファイルが作成される。

続いてサンプルデータの作成をする。
Socialアプリにおいてユーザーの基本情報や友達リスト、ブログを書くとかコメントつけるといったアクティビティのサンプルデータを用意するのは結構手間がかかるが、OSDEではあらかじめ用意されているようだ。

6. OSDEパースペクティブを開き、メニューバーのOSDE -> Start Apache Shindig でShindigを起動する。

7. 正常に起動すると以下がコンソールに表示される

8. 続いてサンプルデータを作成する。OSDEパースペクティブを開き、メニューバーのOSDE -> Create sample date in Shindig を選択

9. サンプルデータを作成するか確認されるので"OK"をクリック

10. 作成するとPeopleタブにconrad.doe, john.doe, jane.doe, george.doeの4ユーザーが作成される。(環境によって作成されるユーザーが変わる)

11. Peopleタブの各ユーザーにはBasic, General, Name, Body type, Relationshipといった情報がすでに入力されている。

12. Peopleタブ以外にActivitiesタブがある。右側の更新マークを押すと作成した4ユーザーが選択可能になる。但し、アクティビティは最初は何も入っていない。

13. AppDataタブもActivitiesタブと同様

14. ApplicationタブもActivitiesタブと同様

15. Docsタブは表示したいドキュメントやWebサイトを選択可能。最初は何も入っていないので、下部のBrowserが選択されていると思うのでSite settingsをクリックして、Defaultを選択する。デフォルトのサイトをインポートするか確認されるのでOKとする。



 16. OpenSocialやGadgets API Referenceなど有用なサイトが選択可能になる


17. インポートしたらBrowserをクリックし、上部で表示するサイトの変更が可能となる。

では実際に作成したサンプルアプリを起動してみよう。

18. OSDEパースペクティブより、作成したOpenSocialのプロジェクト直下にあるgadgetのxmlファイルを選択して、メニューバーのOSDE -> Run application locallyを選択

19.起動オプションを選択する画面になる。ビューやユーザー、を変更することが可能。ここではデフォルトのままView: Canvas, Owner:Conrad.doe, Viewer:Conrad.doeを選択

20. Eclipse内にbrowerタブが開かれて、起動したアプリケーションが表示される

21. "Fetch people and friends"ボタンでユーザーとその友達リストを表示、"Post activity"ボタンでアクティビティを登録。Activitiesタブで確認が可能。同様に"Share data"ボタンでアプリケーションデータを共有できる。こちらもAppDataタブで確認可能。


これでサンプルアプリケーションの作成と実行が完了。
これをベースにして、あとはmixiのOpenSocial対応状況と独自拡張をマニュアルから読み込めばある程度開発できそうですね。

OpenSocial Development Environment (OSDE)のインストール

mixiアプリ開発のためにOpenSocialのWebコンテナを開発環境に用意した方が
開発効率が断然上がるとのことで、オープンソースのOpenSocial Development Environment(OSDE)をCodezineの以下の記事に習ってインストールしてみる。

SDEで快適なOpenSocialアプリケーション開発を


今回もAptanaにインストールしてみる。

OpenSocial Development Environment (OSDE)のインストール手順
1. Aptana(Eclipse)を起動しHelp -> Install New Software

2.  Available Softwareのウィンドウが表示されたらWork withに以下のURLを追加して"Add"をクリックし、Add Siteのウィンドウが表示されたら"Name"を適当(今回はOSDE)、"location"は先ほど入力した以下のURLが入力されているのを確認する。


3. しばらくすると上記のURLに置いてあるプラグインがリスト表示される。"OpenSocial"カテゴリに"OpenSocial Developement Environment"フィーチャーにチェックを入れて"Next >"をクリック

 4. OpenSocialのOpenSocial Development Environmentプラグインの詳細が表示されるので、内容を確認したら"Next >"

 5. 使用許諾書に目を通して、問題がなければ"I accept the terms of the license agreement"にチェックを入れて"Finish"

 6. プラグインのインストールが開始される

7. 途中でEclipse.orgのDigital Certificationが信頼できるかと確認されるのでOKにする

8. OSDEのWork directoryを設定するためにWindow -> Preference

9. 左側OSDEを選択して、右側のWork directoryを日本語なし、スペースなしのフォルダを指定する(今回はC:\workspace\osde)


これでOSDEのインストールは完了したので、次回は実際にOpenSocialプログラミングをしてみよう。

2011年1月4日火曜日

bloggerでソースコードを記入する際に色づけして表示してくれるwidget

bloggerでソースコードを記入する際に色づけして表示してくれるwidget
http://www.kuribo.info/2008/04/code-prettify.html

<pre class="prettyprint">
(コード)
</pre>

Google App EngineでDjango1.2を動かす3

[稼動環境] Aptana Studio 2.0.5  + Python 2.7.1+ Pydev 1.6.4+ Django 1.2.4 + Google App Engine Helper for Django 1.0.9

前回、前々回からのどハマリ続きのDjango 1.2.4 on GAE
Google App EngineでDjango1.2を動かす2
Google App EngineでDjango1.2を動かす1

引き続き動かないので、問題判別のために幾つか実験をば。

  • [Djangoのバージョン問題?] django.zipの中身を1.2.4から1.1.3に変更 -> 変わらず
  • [Eclipseの問題?] django.zipを消して、LocalのPCにインストールされているDjango1.2.4を使用、main.pyを通常のmain.pyに変更 -> "google.appengine.dist._library.UnacceptableVersionError"となる
  • [Eclipseの問題?] django.zipを消して、LocalのPCにインストールされているDjango1.2.4を1.1.3に変更、main.pyを通常のmain.pyに変更 -> 正常に稼動

以上の検証結果より、main.pyが悪さをしている様子。

もう一度main.pyを見直してみる。
もともとappengine_helper_for_django-r109.zipを展開したmain.pyは以下の通り



# Standard Python imports.
import os
import sys
import logging

from appengine_django import InstallAppengineHelperForDjango
InstallAppengineHelperForDjango()

from appengine_django import have_django_zip
from appengine_django import django_zip_path

# Google App Engine imports.
from google.appengine.ext.webapp import util

# Import the part of Django that we use here.
import django.core.handlers.wsgi

def main():
  # Ensure the Django zipfile is in the path if required.
  if have_django_zip and django_zip_path not in sys.path:
    sys.path.insert(1, django_zip_path)

ここでInstallAppengineHelperForDjango()の行でインストールされているDjangoのバージョンをチェックして、1.2以上だとgoogle.appengine.dist._library.UnacceptableVersionErrorをはいていた。

そこでGoogleの"Zipimport を使って App Engine で Django 1.0 を使用する"を参照して作成したmain.pyが以下


# Standard Python imports.
import os
import sys
import logging

from appengine_django import InstallAppengineHelperForDjango
InstallAppengineHelperForDjango()

from appengine_django import have_django_zip
from appengine_django import django_zip_path

# Google App Engine imports.
from google.appengine.ext.webapp import util

# Import the part of Django that we use here.
import django.core.handlers.wsgi


# Uninstall Django 0.96.
for k in [k for k in sys.modules if k.startswith('django')]:
    del sys.modules[k]

# Add Django 1.0 archive to the path.
django_path = 'django.zip'
sys.path.insert(0, django_path)
print sys.path

# Django imports and other code go here...
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'


def main():
  # Ensure the Django zipfile is in the path if required.
  if have_django_zip and django_zip_path not in sys.path:
      sys.path.insert(1, django_zip_path)

"# Uninstall Django 0.96."行から"def main()"までが追記したコード。

だけど、これをよくよく考えてみると"InstallAppengineHelperForDjango()"の後に、Django 0.96モジュールを抜いて、zipにしたDjango1.2.4をimportしている。

要は、せっかくモジュールのチェックをしたのにその後にモジュールを入れ替えているわけです。そりゃ意味ないわな。。。

ということでモジュール入れ替えを先にしたコードが以下。


# Standard Python imports.
import os
import sys
import logging

# Uninstall Django 0.96.
for k in [k for k in sys.modules if k.startswith('django')]:
    del sys.modules[k]

# Add Django 1.2.4 archive to the path.
django_path = 'django.zip'
sys.path.insert(0, django_path)

from appengine_django import InstallAppengineHelperForDjango
InstallAppengineHelperForDjango()

from appengine_django import have_django_zip
from appengine_django import django_zip_path

# Google App Engine imports.
from google.appengine.ext.webapp import util

# Import the part of Django that we use here.
import django.core.handlers.wsgi

def main():
  # Ensure the Django zipfile is in the path if required.
  if have_django_zip and django_zip_path not in sys.path:
      sys.path.insert(1, django_zip_path)

これで正常に稼動した。

今回のどハマリの原因は
Eclipseの起動設定とGoogle App Engine Helper for DjangoのDjango受け入れバージョン問題, Django 1.2の使用, という3つの点が相まって問題を複雑にしていたわけですね。。。(--;

Google App EngineでDjango1.2を動かす2

[稼動環境] Aptana Studio 2.0.5  + Python 2.7.1+ Pydev 1.6.4+ Django 1.2.4 + Google App Engine Helper for Django 1.0.9

前回(google App EngineでDjango1.2を動かす1)の続き

エラーの中身を見るあたり"ImportError: No module named antlr3"とのことで、
要はantlr3のモジュールが見つからないということ。
antlr3モジュールはgoogle_appengine\libの下にあるが、どうもこのフォルダへのパスが通ってなかったのが原因ぽい。


ということで、プロジェクトを右クリックしてProperties -> PyDev - PYTHONPATH -> External Libraryに
${GOOGLE_APP_ENGINE}/lib/antlr3
${GOOGLE_APP_ENGINE}/lib/ipaddr
${GOOGLE_APP_ENGINE}/lib/fancy_urllib
を追加。
自分の環境では、${GOOGLE_APP_ENGINE}はC:\Program Files\Google\google_appengineを指す


さて改めて実行したが、またエラー。今度は
"ImportError: No module named admin.options"
これはdjango.zipファイルのdjango\contrib\admin\options.pyを指している様子。

GAEのドキュメント"Zipimport を使って App Engine で Django 1.0 を使用する"ではadminフォルダを消してもいいって書いてあるのに。。。
仕方ないのでDjangoフルパッケージを再度django.zipにしてプロジェクトのdjango.zipと置き換える。

気を取り直して再実行。けどまたエラー。
"google.appengine.tools.dev_appserver.AppConfigNotFoundError"です。
このエラーはapp.yamlファイルが見つからないのが原因のようです。
appengine_helper_for_django-r109.zipファイルをimportした際にsrcフォルダ下にちゃんとapp.yamlファイルがあるのに正しく認識されないのはどうしてだ?と思っていたら、
今度はEclipse側の設定の問題だったようです。

Run -> Run Configurationで、先ほど作成したPydev Google App Engineの起動設定のArgumentsのWorking directoryをDefaultの${project_loc}からOtherにチェックを入れて${project_loc}/srcに設定を変更。



これで再度実行。すると、consoleに色々とメッセージが出る。

"INFO:root:zipimporter('C:\\Documents and Settings\\Administrator\\My Documents\\Aptana Studio Workspace\\DjangoOnGAE\\src\\django.zip', 'django\\contrib\\')"
Djangoライブラリが読み込まれている


"WARNING:root:Could not read datastore data from c:\temp\django_djangoongae.datastore"
django_djangoongae.datastoreが見つからないと言われるが、そもそもファイルがないからそのまま放置

"WARNING:root:Could not initialize images API; you are likely missing the Python "PIL" module. ImportError: No module named _imaging"
これもnamed_imagingモジュールがないと言われているが解決策はGAEのサイトにある。とりあえず今は画像を使わないのでこれも放置


とはいえ
"INFO:root:Running application djangoongae on port 8001: http://localhost:8001"が表示されたので起動しているっぽいのでアクセス。

するとまだエラーが出る。

ChromeでアクセスするとResolver404エラー

 EclipseのConsoleにも"django\core\handlers\wsgi.py:222:  RuntimeWarning: Parent module 'django.core.handlers' not found while handling absolute import"などが表示されて、"INFO:root:"GET / HTTP/1.1" 500 -"が出ている。

むー。なかなか先は長いですね。


2011年1月3日月曜日

Google App EngineでDjango1.2を動かす1


Google App Engine上でDjangoを使用する場合、幾つかの制限がある。
それを補完するためにGoogle App Engine Helper for Djangoというツールが提供されている。
使用方法はこちらを参照。

ただ、このガイドではEclipseから利用する方法が書いていないので、今回はこの手順をまとめてみる。

使用するのは
[稼動環境] Aptana Studio 2.0.5  + Python 2.7.1+ Pydev 1.6.4+ Django 1.2.4 + Google App Engine Helper for Django 1.0.9

1. Aptana(Eclipse)を起動し、Pydev Package Explorerを右クリックしてNew->Projectを選択し、Pydev->Pydev Google App Engine Projectを選択


2. Project nameを適当につけて、Project typeをPython, Grammar Versionを2.7にしてNext>

3. Google App Engine Dictionaryのパスを指定。google_appengineフォルダを指定すると、自動で${GOOGLE_APP_ENGINE}, ${GOOGLE_APP_ENGINE}/lib/django, ${GOOGLE_APP_ENGINE}/lib/webob, ${GOOGLE_APP_ENGINE}/lib/yaml/libが追加される

4. application id registered for this projectをGAEに登録しているIDとし、templateはひとまずEmpty Projectとする

5. できたプロジェクトのsrcフォルダ内に、Google App Engine Helper for Djangozipファイルをimportする。

6. importするファイルタイプをArchive Fileを選択

7. ダウンロードしたzipファイルを選択
 8. プロジェクトにzipファイルの中身がimportされる。

9.appengine_helper_for_djangoパッケージは不要なので、それより下のappengine_djangoパッケージなどをsrcフォルダに移動して、appengine_helper_for_djangoフォルダを削除する

10. プロジェクトを選択肢、Run -> Run ConfigurationでPydev Google App Runをダブルクリック。Nameは適当に入力し、Projectを実行したいプロジェクトを選択、Main Moduleをimportしたmanage.pyを選択

 11. argumentsタブでprogram argumentsに"runserver"を入力して、Run

12.実行後コンソールには"google.appengine.dist._library.UnacceptableVersionError"が表示される

どうやらappengine_djangoパッケージにある__init__.pyのなかでDjangoのバージョンを1.0か1.1に限定しているようで、このままでは使用できないようだ。

次回(Google App EngineでDjango1.2を動かす2)へ続く。

Amazon3