def remote(fn, name=None, types=None):
    """Decorator that adds a remote attribute to a function.

    fn -- function being decorated
    name -- aliased name of the function, used for remote proxies
    types -- a argument type specifier, can be used to ensure
             arguments are of the correct type
    """
    if not name:
        name = fn.__name__
    fn.remote = {'name': name, 'types': types}
    return fn
