more notes on metaprogramming