12012010 Python
関数プログラミングのアプローチを8まで読んだ。
これは面白いですなぁ。勉強になります。
12012010 Python
関数プログラミングのアプローチを8まで読んだ。
これは面白いですなぁ。勉強になります。
普段はLinuxマシンでRPyを使うのだけど、手元のLet's NoteR4でも使いたいので。
pywinはeasy_installで。普通にダウンロードしてクリックからのインストールでもいいような。
easy_install pywin32
RPyはrpy-1.0.1-R-1.3.0-to-2.6.1-Numpy-win32-py2.5.exeを落としてきて入れた。
あと環境変数。R_HOMEがねーとかwin32allがimport出来ないとかいうエラーは環境変数の設定のせい。次の二つを環境変数Pathにセットしておくととりあえず大丈夫。
C:\Program Files\R\R-2.6.1\bin
C:\Python25\Lib\site-packages\pywin32-210-py2.5-win32.egg\pywin32_system32
後者のほうはなんとかならんかね。Pathに設定するようなもんじゃないと思うんだけど。前者もpathでなくてR_HOMEとかにセットできたらいいのにね。
12012010 Python
Pythonでforの無限ループってのをみて、ほう!と思ったので、
x = [1]
for i in x: x.append(i<<1); print i
砂嵐のように数字が出まくる画面はちょっと爽快。 途中で打ち切ったけど、結局何桁ぐらいまでOKなんだろうか?pythonのintの謎には迫れなかった。
最近は、仕事がハードで金曜の夜はコード書いたりとか技術書読んだりとかはやる気がおきない。そのうえ金土だけ酒解禁日なので日本酒を呑むのがうれしくて仕方がないので余計にやる気などおきない。
というわけで、今晩は山形正宗をチビチビやりながら、ふとプログラム言語を静岡酒に例えたらどうなるだろうかと妄想してみた。
まぁ間違いなくPythonは喜久酔。香りはそこそこに上品な口当たりとすっきりと旨い。旨さがストレートに伝わってきて心地よい。コレは誰が飲んでも普通に旨いって思えるよな。
それに対しperlは臥龍梅かな。あのどっしり感とふくよかな旨みのわりにするりとした後味で奥の深い味わい。奥が深い症候群ってのにやられて酒米の種類で飲み比べしたりしたくなるのも臥龍梅ならでは。まさにTMTOWTDI
で、rubyは國香やな。あのメロンを思わせる爽やかな香りと酸味ののった軽快感があるけど旨みもしっかりとしている。あーでも驚き最小ではないな、美味さに驚く。
燗つけて旨いのが白隠正宗。燗をつけたときの旨みのふくらみがなんともいえなくて深みが増します、燗(括弧)はとっつきにくいけど一度慣れてしまうと当たり前になってしまうSchemeあたりか。
とくにオチはないのだけど、静岡で日本酒を呑むとしたら國香の純米中汲みとか白隠正宗の黒いラベルのやつをぬる燗にするのがオススメです。特に國香の中汲みはやたらと旨かった。
いくつかは市川さんで手に入りますヨ。
12012010 Python
3連休を使ってみんなのPython Webアプリ編を読んでた。
普段はCatalystを使っているけど、ちょっとPythonのフレームワークにも興味あるよってな場合にボトムアップな感じの本を読んでおくと色々理解が深まってよいと思う。
13章のwebアプリサーバーを作るとこが面白かった。ちょっとしたものを作りたい場合にPython内蔵のhttpサーバーをいじれると便利な気が。
ただ、実際に動かしたら、simpleappserver.pyの
self.send_response(resp.status, resp.status_message)
のとこでエラーが出て動かなかった。しょうがないのでcountertest.pyのrespの属性に200とか突っ込んで動かしてみたけど、なんか足りなかったのかな。
12012010 Python
先週末に酒のいわせさんに寄ったときに、yellow閉じちゃうらしいんですねー的ナ話をしたんですが、そういえば、旦那さんのほうのはyahooブログなんでRSS登録してあるけど、奥さんのほうのはrssがないから取りこぼしがあるかもん。これはまったくもっていかがなものかと自分用RSSを用意することにした。
XML::RSSのpython版はないかなーと探してみたのだけど、テンプレート使ったりしてて丁度いいのが見当たらなかったのでElementTreeを選択した。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import urllib2
import sys,re
from BeautifulSoup import BeautifulSoup
from datetime import datetime
import elementtree.ElementTree as ET
month = datetime.now().month
year = datetime.now().year
url = "http://sakeno-iwase.com/diary/diary02/diary.cgi?mode=read&y=%s&m=%s" % (year,month)
tp = re.compile(r'^<b>(.+)</b>$')
dp = re.compile(r'(\d+)月(\d+)日')
html = urllib2.urlopen(url).read()
soup = BeautifulSoup(html)
rss = ET.Element("rss",{"version":"2.0","xmlns:blogChannel":"http://backend.userland.com/blogChannelModule"})
channel = ET.SubElement(rss,"channel")
ET.SubElement(channel,"title").text = soup.head.title.contents[0]
ET.SubElement(channel,"link").text = "http://sakeno-iwase.com/diary/diary02/diary.cgi"
ET.SubElement(channel,"description").text = soup.head.title.contents[0]
for s in reversed(soup('td',{'class':'log'})):
item = ET.SubElement(channel,"item")
content = ''
for t in s.contents:
tm = tp.match(str(t))
dm = dp.search(str(t))
if tm:
ET.SubElement(item,"title").text = tm.group(1).decode('utf8')
elif dm:
cdate = datetime(year,int(dm.group(1)),int(dm.group(2)))
ET.SubElement(item,"pubDate").text = cdate.strftime("%a, %d %b %Y %H:%M:%S +0900")
else:
content = content + str(t)
ET.SubElement(item,"link").text = url
ET.SubElement(item,"guid",{'isPermaLink':'false'}).text = url
ET.SubElement(item,"description").text = content.decode('utf8')
rss = ET.tostring(rss)
f = open("/var/www/html/myrss/iwase.rss","w")
f.write('<?xml version="1.0" encoding="UTF-8"?>\n')
f.write(rss)
f.close()
テーブルの中にタイトルと日付が入っているのでbeautifulsoupで適当に切り出してきて正規表現でマッチさせればよいんだけど、matchとsearchのありがちな問題に気づかず、マッチしねーよー、エンコードが悪いんかなー(怒)といらいらしっぱなしで、結局気づいたときには衰弱してたので直す気力がなかった。
ほんとはエントリごとに長いストリングで一回でタイトルと日付にマッチする正規表現にするだけなのに。
あと、ここ。
rss = ET.tostring(rss)
f = open("/var/www/html/myrss/iwase.rss","w")
f.write('<?xml version="1.0" encoding="UTF-8"?>\n')
f.write(rss)
f.close()
先頭のXML宣言の入れ方がよく分からなかったので、rssをストリングで吐いといて先頭に宣言をつけるという、かなり駄目度が漂うやりかたですな。
ほかには、最初文字化けしまくっててdecodeしないといけないことに気づくのに結構時間がかかった(正規表現のおとぼけほどではないけど)こととか。
といった感じで、Python Developers Camp 2008 冬に向けてpython力を強めていきたいですな。
12012010 Python matplotlib
cronとか別にディスプレイ上に表示しなくていい場合は適当に引数を与えてやることでmatplotlibのバックエンドを切り替えることができる。
some_matplotlib.py -dAgg
別にこんなことしなくてもuseしても同じことが出来るということを最近知った。
import matplotlib
matplotlib.use('Agg')
from pylab import *
ただし、pylab呼び出しよりも先にやっておかないと
RuntimeError: matplotlib.use() must be called *before* pylab
と怒られる。
引数なしで起動したらhelpを表示して終了するのがいいのか、対話モードで起動したらいいのか悩ましいプログラムがあったりする(単に対話モードの処理を書くのが面倒とも)。
システム管理者のための Pythonによると、選択メニューを表示するのにベタ書きしていて、受け取るほうもif-elif-で処理していたのでIO::Promptみたいなモジュールはないのだろうかと探してみたが見つからなかった。
12012010 Turbogears Python
ちょっと気になる。
Professional Python Frameworks: Web 2.0 Programming with Django and Turbogears (Programmer to Programmer)TOC見てみると概要さらっと流しまっせ的な本のようにも見えるが。
というわけで、こっち持ってるから今回は見送るような気がする。
Rapid Web Applications with TurboGears: Using Python to Create Ajax-Powered Sites (Prentice Hall Open Source Software Development Series)12012010 Python
先週はpythonづいていたが、その甲斐あってか色々面白そうなサイトを見つけた
Python MagazineのWorking with IMAP and iCalendarはexchanegeの予定表をゴニョってiCal形式にする話で面白かった。