2010年10月24日日曜日

GAE:ImportError: No module named fancy_urllib

 久しぶりに GAE のプログラムをいじろうと思ったら、ローカル環境で動かない。さて、最後にいじったのは数ヶ月前なので、何がなんだか...。

 Aptana のコンソールを見ると、エラーの内容は
ImportError: No module named fancy_urllib
 いろいろ検索すると、こちらのページを参考に dev_appserver.py の EXTRA_PATHS に os.path.join(DIR_PATH, 'lib', 'fancy_urllib') を追加(このページでは、dev_appserver.py にはあって __init__.py in appengine_django directory にはないので、そっちに追加しろとあるが)。

 これで動くようになった。どこかのセミナーで GAE をやるなら英語は必須と聞いたことがあるが、今回のトラブルも日本語のページは一つもなかった。

 AppEnginSDK のバージョンアップに伴う問題らしいが、ずいぶんと敷居が高い。が、ま、それを超えてしまえば金になりやすいということでもある。

2010年8月31日火曜日

iGoogle ガジェット:gadgets.views がないっていわれた

 Canvas view で画像の大きさを変えようとしたら、どうもうまくいかない。よくよく調べていくと、FireBug のコンソールに 'gadgets.views is undefined' と出てきた。無論、''は入れてある。

 Canvas view に対応している他の gadget も少し調べてみたが、''すら入っていない。なにかやる方法はあるはずなのだが...。

2010年8月25日水曜日

iGoogle ガジェット:なぜ?

 某ガジェットを元に変更中。先週末の続きを開始。

 ちょっとだけ url を変更して...、動かない。元に戻すが動かない。元のファイルをコピーして svn にアップして試すが...動かない。

 小一時間あれこれやって、ふと FireBug の「コンソール」を見ると JavaScript がエラーを起こしている。

 なぜ????

 なぜかまったく理解できないところでエラーが出ている。

 都合一時間半やったがまったく進展なし。それどころから元のファイルをコピーしただけでエラーを起こすんだから、後戻りしてしまった。

 サンデープログラマーの貴重な一時間半が...。

----
 原因判明、ソースの途中で コメント /* */ の、ケツの */ が途中で落ちていた orz。

 gadget.xml の中の JavaScript なので、eclipse の構文チェックが利かなかった。
 いかんなぁ、文明の利器に頼りすぎると...

2010年8月16日月曜日

iGoogle ガジェット:gadget.xml のキャッシュが

 Google Code に gadget.xml を置いて、iGoogle ガジェットを開発しているのだが、iGoogle 側のキャッシュがなかなかクリアされない。

 更新されていることを確認するために ModulePrefs の title 属性を更新し、それが反映されていることを確認したのだが、なぜか javascript の変更がプログラムの動作に反映されない。My Gadgets の Cached のチェックをはずしても変化なし。
 Firebug で javascript のソースを追って、やっと変更が反映されていないことを確認。一時間以上はどぶに捨てた。ホビープログラマにとってこの時間はでかい。

 結局 gadeget.xml の名前を変更して対応。何かスマートな対応法はありそうだが。

iGoogle ガジェット:gadget.xml no

2010年8月15日日曜日

Google Code て、すげー

 現在 iGoolge のガジェットを作成中。

 デベロッパーツールのページの指示に従ってGoogle Code を初めて使ってみたのだが、eclipse と組み合わせて「あ」というまにクラウド上に svn リポジトリができちまった。

 ただし、まだちょっと動きが変。一筋縄ではうまくいかないようだ (^^;

2010年8月13日金曜日

JavaScript:いまどきこれをやるか?

 Javascript を勉強するために、とあるコードを読んでいる。

 と、
foo = foo || bar.attr("href");
なるコードが出てきた。

 調べてみると「論理積と論理和で代入する値を選択する」というページを発見。「ECMAスクリプトの仕様書の邦訳」に
&& 演算子、また || 演算子の生成する値が Boolean 型である必要はない。生成される値は常に、 2 個の項式のうちの 1 つの値である。
なり記述があるそうだ。

 C のときには (foo() && bar()) なんてコードは、動くけど使うべきではない、なんて論議があったけど、JavaScript でもそんなコードを書くとは...。

気がつけば

常山日記が止まっている。

普段は多すぎて読みきれないが、止まってしまうとなんだか寂しい。

2010年7月21日水曜日

JavaScript:form で submit() できない

 PHP プログラマとして採用されてからはや2週間。「PHP、今回が初めてなんです」と言ったら、一回り以上若い上司が「げぇ」っていう顔をしていたが、高度な「ポータブルスキル」(<-面接のときに社長から「あなたは持っていないと言われた」)のおかげで何とか一山超えた。
 お仕事では PHP プログラマとして活躍中(?)なのだが、会社から外のインターネットにフィルタリングされているのと、バリバリ NDA がかかっている(ネットで検索してもまったく情報がでてこない)ので、ここ何週間が書くことがなかった。
 今日見つけた「某社の html パーサーは閉じタグのチェックがきつい」なんて話はネタとしては面白いのだが...。

 先週までは残業続きで自分の時間など持てなかったのだが、今週に入ってからは早く帰れるようになってきたのでしばらくぶりに自分のお仕事再開。契約社員としての契約書には兼業禁止の項目はなかったし (^^;

----
 久しぶりに GAE のプロジェクトの機能拡張。セレクトボックスを追加して、選択した時点でジャンプするようにしたのだが、さっそくはまる。

 調べた結果、

<select name="book_state" onChange="document.forms[content].submit();">
 でいくはずなのだが、なぜかうまくいかない。

 週の初めの祝日の月曜日に時間をつぶし、今日家に帰ってからしばらくやったがだめ。google 様にお伺いを立てると、何のことはない「select submit エラー」で一発で答えが出た
 form の中の要素に sbumit の名を持つもの (name="submit") があるとアウト。form オブジェクトと解釈する前にメンバ変数として解釈してしまい「submit は fuction ではない」といわれてしまう。
 今回は input hidden のひとつの名前が submit だった。

 あぁ、おいらの貴重な時間を返しておくれ!!

2010年7月3日土曜日

OpenSocial:JavaScript 勉強中

 OpenSocial コンテンツの動的変更は JavaScript が必須と見て、いまさらながら JavaScript を勉強中。

 家の本棚にあった、一番古い JavaScript の本は、2000年11月初版4刷。当時は CGI といえば Perl だったようだ (^^;。

 10年間、一度もビッグメジャーにはならずに、それなりのニーズがあって生き延びてきた言語は珍しい。

 HTML5 で、ビッグメジャーになれるか?

2010年7月2日金曜日

PHP:プログラムを作ってみた

 PHP のマニュアルをだいぶ読み進んだので、実際のコードを少し追ってみたくなった。

 が、適当なソースが見当たらない。いきなり symfony などの大きなものに挑戦すると、挫折するのが目に見えている。

 なので、ちょっとしたコードを書いてみることにした。ネタは 8queen。最初にプログラムを見たのは、確か、PC-8001 用のものを雑誌で。当時は Z80 アセンブラに書き換えて「早い早い!」と喜んでいたものだ。

OpenSocial:書き換えは JavaScript

 iGoogle ガジェットのソースをいくつか見ているのだが、HTML で表示するのは
Loading...
だけで、あとは全部 JavaScript で書いているようだ。

 PC は、まぁよいとして(JavaScritp も覚えなくてはならないという話は別にして)、ケータイはどうするのだろう?やっぱり Flash か?

2010年7月1日木曜日

PHP:リファレンス(参照)とポインタは違うのか

 C と同じような書き方をするので、同じかと思ってた

 こりゃ、クラス定義も C++ と似て非なるものかもしれない。

OpenSocial:動的生成はどうやるの?

 今、OpenSocial を、iGoogle デベロッパー ガイドを見ながら調べているのだが、これってページというかコンテンツの動的生成はどうやるのだろう?

 仮に XML の中身を動的に更新しても、これは各サイトごとにキャッシュされているから更新されない。
 中身を全部 JavaScript で組んで、dom 経由で更新するしかないのか?いや、フレームでも入れるか?

symfony:今日のなぞリスト

コメントで解決済み

アクションとビューがどうやって紐付けられているのかわからない。

こちらのページだと、edit アクションが表示されるときのビューは、editSuccess.php となっているのだが、そう紐付けられる理由がわからない。ディレクトリ構成+ファイル名で決まるのか...。

symfony:実行の必要なコマンドまとめ

 こちらのページのチュートリアルファイルのまとめに続いて、コマンドのまとめ

3:テーブルの生成
3:fixtureを使ったテストデータの投入
4:ディ レクトリのパーミッション
7:post モジュールの作成

 リストにしてみると、意外と少ない。

symfony:設定の必要なファイルのまとめ

こちらのページのチュートリアルをやってみたのだが、一回通しでやったぐらいでは理解できないので、少しまとめてみる。

このチュートリアルで操作したファイルは、
2:config/databases.yml データベースへの接続設定
3:config/doctrine/schema.yml スキーマの定義
3:data/fixtures/fixtures.yml データベースに投入するテストデータ
4:apps/frontend/config/settings.yml CSRFシークレットの変更
7:apps/frontend/modules/post/actions/actions.class.php 記事一覧画面の URL が呼び出されたときの処理
8:apps/frontend/modules/templates/indexSuccess.php 記事一覧画面のテンプレート
9:lib/form/doctrine/PostForm.class.php フォームクラス
9:apps/frontend/modules/post/actions/actions.class.php PostFormを使って入力を処理するアクション

9:apps/frontend/modules/post/templates/newSuccess.php フォームのビュー
10:lib/form/PostForm.class.php バリデーターの設定
11:apps/frontend/modules/post/actions/actions.class.php 記事一覧画面でのアクションの追加
12:apps/frontend/modules/post/templates/editSuccess.php 編集時に表示されるビュー
13:apps/frontend/config/routing.yml ルーティングの設定

2010年6月30日水曜日

symfony:チュートリアルが終わった

 このブログのコメントで教えていただいたチュートリアルがとりあえず終わった。
どうも Django とはだいぶ違うらしい
設計思想の問題というか、根本的なところで切り分け方が違うようだ。チュートリアルに CakePHP と比較している部分があったので、そちらとは比較ができるのだろう。
PHP のフレームワークにテンプレートエンジンは要らない
HTML のソースの中に PHP が直接かけるのだからテンプレートエンジンは要らない。ただ、しテンプレートはプログラマでなくては書けない。Django のテンプレートはデザイナーでも扱えるという意味がやっとわかった。
 何度か読み直してぼんやりとでもイメージできるようにしよう。

symfony:スキーマーがいるのか。

 Django には無かった...。

ハンガリアン表記とキャメル記法

 (今で言う?)キャメル記法ハンガリアン表記だと思っていた。
 アンダーバーでつなぐのはスネークケースと呼ぶのか。

CentOS:PHP のバージョンアップ

CentOS 5.2 の PHP のバージョンアップの続き。
アップデート前のバージョンはこんな感じ。
[root@ML115 ~]# yum list installed php*
Loading "fastestmirror" plugin
Loading "installonlyn" plugin
Installed Packages
php.x86_64 5.1.6-27.el5 installed
php-cli.x86_64 5.1.6-27.el5 installed
php-common.x86_64 5.1.6-27.el5 installed
php-ldap.x86_64 5.1.6-27.el5 installed
php-mbstring.x86_64 5.1.6-27.el5 installed
php-mcrypt.x86_64 5.1.6-15.el5.centos.1 installed
php-mysql.x86_64 5.1.6-27.el5 installed
php-pdo.x86_64 5.1.6-27.el5 installed
phpmyadmin.noarch 2.11.10-2.el5.rf installed

2010年6月29日火曜日

PHP:なかなか手ごわい

 symfony の環境づくりを co-Linux から CentOS 5.2 に乗り換えたら MySQL,phpMyAdmin のインストールは拍子抜けするほどあっさり終わったが、今度は phpMyAdmin がエラーになる。「sys_get_temp_dir()なんてありもしない関数を呼んでるぞ!!」といっているのだが...。

 なに、PHP 5.2.1 から実装された関数ね。現在のバージョンは 5.1.6 だからバージョンアップすれば良いだけ....。

 これがうまくいかない。yom repostiory を更新しなくてはならないようなのだが、そのデータファイルがなくなっているらしい。
 サーバーは redhat か。あそこは昔から古い rpm をすぐ捨ててしまうんだよなぁ...。

 しょうがない。明日探そう。

MySQL:設定

 こちらのページの内容通り。

 コピペだけで作業が進んでいく。いや、メジャー OS は楽だ。

PHP:phpMyAdmin インストール終了

 ほぼこちらのページの通りに実行して、立ち上がった。ラッキー。うまくいかなかったのは、GPG キーのインポート。
[root@ML115 ~]# rpm --import RPM-GPG-KEY.dag.txt
警告: 排他ロックを獲得できません (/var/lib/rpm/Packages)
と警告が出た。


 メジャー OS は情報が多くて楽だ。

co-Linux が壊れた....

 PHP+symfony 練習用の co-linux 、phpMyAdmin を入れようとしたら壊れてしまった orz。HDD の容量ぎりぎり一杯のところでインストールしたり失敗したりしたのが原因らしい。

 fsck しようとしたら、マウントしてるディスクにかけるとデータが壊れるかもね、といってきやがる。

 何か手はあるかもしれないが、時間も惜しいし、ストレージが 2G ではこの先何かと不安がある。

 明日からは涼しくなるというし、あきらめて長い間死蔵していた ML-115 を起動。

symfony:ちょっと試そうと思っているのだが...

 すごい複雑。プロジェクト・アプリケーションをセットアップするだけでファイルを何十と作る。

 Django だと 5-6個なんだけど...。

 最初に手をつけたフレームワークが symfony だったら、絶対モノにならなかったと思う。

2010年6月28日月曜日

symfony:samba とは相性が悪いらしい

 co-linux 上で PHP が動くようにして、symfony のサンドボックスをインストールしたのだが、なんだかうまくいかない。

 最初はメッセージ表示ルーチンの IP アドレスチェックに引っかかり(このページを frontend_dev で検索)、結局エラーチェックをコメントアウトapatch のログを見て windows 側のアドレスを探して設定(TAP のアドレスだった)。

 それでエラーメッセージは変わったが、まだうまく動かない。Django のときにも思わぬところで引っかかったので、web server の root directory を samba 経由から co-linux のローカルに移動。

 無事動いた。

PHP:インストール成功

 PHP 環境を Linux 上に作ることにした。まずは使っていない古いサーバー上にインストールしようかと思ったのだが、室温 35℃を越える状態で、さらに室内に電気ヒーターを増やすという選択肢はありえないので、以前 Django をデプロイするときに練習に使った、メインマシン上の co-Linux を使うことにした。

 午前中から初めて、途中飯を食ったり洗濯をしたりしながら、ようやくサンプルプログラムが動いた。実質4時間ぐらいかかったのではあるまいか?
 最後の最後は info.php と書くべきところを info.html と書いてしまって嵌ったし...。

 4ヶ月ほど前には散々いじくり回したはずなのだが、apatch どうやって動かすかすら覚えていなかった orz。

 さて、一休みしてから、symphony のサンドボックスを入れよう。

 

2010年6月27日日曜日

PHP:official document に目を通しているが

 増改築を繰り返した温泉旅館のニオイがプンプンする。完全にマスターするには「サンクコスト」が高そう。

 一からプログラムを作るなら、使う機能だけを覚えていけば良いのだが、既存プログラムのメンテは大変そうだ。

 

2010年6月25日金曜日

故あって、PHP プログラマに転向

 フリーでやっていこうと思ったが、なかなか厳しそうなので、転職サイトからきたメールの求人に申し込んだら内定が出た。

 ということで今日から、PHP + Symfony のお勉強。

 まずは PHP。
----
 新しいプログラミング言語を覚えるときは、制御構文->変数の型->ライブラリ の順で行くことにしている。それぞれに特徴的なものを押さえていけば何とかなると思うのだが、PHP はどうなっているやら。

 

2010年6月24日木曜日

aptana Django:パスに全角スペースのディレクトリがあると動かない??

 普段はディスクトップ PC 上の aptana で開発をしているのだが、故あってノート上に aptana をインストールしてデモする必要がでてきた。

 SVN の調子が悪いので、プロジェクトをディレクトリごとコピーして aptana にインポートしようとするとうまくいかない。いや、インポートはうまくいくのだが、実行するとデータベースにアクセスできないといってくる。
 いろいろ調べたのだが、何が悪いのかさっぱりわからない。たまたまプロジェクトのコピー先を全然別なディレクトリにするとあっさり動いた。

 よくよく調べてみると、最初にプロジェクトをコピーしたのが

C:\Users\□\My Documents\Aptana Studio Workspace (□は全角スペース)

 と、なぜかユーザー名が全角スペース。

 なんだかわからないが、怪しい...。

2010年6月20日日曜日

SVN サーバーにつながらないと思ったら

 aptna から SVN にコミットしようとしたがなぜかつながらない。調べていくと...、なぜか Visual SVN サーバーが起動していなかった。

なぜだ?

小一時間時間をドブに捨ててしまった。

2010年6月14日月曜日

jQuery:UI Datepicker の日本語化

 日付入力部分に、jQuery UI の Datepicker を使うことにした。入力欄は使わず inline で最初から表示させる。

 カレンダーの表示を日本語化させようと、紹介ページの最後にある
You can restore the default localizations with:

$.datepicker.setDefaults($.datepicker.regional['']);
とあったので
$(document).ready(function(){
$.datepicker.setDefaults($.datepicker.regional['ja']);
})
を追加したのだがなぜかうまくいかない。

2010年6月12日土曜日

Django:データベース移行時の注意

 お客さんのうちの一箇所 Django + SQLite で作ったシステムを納めている。

 データベースの構造が変わったときは、古いデータベースの内容を新しいデータベースへ自作のツールを使って移行させている。

 このときの要注意事項がひとつ。

 ユーザーの作ったテーブルにカラムを追加されるようなときは問題ないのだが、Django の管理するテーブルのパーミッションが追加されるような場合は要注意。
 ちょっとしたコツがいるのだが、やり方は忘れた (^^;
 古い記憶を手繰ったところでは、'auth_permission' だけは古いデータベースからコピーしない。そして、古いデータベースの内容を見ながら新しいデータベースに手入力する。
 このテーブルは項目が増えたとき順番が変わってしまったため、上記の手順を取らないとうまくいかなかった。
---
 SQL の ALTER TABLE コマンドを使えば下手なツールは不要なようだ。要調査。

2010年6月8日火曜日

JS:JavaScript 修行中

 今日は、ひとつの form の中に submit が二つある場合の見分け方。
 珍しく「はてな」で見つけた

 動いたコードを良く見ると、name="submit" というタグがないのに submit.value にアクセスできてる。submit を sbmit とスペルミスしたら動かなかった。これって怪しい使い方?

 トラブルとイヤなので、を追加した。

2010年6月2日水曜日

GAE Python:妙なエラーが

 URL からクエリストリングを取り出そうとあれこれやっていた。

 Aptna を使い、適当なところでプログラムを止め、構造体を眺めていたらクリエストリングの入った辞書を発見。
 で、そこにアクセスすると妙なメッセージが。
DeprecationWarning: The attribute queryvars is deprecated: use GET instead
 どうやら「アトリビュート'queryvars'は廃止予定(deprecated)だから、代わりに 'GET' を使ってね」ということらしい。

 よくよく調べていくと(Requestクラス->WebOb)WebOb というのを使っているらしい。

 奥が深い。

 

2010年5月31日月曜日

GAE:Datasotre のクエリを実行する方法

 この項目の最後の方にあるけど、fetch() を実行するか iterable として処理するしかないそうだ。

 for に入る前にデータがいくつあるか調べるには fetch() を実行するしかない、てことね。

 

2010年5月29日土曜日

AWS:エラーが発生

 作成中の web アプリケーション、デプロイしてデータを食わせるとエラーが発生した。

 さて、困ったと同時にちょっとワクワクする気持ちが半分(^^;。やっぱりオイラは問題を解決すのが好きな人、のようだ。

 原因は、ちょっとログを吐かせて記憶を手繰りながらググるとすぐ判明。AWS の PA-API が一秒より短い間隔ではデータを受け付けないこと

 作っているのは読書データ管理プログラムなのだが、データを増やしていったら、データ一覧を表示する部分で発生。ま、当たり前か。

 一覧表示件数を 10件ぐらいにすればよいのだけれど、ページングの処理は自分でしなくては駄目か。Django の ペジネータ は使えないかなぁ。

 あ、広く公開してみんなが使うようになったらどうしよう?、てそんなことは今から考える必要も無い (^^;

2010年5月28日金曜日

山を越えた

 作りかけの GAE アプリが出来た。

 GAE Python + AWS PA-API を使った読書管理システム。

 動くようになったら、一気にやる気がうせてしまった。デザインが全くお話にならないのだが....。

 

2010年5月27日木曜日

JS:今日は JavaScript と遊ぶ

 今日は JavaScript と遊ぶ。C 上がりのプログラマとしては JavaScript 自体より、DOM の方が難しい。

 HTML の要素・属性と DOM の要素の区別が微妙。

 プロパティにアクセスするだけで小一時間かかってしまった。

2010年5月25日火曜日

HTML:特定のテキスト入力域にフォーカスをあてるには?

 google に「html input フォーカス」と入れて、一番最初に出てきたページに答えがあった。

 キモは body タグに onload="document.forms[0].sono1.focus();" を付け加えること。

2010年5月24日月曜日

Django:Django 1.2 の変更のまとめ

Django 1.2 の変更のまとめ
のページを twitter 経由で発見。

項目だけ見ていくと
 ・マルチDB
 ・モデル検証
 ・CSRF 対策
 ・messages API
 ・メールバックエンド
 ・smart if テンプレートタグ
 約半分は何がどうなったのかわからない (^^;

 もっと勉強せねば。 

2010年5月22日土曜日

Aptana Eclipse:SVN がおかしくなったら

 先日 Aptana をアップデートしたら、SVN が動かなくなった。connector がなんチャラとエラーが出る。

 再起動したり、Project を share しようとするタイミングで SVN のプラグインを六つほどインストールするように聞いてくるので、適当に選択してやるも、「最新バージョンインストール済みでインストール不可」とかいってくる。そんなことを何度か繰り返すがうまくいかない。

 結局それらしい plug-in を一旦削除->再インストールで動くようになった。
 やり方は Help->About Aptana Studio->Installation Details で開くダイアログの Installed Software タグの中から SVNKit 1.* を全部 Uninstall して、再起動 -> 同じもの再インストール。

 SVN は使い方がよくわからないし、SVN サーバーが同じマシン上にあるのであまり役に立つとも思えないが、気休め程度に使用中。

google のパックマンは

javascript で書かれているみたいだ。

一応ソースを抜いてみた (^^;

2010年5月21日金曜日

web 系ってやつは

 昨日まで GAE+Python と格闘していたのに、今日は css と戯れる。何日かしたらテストパターンを作って地道なテストに入らなくてはなるまい。

 多分「プロ」は分業なんだろうなぁ。

 ま、当分は一通りこなさねば。

2010年5月19日水曜日

GAE Python Django:テンプレートからリストにアクセスする方法

こんな感じでよいみたい
{% for list in lsits %}
{{ list.0 }}
{{ list.1 }}
{% endfor %}

辞書もいけるようだ

GAE Python:ローカル変数が使える??

 SDK にて。関数でもなんでもないところに、定数代わりにリストでテーブルを作って、データベースから読み出した値で一部を書き換え、テンプレートに渡す、という処理をしていた。
 プログラムは URL でアクセスされるたびに再起動されるわけだから、テーブル代わりのリストも毎回新規作成されるだろうと思っていたら、前回書き換えた値が次回にも残っていた。

 これって...、今回は不具合として出てきたから良いが、偶然動いてしまう情況だったら、ちょっと手ごわそうな不具合になりそう。

2010年5月17日月曜日

GAE Python:なんだか形になってしまった

 GAE+AWS を使った読書管理システム。なぜか基本部分が出来上がってしまった。

 手をつけてからちょうど3週間。長いのか短いのかはわからないが、意外と簡単。

 さてここからは細かい仕事がいろいろと延々と待っているのだが、最後まで持っていけるか?

2010年5月16日日曜日

GAE Python:メールを受信しようとしたら

 こちらのページの内容を元に、aptan 上でメール受信のテストをしようとしたら、なにやら
11:20:48,650 py_zipimport.py:103] Can't open zipfile C:\hp\bin\Python\lib\site-packages\setuptools-0.6c3-py2.5.egg: IOError: [Errno 13] file not accessible: 'C:\\hp\\bin\\Python\\lib\\site-packages\\setuptools-0.6c3-py2.5.egg'
INFO 2010-05-16
 とエラーが出て、動いている様子がない。

 調べてみると、このエラーメッセージは特に関係なく、メールを受信したハンドラのあるファイルに
def main():
run_wsgi_app(application)

if __name__ == "__main__":
main()
 という、非常に基本的なコードが入っていないことが原因だった。
 基本的過ぎて、サンプルコードにも入ってなかった orz。

 これで小一時間はドブに捨てたなぁ。もったいない。

2010年5月14日金曜日

GAE Python:日本語の関係でちょっと嵌る

 一区切り付いたので一応デプロイしてみたら、お約束で動かない (; ;)

 最初は文字コードの 0xXX が処理できない、みたいなエラー。ソースの発生した場所を見てみると、新しく追加した日本語コメントの場所。
 ここはお約束でファイル先頭に '# -*- coding: utf-8 -*-" を追加。基本をサボるとつまらんところに引っかかる。

 二つ目はちょっと手強かった。フォームでデータを入力し、[登録]ボタンを押すとデータストアに登録されるはずなのに、なぜか全く登録されない。
 aptana,GAE Launcher では全く問題ない。

 あっちこち調べていくうちに、app engine の Dashboard(GAE Launcher の右上のボタンから入れる)の左メニューに Logs を発見。開くと E のアイコンが !!

 開いてみると、メッセージはこんな感じ。

UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal

E 05-13 09:30PM 18.654

if self.request.get('cmd') == '登録':
 なるほど、登録のボタンが押されたことを認識できなければ、当然データベースに登録はされない。
 さてどうしようと悩んだが、とりあえず u'登録' とやってみたら OK。
 これも基本中の基本だよなぁ orz。

 三歩進んで二歩下がり下がりながら、今日も一歩前進。

2010年5月13日木曜日

GAE Python:date django オブジェクトで嵌る

 datastore の DateProperty に値を入れようとしたらなかなか入らない。

 いろいろ調べた結果、
・DateProperty は Python の date 型、str は入らない
・date 型は datetime 型と違う
・datetime -> date の型変換は datetime.date()
 ということで何とかなった。

 c の、整数値一本ですべて扱うというのが懐かしい。あれはあれで面倒だったけど。

 あと django テンプレートの ifequal/ifnotequal の動きが変^hよくわからない。とりあえず if に書き換えた。

2010年5月11日火曜日

GAE Python AWS:とりあえず、動いた

 半月ほど前に始めた、AWS+GAE Python による、読書情報管理システム、たたき台というか骨格部分が aptana 上で動いた。

 さて、ここから肉を付けて行かなくてはならないのだが、飽きずにやっていけるか...。

 

2010年5月7日金曜日

GAE Python:ImportError: No module named _multiprocessing は、

 ここいらここいらを見ると GoogleApp Engine Launcher が python 2.5 ではなく、2.6 を使っていることが原因らしい。

 で、App Launcher の Edit->Preferences を開いて Python Path を見ると空欄になっていて、default が C:\Python262\pythonw.exe とある。

 ここに C:\Python262\pythonw.exe と入れて再挑戦。正常に動いた。

2010年5月6日木曜日

GAE Python AWS:デプロイしたら

 作成中の GAE+AWS アプリ、切りの良いところまできたのでデプロイすることにした。

 aptana 上で debug してたので、まず、Google App Engine Launcher から起動すると...、 App Engine の中で
ImportError: No module named _multiprocessing
 と出て、途中で止まってしまう (; ;)
 めげずに (^^;、デプロイ。データをいくつか入れて、最初のうちは動いていたのだが、日本語を入力すると
UnicodeEncodeError: 'ascii' codec can't encode characters in position ....
 というエラーが。こっちは自分で書いたコードで出たので、調べてみると、どうも文字コードの問題らしい。

 google 様にお伺いをたてると、ピッタリのページが。
 結局
       val = str( params[key] )
        if type(params[key]) == unicode:
val = params[key].encode('utf-8')
else:
val = str( params[key] )
に書き換え。

 いろいろ調べたが、どうも aptana の python が 2.6 の気配がある。明日調べよう。

 あ、あと、AWS に日本語を食わせるときは UTF-8 のようだ。

2010年5月5日水曜日

Python GAE AWS:AWS の 返した xml を ElementTree で使うには、

 AWS の返した xml、minidom でうまく解析できたので、ElementTree を使ってみようと思ったらうまくいかない。
 テストコードを書いて、XML を切り貼りしながら調べていくと、調べるほど動きが不思議。
 何度かネットで調べていくと、こんなページを見つけた。元凶はxmlns 属性だそうな。むー。こちらでは6時間嵌ってあきらめた人もいるようだから、原因が見つかっただけマシか。ま、おいらも6時間ぐらいドブに捨てたけど。

 さて、ここからどうするか。minidom に戻るか、xml.sax にするか、ElementTree でもう少しがんばるか。

----
 結局、xmlns 属性を削除することにした (^^;。正規表現を使ってこんな感じ。
import re
t = re.search('xmlns=".*?"',xml)
xml = xml[0:t.start()] + xml[t.end():]
 恐るべし Python、てか、いまどきの LL はこれぐらいのことはフツーに出来るんだろうが、C/C++ が長かったせいか浦島太郎状態。


 

2010年5月4日火曜日

GAE Aptana Python:ブレークポイントを生かす方法

 Aptana を使って GAE/Python のデバッグを始めたのだが、ブレークポイントがうまく機能しない。たまに使えることもあるのだが、フツーに設定すると止まらない。

 これは、Aptana で django のデバッグをやり始めたときにもあった。あの時はどうやって解決したのかと、悩んだが思い出せない。

 あれこれ考えて、やっときちんと動くブレークポイントの設定方法がわかった。

 1.まず、エラーを起こして、コンソール窓にエラーメッセージを表示させる。
 2.コンソールからエラーが発生したソースへのリンクをクリックする
 3.2で開いたソースにブレークポイントを設定する。

 Project Explorer から開いたソースファイルにいくらブレークポイントを設定しても効かない。

 これでようやくすっきりした。

2010年5月2日日曜日

AWS:memo ItemLink の Description

 ItemLinks ->ItemLink -> Description の内容と、その下の URL のリンク先
 なぜか英語で返ってくるのでメモ
・Add To Wishlist -> ほしいものリストに追加
・Tell A Friend -> 友達に知らせる??(何も表示されない)
・All Customer Reviews -> 「カスタマーレビュー」のページ
・All Offers -> 新品および中古品(要はマーケットプレイス)

ちなみに商品ページは DetailPageURL

2010年5月1日土曜日

GAE Python AWS:レスポンスが返ってきた

 最初に参考にしたページが AWS 用のモジュールだったのだが、Product Advertising API 用ではなかったことに気が付かずだいぶ時間を取られてしまう。AWS って妙に奥が深そうでよくわからない (^^;

 こちらこちらのページ、そしてそこからたどり着いたこちらのページ(Signed Requests Helper)を見ながら cut & try を繰り返して何とかレスポンスが返ってくるようになった。

 ちなみに変更後のソースはこんな感じ。
import os,hashlib,hmac,base64,time,urllib
import xml.dom.minidom

akey = 'xxx'
skey = 'yyy'
def get_url(params, host, path):
'''return signatured rest request url.
For detail, see http://docs.amazonwebservices.com/AmazonSimpleDB/2009-04-15/DeveloperGuide/index.html?REST_RESTAuth.html'''

# first sort the keys alphabetically
keys = params.keys()
keys.sort()

# then construct query string 'key1=val1&key2=val2...'
pairs = []
for key in keys:
val = str( params[key] )
pairs.append( urllib.quote(key, safe='') + '=' + urllib.quote(val, safe='-_~') )
qs = '&'.join(pairs)

# now we get what to sign.
target = 'GET\n%s\n%s\n%s' % (host, path, qs)
sig = base64.b64encode(hmac.new(skey,target,hashlib.sha256).digest())
# url = "https://%s/?%s&Signature=%s" % (host, qs, urllib.quote(sig) )
url = "http://%s%s?%s&Signature=%s" % (host,path, qs, urllib.quote(sig) )
return url

def aws_test(url):
param = {}
param['AWSAccessKeyId'] = akey
param['Service'] = "AWSECommerceService"
param['Version'] = '2009-03-31'
param['Operation'] = 'ItemSearch'
param['SearchIndex'] = 'Books'
param['Keywords'] = 'harry+potter'
param['AssociateTag'] = 'kennik-22'
param['Timestamp'] = '2010-05-01T12:00:00Z'


url = get_url(param, url, '/onca/xml')
res = urllib.urlopen(url).read()

return res
 署名の付け方のドキュメントはこちら

GAE Python AWS:手ごたえがでてきた

 AWS からエラーメッセージらしきものが送られてきた。
AWS.InvalidOperationParameterThe Operation parameter is invalid. Please modify the Operation parameter and retry. Valid values for the Operation parameter include TagLookup, ListLookup, CartGet, SellerListingLookup, CustomerContentLookup, ItemLookup, SimilarityLookup, SellerLookup, ItemSearch, VehiclePartLookup, BrowseNodeLookup, CartModify, ListSearch, CartClear, VehiclePartSearch, CustomerContentSearch, CartCreate, TransactionLookup, VehicleSearch, SellerListingSearch, CartAdd, Help.

2010年4月30日金曜日

GAE Python AWS:AWS の認証に引っかかる

 フツーのサイトは取ってこれるので、URLfetcher は動いている見たいなのだが、AWS というか Product Advertising API にうまくアクセスできない。プログラムがエラーを返す。

 人様のコードをサックとそのまま拝借しようという考え方が甘かったか...。

 AWS の勉強から真面目に始めよう。

2010年4月27日火曜日

GAE Aptana:ようやく雛形が動いた

 ナメてかかったら、プロジェクト生成時にインストールされる 'Hello, webapp World!'を動かすだけで2時間もかかってしまった orz。

 オイラの環境でのキモは、

・Python のバージョンは 2.5 -> 2.5.2 では動かなかった。
・dev_appserver.py に渡す root パスは、すべて文字で書いてダブルクオーテションで括る。 -> なぜか環境変数 {project_loc} は使えず。ダブルクオーテションも必須。

 あとは GAE aptana で検索して出てくるサイトの情報でいけた。

 先は長そうだ...。

2010年4月26日月曜日

GAE:久しぶりにドキュメントを読んだら

 最近ちょっと煮詰まり気味なので、久しぶりに GAE Python のスタートガイドを読んだら...、100%理解できた。

 正確にいうと「Django でいうところのアレね」という読み替えで理解した。

 意外と簡単ジャン。と、ナメてかかってプロジェクトX始動だ (^^;

2010年4月22日木曜日

django:汎用ビューの direct_to_template でちょっと嵌る

 完全に固定されたページを表示させるために、汎用ビューの direct_to_template を使おうとして少々はまる。

 django documentation には
必須の引数:

* template: 使用するテンプレートの完全な名前です。
とあったのに、例題を見てファイル名から '.html' を外してしまった。

 オフィシャルドキュメントであっても鵜呑みにしない。よく忘れるが、キモに命じておこう。

2010年4月20日火曜日

django:管理画面のカレンダーを使う方法

 form 経由はあきらめて (^^;

1.urls.py に以下を追加
(r'^my_admin/jsi18n', 'django.views.i18n.javascript_catalog'),

2.<head></head>の間に以下を挿入
<link rel="stylesheet" type="text/css" href="/media/css/forms.css"/>
<link rel="stylesheet" type="text/css" href="/media/css/base.css"/>
<link rel="stylesheet" type="text/css" href="/media/css/global.css"/>
<link rel="stylesheet" type="text/css" href="/media/css/widgets.css"/>

<script type="text/javascript" src="/my_admin/jsi18n/"></script>
<script type="text/javascript" src="/media/js/core.js"></script>
<script type="text/javascript" src="/media/js/calendar.js"></script>
<script type="text/javascript" src="/media/js/admin/DateTimeShortcuts.js"></script>

3.入力フィールドは以下のように書く。多分 class が重要。
日付<input id="id_start_date" class="vDateField" type="text" name="date" style="width:100px;height:14px;">

2010年4月19日月曜日

Django:form の使い方

 イマイチよくわからなかった form と格闘中

1.html に出力するときは、こんな感じ
class ContactForm(forms.Form):
date = DateField(widget=CalendarWidget)
name = CharField(max_length=40, widget=OtherWidget)

>>> f = ContactForm()
>>> f.media
<link href="http://media.example.com/pretty.css" type="text/css" media="all" rel="stylesheet" />
<script type="text/javascript" src="http://media.example.com/animations.js"></script>
<script type="text/javascript" src="http://media.example.com/actions.js"></script>
<script type="text/javascript" src="http://media.example.com/whizbang.js"></script>


2.model を form にするときは、ModelForm を使うと便利

3.admin の管理画面の wedgit を自前の form で使うときの情報はこちら

2010年4月9日金曜日

Django:管理画面のテンプレートをオーバライド・その後

 管理画面のテンプレートをオーバライドして、デバッグ環境ではうまくいったのだが、デブロイしたらうまくいかない。

 どうも {% extends "admin/base_site.html" %} で継承している継承元をうまく呼び出せていないようで、崩れた形で表示される。

 あれこれやったが、結局アプリケーション単位で必要なブロックだけをオーバーライドする形でうまくいった。

 なぜ最初のやり方がデバック環境でしか動かなかったかは謎だが、謎解きは...、多分しないな (^^;

----
 やったのは結局
1.default のテンプレートをオーバーライドするディレクトリを作る
 settings.py で定義されている TEMPLATE_DIRS の下に admin ディレクトリを作り、その下にさらにアプリケーション名のディレクトリを作る。

2.そのディレクトリにオーバライド部分を書いた change_form.html を置く。内容は以下のとおり。
{% extends "admin/change_form.html" %}

{% block extrahead %}{{ block.super }}
<script type="text/javascript" src="../../../jsi18n/"></script>
{{ media }}
<style type="text/css"><!--
.vURLField { width:60em; } <-- ここがオーバライドされる css
--></style>
{% endblock %}

Firefox:div の扱いが変

 既存のページのレイアウトをちょっと変えて、
<div style="width: 500px;" align="left">
<span style="float: left;">左寄せ</span>
<span style="float: right;">右寄せ</span>
</div>
<hr>
 というコードを書いたら、最後の <HR> がとんでもないところに表示される。
 しばらく悪戦苦闘してから他のブラウザで表示させてみると IE,Chrome,Safri では問題なく表示される(多少垂直マージンに差はあったが)。
 FireBug を使ってよくよく調べていくと、<div></div> で定義した領域の高さがない。中身が[空]になっていて、そのせいで <div> の最後で当然実行されるべき <BR> が実行されず <HR> がとんでもないところに表示されるようだ。
 ためしに </div> の後ろに <BR> を入れると正常な位置に <HR> が表示された。のだが、他のブラウザで余分に行間が開いてしまう。

 最終的には <div> の直後に全角のスペースをひとつ入れることで解決。エレガントな解法はべつにありそうだが、とりあえず良いことにしよう。

2010年4月7日水曜日

Django:models.URLField の管理画面での入力欄の幅を広げる方法

 いろいろな所から情報を集めてなんとか出来た。この方法を応用すれば、管理画面の各種 css のパラメータを変更出来る。

1.default のテンプレートをオーバーライドするディレクトリを作る
 settings.py で定義されている TEMPLATE_DIRS の下に admin ディレクトリを作る。

2.そのディレクトリに dafult からオーバーライドするテンプレートをコピー
 管理画面の[追加・編集]を変更したい場合は
   Lib\site-packages\django\contrib\admin\templates\admin\change_form.html

3.{% block extrahead %} 内にオーバーライドする内容を挿入(こちらのページの687行目)
 今回は以下の赤い部分が追加分
{% block extrahead %}{{ block.super }}
<script type="text/javascript" src="../../../jsi18n/"></script>
{{ media }}
<style type="text/css"><!-- .vURLField { width:60em; } --></style>
{% endblock %}

# extends のパスをうまく設定すれば change_form.html を丸々コピーする必要はなさそうだが、今回はパス このやり方ではデプロイしたら動かなかったので、結局必要最低限だけオーバーライドさせた

2010年3月14日日曜日

Django:プロジェクトの立ち上げ方

 Django のプロジェクトを一から立ち上げるときのやり方。基本は Django project.jp のチュートリアルにあるのだが、それ以外の分も含めて。

  1. Django のインストールしてある Python の path が通った DOS 窓を開く (^^;
  2. プロジェクトを作るディレクトリに移動して
    >django-admin.py startproject new-project
    を実行
  3. settings.py を変更

    1. 24行目のTIME_ZONE を 'America/Chicago' から 'Asia/Tokyo' へ

    2. 28行目のLANGUAGE_CODE を 'en-us' から 'ja' へ

    3. 66行目の ROOT_URLCONF の 'new-project.urls' から new-project を削除

  4. DOS 窓からプロジェクトを作ったディレクトリに移動して python manage.py runserver 8080 を実行した後、ブラウザから localhosit:8080 にアクセスし、
    It worked!
    Congratulations on your first Django-powered page.
    が表示されることを確認
    # ポート8080 は eclipse が使う
  5. setting.py のデータベースの設定

  6. python manage.py syncdb を実行

  7. python manage.py startapp new-app を実行してアプリケーションを作成

  8. settings.py の INSTALLED_APPS に 'new-app' を追加
  9. modles.py,views.py などの先頭に '# -*- coding: utf-8 -*-' を追加

2010年3月13日土曜日

Django:render_to_response で cookie を使う方法

 render_to_response を使って cookie を使う方法、昨日寝ながら考えた。
return render_to_response('item_search/item_list.html',
{'item_list':item,'title':search_tag},
context_instance=RequestContext(request))
r = render_to_response('item_search/item_list.html',
{'item_list':item,'title':search_tag},
context_instance=RequestContext(request))
cookie = ...
r.set_cookie('search_key', cookie)
return r
 ぐらいの感じでよいのかな?

2010年3月12日金曜日

Django:cookie を使うときは、render_to_response を使えないようだ

 render_to_response を使うと cookie を投げなくなった件、調べてみた。

 よく見るとコードが、
response = HttpResponse()
cookie = ...
response.set_cookie('search_key', cookie)
....
t = loader.get_template('x.html')
c = Context({'item_list':item,.....
response.write(t.render(c))
return response
 となっている。

 render_to_response は新たに HttpRespons を作るわけだから、cookie を渡せるわけがない。

 では、cookie を使ってコンテキストプロセッサ経由でテンプレートに値を渡したい場合は、
t = loader.get_template('x.html')
c = RequestContext({'item_list':item,.....
response.write(t.render(c))
return response
 と書いてやれば OK。

 つまらんことに時間を食ってしまったまたひとつ利口になった (^^;

 

2010年3月3日水曜日

Django:render_to_response と cookie の謎

 解決編はこちら

 Django のプロジェクトのデプロイを始めた。

 やっているうちに、テンプレートに context を渡す必要がでてきて、views.py のソースを
t = loader.get_template('item_search/item_list.html')
c = Context({'item_list':item,'title':search_tag})
response.write(t.render(c))
return response
 から
return render_to_response('item_search/item_list.html',
{'item_list':item,'title':search_tag},
context_instance=RequestContext(request))
 に変えた。

2010年3月2日火曜日

XREA:django のデプロイに半日以上かかってしまった

 お客さん用の Django Project を XREA にデプロイしたのだが、思いのほか時間がかかる。

 デプロイだけというわけでもないが、ほぼデプロイで、15:00 から始めて、終わったのが 22:00。

 一日仕事。

 内訳は、
   必要なファイルのインストール 3h ぐらい
   Django の動作確認 1h
   Django プロジェクトのデプロイ 3h

 お仕事でやるにはちょっとかかりすぎだ。マニュアルをまとめるか、バッチを作るスクリプトを書くかかしないと。

2010年2月17日水曜日

HTML+CSS:サイドバーの固定で嵌る

 お客さんから左のサイドバーを固定したいと要望があったので、調べてみる。

 えーと、ブロックの positon プロパティを fixed にすれば良いのね。

 え、IE6 がそれじゃだめ?よくわからんが、google 様に見つけてもらったページに書いてあるとおりに...、だめじゃん。
 ここから長いたびが始まった。どうやら IE6 とそれ以外では、違う動きをしているようだ。そうすると、継承元の設定か。いや、そもそもこの書式自体が少し変。
 別なページのやりかたで...、これもだめ。確かにコードは IE6 とそれ以外で違う動きをしているのだが...。なんか、こう、もっと上位の概念が...。
 ということで DOCTYPE宣言 を入れてみると...、動いた orz。

 最初のページのソースをメインに、二つ目のページの情報を参考にしてソースを直すとうまくいった。
 これで一安心....、にゃ、FF で
  • のドットの表示おかしい。CSS を変にいじったか...。
     なんと、DOCTYPE宣言 が原因だった orz。css の割り当て方法を変えて何とか OK。IE と FF で表示位置が微妙にずれるが、とりあえず良いことにしよう。

     やっぱり HTML は難しいなぁ。
  • 2010年2月5日金曜日

    IT Pro は EC2 か

    中古クラウド、あります
     ITproが米Amazon Web Servicesのクラウド・サービス「Amazon EC2」を使い始めてから1年半。
     日経 BP のサイトが EC2 で動いていたとは以外。もっとも、日経バイトが自前のサイトを立ち上げたときは、そのことをネタに色々記事を書いていたからその血を引く IT Pro ならそれぐらいの冒険はありか。
     これまで運用を担当してきて気がついたことがある。データセンターによってCPUの新しさが違うのだ。
     運用まで記者さんがやるか。これはなかなか。
    仮想マシンを時間貸しするサービスであるEC2は、米国東海岸に4センター、同西海岸に2センター、欧州に2センターの計8センターを抱える。
     そろそろ日本にもできるかな?

    2010年1月19日火曜日

    Django:つまらんことに引っかかった

     先日までのアプリケーションに一区切りつけて、別なアプリケーションを作り始めたのだが、つまらんところで嵌る。

     ページを表示しようとすると、
    "Non-ASCII character '\\xe5' in file C:\\Python26...\\views.py on line 51, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details", ('C:\\Python26...
     とエラーが出た。ソースに全角スペースでも紛れ込んだかとバイナリーエディターをダウンロードして調べてみたが、0xe5 で引っかかったのは文字列の中の漢字の一文字目。よく見ると動いているソースの一行目に
    # -*- coding: utf-8 -*-
     が入っている。コピペした元ソースにはそんなものは入っていないのだが...。

     ま、いいことにして次に進もう。

    2010年1月14日木曜日

    HTML:<input type="text">でEnterを押してもsubmitさせない方法

     デプロイしながら本番アプリを動かしていたら、ページが表示されているときに改行を入力するとおかしな動きをすることを発見。

     調べていくと、<input type="text">でEnterを押すと、勝手に submit されるようだ。

     回避方法は javascript を使ったこちらのページのものを使った。

     ちょっと時間はかかったが、高速道路万歳!!

    2010年1月13日水曜日

    XERA+Django:CORESERVER から XREA に移行

     fastcgi を使うために CORESERVER にデプロイしたのだが、使えないようなので、すでにアカウントを持っている XREA に移行。

     このブログのエントリーを見ながら30分ちょっとで移行終了。二日も嵌った Django の吐く妙なメッセージが XREA では出てこない。python,django その他もろもろのバージョンは全部同じはずなのだが...。

     動いたは動いたが、1ページにイメージをたくさん表示させようとすると 4-5枚しか表示されない。サーバの CPU のパワーの差かと思ったが、再読み込みを繰り返していると読めないイメージが毎回変わってなんだか変。
     よくよく調べると、イメージのパスの変換まで django がやっていた。シンボリックリンクをひとつはって問題解決。CORESEREVER(バグあり)と遜色ないスピードになった。

     レンタルサーバーへの cgi デプロイ編、終了。
     

    CORESERVER+Django:本番アプリはあっさり動いた

     本番アプリは python2.6 で開発していてそれなりのボリュームがあるので、CORESERVER の python2.4 で動かすにはそれなりの手直しが必要か思ったが、ソースの修正は全くなしで、settings.py を修正したり、eazy_install で PIL をインストールするだけであっさり動いた。

     ちょっと拍子抜け。

     スピードも coLinux+apache+fastcgi よりは遅いが開発用の runserver よりはずっと早い。

     とりあえずこれで良い事にしよう。

    CORESERVER+Django:fastcgi はあきらめた

     CORESEREVER を選んだのは、ネットで fastcgi が使えると書いてあるのを見つけたからだったのだが、そのとおりにやってもどうにも手ごたえが無い。
     調べていくと、オフィシャルページに fastcgi の情報はないし、fastcgi は使えないという情報もちら ほら

     潔くあきらめて、本番アプリケーションのデプロイにいこう。

     

    2010年1月12日火曜日

    CORESERVER+Django:Script error に嵌ったぁ

     CORESERVER の CORE-MINI に登録して Django のデプロイに挑戦。
     基本的にはこちらこちらのページを見ながら virtual-python を入れて ez_setup を入れてと進み、Django と pysqlite をインストール。デバッグ情報出すために .htaccess に
    AddHandler cgi-script-debug .cgid
    AddHandler cgi-script .cgi
    と cgid を追加。

     2010-03-02 追加:xrea では上の2行は特に必要ない模様。CORE SERVER では未確認。

     

    あれこれやって簡単な Django アプリケーションが何とかそれっぽい HTML を吐くようになったのだが
    Script Error
    The script did not produce proper HTTP headers. Please see the error log to see the detail of the errors. Depending on the server configuration, you can also run thisscript under CGIWrap debugging. Usually, either rename or linkthe script temporarily to a file which ends with .cgidextension, or add a AddHandler cgi-script-debug .cgiline to your .htaccess file.
    がでてどうしても先に進めない。

    2010年1月9日土曜日

    Django+fastcgi:動いた

     昨日は小さなな django アプリケーションが動いたので、今日はこの間まで作っていた大物に挑戦。

     smbclient 経由でアクセスするドライブのパーミッション設定がうまくいかなかった(設定してもすぐ元に戻ってしまう)が気のせいか?SQLite とも相性が悪いみたいだし気をつけないといかんなぁ。

     ちょっと手間取ったが settings.py の編集とファイルの再配置など、一時間ほどで動くようになった。

     apache のおかげか fastcgi のおかげかページ更新が速い速い。アプリケーション作成時も早めに apache 環境で動かしたほうが開発効率があがるかもしれない。

     次のステップは xrea を借りて動かすわけだが、これがまた大変いろいろと初挑戦しなくてはならないことが多そうで...。

     web 系は覚えることが多くて、本当に大変だ。

    2010年1月7日木曜日

    apache + fastcgi:嵌った

     httpd.conf に手を入れて fastcgi 経由で django を使えるようになったので、今度は .htaccess を使って実行する方法試す。

     これが嵌った。

     オフィシャルページの内容に従って .htaccess を作ったのだが、全く反応がない。 url を色々変えてみるが、.htaccess が効いているのかいないのかさっぱりわからない。
     こちらのページを参考に、アクセス制限をかけると...かかった。.htaccess は生きている。
     色々あったが、結局
    RewriteRule ^/(.*)$ /mysite.fcgi/$1 [QSA,L]
    RewriteRule ^(.*)$ mysite.fcgi/$1 [QSA,L]
     に変更。違いはスラッシュを取っただけ。ちなみに、httpd.conf にも同じような行があるが、こちらはサンプルソースにスラッシュが無く、あれこれやってスラッシュを入れたら動くようになった。

     うーん、大変だ。

    Django+SQLite:Unable to Open Database File は、

     google で検索すると二つ目に Django-Trac のページが引っかかり、「Django says "Unable to Open Database File" when using SQLite3」というドンピシャの項目が。
     ここの最初の、
    Make sure Apache can also write to the parent directory of the database. SQLite needs to be able to write to this directory.
    で、エラーは解決。データベースのパーミションだけではなく、データベースのあるディレクトリも apache から書き込み可能にする必要があるそうだ。

    2010年1月6日水曜日

    Django:fastcgi を使ったデプロイに悪戦苦闘中

     基本的にはオフィシャルページの内容を元にあれこれやっているのだが、なかなかうまくいかない。
     ぐぐってみても apache + fastcgi + django でうまくいったという日本語のページが見つからない。うまくいかなくて mod_python にのりかえた人は見つけたが、今回はお目当てのサーバーが apache 1.3.x で mod_python が使えない。
     あっちこっち見ていくうちに、lighthttp + fastcgi で django を動かした人を発見。よく見ると、無くても良いことになっている mysite.fcgi を作っている。
     わらにもすがる思い出同じスクリプトを使い、コマンドらいから起動してエラーが出ないようにして apache から呼び出すと、http エラーが 400 から 403 に変わった。初めての手ごたえ。
     さらに調べていくと、こんなページを発見。コマンドラインから実行してエラーを出さなくするための変更を取り去ると、懐かしい django の画面が出てきた (; ;)。
     もとのページを良く見ると、「Apache を使っている共有ホスティングプロバイダ上で Django を使う」ときには mysite.fcgi が必要とのこと。
     テストは、httpd.conf にアクセスできる環境なのでやっぱり mysite.fcgi は入らないはずなのだが...。ま、今回はどの道レンタルサーバーを使うわけだから、これ以上の深入りは避けよう。
    ----
     ちなみにオフィシャルページに記述は無いようだが、apache に 'Options +ExecCGI'の追加は必要(こちらのページを 'fastcgi: execcgi option is off in this directory'で検索)。

    ----
     で、ついなる難関は django が出してきた 'unable to open database file'。読み出しは問題ないのに開けないってどういうこと??
     

    2010年1月3日日曜日

    Apache が....

    Apache 1.3.41 で fastcgi を使おうと色々やっていたのだが、mod_fastcgi を組み込もうとするとエラーになる。

     苦労しながら mod_fastcgi のインストール方法を見つけて

     http.conf に

    LoadModule fastcgi_module modules/mod_fastcgi.so


     と追加したのだが、

    Invalid command 'LoadModule', perhaps mis-spelled or defined by a module not included in the server configuration


     ファイルが見つからないのか?いつものディレクトリ指定の問題か?いや、LoadModule 自体が 'Invalid command' になっている。調べていくうちに
    htpd -l
    とやって表示される中に mod_so.c が無いことを発見。
     ダイナミックリンクする要のモジュールらしいのだけれど default で入らないの?
     ./configure やら Makefile やらを見ていくと default でリンクされるのかどうも怪しい。
     Makefile を見ると、起動時にモジュールをダイナミックリンクする設定でコンパイルしないと mod_so.c はスタティックリンクしないようなので、apache のドキュメントを見ながらダミーで適当なモジュールをダイナミックリンクするようにオプションをつけて ./configure -> make -> make install。

     'httpd -l' ではしっかり mod_so.c が見えてる。さて、これで...、mod_fastcgi.so が無いって orz。

     ま、一歩前進した。

    Django + SQlite:samba とは相性が悪いらしい

     開発用サーバーの python を 2.6.2 から xrea と同じ 2.4(.41) にバージョンダウンしようとしたのだが、うかつなことをして泥沼に嵌ると何をしているのかわからなくなるのでまずは default で入っていると python で Django を動かすことにした。

     Windows 環境で動いていた Djnago をインストールして Windows で動いていたプロジェクトを動かしたところ、まずは Django のエラーが出た。

     ここまでは OK。

     データベースにアクセスしようとすると...、エラー。python のバージョンダウンをしようとして必要なファイルを無くしてしまったか...。

     色々調べていくと、samba 経由でデータベースのファイルにアクセスしたのが原因らしい
     データベースをローカルファイルに移動して、動くようになった。

     どこに地雷があるやら...。

    2010年1月2日土曜日

    Apache 1.3.41 coLinux + ubuntu 9.1 でコンパイル成功

     $(SRCDIR)/apaci で検索をかけたらこちらのページがヒット。上から4番目のメッセージのとおり修正したらあっさりコンパイル成功。

     シェルが違うとか、そういう話はどこかで読んだいたのだが...。

    Django coLinux に apache 1.3.41がインストールできない

     xrea と同じ apache のバージョン 1.3(.41) をインストールしようとするがうまくいかない。

     apt-get からは apache 2 しかないのでソースを取ってきてコンパイル衣装としたのだが ./configure で失敗する。
    Creating Configuration.apaci in src
    Syntax error --- The configuration file is used only to
    define the list of included modules or to set Makefile in src
    options or Configure rules, and I don't see that at all:
    `$(SRCDIR)/apaci`
     というエラーなのだがなんともうまくいかない。
     続きは明日だ。

    2010年1月1日金曜日

    Django デブロイ用サーバー起動

     デブロイテスト用に coLinux をインストールしたのだが、やっと動いた。

     coLinux インストール ->
     ネットワーク設定にてこずる(最初ルーター接続にしてしまった。使っている有線ルーターに LAN 側のゲートウェー設定が無いので coLinux から外に出られず)->
     NAT 接続で coLinux をネットワーク設定。->
     apt-get で samba をインストールしようとしたが、ファイルが 404 で見つからないといわれ失敗。->
     imagefile を ubuntu の 7.1 -> 9.1 に変更して apt-get が使えるようになる。(rpm ファイルを探す、という手が使えないのが良いのか悪いのだか)->
     smbclient で Windows のファイルシステムにアクセスしようとしたが smbclient パッケージに smbmount がなかった。エイ・ヤーと smbfs をインストールしたらあった。->

     ようやく apache のインストールが始められそう。先は長いかも。

    Django デブロイ開始

     Django のアプリケーションが形になったので、デブロイ開始。

     開発用サーバーを用意する必要があるのだが...、古いパソコンは何台もあるし Linux をインストールしてあるのも 1-2台あるのだが、バージョンが古そうなのと、ネットワーク設定や置き場所、電源の用意を考えると面倒なので、coLinux をメインマシンにインストールすることにする。

     以前、どこかの CPU ボードのクロス開発環境に付属していた coLinxu はえらく簡単にインストールできたのだが、素の coLinux を使えるようにするのはなかなか面倒。主にこちらのページの情報で乗り切る。

     image は ubuntu を選んだ。debian 系は初めてだが...、それもまた面白い (^^;