club logo 2.bmp (30056 bytes)
CCCC


About this Website

Overview
The website is actually a small suite of applications. It consists of the files that make up the site, a Data Generator application, support services for the monthly email, and a newsletter generator. All parts of the system that are usable via a web browser and are routinely tested in Microsoft Internet Explorer, Mozilla FireFox.

Website
The website is a collection of files that are connected via links. Currently the site hosted on homestead.com. The servers are at Homestead Technologies in Menlo Park, CA, and the site address is http://capitalcitycorvette.homestead.com.

The site is written in HTML, Javascript, and Cascading Style Sheets. This breaks down as follows:

  • 24 Permanent HTML pages, plus between 1 and 15 (depending on the time of the year) HTML pages to support the paginating events page. Total code is approximately 3750 permanent lines and between 10 to 200 lines for event flyers.
  • Dynamic features of the site (cascading menus, paginating Driveline and events, the popup windows on the picture page, etc.), require executable code. Approximately 3000 lines of Javascript code make these features work.
  • Display of text (size, alignment, bolding, underlining, etc.) is controlled by Cascading Style Sheet (CSS) code. All of the style classes are contained in a single file that is about 500 lines of definitions. Each event typically has its own set of styles. These are typically 20 - 30 lines of definitions.
  • Each of the images on the site, is supported by a graphics file. These can be .gif, .jpg, or .png files. Currently the site uses 87 permanent images that consume approximately 2.7MB of disk space.
  • The remainder of the site's 150MB capacity is used by event pictures. As of August 2008 there are 180 pictures using approximately 87MB of space. Currently we have 59MB of free space.

Return on Investment (ROI)
Membership as of May 2008 would require sending 87 newletters. Of those, 32 members get the hard copy newsletter, and 55 members receive just the email. For the May 2008 newsletter, production and mailing costs amount to $61.42. Projecting over an entire year, the newletter should cost approximately $737. If all members were to opt for the paper newsletter, these costs would amount to $1733 annually.

Homestead charges $100 to per year to host the site. The savings to the club, due to members opting not to receive the paper newsletter amount to approximately $1000 per year. This gives an ROI for the website of less than 1.2 months.

Hardcopy Cost Breakdown
This breakdown is taken from the May 2008 edition. This edition required 32 newsletters. Each newletter was 12 pages (6 sheets) long. Total copying costs were $37.92.
Copy 12 pages (6 sheets, duplex) & staple $1.185
Label $0.014
2 Sealers $0.041
Stamp $0.42
Total $1.66

Data Generator/Extractor
Article Generator
This utility allows the President's Page (PP) and Secretary's Report (SR) to be formatted for the website. The articles are stored on the website as a Javascript array. The utility reads the text of the article, and performs some preformatting (italic the word Driveline, insert Javascript escape sequences for single and double quotes, place HTML superscripts on ordering suffixes - 1st becomes 1st, etc.)

The user can then add bolding, underlines, and other formatting to the text. Finally the user can automatically generate the ecapsulating Javascript code. The article is now ready to be copied and pasted into the file (articles.js) on the website that holds the PP and SR.

To insure that the PP and SR are processed correctly, the responsible officer should submit the report in any one of the following formats: Word (.doc), Rich Text Format (.rtf, use Wordpad, free with Windows), or plain text (.txt).

Data Generator
The Data Generator is the application that reads the membership list, birthdays and Treasurer's Report and organizes that data such that it can be read by the people that receive the monthly email.

The email generator performs a number of steps.

  1. Load membership list, birthdays, and Treasurer's Report data into the program.
  2. Combine all data into a website storable form.
  3. Generate a 512 bit key, and encrypt the data from the previous step by combining the key and the data using an XOR function.
  4. Save the encrypted data to a file.
  5. Upload the encrypted data to the web server.
  6. Generate an email that contains the encryption key, and send that email to the membership.

Data Extractor
After the monthly updates are made to the website, and the email has been sent to the membership, the Data Extrator is used to pull the data that will make up the content of the printed newsletter. The following data is downloaded: Date of the issue, officer list, next meeting information, President's Page, Secretary's Report, committee chairs, Treasurer's Report, birthdays, calendar, membership list, list of event flyers, and headlines.

The President's Page, Secretary's Report, headlines, and next meeting information are stored as HTML files. All other data is stored in XML files.

The Data Generator/Extractor is a full three-tier intranet style application.

  • The back-end or data layer consists of an Excel spreadsheet. Each worksheet in the Excel file represents a data table. Currently these are Members, Birthdays, Officers (a list of club officers, and comittee chairs), and the Calendar. All data is accessed using Structured Query Language (SQL) via ODBC.
  • The middle tier consists of 32 Java classes that contain approximately 7200 lines of code. Ten of these classes are servlets that support the front end via AJAX operations. All operations listed in the operational steps, above, are performed by these Java classes.
  • The front end or user interface consists of six Java Server Pages (JSP, an HTML file that contains Java code executed by the server before the page is sent to the browser) that are made up of 1250 lines of HTML, and Java code. The JSP pages are supported by 3000 lines of Javascript and CSS code.
  • All of the code runs on an Apache webserver using Tomcat as it's servlet runner.

What happens when you open the monthly email.
If your email client supports HTML email, then you will see a one line email that contains a link to a web page. If your client does not support HTML you will see additional text that explains how to copy and paste an included URL into your web browser.

In either case the encryption key (discussed above) will be sent to the referenced web page, and that web page will send the key back to your browser, where it will be stored as a cookie on your hard drive.

When the Membership List, Birthdays, or Treasurer's Report are viewed in a web browser, the Javascript checks for the presence of the key. If no key is present, or the key is expired, then instructions about how to obtain a key will be displayed to the user. If a valid key is found, then the data will be downloaded, decrypted via the same process used to encrypt it, and displayed on the appropriate page.

Newsletter Generator
This is a Visual Basic (VB) application. The move to VB was necessary because this part of the suite must interact directly with Microsoft Word.

The program is designed with the operational components in a DLL that is separate from the user interface. This will support a possible move to a web based front end in the future. The DLL consists of 26 VB classes totalling approximately 5400 lines of code. The front end consists of two forms (screens), and two classes, and comprises approximately 1000 lines of code. There are four support files that the generators uses: newsletter template, mailer template, mailing label template, and a publication checklist template. Operations are as follows:

  • NewsLetter Generation - The user picks the dataset (previously created by the Data Extractor) for the month of the newsletter. The flyers that are to be included in the newsletter are picked from the list of all events, and the generation is kicked off. The newsletter template is loaded, and the various articles and information are loaded into the appropriate positions. The mailer page is then attached to the end of the newsletter, and the headlines filled in. At this point the newletter is ready for finish editing and printing. The entire process takes about two minutes.
  • Label Generator - This function allows the user to generate a mailing label for each member that has requested a paper newsletter. In order to avoid waste, the user can enter coordinates of the starting label. Example: Row 5, column 2. The program will then fill in address information for each member from the starting location. The labels are immediately ready for printing.
  • Checklist Generator - This generates a production checklist based on the newsletter that was created, and the labels that were generated. The page count determines the postage, and the label count determines the number of copies to print. Complete copier instructions are included as is a list of supplies that will be needed.
  • Finally there is a settings screen so that the generator program knows how to find the properties file used by other parts of the suite.

Recent Projects

  • Cascading menus
  • Reorganized the site structure to improve maintainability of the site
  • Add the table of contents, and pagination to the events page
  • Data Generator modification to add content to the monthly email for those users that cannot receive an active HTML email.
  • Separating content from the page structure to support future projects.
  • Data Extractor
  • Newsletter Generator
  • Website Image Reporter - Allows unused images to be reliably deleted.
  • Add pagination to the Extra (clubNews.htm) page. This will allow these articles to be used with the Newsletter Generator.
  • Modify the Membership Application to be a printable web page instead of a PDF file.
  • Add table generation to the Article Generator.
  • Move the event flyers to a Wiki so that the event sponsors can maintain them.

Future Projects

  • Upgrade the look and feel of the site. Make sure all pages are W3C verified.
  • Picture formatter and loader
  • Move data from a spreadsheet to an Access or My-SQL database.