matsuyuta's Room

データの活用を考える

       
  • 2009年 10月 3日 · カテゴリー: GAE DAYS; Tagged as: , ,
    このエントリーを含むはてなブックマークはてなブックマーク - DAYS 4 データモデルとUserAPI このエントリをつぶやくこのWebページのtweets Bookmark this on Delicious この記事をクリップ!Livedoorクリップ - DAYS 4 データモデルとUserAPI BuzzurlにブックマークBuzzurlにブックマーク Share on Tumblr FC2ブックマークへ追加 Yahoo!ブックマークに登録 Googleブックマークに追加

    [ GAE Google App Engine ][ Phthon ][ Google Bigtable ]
    私がつくったアプリ↓
    協調型意思決定支援システム「○ 賛否両論 ×(ベータ版)」

    http://sanpiryoron.appspot.com/

    GAEには、Djangoというフレームワークが内蔵されていて、簡単にフォームの作成ができる。
    これを使った、フォームの作成が非常に便利だったのが、
    開発言語をJavaからPythonに変更したひとつの要因である。
    ただし、後から、カスタマイズが必要になるのですが、
    カスタマイズがどうやっていいか、ぜんぜんわからなかったので
    結局、Djangoを使わずにプログラムを書いた部分もあり、
    結構苦労した。
    一番参考になるのは、Googleのスタートガイドである。
    そのほかには、「GAE/P」というキーワードでググるのがよい方法かと思う。
    Google App Engine スタート ガイド: Python

    http://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を使うと、メールアドレスは割れてしまうのだ。

    コメントは受け付けていません。
  •    
  • 2009年 10月 3日 · カテゴリー: GAE DAYS; Tagged as: , ,
    このエントリーを含むはてなブックマークはてなブックマーク - DAYS 3  クラウド・アプリのイメージ このエントリをつぶやくこのWebページのtweets Bookmark this on Delicious この記事をクリップ!Livedoorクリップ - DAYS 3  クラウド・アプリのイメージ BuzzurlにブックマークBuzzurlにブックマーク Share on Tumblr FC2ブックマークへ追加 Yahoo!ブックマークに登録 Googleブックマークに追加

    [ GAE Google App Engine ][ Phthon ][ Google Bigtable ]
    私がつくったアプリ↓
    協調型意思決定支援システム「○ 賛否両論 ×(ベータ版)」

    http://sanpiryoron.appspot.com/

    サンプルコードで、ひととおりの動かし方を学び、
    「さて、どんなものを作ろうか?」と考えた時、
    頭の中に浮かんだのが、twitterである。
    私は、twitterを使ってはいるのだが、
    ぜ~んぜん使いこなせていない。
    「こういうことはできないの?」っていうのが、
    今回の「賛否両論」である。
    本の進行どおりに作っていこうと思い、まず、
    「データ」と「画面(遷移)」を考えることにした。
    データは、
    ・ユーザデータ
    ・オピニオンデータ
    ・リアクションデータ
    の3つのデータ、Bigtableでは未だになんていうかあ曖昧なのだが、
    リレーショナルDBでいう3つのテーブルがあるイメージしていた。
    オピニオンデータ、リアクションデータはユーザデータと紐付いている。
    リアクションデータはオピニオンデータに紐付いている。
    画面遷移については、
    ・トップメニュー
    ・一覧
    ・ユーザー登録、編集、削除
    ・オピニオン登録、編集、削除
    ・リアクション登録、編集、削除
    の11画面もあれば十分だろうと考えていた。
    外せない機能としては、
    オピニオンに対する、リアクション数(賛成・反対)のカウント機能である。
    ただ、この時から、漠然と「なんか難しいんじゃないか」という不安はあった。

    コメントは受け付けていません。
  •    
  • 2009年 10月 3日 · カテゴリー: GAE DAYS; Tagged as: , ,
    このエントリーを含むはてなブックマークはてなブックマーク - DAYS 2 本のサンプルに、「コラッ!」言うど。(「クラウド」とかけてます。) このエントリをつぶやくこのWebページのtweets Bookmark this on Delicious この記事をクリップ!Livedoorクリップ - DAYS 2 本のサンプルに、「コラッ!」言うど。(「クラウド」とかけてます。) BuzzurlにブックマークBuzzurlにブックマーク Share on Tumblr FC2ブックマークへ追加 Yahoo!ブックマークに登録 Googleブックマークに追加

    [ 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というファイルに設定情報を書き込むのだが、
    書き変えたら、サーバーは再起動しないと設定は変更されない。
    (これは、当たり前かも。)いろいろいじくっているうちに
    分からなくなっていた。

    コメントは受け付けていません。
 
Get Adobe Flash playerPlugin by wpburn.com wordpress themes