2011年11月29日火曜日

Heroku+Djangoであれこれメモ

Heroku+Djangoを弄ってて分からない単語が
たくさんでてきたので一度整理してみます。

■syncdb
syncdb は、特定のクエリの実行結果を
他のデータベースに保存するためのツール。
元のデータに変更があった際には、
その差分だけを効率よく同期できる。

■psycopg2
PostgreSQLのPythonインターフェース。
似たようなものにpygresqlやpopyがある。
Adapterという単語がどうもしっくりきていないのだけど、
"""
デザインパターンの一種で、
既存のクラスを全く修正せずに、
提供するインターフェースを変更する方法。
(From wikipedia)
"""
ということなので、
デザインパターンの知識がないとピンとこないかな。

■gunicorn
Pythonで作られたWSGIに対応するウェブサーバー。
綴りは'Green Unicorn'を縮めたもの。
"""
Web Server Gateway Interface (WSGI; ウイスキー) は、
WebアプリケーションとWebサーバを接続するための、
簡潔かつ統一されたインタフェース定義である。
プログラミング言語Pythonで使われる。
(From wikipedia)
"""
これにより、対応させたWebアプリケーションは
任意のWebサーバ上で実行することができる。

■Procfile
Herokuアプリの動作方法(プロセスモデル)を指定するもの。
web, worker, clockの3種類がある。

とりあえずここまで、
必要の都度書いていきたい。

2011年11月28日月曜日

Python-Django試行錯誤

まーDjangoのドキュメントを進めているわけです。
いや正確には”進めようと”しているわけなのですが、
「進まない……」

何も考えずに記事の通りにやっていけば進むのかもしれませんが、
ただチュートリアルを進めていくだけじゃ
あまり身につかないだろうなと思い、
「今はPostgreSQLを立てないでHeroku+Djangoでやる」
という目標を立ててやっています。

Proclieって何だ。
gunicornって何だ。
psycopg2って何だ。
つーかDjangoが1.0と1.3でどう違うんだ。
Herokuはどうゆう動きをしているんだ。

と知らないことづくしですが、
それでこそやり甲斐があるってものですかね。
地道に焦らずやっていこうと思います。

2011年11月27日日曜日

SyntaxHighlighter動作テスト

FizzBuzzで試してみます。

#! /usr/bin/env python
# -*- coding:utf-8 -*-

def fizzbuzz(n):
    if n % 15 == 0:
        ans =  'FizzBuzz'
    elif n % 3 == 0:
        ans =  'Fizz'
    elif n % 5 == 0:
        ans =  'Buzz'
    else:
        ans =  n
    return ans

def main():
    for i in range(1, 101):
        print fizzbuzz(i)

if __name__ == '__main__':
    main()

できたみたい。
参考サイトはこちら

■追記 2011/11/27 17:54
どうもSyntaxHighlighterの読み込みが遅いと思ったら、
一番最後の方に読み込まれているようだ。
そりゃ遅く感じるわけだ。
なんとかしたいな……

2011年11月26日土曜日

本ポチった

最近そう言えば本読んでないなーと思い。

エバンジェリスト養成講座 究極のプレゼンハック100
西脇 資哲
翔泳社
売り上げランキング: 11789

人生を最高に楽しむために20代で使ってはいけない100の言葉
千田 琢哉
かんき出版
売り上げランキング: 2809

死ぬまで仕事に困らないために20代で出逢っておきたい100の言葉
千田 琢哉
かんき出版
売り上げランキング: 564

IT関連の本やドキュメントは読んでいるのですが、
こうゆうのはさっぱりな気がしたので買ってみました。
年末年始みたいまとめて時間とって読みたいな。

2011年11月24日木曜日

HerokuでDjangoしてみました。

Heroku 上で Django を動かす - Twisted Mind 試して見ました。

すると今まで悩んでたのが嘘みたいにあっさりできました。
タイポでこんなエラーもでましたが(焦りすぎ。'pattterns'て何よ)、
しっかり動くようになりましたよ〜。
Top
http://warm-mountain-4083.herokuapp.com/
管理画面
http://warm-mountain-4083.herokuapp.com/admin/


最初は
Getting Started with Python/Django on Heroku/Cedar
を見ながら進めていたんですが、
DBが絡んできたあたりからチュートリアルの通りに進まなくなったため、
「一連の流れを早く体験したい!」
の思いでやってしまいました。

Djangoのチュートリアルと一緒にやってしまったから、
何故かPostgres入れたりして環境がごちゃごちゃにorz


まあ「失敗は成功のもと」と言いますので、
気長にやっていきましょう……
ただ写経しただけだとこのままだと忘れてしまうので、
何故そうしたのか考えながらもう一度試してみようと思います。

2011年11月17日木曜日

The Zen of Python -import this-

The Zen of Pythonでも読んでみる。
ターミナルでPythonを立ち上げて、
import thisと打つと

>>> import this
The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!
うん。頑張ろう。
ちなみに日本語訳はこちらで見れます。

2011年11月9日水曜日

エキスパートPythonプログラミング読書会 第二期 01に参加してきました

やっとBlogが書ける!
エキスパートPythonプログラミング読書会 第二期 01 : ATND
に参加してきました。
(結構な大作になってしまったので読む方は注意お願いします)

エキスパートPythonプログラミング
Tarek Ziade
アスキー・メディアワークス
売り上げランキング: 12563

進め方は清水川せんせにお任せで、
分からないや聞きたいことがあったら随時突っ込むという形式でした。
前回もこんな感じだったらしいですね。

ちらほらスーツの方もいらっしゃいました。
仕事帰りですかね。
かく言う自分も仕事終えてから直行したのでスーツでした。
勉強会にスーツで参加するのは初めてでしたね~。
なんか新鮮でした。

しかし、相変わらずMac率の高いこと!
8割9割がMacでしたね。
Windows率とLinux率がほとんど差がないとか逆でしょう。

自分が今回のテーマで気になっていたのが、
(1)Vim
(2)ipython
(3)Pythonの複数バージョン管理
だったので、そこいらへんを中心に書いていこうと思います。

■(1)Vim
Vimを使っているひとが30人中26人、Emacs2人という…(TL調べ)
「フフフフフッ、圧倒的じゃないか。我が軍は…(By なんとか)」
秀丸使ってますって人もいなかったですね。
IDLE使っているという人もいませんでした。
最近だとPyCharmとかいろいろ充実してきたみたいですが、
きっとVim率の高さに圧倒されて
手を挙げられなかったのだと思います。
TLでちらほら別のエディタ、
IDEを使っているという人がいたみたいなので。

■(2)ipython
会場内で知らない人は3割くらいでした。
自分の認識では
・タブ補完ができる
・デバッガが便利
ぐらいの認識で、あえて使う必要あるのかなと思ってました。

どのくらい便利なのかな?と思ってましたが、
清水川せんせは
「普段はipython使いませんけどね。」
とのこと。
人が作ったモジュールを確かめる時にはよく使われているらしいです。

「なんで普段からipython使わないんですか」と質問してみると、
便利なんだろうなとは思うが、
readlineで補完はできるし、
起動にちょっと時間がかかるし、
…いろいろ覚えるのが面倒だっただけ。便利だとは思うけど。
とのことでした。

■(3)Pythonの複数バージョン管理
「複数のバージョンのPython使うのにどうしてる」という話題で、
MacPort、pythonbrew、Homebrewなどの話もでてきました。

今回印象に残っているのは今回は話しませんって言っているのに
ちょいちょい話すことになってしまったvirtualenvですね。

結局
「virtualenvでpythonのバージョン指定して入れている」
という結論しかでてこなかったのには苦笑いしてました。

virtualenv --no-site-package --python=python2.5 myenv
とか指定してあげればバージョン指定してインストールできるので、
最初にそこで解決してあげるのが賢いということですね。

ただし自分のPCに入っていないバージョンを指定しても、
「The executable python2.4(from --python=python2.4) does not exist」
とか怒られるので、
予め自分の使いたいバージョンのPythonを入れておく必要はあります。
Lionだと最初から2.5,2.6,2.7が入っているみたいなので、
そんなに心配する必要はないと思いますが。

「Python2.5,2.6,2.7だとvirtualenv使わなくても大丈夫では?」
という意見もありましたが、
「無理ですね。なんのバージョンを使っているのとか意識したくない」(清水川)
だそうです。

他にもeasy_installとpipの違いにも興味を惹かれましたが、
これは
distutils, setuptools, distribute, pip, virtualenv, buildout 再掲 — 清水川 Docs v1.0 documentation
に詳しいのであえて書きません。
自分はまだ深いところまで入り込めていないので、
しばらくはpipで行こうと思いました。

■感想
やっぱり行けてよかった。
内容が濃いので次回もまた参加する予定です。

今回お話できた方々、
出来なかった方々、
会場準備に携わっていただいた方々、
みなさんありがとうございました!

おそらくまたスーツで参加してますが、
声をかけてもらえると喜びますのでよろしくお願いします。

■関連リンク
・エキスパートPython読書会 第2期 #1
・2011/11/08 エキスパートPythonプログラミング読書会2nd #1 - a set on Flickr
・エキスパートPythonプログラミング読書会( #expertpython )第二期の第一回目に参加してきました - プログラマ行進曲 (id:kutakutatriangle / @takuan_osho)
・Pythonの環境構築の自分なりのまとめ+エキスパートPythonプログラミング読書会 第二期 01に行ってきました。 - kanonjiの日記 (id:kanonji)
・エキPy読書会(第2期) 第1回に行ってきました - 今川館

2011年11月7日月曜日

エキスパートPython 読書会参加します!


エキスパートPythonプログラミング読書会 第二期 01 : ATND 

今朝になって1人、2人とキャンセルがでて、
「おおっ。これは本当に明日いけるかもしれない!」
と思って昼休みにiPhoneで確認したら、
@tfmagicianさんからリマインド入ってました。

「いける!」
ってなことで早速明日に向けて1,2章の予習してます。
基本的なことは知っていても
Vimとipythonの連携とか、
ジェネレータの詳しい使い方とか、
知らないことたくさんだからな〜

Vimmerの場合、
ipython使うのとneocomplcache使うのどう違うんだろう。
補完だけなら、
別にipythonにこだわる必要がないのではないかと思ってしまう。
自分がぱっと思いつくのはデバッカのあるなし程度なのだけど、
ここら辺どうなのだろうか。
virtualenv使うとipythonとの連携が面倒みたいな話もあるし。
ただ、回避方法もあるみたい→
ipython と virtualenv を同時に使う方法 - Ian Lewis


「ipython便利」という話はよく聞くので、
是非とも知りたいところです。


明日は絶対定時で上がる。
朝の時点で上司に宣誓しておこう。
初のスーツでの勉強会だ……

2011年11月6日日曜日

ターミナルからMacVimが起動するようにしてみた

どうやるのだろうと思いつつ面倒くさがって、
手をつけてなかった部分だったのですが
いい加減やってみようと思い実行してみました。

KaoriYaさんのサイトに起動用のスクリプトがおいてあったので、
まずそれをmvimというファイル名にして保存しました。

自分はこちらを参考にして/opt/local/bin/にスクリプトを配置し、
実行権を与えるためにターミナルに以下のコマンドを打ちました。
sudo chmod 755 /opt/local/bin/mvim

参考にしたBlogではu+xとされてましたが、
それだと毎回sudoを付けないと起動できなかったので755としました。

これでターミナル上で"mvim"と打つとMacVimが実行されます。
これでターミナルとの行き来が楽になるとほっと一安心です。

2011年11月5日土曜日

Python開発環境-virtualenvと-pip-

virtualenvはPythonの仮想的な開発環境を作るライブラリ。
いろいろな実行環境
(Pythonのバージョンが違う、モジュールが違う、etc)
をごちゃごちゃさせたくない時に便利らしいです。
(参考にしたのはこちら)

pipはPythonにおけるバージョン管理システム。
他にもeasy_installとかdistributeなどがあるらしいのだけど、
将来統合される予定なので好きなモノを使えばいいらしいです。
(ソースはこちら)
今回はHerokuの公式ドキュメントに従ってpipをインストール。


virtualenvとpipをインストールするために、
公式ドキュメントを眺めていたのだが全然ピンとこない。
そこでGoogle先生で調べていたら、
Virtualenv — 清水川 Docs v1.0 documentation
にたどり着きました。

記述の通りに打ち込んだら一発でインストールできました。
New python executable in env1/bin/python
Installing setuptools............................done.
Installing pip.....................done.
あっという間でした。
virtualenv入れるとpipも一緒に入るのね。

今の段階では-distributeオプションをつけていないので、
デフォルトのsetuptoolsになっています。
(virtualenvはvirtualenvwapperを入れると更に便利らしい)


清水川先生のおすすめは
virtualenv + distribute 環境下で buildout + distribute
らしいけど(ソースはこちら)、
とりあえずHerokuの公式ドキュメントを見ながら進めてみよう。

2011年11月4日金曜日

Herokuインストールdone…

公式にはまずRuby1.9系入れるみたいなこと書いてあったけど、
そういえばRubyはXcode入れた時に一緒に入っている!

Rubyはあえてインストールせず、
sudo gem install heroku
したらあっさり入れられました。
バージョンは1.8系なんだね。へー。

Successfully installed term-ansicolor-1.0.7
Successfully installed mime-types-1.17.2
Successfully installed rest-client-1.6.7
Successfully installed addressable-2.2.6
Successfully installed launchy-2.0.5
Successfully installed rubyzip-0.9.4
Successfully installed heroku-2.11.0
7 gems installed
Installing ri documentation for term-ansicolor-1.0.7...
Installing ri documentation for mime-types-1.17.2...
Installing ri documentation for rest-client-1.6.7...
Installing ri documentation for addressable-2.2.6...
Installing ri documentation for launchy-2.0.5...
Installing ri documentation for rubyzip-0.9.4...
Installing ri documentation for heroku-2.11.0...
Installing RDoc documentation for term-ansicolor-1.0.7...
Installing RDoc documentation for mime-types-1.17.2...
Installing RDoc documentation for rest-client-1.6.7...
Installing RDoc documentation for addressable-2.2.6...
Installing RDoc documentation for launchy-2.0.5...
Installing RDoc documentation for rubyzip-0.9.4...
Installing RDoc documentation for heroku-2.11.0...

ふむ…とりあえずインストールまで完了したので、
また公式サイトを探ってちょくちょくいじっていきます。
次はPythonの環境を整えていかないとな〜。

p.s.
sudoつけないでインストールしようとしたら、

ERROR:  While executing gem ... (Gem::FilePermissionError)
    You don't have write permissions into the /Library/Ruby/Gems/1.8 directory.

と表示された。
インストールする時は忘れずに、ですねぇ…


2011年11月2日水曜日

Herokuアカウント作ってみた

Gitが使えるようになったので、勢いでアカウント作ってみました。
後で詰まったところをまとめておかないと。

さてHerokuとは…以下のリンクが詳しいですね。
■HerokuでWebアプリ開発を始めるなら知っておきたいこと
 (1)無料のスペック - アインシュタインの電話番号☎
■第3回 クラウドプラットフォーム「Heroku」の活用 | Think IT

「へー、PythonでいうGAE(Google App Engine)みたいなものか」
という感覚だったのですが、
以下のリンクを見て使ってみようと思いました。
■InfoQ: Heroku上でPython と Django
■Heroku 上で Django を動かす - Twisted Mind

標題のアカウント作成ですが、めっちゃ簡単でしたね…。
赤いところを押して行って、

メールアドレス入れたらHerokuからメールが届きます。
そこでパスワードの設定をすればもう完了です。はやっ。

  完了したらこんな画面がでてきました。

これからインストールして試してみます。

他の方のBlogとかは参考にしますけど、
それは詰まった時の最終手段としてやってみましょうかね。
英語嫌いじゃないからいけるはず。
(Gitの時は手こずったけど……)
Gitに続きいい英語のリハビリにもなりそうです。

2011年11月1日火曜日

Mac用Git/MercurialのGUIクライアント-SourceTree-を試してみた

Python Developters Festa 2011.10の時に入れましたが、
入れっぱなしになってたやつを試してみました。




シンプルで良さげですね。
さて、以前”id_rsa”とやらがわかんなくて
ほったらかしににしてしまった
Gitの設定を何とかしないと……

まだ無料のキャンペーン期間中みたいなので、
興味ある人は入れてみては?
無料になる前は7000円(!)してたみたいなので
入れるなら今のうちだと思いますよ。
リンクはこちら。