ふごー。サンプル見て、はじめて2to3つかってみた。
するするーっとw これは楽しいー。
(venv)linco@my-ubuntu:~$ 2to3 -w cop.py
RefactoringTool: Skipping implicit fixer: buffer
RefactoringTool: Skipping implicit fixer: idioms
RefactoringTool: Skipping implicit fixer: set_literal
RefactoringTool: Skipping implicit fixer: ws_comma
RefactoringTool: Refactored cop.py
--- cop.py (original)
+++ cop.py (refactored)
@@ -2,9 +2,9 @@
# -*- coding: utf-8 -*-
def div(a):
- print u"Result :", a/2
+ print("Result :", a/2)
-num = raw_input("input any number :")
+num = input("input any number :")
div(int(num))
RefactoringTool: Files that were modified:
RefactoringTool: cop.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
def div(a):
print("Result :", a/2)
num = input("input any number :")
div(int(num))
- -w オプションつけたら上書き、つけなかったら変更点を画面に出力
Pyramidのherokuデプロイと、404カスタマイズページ作成
- 2012-04-08T04:59:04-07:00
- lincolinnyan
- ツイート
HerokuにPyramid アプリケーションをあげるとき悩んだので記録します。
<参考資料>
- 公式ドキュメント
http://docs.pylonsproject.org/projects/pyramid_cookbook/en/latest/deployment/heroku.html - @jbking さんのgithubソース
https://github.com/jbking/heroku-pyramid/ - @imagawa_yakata さんのブログ
http://d.hatena.ne.jp/imagawa_yakata/20120115/1326553297 -
Quick and Dirty Python Deployments with Heroku
http://www.slideshare.net/dpritchett/quick-and-dirty-heroku-mempy
公式ドキュメント見て、先月やったPyramidチュートリアルのものをHerokuにあげようとしましたが、構成がちがうのでそのままだと、うまくいかなくて、なんだか時間がかかってしまいました。
それとnotfound_viewカスタマイズする場合の設定について。
step10とは以下のチュートリアルのソースです。
http://docs.pylonsproject.org/projects/pyramid_tutorials/en/latest/humans/creatingux/step10/index.html
scaffold使用しないでスクラッチで作った構成の場合です
準備
mkdir water cd water virtualenv --no-site-packages venv source venv/bin/activate pip install pyramid waitress mkdir MyProject cd MyProject
MyProjectの構成は以下
MyProject ∟ .gitignore ∟ Procfile ∟ requirements.txt ∟ runapp.py ∟ step10 ∟ __init__.py ∟ static ∟ favicon.ico ∟ global_layout.css ∟ global_layout.js ∟ notfound.jpg ∟ templates ∟ about.pt ∟ company.pt ∟ global_layout.pt ∟ index.pt ∟ macros.pt ∟ notfound.pt ∟ people.pt ∟ dummy_data.py ∟ layouts.py ∟ views.py
404エラー用のリダイレクトページ作成 notfound.pt
<div>
<div>
404 Not Found Custom Page
<img src="/static/notfound.jpg">
</div>
</div>
パッケージ配下に、__init__.pyの作成
from pyramid.config import Configurator
from pyramid.view import notfound_view_config
from pyramid.response import Response
@notfound_view_config(renderer='templates/notfound.pt')
def notfound(request):
return {}
def main(global_config, **settings):
config = Configurator(settings=settings)
config.add_static_view(name='static', path='static')
config.add_route('home', '/')
config.scan()
app = config.make_wsgi_app()
return app
config.add_route('home', '/')に対応したviewはviews.pyに設定してあります。ex.)
@view_config(route_name='home',renderer="templates/index.pt")
def index_view(self):
return {"page_title": "Home"}
@notfound_view_confingデコレータを使えば簡単にカスタマイズページ設定できる
requirements.txt 作成
pip freeze > requirements.txt※参考に
Chameleon==2.8.2 Mako==0.7.0 MarkupSafe==0.15 PasteDeploy==1.5.0 pyramid==1.3a9 pyramid-tm==0.4 repoze.lru==0.5 venusian==1.0a3 waitress==0.8.1 pyramid_fanstatic==0.3 zope.deprecation==3.5.1 zope.interface==3.8.0
実行ファイル runapp.py作成
#!/usr/bin/env python
import os
from waitress import serve
import step10
host = '0.0.0.0'
port = int(os.environ.get('PORT', '5000'))
if __name__ == "__main__":
app = step10.main({})
serve(app, host=host, port=port)
ここでのポート5000はローカルで確認するときのもの。
runapp.pyのモジュール名は任意だけどProcfileとあわせてください。
一行目の記述がないと、デプロイに失敗します。
実行権限付与
chmod +x ./runapp.py
Procfile作成
echo "web: ./runapp.py" > Procfile
ローカルで実行
python ./runapp.py
ローカルで動作確認
http://localhost:5000/
.gitignore作成
Herokuへデプロイ
git init . git add . git commit -m "initial commit" heroku create pyramid-study --stack cedar git push heroku master
動作確認
heroku open
うまく行かないとき
- ログ見る heroku logs -t
- プロセス確認 heroku ps
正常なとき Process State Command ------- --------- ----------- web.1 up for 3m ./runapp.py デプロイ失敗 Process State Command ------- --------------- ----------- web.1 crashed for 11s ./runapp.py
- リモートシェルに入って手がかり探す
heroku run bash
pcreate -s starter MyProject など、
scaffold使用してプロジェクト作成したときは 公式の通りやればだいじょうぶです。
ちょっと変えたいと思ったときに、手こずるー。
ちょっと変えたいと思ったときに、手こずるー。
それから、実は、2ヶ月くらいかけてCCライセンスのコンテンツで電子書籍作っていたのですが、手順が悪かったようで、お蔵入りしそうです。先にライセンスのことをしっかり念書とっておくべきでした。私が失敗が多いのは、考え方や組み立て方の問題かなと思い始めました。
たぶん今のままじゃ、何やってもうまくいかないのかなと。
コンテンツ作りはじめたとき、写真の使用を快諾してくださった方に申し訳ない気持ちです。
とてもうれしかったから余計。
コンテンツ作りはじめたとき、写真の使用を快諾してくださった方に申し訳ない気持ちです。
とてもうれしかったから余計。
正直、今何作りたいのか、わからなくなってきていますが、自分の実力とは別にこんなのあればなーと思っているものもあります。足りない部分はいっぱいあるのでこれからも、いろいろためしてみます。今後もよろしくお願いします。
愛って過去形はないのにな
- 2012-03-22T05:32:00-07:00
- lincolinnyan
- ツイート
今日は、Wifiと携帯忘れたから、Twitterしなかった。
帰ってからTLみたら、目が廻りそうだったから、こっちに書こう。
朝通勤のとき、おっきなディスプレイにあるアーティストの新曲紹介
「愛してた」って出た。
変な感じしたよ。
私は、愛に過去形はないと思う。
それ、愛じゃなかったんだよ。恋か、なんかじゃないかな。
恋は終わりがあるから。
歌に、つっかかるなよ、ってね。
エキPy読書会 第二期04参加しました
- 2012-03-17T07:57:30-07:00
- lincolinnyan
- ツイート
エキスパートPythonプログラミング読書会 第二期 04
2012/03/13 at バリストライドグループ
三章入りました♪
<参考資料>
3月は、Python イベントたくさんあります☆
顔だけ見知っていて、Twitterアカウントと一致してない方、まだいるんですw
実行時に、順序のリストをもとに、クラス属性の探索が行われる。
順番をちゃんと考えないと、どれがよばれてるかわかんないよね。
それをちゃんと整列させて、呼び出す。
継承の使い過ぎは別のとこで破綻するのでやめたほうがいい
javaみたいに、super()に selfの他に、objectをわたすことも可能だけど...あまり使わないっぽい。
Python3使えば、問題なくなるので、Python3使いましょう!
けど、まだPython3対応してないのがある。
こちらで、チェック「PYTHON 3 WALL OF SHAME」⇒ http://python3wos.appspot.com/
外からさわらないでね、とか、そういうやつ。
ネームマングリング
Pythonの動き、見れるよ。
実はずっと前、清水川さんがツイートしてたのチェックしてたw にゃはー。
@takanoryさん
<エキPy二期 4回目の所感 >
エキPyチョコに対抗してオマケ
<参考資料>
- イベントURL
http://connpass.com/event/289/ - 読書会での清水川さんのスクリーンログ
https://gist.github.com/2028865
- toggetter (@imagawa_yakata)
http://togetter.com/li/272363
アナウンス
清水川さんから、開始前にアナウンス3月は、Python イベントたくさんあります☆
- 3/17 Python Developers Festa
- 3/24 Python mini Hack-a-thon
- 3/25 Sphinx+翻訳 Hack-a-thon
- 3/27 ビープラウドさんからPython本が発売
そして、夏頃には、PyConJp!スタッフ募集中ですのとのこと。⇒ こちら
|
3/27発売の本はBPスタイルの開発の手法ノウハウが詰まった内容とか。 今までにないPython本ですね!とっても期待!! Pyfesは申し込んでいましたが、今回不参加となりました。こちらも楽しそうでしたね。 |
アイスブレイク
はじめてお話した方もちらほら。顔だけ見知っていて、Twitterアカウントと一致してない方、まだいるんですw
第三章 構文ベストプラクティス -クラスの世界-
- 組み込み型を継承してサブクラス化する(たいてい組み込み型で事足りる)
- ABC(抽象基底クラス)を利用する
http://www.python.jp/doc/nightly/library/abc.html
Pythonの継承
- 多重継承ができる
- argには *つかったほうがいい。(親クラスと引数の数が違うときのための対策)
- オーバーライド(サブクラスに定義したメソッドは、完全に上書きされる)
Old-style-ClassとNew-style-Class
Old-style-Class- 2.2以前
- Python3では、Old-style-Classは禁止
- 2.2以降
- Objectを継承したクラス
- 組み込み型を継承したクラス
- 高機能
■object継承
Papaがいなかったので、Papaでw>>> class Papa(object): ... def occupation(self): ... print "pg" ... def hobby(self): ... print "fishing" ... >>> class Son(Papa): ... def occupation(self): ... print "student" ... def hobby(self): ... super(Son, self).hobby() #新しい書き方、自分自身のインスタンスを渡す ... print "play games" ... >>> >>> bob = Son() >>> bob.hobby() fishing play games >>>
Help on class Son in module __main__:
class Son(Papa)
| Method resolution order:
| Son
| Papa
| __builtin__.object
|
| Methods defined here:
|
| hobby(self)
|
| occupation(self)
|
| ----------------------------------------------------------------------
| Data descriptors inherited from Papa:
|
| __dict__
| dictionary for instance variables (if defined)
|
| __weakref__
| list of weak references to the object (if defined)
(END)
■組み込み型継承
listとか、dictとか、継承して、いろいろ使えそうです。>>> class MyList(list):
... pass
...
>>>
>>> dir(MyList)
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__delslice__', '__dict__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getslice__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__module__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__setslice__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
>>>
>>> shoppinglist = MyList()
>>> shoppinglist.append("scan snap")
>>> shoppinglist.append("kindle")
>>> shoppinglist.append("rice")
>>> shoppinglist
['scan snap', 'kindle', 'rice']
>>>
>>> shoppinglist.remove("scan snap")
>>>
>>> MyList.__mro__
(<class '__main__.MyList'>, <type 'list'>, <type 'object'>)
>>>
■ABC
サンプル⇒http://docs.python.org/library/collections.html#collections.deque>>> import collections
>>>
>>> class ListBasedSet(collections.Set):
... def __init__(self, iterable):
... self.elements = lst = []
... for value in iterable:
... if value not in lst:
... lst.append(value)
... def __iter__(self):
... return iter(self.elements)
... def __contains__(self, value):
... return value in self.elements
... def __len__(self):
... return len(self.elements)
...
>>> s1 = ListBasedSet('abcdef')
>>> s2 = ListBasedSet('defghi')
>>> overlap = s1 & s2
>>> list(overlap)
['d', 'e', 'f']
>>>
参考: help(ListBasedSet) メソッド解決順序(MRO Method Resolution Order)
Python2.3からC3線形化アルゴリズムに基づくMROが追加された。実行時に、順序のリストをもとに、クラス属性の探索が行われる。
順番をちゃんと考えないと、どれがよばれてるかわかんないよね。
それをちゃんと整列させて、呼び出す。
superの落とし穴
今の書き方のほうが、めんどくさいのは⇒理由があります!サブクラス化する前に、__mro__属性を調べよう!(104p参照)
>>> print ("MRO:" ,[x.__name__ for x in ClassName.__mro__])
とか、
>>> ClassName.__mro____mro__属性がなければ、Old-Style-Classってこと。superの利用は避ける
<メモ>
多重継承で、Old-style-Classと、New-style-Classが混在しているというのは、よくない継承の使い過ぎは別のとこで破綻するのでやめたほうがいい
javaみたいに、super()に selfの他に、objectをわたすことも可能だけど...あまり使わないっぽい。
Python3使えば、問題なくなるので、Python3使いましょう!
けど、まだPython3対応してないのがある。
こちらで、チェック「PYTHON 3 WALL OF SHAME」⇒ http://python3wos.appspot.com/
Pythonのプロパティ
protected,private とか、python では、ルールでやっている外からさわらないでね、とか、そういうやつ。
ネームマングリング
Python Online Tutor
http://people.csail.mit.edu/pgbovine/python/Pythonの動き、見れるよ。
実はずっと前、清水川さんがツイートしてたのチェックしてたw にゃはー。
でもそんとき、ちょっと使っただけで、愛用してなかった。うぐ。
LT
前に帰ってしまったのですが、どんなLTだったかはこちら。@michiyataさん
@takanoryさん
@aodag さん
wsgiについてのホワイトボードLT 見たかったー!!
@shomah4a さん
PyCon JP スタッフ募集
<エキPy二期 4回目の所感 >
New-Style-Class, Old-Style-Classって聞き慣れなくて、なんだろなんて思ってました。
うぐぐ、みんPyにもでてるじゃないかー。(みんPyは、やり終えたと言ってる手前...)
多重継承は、ややこしいことになりそうだし、やりたくない。
ABCより、組み込み型継承が易しい。
次回は、107,108P〜かなー。ディスクリプタ、プロパティ、メタクラス。
少しだけ、入ったけど、「ネームマングリング」って言葉がなんだか、かわいいな。
読書会の内容を、最近、後追いになっちゃってます....。
帰ってから、あのときの意味は、こうだったのかーと。
それから、他の、参加者の方のブログ見たいですー。
「classつかうのやめようよ!?」って@aodagさんが言われてたのはどういう意味なんだろう。Python1.xのときからって、すごいなー。
まだそこまで理解できない...。
うぐぐ、みんPyにもでてるじゃないかー。(みんPyは、やり終えたと言ってる手前...)
多重継承は、ややこしいことになりそうだし、やりたくない。
ABCより、組み込み型継承が易しい。
次回は、107,108P〜かなー。ディスクリプタ、プロパティ、メタクラス。
少しだけ、入ったけど、「ネームマングリング」って言葉がなんだか、かわいいな。
読書会の内容を、最近、後追いになっちゃってます....。
帰ってから、あのときの意味は、こうだったのかーと。
それから、他の、参加者の方のブログ見たいですー。
「classつかうのやめようよ!?」って@aodagさんが言われてたのはどういう意味なんだろう。Python1.xのときからって、すごいなー。
まだそこまで理解できない...。
あ、__getattr__と、__getattribute__ の違いの話もでてました。getattrはこれから調べます><
Python好きだよー。なんでかなw
エキPyチョコに対抗してオマケ
手芸ボランティアのこと
- 2012-03-11T07:32:51-07:00
- lincolinnyan
- ツイート
今日はそれぞれ、いろんな想いがあった一日。
わたしはこのごろ、自分のことでいっぱいで、誰かを思うということがあまりなかったようです。
自分のこと考えてしっかりすることはよいけれど、それはそれで、苦しいです。
そんな中、ラジオをつけていたら、被災地の方々に、おにぎりを作るボランティアをなさった方がでていてお話を聞いていたら、「あー、何も特別なことじゃなくても、やれることでいいんだな。 」って。 おにぎりって心遣いがうれしい。
わたしはこのごろ、自分のことでいっぱいで、誰かを思うということがあまりなかったようです。
自分のこと考えてしっかりすることはよいけれど、それはそれで、苦しいです。
そんな中、ラジオをつけていたら、被災地の方々に、おにぎりを作るボランティアをなさった方がでていてお話を聞いていたら、「あー、何も特別なことじゃなくても、やれることでいいんだな。 」って。 おにぎりって心遣いがうれしい。
私は10年ほど前から編み物ボランティアをやっています。
といっても、そんなに数多くできないです。
縫い物だと、季節関係なく、出来るけど、団体を探せなくて、自分で興すとかもできなくて、編み物ボランティアのシーズンが終わると、ただただ、何もしない毎日でした。
募金するとか、手伝いに行くとか、協力のカタチはいろいろあるけど、 自分がそんなに大変じゃなくて、やれることは、手芸です。
それで、ちゃんと探してみました。
横浜支援隊「ぽかぽか」というところを見つけました。
http://yokohamapokapoka.web.fc2.com/index.html
子供たちが学校へ行くときに使う布製品や、大人向けもあります。
あまり布で、作れるものがたくさんあります。
私はこどもの頃、大学生のボランティアのお姉さんが編んでくれた帽子をかぶっていたことがあります。姉とお揃いの帽子です。
とても気に入っていました。
私が作る、何かを誰かが、うれしいと思ってくれると私もうれしい。
このごろの強すぎる自分を正して、もう少し周りを思える人になりたいと思います。
年始に、こうなろうと思った自分とかけはなれすぎてる....反省。
今日は要望リストの中から、ティッシュケースをふたつ縫いました。(ポケット付き♪)週末の1時間つかうくらいで出来ます。
手芸ボランティアに興味持ってもらえるといいなと思ってブログ書いてみました。
mod_wsgi3.3ではまったとこ
- 2012-02-12T11:15:23-08:00
- lincolinnyan
- ツイート
Python2.7.1
mod_wsgi 3.3
Mac OS X ProductVersion: 10.7.2 BuildVersion: 11C74
- 文字コードエラー
error.logUnicodeDecodeError: 'ascii' codec can't decode byte 0xe3 in position 62: ordinal not in range(128)
解決方法 ⇒ /Library/Python/2.7/site-packages/sitecustomize.pyの設置import sys sys.setdefaultencoding("utf-8") - Python2.7とmod_wsgi3.3の組み合わせ
error.logmod_wsgi (pid=16761): Exception occurred processing WSGI script ' .....
解決方法 ⇒ portsや、brewでなく、mod_wsgiをソースからコンパイルする./configure --with-apxs=/usr/sbin/apxs --with-python=/usr/bin/python2.7 --disable-framework make sudo make install
参考: http://starboarder2001.blogspot.com/2011/06/modwsgi-python27-apache2-on-osx-106.html
[WSGI ウェブプログラミング]115ページの5.14 のエラー処理のとこのディクショナリの使い方。(誤植 KeyError)
template.test_data = {}
× ⇒ template.test_data['test_data_1', 'テストデータ1']
○ ⇒ template.test_data['test_data_1'] = 'テストデータ1'
bom
.vimrc に
set nobomb
bomついてるか確認する
⇒ vim -b filename
^M とる (Windows CR+LF改行コード)
⇒ tr -d '\r' < filename > newfilename
ただの日記2012/02/08
- 2012-02-09T00:12:00-08:00
- lincolinnyan
- ツイート
- Apacheのエラー消えた。
- Cheetah使い始めた。
本格がズレ込んだから、少しの間、早く帰れるよ。
毎日Pythonさわれるのがいいね!
テンプレートエンジンもいろいろあるんだな。
まだ比較できてないし、特徴がつかめてない。
本にのってたのやってみてるよ。
これ、ひととおり終わっても、去年買った本と、ブックマークしてたのあるから当分材料に困らないねw
時々、こんな時間かかってる自分が恥ずかしいけど、
それでも、覚えたいから、続けるよ。
世の中で何がはやりとか、そんなのより、好きなのやるのがいいよ。
たぶん、好きじゃないと、続けられない。
Twitterでそんなたくさん、フォローしてないのに、今日TLで3人の方、誕生日だったみたい...。おめでとうございます。
お祝い事は、いいね。
周りでいいことあると、私もうれしい。
ただの日記2012/02/05
- 2012-02-05T00:40:00-08:00
- lincolinnyan
- ツイート
<PyDev>
- 使ってみてる
Eclipseプラグインじゃなくて、Aptana Studio3 で。
Aptanaは使いやすいし、そんな重くは感じない。
宣言モジュールに飛べるし、参照しやすい。
コードアシストのせいで、覚えられないとまずいので何度か書いたあとに使ってみている。 - 本見ながら、エディタで書く。エラーが出る。
処理のイメージを持ちながら、また書いてみる、エラーが少なくなる。
何度も書いてみる。エラーが出なくなる。
休憩する。
また書いてみる。
PyDevで書いてみる。importモジュールについて調べてみる。
vim-pep8いれた
<wsgi>
<wsgi>
- mod_wsgiやってみてるけど、client denied by server ... が出ている。
⇒ パーミッションが間違ってた。
また平日の夜か、週末やろうー。
WindowsかUbuntuで、まずやってみてもいいかもね。
wsgiの本、賛否両論かもしんないけど、今の自分ここから。
たぶん、前、チュートリアルやったときより、わかると思う。
明日は月曜。また、一週間スタート♪
おやすみー。
おやすみー。
ただの日記2012/01/30
- 2012-01-31T00:49:00-08:00
- lincolinnyan
- ツイート
今日いい一日だった。
ほんとにいい日だった。
別に何もなかったんだけど。
日曜日に書いたコード、覚えてるかな、って書いてみたら、覚えてて、
すらすら書けた。何回でも書けた。
短いコードだけど。書いたら、覚えるんだな。
Pythonのコード、すらすら書けるようになるはず。続けてれば、私でも。
特別おいしいもの食べたわけでも、誰かにほめられたわけでも失敗したわけでもない。
あ、どっちかっていうと、ちょっとは失敗あったかも。
帰ってからの、一時間が、とても楽しかった。
あっという間の、一月終了。エンジンかかるの遅かったー。
あさって、席替えだなー。
って、学生でもないのに、なんか、ソワソワ。
- About
-
名前:lincolinnyan
- Recent Entries
- Categories
-
- Tags
- Archives
- Search
- Others