‘ Web Site Development ’ category archive

Linux Website Deployment Strategy

May 20, 13 by kenrich

Recently, I put together a set of steps for deploying new code to our Linux websites.  Below is a list of all of the steps we take to deploy new code.  Note that this is a work in progress and is still being improved and expanded upon with each deployment.

Feel free to adopt any of these strategies for your own business.  It is always best to do deployments after the peak hours which is around midnight on the West Coast.  You should also try to keep your maintenance periods as short as possible.   Performing a dry run before the actual deployment should help you meet this goal.

Put the site into maintenance mode

Uncomment the code in the .htaccess file at the website root

# Uncomment the following to enable maintenance mode
# RewriteCond %{REMOTE_ADDR} !=127\.0\.0\.([0-9]|1[0-9])
# RewriteRule ^maintenance.html$ http://%{HTTP_HOST}/ [R,L]

Make sure to substitute your IP address in the RewriteCond so that the developers still have unrestricted access to the site for deployment and testing. You can retrieve your local IP from my former site: http://www.whatip.com/

Test that maintenance mode is activated successfully

We need to access the website from a different IP address.  See Ensure the Site is Really Live below for instructions on how to do so.

Upload the Latest Sync Code (if necessary)

If we have made updates to the synchronization code, upload this first to make sure that everything goes well.

If any database schema or data changes need to be made to support the synchronization process, make these changes manually before proceeding.

Perform the Database Schema Sync

Initiate this on the development (or staging) machine.  Analyzes differences between the local database and the production.  Prompts the user to deploy changes to production that will modify the schema and bring it into sync with local.

Perform the Database Data Sync

Much like the schema sync, the data sync will look for database records on the local machine that are out-of-sync with the production server.  It will then prompt the user to deploy these changes to production.  The user will have the ability to confirm or reject changes selectively.

Perform the Code Sync

Next we need to perform the code synchronization.  This includes server-side scripts, javascripts, resources (images, videos and .htaccess files).  An automated script will analyze and present the user with all change detected.  At this point the administrator may approve or reject changes and deploy them to production.

Smoke Test the Application

Now that all of the code and database modifications have been made, we need to verify that the site is working properly.  Since the site is available for us (due to the RewriteCond we placed in our .htaccess), we can run our tests on the live site.


Some tests should not be run on the live server such as those which make database changes that cannot be easily undone.  These should be done on a staging server instead.  Smoke testing usually involves a human tester going through most of the features of the site to check that they look okay.

Take the Site Out of Maintenance Mode

Comment the code in the .htaccess file at the website root so it looks like the following:

# Uncomment the following to enable maintenance mode
# RewriteCond %{REMOTE_ADDR} !=127\.0\.0\.([0-9]|1[0-9])
# RewriteRule ^maintenance.html$ http://%{HTTP_HOST}/ [R,L]

Ensure the Site is Really Live

Load your web site using a different IP than the one you excluded in your RewriteCond.  There are websites available to do this.  One of them is http://www.webpagetest.org/.

Star Rating AJAX Control

February 23, 08 by kenrich

Javascript Star Rating ControlRecently, I implemented a star rating system on one of my websites. The system uses CSS and simple javascript code to create a dynamic rating control. When the user rolls over the gray stars with their mouse, the starts light up in a gold color. For those of you who have seen these before, they are very simply to use and surprisingly easy to implement.

I added a rating system to my San Diego Business Directory so that users could add reviews of companies in the San Diego area. It works like a charm to enter ratings for businesses. I was able to add my own embellishments to the script that allows users to reset the control after the user has locked in their rating. This way users can make a number of changes in the process of editing the review before making the final submission.

You can test and download the star rating script at ReignWater Designs. It is very simple to add to your website and modify to suit your needs.

Code Igniter PHP Framework

October 25, 07 by kenrich

Code Igniter PHP FrameworkAfter reading some discussion on the PHP mailing list, I noticed a lot of people were recommending the Code Igniter framework. So I decided to do myself a favor and go check it out. Code Igniter is a very lightweight PHP framework for building web applications.

So far, I’ve just been reading the documentation to get a feel for how it works. It has some nice URL rewriting features to help your site rate well in the search engines. It also uses a lot of object-oriented methodologies to manage code modules. I really like the fact that it comes with a lot of helper classes to do common things like build HTML code. This was one thing I had built into my own framework.

It uses a helper class to access the database as well. I’m not sure if this is beneficial or not because there appears to be some limitations in how you can use it.

Some people think that PHP is not ready for the enterprise because it lacks the backing of a major corporation and doesn’t have the support that some of the big players have. I have been developing for over 3 years now and I can tell you that’s just not the case.
If you are just starting out in PHP, I think the Code Igniter framework like this is just the ticket to get you started creating powerful web applications. Of course, a knowledge of MySQL database would definitely be a major plus.

Creating Theme Support for Our CMS

March 04, 07 by kenrich

I am trying to develop a themes module for my new PHP intranet that will allow me to easily install themes. I plan to create an update site which holds all of the available themes. Each theme will be identified by an XML descriptor file which contains all of the properties for the theme. On the update site, a service will scan all of the folders on the site and parse all of the XML descriptor files. The theme information will then be collected and summarized then stored in a global themes file. This way, when someone does an update, they can just retrieve one file from the update server to build a list of available themes to download.

I’m thinking of having two different types of themes. One set of themes will be for the public site while the other will be strictly for the control panel. Users are free to mix and match themes so that the theme for the public site doesn’t need to match the one used on the control panel. Although they share a lot of the same components, it’s better to keep them separate so there is no confusion over what elements are specific to the public and which elements are specific to the control panel (and which elements are shared by both.)

Another feature I would like to have is the ability to customize a theme. So if a user doesn’t like one particular aspect of the theme, they can use a web-based theme editor to tweak the parts that they wish to improve. This should provide maximum flexibility when working with themes. I’m really hoping to get the theme support done quickly so I can open up the demo site to everyone.

Configuration Settings on a CMS

March 01, 07 by kenrich

I’m in the process of developing the next generation Orvado Intranet application. Technically, it’s a which will be used to build and manage very dynamic websites. I have designed a database for universal configuration settings which can be used across all modules but now I need to determine how the settings will be accessed.

In the past I’ve used a system where the settings would be accessible from each page of the control panel. This makes the settings easily accessible and relevant to the current section you are in. The only problem with this setup is that you don’t see all of the configuration settings in one place.

We could put all of the settings for each module in one common area. However, this would require that users navigate away from the section they are currently in to make changes. Then, once their changes are complete, they would have to navigate back to the section they came from. Not the ideal situation.

Another issue I’d like to address is having global settings for the entire site. These are settings that are not specific to on specific module or feature on the site. Usually, I’d put these settings on the home page of the control panel or in a special Configuration area of the site.

I think I’ll put the settings in both areas. Make all of the configuration settings accessible from a centralized location and also make module-specific settings appear in their related sections. This should provide the best of both worlds and (hopefully) won’t be too confusing for the operators.

Returning to a Website Project and Finding Problems

September 07, 06 by kenrich

It’s amazing how when you step away from a project, you believe that everything is working fine. Months later, you go back to work on the project to find out that what you thought was working wasn’t even close. This just happened to me while I was working on my new Team Task site.

I have been going through the forums application and I noticed that posting replies was not working properly. When you attempted to post a reply, the system would instead post a new topic. Definitely not a desirable behavior and something that needed to be fixed immediately. The good news is that this is now fixed and I found some other issues as well.

The HTML used to build the page was rendering differently in Firefox than it was in Internet Explorer. It seems that when using the break tag (br), the two browsers handle them differently when placed alongside paragraph and table elements. The solution was to change my paragraph tags to div tags and now everything looks consistent.

I was also plagued by the Firefox not wanting to abide by inline CSS style attributes. Instead, I placed these styles within their own style element and created ID selectors to reference the style of these elements. It’s a shame that the site has been in a state of disrepair for so long. I hope to get this site running in prime form very shortly.

Brainstorming for New Website Ideas

September 06, 06 by kenrich

Whilst coming up with new business ideas, I often ask myself “What is the most useful tools I’ve found on the web?”. Often, my thoughts turn to things like the Google search engine, the Internet Movie Database or just a reference site such as ASP Nut which contains a quick reference along with some useful articles.

Over the years I’ve found that it’s these sites that tend to attract the most amount of traffic. I’ve become interested in generating more traffic since I’ve started a new campaign with AdSense to sell advertising on my sites.

When my company was originally founded, I used to have a very simple site which would allow a visitor to see his or her IP address as it appeared to the outside world. While this may seen basic to most people who are even somewhat technically inclined, it can be a real chore to the novice computer user. So we just built a single page site where visitors could view their IP on the home page of the site. This site quickly became one of our most popular sites. The irony was that the site only took a couple of hours to build.

So now I find myself in a similar position. I am looking for some useful sites that I can create which will add some real value to the Internet. In doing so, it should prove to be a popular site which receives a lot of visitors. I will be brainstorming for ideas over the next few days. Should you have any ideas you would like to contribute, feel free to add a comment here!

Building a Search Engine for Code

April 06, 06 by kenrich

I was faced with a problem with searching our source code recently. Since we moved our hosting to a third party, we no longer have shell access that would allow us to search all our source code for the occurance of certain text. This makes it hard to track down common mistakes such as mis-spellings on the site.

In order to correct this, I have come up with a specialized for the source code on the site. I am developing a crawler which will index every single file on the website and place the index into our database. I will then build a search page that will allow me to search for keywords in the source code of the site. This is all written using also known as Active Server Pages.

Another solution for this would be to just maintain a local backup of the entire site and then use your favorite search tool to search that content. But, even though I do keep a local backup, it’s only in one location and I certainly don’t want to keep a backup in two locations. The bandwidth usage in this scenario could easily get out of control.

With the search engine, I can easily build a of all of the content on the site and search it quickly and efficiently. The search engine keeps track of when each script is modified so that when a script is changed, the engine knows it needs to rebuild the index. Since source code also involves a lot of symbols, I will need to look into integrating symble search as well, but as it stands it should be a great tool for locating problem code on the site.

Meet Snubster, the Anti-Social Networking App

April 05, 06 by kenrich

One of the new “anti-social” networking applications to be launched recently is called . The functionality at this point is pretty simple. You can build lists of people and things you want to put “on notice” or that are “dead to you”.

There’s nothing on the site where you can indicate your interests and what you like. This site strictly allows you to indicate what you don’t like and share it with others. The site is currently in Beta since it has recently been launched. There aren’t too many users there yet, but with the good press they’ve been receiving, it won’t be long before it becomes a big success.

As for the social part, you can also share this list with your friends. The system will prompt you to enter the e-mail address whenever you reference a person on your list. You can also vote on which list items are the best. This is one of the most minimalistic applications that we have ever come across.

Although, the anti-social networking application is certainly not a unique idea, this site does seem to have it’s charm. There are some navigation and javascript bugs which seem to be plaguing the site at the moment. With any luck, these bugs will be cleaned up shortly. The interface is nice to work with and even though it’s light on graphics, this doesn’t really affect the experience. All-in-all, a good place to vent your frustrations with the outside world and share common complaints with your friends.

Marketing Go Swap Auctions

March 23, 06 by kenrich

Recently, I’ve found myself in the position of trying to generate traffic for a new Website I launched recently. This is my online Go Swap Auctions. I face a steady uphill battle as anyone who has launched a site can tell you.

I have experience in several different areas of marketing. I will be using every iota of experience I have to help get this auction site off of the ground. There are many marketing tricks that I use and none of them are really top secret. You can find more information on these tricks by doing a Google search for .

Things would have been so much easier if I had kept working on my old site and kept it active. My new website represents a complete rewrite of my old auction site. This was necessary because my old site was written using Mason, which is not supported by the majority of web hosts. For this reason, I did a complete rewrite in PHP and so far I’ve been plesently surprised by how easy it has been to develop.

There’s no easy road to making a website a success. Unless you have a built-in user base or tons of money to throw intor advertising, you should expect a lot of work ahead. In the end, it is worth it though. You can look back and feel like you’ve accomplished something.