上川純
一
![]() |
東京エリア Debian 勉強会では「えんかい君」 を予約システムとして利用していました。 えんかい君はシンプルなユーザインタ フェースで認証もなく、 全員のメールアドレスと名前が閲覧でき、 他人の登録を誰でも削除できるなど、 利用者を信頼したモデ ルになっていました。 後で立ち上がった関西では cotocoto を利用していました。 cotocoto は DFSG の観点では non-free な サービスです。
「えんかい君」 は YLUG などでも利用されていましたが、 不便でした。 東京では、 「えんかい君」 の制限を回避するた め、 課題の提出をメール経由でやっていました。 当初はフリーフォーマットのメールをLATEX形式に上川 がバッチで変換する形式をとっており、 のちにLATEXのソースコードをメールで git format-patch で送 るという運用になっていました。 ただ、 Git で課題提出をしていても、 マージが面倒という問題点がありま した。
2009 年 12 月の勉強会登録には実験的に atnd を利用しました。 atnd は DFSG non-free なサービスですが、 最近流行して いる勉強会等の予約システムです。
DFSG 準拠のアプリケーションのほうが望ましいが、 「えんかい君」 ではうまく運用できないということと、 アプリケーショ ン自体はシンプルな問題であることが予想されたため、 自前で勉強会予約システムを準備してみることにしま した。
Debian 勉強会の予約システムでは何が必要でしょうか。
他にもいろいろあるかもしれませんが、 とりあえずこういうものを目標にしてやってみました。
そして、 DFSG Free であることが望ましいです。
今回はウェブアプリケーションのフレームワークとして、 Python 版の Google App Engine を利用しました。 開発環境を Debian GNU/Linux sid 上で準備する方法を紹介します。
まず、 Debian GNU/Linux sid の環境を用意します。
次に、 Google App Engine の Python 版の開発環境をダウンロードします。 Google App Engine のサイ ト*18 に いって最新の SDK をダウンロードしてきます。
「Linux/その他のプラットフォーム」 向けの google_appengine_1.3.1.zip をダウンロードしてきま した。
# apt-get install unzip python python-openssl python-webtest python-yaml
$ wget http://googleappengine.googlecode.com/files/google_appengine_1.3.1.zip $ unzip google_appengine_1.3.1.zip |
これでインストールは完了です。 Google App Engine のインストールディレクトリを ./google_appengine, App Engine アプリケーションのソースコードのおいている場所を ./utils/gaeとします。 utils/gae ディレクトリにから dev_appserver.pyを実行すれば、 開発用のウェブサーバが起動します。
hoge@core2duo:appengine/utils/gae$ ../../google_appengine/dev_appserver.py .
INFO 2010-02-16 15:28:08,816 appengine_rpc.py:159] Server: appengine.google.com Allow dev_appserver to check for updates on startup? (Y/n): n dev_appserver will not check for updates on startup. To change this setting, edit /home/hoge/.appcfg_nag WARNING 2010-02-16 15:28:13,792 datastore_file_stub.py:623] Could not read datastore data from /tmp/dev_appserver.datastore WARNING 2010-02-16 15:28:13,906 dev_appserver.py:3581] Could not initialize images API; you are likely missing the Python "PIL" module. ImportError: No module named _imaging INFO 2010-02-16 15:28:13,914 dev_appserver_main.py:399] Running application debianmeeting on port 8080: http://localhost:8080 |
Django の通常のアプリケーションはテスト用の仕組みがあるようなのですが、 appengine にはないようです。 ここでは、 WebTest モジュールを利用して自動テストコードを実装しています。
$ PYTHONPATH=../../google_appengine:../../google_appengine/lib/django/ \
python testSystem.py |
このアプリケーションでは Google App Engine を利用しています。 ユーザ認証は Google App Engine で標準で提供される Google の認証を流用しています。 パスワードの管理やユーザのメールアドレスの管理などをフレームワークに一任することで 管理を簡単にしています。
バックエンドのデータベースには、 AppEngine の Datastore を利用しています。 Event と、 Attendance と UserRealName というのを定義しています。
Event は主催者がイベントについて登録した情報を保持しています。 イベント毎に存在しています。
Attendance はユーザがイベントに登録したという情報を保持しています。 イベントに対して登録したユーザの数だけ存在し ます。
UserRealname はユーザの表示名前の情報を保持しています。 各ユーザ毎に存在します。
class Event(db.Model): eventid = db.StringProperty() owner = db.UserProperty() # the creator is the owner owners_email = db.StringListProperty() # allow owner emails to be added if possible title = db.StringProperty() location = db.StringProperty(multiline=True) content = db.StringProperty(multiline=True) content_url = db.StringProperty() prework = db.StringProperty(multiline=True) event_date = db.StringProperty() timestamp = db.DateTimeProperty(auto_now_add=True) capacity = db.IntegerProperty() # the number of possible people attending the meeting class Attendance(db.Model): eventid = db.StringProperty() user = db.UserProperty() user_realname = db.StringProperty() # keep a cache of last realname entry. prework = db.StringProperty(multiline=True) # obsolete, but used in initial version prework_text = db.TextProperty() # Used everywhere, populate from prework if available. attend = db.BooleanProperty() enkai_attend = db.BooleanProperty() timestamp = db.DateTimeProperty(auto_now_add=True) class UserRealname(db.Model): """Backup of user realname configuration so that user doesn’t have to reenter that information.""" user = db.UserProperty() realname = db.StringProperty() timestamp = db.DateTimeProperty(auto_now_add=True) |
ソースコードは現在下記の構成です。
ソース内部からテンプレートファイルが参照されています。
ウェブページの遷移とソースコードの対応をみてみます。
とりあえずは動いています。 今後、 何が変わるべきか。 今後どういう点が実装されるべきか。 パッチウェル カム。 ____________________________________________________________________________________________
Debian 勉強会資料
2010 年2 月20,21 日 初版第1 刷発行
東 京 エ リ ア
Debian 勉強会 (編集・印刷・発行)
__________________________