<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3564531562518398146</id><updated>2011-11-27T19:47:27.907-05:00</updated><category term='PHP'/><category term='templates'/><category term='theory'/><category term='graphic design'/><category term='css'/><category term='geocoding'/><category term='SQL'/><category term='cms'/><category term='joomla'/><category term='books'/><category term='html'/><category term='programming'/><category term='history'/><category term='design'/><category term='mapping'/><category term='algorithms'/><category term='architecture'/><category term='web design'/><title type='text'>Improve Web Development</title><subtitle type='html'>Website Design and Programming Improved</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://www.improvewebdevelopment.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3564531562518398146/posts/default'/><link rel='alternate' type='text/html' href='http://www.improvewebdevelopment.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Steve Robison</name><uri>http://www.blogger.com/profile/08212268651071905237</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>8</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3564531562518398146.post-1946788361532075487</id><published>2009-03-15T11:03:00.004-04:00</published><updated>2009-03-30T09:42:06.057-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='theory'/><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='algorithms'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>Modified Preorder Tree Traversal</title><content type='html'>If you are a programmer, hopefully you've heard of this term.  I learned about it 7 years ago while a big city programmer from New York looked down at a country programmer from Sussex County Delaware.  He had a lot to say but of little value.  When we were discussing an e-commerce platform that I had built, he asked which algorithm I was using for parent/child relationships.  I explained how I had a parentCategoryID field that held the value of the parent category in the child category row.  One weakness in this approach is that it is tough to find indirect relationships.  Say I have top level category of animals and plants, then the next level has birds, fish, reptiles, etc.  Then, the next level has the species of animals and plants.  How can you create a query that says display all animals?  Without multiple queries or complex queries, you can't.  &lt;br /&gt;&lt;br /&gt;&lt;table border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;lifeFormID&lt;/th&gt;&lt;th&gt;name&lt;/th&gt;&lt;th&gt;parentLifeFormID&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;Animal&lt;/td&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;Plant&lt;/td&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;Bird&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;Fish&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;Reptiles&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;Trees&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;Shrubs&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;Cactus&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;9&lt;/td&gt;&lt;td&gt;Duck&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;Goose&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;11&lt;/td&gt;&lt;td&gt;Snake&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;12&lt;/td&gt;&lt;td&gt;Oak Tree&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;div&gt;Using the data above, I want a query that returns duck, goose and snake but not oak tree.  Using this method, there is no clean way.  Either multiple queries &lt;/div&gt;&lt;div&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div&gt;&lt;blockquote&gt;SELECT lifeFormID, name, parentLifeFormID FROM lifeForm  WHERE parentLifeFormID = 1&lt;/blockquote&gt;&lt;blockquote&gt;then...&lt;/blockquote&gt;&lt;blockquote&gt;SELECT lifeFormID, name, parentLifeFormID FROM lifeForm  WHERE parentLifeFormID IN (list of ID's from the above query)&lt;/blockquote&gt;Yes, if you know that there are only three levels then you could build the query below:&lt;/div&gt;&lt;blockquote&gt;SELECT lf.lifeformID, lf.name, lf.parentLifeformID FROM lifeForm lf WHERE lf.parentLifeFormID IN ( SELECT subLF.lifeFormID FROM lifeForm subLF WHERE subLF.parentLifeFormID = 1 )&lt;/blockquote&gt;But this creates code that is not very modular or efficient.  A better way to perform this is using the &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Modified Preorder Tree Traversal&lt;/span&gt; algorithm.&lt;div&gt;&lt;br /&gt;&lt;div&gt;Lets try setting up the table this way.&lt;/div&gt;&lt;br /&gt;&lt;table border="1"&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;lifeFormID&lt;/th&gt;&lt;th&gt;name&lt;/th&gt;&lt;th&gt;parentLifeFormID&lt;/th&gt;&lt;th&gt;treeLeft&lt;/th&gt;&lt;th&gt;treeRight&lt;/th&gt;&lt;th&gt;treeLevel&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;/tbody&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;Animal&lt;/td&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;14&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;Plant&lt;/td&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;td&gt;15&lt;/td&gt;&lt;td&gt;24&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;Bird&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;Fish&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;9&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;Reptiles&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;13&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;Trees&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;16&lt;/td&gt;&lt;td&gt;19&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;Shrubs&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;20&lt;/td&gt;&lt;td&gt;21&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;Cactus&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;22&lt;/td&gt;&lt;td&gt;23&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;9&lt;/td&gt;&lt;td&gt;Duck&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;Goose&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;11&lt;/td&gt;&lt;td&gt;Snake&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;11&lt;/td&gt;&lt;td&gt;12&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;12&lt;/td&gt;&lt;td&gt;Oak Tree&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;17&lt;/td&gt;&lt;td&gt;18&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;tbody&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Now lets say we want to create a SQL query that retrieves all types of animals.&lt;/div&gt;&lt;blockquote&gt;SELECT lifeFormID, name, parentLifeFormID, treeLeft, treeRight, treeLevel FROM lifeForm WHERE 1 &amp;lt; treeLeft AND treeRight &amp;lt; 14&lt;/blockquote&gt;&lt;blockquote&gt;&lt;em&gt;Note: 1 is the treeLeft value of the animal row and 14 is the treeRight value of the animal row &lt;/em&gt;&lt;/blockquote&gt;This method allows for SQL queries to be created that allow for indirect relationships to be found simpler.  The one downside of this algorithm is that it is more complicated to add/edit/delete from the table.  Since most applications use the view data much more often (generally around 90%), it is better to simplify and speed up the view process while losing speed on the admin side.  As for the actual functions and SQL to maintain this, SitePoint has a &lt;a href="http://www.sitepoint.com/article/hierarchical-data-database/"&gt;good article&lt;/a&gt; with some useful code that you should be able to migrate into your application.&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3564531562518398146-1946788361532075487?l=www.improvewebdevelopment.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.improvewebdevelopment.com/feeds/1946788361532075487/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.improvewebdevelopment.com/2009/03/modified-preorder-tree-traversal.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3564531562518398146/posts/default/1946788361532075487'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3564531562518398146/posts/default/1946788361532075487'/><link rel='alternate' type='text/html' href='http://www.improvewebdevelopment.com/2009/03/modified-preorder-tree-traversal.html' title='Modified Preorder Tree Traversal'/><author><name>Steve Robison</name><uri>http://www.blogger.com/profile/08212268651071905237</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3564531562518398146.post-7674282945787868690</id><published>2009-03-15T08:37:00.006-04:00</published><updated>2009-03-15T10:08:14.063-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mapping'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='geocoding'/><title type='text'>The History of Geocoding and Distance Calculation on the Web</title><content type='html'>I have been working on a project that will allow for hunters to mark on a map where they have hunted and what animals they have brought down.  The website should be launched in the next month or two.  In working on this project, I've been researching what is new in the geocoding world.  Not surprisingly, much has changed in the past few years.  In this article, I'll be going over the old way of geocoding.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So what is geocoding?&lt;/div&gt;&lt;div&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style=""&gt;&lt;a href="http://en.wikipedia.org/wiki/Geocoding"&gt;Geocoding&lt;/a&gt; is the process of finding associated geographic coordinates (often expressed as latitude and longitude) from other geographic data, such as street addresses, or zip codes (postal codes). (Source: Wikipedia)&lt;/span&gt;&lt;/blockquote&gt;This process is vital for all sorts of applications.  In the past, you purchased a zip code database from one of several vendors.  I've always used &lt;a href="http://www.melissadata.com/"&gt;Melissa Data&lt;/a&gt;.  This would tell you the latitude and longitude coordinates on a zip code level.  Census data would also be included in the database.  Back then, before Google Maps and similar allowed for mapping to be used to develop applications on your website, this was about all the level of specificity you could get without spending lots of money.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Once you had this database, you could calculate the &lt;span class="Apple-style-span" style="font-style: italic;"&gt;as a crow flies mileage&lt;span class="Apple-style-span" style="font-style: normal;"&gt; between zip codes&lt;/span&gt;.  &lt;/span&gt;This mileage can be calculated using the following algorithm from &lt;a href="http://www.meridianworlddata.com/Distance-Calculation.asp"&gt;Meridian World Data&lt;/a&gt;.  &lt;/div&gt;&lt;div&gt;&lt;blockquote&gt;&lt;div&gt;&lt;span class="Apple-style-span" style=""&gt;sqrt(x * x + y * y)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style=""&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style=""&gt;where x = 69.1 * (lat2 - lat1) &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style=""&gt;and y = 53.0 * (lon2 - lon1) &lt;/span&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Depending on the level of accuracy needed for the application, you can use &lt;a href="http://www.meridianworlddata.com/Distance-Calculation.asp"&gt;different formulas&lt;/a&gt;.  In most cases, I've found the above algorithm accurate enough.  As an added bonus, the above formula is simple enough to easily use in a database SQL statement.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;An example of an application would be a company that delivers widgets to a local area.  Based on the mileage, the delivery charge can be assessed.  Another example would be a news website that if it knows the users zip code, they can provide news that is more local.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Admittedly, the above formula won't get exact mileage for routing for a couple of reasons.  One, the calculation is &lt;span class="Apple-style-span" style="font-style: italic;"&gt;as a crow flies&lt;/span&gt; meaning that the calculated mileage takes no consideration of the roads that you would have to take.  As an extreme example, imagine you are on a Delaware beach and want to get to New Jersey (I have no idea why anyone would want that).  The &lt;span class="Apple-style-span" style="font-style: italic;"&gt;as a crow flies mileage&lt;/span&gt; would be about 25 miles.  The actual driving distance is closer to 167 miles.   Extreme examples aside, &lt;span class="Apple-style-span" style="font-style: italic;"&gt;as a crow flies mileage&lt;/span&gt; is usually pretty close to the actual driving distance.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The other issue with this is that you are only calculating zip code to zip code.  If the origin address is in Lewes, Delaware and the destination address is in Milton, Delaware, the distance based on the above calculation would be the center of Lewes, Delaware to the center of Milton, Delaware. What if I am at the north end of Lewes and travelling to a home in the south-east end of Milton?  The distance might only be 5 miles instead of the 12 miles from the center of zip code calculation.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I'm providing extreme examples to prove a point of the inaccuracy of these old methods.  In reality, you can usually accept this level of accuracy.  In the delivery service example, you plan to make money on some delivery (where the actual distance is less than reported) while losing money on others (where actual distance is more than reported).  &lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Three or four years ago, this was all we had (without paying lots of money for a routing service).  Good applications were still being built if not quite as accurate as everyone would have liked.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Fast forward to now and we have several providers (&lt;a href="http://code.google.com/apis/maps/documentation/geocoding/index.html"&gt;Google&lt;/a&gt; and &lt;a href="http://developer.yahoo.com/maps/rest/V1/geocode.html"&gt;Yahoo!&lt;/a&gt; among others) that provide an HTTP based geocoding service.  Mapping is becoming easier to integrate into your website.  The level of accuracy is at an address level compared to the zip code level of yesterday.  In another post, I will discuss the current implementation of geocoding and the maturation of the applications that can be built as a result.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3564531562518398146-7674282945787868690?l=www.improvewebdevelopment.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.improvewebdevelopment.com/feeds/7674282945787868690/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.improvewebdevelopment.com/2009/03/history-of-geocoding-and-distance.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3564531562518398146/posts/default/7674282945787868690'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3564531562518398146/posts/default/7674282945787868690'/><link rel='alternate' type='text/html' href='http://www.improvewebdevelopment.com/2009/03/history-of-geocoding-and-distance.html' title='The History of Geocoding and Distance Calculation on the Web'/><author><name>Steve Robison</name><uri>http://www.blogger.com/profile/08212268651071905237</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3564531562518398146.post-3111317489660371645</id><published>2009-03-03T12:18:00.009-05:00</published><updated>2009-03-03T13:02:52.322-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='joomla'/><category scheme='http://www.blogger.com/atom/ns#' term='web design'/><category scheme='http://www.blogger.com/atom/ns#' term='cms'/><category scheme='http://www.blogger.com/atom/ns#' term='graphic design'/><category scheme='http://www.blogger.com/atom/ns#' term='templates'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='html'/><category scheme='http://www.blogger.com/atom/ns#' term='css'/><title type='text'>Graphic Design and Hosting Selection - Joomla Install Step By Step Instructions - Step 1</title><content type='html'>I've been using &lt;a href="http://www.joomla.org/"&gt;Joomla&lt;/a&gt; over the past half a year now.  The application works very well for professional website design projects.  The Joomla application itself is free under the &lt;a href="http://www.gnu.org/licenses/old-licenses/gpl-2.0.html"&gt;GPL license&lt;/a&gt;.  I enjoy using Joomla because it allows me to focus on my clients and building great websites instead of having to program functionality that has been built many time before.  &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In this series of articles, I will go through the steps that I use to build a Joomla content managed website.  I have been using Joomla almost exclusively for the past six months and have setup approximately 15 websites (not all launched yet).    I will be going through the process that I use to setup a website.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;First step, is to have a graphic designer design a great look for your website.  Alternatively, you can select a template from one of several websites.  &lt;a href="http://www.templatemonster.com/joomla-templates.php"&gt;Monster Templates&lt;/a&gt; has many great templates built specifically for Joomla.  &lt;a href="http://www.rockettheme.com/"&gt;RocketTheme&lt;/a&gt; has also been a great source for finding a good template to for the website.  While we prefer to also have a graphic designer create a custom built design, sometimes that just isn't in the budget.  Purchasing a template will also free you from programming the CSS and html template files.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Once you've performed this, you'll need to select a hosting provider.  I have had experience hosting websites at the company I worked for, using a local vendor and using a national vendor.  My best experience has been with the national vendors.  While the tech support can be a little lacking sometimes, they have invested enough time in the server setups that little needs to be asked of them.  Some of the hosts that I have experience with are &lt;a href="http://www.inmotionhosting.com/"&gt;InMotion Hosting&lt;/a&gt;, &lt;a href="http://www.hostmonster.com/"&gt;Host Monster&lt;/a&gt;, and &lt;a href="http://www.hostgator.com/"&gt;Host Gator&lt;/a&gt;.  For email, I use Google Apps.  It is currently free and provides excellent SPAM protection free of charge.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I would also recommend that if you are also purchasing a domain, do not purchase the domain through your host.  Use a domain registrar like GoDaddy (make sure they have free DNS management).  This makes it much easier to move the website if your host selected isn't satisfactory.  I have some horror stories where a client's website had to go down for 5 days while the domain was transferred away from the current host.  If the domain registrar was elsewhere, this would have been avoided.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;After the above steps have completed, you will be able to actually create your Joomla install, install some components and modules, and begin actually creating content.  I will cover how to accomplish these steps in the installment of this series.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3564531562518398146-3111317489660371645?l=www.improvewebdevelopment.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.improvewebdevelopment.com/feeds/3111317489660371645/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.improvewebdevelopment.com/2009/03/graphic-design-and-hosting-selection.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3564531562518398146/posts/default/3111317489660371645'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3564531562518398146/posts/default/3111317489660371645'/><link rel='alternate' type='text/html' href='http://www.improvewebdevelopment.com/2009/03/graphic-design-and-hosting-selection.html' title='Graphic Design and Hosting Selection - Joomla Install Step By Step Instructions - Step 1'/><author><name>Steve Robison</name><uri>http://www.blogger.com/profile/08212268651071905237</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3564531562518398146.post-4910763834204922052</id><published>2009-02-19T22:14:00.004-05:00</published><updated>2009-03-15T11:06:38.034-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='theory'/><category scheme='http://www.blogger.com/atom/ns#' term='books'/><category scheme='http://www.blogger.com/atom/ns#' term='history'/><title type='text'>Ubiquity: Why Catastrophes Happen</title><content type='html'>An interesting book written by Mark Buchanan.  The book sets out to find why catastrophes happen.  What is the difference between the 1906 San Francisco earthquake to the 10,000 earthquakes that happen in California every year?  Why do some wildfires cause massive damage while others go unnoticed?  What about major wars compared to minor conflicts?&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The book goes through all of these cases, along with many more, in an attempt to find a pattern in the difference between a catastrophe and a minor blip in time.  The results, backed by many different researchers in different fields, are unsettling.  In each case study, a power scale is found.  Basically, an earthquake that is 1.0 on the Richter scale is 4 times more likely to occur than a 2.0 earthquake.  And a 2.0 earthquake is 2.2 times more likely to occur than a  3.0 earthquake and so on.  The power scale number will vary based on what is being studied.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The book goes on to talk about many more examples like wars and international conflicts.   What made the World War II a huge war compared to some of the smaller conflicts that have occurred over the years? What can be done to forecast the probability of these catastrophes?  Stunningly, the difference ability to forecast the severity of a war is just as impossible as attempting to forecast the severity of an earthquake or forest fire.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In the end, you learn that when something gets into a critical state, the severity of occurrences cannot be determined.  A little disconcerting but also fascinating that you can look at anything in a critical state and, once you find its power law, can spot the similarities of the chance of occurrence.&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3564531562518398146-4910763834204922052?l=www.improvewebdevelopment.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.improvewebdevelopment.com/feeds/4910763834204922052/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.improvewebdevelopment.com/2009/02/ubiquity-why-catastrophes-happen.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3564531562518398146/posts/default/4910763834204922052'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3564531562518398146/posts/default/4910763834204922052'/><link rel='alternate' type='text/html' href='http://www.improvewebdevelopment.com/2009/02/ubiquity-why-catastrophes-happen.html' title='Ubiquity: Why Catastrophes Happen'/><author><name>Steve Robison</name><uri>http://www.blogger.com/profile/08212268651071905237</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3564531562518398146.post-7459335407722428106</id><published>2009-02-10T08:07:00.003-05:00</published><updated>2009-02-12T22:45:30.452-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='design'/><category scheme='http://www.blogger.com/atom/ns#' term='books'/><category scheme='http://www.blogger.com/atom/ns#' term='architecture'/><title type='text'>The Timeless Way of Building</title><content type='html'>The book, "The Timeless Way of Building", by Christopher Alexander is a philosophical book about the theory behind architecture.  His main belief is that if you create the goals (or patterns) of what should be in each room then with enough thought you can create a room that meets all of these goals.  These patterns, that at first seem to conflict with each other, can be put together like a puzzle with enough thought and belief that you will succeed.  &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;As I'm not an architect, I like to take his way of thinking and try to apply it in my profession as a website programmer.  Look at a website as a house.  A house has rooms while a website has sections.  Each room has different patterns (or requirements) which must be upheld in order to create a successful room.  Each website section also has different requirements which must be met in order to create a successful website section.  When you are planning your house or website and writing down all the patterns that must be met, some of the patterns will seem to conflict.  The authors main premise is that with enough creativity and belief in you ability to find a solution, you will be able to meet all of these patterns to make a great room (or website section).  Then, each room or website section will have to be pieced together to create that great finalized home or website. &lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;While we've always kind of inherently known this to be true, the way he describes it puts words into the general feeling we've all had when building these websites.  While the scope of the book is completely about building houses, communities, or towns, you will be able to transfer its meaning to your area of work.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;As an added bonus, you may also get inspired to design your own home (architects beware!).   When I have the ability to build a new home, I will now certainly create the general blueprints using the book and the two other in the series as a guide.  I've already got an outline in my head about all of the rooms that I'd like and the general feel that I would want to go for in my home.  Obviously, I'll hand these rough draft to a professional to validate that plans before actually building the home.&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;This book should apply well to any profession, including web development and programming. The idea that with enough planning and belief in finding a solution, you can create a solution that meets all your goals without eliminating any.  At first, this sounds too pure and simplistic to actually work.  While not easy, it certainly is able to be accomplished if you believe it can be and are willing to put in the work to make it so. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3564531562518398146-7459335407722428106?l=www.improvewebdevelopment.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.improvewebdevelopment.com/feeds/7459335407722428106/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.improvewebdevelopment.com/2009/02/timeless-way-of-building.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3564531562518398146/posts/default/7459335407722428106'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3564531562518398146/posts/default/7459335407722428106'/><link rel='alternate' type='text/html' href='http://www.improvewebdevelopment.com/2009/02/timeless-way-of-building.html' title='The Timeless Way of Building'/><author><name>Steve Robison</name><uri>http://www.blogger.com/profile/08212268651071905237</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3564531562518398146.post-6155451616588520440</id><published>2009-01-31T09:38:00.005-05:00</published><updated>2009-02-03T22:27:13.908-05:00</updated><title type='text'>Selling A Product Online</title><content type='html'>I get asked often from friends or clients about e-commerce.  Most people want to get involved with e-commerce in some way because everyone senses the easiness to make a profit.  I'm not here today to discuss the validity of how easy it is to sell online.  What I am going to do is go through the different options out there.  &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You can go with one of the big guys, like EBay, Yahoo! Store or Amazon WebStore.  These options give you a certain amount of credibility and traffic.  As you might expect the take a cut of the profit through a monthly fee or a percentage of sales or both.   In return for this they take care of the merchant account and a certain amount of the marketing.  If you are in the right market, these options can work.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Another option is some of the middle-tier SAAS e-commerce sites out there.  Some of the prominent ones are Shopify and Vcart.  These services will generally cost less (when considering per sale fee) then EBay, Yahoo! Store or Amazon WebStore.  While the cost is lower, the marketing that the bigger guys help with either goes away entirely or is greatly reduced.  These can be useful if you want to do a lot of marketing for website but don't have the technical expertise (or desire) to manage a custom built store.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The final option out there is to use an open-source commerce solution.   You can go two ways here.  A pure commerce solution like Miva Merchant, osCommerce, Zen Cart, and Ubercart.  Or, you can use an extension of an open source CMS solution out there like Joomla or Drupal.  While have experience with most of these options here, I prefer to go with a pure commerce solution because that is there main focus while the CMS extension is just an afterthought.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I will go more in depth with discussion about some of these options as I use them.  Currently I am developing under an osCommerce platform, Joomla and Drupal extensions.  While osCommerce is a little rough around the edges, if you put the time in, it seems to be the best of the ones I've tried.  I still intend to try out Miva Merchant, Zen Cart and Ubercart so I can have a broader view of the options out there.  As I try these out I'll have some more posts here.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3564531562518398146-6155451616588520440?l=www.improvewebdevelopment.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.improvewebdevelopment.com/feeds/6155451616588520440/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.improvewebdevelopment.com/2009/01/selling-product-online.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3564531562518398146/posts/default/6155451616588520440'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3564531562518398146/posts/default/6155451616588520440'/><link rel='alternate' type='text/html' href='http://www.improvewebdevelopment.com/2009/01/selling-product-online.html' title='Selling A Product Online'/><author><name>Steve Robison</name><uri>http://www.blogger.com/profile/08212268651071905237</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3564531562518398146.post-7006425370566605379</id><published>2009-01-27T07:33:00.005-05:00</published><updated>2009-02-03T22:26:50.932-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='joomla'/><category scheme='http://www.blogger.com/atom/ns#' term='web design'/><category scheme='http://www.blogger.com/atom/ns#' term='cms'/><title type='text'>Free CMS Websites?</title><content type='html'>So at Fine Line IT, we mainly develop websites using the &lt;a href="http://www.joomla.org/"&gt;Joomla&lt;/a&gt;&lt;a href="http://www.joomla.org/"&gt; platform&lt;/a&gt;.  We have had great success using the platform so far with the few expected annoyances.   For the most part it is free, enough of the components / modules work great and the platform is easy enough to customize for your needs when the Joomla component doesn't work just right.  &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The main reason anyone goes to an Open Source CMS platform is that it is free.  Nothing beats free, right?  When, we began the process of starting Fine Line IT, we decided we like free.  We looked intensely for all products that were of no monetary costs.  While other options exist in the free CMS arena, for various reasons, we chose Joomla.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So far, we have been impressed with Joomla.  We have been able to accomplish everthing we want in a website using the CMS application and several of its components.  I will begin to discuss the different components we use on another post.  Suffice to say, if you look hard enough at the 1,000's of components Joomla developers offer, you can find a good quality free one that is close enough to solving your solution (forms, photo galleries, google map, etc) that it can be customized slightly to be perfect.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In the coming months, I will descuss in detail some of the components that we use and how we use them to build great quality websites.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3564531562518398146-7006425370566605379?l=www.improvewebdevelopment.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.improvewebdevelopment.com/feeds/7006425370566605379/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.improvewebdevelopment.com/2009/01/free-cms-websites.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3564531562518398146/posts/default/7006425370566605379'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3564531562518398146/posts/default/7006425370566605379'/><link rel='alternate' type='text/html' href='http://www.improvewebdevelopment.com/2009/01/free-cms-websites.html' title='Free CMS Websites?'/><author><name>Steve Robison</name><uri>http://www.blogger.com/profile/08212268651071905237</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3564531562518398146.post-8386239315643898003</id><published>2009-01-26T12:51:00.003-05:00</published><updated>2009-02-03T22:27:40.744-05:00</updated><title type='text'>Reopening of Improve Development</title><content type='html'>The improvedevelopment.com blog has gone live today.  This blog's intended audience is for like-minded programmers and web developers.  The blog will discuss anything in the programming / web development world.  This could be anything from discussing the use of an extension in Joomla to talking about project management of web sites.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3564531562518398146-8386239315643898003?l=www.improvewebdevelopment.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.improvewebdevelopment.com/feeds/8386239315643898003/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.improvewebdevelopment.com/2009/01/reopening-of-improve-development.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3564531562518398146/posts/default/8386239315643898003'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3564531562518398146/posts/default/8386239315643898003'/><link rel='alternate' type='text/html' href='http://www.improvewebdevelopment.com/2009/01/reopening-of-improve-development.html' title='Reopening of Improve Development'/><author><name>Steve Robison</name><uri>http://www.blogger.com/profile/08212268651071905237</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
