Thu, 30 Nov 2006

みんぱい読了

いまさらかよって感じですが、通勤電車の中とかでちょこちょこ読み進んで今朝やっと 読み終わりました。

みんなのPython

ASIN: 479733665X


あ、そんなんできたんだっていう気づきがあったり、使ったことのない標準ライブラリ のサンプルコードが見れたりして良かったです。さすが日本人が書いただけあって文章 が読みやすいし、適度な分量でPython言語が一通り眺められていい感じです。

私は、はじめてのPythonはかなり気に入っていて、第一版も第二版も持っているのです が、一からPythonを勉強しようっていう場合に、さすがにチュートリアルの次に読むに は分量も難易度もなかなか高いので、チュートリアル → みんぱい → はじぱいと進む と無理なく学習が進められていいんじゃないかな、と思いました。

初めてのPython

ASIN: 487311022X


初めてのPython 第二版

ASIN: 4873112109



Tue, 28 Nov 2006

MagicWord/commentsプラグインでトラックバックを受け取る

確かこんなんだったと思います。

を読んでその話もどこかで書いたような気がするなーと思ったので、探してみたところ、

のコメント欄にて、その話題には触れているものの、どうしたかっていう話には触れて いなかったので、記憶を頼りに再構築してみました。しかしながら今は他の修正も入っ ちゃってるのと、私が実際に使っているcomments.pyはちょっと古いので、動くかどう か無保証です。

[161]% diff -u comments.py.org comments.py
--- comments.py.org     2006-11-28 02:21:20.281250000 +0900
+++ comments.py 2006-11-28 02:40:25.390625000 +0900
@@ -351,9 +351,14 @@
     cfn = os.path.join(cdir,entry['fn']+"-"+comment['pubDate']+"."+config['comment_draft_ext'])

     argdict = { "request": request, "comment": comment }
-    reject = tools.run_callback("comment_reject",
-                                argdict,
-                                donefunc=lambda x:x != 0)
+
+    if comment['author'].find('Trackback from') != -1:
+        # This is trackback.
+        reject = 0
+    else:
+        reject = tools.run_callback("comment_reject",
+                                    argdict,
+                                    donefunc=lambda x:x != 0)

     if (isinstance(reject, tuple) or isinstance(reject, list)) and len(reject) == 2:
         reject_code, reject_message = reject

あと、これを書いてて思い出した。

の機能を私はなぜかcomments.pyプラグインの方に実装していて、trackbackの機能なん だから上記サイトにあるようにtrackback.pyプラグインに実装するほうが正しいような 気がするのになんでそんなことしたのかなーと思ってたんだけど、そうそうMagciWord を入れるとトラックバックを受け取らなくなるのの対策で上記修正をすでに comments.pyに入れてたから、それを利用したんだった。なんか納得。


Tue, 21 Nov 2006

Linuxカーネル2.6解読室

今日は、なんだか風邪っぽかったので早めに帰宅してみた。せっかく時間が早いんだか らと本屋さんに寄ったら、以前なんかでちらっとみて気になっていた本があったので思 わず買ってしまった。

Linuxカーネル2.6解読室

ASIN: 4797338261


風邪っぽくて頭がボーっとしてる状態で読む本か?という感じは非常にしますが ^^;

カーネル内部の挙動とかよくわかってなくて、前からやっぱりカーネルの動きがわから んとちゃんとしたプログラミングできないよなーって思ってたので、理解できるのかど うかわかりませんが買ってみました。

とりあえず「第0章 Linuxカーネルの構成要素」だけ読みました。概要なのですが、と りあえずここまでは読みやすかったですが、この後の各機能詳細は、どうかな?しばら く取り組んでみます。


続: mechanizeを使ってみる

mechanize使ってみた。

  • proxy設定
  • User-agent設定
  • basic認証
  • <form><textarea>テキスト</textarea></form>のテキストを取得

するようなコード。

mechanizeって、ブラウザ風に動くためのものだから、formやらlinkを取得/設定するよ うな関数はあるんだけど、BeautifulSoupみたいにいろんなタグにアクセスするための 機能はなさそうな感じ。でもmechanizeってBeautifulSoup機能を取り込んでるんだよね 。モジュールとして呼び出してるんじゃなくて、内部に実装されてるの。どういう関係 にあるんだろう?

import mechanize

br = mechanize.Browser()
br.set_proxies({})
br.addheaders = [('User-agent', 'Mozilla/5.0')]
br.add_password('http://xxx.xxx.xxx.xxx/', 'account', 'passwd')

br.open('http://xxx.xxx.xxx.xxx/index.html')
enc = br.encoding()
for form in br.forms():
   try:
       text = form.find_control(type='textarea').attrs['value']
       print unicode(text,enc).encode('utf8')
       break
   except KeyError, ClientForm.ControlNotFoundError:
       pass

mechanizeを使ってみる

しばらく前から mechanize を使ってみようと試してるんだけど 職場のWindowsXP+Cygwin環境では、ネットワーク的にすぐ隣にある linuxマシンのページにもアクセスできなかった。

>>> import mechanize
>>> br = mechanize.Browser()
>>> br.open('http://xxx.xxx.xxx.xxx/')
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
 File "build/bdist.cygwin-1.5.21-i686/egg/mechanize/_mechanize.py", line 156, in open
 File "build/bdist.cygwin-1.5.21-i686/egg/mechanize/_mechanize.py", line 214, in _mech_open
mechanize._response.httperror_seek_wrapper: HTTP Error 500: Server Error
>>> mechanize.urlopen('http://xxx.xxx.xxx.xxx/')
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
 File "build/bdist.cygwin-1.5.21-i686/egg/mechanize/_opener.py", line 371, in urlopen
 File "build/bdist.cygwin-1.5.21-i686/egg/mechanize/_opener.py", line 191, in open
 File "build/bdist.cygwin-1.5.21-i686/egg/mechanize/_http.py", line 573, in http_response
 File "build/bdist.cygwin-1.5.21-i686/egg/mechanize/_opener.py", line 214, in error
 File "/usr/local/lib/python2.5/urllib2.py", line 353, in _call_chain
   result = func(*args)
 File "/usr/local/lib/python2.5/urllib2.py", line 499, in http_error_default
   raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 500: Server Error

urllib2でエラーが発生してるように見えるんだけど、普通にurllib2でアクセスする分 には全然問題なくアクセスできたんだよなー。


Continue Reading...: "mechanizeを使ってみる"