add notes on metaprogramming