Shared IIS Hosting, classic ASP and URL redirecting
by Kyle Skrinak on Aug.20, 2010, under Technology
I needed a way to redirect old and broken links, which Google Webmaster complains I have about 30, on external sites to correct pages on a site I manage that is a classic ASP site. There’s tons of posts on how to do URL rewriting for Classic ASP sites. After a bit of research, I’m pleased with the method I’m using.
This fellow here gave me the basis for what I did. Thanks, John!
First, shared IIS host most likely means that a) you don’t have access to the IIS management console, b) your web hosting service does expose a means whereby you can establish your own http error pages. Point b will help us get around point a. (I’d much rather handle this server-side, by the way)
Set up an error page. I’ve used this path off root: /error/http-redirect.asp. I’ve linked the 404 error page as provided by the host to this page. Set your page up as you would any 404 page, I used the advice from the ever-trusty A List Apart’s “The Perfect 404″ reference for that.
Next, add a script like the following to the top of your page. The fun is in the if/elseif statements. This is where you can add all broken URLs and redirect them to new, working paths.
<%
' John's original script called for QUERY_STRING although
' here, our URLs don't have this appendage, so we look
' for the HTTP_X_ORIGINAL_URL
strQuery = Request.ServerVariables("HTTP_X_ORIGINAL_URL")
strPage = Mid(strQuery, InStrRev(strQuery, "/") + 1)
' this item is sorted from most to least hit missing pages
' Spookora redirects was at 100
If strPage = "spookora.asp" or strPage = "sporkora.asp" Then
Response.Status="200 OK"
response.redirect("/products/sporkora.asp")
' spookora catalog was at 46 hits
ElseIf strPage = "spookora-cat.pdf" Then
Response.Status="200 OK"
response.redirect("/products/catalogs/spookora-cat.pdf")
Else
'Put your normal error page here, so far I haven't used this statement
End If %>
Add ElseIf statements like the above to add as needed. Then be sure to test that the redirects work as expected.
While we’re at it, another page that is a help for those of us supporting legacy code is here, which adds a simple print() and break() classic asp function so you can see your variables.
Lingon, launchd, and updating my macports installation
by Kyle Skrinak on Aug.12, 2010, under Technology
Here’s the rub: the CLI application for updating MacPorts, “port” likes to have a home environment variable populated. Apparently this happens when executing port from a CLI. When running from launchd, however, $HOME is empty and thus the script dies.
The fix is trivial. You need to add the following to your user daemon (it needs to run as root, so user daemon it is):
<key>EnvironmentVariables</key> <dict> <key>HOME</key> <string>/var/root</string> </dict>
Here is the full context. (the path to your user daemons is at:)
/Library/LaunchDaemons System-wide daemons provided by the administrator.
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>EnvironmentVariables</key> <dict> <key>HOME</key> <string>/var/root</string> </dict> <key>Disabled</key> <false/> <key>KeepAlive</key> <false/> <key>Label</key> <string>com.ksk.updateMacports</string> <key>ProgramArguments</key> <array> <string>/usr/bin/update-port.sh</string> </array> <key>RunAtLoad</key> <false/> <key>StartInterval</key> <integer>43200</integer> </dict> </plist>
Hat-tip: Arno, here.
Chroma Key to the rescue
by admin on Aug.01, 2010, under Technology
Ingredients:
- Animated sequence with a statically uniform background
- Final Cut Express
- QuickTime 7 Pro
- Adobe Media Encoder
- Adobe Flash
For a recently closed project, my customer asked; “Kyle, can you silhouette an animation of a growing tree against a branded gradient.” I give the classic consultant answer; “Of course!” I wasn’t clear on the details, but, as I discovered, it’s relatively trivial with the right tools.
The customer found an animation sequence of a tree growing against a white background. The beauty of this was the consistent background color. I figured there was a way to assign an alpha channel to that color, and Final Cut Express (I’m cheap, remember) allowed me to spec the background color, which intern became the “Chroma Key” or alpha channel for the transparency. To get this transparency assignment, I applied the Video Filters > Key >Chroma Keyer filter to the clip. Then, you simply sample the color which will be the alpha channel color. There was an interesting issue with this. As the color steps from the assigned color space for the alpha, the nearly-so-but-not-quite white pixes are opaque. I decided, however, that this provided a faux sharpening and helped to accentuate the leaves against the background. Expanding the range of the color key space confirmed this.
Next, I exported the clip as a high-resolution Quicktime Movie, which stores the alpha information. The next trick was to bring the alpha channel into Flash via the flv format. This meant using the Adobe Media Encoder. As I wished to balance resolution with bandwidth requirements, I performed several conversions at several bit-rates to find the sweet spot. I ended up with a 10 frames per second at a bitrate of 150. Yes, on the low end, but satisfactory for this job, and the resulting flash file wasn’t too large.
The penultimate matter was to place the animation on the branded-background gradient in flash. Finally, as there’s some delay due to video size, I added a most rudimentary loader process. I am really tired of the flash model for doing this but it’s transparent to the user here. (No annoying “please wait” widget. I routinely click past those now, the rush of Flash animations now very passe.)
Finally, I load the necessary SWF Tools and swfobject into my Drupal CMS and load the media as per SOP. Viola! A growing tree in the branded colors of my wonderful customer.
You can see the resulting image here.
Beefing Up Password Security
by admin on Jul.16, 2010, under Technology
I’ve been a lastpass user for about a year now, after hearing a favorable review from one of the TWiT shows (Leo Laporte likes it, and mentions it frequently — maybe it was on Windows Weekly?) It’s wonderfully convenient as a simple password keeper. However, Steve Gibson really goes deep and performs a vivisection of lastpass on this Security Now episode. Of the many benefits of lastpass, Steve reminded me of the “security check” tool option, which will grade your overall security effectiveness, using such criteria as duplicate passwords and password strength. I increased my security rating from 55% to 70% using it’s suggestions. The downside is that while financially inexpensive, increasing your password security is a large time investment. That, and fighting off the OCD urge to score 100%. After my 25 percentage point gain, I’ll be doing incremental improvements here on.
Upgrade to Ubuntu 10.4
by Kyle Skrinak on Apr.30, 2010, under Technology
I’ve updated my ubuntu 9.10 (insert whatever cutesy alliterative here) laptop to 10.4, albeit in a circumambulatory manner; all of my own doing. I took advantage of a nice, phat broadband connection to perform the update manager facilitated upgrade (these usually go smoothly) when the update process took much longer than expected, over 4 hours (the download was fast, the package update was slow. My watching twit.tv surely impacted performance.) So, hoping that the package installation would not be negatively affected by putting the OS to sleep, I did so and continued on with more interesting aspects of my life. I had figured on continuing the install at home. Only I didn’t. I forgot and returned to a computer that lost it’s power and had turned off. The machine booted into… 10.4, but that was a curve ball, as the core system was updated but not the myriad of packages.
So, back to a classic reformat and install, using the system I outline here. This allows me to wipe out and reinstall the OS without hurting my user data directory; which is very convenient. Here’s the screen shot from my install this morning, which will probably serve me in x months, as the screen shot for the prior link did.
Sure, it’s an ad, but, oh, the puffery
by Kyle Skrinak on Apr.06, 2010, under Technology
I’ve noticed a Quicken Intuit service for business websites on television. The premise of their ad is simple: they make business web sites simple and cheap. Sure; like everyone else before has. Anyhow, in one scene, a “mom and pop” couple “successfully” upload their site — dramatically and succinctly portrayed, of course. Immediately afterwards, we see the same couple “watching” a Google search window, and, voilà! their site magically bumps to the top. Of course it’s that easy.
So, either Quicken Intuit has paid Google handsomely for this “feature,” (making Google look very unethical) or, more likely, given the perceived importance of SEO by initiates, that’s a bit too much fantasy to stomach.
Upgrading Web2Project from 1.2.2 to 1.3
by Kyle Skrinak on Apr.05, 2010, under Technology
Wow, this was easier than I expected. Here’s roughly what I did:
- Backup your files and your database.
- Move your w2p root folder, i.e., “mv w2p w2p-old”
- Download and unpack 1.3: tar xvvf web2project-1.3.tar.gz -C ~/temporary-dir/
- copy over the w2p-1.3 to w2p, i.e., “mv web2project-1.3 webroot/w2p”
- (Optional: diff your custom style directory against the latest style/web2project directory for changes)
- Update: Sigh. I forgot about this.focus() in the body element. That brings the web2project page to the front, regardless of context. I love w2p, but I really don’t care for that “in your face” UI convention, who ever does it. Added during running diff, but now removed.
- Copy your config, files and style directories over:
- cp -r w2p-old/style/sci w2p/style
- cp -r w2p-old/files w2p/
- cp w2p-old/includes/config.php w2p/includes
- Go to your site. Confirm that you’re running 1.3 by going to the login page (which might mean logging out.)
- Note: I didn’t see any reference to this in any documentation about upgrading: After confirming #7, go to System Admin > System Status. Mine indicated that an upgrade was required (albeit cryptically). Running the upgrade updated my database.
That’s it.
GoDaddy, CentOS Virtual Server & Drupal Email Solved
by Kyle Skrinak on Mar.11, 2010, under Technology
I discovered through the silent scream of no updates from my drupal installation that drupal’s mail wasn’t working. I fired up google and found this excellent post that gets you nearly there. What’s missing, of course, is the enabling binary called “sendmail.”
Here’s how to enable a GoDaddy CentOS Virtual Server’s sendmail so that Drupal can send email:
- Confirm whether senmail is working
-
service --status-all | grep sendmail
-
- Install sendmail and sendmail-cf
-
yum install 'sendmail sendmail-cf'
-
- Edit with your favorite editor (vim, no doubt):
-
vim /etc/mail/sendmail.mc - Search for ‘SMART_HOST’ and insert the line below just below it. Comment it for clarity’s sake.
-
define(`SMART_HOST',`k2smtpout.secureserver.net')dnl - Save and close file.
-
- Run this command:
-
m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
-
- Finally, start or restart your sendmail service:
-
service start sendmail
-
That did it for me.
MAMP update process
by Kyle Skrinak on Mar.09, 2010, under Technology
You be the judge whether this is a “best practice” but here’s my MAMP update process:
- Do a manual phpmyadmin backup of all sql dbs first.
- Stop the MAMP servers.
- Quit MAMP (and/or MAMP PRO)
- Rename the folder: /Applications/MAMP e.g. to /Applications/MAMP_old
- Copy the new MAMP folder to your Applications folder.
- Copy the databases and other files that you want to keep to the new MAMP folder from the old one. Databases are located under /Applications/MAMP/db but there are possibly also other files that you want to keep like the folder /Applications/MAMP/htdocs or configuration files within /Applications/MAMP/conf.
- Run kdiff3 on the MAMP/conf folders to bring over the customizations
- Unless you’re an exquiste documenter of everything you do, it’s good to run a diff on the two files.
- sites apache vhost config file
- php.ini updates (but check, new libraries are added and versions modified)
- Unless you’re an exquiste documenter of everything you do, it’s good to run a diff on the two files.
- Copy the uploadprogress.so file, rather than recompile:
- cp -v /Applications/MAMP/bin/php5/lib/php/extensions/no-debug-non-zts-20060613/uploadprogress.so -> /Applications/MAMP-1-8-4/bin/php5/lib/php/extensions/no-debug-non-zts-20060613/uploadprogress.so
- Start new MAMP (or MAMP PRO).
Installing HTMLTidy for Mac OS X/Snow Leopard
by Kyle Skrinak on Mar.08, 2010, under Technology
The latest HTML Tidy has much goodness that the version that ships with Snow Leopard is missing. You’ll need to compile it to update your binary. It’s simple after you’ve done it once and easy to forget, so I’m documenting it this time.
- Test version
- Load Terminal
- tidy –version
- “HTML Tidy for Mac OS X released on 31 October 2006 – Apple Inc. build 15.3″
- No good, should say at least “HTML Tidy for Mac OS X released on 25 March 2009″
- Download the source code:
- cd to a directory you can track for cleanupcvs -z3 -d:pserver:anonymous@tidy.cvs.sourceforge.net:/cvsroot/tidy co -P tidy
- cvs -d:pserver:anonymous@tidy.cvs.sourceforge.net:/cvsroot/tidy login
- Hit the enter key for password, i.e., no password
- cvs -z3 -d:pserver:anonymous@tidy.cvs.sourceforge.net:/cvsroot/tidy co -P tidy
- This will create a directory, “tidy” in your current directory
- Compile
- cd into the tidy directory
- /bin/sh build/gnuauto/setup.sh
- sudo ./configure –prefix=/usr
- sudo make
- sudo make install
- If you error, may the Google search engine be your best friend.
- Test version
- tidy –version
- HTML Tidy for Mac OS X released on 25 March 2009
- tidy –version
- Delete the “tidy” directory
- Wow that was easy.


