娘と参加。

マックロクロスケ作成中。

完成。

続いてウィンナーロール

マヨネーズとパン粉をまぶしてオーブンに

何かを作るのは楽しい。もう少し料理をする方向にライフスタイルをシフトさせようかなぁ。
娘と参加。

マックロクロスケ作成中。

完成。

続いてウィンナーロール

マヨネーズとパン粉をまぶしてオーブンに

何かを作るのは楽しい。もう少し料理をする方向にライフスタイルをシフトさせようかなぁ。
20092010 家庭菜園
久々に娘を連れて。結果的に失敗。
アイスが食べたい、喉が乾いた、蚊に刺されてかゆいとかトイレ行きたいとかうるさくて草むしりが全然進まなかった。
かろうじて収穫のみ。
茄子は最近皮が固くて食べるのに困る。

ミョウガはちゃんと採れ始めた。ちょうど鰹を買ってあったらしいのでワシャワシャかけて食べる。夕方イケタニさんで日本酒でも買ってくるかな。

甘長美人と韓国唐辛子はコンスタントに収穫できるので楽だけど、そろそろ終盤っぽいな。

アサツキも芽が出てきた。

最終的な今日の収穫。

今週は休みがちょこちょこあるのでこのタイミングで葉物の種を撒く予定。
コードを記述するコード
evalとか。pythonだとexecか
第二部は「Railsにおけるメタプログラミング」っていう部であまり興味がなかったのでさらっと読み流した。
最後の
メタプログラミングというものなど存在しない。すべてはただのプログラミングじゃ
とこは気に入った。
20092010 life
20092010 life
クラス定義
特異クラスとか特異メソッドとか
Rubyの話はなんとなくわかったけど、Pythonで考えた場合にいまいち理解が浅い。
DWの連載あとで読もう
水曜日はブロックの章。
ブロックとは,関数1つを採る高階関数を文法的に特別扱いしただけ,とみなすこともできます。
ほうほう、ということはpythonの場合はラムダ式とればいいのか。
章の終りの方の例がDSLで面白そうなのでやってみる。
def event(name,func):
if func():
print "ALERT: %s" % func.__name__()
event("イベントが発生すること", lambda: True)
event("イベントが発生しないこと", lambda: False)
とやってみたが、ラムダ式は複雑なのが書けないのでコードロック渡したい。
デコレータ使えばいいかということでこんな感じにしてみたが_eventで終わる関数を評価するときに、文字列とって関数適用するところで悩んだ。getattrはまぁわかるとしてimport __main__しないと
Traceback (most recent call last):
File "metr3.py", line 24, in <module>
func = getattr(__main__, func_name)
NameError: name '__main__' is not defined
って出てくる理由がわからん。
def event(eventname):
def decfunc(func):
def func_():
if func():
print "ALERT: %s" % eventname
return func_
return decfunc
@event("イベント発生")
def test1_event(): return True
@event("イベントが発生しないこと")
def test2_event(): return False
if __name__ == '__main__':
import __main__
for func_name in [elem for elem in dir() if elem.endswith("_event")]:
func = getattr(__main__, func_name)
func()
15092010 家庭菜園
ゴーヤ終了。根を抜いて一週間位放っておけば枯れるので処分が楽。あとこぼれ落ちた種を拾って綺麗に洗って来年にむけ取っておく。完熟ゴーヤは大抵虫が入っていてしかも種のまわりの赤いやつが落ちにくいので家に持って帰ってくると台所が汚れると不評。
あと、オクラがほとんど終わってたが、今朝の出勤途中の大渕の畑ではまだ青々と茂っていて花が咲いていたので、育て方が悪かったのか、それとも島オクラなのかわからん。うちの隣の畑のオクラも処分されてたし、あれは島オクラだということにしておこう。
ミョウガ初収穫。店で買うやつよりも辛味が強かったがそんなもんか?それとも早く収穫しすぎた?

アサツキの芽もちょこちょこ出てきた。そろそろ何植えるか決めなきゃいけないがこれから畑に行く頻度が下がるので葉物はちょっと躊躇している。
火曜日はメソッドを動的に定義する。Pythonだと__setattr__と__getattribute__を使えばいいが、魔術っぽさを感じる。Rubyは見た目自然じゃないか。
import re
class Ds(object):
def get_cpu_info(self,i):
return 2.16
def get_cpu_price(self,i):
return 150
def get_mouse_info(self,i):
return "dual optical"
def get_mouse_price(self,i):
return 40
# METAPROGRAMMING RUBY
# class computer
# def initialize(computer_id, data_source)
# @id = computer_id
# @data_source = data_source
# data_source.methods.grep(/^get_(.*)_info$/) { Computer.define_compornent $1}
# end
#
# def self.define_component(name)
# define_method(name){
# info = data_source.send "get_#{name}_info", @id
# price = data_source.send "get_#{name}_price", @id
# result = "#{name.capitalize}: #{info} ($#{price})"
# return "* #{result}" if price >= 100
# result
# }
# end
# end
class Computer(object):
def __init__(self,computer_id, data_source):
self.data_source = data_source
self.id = id
for name in [re.search("^get_(.*)_info$",m).group(1) for m in
dir(data_source) if re.search("^get_(.*)_info$",m)]:
self.define_compornent(name)
def define_compornent(self, name):
def define_method():
info = self.data_source.__getattribute__("get_%s_info"%name)(self.id)
price = self.data_source.__getattribute__("get_%s_price"%name)(self.id)
result = "%s: %s ($%s)" % (name.capitalize(), info, price)
if price >= 100:
return "* %s" % result
self.__setattr__(name,define_method)
if __name__ == '__main__':
ds = Ds()
com = Computer(12,ds)
print com.mouse()
print com.cpu()
後半はmethod_missingを使う例だった。perlだとAUTOLOADかとおもってググッてみたら。一覧になってた。
ところで、__getattribute__と__getattr__の違いがわからんという新たな発見をした。
メタプログラミングRubyを読み始めた。第一部は月曜から金曜にわかれていて、、、、、 まぁ毎日読めってことですな。
というわけで、機能はRubyのオブジェクトモデルに関して読んでいた。
rubyにはancestorsっていうメソッドがあって継承関係を調べることができる。
pythonだとこんな感じか?
def ancestors(ins): return [c.__name__ for c in ins.__class__.mro()]
クラスに関してはPython Types and Objectsが分かりやすかった。
あと、pythonでのメタプログラミングはエキスパートPythonで少し触れられている。