<?xml version="1.0" encoding="ISO-8859-1" ?>
<!--
    Licensed to the Apache Software Foundation (ASF) under one
    or more contributor license agreements.  See the NOTICE file
    distributed with this work for additional information
    regarding copyright ownership.  The ASF licenses this file
    to you under the Apache License, Version 2.0 (the
    "License"); you may not use this file except in compliance
    with the License.  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing,
    software distributed under the License is distributed on an
    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    KIND, either express or implied.  See the License for the
    specific language governing permissions and limitations
    under the License.

-->
<document>
    <properties>
        <title>General Users Guide</title>
    </properties>

    <body>
        <section name="Navigation Top">
            <a href="usersguide.html">&lt;&lt;Back to the Users Guide Start</a>
            or
            <a href="using_advanced.html">On to the Advanced Users Guide&gt;&gt;</a>
        </section>


        <section name="General Users Guide">
            <p>
                Using Ext-Scripting once properly setup is straight forward. Usually it comes down to editing, reloading
                on
                the browser editing, reloading the page, .... However if you edit within a running configurations keep
                an
                eye on the console/log output. All compile errors and messages go automatically into the log.
            </p>
            <center>
                <img src="images/development-states.jpg" width="386px" height="337px"/>
            </center>
            <div class="objectAnnotation">Image: Development Lifecycle</div>

            <p>
                The development cycle also can seen in the following video (which is the same as on our
                <a href="index.html">Introduction page</a>)
                and in the following videos in the Users Guide.
            </p>
            <center>
                <object width="640px" height="480px">
                    <param name="movie"
                           value="http://www.youtube.com/v/vUCCTCMjTPE&#38;hl=de_DE&#38;fs=1&#38;"></param>
                    <param name="allowFullScreen" value="true"></param>
                    <param name="allowscriptaccess" value="always"></param>
                    <embed src="http://www.youtube.com/v/vUCCTCMjTPE&#38;hl=de_DE&#38;fs=1&#38;"
                           type="application/x-shockwave-flash" allowscriptaccess="always"
                           allowfullscreen="true" width="640px" height="480px"></embed>
                </object>
            </center>
            <div class="objectAnnotation">Video: Development Lifecycle in Action</div>

            <p>
                As you can see, there is no need for any recompile anymore, no server restart
                everything is done dynamically, and you get instant results.
            </p>
        </section>

        <section name="Navigation Bottom">
            <a href="usersguide.html">&lt;&lt;Back to the Users Guide Start</a>
            or
            <a href="using_advanced.html">On to the Advanced Users Guide&gt;&gt;</a>
        </section>

    </body>
</document>    