public function getPublicMethods() {
        $reflect = new ReflectionClass($this);
        $publicMethods = $reflect->getMethods(ReflectionMethod::IS_PUBLIC);
        $publicMethods = array_map(
            function ($m) {
                return $m->name;
            },
            $publicMethods
        );
        $publicMethods = array_filter(
            $publicMethods,
            function ($m) {
                $ignoreMethods = array('__construct', 'main', 'getPublicMethods');
                return !in_array($m, $ignoreMethods);
            }
        );
        return $publicMethods;
    }