<?xml version="1.0"?>
<!-- ?xml-stylesheet type="text/xsl" href="TrainingCatalog.xsl"? -->
<!DOCTYPE course SYSTEM "TrainingCatalog.dtd"
  [ <!ENTITY obj SYSTEM "perlweb-obj"> ]
>
<course title="CGI Scripting with Perl">
  <keywords>
    <keyword>Perl training</keyword>
    <keyword>CGI training</keyword>
    <keyword>web site construction</keyword>
    <keyword>webmaster</keyword>
    <keyword>programmer</keyword>
    <keyword>Perl</keyword>
    <keyword>website</keyword>
    <keyword>web server</keyword>
    <keyword>server scripting</keyword>
    <keyword>dynamic web pages</keyword>
  </keywords>
  <subtitle>Accelerated Technical Training for Webmasters and Site Programmers</subtitle>
  <courseware>
    <url>http://www.keller.com/perlweb</url>
  </courseware>
  <duration units="days">1</duration>
  <format>
    <description>Emphasis on practical skills</description>
    <description>Hands-on</description>
  </format>
  <audience>
    <description>This course is for Perl programmers
      who wish to construct interactive web sites.</description>
  </audience>
  <prerequisites minimum="2">
    <prerequisite>
      Perl -- You know how to write Perl scripts.
    </prerequisite>
    <prerequisite>
      Unix or NT -- You can navigate the filesystem and edit text.
    </prerequisite>
    <prerequisite>
      HTML -- You have written web pages.
    </prerequisite>
  </prerequisites>
  <overview>
    <p>
    Common Gateway Interface (CGI) is the technical term for
    the the mechanism by means of which programs are invoked
    on web servers in response to mouse clicks on hyperlinks
    by users of browsers.
    CGI programs perform such tasks as database updates,
    product ordering, survey form completion, and so on.
    They also generate new web pages -- termed dynamic web pages
    because these pages are created on the fly by the CGI programs.
    From the user's perspective, such pages are indistinguishable from
    hand-written ("static") ones.
    But for the owners and builders of web sites, CGI programs
    open vast new possibilities.
    </p>
    <p>
    This is a technical course for people with Perl programming
    experience who wish to apply it to the construction of web sites.
    </p>
    <p>
    The web as a platform upon which to build and deploy applications
    has many advantages:
    <ul>
      <li>It is machine-independent; your software will run identically on
        PCs, Macintoshes, and workstations.</li>
      <li>It is timely; data and software updates are immediately available.</li>
      <li>It is easy to deploy; there is no software to distribute, since
        your applications run on a server and the client software is standard.</li>
      <li>It is geographically dispersed; physical proximity is irrelevant
        since the web is indeed World Wide.</li>
      <li>It is easy for users to learn because browsers are intuitive
        and already familiar to many.</li>
    </ul>
    This course provides the techniques that enable you to gain
    all these benefits.
    </p>
  </overview>
  <objectives>
    &obj;
    <!-- x xmlns:xinclude="http://www.w3.org/1999/XML/xinclude" -->
      <!-- xinclude:include href="perlweb-obj"/ -->
    <!-- /x -->
  </objectives>
  <references>
    <reference>
      Lincoln Stein, How to Set Up and Maintain a Web Site,
      Addison Wesley, 1997. $40.
    </reference>
  </references>
  <method>
    <description>
      A great deal of information is covered in a short amount of time.
      The format is highly compressed, with a focus on hands-on exercises
      -- the best way to acquire new skills, learning by doing -- that
      are carefully designed to rehearse the specific techniques of
      interest without extraneous effort.
      Source code files are provided to save time typing.
      Once you get your solution working, you know you have learned
      -- and proven you've learned! -- each of the essential techniques
      for programming web-based applications in Perl.
    </description>
    <description>
      In its method, the course's emphasis is on the practical,
      with the majority of the classroom time devoted to hands-on
      activity.  You set your own pace, with the instructor acting
      mainly as a facilitator.  Historical and theoretical material
      is kept to a minimum.  The main classroom activity is the
      step-by-step construction of a web-based work order and
      invoicing system for a hypothetical business.
    </description>
    <description>
      Each student receives a copy of the sample programs
      discussed in the course.
    </description>
  </method>
  <contents>
    <chapter title="Housekeeping">
      <topic>Review of Prerequisites</topic>
      <topic>Course Objectives</topic>
      <topic>Related Topics</topic>
      <topic>Resources for Perl and CGI Programmers (lots!)</topic>
    </chapter>
    <chapter title="Review of the Basics of Perl"/>
    <chapter title="The Client, the Server, and the Environment">
      <topic>Terminology and Mechanisms of the Web</topic>
      <topic>Components of the Web: Clients and Servers</topic>
      <topic>The HTTP Protocol that Connects Them</topic>
      <topic>Programming Features of the
        Common Gateway Interface (CGI)</topic>
      <topic>Environment Variables</topic>
      <topic>Request Types</topic>
      <topic>HTTP Headers</topic>
      <topic>Authentication</topic>
      <topic>Lab: a greeting page with a redirect to another
        URL (Uniform Resource Locator) determined according to
        the identity of the remote user</topic>
    </chapter>
    <chapter title="Techniques for Debugging CGI Scripts">
      <topic>Redirecting Standard Error Output</topic>
      <topic>Watching Log Files</topic>
      <topic>Locally Simulating the Remote Client Side</topic>
      <topic>Using Perl's Command-Line Switches</topic>
      <topic>Lab: samples and practice for each method</topic>
    </chapter>
    <chapter title="Processing Form Data">
      <topic>Use the CGI.pm Object-Oriented Perl Module</topic>
      <topic>Lock the Data Files to Prevent Multi-User Update Anomalies</topic>
      <topic>Handle File Uploads</topic>
      <topic>Lab: add a field to a form, validate the datum
        entered there, append it to a file</topic>
    </chapter>
    <chapter title="Dynamic Web Pages">
      <topic>Write Programs that Generated Web Pages</topic>
      <topic>Maintain State Information</topic>
      <topic>CGI.pm HTML Shortcuts</topic>
      <topic>Lab: write a Perl script to dynamically
        generate the form from the previous chapter
        so that it is one Perl script instead
        of a Perl script and an HTML form</topic>
    </chapter>
    <chapter title="Non-Parsed Headers">
      <topic>Processing Data in Real Time</topic>
      <topic>Lab: a progress indicator in a frame</topic>
    </chapter>
    <chapter title="Interfacing to External Applications">
      <topic>File Locking</topic>
      <topic>Sending Mail with Attachments</topic>
      <topic>Accessing Databases</topic>
      <topic>Lab: retrieve service records, e-mail reminder letters</topic>
    </chapter>
    <chapter title="Conclusion">
      <topic>Review</topic>
      <topic>Summary</topic>
      <topic>Archive File of Source Code</topic>
    </chapter>
  </contents>
  <setup>
    <requirement>classroom</requirement>
    <requirement>a PC or workstation for each student</requirement>
    <requirement>a PC or workstation for the instructor</requirement>
    <requirement>NT or Unix</requirement>
    <requirement>a data projector for the instructor's computer screen</requirement>
    <requirement>connection to the internet</requirement>
    <requirement>a Perl interpreter and a webserver enabled for CGI</requirement>
    <url>http://www.keller.com/perlweb/setup.html</url>
  </setup>
  <site>
    The course can be taught in your classroom,
    anywhere in the world.
  </site>
  <travel>
    Travel outside the San Francisco Bay Area requires
    reimbursement of the instructor's travel expense.
  </travel>
</course>

