IE6 is still not dead, and why we are to blame

While Internet Explorer 6 is still alive and breathing, it is dying a slow death, too slow for our liking as web developers.  The process has been long and arduous.  With the advent of CSS3 and HTML5, browsers like IE6 are like the cars with carburetors and low MPG ratings.  They harm the environment, create an unpleasant atmosphere for development, and we need a virtual Cash for Clunkers to fix it. Continue reading IE6 is still not dead, and why we are to blame

Turning off Instant Search enable dialog in Outlook 2007

About two months ago, I began using Microsoft Office Outlook 2007, which I absolutely love. Microsoft has really done great things with this program over the years, although I must admit there are a few things I would change if I could. I also use Google Desktop, which enables me to index and search my entire computer, including e-mails, PDF files, and many other previously search-obscure file types. This is not unlike Microsoft’s solution which is called Instant Search. Microsoft Instant Search indexes files in a similar way, but I find that it hogs more resources and is generally not as good as Google Desktop.

Microsoft Office Outlook 2007 - Instant Search
Microsoft Office Outlook 2007 - Instant Search

Continue reading Turning off Instant Search enable dialog in Outlook 2007

Simple handling of jQuery dependencies with Zend Framework 1.9.x

I have a lot of experience with WordPress development, and I’ve grown to love the way JavaScript dependencies are handled in that particular application.  In WordPress, all JavaScript dependencies are defined in /wp-includes/script-loader.php.  To ensure jQuery loads before any jQuery-dependent scripts, you just use $script->add() and reference the jQuery library ID.  Easy as pie. Continue reading Simple handling of jQuery dependencies with Zend Framework 1.9.x

PHP 5.2.11 released, fixing 75+ bugs

Yet another PHP 5.2.xx release took place a few days ago, which brought us over 75 bug fixes, some security-related.  If you are running any PHP 5.2.xx series release, make sure you apply this update.  Full details on the PHP 5.2.11 release can be viewed at  In addition, WHM/cPanel implemented this version of PHP in EasyApache, which updates smoothly.  Now, if they would only get to implementing 5.3 already… =) Continue reading PHP 5.2.11 released, fixing 75+ bugs

Setting up GoDaddy Hosted Microsoft Exchange e-mail on the MyTouch 3G

This weekend, I was lucky enough to take advantage of the deal T-Mobile has for the MyTouch 3G.  (Thank you Oprah!)  With T-Mobile’s full discount, the phone was $199, minus $100 from Oprah, which brought me down to just $99 for this beautiful piece of technology.  For this tutorial, I’m going to use GoDaddy’s information, but it should be similar for many other Exchange servers. Continue reading Setting up GoDaddy Hosted Microsoft Exchange e-mail on the MyTouch 3G

Passing parameters with Route in Zend Framework

When first approaching the Zend Framework, it almost appears that in order to get URLs like /controllername/page1 or /controllername/page2 (equivalent to /controllername/?varname=page1 w/o ZF) with their preconceived directory structure, you have to create a new action for each new page in order to serve the page.  This would ultimately mean a new function for every single page within that controller; however, with Zend_Controller_Front and Zend_Controller_Router_Route, we can avoid this and pass page1, page2, and any other string as variables. Continue reading Passing parameters with Route in Zend Framework

Setting up virtual hosts with Apache on Windows XP

In this tutorial, we will discuss how to setup virtual hosts for your development environment (or production, if you wish) on Windows XP.  This will allow you to use URLs such as http://mywebsite/ instead of http://localhost/mywebsite/, which is much more realistic. Continue reading Setting up virtual hosts with Apache on Windows XP

Setting up tracd for multiple projects in Windows XP

I have a few ongoing projects that I wanted to use Trac for, but I only had tracd setup for one project. Yesterday, I spent a very long time working with my local development environment trying to get mod_python work with Apache 2.2.13, which led me to ultimately abandon the module and use the lightweight, standalone server for Trac, tracd. Continue reading Setting up tracd for multiple projects in Windows XP

Adding default database table prefixes in Zend Framework 1.9.x

Recently, I began working with Zend Framework 1.9.2 to restructure one of my web sites.  I learned how to create an extension of the Zend_Db_Table_Abstract from a great “Getting Started” tutorial, but I found myself rewriting the table prefix with each and every new table.  Below I explain one solution to this problem, but I am new to Zend Framework, so please feel free to recommend a better, more integrated way of doing this, if you know of anything.

Step 1:  application.ini

Place the following code in your /application/configs/application.ini file:

table_prefix = "webjawns_"

Step 2:  TPC_DB_Table_Abstract class

Create a new class in the library directory. For this example, we’ll use TPC_DB_Table_Abstract as the name, which will be stored in /library/TPC/DB/Table/Abstract.php.

class TPC_DB_Table_Abstract extends Zend_Db_Table_Abstract {
	protected function _setupTableName() {
		global $application;

		$prefix = $application->getOption('table_prefix');

		$this->_name = $prefix . $this->_name;

Step 3:  /application/Bootstrap.php

After that, you’ll want to make sure that the new Abstract.php file is referenced in your /application/Bootstrap.php file.

protected function _initAutoload() {
	$moduleLoader = new Zend_Application_Module_Autoloader( array(
		'namespace' => '',
		'basePath' => APPLICATION_PATH ) );
	$moduleLoader->addResourceType('', '../library/TPC', 'TPC');
	return $moduleLoader;

Step 4:  /application/models/DbTable/NewTable.php

To use the table prefix, we will basically be substituting Zend_Db_Table_Abstract with TPC_DB_Table_Abstract.  See the example below:

class Model_DbTable_NewTable extends TPC_DB_Table_Abstract {
	// Database name will be $prefix + $_name
	protected $_name = 'newtable';

This is just one way to create default table prefixes for each of your tables. I’m sure this isn’t the only way, and there may even be better, easier ways to do this. As an added bonus, we use the TPC_DB_Table_Abstract class to extend the Zend database functionality even further. If anyone else has any ideas about how to use default table prefixes (other than using a constant), please feel free to share them so we can all benefit.

PHP 5.3.1 RC1 released!

This is just a notice to let everyone know that the first PHP 5.3.1 release candidate has been released.  For those of you who use cPanel/WHM, this means that you are one step closer to having out-of-the-box PHP 5.3 support.  On cPanel’s forums, a member of cPanel Quality Assurance said cPanel would most likely wait until the stable release of PHP 5.3.1 before unleashing it into EasyApache for a quick, painless install on cPanel/WHM-administered servers (see post by cpanelkenneth here). For a list of fixes in 5.3.1, visit the PHP changelog.

With the release of PHP 5.3, there were many performance increases with some tests confirming a 20% boost for certain applications, though most were between 5-10%.  This should make the web a better place for those of us who upgrade.  (FYI:  I tested a lot of my PHP scripts, and none so far have had compatibility issues.)