docs: def first_of(obj, *attrs):
      """
      :param obj:
      :param attrs: a list of strings
      :return: the first truthy attribute of obj, calling it as a function if necessary.
      """
      for attr in attrs:
          r = resolve(obj, attr)
          if r:
              return r