Pythonでなんか作ってみる -2ページ目

XREAでweb.pyをcgiにして実行(2)

>web.pyの関連ファイルとPHPでのDB管理ツールだけで、15MB/50MBになってしまった
って書いたけど、あらためて計測してみればPHPのDB管理ツールの方が12MB近く食っていた。
いよいよ容量が足りなくなったら削除すればいいか。

XREAでweb.pyをcgiにして実行

とりあえず、前回の記事でのリンク先を参考にXREAでweb.pyを動かすのには成功。
以前、作ったスロットの子役カウンターを設置したが、設定検定にRを使っていたところのコメントアウトを一部忘れていて随分嵌ってしまった。
Pythonレベルのエラーだとweb.pyのデバッグオプションをONにしていても、Web上ではほとんどまともなエラーが返ってこないので難儀しました。

出来てしまえば、特別にやったことはないので、ここに改めて書く情報もないんだけど、web.pyの関連ファイルとPHPでのDB管理ツールだけで、15MB/50MBになってしまったので、web.pyを使う複数サイト(xrea.com/***のURLで区別)を構築するのは無理そう。
ん?というか、web.pyをトップに配置して、全てのリクエストをweb.pyで振り分けてしまえばいいのか?

それをするには.htaccessのRewriteEngineの書き方を調べなければならないのだけど、どうせ複数サイトをやる気もないし。

次はDjangoのCGI化をインストールしてみてパフォーマンスを(ちょっとだけ)調べる。

レンタルサーバ(2)

cgiで動かすなら、web.pyの方が手軽なんじゃないかと思った。
幸いにして、XREAで使える方法が書かれた記事をあっさり見つけたし。

[python]XREAでWeb.pyを使ってみた

CGI環境でweb.pyを動かす

XREAはpythonもDBも使えるらしい無料レンタルサーバサービス。実験的に、djangoとweb.pyを使ってみようかな。

おっPython

すぐ傍にあって気がつかないこと

String s = "いっぱい";
s.replaceAll("^い", "お");
System.out.println(s);

これで何が表示されるのかという問題。普通に引っかかってしまいました。

で、JavaだとString.replaceAll()が副作用がないということが、罠だったわけですが、Pythonでも結構よくやるきがするよね。

Rubyだと!を付けたりしますが、Pythonでは「副作用があるメソッドは値を返さない」とう結局実行しなきゃ気付かないガードだし、いっそ関数型チックに副作用がある構文と無い構文を明確に分ける言語って無いのだろうかと考えたりしました。

個人的には、メソッドは副作用があるように見えて、関数は副作用がないように見えますが、
Pythonで書くときはあまりクラスを書かないので、結局副作用ありまくりの関数を良く書いているような。

レンタルサーバ

まだ全然慣れていないけど、ゆくゆくはDjangoで公開サイトを作りたいと思ってレンタルサーバを調べてみた。
PythonでCGIはそこそこ(思ったより?)ありそうだけど、Djangoが使えるのは日本では無さそうだな、と。

Pythonのお勉強のPythonが使えるレンタルサーバ

そんななか、こんな記事を見つける
CGIでDjangoを動かす

速度的にどうなんでしょうか?
というか、CGIならPHPでも似たようなものなのかな?

「Pythonで」google

「Pythonで」でググると、2ページ目に表示された。

おお、もうそんなところまで来たか。ってな感動を感じました。

そういえば、日本語のPython情報を探るのによく「Pythonで」でググると面白いサイトが見つかった気がします。最近はもう新しいサイトは見つけてませんが。
はてなのPythonアンテナに集中している気がします。

日本でPythonを流行らせるには、この「Pythonで」系本や記事がもっと増えなくてはいけない気がします。Pythonならではってことはあまり思いつかないので難しいのかもしれませんが。個人的にはPythonのキラーアプリはTracなんですが、開発者に密接しすぎているのがちょっと。

G.M.ワインバーグ

そういえば、尊敬する人に名前をあげていながら、一度も言及していないので、ワインバーグについて。
といっても、個人的に知っているわけでは当然無くて、彼の著書を読んで非常に感化されただけなわけだけど。

お薦めの一冊を選べと言ったら、これ。
スーパーエンジニアへの道

¥2,800
株式会社 ビーケーワン

ちなみに、これを読んだのは会社においてあったから。当時(今でも)、私は会社で公然と読書をする習慣があり、しかもその本が社有品なら読書も業務のうち、ってなオーラをだしながら読みまくる。
いや、それで仕事が遅れたらやばかったんだろうけどね。

この本はタイトルで損をしていると切実に感じます。スーパーエンジニアってなんだよ、って感じですね。
しかし、実際にはエンジニアだけでなくあらゆる人に役に立つ一般的な事柄がテーマです。

ちょっとこれは重いな、って人には、こちらの方がいいかもしれません。


ドナルド・C・ゴース, G.M.ワインバーグ, 木村 泉
ライト、ついてますか―問題発見の人間学

私はこれを学生時代に図書館で見つけて読んでました。そしてそのときは内容を面白いと思っただけでしたが、その後の私にとっての「問題の捉え方」についての非常に大きなベースとなっていると思います。

この二つが同じ著者だと気付いたのは、随分あとになってからです。

ポイントは文章自体が面白いことなんですが、ユーモア感覚が相当理系に偏っているかもしれません。
私は、5年ぐらい前に部下だった子(もう辞めてしまいましたが)にお薦めしたが受け付けられなかったことがありました。

人を選ぶのかな?

1年ぶりにアレを再開

アレとはこれ。恋するプログラム

¥2,500
株式会社 ビーケーワン

前回はどこまでやったのかも忘れたけど、JavaとRubyの違いとTDDに力を費やして力尽きてしまったが、今回はPython使うので。

あと、面白そうな部分だけ実装することにする。

形態素解析マルコフモデルや、Google APIの辺りを適当に組み合わせる予定。

ftplibを使う(2)

やっぱり機能のコードは間違っていた。

def rnlst(ftp, base_dir, sub_dir='.'):
ret = []
items = []
ftp.dir('/'.join(base_dir,sub_dir), items.append)
for i in items:
if i[0] != '-' and i[0] != 'd': continue
item = (i[0], '/'.join(sub_dir,i.split()[-1]))
if item[0] == '-':
ret.append(item)
else:
sub = rnlst(ftp, base_dir, item[1])
if len(sub) > 0:
ret.append(item)
ret += sub
return ret


とはいえ、手元にすぐ使えるFTPサーバが無いので、やっぱり試していないわけだけど。

ftplibを使う

今日、都合によりrcpが通らないサーバがあり、サーバ管理者にも手が届かないので、pythonとftpで何とかすることにした。

最初は、ライブラリリファレンスを見ながら、対話モードでftplibを使う。

>>> from ftplib impot FTP
>>> ftp=FTP('xx.xx.xx.xx')
>>> ftp.login(user,password)
>>> ftp.dir()
-rw-rw-rw- ..............
.............................................

比較的簡単にFTPを動かせた。

ファイルの取得もドキュメントどおり、

>>> ftp.retrbinary('RETR README', open('README', 'wb').write)
'226 Transfer complete.'
>>> ftp.quit()


再帰的にファイルを取得するための関数を書く

>>> def rnlst(ftp, base_dir, sub_dir='.'):
... ret = []
... items = []
... ftp.dir( '%s/%s' % (base_dir,sub_dir), items.append)
... for i in items:
... if i[0] != '-' and i[0] != 'd': continue
... item = (i[0], '%s/%s' % (sub_dir,i.split()[-1]))
... if i[0] == '-':
... ret.append(item)
... else:
... sub = rnlst(ftp, base_dir, '%s/%s' % (sub_dir,item[1]) )
... if len(sub) > 0:
... ret.append(item)
... ret += sub
... return ret


こんな感じだったかな?記憶だけで書いているので間違っている気もする。