2011年12月29日木曜日

SpringFrameworkでWebアプリ作成

今までは、Python(Django)でWebアプリを作成していたが、これからはJavaで作らなければならなくなった

いろいろとJavaのWebフレームワークを比較して、Spring MVC 3.1.0 Releaseで作成することにした

DI (Dependency Injection)など、慣れない考え方で苦戦中だが、詰まったところを記録に残していく

2011年10月30日日曜日

Google App EngineでDjango

Google App Engineのサイト構築にDjangoフレームワークを利用する方法
詳細はここに書かれている
とりあえず、ヘルパーをダウンロードしてきて、後はデータストア周り以外は普通にDjangoでプログラムを書けばよいみたい?

2011年9月19日月曜日

MacへのOpenCVインストール

MacへOpenCVをインストール
Pythonから呼び出すため、Python 2.7とともにインストール

今回は、ソースコードからではなく、MacPortsを利用してインストール
(依存モジュールが多いため)

1.MacPortsのインストール
http://www.macports.org/からインストーラをダウンロードして、簡単にインストールできる
2.MacPortsでOpenCVをインストール
ターミナルを起動し、次のコマンドを実行すれば、インストールが開始する
# sudo port install opencv +python27

・MacPortsでインストール中にPerlがエラーを起こした
Error: Target org.macports.activate returned: Image error: /opt/local/bin/a2p is being used by the active perl5.8 port.  Please deactivate this port first, or use 'port -f activate perl5' to force the activation.
エラー内にあるport -f activate perl5を実行しても、うまくいかなかった
対策としては、activeなperl5.8をアンインストールして、最新のPerlだけにすればよい

手順は次の通り
1.インストールされているPerlを表示
# sudo port installed | grep perl
 perl5 @5.8.9_0
 perl5 @5.12.3_0+perl5_12
 perl5.8 @5.8.9_3 (active)
 perl5.12 @5.12.3_1 (active)
2.インストールされているPerlの中から、古いバージョンのものをアンインストール
# sudo port uninstall perl5 @5.8.9_0
# sudo port uninstall perl5.8

これで、OpenCVのインストールを再会すればインストールできる
(インストールが完了するまでに、2時間ほどかかった・・・)

2011年8月7日日曜日

HTTPレスポンスコードの取得

Pythonのurllib2を利用してWebサイトへアクセスしたときのHTTPレスポンスコードを利用するために、保存しておく方法
urllib2では、200以外はHTTPExceptionとなってしまうため、例外時の処理として書かなければならない
  1. import urllib2  
  2.   
  3. # HTTPレスポンスコードを格納する変数  
  4. http_code = 0  
  5. # アクセスするwebサイトのURL  
  6. url = 'http://www.yahoo.co.jp'  
  7.   
  8. try:  
  9.     # webサイトへアクセス  
  10.     web = urllib2.urlopen(url)  
  11.     # 成功した場合、この行以下も実行されるのでhttp_codeは200  
  12.     http_code = 200  
  13. except: HTTPError, e:  
  14.     http_code = e.code  
  15.   
  16. print http_code  
これで、正しくWebサイトにアクセスできたかを確認できる

参考サイト:


実行ファイルの親ディレクトリのパスを取得

Pythonでプログラムを実行しているファイルの親ディレクトリのパスを取得する方法
  1. import os  
  2. parent_path = os.path.abspath(os.path.dirname(__file__))  
  3. print parent_path  
例えば、/workspace/src/test.pyで実行した場合、parent_pathは'/workspace/src'となる

2011年8月6日土曜日

PythonでWebのリンクリスト取得

BeautifulSoupを利用してWebサイトのページ内にあるリンクをリストとして取得する方法
  1. import urllib2  
  2. from BeautifulSoup import BeautifulSoup  
  3.   
  4. if __name__ == '__main__':  
  5.     # アクセスするWebサイトのURL  
  6.     url = 'http://www.yahoo.co.jp/'  
  7.   
  8.     # Webサイトへアクセス  
  9.     web = urllib2.urlopen(url)  
  10.     # BeautifulSoupで解析できるよう読み込む  
  11.     html = BeautifulSoup(web)  
  12.   
  13.     # 'a'タグの全ての要素をリストとして抽出する  
  14.     base_linklist = self.getTagList('a')  
  15.     # 抽出した要素リストを1つずつ解析  
  16.     for link in base_linklist:  
  17.         # 'href'がタグ内に含まれない場合は無視する  
  18.         if link.__str__().find('href=') != -1:  
  19.             # リンク名:リンクURLと表示  
  20.             print link.string.__str__() + ':' + link['href']  
リンク名が画像などの場合、link.stringはNoneが得られるため、文字列に変換しておく必要がある

2011年8月5日金曜日

Pythonでスクレイピング(Cookie取得)

urllib2とcookielibでWebサイトへアクセスしたときに、Cookieを取得するサンプル

  1. import urllib2, cookielib  
  2. from BeautifulSoup import BeautifulSoup  
  3.   
  4. if __name__ == '__main__':  
  5.     # アクセスするWebサイトのURLを設定  
  6.     url = 'http://www.google.co.jp'  
  7.   
  8.     # Cookieを格納するオブジェクト  
  9.     cookie = cookielib.CookieJar()  
  10.     # Webサイトへアクセスするオブジェクト  
  11.     opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))  
  12.     # Webサイトへアクセス  
  13.     web = opener.open(url)  
  14.     # BeautifulSoupで解析  
  15.     html = BeautifulSoup(web)  
  16.     # 取得したCookie内容を表示  
  17.     print cookie  
  18.     # 取得したHTML内容を表示  
  19.     print html.prettify()  

Cookieが設定されている場合、cookielib.CookieJarオブジェクトとして取得できる

2011年8月3日水曜日

Pythonでスクレイピング

PythonでスクレイピングするライブラリとしてBeautifulSoupを利用

HTMLを取得して、それを表示する簡単なサンプル
  1. import urllib2  
  2. from BeautifulSoup import BeautifulSoup  
  3.   
  4. if __name__ == '__main__':  
  5.     web = urllib2.urlopen('http://www.google.co.jp/')  
  6.     html = BeautifulSoup(web)  
  7.     print html.prettify()  
これで、指定したWebサイトのHTMLを取得/表示することができる

2011年5月21日土曜日

Djangoのデータベースアクセス(その3)

テーブルのデータを取得する方法
1.データを取得する関数の作成
sampleprj/sampleapp/views.pyにshowという関数を作成し、次のようなコードを書く
  1. # encoding: utf-8  
  2. from django.http import HttpResponse   
  3. from sampleprj.sampleapp.models import Memo  
  4. def show(request):  
  5.     memos = Memo.objects.all()  
  6.     for memo in memos:  
  7.         print memo.userid  
  8.         print memo.title  
  9.         print memo.content  
  10.     return HttpResponse('データを取得しました')  

2.URL割り当て
show関数を割り当てるURLを定義する
sampleprj/urls.pyの最後に次のコードを追加する
  1. urlpatterns += patterns('sampleprj.sampleapp',  
  2. url(r'^sampleapp/show/$''show'),  
  3. )  

これでhttp://localhost:8000/sampleapp/show/にアクセスすると、コンソールにMemoテーブル内の全てのデータが表示される

参考サイト:
クエリを生成する

2011年5月14日土曜日

Djangoのデータベースアクセス(その2)

新規データを追加する方法
ユーザが、http://localhost:8000/sampleapp/add/にアクセスした時に、前回作成したテーブルに新規にデータを追加する手順

1.アクセスする関数の作成
sampleprj/sampleapp/views.pyにaddという関数を作成し、次のようなコードを書く
  1. # encoding: utf-8  
  2. from django.http import HttpResponse  
  3. from sampleprj.sampleapp.models import Memo  
  4.   
  5. def add(request):  
  6.     memo = Memo()  
  7.     memo.userid = 1  
  8.     memo.title = 'first memo'  
  9.     memo.content = 'memo content'  
  10.     return HttpResponse('データを追加しました')  

2.URL割り当て
add関数を割り当てるURLを定義する
sampleprj/urls.pyの最後に次のコードを追加する
  1. urlpatterns += patterns('sampleprj.sampleapp',  
  2.     url(r'^sampleapp/add/$''add'),  
  3. )  

これでhttp://localhost:8000/sampleapp/add/にアクセスするとテーブルに追加される。

2011年5月7日土曜日

Djangoのデータベースアクセス(その1)

Djangoでデータベースへアクセスするためによく使う記述法のメモ
ここでは、まずテーブルを作成するまでの手順
次の例を利用する
プロジェクト名:sampleprj
アプリケーション名:sampleapp
テーブル名:Memo

データベースへのテーブル作成手順
1.モデルを定義
「sampleprj/sampleapp/models.py」に次のテーブル構成を追加
  1. from django.db import models  
  2.   
  3. class Memo(models.Model):  
  4.     userid = models.IntegerField()  
  5.     title = models.CharField(max_length=100)  
  6.     content = models.CharField(max_length=255)  
  7.     created_date = models.DateTimeField(auto_now_add=True)  
  8.     updated_date = models.DateTimeField(auto_now=True)  
テーブルの構成は、次の通り
・userid:ユーザID、整数型
・title:タイトル、文字列型、最大100文字まで
・content:内容、文字列型、最大255文字まで
・created_date:作成日時、日時型、作成日時を自動設定
・updated_date:更新日時、日時型、更新日時を自動設定

models.py編集後に「# python manage.py syncdb」を実行することで、sampleapp_Memoというテーブルが作成される

参考サイト
モデルフィールドリファレンス

2011年5月4日水曜日

Djangoエラー:Non-ASCII character views.py, but no encoding declared

エラー内容
・ページにアクセスしたときに、「Non-ASCII character '\xe3' in file views.py on line 9, but no encoding declared;」というエラーが発生し、アクセスできない

原因
・日本語をファイル内で利用したが、文字コードを宣言しなかった

対処法
・日本語を利用したファイルの1行目に次のエンコーディング宣言を追加
  1. # encoding: UTF-8  

2011年5月2日月曜日

Djangoエラー:CSRF verification failed. Request aborted.

エラー内容
・djangoで、フォームに入力した内容をPOSTしたときに、「CSRF verification failed. Request aborted.」というエラー

対処法
・「(プロジェクトフォルダ)/settings.py」のMIDLEWARE_CLASSES内に次の1行を追加
  1. 'django.middleware.csrf.CsrfResponseMiddleware',  

エラー画面

テンプレートからHTMLを読み込む手順

djangoでテンプレートからHTMLを読み込む手順

テンプレートディレクトリを追加
・「(プロジェクトディレクトリ)/settings.py」にあるTEMPLATE_DIRS = ()の中にディレクトリのパスを追加する
  1. # 追加するディレクトリ:/home/project/templates  
  2. TEMPLATE_DIRS = (  
  3. '/home/project/templates',  
  4. )  

テンプレートHTMLファイルを追加
・設定したテンプレートディレクトリ内に読み込むためのHTMLファイルを作成
例えば、'/home/project/templates/sampleapp/index.htmlを追加

views側でテンプレートを読み込む
・テンプレートを表示したいアプリケーションのviews.pyにテンプレートを読み込むコードを挿入する
  1. # 追加するアプリケーションが'/home/project/sampleapp'の場合、  
  2. # '/home/project/sampleapp/views.py'に次を追加  
  3. from django.http import HttpResponse  
  4. from django.template import Context, loader  
  5.   
  6. def index(request):  
  7.     template = loader.get_template('sampleapp/index.html')  
  8.     return HttpResponse(template.render(Context()))  

URLを設定
・「(プロジェクトディレクトリ)/urls.py」にviewを登録する
・urlpatterns = ('',)を次のように編集
  1. urlpatterns = ('',  
  2.     url(r'^sampleapp/$''project.sampleapp.views.index'),  
  3. )  

読み込みを確認
# python manage.py runserverを実行して、ブラウザでhttp://localhost:8000/sampleapp/にアクセスして表示されることを確認

参考サイト:テンプレートの利用方法

2011年5月1日日曜日

プログラムの絶対パスを取得

Pythonで実行するプログラムの絶対パスを取得する方法
  1. print __file__  

実行するプログラムの親ディレクトリを取得する方法
  1. import os  
  2. parent_dir = os.path.dirname(__file__)  

現在のディレクトリ取得

Pythonで現在のディレクトリを取得する方法

  1. from os  
  2. current_path = os.getcwd()  
  3. print current_path  

これで、プログラムを実行しているディレクトリを取得できる

eclipseで実行した場合、workspaceが返される

参考サイト:Pythonドキュメント

2011年4月22日金曜日

Webで折れ線グラフ表示(flot)

Webでデータを折れ線グラフで表現するライブラリのflotを試用
flotはjQueryのプラグインである

こんな感じ
flashを利用していないのでiPadなどでも表示できるはず、、

詳しいソースコードは、また後で、、

2011年4月20日水曜日

macのeclipseでdjangoフレームワークを利用した開発環境構築

必要なもの

Django環境を構築
0. python 2.7.1をインストール(必要な場合)

1. ターミナルを起動してDjango-1.3.tar.gzを解凍
2. ターミナルでDjango-1.3のフォルダへ移動し、「python setup.py install」と打ってreturnキーを押すとPythonライブラリのsite-packagesフォルダ以下にdjangoがインストールされる

Python環境をeclipseにインストール手順

1. ダウンロードしたeclipseを解凍
2. eclipseを起動して、「Help > Install New Software...」を選択
3. Work with:の横にある「Add...」ボタンを押す
4. ポップアップしたAdd Repositoryウィンドウで、NameにPyDev、Locationにhttp://pydev.org/updatesと入力して「OK」ボタンを押す
5. Work with:にPyDevが選択されていることを確認し、表示された項目のうち「PyDev」を選択
6. 流れにそってNextを押す
7. インストール中に、証明書が不明だと言われるが信頼してインストールを続ける
8. eclipseを再起動
9. eclipse > 環境設定を起動
10. Pydev > Interpreter - Pythonを選択
11. Python InterpretersでAuto configボタンを押すと自動で設定される
12. Pythonライブラリパスとして、sys.pathに登録されているパスのリストが表示されるので選択しておく

django 1.3リリース

djangoがバージョン1.3をリリース:http://www.djangoproject.com/
変更点:リリースノート

詳細は次回以降

2011年4月3日日曜日

Web UI設計ツール

簡単にWeb UIを設計(モックアップレベルのデザイン)するツールを調査

iMockupsは、iPad上で作成できるので、とても簡単
iPadでイメージを共有しながら、デザインしていくのにも役に立つ

大体イメージが共有できれば、Fireworksでデザインを詰めていくといい?

2011年2月13日日曜日

wordpress設置

wordpressを新しく設定したので、インストールしたプラグインリストの備忘録

  • wordpressのバージョン:3.0.8
プラグインリストとその機能

  • Cimy Sift SMTP:wordpressの管理メールを送信するアドレスをGmailなどの外部メールサーバに設定する為のプラグイン
  • Ktai Entry:ケータイからのメール送信で投稿(メールに写真を添付して送れば、記事に貼り付けられる)
  • WP-DBManager:データベースに記録されている情報(記事の内容など)をSQL形式で自動的にバックアップするプラグイン
  • Wordpress Backup:アップロードされた画像などをGZip形式で自動的にバックアップするプラグイン