The Official Web Site of James R. Cummins III


The site is at it's best when viewed at 1024 x 768 or higher screen resolution using Internet Explorer 6.0 with JavaScript enabled.

It has been tested with Internet Explorer 5.5, Netscape 6.2 and 7.0, and Opera 7.01. Each of these browser versions will display the site well, with some minor differences. I have chosen not to use the IE 5.5 parsing bug to fix the box bug that causes the dotted borders to be off by a pixel. NS has some issues executing the JavaScript that repositions the nav box. Opera has no support for getting the background color of the top heading to use for the nav box roll over.

While I have not excluded IE 5.0 from viewing the site, I have to believe that it is not a pleasant experience. I no longer have that browser on any of my systems and do not intend to try to support it. There is no support for either NS4 or IE4, other than to redirect to a page that states that there is no support.

I recently added specific style sheet support for screen resolutions below 1024 x 768. You will not be able to change the font size if you are viewing the site at 800 x 600, for example.


If you have JavaScript disabled, this page will still display, but the navbox in the right column will not reposition itself when the page is scrolled. The links will still work, you just won't get any event processing.


This layout will be used throughout for a while anyway: left column for commentary, center column for main content, right column for navigation. Everything on this page is laid out using CSS positioning techniques. No tables or frames. My continuing goal is to separate the business logic, layout and presentation, and content as much as possible. A particular focus is to keep the content as generic and easy to maintain and update as possible. Even though I do most of my web development in "code-view," I still find that I put updates on my pages less frequently when it requires dancing around all the code to get to the content.

More than theory

My current web development project puts these principles into practice. The business logic is contained in the PHP pages, layout and presentation is determined by CSS, and the content is organized into directories of text files with minimal HTML mark-up. The content, including images, is out-of-band, i.e. not directly accessible by the web browser. So far, it is the least intimidating way that I have come up with for ongoing web updates and maintenance. You don't have to fire up Dreamweaver or Front Page to make a change to your web site. A quick edit in notepad, ftp the file and you are done. Have some new info? Create a new text file, ftp it to the appropriate directory and it is part of your site. For people who want a web site, but don't want to become web developers, this approach is ideal.


Someone commented that there are no graphics on the site and that is no longer quite true. With the addition of the "JC" background image the site is not completely text based. The photo gallery by definition displays images, but only because that is its basic function. I may try to integrate some graphics into the site if they seem to add meaningful functionality (I'm open to suggestions). I personally do not like sites that display graphic images simply for the sake of displaying them. Eye candy may be nice to look at, but I find that many times, flashing, blinking, moving images distract from the content. Unless there is no real content, in which case I have to wonder why anyone bothered.
What I'm Working On

The site is highly portable right now. All the site specific configuration is kept in a single include file. And while this is running on a Windows 2000 platform, it could just as easily be moved to a Linux box with no modifications.

The content files are retrieved in the order the file system returns them - alpha on the systems I've tested. A configuration file is used for each content directory to reverse order if appropriate, as in the weblog or this page where you want the most recent files to appear first.

The query string is examined to avoid any code injection. 404 errors are redirected to domain appropriate pages. Any form fields are examined and converted to "safe" HTML equivalents. The amount of data that can be posted is limited by server-side processing.

The following sections are features that I've implemented, with the most recent at the top of the list. In case you were wondering, I personally designed and coded everything on this site, with the exception of one section of JavaScript. That's not to say I haven't used techniques out of the PHP documentation, or taken guidance from resources on the net to work through a problem. Just that I didn't copy and paste other people's code to make mine work.
Personal pages

Also related to the removal of the site, I have moved some of my personal pages to this site, but they are only available for registered users.
Professional Experience

As the first step toward consolidating the information on my site with this one, I have added my work experience to the Professional pages.
User profile update

You can now update your user information, including your e-mail address, password and first and last names. A link will appear in the nav box when you are logged in.
Confirmation E-mail

I had a case where someone didn't receive the confirmation e-mail after registering, so I added the ability to request that it be sent again if you tried to login with valid unconfirmed credentials.
Column Swap on About Page

As I was adding items to this page, I realized that the left column was getting very long compared to the center column. So I swapped them. It should make the updates easier to read and involve a lot less scrolling.
Frame Breaking

Since I don't use hotmail, I didn't realize that it does this: when you click on a link in a hotmail e-mail message, it opens the link in a frame within hotmail. Yuch! Since my site is definitely not intended to be viewed in a frame, I put in a line of JavaScript that breaks it out. It should also work for any search engines, askJeeves, for example, that display results in a frame. Please let me know if you found yourself "framed" and didn't break out of it.
Support for Screen Resolutions Below 1024 x 768

My personal feeling is that there is little excuse to run your system at screen resolutions below 1024 x 768. The experience of the Internet is greatly diminished at anything less than this. But that is simply my opinion and I know first-hand of many people who are still using 800 x 600 as their default screen resolution.

The site was breaking at this resolution due to the width of the home page image and the two columns. I have implemented a JavaScript check to determine if the screen resolution width is below 1024 and to use an x-small font style sheet that also narrows the left and right columns. It does mean that your selections for font size on the Site appearance page will be overridden at this resolution.
Navigation Re-organization

The nav box was getting cluttered with too much stuff for each page, so I changed the organization fairly significantly. I added a Professional page with information about my professional background and the links to my resume. A new Personal page has the links to the photo albums and web log. The links for server information and demo login are now only on this page. The change site appearance link appears here and in a few other places where it seemed appropriate. I will put a site map page in place sometime soon.

The change was really precipitated by a problem experienced when viewing the site at 800 x 600 resolution and attempting to login. The login box was off the bottom of the page and would scroll away from you when you tried to scroll down and click into it.
Photo Album Access

The photo albums were previously protected with a switch in the configuration file for each directory. If you didn't know how to activate the switch, the album wouldn't display in the list, so you couldn't see it.

I don't like security by obscurity and it was always my intent to protect the private albums by authenticating users and display the albums based on user role. That functionality is now complete. If you were using the special URL to view the albums in the past, please note that method will no longer work. You will need to register and I will upgrade your account to be able to view the private albums.

The Self-registration feature is fully functional. After submitting a minimal amount of information, a confirmation e-mail is sent to you with a code that activates your account. The ability to change your registration information is coming soon, including the ability to "opt-out" by removing your account completely.
User Login Updates

I added a lot of features to the user authentication module: a login log, the ability to have your password sent to you by e-mail, and a "kick" function to interfere with excessive user ID/password guessing. However, you may decide that getting kicked is not so awful, since you will be redirected to a random selection of the (currently) 44 sites in the kick list. The list started as a compilation of the most annoying sites I could find, but I couldn't help but include some that I like. I am willing to add other sites based their odd-ball or annoying appeal. So go ahead. Enter a bunch of bad email addresses and passwords and see where you end up.
New Home Page

This page used to be the home page in lieu of any other idea. So I decided that the home page should be more of a promotional piece. Please feel free to send commentary or log your opinion.

A "demo" page is now available that requires you to login before you can access it. Use the Demo button on the login form if you don't have your own account.
Site Appearance

There are now three aspects of the site's appearance that can be user customized: color theme, font size, and typeface.
Slide Show

The photo albums now have a slide show feature which can be selected when viewing thumbnails or an individual image. Currently set for a 5 second interval. Let me know if it should be longer.
Background Image

I am not a graphic artist by trade, but I can find my way around Fireworks and Photoshop to do some artwork and design as needed. So I hope you like the "JC" background image. It doesn't really do anything, but maybe it helps to dress up an otherwise utilitarian design.
Nav scroll

The nav box was just taking way to long to show up sometimes, so I changed the positioning algorithm to vary the speed with the distance it needs to travel. Note that NS is still rather slowly at executing this code.
Photo Album

I created a photo album application a long time ago, but it didn't really fit the principles of this site (no tables, frames). So I just got done redoing it and you can see some examples by choosing the link from my Personal pages.
Nav Box Change

Since you only need to "Return to the top" when you have scrolled the page, I have made that link visible or hidden as appropriate. And I changed the CSS for the box and items to accommodate invisible elements. The movement of the box into its new position when the window was scrolled was not very attractive, so I made major changes to those functions to allow it to glide smoothly into place. Please note that the gliding under Netscape 6/7 might be considered crawling. Since both IE and Opera move the nav box as intended, I almost have to conclude that NS is just not executing the JavaScript very efficiently.
Web Log

It turned out that this was a bit more complicated than I thought it would be. But it does what I wanted: a self-submitting form that shows the entries in reverse chronological order with a form to submt a new entry at the bottom. While I will make every effort to remove patently offensive entries, please be forewarned that there is the possibility that someone has posted something rude and I haven't had a chance to remove it yet. With the recent navigation re-organization, the link for the web log has been moved to my Personal pages.
Contact Form

The contact form is functional and was used as the basis for the weblog. It has some minimal validation to deal with blank and multiple submissions. I may eventually put in some delayed redirection logic so that you aren't left sitting on the feedback message indefinitely.