CSCI 5310 / 7310 -- Fall 2009

Class meetings: MW 12:20 -- 1:10 in Forestry Resources 306 , F 12:20 -- 2:05 in Boyd 201
Instructor: Dr. Dan Everett Office: 217 Boyd GSRC
Office hours: 9-11 T; 10-12 MWF
Other times by appointment
Telephone: (706) 542-2749
E-mail: drdan at uga.edu TA: Kenny Bogert
TA Lab hours WF 10-12 in GSRC 301
Text: Internet and World-Wide Web:
How to Program
, 4th ed.
by Deitel & Deitel
Grading:
Lab work 65%
Two in-class exams 20%
Final exam: 15%

Incomplete grades

Incomplete grades will be given in case you have a genuine personal or medical emergency that strikes in the last 1/4 of the class and prevents you from completing the course work. Because time pressure is a fact of student life, no incomplete grades will be given simply to allow you to finish your work.

Humorous adaptation of Chinese revolutionary poster to promote Python
Source: http://www.crummy.com; I don't know the original artist, sorry.

Tentative Schedule

This schedule will be revised as we go along, especially as interesting guest lectures become available. Course attendees are encouraged to provide case studies from their own work.

Day Date Topic Readings PowerPoint
 
M Aug 17 HTTP and the TCP-IP protocol stack Chapter 1; 21.1 -- 21.4 HTTP
W Aug 19 Hypertext Markup Language (HTML) Chapter 4 HTML Part 1
HTML Part 2
FAug 21 Lab exercises
 
M Aug 26 Cascading Stylesheets (CSS) 5.1 -- 5.5 CSS Basics
W Aug 26 CSS position and Visibility properties 5.6 -- 5.12 CSS Position and visibility
FAug 28 Lab exercises
 
MAug 31 JavaScript basics Chapter 6 JavaScript core language
WSep 2 JavaScript control statements Chapters 7 -8 JavaScript loops and arrays
FSep 4 Lab exercises
 
MSep 7 Labor Day holiday -- Yippee!
WSep 9 JavaScript functions and modules Chapter 9 Functions and Modules
FSep 11Lab exercises
 
MSep 14 Document Object Model (DOM) Chapter 12 Use the DOM, Luke!
WSep 16 JavaScript event handlersChapter 13 W3C Event Model
FSep 18 Lab exercises
 
MSep 21 Extensible Markup Language (XML)14.1 -- 14.4 XML Sucks, but use it anyway
WSep 23 Defining XML documents with DTD and Schema 14.5 -- 14.7DTD and XML Schema
FSep 25Lab exercises
 
MSep 28 Extensible Stylesheet Language (XSL)Section 14.8 XSL Translation
W Sep 30 Asynchronous Java and XML (AJAX)15.1 -- 15.5 AJAX
FOct 2Lab exercises
 
MOct 5 Review for Test 1 Test 1 vocabulary
WOct 7 In-class test 1 -- covers up through Oct 5 Test 1 Solutions
FOct 9Lab Exercises
 
MOct 12 Using the MySQL databaseChapter 22 --
WOct 14 PHP23.1 -- 23.4 PHP
FOct 16Lab exercises
 
MOct 19 PHP sessions and database apps 24.5 -- 24.9 PHP and MySQL
WOct 21 JavaScript toolkits and the Google Maps API15.6 -- 15.8 ---
ThOct 22Last day to withdraw with WP
FOct 23Lab exercises
 
MOct 26 The Model-View-Controller (MVC) design pattern;
RESTful Web services
Chapter 24Ruby on Rails, part I
Create a Web Service in 1 minute
WOct 28 The Ruby programming language Chapter 24Ruby programming language
FOct 23 Fall Break -- Yippee!
 
MNov 2 Drupal Guest lecture by Leslie Grove
WNov 4 Rails application development 24.1 -- 24.2Rails Core Classes
Rails Example Project
FNov 6Lab exercises
 
MNov 9 PHP frameworks Guest lecture by Jason Pancake Symfony PHP Framework
WNov 11 Rails application development24.3 -- 24.4 Rails Example Project
FNov 13Lab exercises
 
MNov 16 Review for Test 2
WNov 18In-class exam 2 -- covers through Nov 16 Test 2 Vocabulary
FNov 20Lab exercises
 
MNov 23 Thanksgiving Holiday-- Yippee!
WNov 25
FNov 27
 
MNov 30 Rails application development --
WDec 2Unit testing--
FDec 4Lab Exercises
 
MDec 7 Security issues-- PHP Security issues
TDec 8 Lab Exercises
 
MDec 14 Final exam, 12:00 Final Exam Vocabulary
 

CSCI 5310 Assignments for Fall 2009

Please name your working directories "Assn1," "Assn2", etc. and send an email to me when each assignment is ready.

Course coding guidelines

For the required format of variable names, function spec comments, and loop comments, see the Coding Guidelines for this course.

Grading: A grading rubric will be provided for each assignment. You will note that adherence to the course coding guidelines is often worth a significant amout of credit. From previous semesters, I have observed a significant amount of weeping and gnashing of teeth from students who could not believe that I would actually take off points for not commenting code. Just a heads-up here.

Late assignments: An assignment is considered on time if you submit it before midnight on the due date, or as late as you stay up that night to finish it. (If you're persistently staying up after midnight on the due date, this indicates poor planning.) After that time, ten points will be deducted for each week or fraction of a week the assignment is late. This really is not worth it! My recommendation is to go ahead and submit whatever you have completed on time, and get started on the next one.

TA Lab Hours

TBA

The Assignments

Here is a tentative listing of assignments and due dates for Fall 2009:

AssignmentTopicSubmission due
Assn 1HTML and CSSMonday, Aug 31
Assn 2JavaScript CalendarMonday, Sep 14
Assn 3JavaScript Calendar using DOMFriday, Sep 25
Assn 4JavaScript Drag and DropMonday, Oct 12
Assn 5Formatting XML with XSLTMonday, Oct 19
Assn 6AJAXMonday, Oct 26
Assn 7PHP-MySQL AssnMonday, Nov 9
Assn 8Ruby on RailsFriday, Dec 4

Software development guidelines for Web programming

Requirements analysis

This step defines what the proposed system needs to do. If the new software is to fit into an existing organization, you need a good understanding of how the organization works. In a class context this part is usually not hard, because the instructor tells you what the software should do!

Software design

Each module (program, script, function, etc) of the software system needs a clear specification. The specification should include:

To make the description more specific, refer to the named inputs whenever their values affect the result. For example, note the use of the named input student_tearjerkers in the following:

/**
 *   Returns the number of non-null values in the array student_tearjerkers
 *   @param student_tearjerkers  array of student excuses
 */
     int n_excuses(String[] student_tearjerkers)
data flow for a software module

Inputs are specific sources of data which must be present before the module runs. The following can be inputs:

Note especially that any information which the module can find by itself should not be listed as an input. An example is the current date and time, which the module can find via an appropriate system call.

The spec is considered a contract between the designer and the implementor. A good spec has the following properties:

  1. For any implementation, it is unambiguous whether that implementation satisfies the spec or not;
  2. If the implementation does satisfy the spec, then it correctly does the task it is designed for;
  3. The spec specifies desired results, but not how those results are obtained.

Most of our specs won't satisfy requirement (2) above, because I am not requiring enough detail to nail down the precise action of the module. Ideally, we should strive for this level of precision.

For a few thousand good examples of spec comments, see the Java APIs at http://java.sun.com/api/index.html

Java error handling

Java provides robust error handling features that we will use to create something a little closer to "industrial strength" code.

Example Design Exercise

Suppose we are asked to design the URLopener class that extracts character data from a remote URL:

Writing code without a design?

Sometimes we do write code without a design:

"I think I understand what the client needs, but I'm not sure." A prototype is a quick-and-dirty implementation that illustrates to the customer how the finished product will work or look.

"This looks like a good application of technology X, but I have never used X." In this case we write some exploratory test code to verify that we can get X, it runs on our system, we can learn it, and it does what we thought it can do.

Note that each of these situations we are writing throwaway code. It is unwise to assume that any code written in advance of the design will make it into the final project.

Design first, then implement!

The worst programming disasters typically result from forcing a bad design. In my experience, one hour of design time saves ten hours of debugging time. I am happy to go over your design with you before you start to code.

Coding Guidelines

As you begin to implement your design, please follow the following coding guidelines. These are intended to make your code easier to read and modify, but you will find that they also make it easier to get your code to run correctly in the first place.

Variable and function names

Loops

Every loop control statement should be followed by a short comment explaining what is accomplished on one iteration of the loop:

while (transactionRecord != null) {
//write contents of transactionRecord to a row of the HTML table
  System.out ("<tr><td>"+transactionRecord.clientID+"<td>...");
  ...
}//while

Again, note that we have used the variable name, transactionRecord, to increase specificity.

If you find it difficult to describe what a single iteration does, then STOP! You may have a serious design problem that can result in hours of wasted debugging time.

Formatting and indenting

Indent the body of any function, loop, if statement, or other code block. Put the opening brace on the line after the function declaration or control statement, and line up the closing brace underneath the left-hand character of the function declaration or control statement.

For code blocks more than a few lines long, comment the ending brace with a short description of the block being ended.

See the code block above for examples.

Module size

Break modules and functions up so that each module has a single, well-defined task and is small enough to be easily understood. Normally the source code for each module should fit on a single printed page, but you may stretch this somewhat for modules which contain a lot of embedded HTML and little or no program logic.

Code examples

HTML and CSS

Core JavaScript

JavaScript DOM examples

PHP

Web Programming Lab Exercises

File last modified: Tuesday, 10-Nov-2009 11:13:46 EST

Valid HTML 4.0 Strict