TurboGears×Python

TurboGears×Python (LLフレームワークBOOKS)

TurboGears×Python (LLフレームワークBOOKS)

興味があったので購入してみました。Python については、みんなのPython : asin:479733665X を読んだ程度の知識しかありません。TurboGears×Python にも簡単な Python についての説明があります。

以前、Ruby on Rails に挑戦したことがあるので、TurboGears の理解もしやすかったです。サンプルも http://www.webcore.co.jp/techinfo/python/tgbook/ からダウンロードできます。

インストールの方法についても環境別に詳しく説明されています。簡単に紹介しておきます。これが正しいのかあまり自信はありません。

1) Python 2.4.4 のインストール

Python標準リリース
http://www.python.jp/Zope/download/pythoncore

から python-2.4.4-macosx2006-10-18.dmg をダウンロードしてインストールする。/usr/local/bin を PATH に通す必要があります。

2) TurboGears のインスト−ル

TurboGears: Front-to-Back Web Development
http://www.turbogears.org/
Download TurboGears
http://www.turbogears.org/download/index.html

から、ファイル tgsetup.py をダウンロードして、ターミナル上でコマンド

$sudo python2.4 tgsetup.py

を実行してインストールする。

3) pysqlite のインストール

pysqlite - pysqlite - Trac
http://initd.org/tracker/pysqlite/wiki/pysqlite

Latest 2.x version (2.3.3) の下 sources をクリックして pysqlite-2.3.3.tar.gz をダウンロードしてください。Finder 上で pysqlite-2.3.3.tar.gz をダブルクリックして展開し、展開したフォルダにターミナル上で移動、コマンド

$sudo python.2.4 setup.py install

を実行してください。(Mac OS X の開発環境 Xcode が必要かもしれません。) 正しくインストールされるはずです。(ez_setup.py*1 を利用する方法もあるようです。)

これで TurboGears のインストールは完了です。私の動作環境は Mac OS X 10.4.9 ビルド 9P135 上です。

4) サンプルを試す。

書籍「TurboGears×Python」のサンプルコード ― Webcore株式会社
http://www.webcore.co.jp/techinfo/python/tgbook/

それぞれの章の ‘もっと読む’ をクリックするとダウンロードページが表示されます。’ファイルのダウンロードはここをクリック’ をクリックしてダウンロードしてください。

4-1) tg-admin toolbox

Safari 上だとツールボックスCatWalk を使ってデータを入力できないようです。Safari の環境設定、’一般’/’デフォルト Web ブラウザ : ‘ で Firefox を選択してください。(メニューに Firefox がない場合はインストールしてください。)

4-2) 3章にて紹介の掲示板アプリ

Finder 上でtgbbs.zip を展開し、展開したフォルダ tgbbs にターミナル上で移動します。まず最初にモデルに合わせてデータベースにテーブルを作成する必要があります。下のコマンドをターミナル上で実行してください。

$cd tgbbs
$tg-admin sql create

ファイル devdata.sqlite が作成されるはずです。

次のコマンドを実行してプロジェクトを起動します。

$python2.4 start-tgbbs.py

Firefox で次の URL

http://localhost:8080/show_form
または
http://127.0.0.1:8080/show_form

にアクセスし、掲示板に書き込んでください。実行 ボタンを押すと下の URL でリストが表示されます。

http://localhost:8080/
または
http://127.0.0.1:8080/

4-2) 5章にて紹介の予定共有アプリ/非Ajax

3章と同様に tgcal_noajax.zip を展開し、ターミナル上でフォルダ tgcal_noajaxに移動し、データベースにテーブルを作成します。

$cd tgcal_noajax
$tg-admin sql create

インタラクティブシェルを起動し、ユーザーを入力する必要があります。

$tg-admin shell
(CustomShell)
>>> u = User(user_name='sample', email_address='sample@foo.com', display_name='sample', password='sample')
>>>
'Use Ctrl-D (i.e. EOF) to exit.'
>>> Do you wish to commit your database changes? [yes]

上のようにユーザー (ユーザー名 ; sample 、パスワード : sample) を作成します。 Ctrl-D でシェルから抜けることができます。データベースに反映するか聞いてくるのでリターンキーを押してください。

次のコマンドを実行して、プロジェクトを起動します。

$python2.4 start-tgcal.py

http://localhost:8080/ または http://127.0.0.1:8080/Firefox でアクセスしてください。
User Name : sample、Password : sample を入力し、ログインしてください。

詳細は TurboGears×Python : asin:4774130567 140 ページを参考にしてください。

4-3) 5章にて紹介の予定共有アプリ/Ajax

‘4-2) 5章にて紹介の予定共有アプリ/非Ajax版’ と同様に実行してください。

*1:http://docs.turbogears.org/1.0/InstallMac

NSValueTransformer

ADC *1をさまよっている時に OCUnit という単語が目に付きました。興味があったので ADC で検索し

Test Driving Your Code with OCUnit
http://developer.apple.com/tools/unittest.html

ページを見つけました。解説のサンプルとして

/Developer/Examples/AppKit/TemperatureConverter

を利用しています。

元のTemperatureConverter を変更したくないので TemperatureConverter フォルダをコピーして適当な場所にペーストし、動作を確認しました。

OCUnit を試すつもりだったのですが、TemperatureConverter を理解しないと先に進めません。(今回は時間がなく OCUnit は試すことができませんでした。 )

そこでソースを覗いてみました。NSValueTransformer を利用しています。私は NSValueTransformer をよく理解していませんでした。ソースや Interface Builder でバインディングを調べてみるとだいたい理解できました。

確認のために

Value Transformer Programming Guide
http://developer.apple.com/documentation/Cocoa/Conceptual/ValueTransformers/index.html#//apple_ref/doc/uid/10000175i
NSValueTransformer Class Reference (Objective-C)
http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSValueTransformer_Class/index.html#//apple_ref/doc/uid/TP40003766

を読みました。TemperatureConverter の動作を理解した後なので、わかりやすかったです。

ただ Available Value Transformers の

NSNegateBooleanTransformerName
NSIsNilTransformerName
NSIsNotNilTransformerName
NSUnarchiveFromDataTransformerName

をどう利用すれば良いのか理解できませんでした。

Xcodeフレームワーク内を NSNegateBooleanTransformerName 検索してみると

/System/Library/Frameworks/Foundation.framework/Versions/C/Headers/NSValueTransformer.h
FOUNDATION_EXPORT NSString * const NSNegateBooleanTransformerName AVAILABLE_MAC_OS_X_VERSION_10_3_AND_LATER;

と宣言されています。

NSLog(@"%@", NSNegateBooleanTransformerName); 

を実行してみると NSNegateBoolean と表示されます。NSNegateBooleanTransformerName の指す文字列 “NSNegateBoolean” は Interface Builder の Inspector/Bindings/ValueTransformer で選択できる文字列と同一のようです。

const の説明は

Const-correctness - Wikipedia, the free encyclopedia
http://en.wikipedia.org/wiki/Const

を参考にしてください。わかりやすく説明されています。

TemperatureConverter の動作を記しておきます。(間違っている可能性もあるので注意してください。)

1. + (void) initialize

クラス ApplicationDelegate が初期化される時に呼び出されるメソッド + (void) initialize で3つの ValueTransformer

Name: centrigradeFromKelvin : CentigradeValueTransformer
Name: fahrenheitFromKelvin : FahrenheitValueTransformer
Name: rankineFromKelvin : RankineValueTransformer

を設定しています。クラスの初期化時に名前を指定して自作のValueTransformerを設定すると良いようです。指定した名前は Interface Builder で利用できます。

2. 伝搬 (簡略化されています。)

TemperatureConverter では ウインドウに表示されている4つ (ケルビン : Kelvin、摂氏: Centigrade、カ氏 : Fahrenhei、ランキン温度 : Rankine) のテキストフィールド (本当はNSFormCell) がすべて LastTemperature にバインドされています。LastTemperature の温度単位はケルビンです。

例えば Centigrade テキストフィールドの値を変更すると

Centigrade テキストフィールドの
ValueTransformer (CentigradeValueTransformer) – (id)reverseTransformedValue:(id)value;
が呼び出され、Kelvin に変換され、LastTemperature に設定される。

LastTemperature が変更されたため、利用している4つ (Centigrade 、Kelvin、Fahrenhei、Rankine) のテキストフィールドに通知される。

Kelvin テキストフィールドは伝わった値を – (void)setObjectValue:(id)object; でテキストフィールドに設定し表示。

Centigrade、Fahrenhei、Rankine テキストフィールドはそれぞれの ValueTransformer (CentigradeValueTransformer、FahrenheitValueTransformer、RankineValueTransformer) の – (id)transformedValue:(id)value; で変換され、その値を – (void)setObjectValue:(id)object; でテキストフィールドに設定する。 – (id)transformedValue:(id)value; の value が LastTemperature。

Cocoa Bindings Programming Topics: Bindings Message Flow
http://developer.apple.com/documentation/Cocoa/Conceptual/CocoaBindings/Concepts/MessageFlow.html#//apple_ref/doc/uid/TP40002149

が参考になります。

*1:Apple Developer Connection [ http://developer.apple.com/ ]

「英辞郎 第三版」と Firefox Add-On ‘Mouseover Dictionary’、英辞郎ビューア

2007/03/25(Sun) 08:45:00
英辞郎第三版 ((HY版)) | |本 | 通販 | Amazon
https://www.amazon.co.jp/exec/obidos/ASIN/4757411367/yoshiakishome-22/

 

1. ‘Mouseover Dictionary’

Firefox 用のアドオン(機能拡張) ‘Mouseover Dictionary’ を試してみたくて「英辞郎 第三版」を購入しました。

‘Mouseover Dictionary’ の設定には

trick7.com blog: 英辞郎第三版と"Mouseover Dictionary"アドオンで海外サイトを読みまくる
http://www.trick7.com/blog/2007/02/09-075041.php

を参考にしました。読み込まれた辞書データは

/Users/あなたのアカウント/ライブラリ/Application Support/Firefox/Profiles/あなたのプロファイル/mouseoverdictionary.sqlite

に保存されるようです。辞書を再度読み込みたい時は、このファイル mouseoverdictionary.sqlite を削除して、読み込めば良いようです。

また、私は Firefox で読み込んだ eijiro.txt を ‘PDIC Viewer‘ のテキスト形式で変換したファイルではなく、

“naoya_t”.camelize - 「英辞郎 第三版」のデータをPDIC1行テキスト形式に変換するためのPerlスクリプト
http://d.hatena.ne.jp/NaoyaT/20070212/pdic

pdic-conv-0.1.tar.gz を使って作成したファイルを使用しています。この後、説明に出てくる pdic-conv-0.1e.tar.gz ではないので注意してください。

2. ‘英辞郎ビューア’

私は英単語の暗記に、拙作 ‘Wordbook’ を利用しています。

‘Wordbook’ の入力ウインドウで、単語フィールドに単語を入力し、Return キーを押して選択した後、Shift + Command + K を押して EGWORD14 に付属している ‘電子辞典ビューア’ で検索結果を表示させ、検索結果を Wordbook にコピー、ペーストして登録しています。

‘電子辞典ビューア’ の代わりに ‘PDIC Viewer‘ が使えないかと思ったのですが、検索結果をコピーできないし、サービスメニューにも対応していないようです。

そこで「英辞郎 第三版」を利用したソフトがないかと

OSX Freewares
http://www16.plala.or.jp/x-tomo/

で探してみました。’英辞郎ビューア’ という名前のフリーウェアを見つけました。

Numata Designed Factory - EIJIRO Viewer (英辞郎ビューア)
http://numata.designed.jp/?EIJIRO%20Viewer

早速ダウンロードしました。辞書データの作成には

“naoya_t”.camelize - 「英辞郎 第三版」を英辞郎ビューアで引く
http://d.hatena.ne.jp/NaoyaT/20070212/eijiro

pdic-conv-0.1e.tar.gz を利用して、eijiro98.txt、reiji98.txt、ryaku98.txt、waeiji98.txt を作成しました。

FireFox のアドオン ‘Mouseover Dictionary’ で利用した pdic-conv-0.1.tar.gz ではないので注意してください。

環境設定で辞書データを登録するとちゃんと動作します。

発音記号は表示されませんが、検索結果もコピーできますし、サービスメニュー ( Shift + Command + E ) も動作します。

3. 遠回り

実は上の説明で出てきた pdic-conv-0.1e.tar.gz の存在を知らず、pdic-conv-0.1.tar.gz で作成した辞書データを ‘英辞郎ビューア’ に登録していました。

もちろん正しく動作しません。ところが ‘全文検索‘ は利用できます。

ソースも公開されているので、なんとかならないかと挑戦してみました。綺麗なソースなので、すぐに問題の箇所を発見しました。

辞書データで単語の先頭に ‘■’ 文字が付いているようですが、pdic-conv-0.1.tar.gz で作成した辞書データには付いていないようです。( ‘PDIC Viewer‘ でテキスト形式に変換したデータも同様のようです。)

検索する単語の先頭に ‘■’ 文字 を追加している箇所を修正し、 ‘■’ 文字のチェックをしないように関数の引数を NO にすると正しく動作しました。

修正した ‘英辞郎ビューア’ を利用していたのですが、Hatena Diary に記入しようと思って、pdic-conv-0.1.tar.gz のダウンロード場所を検索すると pdic-conv-0.1e.tar.gz を見つけました。

もしやと思い辞書データを作成し、登録してみると正しく動作しました。結局、修正の必要性はなくなったのですが、’英辞郎ビューア’ のソースを見て大変勉強になりました。

辞書データを Shift JIS のバイナリにして単語を検索する方法、検索アルゴリズムは大変参考になりました。スレッドについては私はよく理解していないので興味深かったです。それにしても、綺麗なソースですね。私の公開しているソースは本当に汚い。恥ずかしいですね。

4. Spotlight の暴走

いろいろ試行錯誤している時に動作が鈍くなり、アクティブモニタで確認すると mds というプロセスが CPU を占有しています。

初めは Spotlight がインデックスファイルを作成しているのかと思ったのですが、数時間しても CPU を占有しています。そこで Google で検索してみました。

【コラム】OS X ハッキング! 第180回 Spotlightトラブル対策室 (MYCOMジャーナル)
http://journal.mycom.co.jp/column/osx/180/

を参考に

~/Library/Preferences/com.apple.japaneseAnalysys/AppleContextualKKC.index/AdaptiveMap
~/Library/Preferences/com.apple.japaneseAnalysys/AppleContextualKKC.index/inputHistory.plis

の2つのファイルを削除し、ターミナル上で

sudo mdutil -E

を実行しました。1,2時間経つと mds の CPU 占有率も低下し、安定しました。(私の環境は iMac G5Mac OS X Tiger 10.4.9 です。)