ColdFusion & OS X / Unix Matt | 31 May 2007
OS X Upgrading ColdFusion 7 to ColdFusion 8 with Apache2, Jrun4, MultiServer Config
I like to have ColdFusion running on OSX as it would on my Linux server using mod_jrun thorough Apache2. The CF8 install process wants me to uninstall Jrun4 but I’ll just move things out of the way. As well Jrun still wants to use my default version of Java. Since I don’t want my entire laptop using Java 1.4.2 which is required for Jrun as far as I know, I’ll need to modify the CF8 startup script. As well, I’ll make sure to clean out my old mod_jrun config entries in my apache2 httpd.conf file.
I’ll include a detailed narrative with command line entries and code. If you have any questions, I’ll monitor the comments on this page. I hope your install goes well!
Continue Reading »
Web Architecture Matt | 30 May 2007
Photosynth Demo at TED
Watch this video that came out tonight. It’s well worth the 10 minutes. This new implementation of the Seadragon software is simply incredible. This comes to us from Microsoft though and looks like for the foreseeable future it will only work with Vista. Ha! This new way of smoothly linking public photo data is simply amazing … but I’m not going to get a windows box for it.
OS X / Unix Matt | 30 May 2007
OS X (FreeBSD) command line : the alias
There’s a great little command line utility that I use on my laptop (OS X) whenever I need to burn an ISO disk image to a disk. Last night I grabbed the MythDora ISO to try out on an old box and today I went to burn it. Problem is, I always forget the name of the program that helps me burn. Knowing that when I search for “burn iso osx” in google it’ll come up as the first result does not help me remember.
First off, here’s the osx iso burning trick:
hdiutil burn image.iso
The only thing that I ever change with this command is the name of the disk image. So I should make an alias to this command with something that I’ll remember. To make an alias in OSX or FreeBSD open up your command line preferences file. In OSX my personal command line preferences file is at ~/.profile (that ~ stands for my home directory). So open up a terminal and type:
edit .profile
This should open up your personal .profile file in your favorite editor. Or if you don’t have a .profile file yet, a new one will be made for you. I’ve decided that the alias “burniso” would be much easier to remember than hdiutil. And with an alias, I can also include the “burn” switch that goes along with hdiutil. So, at the end of my .profile, I add:
alias burniso="hdiutil burn"
Now anytime I type the command “burniso”, my computer interprets that as “hdiutil burn”.
Web Architecture Matt | 30 May 2007
Websites That Suck … bankofamerica.com
Last night I signed up for a checking account online at bankofamerica.com. As I was filling out the form, I realized that I needed an account number that I didn’t have handy. So I went to look for it. By the time I got back my session had timed out and I got a message that I was being logged out. No problem, I understand this is a security measure.
Problem 1: As I went back into the site to start my application again, BOA refused to let me start another application because I already had another one started. Wait a sec, you’re the one that dumped me out of that! I had to help BOA clear my session by closing and reopening my browser. Somewhat annoying since I had other stuff open.
Problem 2: Now here’s the big one. I log into the bankofamerica.com site today in order to pay a credit card that is due in a few days. On login, the BOA site says that it’s going to help me hook up my new checking account to my creditcard account and asks me for my debit card number and pin number. Oh you mean the debit card and pin number that I’ll get in the mail in 7 to 10 days. I don’t have that, I’ll cancel. Hmm, that takes me to the homepage. Try again, I’ll continue … homepage again. So there is no way for me to login to my account to pay my credit card bill online until I get this debit card in the mail. Ouch.
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"







