def run(self) -> None:
        self.sic.start()
        self.sic.set_language('en-US')

        action_runner = ActionRunner(self.sic)
        # This might give an SSL-exception on Pepper's tablet the first time; just click OK on the tablet in that case.
        action_runner.run_waiting_action(
            'tablet_open', additional_callback=self.tablet_open_callback)
        sleep(1)  # FIXME: Pepper needs some extra time for some reason

        text = self.get_text('Hello, world!')
        button = self.get_button('Done')
        html = self.get_header() + self.get_body(text +
                                                 button) + self.get_footer()
        action_runner.run_action('tablet_show', html)
    def run(self):
        self.sic.start()
        self.sic.set_language('en-US')

        #################
        # Action        #
        #################
        # Create an action that can be executed when needed and reused
        hello_action = Action(self.sic.say, 'Hello, Action!', callback=self.hello_action_callback,
                              lock=self.hello_action_lock)
        hello_action.perform().wait()  # perform() returns the lock, so you can immediately call wait() on it.
        hello_action.perform().wait()  # you can reuse an action.

        #################
        # Action Factory#
        #################
        # Use the ActionFactory to build actions. You can build actions with a lock build inside of them by
        # using build_waiting_action(). It saves you from keeping track of your locks.
        # build_action() and build_waiting_action() use the name of SIC method instead of an explicit reference to it
        # as input. For example build_action('say', ...) instead of build_action(self.sic.say, ...).
        action_factory = ActionFactory(self.sic)
        hello_action_factory = action_factory.build_waiting_action('say', 'Hello, Action Factory!',
                                                                   additional_callback=self.hello_action_factory_callback)
        hello_action_factory.perform().wait()

        #################
        # Action Runner #
        #################
        # With an ActionRunner you can run regular and waiting actions right away or load them to run them in parallel.
        # When running the loaded actions, it will wait automatically for all loaded waiting actions to finish.
        action_runner = ActionRunner(self.sic)
        action_runner.run_waiting_action('say', 'Hello, Action Runner!',
                                         additional_callback=self.hello_action_runner_callback)
        # run_waiting_action('say', ...) waits to finish talking before continuing

        # The following actions will run in parallel.
        #action_runner.load_waiting_action('wake_up')
        action_runner.load_waiting_action('set_eye_color', 'green')
        action_runner.load_waiting_action('say', 'I am standing up now')
        action_runner.run_loaded_actions()  # If you want to keep an action sequence for reuse, add False as input.
        # run_loaded_actions() will wait automatically before all loaded waiting actions (not regular actions) to finish
        # before continuing

        action_runner.run_action('say', 'I will start sitting down as I say this. Because I am not a waiting action')
        action_runner.run_action('set_eye_color', 'white')
        action_runner.run_waiting_action('rest')

        self.sic.stop()