matsuyuta's Room
データの活用を考える
-
コメントは受け付けていません。
[ GAE Google App Engine ][ Phthon ][ Google Bigtable ]
私がつくったアプリ↓
協調型意思決定支援システム「○ 賛否両論 ×(ベータ版)」http://sanpiryoron.appspot.com/
GAEには、Djangoというフレームワークが内蔵されていて、簡単にフォームの作成ができる。
これを使った、フォームの作成が非常に便利だったのが、
開発言語をJavaからPythonに変更したひとつの要因である。
ただし、後から、カスタマイズが必要になるのですが、
カスタマイズがどうやっていいか、ぜんぜんわからなかったので
結局、Djangoを使わずにプログラムを書いた部分もあり、
結構苦労した。
一番参考になるのは、Googleのスタートガイドである。
そのほかには、「GAE/P」というキーワードでググるのがよい方法かと思う。
Google App Engine スタート ガイド: Pythonhttp://code.google.com/intl/ja/appengine/docs/python/gettingstarted/
リンクをたどるとある時点から、英語のページなるんだよねぇ。
Pythonのドキュメントを見ていると思っていたら、
Javaのドキュメントになってたりもするんだよねぇ。
ちなみに
最初につくったデータモデル。class UserData(db.Model): user_id = db.IntegerProperty(required=True) # ユーザID name = db.StringProperty(required=True,multiline=False) # 名前 sex = db.StringProperty(multiline=False) # 性別 birth_year = db.IntegerProperty() # 生まれ年 life_area = db.StringProperty(multiline=False) # 住んでる所 my_url = db.LinkProperty() # 関連URL intro_mem = db.TextProperty() # 自己紹介 del_flg = db.IntegerProperty() # 削除フラグ add_date = db.DateTimeProperty(required=True) # 作成日 update_date = db.DateTimeProperty(required=True) # 更新日 class OpinionData(db.Model): opinion_id = db.IntegerProperty(required=True) # オピニオンID opinion = db.TextProperty(required=True) # オピニオン user_id = db.IntegerProperty(required=True) # ユーザID tag = db.CategoryProperty(required=True) # タグ(ジャンル) del_flg = db.IntegerProperty() # 削除フラグ add_date = db.DateTimeProperty(required=True) # 作成日 update_date = db.DateTimeProperty(required=True) # 更新日 class ReactionData(db.Model): reaction_id = db.IntegerProperty(required=True) reaction = db.StringProperty(required=True,multiline=False)# リアクション user_id = db.IntegerProperty(required=True) # ユーザID opinion_id = db.IntegerProperty(required=True) # オピニオンID add_cmnt = db.TextProperty(verbose_name='追加コメント') # 追加コメント del_flg = db.IntegerProperty() # 削除フラグ add_date = db.DateTimeProperty(required=True) # 作成日 update_date = db.DateTimeProperty(required=True) # 更新日
こんな感じだったが、最終的にはずいぶん違う形になっている。
■気付いた点
IDのプロパティ(カラムのようなもの?)をつくったが、
つくらなくてもIDは内部的に持っているとのことで、
ID項目は、すべてのモデル(テーブルのようなもの?)から削った。
プロパティクラスの使い方が分からなくて
my_url = db.LinkProperty() は削った。
tag = db.CategoryProperty(required=True)は tag = db.StringProperty(required=True,multiline=False) に変更。
Googleの提供するUserAPIというものがあるので、
全てのモデルのuser_idをけずり
user = db.UserProperty(required=True,auto_current_user=True)
というように、UserAPIを使う形にした。
UserAPIからGoogleアカウントのニックネームを利用できるので、
name = db.StringProperty(required=True,multiline=False)も削った。
あとから気付いたことだが、
UserAPIで引っ張ってこれるニックネームは、
Googleアカウントで設定できるニックネームではなく、
gmailアカウントが「XXXXX@gmail.com」の場合、
「XXXXX」部分がニックネームになることが判明した。
UserAPIを使うと、メールアドレスは割れてしまうのだ。 -
コメントは受け付けていません。
[ GAE Google App Engine ][ Phthon ][ Google Bigtable ]
私がつくったアプリ↓
協調型意思決定支援システム「○ 賛否両論 ×(ベータ版)」http://sanpiryoron.appspot.com/
サンプルコードで、ひととおりの動かし方を学び、
「さて、どんなものを作ろうか?」と考えた時、
頭の中に浮かんだのが、twitterである。
私は、twitterを使ってはいるのだが、
ぜ~んぜん使いこなせていない。
「こういうことはできないの?」っていうのが、
今回の「賛否両論」である。
本の進行どおりに作っていこうと思い、まず、
「データ」と「画面(遷移)」を考えることにした。
データは、
・ユーザデータ
・オピニオンデータ
・リアクションデータ
の3つのデータ、Bigtableでは未だになんていうかあ曖昧なのだが、
リレーショナルDBでいう3つのテーブルがあるイメージしていた。
オピニオンデータ、リアクションデータはユーザデータと紐付いている。
リアクションデータはオピニオンデータに紐付いている。
画面遷移については、
・トップメニュー
・一覧
・ユーザー登録、編集、削除
・オピニオン登録、編集、削除
・リアクション登録、編集、削除
の11画面もあれば十分だろうと考えていた。
外せない機能としては、
オピニオンに対する、リアクション数(賛成・反対)のカウント機能である。
ただ、この時から、漠然と「なんか難しいんじゃないか」という不安はあった。 -
コメントは受け付けていません。
[ GAE Google App Engine ][ Phthon ][ Google Bigtable ]
私がつくったアプリ↓
協調型意思決定支援システム「○ 賛否両論 ×(ベータ版)」http://sanpiryoron.appspot.com/
とりあえず、
「新人プログラマのためのGoogle App Engineクラウド・アプリケーション開発講座」のとおりに進めていく。
Pythonインストール、GAEインストール、サイト登録して、
サンプルプログラムを動かして・・・。
動かない・・・。
本に対処法も書いてあるのだが、すべて本がわるいという気持ちになる。
Pythonなんて、はじめてなのに・・・。
しかも、プログラミング自体そんなに得意でないのに・・・。
つまずいたところは以下。
■スクリプトの文字コードは「UTF-8」にそろえる。
スクリプトをエディタで開いてみたりいじったりしたときに
S-JISになっていました。これは、ファイルを最初に作った時、
最初に保存する時に注意すればよい。
■インデントをキッチリする。
Pythonの特徴らしく、インデントがキッチリされてないと動かない。
P106のサンプルプログラムは、途中だけ記述されており、
これをカット&ペーストしたら、エラーだった。
一番上の「# from Cookie import SimpleCookie を追加」というのも
そのままカット&ペーストしてしまったが、
# はコメント文につけるもので、
#をはずして「from Cookie import SimpleCookie」をカット&ペーストということだった。
■うっかりミス
うっかりミスで多かったのが、カット&ペーストのミス。
最期の一行が抜けているとか、もとあるソースを消してしまう。
そんなことで、不毛な時間をどれだけ過ごしたことか・・・。
■P.168 の記述
「blog_index.html」となっているが、サンプルのファイル名は「blg_index.html」
プログラムの下にある「/blog/helo」「/blog/bye」も自分でつくらないとサンプルにはない。
■P.174 の記述
「blog_add.html」は「blg_add.html」である。
■開発環境サーバ
開発環境として、ローカルで動作する簡易サーバー機能がある。
app.yamlというファイルに設定情報を書き込むのだが、
書き変えたら、サーバーは再起動しないと設定は変更されない。
(これは、当たり前かも。)いろいろいじくっているうちに
分からなくなっていた。




