docs: public static void main(String[] args) throws Exception {
      Builder builder = Builder.newBuilder();
  
      /**
       * The processing graph consists of a supplier streamlet that emits
       * random integers between 1 and 100. From there, a series of transformers
       * is applied. At the end of the graph, the original value is ultimately
       * unchanged.
       */
      builder.newSource(() -> ThreadLocalRandom.current().nextInt(100))
          .transform(new DoNothingTransformer<>())
          .transform(new IncrementTransformer(10))
          .transform(new IncrementTransformer(-7))
          .transform(new DoNothingTransformer<>())
          .transform(new IncrementTransformer(-3))
          .log();
  
      Config config = Config.defaultConfig();
  
      // Fetches the topology name from the first command-line argument
      String topologyName = StreamletUtils.getTopologyName(args);
  
      // Finally, the processing graph and configuration are passed to the Runner, which converts
      // the graph into a Heron topology that can be run in a Heron cluster.
      new Runner().run(topologyName, config, builder);
    }