Thursday, March 8, 2007

Blog Envy

Is it a conflict of interest to publish a blog about proper web design techniques in blogger? I can't deal with this theme anymore. I'm off to hack up Typo to do what I want...hope to be back soon, most likely at http://www.ericdelabar.com/

Tuesday, March 6, 2007

A View from the Trenches — Usernames

I recently finished a "Members" section of a website for a local non-profit. The primary user base was small, (less than 100) so I didn't spend a lot of time on building a robust user management system. Basically, a user would access the site, request a login by entering a username, password, confirm password, first name, last name, phone number, and email. After which an admin user (i.e. yours truly) would be notified, log in to the site and approve the account if they knew the user.

Here's where it gets interesting. Of the 10 users that have signed up so far, 5 of them have used a space character in their username. Is it a problem? No, not in this instance, but I found it to be interesting user behavior. I personally have not tried to use a space in a username in as long as I can remember, but I can't tell you why. I would assume that a long time ago when I created my first online account, (an AOL screenname if I remember correctly) a space was simply not allowed.

So what's the point? Simple; users do things you may not expect, and you may not expect things for not-so-valid reasons. (Face it, how AOL did things in the mid 90's is probably not a best practice.)

On a related note, 3 of the 5 members who used a space character in their name have already "forgotten" their username; they actually didn't forget it, they just misunderstood the username field to be a full name field, and simply entered their full name on the registration form, and then didn't know what to enter in the login form. So, the next build of this site will feature much more descriptive, cork'd-like forms, in hopes of solving these problems in the future.

Monday, March 5, 2007

CSS Things I Learned The Hard Way — Absolute Positioning

While there's no substitute for learning something by first making all of the mistakes, it doesn't hurt to learn from somebody else's. In today's issue, we're going to talk about absolute positioning.

absolute
The element's box is laid out in relation to its containing block, and is entirely removed from the normal flow of the document. The containing block of the absolutely positioned element is the nearest ancestor element with a position other than static. If no such ancestor exists, then the containing block is the root element of the document.

Eric A. Meyer. Cascading Style Sheets 2.0 Programmer's Reference.California: Osborne/McGraw-Hill, 2001.

In truth, the solution was in front of my face the entire time, I just never understood it! (Or possibly I just skimmed the paragraph and only read the first sentence, but that's a different issue altogether!) The problem I was seeing was that my absolutely positioned (position: absolute; top: 0; left: 0;) element was appearing in the upper left of the viewport, not the upper left of its containing element.

The simple solution was just to set the position property of my containing element to relative. This is a valid solution because a relatively positioned element behaves exactly like a statically positioned element, except that the position properties (top, right, bottom, and left) are used to offset the element by the specified amount. So, as long as the position properties are left with their default values, to make a container element, all you need is position: relative.

Sunday, March 4, 2007

Let's talk about tools — Part 2

Continuing our thread on tools, we're now going to have a look at setting up a simple test server environment.

As I explained last time, I typically develop on a Windows and Linux, so I prefer a tool that works well on both platforms. Coming from a Java development background, there is one tool that meets this requirement, and more; and as you may or may not know, works with more than just Java. That tool is of course, the Eclipse Framework, a Java-based development platform.

Out of the box, Eclipse provides the hooks necessary to support helpful features such as syntax highlighting and code-completion; with the help of a variety of plug-ins you can very easily enable these features for Ruby, PHP, Perl, C, or pretty much whatever language you prefer to develop in. For this tutorial, we're just going to get the basic HTML, CSS, and JavaScript editors installed and configured.

Start off by downloading the latest version of the Eclipse Framework, at the time of this writing, that was 3.2.2. To install it, simply unzip it to your hard drive; to make your life easier, drop it in the root of a drive (i.e. c:\). (Make sure you have a JDK/JRE installed, if you don't, grab the latest from Sun.) Once installed, start it up by running eclipse.exe (just press OK at the Workspace Launcher prompt for now) and go directly to the Help > Software Updates > Find and Install... menu. Select the Search for new features to install radio button and press Next >. Check the box to search the Callisto Discovery Site and press Finished. On the next screen, expand the Callisto Discovery Site node, and then expand the Web and J2EE Development node. Check the box for the following nodes:

  • Graphical Editors and Frameworks
    • Graphical Editing Framework
  • Models and Model Development
    • Eclipse Modeling Framework (EMF) Runtime + End-User Tools
    • XML Schema Infoset Model (XSD) Runtime + End-User Tools
    • Java EMF Model
  • Web and J2EE Development
    • Web Standard Tools (WST) Project

Read and accept the license agreements and press Next >. Press the Finish button, and let it do its thing. If you receive a Verification window, press the Install All button. When prompted to restart Eclipse, select cancel, and close Eclipse. Congratulations, Eclipse is installed and now we're ready to install Apache HTTP Server.

You may be wondering why it's necessary to install an HTTP server when you can open an HTML file directly from the file system in most browsers. The simple answer is because this is a development environment and the code you produce locally should run on the server without modification. With some site file system layouts, paths, such as those to images or stylesheets, may be different on the server compared to your local machine, especially if using URL rewriting techniques. As a benefit for more advanced users, you can also configure apache to run PHP, Perl, or the server side language of your choice. Now, back to our tutorial.

First, download the latest version of Apache. (We're assuming you're on Windows here, if you're using an alternative OS, this exercise is left to you...) At the time of this writing, the best version is 2.2.4 and Win32 Binary (MSI Installer) is probably the easiest to deal with. After it's downloaded, run the installer. The install process is pretty standard; for server information you probably want to use localhost for your Network Domain, unless your desktop has a fully qualified domain name, and your machine name for Server Name, on the Server Information screen. From that point, the Typical install will probably do just fine. When it's finished, Apache will be conveniently started, and you'll be ready to move on. To test your result, load up a browser and check out: http://localhost/; if it worked, your browser will display an oh-so-descriptive page stating "It works!" Now that you have a working web server, let's create a convenient shortcut to open Eclipse in the htdocs directory of Apache.

Browse to your Eclipse install directory (probably something like: c:\eclipse) and right-click on eclipse.exe. Choose Create Shortcut from the context menu. Rename it to "Apache HTTP Server Workspace" and drag it someplace convenient (like your desktop.) Right click on the Shortcut and change the Target field to look something like this: C:\eclipse\eclipse.exe -data "C:\Program Files\Apache Software Foundation\Apache2.2\htdocs", where the italic text is replaced by your Eclipse install directory and Apache install directory respectively. Press OK to save your changes. Now start up Eclipse by running your new shortcut, and you should not be prompted to choose a Workspace. Congratulations, Eclipse is now configured, now let's get a project setup and give a quick tour of the Eclipse functionality.

To clear the Welcome screen, press the "X" on the Welcome tab at the top of the screen. By default, you'll be setup in the Jave Perspective, this won't be of much help unless you're a Java developer, so choose the Window > Open Perspective > Other... menu. Choose the Resource perspective from the list and press OK. The screen layout will change and should now show the Navigator, Outline, and Tasks views (counter-clockwise from upper left.) Right click on the Navigator view, and select New > Project... from the context menu. From the Wizards tree, expand Web, and select Static Web Project and press the Next > button. In the project name box, type an appropriate name for your current project, in this example we'll use demo, and press Finish. A new folder will appear in the Navigator view and inside of it will be a variety of folders and files, don't worry too much about any of them, but you can get rid of the "WebContent" directory. This directory is now a subdirectory off of your localhost root directory (i.e. http://localhost/demo/.) Just to verify, create a new HTML document named index.html (Hint: try the New context menu off of the "demo" folder in the Navigator view view again) and paste the HTML from my second article into that file. Next, load it up and the server and inspect your handy work! (Try: http://localhost/demo/, it's an oh-so-exciting blank page with a title. Hooray!)

That's it! In my next article, I'll take a look at setting up a simple directory structure and making more than just an empty web page.