docs: function runRecordRoute(callback) {
    var argv = parseArgs(process.argv, {
      string: 'db_path'
    });
    fs.readFile(path.resolve(argv.db_path), function(err, data) {
      if (err) {
        callback(err);
        return;
      }
      var feature_list = JSON.parse(data);
  
      var num_points = 10;
      var call = client.recordRoute(function(error, stats) {
        if (error) {
          callback(error);
          return;
        }
        console.log('Finished trip with', stats.point_count, 'points');
        console.log('Passed', stats.feature_count, 'features');
        console.log('Travelled', stats.distance, 'meters');
        console.log('It took', stats.elapsed_time, 'seconds');
        callback();
      });
      /**
       * Constructs a function that asynchronously sends the given point and then
       * delays sending its callback
       * @param {number} lat The latitude to send
       * @param {number} lng The longitude to send
       * @return {function(function)} The function that sends the point
       */
      function pointSender(lat, lng) {
        /**
         * Sends the point, then calls the callback after a delay
         * @param {function} callback Called when complete
         */
        return function(callback) {
          console.log('Visiting point ' + lat/COORD_FACTOR + ', ' +
              lng/COORD_FACTOR);
          call.write({
            latitude: lat,
            longitude: lng
          });
          _.delay(callback, _.random(500, 1500));
        };
      }
      var point_senders = [];
      for (var i = 0; i < num_points; i++) {
        var rand_point = feature_list[_.random(0, feature_list.length - 1)];
        point_senders[i] = pointSender(rand_point.location.latitude,
                                       rand_point.location.longitude);
      }
      async.series(point_senders, function() {
        call.end();
      });
    });
  }