| 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:
| |||||||
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.

Source: http://www.crummy.com; I don't know the original artist, sorry.
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 |
| F | Aug 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 |
| F | Aug 28 | Lab exercises | ||
| M | Aug 31 | JavaScript basics | Chapter 6 | JavaScript core language |
| W | Sep 2 | JavaScript control statements | Chapters 7 -8 | JavaScript loops and arrays |
| F | Sep 4 | Lab exercises | ||
| M | Sep 7 | Labor Day holiday -- Yippee! | ||
| W | Sep 9 | JavaScript functions and modules | Chapter 9 | Functions and Modules |
| F | Sep 11 | Lab exercises | ||
| M | Sep 14 | Document Object Model (DOM) | Chapter 12 | Use the DOM, Luke! |
| W | Sep 16 | JavaScript event handlers | Chapter 13 | W3C Event Model |
| F | Sep 18 | Lab exercises | ||
| M | Sep 21 | Extensible Markup Language (XML) | 14.1 -- 14.4 | XML Sucks, but use it anyway |
| W | Sep 23 | Defining XML documents with DTD and Schema | 14.5 -- 14.7 | DTD and XML Schema |
| F | Sep 25 | Lab exercises | ||
| M | Sep 28 | Extensible Stylesheet Language (XSL) | Section 14.8 | XSL Translation |
| W | Sep 30 | Asynchronous Java and XML (AJAX) | 15.1 -- 15.5 | AJAX |
| F | Oct 2 | Lab exercises | ||
| M | Oct 5 | Review for Test 1 | Test 1 vocabulary | |
| W | Oct 7 | In-class test 1 -- covers up through Oct 5 | Test 1 Solutions | |
| F | Oct 9 | Lab Exercises | ||
| M | Oct 12 | Using the MySQL database | Chapter 22 | -- |
| W | Oct 14 | PHP | 23.1 -- 23.4 | PHP |
| F | Oct 16 | Lab exercises | ||
| M | Oct 19 | PHP sessions and database apps | 24.5 -- 24.9 | PHP and MySQL |
| W | Oct 21 | JavaScript toolkits and the Google Maps API | 15.6 -- 15.8 | --- |
| Th | Oct 22 | Last day to withdraw with WP | ||
| F | Oct 23 | Lab exercises | ||
| M | Oct 26 | The Model-View-Controller (MVC) design pattern; RESTful Web services | Chapter 24 | Ruby on Rails, part I Create a Web Service in 1 minute |
| W | Oct 28 | The Ruby programming language | Chapter 24 | Ruby programming language |
| F | Oct 23 | Fall Break -- Yippee! | ||
| M | Nov 2 | Drupal | Guest lecture by Leslie Grove | |
| W | Nov 4 | Rails application development | 24.1 -- 24.2 | Rails Core Classes Rails Example Project |
| F | Nov 6 | Lab exercises | ||
| M | Nov 9 | PHP frameworks | Guest lecture by Jason Pancake | Symfony PHP Framework |
| W | Nov 11 | Rails application development | 24.3 -- 24.4 | Rails Example Project |
| F | Nov 13 | Lab exercises | ||
| M | Nov 16 | Review for Test 2 | ||
| W | Nov 18 | In-class exam 2 -- covers through Nov 16 | Test 2 Vocabulary | |
| F | Nov 20 | Lab exercises | ||
| M | Nov 23 | Thanksgiving Holiday-- Yippee! | ||
| W | Nov 25 | |||
| F | Nov 27 | |||
| M | Nov 30 | Rails application development | -- | |
| W | Dec 2 | Unit testing | -- | |
| F | Dec 4 | Lab Exercises | ||
| M | Dec 7 | Security issues | -- | PHP Security issues |
| T | Dec 8 | Lab Exercises | ||
| M | Dec 14 | Final exam, 12:00 | Final Exam Vocabulary | |
Please name your working directories "Assn1," "Assn2", etc. and send an email to me when each assignment is ready.
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.
TBA
Here is a tentative listing of assignments and due dates for Fall 2009:
| Assignment | Topic | Submission due |
|---|---|---|
| Assn 1 | HTML and CSS | Monday, Aug 31 |
| Assn 2 | JavaScript Calendar | Monday, Sep 14 |
| Assn 3 | JavaScript Calendar using DOM | Friday, Sep 25 |
| Assn 4 | JavaScript Drag and Drop | Monday, Oct 12 |
| Assn 5 | Formatting XML with XSLT | Monday, Oct 19 |
| Assn 6 | AJAX | Monday, Oct 26 |
| Assn 7 | PHP-MySQL Assn | Monday, Nov 9 |
| Assn 8 | Ruby on Rails | Friday, Dec 4 |
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!
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)
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:
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 provides robust error handling features that we will use to create something a little closer to "industrial strength" code.
Suppose we are asked to design the URLopener class that extracts character data from a remote URL:
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.
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.
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.
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.
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.
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.
| Sensible forms |
| Apache HTTP server docs | Password protecting a directory | Caching tutorial |
| Server-side includes | More on SSI |
| Unix commands | Changing your PATH in Bourne shell | vi editor reference | More Unix references |
| Javascript kit | Microsoft DHTML DOM | Javascript core language reference |
| Javascript basics, including variable scoping issues | Complete DOM level 0 reference | Danny Goodman's quick DOM level 0 reference |
| www.infimum.dkreference page | Window object reference | Document object reference |
| the Window Object | Javacript Manual, including level 0 DOM | Level 2 CORE DOM from W3C |
| Level 3 CORE DOM from W3C | W3C DOM Event model | Level 1 HTML DOM from W3C |
| Level 2 HTML DOM from W3C | Level 1 DOM for Gecko/IE | Gecko DOM examples |
| EZ Cross-browser event capture | ||
| Web-safe colors and dithering | Design issues for small devices |
| WAP and WML tutorial | WML tasks and events |
| BrowserCam service to verify what your page looks like on various browsers (paid service, but with a free trial reservation) | |
| XML / DTD /Schema validator | Simple XML file with embedded DTD |
| XML Schema primer from W3C | DTD tutorial from W3 Schools |
| XPath tutorial from W3Schools | JSP/XML web application from Sun |
| XSL tutorial from W3 Schools | Using Attribute Value Template (AVT) in XSL |
| Extended XSL in Firefox | How to style RSS with XSLY |
| Xerces XML Parsing API | Step 1 of XML-PHP-MySQL example |
| Step 2 of XML-PHP-MySQL example (needs IE 6) | Step 3 of XML-PHP-MySQL example (needs IE 6) |
| W3C standard for XMLHttpRequest | AJAX demos from script.aculo.us | Dojo Manual |
| Drag and Drop in Javascript | Dojo Tutorials from dojo.jot.com | jQuery widgets |
| Netbeans PHP-AJAX tutorial | Example site with built-in autocomplete on site search | |
| PHP manual, includes tutorial. Highly recommended! | MySql manual -- see chapter 13 for SQL syntax |
| MySQL command line tool | SimpleTest for PHP |
| Ruby Language and Libraries | ||
|---|---|---|
| Programming Ruby: the Pragmatic Programmers' Guide by Dave Thomas | ||
| Ruby-doc.org | Ruby Quick Reference | Ruby Library Reference |
| Ruby Language tutorial | ||
| Rails introductions and tutorials | Rails API | Introduction to REST | Quickie Rails tutorial |
| Extensive Ruby on Rails Tutorial | Lots of tutorials | Rails development on Zion |
| Core Rails components | ||
| ActiveRecord::Base class | ActiveRecord validations | ActionController |
| Request accessor | Routing | |
| Rails Helpers | ||
| FormHelper | FormTagHelper | DateHelper |
| URL helper | Ruby Fixnum class | Gruff for dynamic chart generation |
| Unit testing on Rails | ||
| Unit testing tutorial | Ruby on Rails assertions | Assert this! -- My favorite |
| Java short course on Servlets | Tomcat documentation | Servlet Life Cycle |
| JSP short course | J2EE API, including servlet classes | JSP standard tag libraries |
| JSTL reference from Sun | JSP tutorial from IBM | JSTL Expression Language |
| Spring MVC tutorial from mhimu | Netbeans Spring quick start | Spring tutorials from Sang Shin |
| Video: Java/AJAX RESTful Web Service using NetBeans |
File last modified: Tuesday, 10-Nov-2009 11:13:46 EST