docs: public static void main(String[] args) throws Exception {
      Builder builder = Builder.newBuilder();
  
      Streamlet<Integer> zeroes = builder.newSource(() -> 0);
  
      builder.newSource(() -> ThreadLocalRandom.current().nextInt(1, 11))
          .setName("random-ints")
          .map(i -> i + 1)
          .setName("add-one")
          .union(zeroes)
          .setName("unify-streams")
          .filter(i -> i != 2)
          .setName("remove-twos")
          .log();
  
      Config config = Config.newBuilder()
          .setNumContainers(NUM_CONTAINERS)
          .setPerContainerRamInGigabytes(GIGABYTES_OF_RAM)
          .setPerContainerCpu(CPU)
          .build();
  
      // 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);
    }