Posts or Comments 20 August 2008

Web Architecture Matt | 28 May 2007

XHTML validity, enclose script and style elements with CDATA

I was reading up on the XHTML spec at w3.org and noticed something I haven’t done in years. For valid xhtml all inline script and style elements must be wrapped with CDATA. I don’t think I’ve done that since working with XML and XSLT in Cocoon v. 1. Not that this isn’t required for all XML files, it’s just been that long :-)

Also on the subject of XHTML validity, this is an interesting article about not using a text/html content type for xhtml but rather application/xhtml+xml. Of course that content type will make the markup even more strict. As the author mentions, and I’m beginning to agree with, xhtml should be avoided in pages for public consumption.

OS X / Unix Matt | 26 May 2007

Excluding files and directories from a tar backup

I’m making a backup of a clients site right now and noticed that they have a directory of mp3’s that’s huge. I don’t need this directory in the backup. In the tar manual I see that the switch —exclude allows me to exclude some files from my backup.

tar zcvf google-website.tgz —exclude “htdocs/mp3s/*” htdocs

This example assumes that I’m in the directory one level up from the one I want to tar up. Specifying full paths to the archive, the exclusion and the htdocs directory would work too.

Misc Matt | 25 May 2007

UserCore Way Back

Usercore.com in the Way Back Machine. I think I still like my site design 6 years ago better than now. I’ve got this really cool design but it’s a bunch of css and somewhat complex. I haven’t found several hours yet to decipher it and pair it down a bit. It looks like yellow for a little while longer.

Web Architecture Matt | 17 May 2007

Update your zip code list!

Our washing machine is busted. After a bit of reading on both laundry repair and a refresher on how to use a multimeter, I’ve figured out that we need a new part. Off to the Sears website to see if part 3356465 is in stock at my local repair center. Where’s my local repair center? Oh cool, Sears is just asking for my zip and is going to do a proximity search. The zip code in my area officially changed with the post office 2 years ago now. The post office stopped delivering mail for my old zip about a year ago. And still, Sears isn’t aware that my zip code even exists.

I’m sure that when the site was developed, a zip code table was hooked up and promptly forgotten about. You’d be surprised how often this happens. I’d say still about a 3rd of the time my zip code doesn’t exist. A year ago that was half or more. So in my rough estimation, half of sites that use zip code lookups don’t update their database except once a year. And a third don’t update it at all. More likely I bet the large majority of sites don’t have a zip code refresh in the plans at all and just end up doing it when enough people complain.

Update your zips, it’s annoying your customers right now.

This site has some fair prices for zip code lists and offers several formats.

Server Architecture & Subversion Matt | 11 May 2007

Using Subversion Part 2 - Auto Publish a Subversion commit

Subversion comes prebuilt with a system of “hooks”. Basically for most actions you would perform with a subversion repository you can also hook another program up to that action. For example you can tell subversion to also update a site locally on each commit.

The first step in this process is to make sure that your website as it exists on your dev server has been checked out from subversion and that permissions and ownership is set as you want it (that part’s up to you and outside the scope of this post). Let’s say I was working on the google site that was held in my repository in the “site” directory, I’d do something like:

svn checkout file:///home/google/repository/site/trunk/ webroot/

Now that a fresh checkout exists in the webroot, we’ll set things up to do an automatic subversion “update” on each commit.

From the subversion FAQ’s I found this handy chunk of C code.

#include 
#include 
#include 
int main(void)
{
  execl(”/usr/bin/svn”, “svn”, “update”, “/path/to/site/webroot/”,
        (const char *) NULL);
  return(EXIT_FAILURE);
}

The FAQ basically says that you take this chunk of code, add your own webroot path and compile it. If you’re like me and you compile C code once every year, or perhaps never, here’s the specifics on a Linux box. I use the gcc compiler and save the file as “update_site.c”

gcc update_site.c -o update_site

Not too complicated.

Now to preserve file permissions on your site properly, make sure that the owner of the website can execute this program from the svn hook but changing the mode of the compiled program to add the s switch.

chmod +s update_site

The last step is to tell subversion that it should run this update_site program after each commit. In your repository navigate to the hooks directory on the file system. Open up the file called post-commit.tmpl. There’s a couple example lines at the bottom of mine that execute python scripts for mailing and logging the commit, I just comment those out by putting a # in from of the lines and then on the last line of the file add the full path to the new update_site script. Like: /full/path/to/update_site

When you’re done, copy or move this post-commit.tmpl template to just post-commit and make sure that the webserver user can execute it.

With this process, you’re pretending that the webroot is the working directory for a subversion user. This means that the .svn directories normally in your working directory will now be present in the webroot as well. In case you have any passwords mixed in with you’re code, disable browsing of those directories in Apache. Thankfully this isn’t often an issue with ColdFusion datasources but it still doesn’t hurt to be safe.

Add the following to your apache httpd.conf file:

# Disallow browsing of Subversion working copy administrative dirs.


    Order deny,allow
    Deny from all

Server Architecture & Subversion Matt | 09 May 2007

Using Subversion Part 1 - Build Subversion Repository with Apache htaccess authentication

One of my responsibilities at Aslan is the Linux SysAdmin. I’ve decided to replace my job with several tiny robots and take on the title of Linux Architect instead. One of the main things to manage is a subversion repository for each project we work on. Rather than keep documentation around for me to manually follow a set of steps for each new repo, I’m using the Bourne shell to write a script that will backup the existing site, create a repository, and make a login and password to use when accessing the repository though a local svn client.

Part 2 will show how to have a site automatically publish itself to the dev server on each commit.

For now, here’s some code for Part 1:

#!/bin/sh
echo "creating svn repository and moving files ..."
tar zcvf htdocs.tgz htdocs &&
svnadmin create repository &&
mkdir site &&
mkdir site/trunk &&
mv htdocs/* site/trunk/ &&
rm -rf htdocs &&
ln -s site/trunk htdocs &&
svn import site file://$PWD/repository/site -m "initial import" &&


echo "Who owns this directory?"
read owner
echo using ... $owner
chown -R $owner:$owner * &&
chown -R apache repository &&


# make apache hook for subversion
APACHESVN=/etc/httpd/conf.d/subv-$owner.conf
touch $APACHESVN
echo "” >> $APACHESVN
echo “DAV svn” >> $APACHESVN
echo “SVNPathAuthz off” >> $APACHESVN
echo “SVNPath $PWD/repository” >> $APACHESVN
echo “SSLRequireSSL” >> $APACHESVN
echo “AuthType Basic” >> $APACHESVN
echo “AuthName \”$owner\”" >> $APACHESVN
echo “AuthUserFile $PWD/subv-auth” >> $APACHESVN
echo “Require valid-user” >> $APACHESVN
echo “” >> $APACHESVN


echo "Supply a username for accessing the svn repository"
read svnuser
echo "thanks, how about a password"
read svnpass
echo "I'm using $svnuser and $svnpass"


htpasswd -bc $PWD/svn-auth $svnuser $svnpass &&
/etc/init.d/httpd stop &&
/etc/init.d/httpd start &&
echo "all done"

Web Architecture Matt | 09 May 2007

Standardizing web forms

I think all web forms should look the same. What’s the goal of a web form? Its goal should be to collect information from the user. Whenever possible, we should get things to the point where users don’t need to think about what steps they need to take to perform a task. So why should we as architects, designers and developers ever attempt to reinvent the form. It would be great for us all to settle on a form library.

It looks like there’s a whole movement devoted to design standards like this, Microformats.

Specifically, I really like the direction of Uni-Form. The forms look fluid, error handling is clear and graceful, it’s clear what field you’re on. I love it.

I’m looking to use this library for all form development. Maybe this is worth building a CFC to extend the tag?

Server Architecture Matt | 09 May 2007

RoundCube - Ajax Webmail Client

The RoundCube webmail project does look pretty slick. The developers look to have a solid roadmap lined up and a good, conservative set of features coming up. I’d signed up for the dev list and am considering helping out in some capacity.

Update 6/12/07: I’ve been using Roundcube inhouse for the past couple of weeks now. It’s awesome. I think this is the best webmail client out there. Others have more features but not more functionality. Roundcube does exactly what I need it to do.

Misc Matt | 08 May 2007

Atmail - Webmail Client and optional MTA

I’m currently testing out Atmail from CalaCode, located right here in good ol’ Chicago.

The install process is painless, but so far I’m not seeing huge improvements over something like RoundCube. I’m just comparing webmail clients here. Roundcube is quite basic right now and actually that’s nice. Something like Horde is very robust but most clients look at that and get a little overwhelmed.

Web Marketing Matt | 07 May 2007

Search Engine Ranking Factors

I just came across this cool article from the SEOmoz folks who interviewed several well known SEO’s, asking them to weight the various SEO best practices in use today. I also have personal confirmation from a good buddy of mine, responsible for millions in online revenue that this info is on the level. I’m considering signing up for the paid service for more articles and tools. If I do, I’ll post any interesting thoughts.

Speaking of SEO, nichelaunch.com is a friend’s directory service. It will be worth the effort to get your name out there.

« Previous PageNext Page »