親子パンづくり教室

娘と参加。

1284971046 1284971052

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

1284971015 1284971041

完成。

1284971023

続いてウィンナーロール

1284971058 1284971035

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

1284971029

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

今日の畑(100920)

久々に娘を連れて。結果的に失敗。

アイスが食べたい、喉が乾いた、蚊に刺されてかゆいとかトイレ行きたいとかうるさくて草むしりが全然進まなかった。

かろうじて収穫のみ。

茄子は最近皮が固くて食べるのに困る。

1284949580 1284949624

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

1284949611 1284949592

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

1284949599 1284949586

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

1284949617

最終的な今日の収穫。

1284949605

今週は休みがちょこちょこあるのでこのタイミングで葉物の種を撒く予定。

メタプログラミングRuby 金曜日

コードを記述するコード

evalとか。pythonだとexecか

ProductName メタプログラミングRuby
Paolo Perrotta
アスキー・メディアワークス / ¥ 2,940 ()
在庫あり。

第二部は「Railsにおけるメタプログラミング」っていう部であまり興味がなかったのでさらっと読み流した。

最後の

メタプログラミングというものなど存在しない。すべてはただのプログラミングじゃ

とこは気に入った。

twitterオフに行ってきた

壱膳屋@沼津

12849366631284936665

カメラとかテクノとかB1

おつです

欲しいなー

ProductName シグマ DP2s COMPACT DIGITAL CAMERA

シグマ / (2010-03-27)
在庫あり。

娘の画力があがっていた

昨日は娘の相手をしていた。

1284936173

パティシエールってコレか。

ProductName 夢色パティシエールマイスイーツクッキング

コナミデジタルエンタテインメント / ¥ 5,250 (2010-05-27)
在庫あり。

メタプログラミングRuby 木曜日

クラス定義

特異クラスとか特異メソッドとか

ProductName メタプログラミングRuby
Paolo Perrotta
アスキー・メディアワークス / ¥ 2,940 ()
在庫あり。

Rubyの話はなんとなくわかったけど、Pythonで考えた場合にいまいち理解が浅い。

DWの連載あとで読もう

メタプログラミングRuby 水曜日

水曜日はブロックの章。

ProductName メタプログラミングRuby
Paolo Perrotta
アスキー・メディアワークス / ¥ 2,940 ()
在庫あり。

まつもと直伝 プログラミングのオキテ 第5回(2)

ブロックとは,関数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()

今日の畑(100913)

ゴーヤ終了。根を抜いて一週間位放っておけば枯れるので処分が楽。あとこぼれ落ちた種を拾って綺麗に洗って来年にむけ取っておく。完熟ゴーヤは大抵虫が入っていてしかも種のまわりの赤いやつが落ちにくいので家に持って帰ってくると台所が汚れると不評。

あと、オクラがほとんど終わってたが、今朝の出勤途中の大渕の畑ではまだ青々と茂っていて花が咲いていたので、育て方が悪かったのか、それとも島オクラなのかわからん。うちの隣の畑のオクラも処分されてたし、あれは島オクラだということにしておこう。

ミョウガ初収穫。店で買うやつよりも辛味が強かったがそんなもんか?それとも早く収穫しすぎた?

1284551823

アサツキの芽もちょこちょこ出てきた。そろそろ何植えるか決めなきゃいけないがこれから畑に行く頻度が下がるので葉物はちょっと躊躇している。

メタプログラミングRuby 火曜日

火曜日はメソッドを動的に定義する。Pythonだと__setattr__と__getattribute__を使えばいいが、魔術っぽさを感じる。Rubyは見た目自然じゃないか。

ProductName メタプログラミングRuby
Paolo Perrotta
アスキー・メディアワークス / ¥ 2,940 ()
在庫あり。

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のオブジェクトモデルに関して読んでいた。

ProductName メタプログラミングRuby
Paolo Perrotta
アスキー・メディアワークス / ¥ 2,940 ()
在庫あり。

rubyにはancestorsっていうメソッドがあって継承関係を調べることができる。

pythonだとこんな感じか?

def ancestors(ins): return [c.__name__ for c in ins.__class__.mro()]

クラスに関してはPython Types and Objectsが分かりやすかった。

あと、pythonでのメタプログラミングはエキスパートPythonで少し触れられている。

ProductName エキスパートPythonプログラミング
Tarek Ziade
アスキー・メディアワークス / ¥ 3,780 ()
在庫あり。