createMenu() {
    // Fetch channels
    // return a Promise
    return douban.fm.channels(list => {
      // Fetch configs, Show user's infomation
      return fs.readJSONAsync(this.path.profile)
        .then(user => {
          var vaildAccount = user && user.account && user.account.user_name
          var account = vaildAccount ? user.account : null

          // Init menu
          this.menu = new termList()
          this.menu.header(template.logo(account))
          this.menu.adds(
            [sdk.mhz.localMhz].concat(!err ? [sdk.mhz.privateMhz].concat(list) : [])
          )

          // Bind keypress events
          this.menu.on('keypress', (key, index) => {
            if (!shorthands[key.name]) 
              return false;

            return this[shorthands[key.name]](this.menu.items[index], account)
          })

          this.menu.on('empty', () => {
            this.menu.stop()
          })

          // Check last played channel,
          // If it existed, play this channel instantly.
          if (user && user.lastChannel) {
            this.play(user.lastChannel, account)
            this.menu.start(user.lastChannel.index)
            return false
          }

          // Start menu at line 2,
          // Which below the logo.
          this.menu.start(1)
        })
    }).catch(err => {
      console.log(errors.turn_to_local_mode)
    })
  }
[Create command line interface menu]
[Using term-list-enhanced module]
@param {Function} callback [The callback function when all set done]