Hatena::Groupfukuoka-py

uchikoshi22.py

2012-01-31

FukPUGイベント(勉強会)を開催しました

09:53

2012年1月29日(日)にPythonのイベントを福岡AipCafeで午前の部と午後の部のダブルヘッダーで開催しました。



日曜日の朝10時からにもかかわらず午前中は13人・午後は7人もの方にご参加頂いて本当に感謝です。

午前の部ではハンズオン、午後の部ではLTと(途中で動かなくなった)ハンズオンと缶ビールを片手にPlay!のデモLTを行いました。


私は午前中にハンズオンをPython初学者向けに行ったんですが、そもそもニーズがあるのかどうかすら分からずに開催したので、大勢の方が集まって頂いたことにびっくりしました。

ちょっとでも「時間の無駄じゃなかった」と思っていてもらえればいいんですが、やってみた感想としては反省点が多々あるので今後活かしていければ、と思います。


午後の部では@toenobuさんにblogofileについて、@kensei_kickさんにPlay!フレームワークのLTを行って頂きました。


blogofileは一度自分のサーバでドキュメント管理的に使ってみようかな、と思っています。


一方、Play!フレームワークは、、、JavaのWebアプリケーション開発のフレームワークなんですが、「もうWeb開発はPlay!でいいじゃん!」と思いたくなる衝撃でした。


その後は缶ビールとソフトドリンクを片手に今後どんな感じでコミュニティーをやっていこうか、とかPythonについて気になることとかをゆる~く話をして解散しました。


その中で、今後やってみたい・聞いてみたい内容でちょっとでも出たものを以下のサイトにまとめているので、もし発表する側に興味のある方がいたら是非立候補して下さい!


▼FukPUGハンズオン・LT要望サイト

https://sites.google.com/site/fukpug/handson_and_tl_request


今後もベースとして毎月1人でも参加者がいればオフラインでの集まりをやろうと思ってます。また、今回の午前の部のようにPythonそのものの初学者の方もいれば、GAEビギナーの方もいたりするので、例えば1テーブル1ハンズオンの複数ハンズオン同時開催みたいなものもやってより効果的に時間を使うような試みも楽しいかな、とひそかに企画していますので、興味のある方は楽しみにしていてください!


まだ生まれたばかりのPythonコミュニティーですが、どうぞ応援をよろしくお願いします!!!


改めまして、1/29にご参加頂いた方、朝早くから拙い説明のハンズオンにご参加いただきありがとうございました。発表する側ですが、発表についても運営についても勉強になることがたくさんあったので、これを活かして次につなげたいと思いますので、都合・機会が合えば次回からも顔を出してください!


※FukPUGとは...

Fukuoka Python Users Groupの略で、福岡でPythonに興味のある方が情報交換することを目的としたコミュニティーです。

オンラインの活動として、

Googleグループ(ML): https://groups.google.com/forum/#!forum/fukpug

Facebookグループ : http://www.facebook.com/groups/242091132516242/

Google Sites : https://sites.google.com/site/fukpug/home

ChrisChris2012/06/06 06:09Yeah, that's the tikcet, sir or ma'am

msdwtzmsdwtz2012/06/06 17:14aL98y3 <a href="http://qtqzadbqdjgj.com/">qtqzadbqdjgj</a>

vuubwthkdvuubwthkd2012/06/07 10:09gXnSSj , [url=http://fotzkrspmmpg.com/]fotzkrspmmpg[/url], [link=http://dtpbxskwolaw.com/]dtpbxskwolaw[/link], http://cbavxbcacray.com/

hmhgtwhmhgtw2012/06/07 21:32iHGjl6 , [url=http://apgfataecagg.com/]apgfataecagg[/url], [link=http://tewszyvsnqig.com/]tewszyvsnqig[/link], http://mrclczvdphhe.com/

2011-12-15

Python勉強会@福岡第4回に参加

15:47

2012年12月13日(火)に、Python勉強会@福岡第4回に参加してきました。

第2回、第3回と参加できなかったので楽しみにしていましたが、やっぱり楽しかったです!

この勉強会に参加してると仕事でがっつりPython使いたいな、とつくづく思いますが、自分のスキルではまだまだおこがましい話なので、gumiさん達と対等に技術談義できるくらいしっかり自分で修行しよう!と内心熱くなっています。


さて、勉強会の内容ですが、

「みんなのPython Webアプリ編」の輪読の続きです。

今回はp76~p99まで行いました。


そろそろ音読する担当に立候補しないといけないですね。


突っ込み1 > RSSリーダー使ってますか?

TwitterFacebookのフォローでRSSリーダーまで追い付かないですよね~という感じでまとまってましたが、わたし、RSSリーダーをまだまだチェックしてます。(かなりさらっと流し読みだったりタイトル見て既読チェックしちゃうのが大半ですが)

RSSリーダーは広告入れにくいんで(入れると使われなくなっちゃうんで)マネタイズしづらいのに負荷だけ高いから運用コスト高い、という話でした。


突っ込み2 > 複数の値をreturnするのはPythonでは普通なの?

最初に質問を勘違いして的を得ない返事をしちゃったんですが、ほぼPythonしかしらない私はこの突っ込みが出る理由にしばらく「?」だったんですが、確かに他の言語では関数やメソッドで複数の値を戻さないですね。


私も普通に複数の値を戻す関数書くので、疑問にも思ってなくて視野の狭さを再認識しました。> <


この複数の値を戻すあたりにLispの影響を感じる、というご意見もありました。私自身はLispはさっぱり分かりませんが、PythonLispの関係についての読み物はこのあたりが面白いかもしれません。

PythonLispの関係について > http://practical-scheme.net/trans/IsPythonLisp-j.html


突っ込み3 > __str__()は必要か?

クラスをprintする時のために書きますね、で解決したと思います。

私は主にDjangoのAdmin画面で表示する時用とKayのmodelの値をformに渡す時に使います。


突っ込み4 > _(アンダーバー1個)で始まる変数名って絶対使うもの?

ほとんど暗黙の了解なんで、使わなくてもいい、使ったとしても外部から呼び出すことはできます。確かPythonにはプライベート変数みたいなものはなかったと思います。(多分?)



突っ込み5 > Pythonの曜日って0が月曜日?

どうして言語ごとに(さらには言語内でも)曜日や月の値で0オリジンが変わっちゃうのか、という話ですが、本当に・・・言語ごとに覚えて気を付けるのは思考回路をさえぎる余計なバッドノウハウ以外何物でもないわけで・・・

言語ごとに0オリジンを調べると誰かの役に立つかも。


他にも突っ込みはあったと思いますが、こんな感じで、輪読しながら好きなタイミングで突っ込みを入れて話をしています。


今回は、勉強会の後にメモリの概念について@watsさんの講義が20-30分位ありました。

ほとんどメモリで何が起きてるか考えずに開発できてるんですが、すごく楽しい時間でした。


そこで使われたコードがこんな感じです。

興味のある方は1個目と2個目のコードの実行結果がどうなるか考えてみて、実際に実行してみてください。またその時、メモリで何が行われているのか考えると「あ~、そうだよね~」と納得できます。

▼1個目

def spam(a, b):
    a = 2
    b = "foo"
    print a
    print b

a = 1
b = "hoge"

spam(a, b)
print a
print b

▼2個目

def spam(a, b):
    a = 2
    b.append("foo")
    print a
    print b

a = 1
b = list("hoge")

spam(a, b)
print a
print b

今回も会場はgumiさんが提供して下さいました。

毎回会場のご提供と準備、本当にありがとうございます。



ちなみに次回開催予定の12月20日(火)をもって年内のPython勉強会は一旦終了です。

次回は125ページまでやって本編の忘年会へと突入します!


たまには本編に参加できたらなぁ、とぶつぶつつぶやく@uchikoshi22でした。

LilsterLilster2012/02/22 16:56It's good to get a fresh way of looknig at it.

nweirxnweirx2012/02/23 19:48m7fPRs <a href="http://jajlhsajpmsw.com/">jajlhsajpmsw</a>

tajmjdtajmjd2012/02/24 01:33pRDJBC , [url=http://guchfqqgfugn.com/]guchfqqgfugn[/url], [link=http://dtyictyloirw.com/]dtyictyloirw[/link], http://offevmmkaebe.com/

dufkamdufkam2012/02/29 23:02pW6AMm <a href="http://qrmzjlegybwc.com/">qrmzjlegybwc</a>

2011-12-11

virtualenvの導入

07:43

複数のPythonの環境で開発するために、Pythonではvirtualenvというパッケージが用意されています。


ただ、このvirtualenv、ちょこっと調べた程度では私には今一理解できなかったので、環境を導入するのと同時に、今まで私がやっていた原始的なPythonのバージョンの使い分けとの違いをもう一度整理してみたところ、私自身の大きな勘違いに気が付きました。


virtualenvはPythonのヴァージョン使い分け環境ではない。


これまでずっとvirtualenvを必要と感じなかったのも、こんな勘違いからでした。

python2.6を使いたければ、pythonとたたけばいいし、python2.5ならpython2.5、python2.7ならpython2.7、python3.2ならpython3.2、で別に問題ない、と。


virtualenv環境を使うともう少しだけ広い使い方ができます。

(正直、導入して実際に色々検証してみるまで理解できなかった情弱です。。。)


virtualenvを使うことで、こんな使い方を一つのOS上で切り替えて使うことができます。

通常通り、pipやaptで入れたパッケージ全てが動くグローバル環境

python2.6 + Django1.1だけが動く仮想環境

python2.6 + Django0.9 + mysql-pythonだけが動く仮想環境

python2.5 + Django1.1だけが動く仮想環境

python2.5 + Django0.9 + mysql-pythonだけが動く仮想環境

などなど。。。



◎つまり、

virtualenvを使わず、複数のPythonのヴァージョンが入っている状態がこんな感じで、

f:id:uchikoshi22:20111211072324p:image:w360

virtualenvを使うと、さらにそれぞれのPythonのヴァージョンで、(オプション指定によって)virtualenvを使わないグローバル環境で導入済みのパッケージを使ったり、全く使わずvirtualenv環境の中でのみ別にパッケージが導入してグローバル環境に依存しないPythonを導入した状態で開発ができるようになります。

f:id:uchikoshi22:20111211072322p:image:w360


なかなか言葉にする説明しづらくて、自分でも導入から仮想環境の構築をして始めて理解できたので、そのうちハンズオンなどで説明したいと思います。



Ubuntu10.04の時の注意点

Ubuntu10.04ではPython標準でないパッケージをdist-packagesにインストールしてしまいますが、virtualenv環境内ではsite-packagesにパッケージがインストールされます。virtualevn環境で--no-site-packagesなしで起動したのにグローバル環境にあるパッケージが使えない時は無理やり(?)シンボリックリンクでも貼ってdist-packages内を見に行けるようにしないといけません。

Ubuntu10.04に複数のPythonをインストールする方法

07:43

Ubuntu10.04はデフォルトでPython 2.6がインストールされています。

この環境に2.7、3.2とGoogle App Engine(GAE)用に2.5をインストールした時のメモを転記しておきます。

(手っ取り早くインストールするためのpythonbrewのインストール手順もこのポストの一番下で紹介していまs7)



●前準備

./configure --prefix=/usr/bin/python2.7 --with-threads --enable-shared

sudo apt-get install zlib1g-dev bzip2 libbz2-dev libreadline5-dev libjpeg62 libjpeg62-dev libfreetype6 libfreetype6-dev libsqlite3-0 libsqlite3-dev libgdbm3 libgdbm-dev libssl0.9.8 libssl-dev tk8.4-dev tk8.5-dev

Python 2.7

wget http://www.python.org/ftp/python/2.7.2/Python-2.7.2.tgz

tar zxvf Python-2.7.2.tgz

cd Python-2.7.2/

./configure --prefix=/opt/python2.7 --with-threads --enable-shared

make

sudo make install

sudo strip /opt/python2.7/bin/python*

sudo ln -s /opt/python2.7/bin/python /usr/bin/python2.7

sudo vi /etc/ld.so.conf.d/opt-python2.7.conf

# 下記を追記

/opt/python2.7/lib

sudo /sbin/ldconfig


●Python3.2

wget http://www.python.org/ftp/python/3.2.2/Python-3.2.2.tgz

tar xzvf Python-3.2.2.tgz

cd Python-3.2.2/

./configure --prefix=/opt/python3.2 --with-threads --enable-share

make

sudo make install

sudo strip /opt/python3.2/bin/python*

sudo ln -s /opt/python3.2/bin/python3.2 /usr/bin/python3.2

sudo vi /etc/ld.so.conf.d/opt-python3.2.conf

# 下記を追記

/opt/python3.2/lib

sudo /sbin/ldconfig


●Python2.5

#ソースから入れるとGAEの開発環境がうまく動かなかったので、hrendohさんの記事をもとにaptで入れました。(GAEの開発をするにはPILとSSL関係が別途必要です)

・sources.listに以下を追記

deb http://ppa.launchpad.net/fkrull/deadsnakes/ubuntu lucid main

deb-src http://ppa.launchpad.net/fkrull/deadsnakes/ubuntu lucid main

・以下を実行

sudo apt-get update

sudo apt-get install python2.5



●これまでのバージョンの使い分け

Pythonの開発環境として、Ubuntu10.04を使っていますが、標準でPython2.6が入っています。

Python2.6はUbuntuを動かす上で下手に触らない方がいいので、そのまま残しつつDjangoでの開発用に使っています。

その他に、Google App Engine(GAE)の開発のためにPython2.5、将来の勉強のためにPython3.2、通常のシェルスクリプト代用としてのちょっとしたプログラムを書くためにPython2.7と、1つのOS上で4つのPythonがインストールされています。

ヴァージョン用途起動方法
2.6システムデフォルト&Djangopython | python2.6
2.5GAE開発用python2.5
2.7シェルスクリプトの代替&GUI開発python2.7
3.2将来への布石python3.2


この環境で特に変更を加えていなければ、シェルでpythonと実行するとpython2.6の環境でPythonスクリプトは実行されます。


▼確認

zuzu:~$ which python

/usr/bin/python

zuzu:~$ ls -la /usr/bin/python

  • rwxr-xr-x 1 root root 983 2010-04-25 12:20 ipython
  • rwxr-xr-x 1 root root 331 2010-04-25 12:20 ipython2.6
  • rwxr-xr-x 1 root root 316 2010-04-25 12:20 ipython-wx
  • rwxr-xr-x 1 root root 227 2010-04-25 12:20 ipythonx

lrwxrwxrwx 1 root root 23 2011-12-10 13:46 pdb2.5 -> ../lib/python2.5/pdb.py

lrwxrwxrwx 1 root root 23 2011-09-19 14:57 pdb2.6 -> ../lib/python2.6/pdb.py

lrwxrwxrwx 1 root root 9 2011-09-19 14:57 python -> python2.6

lrwxrwxrwx 1 root root 9 2011-09-19 14:57 python2 -> python2.6

  • rwxr-xr-x 1 root root 1164972 2011-09-24 08:36 python2.5
  • rwxr-xr-x 1 root root 2288240 2010-04-16 23:06 python2.6
  • rwxr-xr-x 1 root root 1452 2010-04-16 22:59 python2.6-config

lrwxrwxrwx 1 root root 25 2011-12-10 13:36 python2.7 -> /opt/python2.7/bin/python

lrwxrwxrwx 1 root root 25 2011-12-10 13:54 python3.2 -> /opt/python3.2/bin/python

lrwxrwxrwx 1 root root 16 2011-11-13 17:49 python-config -> python2.6-config

lrwxrwxrwx 1 root root 29 2011-09-19 14:57 pyversions -> ../share/python/pyversions.py

なので、Pythonお約束の一行目の/usr/bin/env pythonを書くと、PATHを参照して/usr/bin内のpythonを実行するので、python2.6が起動しますが、/usr/bin/pythonはあくまでシンボリックリンクなので/usr/bin/python2.7に貼り直せば/usr/bin/env pythonを書いてpython2.7環境で走らせることが可能です。


ただし、毎回シンボリックリンクを張り替えるのも泥臭いし、なによりシステム側で依存している/usr/bin/pythonで動くヴァージョンを変えるのは怖いので、次に紹介するvirtualenvがとても役に立ちます。



一応、断っておくと最近はpythonbrewを使えばもっと簡単に複数のPythonのバージョンをインストールできます。

pythonbrewのインストールはこちら > http://d.hatena.ne.jp/pasela/20110704/pythonbrew

▼インストール手順だけ抜き出すと。。。

sudo apt-get install curl

curl -kLO https://github.com/utahta/pythonbrew/raw/master/pythonbrew-install

chmod +x pythonbrew-install

./pythonbrew-install

.bashrcに以下を追記

source $HOME/.pythonbrew/etc/bashrc

toenobutoenobu2011/12/11 15:52virtualenvWrapperって使ってますか?

uchikoshi22uchikoshi222011/12/15 15:57> toenobuさん
実はvirtualenv自体、自分自身ではまだ差し迫った必要性がなくて、とりあえずvirtualenvがどう動くのか知りたくてインストールしただけなのでvirtualenvWrapperはまだ入れてもないんですよ。

VishalVishal2012/02/20 22:46This article is a home run, pure and smiple!

etjtdbetjtdb2012/02/22 01:28utmmP9 , [url=http://esavrxokoepj.com/]esavrxokoepj[/url], [link=http://fkgnntntvfdh.com/]fkgnntntvfdh[/link], http://qtzxeokyesir.com/

2011-11-05

福岡のPythonユーザーグループを作りました

09:17

2011年11月15日に福岡でPythonの勉強会が開かれる、ということで、以前からあればいいのになぁ、

と思っていた、福岡のPythonユーザーグループをFacebookグループGoogleグループとで作りました。


年明け後の2012年1月には興味のあるかたにお集まりいただいて、このグループの紹介兼、勉強会を

開催する予定ですが、簡単にこのグループについていくつか書いておきます。


Q.グループ名:

A.FukPUG - Fukuoka Python User Group


Q.Fukuoka.pyとどう違うの?

A.基本スタンスは一緒で、福岡でPythonを勉強している人たちのゆるい集まりですが、実際に顔を合わ

 せる機会を定期的につくれれば、と思います。


Q.FukPUG参加資格は?

A.Pythonに興味があれば誰でも参加できます。福岡在住じゃなくても構いません。

 福岡中心に集まることが多い(だろうな)、というだけです。

 希望すればGoogleグループもFacebookグループでも管理者権限をお渡しします。


Q.どうしてFukPUGを作ろうと思ったの?

A.福岡でPythonユーザが集まるグループがこれまでなかったことと、前述の11/15の勉強会を見ると

 Pythonの勉強会ニーズが少なからずありそうだったためです。


 また、初学者が参加しやすく、熟練者も継続できるような連続的な勉強会・コミュニティーは実際には

 難しそうなんですが、少なくとも福岡のPythonユーザの情報ハブとしてのグループがあれば、とい

 う思いからです。


Q.FukPUGは何をするの?

A.今のところ、GoogleグループとFacebookグループを作ったので、勉強会情報やイベント情報など

 をこのグループに投げていただければ、福岡のPythonの情報をまとめて提供することができます。

 また、定期的に勉強会やmini Hack-a-thonなんかの主催も計画しています。


 勉強会の種類が増えて、それぞれの勉強会メンバーで集まって福岡版PyCon、なんて日が来る

 かはわかりませんが、まずは福岡でPythonユーザ同士の情報交換場所であれば、と思っています。


Q.なんか色々書いてるけど、堅苦しくない?

A.ここを読んじゃうとそう感じるかも(> <)。ただ、これは個人的な思いなので、この考えを強制する

 つもりはないし、従う必要はないです。いや、Pythonに興味があるグループってことだけは共有し

 てもらえれば、と思いますけど。


 なので、気軽に情報を流してもらって、集まりがあればフラッと立ち寄ってもらって、グループを

 コントロールしたい方にはがっつりリードしてもらって、Pythonに興味のある方にとって、その人

 なりに、便利な居心地のいいグループであればいいと考えています。



結構書いてしまったんですが、上のようなことを前述の年明け後の1月に発表する機会を作りますので、

Pythonに興味のある方は、GoogleグループかFacebookグループのフォローをお願いします!

RandallRandall2012/02/22 19:05Great common sense here. Wish I'd thuohgt of that.

dxywouldxywoul2012/02/23 21:36J8ugTK <a href="http://sulwlkdrlirb.com/">sulwlkdrlirb</a>

mtxeqpxymtxeqpxy2012/02/25 22:22dn7xBm , [url=http://rztpzydksgkk.com/]rztpzydksgkk[/url], [link=http://rahlrmnueukz.com/]rahlrmnueukz[/link], http://jqkqlczownaq.com/

jmwuebksoajmwuebksoa2012/02/29 22:46MEhLC6 <a href="http://mltlubwfvtbi.com/">mltlubwfvtbi</a>

2011-10-29

福岡でPythonの勉強会が開かれるようです

12:58

来年(2012年)になったら福岡のPythonの勉強会/コミュニティーを作ろう!

と思っていたら、第一回勉強会が開かれるようです。


第1回 Python勉強会@福岡

http://atnd.org/events/21509


福岡でもPythonistaの活動が活発化するといいですね!

初めてのsuper()メソッド

12:52

エキスパートPythonの中でsuper()メソッドのことが書かれていたんですが、super()メソッドを使ったことがなかったので少し調べました。


super()メソッドは第一引数に指定されたクラスの親クラスを返すメソッドで、以下のようなクラスの継承で使うことができます。



OyaクラスをKodomoクラスで継承し、Oyaクラスのspamメソッドを実行するKodomoクラスのeggsメソッドを実装した例です。

class Oya(object):
    def spam(self):
        print "I am a father"

class Kodomo(Oya):
    def eggs(self):
        super(Kodomo, self).spam()

c = Kodomo()
c.eggs()
c.spam() // 直接親クラスのメソッドを呼び出している例です。

これを実行すると、当然、こう表示されます。

I am a father

I am a father



これをsuper()メソッドを使わずに書くとこうなります。

class Oya():
    def __init__(self):
        pass

    def spam(self):
        print "I am a father"


class Kodomo(Oya):
    def __init__(self):
        Oya.__init__(self)

    def eggs(self):
        self.spam()

c = Kodomo()
c.eggs()

watswats2011/10/30 23:08最近 m-hashimoto さんにfukuoka.pyに入れて頂きました。読書会毎週やる予定ですので、よろしくお願いします!

BellaBella2012/02/21 07:38That insihgt's just what I've been looking for. Thanks!

nscpytjnscpytj2012/02/21 20:04klqdDY <a href="http://iytrtayqfbas.com/">iytrtayqfbas</a>

yfbhlzjqyfbhlzjq2012/02/29 01:55iiT77w <a href="http://xtgusbqbatkt.com/">xtgusbqbatkt</a>