2008年12月7日日曜日

Guido's new method definition idea

http://groups.google.com/group/comp.lang.python/browse_thread/thread/5457b8649040f7ea

最近のホットな話題

class C:
def self.method( arg ):
self.value = arg
return self.value

というシンタックスシュガーを3.1で入れようかっていう話題。


self.method = lambda arg: foo(arg)

に似てていいじゃんってな意見もある。
ただ、そこから、Rubyチックにしろとかみんながすき放題言いまくって大盛況。
とりあえず、現時点ではまとめ人おつ。

2008年12月4日木曜日

Pythonの配列操作

http://d.hatena.ne.jp/tachikawa844/20081204/1228381610

joinについては
",".join(str(s) for s in score)

",".join(map(lambda s:str(s), score))
が主流なはず

あと、
spliceについて
removed = array[1:5]
array[1:5] = xyz
とすれば実現できるはずだけど、1:5の指定を一度にしたいなー。
よく考えたら配列の切り出しと改変を両方行っているわけか。
こんな風に使ったことがないけど、どういうときに便利なんだろうか。
spliceって変な関数だな。
あ、popと一緒か。
でも代入だしなー。

tailfでエンコード

tailf log|iconv -feucjp -tutf8

ではバッファリングされて出力されない。

nkfがあれば
tailf log|nkf -wu

perlがあれば
tailf log|perl -MEncode -pe'$_=decode('eucjp',$_)'

シェルでがんばるなら
tailf log|while read LINE;do echo $LINE|iconv -feucjp -tutf8;done


iconvにnobufオプションがほしい

2008年11月21日金曜日

python urllib.urlretrieve で進捗表示しつつダウンロードのメモ


import sys
import urllib

def _reporthook(blocknum, bs, size):
sys.stdout.write("%4d%%\r"%(blocknum*bs*100/size))
sys.stdout.flush()

if __name__ == "__main__":
uri = sys.argv[1]
dest = uri[uri.rfind('/')+1:]
urllib.urlretrieve(uri, dest, _reporthook)
print

参考: http://subtech.g.hatena.ne.jp/cho45/20081120/1227178806
http://blog.livedoor.jp/dankogai/archives/51141631.html
printfやputsはflushいらんの?
pythonはprintでもダメだった
よくわからない

2008年7月30日水曜日

傷んだ野菜は大嫌い

http://mono.kmc.gr.jp/~yhara/d/?date=20080730#p01
天才発見。
帰ったら即、携帯メール=>Gmail=>iCalのPyhabuプラグインを書く。
収納場所も書けるかも。
いろいろ応用範囲が広そうだな。
http://codespeak.net/icalendar/
このライブラリは使えるかな?

RTMみたいなあいまいな日付解析ライブラリはないかな。
数値のみ入力可能にして
2桁以下 => 当日以降でもっとも近いn日
4桁以下 => mmdd
5桁 => Ymmddで、Y年後のmmdd
6桁以上 => YYmmdd
が妥当かな。
5桁を入れるか悩ましい。

これを機会にレシート打ち込んで家計簿作るかな。
やっぱ面倒だから無理

2008年7月8日火曜日

Djangoとメールサーバ

簡易なSMTPDを作った。
appname/management/commands/smtpd.py

class Command(BaseCommand):
def handle(self, *args, **options):
daemon_kwargs = {}
daemon_kwargs['out_log'] = options.get('outlog', 'smtp_out.log')
daemon_kwargs['err_log'] = options.get('errlog', 'smtp_err.log')
from django.utils.daemonize import become_daemon
become_daemon(**daemon_kwargs)

foo = MySMTPServer((settings.EMAIL_HOST, settings.EMAIL_PORT),
(settings.PARENT_SMTP_HOST, settings.PARENT_SMTP_PORT))
try:
asyncore.loop()
except KeyboardInterrupt:
pass
class MySMTPServer(smtpd.SMTPServer):
def process_message(self, peer, mailfrom, rcpttos, data):
""" なんか素敵なことをする """


たった1行でDaemon化できるのが素敵。

2008年7月5日土曜日

数字キーと記号を入れ替える

キーボードカスタマイズの魅力
数字と記号を入れ替えるとは。
思いついたことはあったけど、やっている人がいるとは思わなかった。
窓使いの憂鬱で設定してみたが、使いづらい。
一週間使ってみる。

# SandS SpaceをShiftとして使う。押しっぱなしで取り消し
mod shift += !!space
key R-*Space = &Ignore

# 数字を記号と入れ替え
key _1 = $EXCLAMATION_MARK
key _2 = $QUOTATION_MARK
key _3 = $NUMBER_SIGN
key _4 = $DOLLAR_SIGN
key _5 = $PERCENT_SIGN
key _6 = $AMPERSAND
key _7 = $APOSTROPHE
key _8 = $LEFT_PARENTHESIS
key _9 = $RIGHT_PARENTHESIS
key _0 = BackSpace
key S-*_1 = _1
key S-*_2 = _2
key S-*_3 = _3
key S-*_4 = _4
key S-*_5 = _5
key S-*_6 = _6
key S-*_7 = _7
key S-*_8 = _8
key S-*_9 = _9
key S-*_0 = _0

# via t.masui
key semicolon = Enter
# 右下の\をセミコロンに
key BackSlash = semicolon