void Start()
        {
            // create the graph
            Graph.Graph graph = new Graph.Graph();

            // create an operator node
            var operator01 = (NumberOperatorNode)graph.CreateNode <NumberOperatorNode>();

            operator01.X = 200;
            operator01.Y = 40;
            operator01.SetMode(Operator.Add);
            graph.AddNode(operator01);

            // create a display node
            var diplay01 = (NumberDisplayNode)graph.CreateNode <NumberDisplayNode>();

            diplay01.X = 330;
            diplay01.Y = 80;
            graph.AddNode(diplay01);

            // link the nodes
            graph.Link(
                (InputSocket)diplay01.GetSocket(typeof(INumberConnection), typeof(InputSocket), 0),
                (OutputSocket)operator01.GetSocket(typeof(INumberConnection), typeof(OutputSocket), 0));

            // cerate a perlin noise node
            var perlinNoise = graph.CreateNode <UnityPerlinNoiseNode>();

            perlinNoise.X = 80;
            perlinNoise.Y = 250;
            graph.AddNode(perlinNoise);

            // create a display map node
            var displayMap = graph.CreateNode <DisplayMapNode>();

            displayMap.X = 300;
            displayMap.Y = 280;
            graph.AddNode(displayMap);

            // link the nodes
            graph.Link(
                (InputSocket)displayMap.GetSocket(typeof(INumberConnection), typeof(InputSocket), 0),
                (OutputSocket)perlinNoise.GetSocket(typeof(INumberConnection), typeof(OutputSocket), 0));


            // to test the serialization...

            // create a json out of the graph
            var serializedJSON = graph.ToJson();
            // dezeiralize the json back to a graph
            var deserializedGraph = Graph.Graph.FromJson(serializedJSON);

            // add the graph to the launcher to see it in the editor.
            Launcher.Instance.AddGraph(deserializedGraph);
        }