Python Conference Japan 2012 のセッションがYoutubeで公開されています。
久しぶりに夜更かししながらだいたい見ました。貴重なものを本当にありがとうございます。
中でも自分の中で興味深かったものをメモっときます。
Python Conference Japan 2012 のセッションがYoutubeで公開されています。
久しぶりに夜更かししながらだいたい見ました。貴重なものを本当にありがとうございます。
中でも自分の中で興味深かったものをメモっときます。
PyConJP – YouTubeなんてものがあった! というわけでじろじろ見ています。
そこになんか可愛い子が映っていたので見てみたら、climeという簡単にCLIコマンドを作れちゃうライブラリについてお話しをされていました。
clime 0.1.4 : Python Package Index
Introduction — Clime v0.1.4 documentation
旭川で初めての開催となるPython勉強会に参加してきました。
日時:8月22日(水) 19:00 ~ 20:30
場所:旭川市市民活動交流センター CoCoDe (会議・研修室1) 地図
参加者:7人
詳細は:第1回 Python勉強会@旭川 – connpass
勉強会の内容としては、まずは第1回目ということでみんなで自己紹介。
そのあと、どうやって進めるかを話し合って、まずはPython チュートリアル を最初から読み進めながら、プロジェクタを使って講師役がいくつかコードを打って確認していこう、ということでやってみました。
今回は主催の@waigania13 さんが講師役と言うことで話しながらコード書いたりしてました。 お疲れ様です。
pythonチュートリアルは1年以上前にさらっと触っただけですが、じっくり見てみると色々とちゃんと書いてあることがわかりました。
当時はちょー斜めに読んだのか、見なかったことにしたのか、寝てたのかはわかりませんが、
こんな事も書いてるんだー、って思いました。当時はどっかのブログとかそこらへんを漁っているうちに目にして覚えた気がしますが、チュートリアル万歳です。
今後の勉強会についてですが、
という予定です。
pythonチュートリアルは、pythonさえインストールできれば付属のインタプリタでできちゃいますので、もし旭川(近郊)でpython勉強したいなーと考えている人がいれば是非一緒に勉強しましょー。
pythonに限らずプログラムについて勉強したい人でも大丈夫だと思います。たぶん。
とくに参加者はプログラムを作る人が多いので、学生さんでプログラムに興味のある方がいたら是非是非です。
wordpressはとっても最高なCMSだけども、reStructuredTextで書けないために使用を断念することも多いかと思います。
そこで、ちょっと探してみたところ WordPreSt reStructuredText Plugin For WordPress ↯ xdissent.com というプラグインがありました。
しかし、残念なことに新しめのwordpressではうまく動かないようです。
そこでちょっといじってみて、とりあえず投稿できるようにはなりました。これもそのプラグインを使って投稿してみました。
しかし山ほど問題が。。。
さて。今年最後の投稿になります。
今年はpythonで遊んだ1年になりましたが、非常に面白い年でした。
というわけで、今年の最後はpythonで作ったものをひとつ。
ワンクリックでインストールできて動作できればいいんですが、全然そうはいかないのが残念。
しかし、python、virtualenv、Flask、SQLite3、twitter-bootstrap、jquery、とかそこらへんを絡めてますので、これからpython+Flaskで何かを作りたいなーと思っている方の参考になればいいかなーと思います。
まー。@mitsuhikoさまのgithubを覗くのが一番参考になるけどね。
ではよいおとしを!
少し時間ができたので久しぶりにredmineとhudsonを更新して・・・え・・!?・・あれ!?・・・hudsonさんクビになってるし! えええ!
というわけで、jenkinsさんに頼むことにしましたので、少しメモ。
「Webを支える技術」を読んでいたら、HTTP GETしてみたくなったのでpythonのsocketを使ってやってみました。
サーバー側はsocketじゃなくてflaskです。apacheとか、まぁ、ふつうにgoogleとかにアクセスしてもいいよね。
http_request_tester.py
[python]
# vim: fileencoding=utf-8
import socket
import urllib
class Response(object):
HEADER_BODY_SPLITTER = "rnrn"
def __init__(self, response):
split_index = response.index(self.HEADER_BODY_SPLITTER)
self.header = response[:split_index]
self.status = self._get_status(self.header)
self.headers = self._header2dict(self.header)
self.body = response[split_index+len(self.HEADER_BODY_SPLITTER):]
def _get_status(self, header):
return header[:header.index("rn")]
def _header2dict(self, header):
headers = {}
for line in header.splitlines()[1:]:
headers[line[:line.index(":")]] = line[line.index(":")+1:].strip()
return headers
class HttpRequestTester(object):
sock = None
def __init__(self, host=’localhost’, port=80):
self.host = host
self.ip = socket.gethostbyname(host)
self.port = port
def __enter__(self):
return self
def __exit__(self, exc_type, exc_val, exc_tb):
pass
def _request(self, request_message):
try:
self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.sock.connect((self.ip, self.port))
self.sock.sendall(request_message)
response = ""
while True:
data = self.sock.recv(1024)
if not data:
break
response += data
finally:
if self.sock:
self.sock.close()
self.sock = None
return Response(response)
def get(self, path, params={}):
template = "GET {path} HTTP/1.1n"
template += "Host: {host}n"
template += "Connection: {connection}n"
template += "User-Agent: {user_agent}n"
template += "Accept-Language: {accept_language}n"
template += "Referer: {referer}n"
template += "n"
request_message = template.format(path=path, host=self.host,
connection=’close’,
user_agent=’HttpRequestTester/0.0.1′,
accept_language=’ja’,
referer=”)
print "REQUEST: {request}".format(request=request_message)
return self._request(request_message)
def post(self, path, params={}):
template = "POST {path} HTTP/1.1n"
template += "Host: {host}{port}n"
template += "Content-Type: {content_type}n"
#template += "Connection: {connection}n"
#template += "User-Agent: {user_agent}n"
#template += "Accept-Language: {accept_language}n"
#template += "Referer: {referer}n"
template += "n"
template += "{param_string}n"
template += "n"
request_message = template.format(path=path, host=self.host,
connection=’close’,
content_type=’text/plain; charset=utf-8′,
user_agent=’HttpRequestTester/0.0.1′,
accept_language=’ja’,
referer=”,
port=":"+str(self.port) if self.port!=80 else "",
param_string=urllib.urlencode(params))
print "REQUEST: {request}".format(request=request_message)
return self._request(request_message)
if __name__ == "__main__":
HOST = ‘localhost’
PORT = 5000
http = HttpRequestTester(HOST, PORT)
res = http.get("/")
print res.status
print res.headers
print res.body
raw_input()
res = http.post("/", params={"hoge":"hogehoge"})
print res.status
print res.headers
print res.body
raw_input()
[/python]
flaskで作ったテストサーバー
[python]
from flask import Flask, request
app = Flask(__name__)
@app.route("/", methods=["GET", "POST"])
def post():
if request.method == "GET":
return "GET DESU"
return "POST DESU"
if __name__ == ‘__main__’:
app.run(debug=True)
[/python]
GETやPOSTのConnectionとかは適当。
「Webを支える技術」の8章とか巻末あたりに書いてそうだけど、まだ読んでないのでまた今度。
先日、思ってもみなかったところでopenstackの話を耳にしました。
ubuntuがeucalyptusからopenstackに移行したのでそのうち試してみようと思ってはいましたが、最近はMac上でpythonでぽにょぽにょしてることが多いので、次のLTSまでいいやと思っていました。
特に自分用だとコマンドラインでKVMちょいちょいしてる程度でお試し用には十分ですし。
でも、リポジトリもあるようなので、追加してちょっとやってみました。
が、LANG=Cしなくちゃいけなかったり、mysqlでキーの長さ制限にひっかかったり。。。
とりあえず、novaうんたらが一通り動いてくれて、euca-add-keypairあたりで止まったのでまた今度・・・。
それにしても、openstackはpython全開なんですね。
tornado、twisted、djangoなどなど。pythonの勉強にちょうどいいかも。