The pocket guide to metaprogramming in .NET