<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	
	xmlns:georss="http://www.georss.org/georss"
	xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"
	>

<channel>
	<title>Web Development 2.0: Web Design, ASP.NET MVC, CakePHP, Javascript</title>
	<atom:link href="https://webdevelopment2.com/feed/?cat=-18" rel="self" type="application/rss+xml" />
	<link>https://webdevelopment2.com</link>
	<description>Quick and Dirty Web Development for Web 2.0: ASP.NET MVC, CakePHP, JQuery, and lots more.</description>
	<lastBuildDate>Fri, 11 Nov 2016 03:33:38 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=5.3.1</generator>
<site xmlns="com-wordpress:feed-additions:1">1921204</site>	<item>
		<title>Deploy WordPress with Fabric</title>
		<link>https://webdevelopment2.com/deploy-wordpress-fabric/</link>
				<pubDate>Thu, 02 May 2013 03:46:16 +0000</pubDate>
		<dc:creator><![CDATA[Kevin Lloyd]]></dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[deployment]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://webdevelopment2.com/?p=722</guid>
				<description><![CDATA[After reading this article, I started thinking more about my WordPress deployment process. Like everyone, I started out with FTP. I got the job done without a whole lot of fuss. When I finished developing a site, I simply uploaded the entire folder and I was done. When my development process matured a bit more, I [&#8230;]]]></description>
								<content:encoded><![CDATA[<p><a href="https://i0.wp.com/webdevelopment2.com/wp-content/uploads/sewing-machine.jpg?ssl=1"><img class="size-medium wp-image-721 " src="https://i0.wp.com/webdevelopment2.com/wp-content/uploads/sewing-machine.jpg?resize=300%2C169&#038;ssl=1" alt="by RevAllyson" width="300" height="169" srcset="https://i0.wp.com/webdevelopment2.com/wp-content/uploads/sewing-machine.jpg?resize=300%2C169&amp;ssl=1 300w, https://i0.wp.com/webdevelopment2.com/wp-content/uploads/sewing-machine.jpg?resize=1024%2C577&amp;ssl=1 1024w, https://i0.wp.com/webdevelopment2.com/wp-content/uploads/sewing-machine.jpg?w=2048&amp;ssl=1 2048w" sizes="(max-width: 300px) 100vw, 300px" data-recalc-dims="1" /></a></p>
<p>After reading <a href="http://wp.smashingmagazine.com/2013/04/15/wordpress-deployment-survey/">this article</a>, I started thinking more about my WordPress deployment process.</p>
<p>Like everyone, I started out with FTP. I got the job done without a whole lot of fuss. When I finished developing a site, I simply uploaded the entire folder and I was done.</p>
<p>When my development process matured a bit more, I needed to maintain sites and make more frequent changes. This is where I got started with <a title="Gitting Started with Git – Quick and Dirty" href="https://webdevelopment2.com/gitting-started-git/">Git</a>. FTP became a slight problem because I was never sure which files I needed to upload. So I was forced to upload the entire folder just to ensure that all my changes made it to the server. As sites got bigger, this became a bigger pain in the butt.</p>
<h3>Git Deployment</h3>
<p>Since Git had worked so well for me in the past, it was a matter of time before I got started with the <a title="Git Workflow" href="https://gist.github.com/rmanalan/735260">Git Workflow</a>. I&#8217;ll have to admit, for the site I got set up on this, it worked great. The reason this worked fine is that all the sites I managed and my Git repository were on the same server. I won&#8217;t got through the issues on installing <a href="http://rcrisman.net/article/9/installing-git-on-hostmonster-bluehost-accounts">Git on a shared host</a>. When adding a new site to my workflow, I would have to do the following:</p>
<ul>
<li><span style="line-height: 13px;">Add the new Git repository to the server</span></li>
<li>Modify the post-receive script</li>
</ul>
<p>Again, this worked great. Everything was integrated and I could deploy on the command line. I was really proud of myself. Then came one client that had their own server. Installing Git was simply not an option. Even if I did, I would have to jump through the hoops of SSH keys from their server to mine. It just didn&#8217;t work. I was back to the stone age of good old FTP.</p>
<h3>Enter Fabric</h3>
<p>I&#8217;ve had conversations with a friend of mine who is doing some <a href="https://www.djangoproject.com/">Django</a> development. He started out using <a href="http://docs.fabfile.org/en/1.6/">Fabric</a> for deployment. He showed me one of his deploy scripts and then I was absolutely sold.</p>
<p>Fabric essentially gives you an easy way to run commands on a remote host. I like it because it doesn&#8217;t require much on server the side. I am using their <a href="http://docs.fabfile.org/en/1.6/api/contrib/project.html">rsync <em>plugin</em></a> and that&#8217;s practically everywhere. Rsync handles my issues of only pushing things that have changed; something I got to like with Git.</p>
<p>So enough talk, here&#8217;s my fabfile.py script:</p>
<pre class="brush: python; title: ; notranslate">
from __future__ import with_statement
from fabric.api import *
from fabric.contrib.project import *

# Deployment settings
dir = '~/www/wp-content/'
exclude_sync = ('uploads', '.DS_Store','.git', '*.pyc', '*.py', 'build', '.htaccess', 'wp-config.php', '.sass-cache', '*.log', '*.tmp', '*.bak', '*.sublime-*'
	, 'cache', 'infinitewp', 'upgrade')
env.hosts = ['site.com']
env.user = 'username'
env.password = 'password'
local_dir = '/xampp/wordpress/site/wp-content/'

def deploy():
	local('compass compile -e production --force')
	rsync_project(remote_dir = dir, local_dir = local_dir, exclude = exclude_sync, delete = False)
</pre>
<p>I run this by typing <code>fab deploy</code> on the command line. That&#8217;s it. A quick summary of my script:</p>
<ul>
<li><span style="line-height: 13px;">You set up some configurations</span></li>
<li>Set up your <em>command</em></li>
</ul>
<p>As you can assume the <em>local</em> command runs scripts locally. Here, I&#8217;m compiling my <a title="Getting Sassy with Compass and Sass" href="https://webdevelopment2.com/getting-sassy-with-compass-and-sass/">SASS</a> scripts for deployment. Other minifying stuff could go here also and other clean up.</p>
<p>The <em>rsync_project</em> command is a wrapper for the rsync command that runs on the server. If you don&#8217;t need rsync, you can call the <em>run</em> command to run stuff on the server.</p>
<p>Fabric is very flexible that way. If you don&#8217;t like or need the rsync command, you can use Git if you like. You would use <em>local</em> to run <em>git commit</em>, <em>git push</em>; then use <em>run</em> to do a <em>git pull</em> on the server. That way it&#8217;s very similar to the git workflow. The reason I prefer this is that everything is self contained in the fabfile. I&#8217;m not having to juggle multiple post-receive scripts everywhere.</p>
<p>Hope the simplicity will help you guys.</p>
]]></content:encoded>
									<post-id xmlns="com-wordpress:feed-additions:1">722</post-id>	</item>
		<item>
		<title>jQuery Dropping Support for IE6, IE7 and IE8 &#8211; Mixed Emotions</title>
		<link>https://webdevelopment2.com/jquery-dropping-support-ie6-ie7/</link>
				<pubDate>Sun, 01 Jul 2012 15:17:10 +0000</pubDate>
		<dc:creator><![CDATA[Kevin Lloyd]]></dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[ie]]></category>
		<category><![CDATA[internet explorer]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://webdevelopment2.com/?p=643</guid>
				<description><![CDATA[I came across this article from the jQuery blog, talking about future updates to version 1.9 and 2.0. jQuery 1.9 (early 2013): We’ll remove many of the interfaces already deprecated in version 1.8; some of them will be available as plugins or alternative APIs supported by the jQuery project. IE 6/7/8 will be supported as [&#8230;]]]></description>
								<content:encoded><![CDATA[<p>I came across this article from the <a href="http://blog.jquery.com/2012/06/28/jquery-core-version-1-9-and-beyond/">jQuery blog</a>, talking about future updates to version 1.9 and 2.0.</p>
<blockquote>
<ul>
<li>jQuery 1.9 (early 2013): We’ll remove many of the interfaces already deprecated in version 1.8; some of them will be available as plugins or alternative APIs supported by the jQuery project. IE 6/7/8 will be supported as today.</li>
<li>jQuery 1.9.x (ongoing in 2013 and beyond): This version will continue to get fixes for any regressions, new browser bugs, etc.</li>
<li>jQuery 2.0 (early 2013, not long after 1.9): This version will support the same APIs as jQuery 1.9 does, but removes support for IE 6/7/8 oddities such as borked event model, IE7 “attroperties”, HTML5 shims, etc.</li>
</ul>
</blockquote>
<h2>Initial Reaction</h2>
<p>My initial thought about this. was that, it&#8217;s about time! Internet Explorer has been the bain of my existence for longer than I can remember. I&#8217;m sure many web developers share that sentiment. The jQuery core could would be leaner, cleaner and faster without having all the hacks and workarounds to support IE. It&#8217;s a win win for everyone.</p>
<h2>Cross Browser Functionality</h2>
<p>Then it hit me: how would I get all of the cross browser functionality to work? Whether it&#8217;s right or wrong, I&#8217;ve been relying on jQuery as my cross browser abstraction layer. And it&#8217;s worked out very well so far. I mean, I get why we&#8217;d want to drop IE6/7, but IE8? There&#8217;s still a huge market share there; something that can&#8217;t be ignored.</p>
<p>I remembered back to early 2007 what brought me to jQuery. I asked a work (not a web development company) to fix a &#8220;bug&#8221; with some JavaScript. I&#8217;ve never been a JavaScript developer. But hey, &#8220;It&#8217;s just like C&#8221;, right? I finally got the bug working in my favorite browser at the time (Firefox). No surprise, it shipped and came back a couple of days later, because it didn&#8217;t work in IE6. I didn&#8217;t even have this thing installed.</p>
<p>Long story short, I slapped jQuery on there, bug was gone in all browsers. About a year later, Microsoft saw the light and even started shipping jQuery with Visual Studio. All was well with the world.</p>
<p>Now, jQuery is going to drop support. This means, for guys like myself, we&#8217;re going to have to go back to all those IE hacks to get things to work in older browsers.</p>
<h2>It&#8217;s Not As Bad As It Sounds</h2>
<p>Reading the blog post over gave light to the solution. Simply use jQuery 1.9 on IE browsers, duh!</p>
<p>&#8220;But I won&#8217;t get all the new awesome features of jQuery 2.0&#8221;.</p>
<p>That&#8217;s true, but if you really think about it, who cares? It&#8217;s pretty much the same for CSS3. Take rounded corners, for example. We&#8217;ve pretty much stopped doing <a title="Crazy Rounded Corners" href="https://webdevelopment2.com/rounded-corners-jquery-css/">crazy things</a> to implement them in older browsers. The general consensus is that new browsers will get the benefits of newer features and old browser (*cough* IE) will have a gracefully degraded experience.</p>
<p>The same should be true for this jQuery issue. A lot of people aren&#8217;t happy about this decision, but it&#8217;s not the end of the world. Use conditional comments to include version 1.9 for older versions 2.0 for IE9 and up. Done.</p>
<p>With all of this said, no one knows what features will be added in 2.0, so why make a fuss about it now? From the looks of the post, the API will be the same as 1.9, so that seems to imply no new features will be added. 1.9 will still get bug fixes, so this only becomes a problem for jQuery 2.1.</p>
<p>If a website supports an older version of IE, it should be acceptable to use an older version of jQuery, right? I have sites that I&#8217;ve done in the past that still use jQuery 1.2. No one has called me to complain yet.</p>
<p>So to all I say, let&#8217;s not make a mountain out of a molehill, until this actually becomes a problem.</p>
]]></content:encoded>
									<post-id xmlns="com-wordpress:feed-additions:1">643</post-id>	</item>
		<item>
		<title>Getting Sassy with Compass and Sass</title>
		<link>https://webdevelopment2.com/getting-sassy-with-compass-and-sass/</link>
				<comments>https://webdevelopment2.com/getting-sassy-with-compass-and-sass/#comments</comments>
				<pubDate>Thu, 28 Jun 2012 12:05:28 +0000</pubDate>
		<dc:creator><![CDATA[Kevin Lloyd]]></dc:creator>
				<category><![CDATA[CSS]]></category>

		<guid isPermaLink="false">http://webdevelopment2.com/?p=604</guid>
				<description><![CDATA[Well last night I finally took the plunge and now I don&#8217;t know what it is I was waiting for all these years. Sass enables you to create CSS with much less effort than before. It brings CSS closer to the programming language that we all wish it was. Let&#8217;s get down to some of the features. [&#8230;]]]></description>
								<content:encoded><![CDATA[<div>
<div>
<div>Well last night I finally took the plunge and now I don&#8217;t know what it is I was waiting for all these years.</div>
</div>
</div>
<p><a href="http://sass-lang.com/tutorial.html">Sass</a> enables you to create CSS with much less effort than before. It brings CSS closer to the programming language that we all wish it was.</p>
<p>Let&#8217;s get down to some of the features.</p>
<h2>Sass Features</h2>
<h3>Variables</h3>
<p>Right now,  this is going to be the feature I make the most use of. The obvious application is with color schemes.</p>
<p>Imagine that your site follows some sort of color scheme (yes,  I know. A real stretch of the imagination). Your links, background images, borders, etc will all share common color definitions.</p>
<pre class="brush: css; title: ; notranslate">
$main-color: #ce4dd6;
$style: solid;

#navbar {
  border-bottom: {
    color: $main-color;
    style: $style;
  }
}

a {
  color: $main-color;
  &amp;:hover { border-bottom: $style 1px; }
}
</pre>
<p>It will generate the following code:</p>
<pre class="brush: css; title: ; notranslate">
a {
  color: #ce4dd6; }
  a:hover {
    color: #ffb3ff; }
  a:visited {
    color: #c458cb; }</pre>
<p>This is a trivial example, but imaging you decide to keep your layout but alter your colors slightly. In the old days search and replace would be the only way to go. Now we have options.</p>
<h3>Nesting</h3>
<p>So you need to apply some styles to your #navbar, then to the menus within it? No problem:</p>
<pre class="brush: css; title: ; notranslate">
#navbar {
  width: 80%;
  height: 23px;

  ul { list-style-type: none; }
  li {
    float: left;
    a { font-weight: bold; }
  }
}
</pre>
<p>This generates:</p>
<pre class="brush: css; title: ; notranslate">
#navbar {
  width: 80%;
  height: 23px; }
#navbar ul {
  list-style-type: none; }
#navbar li {
  float: left; }
#navbar li a {
  font-weight: bold; }
</pre>
<p>The syntax just makes CSS a little better to work with, in my opinion.</p>
<h3>Mixins</h3>
<p>One way to think of <em>Mixings</em> is as <em>multi-line variables</em>. You define a block of CSS that you can reuse with one statement. Consider the following:</p>
<pre class="brush: css; title: ; notranslate">
@mixin rounded-top {
 $side: top;
 $radius: 10px;

border-#{$side}-radius: $radius;
 -moz-border-radius-#{$side}: $radius;
 -webkit-border-#{$side}-radius: $radius;
}

#navbar li { @include rounded-top; }
#footer { @include rounded-top; }
</pre>
<p>Will generate:</p>
<pre class="brush: css; title: ; notranslate">
#navbar li {
 border-top-radius: 10px;
 -moz-border-radius-top: 10px;
 -webkit-border-top-radius: 10px; }

#footer {
 border-top-radius: 10px;
 -moz-border-radius-top: 10px;
 -webkit-border-top-radius: 10px; }
</pre>
<p>So similarly, if you decide <strong>all </strong>the borders on your website need to change, you simply change the mixin and it propagates. Really slick if you ask me.</p>
<p>There are a host of other features, but these are the ones I&#8217;ve exploited in my 3 hours of plaining with this thing.</p>
<h2>Compass</h2>
<p>Now down to the business of how you actually use this thing. Thus far, we&#8217;ve only mentioned Sass. You can accomplish a lot with just that.</p>
<p><a title="Compass" href="http://compass-style.org/help/">Compass</a> is essentially a Sass wrapper. It comes with some built-in mixins and you can also add plug-ins. One that I found is <a href="http://rubygems.org/gems/compass-960-plugin">Compass 960 plugin</a>. As you can assume, it adds functionality for the <a href="http://960.gs">960 grid framework</a> (one of my personal favorites). The biggest benefit I see to this plugin is that it brings back semantics to your classes. No need for <em>countainer_16</em> anymore. Just imagine:</p>
<pre class="brush: css; title: ; notranslate">
#wrap
	+grid-container
	#header
		+grid(16)
	#middle
		+grid(16)
		#left-nav
			+grid(5)
			+alpha
		#main-content
			+grid-prefix(1)
			+grid(10)
			+omega
</pre>
<h3>Setup</h3>
<p>First of all, these are all Ruby Gems, so installation is a snap (even on your host):</p>
<pre class="brush: bash; title: ; notranslate">gem install compass</pre>
<p>Now go to a folder with some CSS you want to make sassy:</p>
<pre class="brush: bash; title: ; notranslate">
# Copy your original files to sass files. The syntax is identical to CSS, so no extra work needed here.
mv *.css *.scss

# Initialize compass
compass init

# modify the default config file appropriately. There are things like output style, default directories, etc.
vi config.rb

# Compile sass files to CSS
compass compile

# or continually watch the folder:
compass watch

</pre>
<p>In watch mode, Compass will detect any changes to your *.scss files and dynamically generate the CSS file.</p>
<p>I encourage everyone, even <a title="Ruby Installer for Windows" href="http://rubyinstaller.org/">Windows Users</a>, to take a look at Compass and Sass. It will change the way you think about CSS.</p>
]]></content:encoded>
							<wfw:commentRss>https://webdevelopment2.com/getting-sassy-with-compass-and-sass/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
						<post-id xmlns="com-wordpress:feed-additions:1">604</post-id>	</item>
		<item>
		<title>Reader Input: Picking A CMS – Part 4</title>
		<link>https://webdevelopment2.com/picking-cms-4-looking-at-drupal/</link>
				<comments>https://webdevelopment2.com/picking-cms-4-looking-at-drupal/#comments</comments>
				<pubDate>Fri, 25 Dec 2009 14:50:18 +0000</pubDate>
		<dc:creator><![CDATA[Kevin Lloyd]]></dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[cms]]></category>
		<category><![CDATA[drupal]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://webdevelopment2.com/?p=544</guid>
				<description><![CDATA[In The Series Part 1 Part 2 Part 3 Part 4 So, when we left off in part two, I was leaning towards WordPress as a candidate for a CMS. It&#8217;s popular, has tons of themes, plugins, etc. It&#8217;s almost perfect, but for only certain situations. Enter Drupal Now, I&#8217;ve been hearing a lot about [&#8230;]]]></description>
								<content:encoded><![CDATA[<h2>In The Series</h2>
<ul>
<li><a href="https://webdevelopment2.com/picking-a-cms-part-1/">Part 1</a></li>
<li><a href="https://webdevelopment2.com/picking-a-cms-2-new-standards/">Part 2</a></li>
<li><a href="https://webdevelopment2.com/picking-a-cms-3-wordpress-as-a-cms/">Part 3</a></li>
<li><a href="/picking-cms-4-looking-at-drupal">Part 4</a></li>
</ul>
<p>So, when we left off in part two, I was leaning towards WordPress as a candidate for a CMS. It&#8217;s popular, has tons of themes, plugins, etc. It&#8217;s almost perfect, but for only certain situations.</p>
<h2>Enter Drupal</h2>
<p>Now, I&#8217;ve been hearing a lot about <a href="http://drupal.org">Drupal</a>. For years now. I tried it once and I didn&#8217;t like it. However, since then, I&#8217;ve revisited it. And I&#8217;m happy I did.</p>
<p>I must admit, it had a lot to do with president Obama winning the election. The <a href="http://drupal.org/whitehouse-gov-launches-on-drupal-engages-community">redesign</a> of <a href="http://Whitehouse.gov">Whitehouse.gov</a> was an eye opener. So I thought, if it&#8217;s good enough for the president, maybe I should give this thing a second look.</p>
<h2>Drupal Pros &#8211; Reminds Me Of WordPress</h2>
<ul>
<li><strong>Popularity</strong> &#8211; Again, like WordPress, a popular CMS is going to have an advantage over most newcomers because of support and community contributions.</li>
<li><strong>Modules</strong> &#8211; There are a lot of modules out there that will do most of what your mind can imagine out of the box.</li>
<li><strong>Themes</strong> &#8211; There&#8217;s a pretty extensive library of <a href="http://drupal.org/project/Themes">themes for Drupal</a> out there. What I haven&#8217;t seen though, are third party companies that specialize in these (WordPress has <a href="http://www.woothemes.com/">WooThemes</a>, after all). Personally, I&#8217;m less interested in readymade themes and more interested in ease of theme development.</li>
<li><strong>Theme Caching</strong> &#8211; I&#8217;ve said it before, I like the way this works. The consolidation and compression of all the theme CSS and JS files is awesome. It&#8217;s great that this works out of the box.</li>
<li><strong>Multisites</strong> &#8211; As the name says, this enables you to have tons of sites on the same server running off of the same code base. They can even share modules among themselves.</li>
</ul>
<h2>Highly Customizable</h2>
<p>One of the beauties of Drupal is how customizable it is. One of the best examples of these I&#8217;ve found is with the concept of an <strong>Administrative Theme</strong>. This is one thing I&#8217;ve notice that WordPress lacks. It is usually very difficult to theme and brand the backend. When clients click into it, they feel they are being tossed into a completely different world.</p>
<p>With a Drupal theme, if done right, the client may not even realize they are editing content.</p>
<h3>Extending Functionality</h3>
<p>Of course there are entire books dedicated to module development for Drupal. After an initial look, I&#8217;ve found the development framework to be a lot more robust that WordPress. However, this is another line that you need to be careful not to cross: <strong>The CMS vs. Custom Web Application line</strong>.</p>
<p>Generally, I try to find some built in modules or themes to do the things I need. With WordPress, we have things like <a href="http://flutter.freshout.us/">Flutter</a> and <a href="http://pods.uproot.us/">PODS</a>. In Drupal we have two modules: <a href="http://drupal.org/project/cck">Content Construction Kit (CCK)</a> and <a href="http://drupal.org/project/views">Views</a>.</p>
<p>As the name suggests, CCK enables you to <strong>add custom content types</strong> to your CMS. So, something like <em>events</em> would be quite easy to add. With these you get custom field types (text, image, date, time, etc) and a ton of other goodies.</p>
<p>The Views module allows you to define a custom &#8220;view&#8221; outside of your regular Page/Post set up. A classic use of this would be to display a list of upcoming events in your sidebar.</p>
<h2>Ease of Theming</h2>
<p>Now, I will say, it takes a while to get the hang of Drupal theming. It just takes time to understand how the system works. But once you&#8217;re gotten to that point, the ease of converting a nicely sliced PSD into a Drupal theme for a client is very evident. You just need to know where to start.</p>
<p>The easiest starting point I&#8217;ve found is with two Theming Frameworks: <a href="http://drupal.org/project/basic">Basic</a> and <a href="http://drupal.org/project/zen">Zen</a>. These two tools give you everything you need to get up and running with Drupal theming. They are very well documented and provide an excellent starting point.</p>
<h3>I love Overrides</h3>
<p>The first concept that you need to understand with Drupal theming is that <strong>everything&#8217;s a node or a block</strong>. There are just different types of nodes/blocks, based on content type (pages, post, etc), content name, and even module (CCK, Views, etc).</p>
<p>Much the same way, WordPress templates overrides index.php -&gt; page.php -&gt; page-1.php, etc; Drupal has the same concept, except much better, lol. Say you need your <em>events </em>styled differently from your <em>posts</em>; you would simply located your template file for the post (most likely node.tpl.php) copy it to the appropriate name (We&#8217;ll assume events have been implemented using the Views module, so the name would be something like views-view&#8211;events.tpl.php). You then open up that file and go wild with whatever design you need in there.</p>
<p>Don&#8217;t threat, there is a <a href="http://drupal.org/project/devel">Devel module</a> that helps you determine which names to use for your overrides simply by hovering over the element. If the file you&#8217;re looking for doesn&#8217;t exist in your theme, you simply go grab it out of the Drupal core files. <strong>I really love the modularity of the theming process</strong>. It feels cleaner that a lot of what I&#8217;ve seen in the past.</p>
<h2>What I&#8217;ve Learnt</h2>
<h3>A Good Cook Doesn&#8217;t Use Only One Knife</h3>
<p>Who ever said we need to pick one? I believe I&#8217;ve narrowed down things to WordPress and Drupal. I&#8217;ll use WordPress when I get a project that screams<strong> site or blog.</strong> Because WordPress does these things very well with <strong>Pages and Posts.</strong></p>
<p>When things get more complicated, I&#8217;ll transition into Drupal for a more custom and flexible approach.</p>
<h3>Stick To What You Know</h3>
<p>Talking about theming brings me to an interesting point. Now this is a touchy issue and I&#8217;ll simply say that it&#8217;s a personal preference and that the intended audience plays a huge role here.</p>
<p>The theming engine is very, very important for a CMS. I haven&#8217;t mentioned this in the past and I know realize that I&#8217;ve been making this decision subconsciously. Well now, I&#8217;d like to explicitly state it:</p>
<p><strong>I prefer a PHP theming engine.</strong></p>
<p>There, I said it. I know PHP and I can work with it. Now, if you (as a developer) were picking a CMS that a (designer) needs to code for, you have a bigger issue. Many designers detest having any sort of <strong>code</strong> in their template.</p>
<p>Personally, I just find dealing with PHP easier. I know what it does. I don&#8217;t need the added complexity of a theme engine layer to try to work around. Now, when things are quite simple (as in variable replacements) that&#8217;s all well and good. However, when we start talking about custom functions, etc. I just feel more comfortable working with something I know.</p>
<h2>My Apologies</h2>
<p>Now I know in Part 2, I promised you guys that I&#8217;d get into <a onclick="javascript:pageTracker._trackPageview('/outbound/article/silverstripe.org');" href="http://silverstripe.org/">Silverstripe</a> and <a onclick="javascript:pageTracker._trackPageview('/outbound/article/modxcms.com');" href="http://modxcms.com/">ModX</a>. Let me apologize for that. I installed them, tried them out, and quickly dismissed them. Although each had it&#8217;s great selling points, they were just too new and unpopular to devote much time into. There were limited modules/plugins and the user communities were tiny in comparison to things like WordPress and Drupal.</p>
<p>Also there was one (Silverstripe I believe) that forced me to edit the theme in the administration section. That&#8217;s all well and good for clients who want to modify themes, but I need syntax highlighting, I&#8217;m sorry. And the idea of &#8220;copy and paste&#8221; into the theme edit box got really old really fast.</p>
<p>I know that WordPress allows you to do the same thing, however the theme is still ultimately stored as a file you can modify with a regular editor and not in the database.</p>
<p>I&#8217;m sure they had their reasons, but that just didn&#8217;t go well with my workflow process.</p>
<h2>And The Winner Is (Winners Are)&#8230;</h2>
<p><strong>WordPress and Drupal.</strong></p>
<p>I&#8217;m glad you guys could come alone for this journey of mine. This is by no means a be-all and end-all discussion. I picked these CMS platforms for very specific reasons that have to do with my background. I feel that they&#8217;ll serve me well for the types of projects that I have in mind.</p>
<p>Please understand that they may not always be suited for your uses.</p>
<p>As always, all comments and encouraged.</p>
<p>And Merry Christmas!!!!</p>
]]></content:encoded>
							<wfw:commentRss>https://webdevelopment2.com/picking-cms-4-looking-at-drupal/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
						<post-id xmlns="com-wordpress:feed-additions:1">544</post-id>	</item>
		<item>
		<title>Reader Input: Picking A CMS – Part 3</title>
		<link>https://webdevelopment2.com/picking-a-cms-3-wordpress-as-a-cms/</link>
				<comments>https://webdevelopment2.com/picking-a-cms-3-wordpress-as-a-cms/#comments</comments>
				<pubDate>Tue, 01 Dec 2009 13:18:18 +0000</pubDate>
		<dc:creator><![CDATA[Kevin Lloyd]]></dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://webdevelopment2.com/?p=535</guid>
				<description><![CDATA[In The Series Part 1 Part 2 Part 3 Part 4 I made some promises in Part 1 that I was reminded about in Part 2 (Thanks Ian). I didn&#8217;t give WordPress enough attention. So, here I go. WordPress As A CMS has pretty much become a household phrase these days. So, let&#8217;s just right [&#8230;]]]></description>
								<content:encoded><![CDATA[<h2>In The Series</h2>
<ul>
<li><a href="https://webdevelopment2.com/picking-a-cms-part-1/">Part 1</a></li>
<li><a href="https://webdevelopment2.com/picking-a-cms-2-new-standards/">Part 2</a></li>
<li><a href="https://webdevelopment2.com/picking-a-cms-3-wordpress-as-a-cms/">Part 3</a></li>
<li><a href="/picking-cms-4-looking-at-drupal">Part 4</a></li>
</ul>
<p>I made some promises in <a href="https://webdevelopment2.com/picking-a-cms-part-1/">Part 1</a> that I was reminded about in <a href="https://webdevelopment2.com/picking-a-cms-2-new-standards/">Part 2</a> (Thanks <a href="https://webdevelopment2.com/picking-a-cms-2-new-standards/#comment-28065">Ian</a>). I didn&#8217;t give WordPress enough attention. So, here I go.</p>
<p><em><a href="http://www.noupe.com/wordpress/powerful-cms-using-wordpress.html"><strong>WordPress</strong></a><strong> </strong><a href="http://www.idesignstudios.com/blog/web-design/wordpress-as-cms/"><strong>As A</strong></a><strong> </strong><a href="http://www.idesignstudios.com/blog/web-design/wordpress-as-cms/"><strong>CMS</strong></a></em> has pretty much become a household phrase these days. So, let&#8217;s just right in.</p>
<h2>Why I Love WordPress</h2>
<ul>
<li><strong>Popularity</strong> &#8211; It&#8217;s arguably the most popular blogging platform out there. Popularity means a huge community, active development and lots of community contribution (plugins and themes anyone?)</li>
<li><strong>Posts and Pages</strong> &#8211; WordPress does this extremely well. That&#8217;s what it&#8217;s made for.</li>
<li><strong>Plugins</strong> &#8211; There are thousands of plugins that extend this tool and makes life a breeze for a lot of us.</li>
<li><strong>Themes</strong> &#8211; Again, another benefit of popularity is that there are tons of themes out there to pick from and build upon. Every project doesn&#8217;t have to start from a blank slate.</li>
</ul>
<p>WordPress is <strong>excellent at what it does</strong>. It&#8217;s also good at some of the things it wasn&#8217;t designed to do. You have a lot of things to work with in WordPress: Posts, pages, categories, tags, widgets, and even the <a href="http://codex.wordpress.org/Custom_Fields">dreaded custom fields</a>.</p>
<p>The idea is to find that balance and know the limitations.</p>
<h2>Know When To Hold &#8216;Em, Know When To Fold &#8216;Em</h2>
<p>Bet you never figured Kenny Rogers would teach us about Web Design. If it&#8217;s a simple site with a couple of pages, some articles or news (aka Posts) and couple of images here and there, then WordPress is a no-brainer.</p>
<p>Now before I continue I need to clarify something in terms of my goal. WordPress can be used as a CMS for just about any site. yes, I said it. It does a lot and you can bend it to it&#8217;s limits. However, my <strong>ultimate goal is to provide a nontechnical client</strong> with something <strong>easy to use</strong>. This becomes very difficult when your content takes different forms in terms of <strong>custom content</strong>. When I need a list of <em>Events </em>(which each have a title, time, description, poster, etc) things get hairy. Custom fields only bring us so far.</p>
<p>This is where I have a problem. When things get too complicated and you need custom things, we run into a bit of a problem. Just because you <em>can</em> do something doesn&#8217;t mean you <em>should</em>. Custom fields extend WordPress tremendously, however I&#8217;ve found that they can get a bit difficult for a nontechnical person to use. Now there are a few things that have been done to make this thing more pleasant.</p>
<h2>Easing WordPress Stress</h2>
<p>As a benefit of the huge community and its popularity people have contributed things to WordPress to make using it as a CMS more pleasurable. There&#8217;s <a href="http://flutter.freshout.us/">Flutter</a>, <a href="http://pods.uproot.us/">PODs</a> (just found out about this), <a href="http://magicfields.org/">Magic Fields</a> (fork of Flutter), <a href="http://wefunction.com/2009/10/revisited-creating-custom-write-panels-in-wordpress/">Custom Write Panels</a>, and more. From what I&#8217;ve seen, Flutter, Magic Fields and PODs are the most powerful among these.</p>
<p>All of these have their limitations, but as with most things, it goes back to the 80-20 rule: These plugins will work wonderfully for 80% of your applications. There other 20% is going to be a problem.</p>
<h2>What I Don&#8217;t Like About WordPress</h2>
<p>The Administration section is part of my problem. For just a blog, I can set up a client as an &#8220;editor&#8221; and things work beautifully. However, with things like Custom Fields, etc. it gets complicated to explain to clients how to do certain things. Also, when you need a little bit more oomph, you give the user a higher role. But that tends to expose too much to the users.</p>
<p>I&#8217;ve played with a couple permission and role plugins, but none seemed to do what I needed. Either that or I didn&#8217;t know how to use them properly.</p>
<h2>What Did I Miss?</h2>
<p>So all you WordPress Wizards, is there anything I missed?</p>
]]></content:encoded>
							<wfw:commentRss>https://webdevelopment2.com/picking-a-cms-3-wordpress-as-a-cms/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
						<post-id xmlns="com-wordpress:feed-additions:1">535</post-id>	</item>
		<item>
		<title>Reader Input: Picking A CMS – Part 2</title>
		<link>https://webdevelopment2.com/picking-a-cms-2-new-standards/</link>
				<comments>https://webdevelopment2.com/picking-a-cms-2-new-standards/#comments</comments>
				<pubDate>Wed, 25 Nov 2009 14:13:23 +0000</pubDate>
		<dc:creator><![CDATA[Kevin Lloyd]]></dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Joomla]]></category>
		<category><![CDATA[Reader Input]]></category>
		<category><![CDATA[cms]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://webdevelopment2.com/?p=531</guid>
				<description><![CDATA[In The Series Part 1 Part 2 Part 3 Part 4 On the quest for the perfect CMS (Picking a CMS Part 1), I&#8217;ve decided to switch focus a little bit. New Standards As you guys can see, I&#8217;ve had way too much on my hands to do a thorough job on the quest for [&#8230;]]]></description>
								<content:encoded><![CDATA[<h2>In The Series</h2>
<ul>
<li><a href="https://webdevelopment2.com/picking-a-cms-part-1/">Part 1</a></li>
<li><a href="https://webdevelopment2.com/picking-a-cms-2-new-standards/">Part 2</a></li>
<li><a href="https://webdevelopment2.com/picking-a-cms-3-wordpress-as-a-cms/">Part 3</a></li>
<li><a href="/picking-cms-4-looking-at-drupal">Part 4</a></li>
</ul>
<p>On the quest for the perfect CMS (<a href="https://webdevelopment2.com/picking-a-cms-part-1/">Picking a CMS Part 1</a>), I&#8217;ve decided to switch focus a little bit.</p>
<h2>New Standards</h2>
<p>As you guys can see, I&#8217;ve had way too much on my hands to do a thorough job on the quest for the perfect <a href="https://webdevelopment2.com/picking-a-cms-part-1/">Content Management System</a>. But then something came to mind. Aren&#8217;t we all busy? No matter how wondering or beautiful a CMS is; it&#8217;s not use if all that beauty is buried so deep that people can&#8217;t find it. If you have to dig more than three (3) pages down on a Google Search page, then it&#8217;s not good enough.</p>
<h3>Popularity &#8211; Just Like In High School</h3>
<p>I know, I know, it isn&#8217;t fair, but that&#8217;s how life is. The <strong>popular guys got the girls, they made the football team, and they drive better cars</strong>. That&#8217;s just how life is. If a CMS is popular enough, it&#8217;s going to have certain things going for it.</p>
<p>It&#8217;s going to have <strong>more contributors</strong>. That means more eyes on the code (let&#8217;s hope that this will be a good thing). The more people that know about it means, the <strong>more people that write about it</strong>. Now I will admit, there&#8217;s a little &#8220;chicken vs. egg&#8221; thing going on there. Maybe it gets popular because people write about it. But for our purposes it doesn&#8217;t matter. The fact is, there will be <strong>more formal and informal documentation</strong>.</p>
<p>I&#8217;ll be the first to admit that popular doesn&#8217;t always mean better. Take WordPress for instance. Although <em>I&#8217;ve never looked</em>, I&#8217;ve been assured that the <strong>code is quite mangled</strong>. But notice what I said, <strong>I&#8217;ve never looked, and neither will your clients</strong>. No matter how elegant your code is and how fast it runs; none of that matters if your product doesn&#8217;t get out there do serve it&#8217;s purpose. With all it&#8217;s flaws, I&#8217;ve seen WordPress run some of the largest blogs out there, so they must be doing something right. No one returns a BMW because they don&#8217;t like the layout of the engine.</p>
<p>So what does populartiy mean? Sorry to all the new kids on the block. You might be cool, but I just can&#8217;t take that risk.</p>
<h3>Plugins, Modules and Addons.</h3>
<p>I don&#8217;t care what you say, no matter how cool a CMS is, it will never everything that you want it to do. That&#8217;s why we need tons of plugins, modules, addons or whatever you want to call them. Let&#8217;s face it, clients always know what they want, until they don&#8217;t and you have to radically change your plans.</p>
<p>Also, plugins are an excellent way for other people to contribute to the community without having to hack the core or something.</p>
<h2>New Playbook &#8211; 20 Minute Dry Run</h2>
<p>With all of this said, I have a new plan of attack. I&#8217;m going to right some of these CMSs off the list right off the bat. Again, I&#8217;m sorry to the new comers. It isn&#8217;t fair, but that&#8217;s just the way it is. New platforms run the risk of being underdeveloped and not very well documented or supported. That&#8217;s not a risk I&#8217;m willing to take on a client&#8217;s site.</p>
<p>To get things on one baseline, I&#8217;m actually using a previous site as a common ground for testing. It encompasses some common functionality that I feel all CMSs should be able to handle: Images, Blogs, etc.</p>
<h2>Where Are We So Far?</h2>
<p>I&#8217;ve been told that <a href="http://www.madebyfrog.com/">Frog CMS</a> is an excellent choice of a CMS. However, based on my new rules it&#8217;s not an option. It&#8217;s been in verion 0.9.5 since April 2009. And recently the author (yes, I think there&#8217;s only one) posted a <a href="http://www.madebyfrog.com/blog/2009/10/19/frog-cms-still-alive.html">Still Alive</a> post. So, no offense, but this one&#8217;s not for me.</p>
<p><a href="http://modxcms.com/">ModX</a> seems to have a huge list of <a href="http://modxcms.com/extras/">Extras</a> on it&#8217;s page, so it&#8217;s still on my list. I&#8217;m assuming this shows an active community. Let&#8217;s keep our fingers crossed.</p>
<h2>What Have I Tried?</h2>
<blockquote><p>Those who ignore the past are destined to repeat it.</p></blockquote>
<h3>Leave The Past In The Past</h3>
<p>These words are what keep me away from Joomla. I left Joomla at version 1.5 over three (3) years ago. Although people always swear this is true, the version numbers don&#8217;t show enough significant change from the mess I remember. So, I&#8217;m not touching this thing with a ten foot pole.</p>
<h3>Testing The Drupal Waters</h3>
<p>I did bite the bullet and installed <a href="http://drupal.org">Drupal</a>. I mean, if it&#8217;s good enough for the <a href="http://buytaert.net/whitehouse-gov-using-drupal">President of the United States</a>, I should at least give it a try, don&#8217;t you think? There are some things that I like so far:</p>
<ul>
<li>Admin Templates/Themes  &#8211; The backend is extremely flexible. You can change the look, and even the menus that are listed.  With a few modules, you can fine tune the permissions and give clients access to only what you want them to have. So, the argument of &#8220;too complicated for clients&#8221; can be countered.</li>
<li>Template Caching &#8211; I&#8217;m not sure how it works, but I love it. Certain things in the template are cached. One of which being the CSS and JS files. You can even combine and minify these. I just love that.</li>
<li>Multisites &#8211; You can set up a nice little web farm that all runs on the same Drupal core code. They can even share custom modules. I&#8217;m guessing it&#8217;s something like <a href="http://mu.wordpress.org/">WordPress MU</a>, but I&#8217;ve never tried this myself.</li>
</ul>
<h3>Onward and Upward</h3>
<p>The quest continues with <a href="http://silverstripe.org/">Silverstripe</a> and <a href="http://modxcms.com/">ModX</a>. Stay tuned.</p>
]]></content:encoded>
							<wfw:commentRss>https://webdevelopment2.com/picking-a-cms-2-new-standards/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
						<post-id xmlns="com-wordpress:feed-additions:1">531</post-id>	</item>
		<item>
		<title>Reader Input: Picking A CMS &#8211; Part 1</title>
		<link>https://webdevelopment2.com/picking-a-cms-part-1/</link>
				<comments>https://webdevelopment2.com/picking-a-cms-part-1/#comments</comments>
				<pubDate>Wed, 20 May 2009 15:09:28 +0000</pubDate>
		<dc:creator><![CDATA[Kevin Lloyd]]></dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Reader Input]]></category>
		<category><![CDATA[cms]]></category>

		<guid isPermaLink="false">http://webdevelopment2.com/?p=510</guid>
				<description><![CDATA[In The Series Part 1 Part 2 Part 3 Part 4 Define The Problem In the past, I&#8217;ve done some freelance Web Development and Web Design for different clients. One question I&#8217;ve always had to ask myself is: How will the user be updating this website? That question is usually preempted by a question to [&#8230;]]]></description>
								<content:encoded><![CDATA[<h2>In The Series</h2>
<ul>
<li><a href="https://webdevelopment2.com/picking-a-cms-part-1/">Part 1</a></li>
<li><a href="https://webdevelopment2.com/picking-a-cms-2-new-standards/">Part 2</a></li>
<li><a href="https://webdevelopment2.com/picking-a-cms-3-wordpress-as-a-cms/">Part 3</a></li>
<li><a href="/picking-cms-4-looking-at-drupal">Part 4</a></li>
</ul>
<h2>Define The Problem</h2>
<p>In the past, I&#8217;ve done some freelance Web Development and Web Design for different clients. One question I&#8217;ve always had to ask myself is:</p>
<blockquote><p>How will the user be updating this website?</p></blockquote>
<p>That question is usually preempted by a question to the client:</p>
<blockquote><p>Do you have any HTML experience?</p></blockquote>
<p>I can count (on one hand) the number of times that I&#8217;ve heard a <em>yes</em> to this question. To be quite honest, I don&#8217;t even know why I ask it anymore. <strong>Hardly any of my clients  ever had HTML experience</strong> and even if they did, I doubt they&#8217;d want to go through the hassle. So this poses the very interesting question How do you pick a <a title="Content Management System" href="http://en.wikipedia.org/wiki/Content_management_system">CMS</a> (content management system) for a web project?</p>
<h2>What Not To Do &#8211; Pure HTML is wrong for many reasons</h2>
<p><img class="size-full wp-image-267 alignnone" title="XHTML" src="https://i0.wp.com/webdevelopment2.com/wp-content/uploads/xhtml.jpg?resize=450%2C191&#038;ssl=1" alt="XHTML" width="450" height="191" srcset="https://i0.wp.com/webdevelopment2.com/wp-content/uploads/xhtml.jpg?w=450&amp;ssl=1 450w, https://i0.wp.com/webdevelopment2.com/wp-content/uploads/xhtml.jpg?resize=300%2C127&amp;ssl=1 300w" sizes="(max-width: 450px) 100vw, 450px" data-recalc-dims="1" />Over the years, I&#8217;ve had much experience in this area (what not to do). Gone are the days when people simply wanted a <em>web presence</em>. Those days, things were simple. You fire up your copy of Frontpage (oh how we&#8217;ve learned from then) and designed a website for a client and stick it onto an FTP server, and viola; you&#8217;re done. <strong>Worst case scenario</strong>, they call you up seven (7) months later and say they&#8217;ve <strong>changed their phone number and need you to make an update</strong>.</p>
<p>That might have been fine back then, but right now clients expect a lot more for their money. In this day and age when everyone is worried about SEO ranking and the phrase <a href="http://en.wikipedia.org/wiki/Web_content#Content_is_king">Content Is King</a> has been coined, <strong>no one wants to have to call you up (and God forbid; pay you) to make regular update</strong>s to their website. It is expected that you provide some sort method of updating their site.</p>
<p>With that said, providing a <strong>purely HTML solution is not user friendly and it can be down right dangerous</strong>. Do you really want to give your users full access to the HTML files that comprise the website? What if they <strong>break something in the layout</strong> while editing in Microsoft Word, ugh!. Who would be to blame? You would.</p>
<p>In the past I&#8217;ve guarded against this by using the PHP include strategy. The website would be primarily PHP with a folder called &#8220;content&#8221; sitting there with various HTML files. From there, I would pull any <em>dynamic content</em> that would be needed for the site: Page titles, tag lines, content blocks, etc, using standard PHP includes. This way my <strong>layout would stay (relatively) intact</strong> and the user would have access to change what they were allowed to change. The problem with this method is that they <strong>required some sort of HTML knowledge</strong> to modify the content files. They also <strong>required knowledge of FTP software</strong> and servers. Not to mention, that adding a pages or sections still needed heavy interaction from myself. Needless to say, I&#8217;ve grown from then.</p>
<h2>Joomla! &#8211; It looked like a good idea at first</h2>
<p><img class="size-medium wp-image-519 alignright" title="joomla" src="https://i2.wp.com/webdevelopment2.com/wp-content/uploads/joomla.png?resize=300%2C190&#038;ssl=1" alt="joomla" width="300" height="190" srcset="https://i2.wp.com/webdevelopment2.com/wp-content/uploads/joomla.png?resize=300%2C190&amp;ssl=1 300w, https://i2.wp.com/webdevelopment2.com/wp-content/uploads/joomla.png?w=671&amp;ssl=1 671w" sizes="(max-width: 300px) 100vw, 300px" data-recalc-dims="1" />Early in my college days, I stumbled across <a href="http://en.wikipedia.org/wiki/Mambo_(software)">Mambo</a> and subsequently <a href="http://en.wikipedia.org/wiki/Joomla!">Joomla!</a>, it&#8217;s current fork. It did so much for you, it had to be good, right? After installing Joomla for a client, I realized what the problem was. <strong>It just did too much</strong>. There were too many configurations, and simple things were just too hard. Also, last I remember, one of the main navigational structures was generated using and ugly and rigid table structure. Yes, I know it&#8217;s been changed by now, but that was part of my initial frustration.</p>
<p>It just felt too heavy for a normal website. No matter how much I restricted the user (by groups &#8211; editors as opposed to admins I think) I still <strong>got complaints about how complicated the backend interface it was</strong>. Added to that fact, the templates (and I stress) at that time were very cookie-cutter. It got to the point where I could eyeball a website built in Joomla.</p>
<p>Since then (over 3 years ago) I haven&#8217;t given Joomla a second look. It&#8217;s just one of those things that rubs you the wrong way once, and you never look back. Judging by the version numbers, I&#8217;m forced to assume that not much has changed. But that&#8217;s just an ignorant assumption with no basis, so please don&#8217;t hold it against me.</p>
<h2>More To Come</h2>
<p>I really had no idea this was going to be as long as it turned out. But sometimes I start ranting and never end. Hense, there shall be a part two where I talk about my dive into WordPress.</p>
<p>All user input is encouranged; ThanX</p>
]]></content:encoded>
							<wfw:commentRss>https://webdevelopment2.com/picking-a-cms-part-1/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
						<post-id xmlns="com-wordpress:feed-additions:1">510</post-id>	</item>
		<item>
		<title>Internet Explorer 8 &#8211; The Drama Begins</title>
		<link>https://webdevelopment2.com/internet-explorer-8-drama-begins/</link>
				<comments>https://webdevelopment2.com/internet-explorer-8-drama-begins/#comments</comments>
				<pubDate>Mon, 11 May 2009 14:17:58 +0000</pubDate>
		<dc:creator><![CDATA[Kevin Lloyd]]></dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[ie]]></category>
		<category><![CDATA[internet explorer]]></category>

		<guid isPermaLink="false">http://webdevelopment2.com/?p=490</guid>
				<description><![CDATA[What Does IE 8 Mean To Developers? Personally, I&#8217;m ecstatic that Microsoft has released Internet Explorer 8. The great part is that they&#8217;ve stuck it in the Windows Automatic Updates and they&#8217;ve already started rolling it out Windows users. I damn near threw a party to celebrate. Of course, we won&#8217;t be seeing the real [&#8230;]]]></description>
								<content:encoded><![CDATA[<h2>What Does IE 8 Mean To Developers?</h2>
<p>Personally, I&#8217;m ecstatic that Microsoft has released <a href="http://www.microsoft.com/windows/Internet-explorer/default.aspx">Internet Explorer 8</a>. The great part is that they&#8217;ve stuck it in the Windows Automatic Updates and they&#8217;ve already started rolling it out Windows users. I damn near threw a party to celebrate.</p>
<p>Of course, we won&#8217;t be seeing the real benefits for a while (maybe for a few years, even), but the point is, the process has begun. Does this mean we can say goodbye to IE 6, CSS hacks, and IE conditional tags? Well, of course not! It&#8217;s never that easy when it comes to Windows or Microsoft. But again, the process has begun.</p>
<p>Am I saying that there are no problems with the other browsers? No I&#8217;m not. Try to find an old copy of Firefox 1.5 and load up a current website. It&#8217;s going to look very ugly. The point is, Firefox (I&#8217;m not sure about the other browsers) has long ago implemented automatic updates to their products. Old versions, simply disappear.</p>
<h2>You Just Can&#8217;t Make People Happy</h2>
<p>For years, Microsoft has been getting flack about old versions of Internet Explorer. The irony is that, now they&#8217;ve finally done something about it, but <a href="http://www.computerworld.com/action/article.do?command=viewArticleBasic&amp;articleId=9132732&amp;intsrc=news_ts_head">not everyone is happy</a>.</p>
<blockquote><p>The blogosphere is heating up over some some interesting options in the Internet Explorer 8 installation process.  Eager to spread its shiny next-generation browser, IE 8, to the masses, Microsoft has included an option which resets the user&#8217;s default browser in what some argue is too subtle a manner.  The &#8220;Express&#8221; option during the IE 8 install is designed to make the install quicker and easier for novice users.</p></blockquote>
<h2>Seriously, What&#8217;s The Big Deal?</h2>
<p>The funny thing is that, unlike <strong>many</strong> installations I&#8217;ve seen, the &#8220;Express&#8221; option isn&#8217;t checked by default. Both choices are blank. You can&#8217;t <em>accidentally</em> perform the Express install by just hitting the <em>Next</em> button (yes, that&#8217;s how I perform most of my installs). You have to purposefully click the &#8220;Express&#8221; button.</p>
<p>However, I don&#8217;t see what the big deal is, honestly. I don&#8217;t see how this is different from any other browser install. I can&#8217;t be sure (I&#8217;ve never had a <em>clean</em> install for a while) but, I don&#8217;t think there&#8217;s a way to stop the Firefox Automatic update, once it gets started. I open up my browser and magically there&#8217;s a new version. At least Microsoft takes you through the installation process.</p>
<p>My point is, who cares? If a user is savvy enough to install Firefox or Opera, this is the worst case scenario:</p>
<ul>
<li>Install IE 8 and unknowingly set it to default.</li>
<li>Hit the &#8220;Internet&#8221; button and be surprised when IE 8 loads up.</li>
<li>Get&#8217;s slightly annoyed</li>
<li>Click the &#8220;Firefox&#8221;/&#8221;Opera&#8221; icon</li>
<li>Get prompted to make that browser default again.</li>
<li>Go on with life.</li>
</ul>
<p>It takes all of 4.5 seconds to correct the problem. Are the other browser makers that scared that people will actually say:</p>
<blockquote><p>Hmmph, well since it&#8217;s already defaulted let me see what it&#8217;s about. Wow, IE 8 is actually cool.</p></blockquote>
<p>So what? Is that really sure a bad thing? If, God forbid, Microsoft finally gets something right and builds a better browser, then what&#8217;s the harm in people using it?</p>
<p>Mozilla has nothing to fear from me, personally. I can&#8217;t live without my Firefox Add-ons. Or maybe I&#8217;m just bias; as long as IE 6 goes away I&#8217;ll be happy.</p>
<h2>Opera&#8217;s Solution?</h2>
<blockquote><p>Opera wants the commission to make Microsoft offer alternate browsers using the same Windows Update service the latter relies on to upgrade IE. &#8220;That&#8217;s one possible remedy,&#8221; said Lie, who called it a &#8220;must-carry&#8221; solution, meaning Windows would have to provide multiple browsers, not just IE.</p></blockquote>
<p>That is the most ridiculous thing I&#8217;ve ever heard. Does Ubuntu automatically install Opera/Safari (hell it might, I&#8217;m not really sure <img src="https://s.w.org/images/core/emoji/12.0.0-1/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /> but I know it does Firefox)? Does OS X have Firefox/Opera on the list when performing an update? The answer is no! So why would Microsoft do something that stupid? OS X comes with Safari and most <em>regular users</em> don&#8217;t question it; Ubuntu comes with Firefox installed and most <em>regular users</em> don&#8217;t question it. So what&#8217;s the big deal with Microsoft doing the same?</p>
<p>I say leave it up to the user. Right now, it doesn&#8217;t matter for a regular user because they are not using a better browser. It doesn&#8217;t matter for advanced users, because they know better. Again, this is my bias talking. We&#8217;ve started ti slowly inject Internet Explorer 6 with cyanide, now we get to watch it&#8217;s slow, painful death; Yay!</p>
<p>Now if we could only get the cooperate enterprise, government, and educational masses to perform the Windows Update, I&#8217;ll go ahead and dance a jig.</p>
]]></content:encoded>
							<wfw:commentRss>https://webdevelopment2.com/internet-explorer-8-drama-begins/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
						<post-id xmlns="com-wordpress:feed-additions:1">490</post-id>	</item>
		<item>
		<title>Gitting Started with Git &#8211; Quick and Dirty</title>
		<link>https://webdevelopment2.com/gitting-started-git/</link>
				<comments>https://webdevelopment2.com/gitting-started-git/#comments</comments>
				<pubDate>Sat, 09 May 2009 09:12:27 +0000</pubDate>
		<dc:creator><![CDATA[Kevin Lloyd]]></dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://webdevelopment2.com/?p=473</guid>
				<description><![CDATA[I&#8217;m sure you guys have heard about Git. It&#8217;s been making a lot of waves lately. It seems that I&#8217;m always the last to jump on the bandwagon when it comes to things like that, but I&#8217;m finally here. Introduction There are tons of Version Control Systems (VCS) out there: Source Safe (Microsoft&#8217;s Baby, which [&#8230;]]]></description>
								<content:encoded><![CDATA[<p><img src="https://i0.wp.com/webdevelopment2.com/wp-content/uploads/git-trunk.jpg?resize=400%2C332&#038;ssl=1" alt="Git Trunk" title="git-trunk" width="400" height="332" class="size-full wp-image-481" srcset="https://i0.wp.com/webdevelopment2.com/wp-content/uploads/git-trunk.jpg?w=400&amp;ssl=1 400w, https://i0.wp.com/webdevelopment2.com/wp-content/uploads/git-trunk.jpg?resize=300%2C249&amp;ssl=1 300w" sizes="(max-width: 400px) 100vw, 400px" data-recalc-dims="1" /><br />
I&#8217;m sure you guys have heard about <a href="http://en.wikipedia.org/wiki/Git_(software)">Git</a>. It&#8217;s been making a lot of waves lately. It seems that I&#8217;m always the last to jump on the bandwagon when it comes to things like that, but I&#8217;m finally here.</p>
<h2>Introduction</h2>
<p>There are tons of Version Control Systems (VCS) out there: Source Safe (Microsoft&#8217;s Baby, which sucks by the way), CVS, and SVN. Git is different from those in one major way: It&#8217;s a distributed system as opposed to a centralized one. That means, there is no central repository that users check out revisions from. There <em>can be</em> a central one, but it&#8217;s not a requirement. Every use has a complete copy of the entire repository on his system at any one time.</p>
<p>I&#8217;m only (intimately) familiar with SVN. So you can read more on the differences between <a href="http://git.or.cz/gitwiki/GitSvnComparsion">Git and SVN</a>. They range from faster processing, due to the fact that everything is local; to reduced disk space usage by Git.</p>
<p>Personally, Git is a great choice for my type of work. Sometimes, I just want to have Version Control in one directory for one project. I don&#8217;t want to get messy with all the central repositories and servers and everything like that. Also, if you travel, you just slap that entire folder on a USB drive and take it to any other computer and continue working. If that computer has Git installed, you can perform your commits or you can wait to commit when you reach home.</p>
<h2>Let&#8217;s Get Started &#8211; Installation and Setup</h2>
<p>First off, let me apologize to the Linux users. I found one simple <a href="https://wiki.ubuntu.com/KernelTeam/KernelGitGuide">git tutorial for Ubuntu</a>. Everything else pointed to building from source. I guess that&#8217;s not that hard.</p>
<p>Windows and OS X users are in luck. There are prepackaged installers for both systems.</p>
<p>For Windows, download the <a href="http://code.google.com/p/msysgit/">msysgit package</a> and you&#8217;re ready to go. If you think you need more of a UI you can get <a href="http://code.google.com/p/tortoisegit/">TortoiseGit</a>, which is a shell extension for Windows Explorer. One plus I&#8217;ve noticed with this tool is that it has a great diff viewer. Be advised: I&#8217;ve been warned that git is slower on a Windows system, so you might want to avoid Windows for those huge projects.</p>
<p>OS X users also have a great option: <a href="http://code.google.com/p/git-osx-installer/">OS X Git Installer</a>. Or you can build from source like the other Linux users.</p>
<p>There&#8217;s not much to set up after that. Most of the Git usage is from the command line, so there&#8217;s no <em>need</em> for any other fancy tools.</p>
<p>Now, there are a ton of <a href="http://github.com/guides/git-cheat-sheet">tutorials</a> out there on how to get started, so I&#8217;m not going to bore you with that, but I will highlight some of the things I&#8217;ve found.</p>
<h2>Hosting Remote Repositories</h2>
<p>One of the great advantages I&#8217;ve found with Git is that it doesn&#8217;t need a central or remote repository. That&#8217;s great if you don&#8217;t need to work offline. However, that&#8217;s not to say it <em>can&#8217;t</em> have one.</p>
<p>I&#8217;m sure everyone has heard of <a href="http://github.com">GitHub</a>. This is, by far, the major Git hosting service. But, there are limitations (of course). Their free plan doesn&#8217;t allow private projects and it&#8217;s limited to 300 MB in size. There are some other places where you can host Git projects, however if you already pay for a web hosting service you may have all you need.</p>
<p>The only requirement is that the service allows SSH shell access. After that, you&#8217;re good to go. There&#8217;s a lovely tutorial on how to <a href="http://project-tigershark.com/people/rob/blog/2009/04/08/git-on-a-shared-host-10-minute-install-guide/">install git on a shared host</a>. Even if you don&#8217;t want to read the tutorial, you can just copy and paste the commands.</p>
<p>Currently, I&#8217;m on HostMonster&#8217;s hosting service for $8/month. So tacking Git onto that already existing host just made sense.</p>
<h2>Git Work Flow (And Modification) I&#8217;ve Adopted</h2>
<p>Some time ago, I stumbled across this article on <a href="http://joemaller.com/2008/11/25/a-web-focused-git-workflow/">web based work flow for Git</a>.</p>
<blockquote><p>
The key idea in this system is that the web site exists on the server as a pair of repositories; a bare repository alongside a conventional repository containing the live site. Two simple Git hooks link the pair, automatically pushing and pulling changes between them. </p></blockquote>
<p>It&#8217;s actually a great idea. You have one central repository or hub and one &#8220;live&#8221; site. The hub has is a <em>bare</em> repository; it has no workspace and you can&#8217;t checkout any files. The prime, however, has it&#8217;s own work space, which hosts your live site.</p>
<p>When you push into the hub the hooks (set article for setup) automatically push those changes over to the prime or live repository. Likewise, the prime has hooks that function when a commit is done: they push changes back to the hub. So ideally, all your major development would be pushed to the hub which, in turn, pushes those changes to the live site. Now if you make a one off change to the live site (who says that never happens) you can hit commit and it will push those changes back to your hub.</p>
<p>I don&#8217;t need that level of automation for what I&#8217;m doing. So, I do have a central repository, however, I push to my live site directly. I have a branch in my project called <em>live</em> when I merge or rebase stuff from <em>master</em> into. I think push this branch to the live site. My live site has a hook that does a simple <code>git reset --HARD</code> in the working directory to update everything.</p>
<p>That&#8217;s all I got for now.</p>
]]></content:encoded>
							<wfw:commentRss>https://webdevelopment2.com/gitting-started-git/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
						<post-id xmlns="com-wordpress:feed-additions:1">473</post-id>	</item>
		<item>
		<title>Web Development 2.0 Carnival &#8211; December 26, 2008</title>
		<link>https://webdevelopment2.com/web-development-20-carnival-12-26-200/</link>
				<pubDate>Sat, 10 Jan 2009 13:09:12 +0000</pubDate>
		<dc:creator><![CDATA[Kevin Lloyd]]></dc:creator>
				<category><![CDATA[Carnival]]></category>
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://webdevelopment2.com/?p=468</guid>
				<description><![CDATA[Welcome to the December 26, 2008 edition of Web Development 2.0. (Yeah, I know I&#8217;m a bit late, but it was Christmas 🙂 ) Fiona King presents 10 Best Ruby/RoR Web Hosts Compared ? 2009 posted at WHDb. general Marcus Hochstadt presents Using A CMS For A Content-Rich Website posted at Marcus Hochstadt, saying, &#8220;Marcus [&#8230;]]]></description>
								<content:encoded><![CDATA[<p>Welcome to the December 26, 2008 edition of Web Development 2.0. (Yeah, I know I&#8217;m a bit late, but it was Christmas <img src="https://s.w.org/images/core/emoji/12.0.0-1/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /> )</p>
<p><!-- Carnival Submission --><br />
<strong>Fiona King</strong> presents <a href="http://whdb.com/2008/10-best-rubyror-web-hosts-compared-2009/">10 Best Ruby/RoR Web Hosts Compared ? 2009</a> posted at <a href="http://whdb.com">WHDb</a>.</p>
<h2>general</h2>
<p><!-- Carnival Submission --></p>
<p><strong>Marcus Hochstadt</strong> presents <a href="http://www.hochstadt.com/using-a-cms-for-a-content-rich-website">Using A CMS For A Content-Rich Website</a> posted at <a href="http://www.hochstadt.com">Marcus Hochstadt</a>, saying, &#8220;Marcus describes how he migrated one of his static HTML sites into a Content Management System. Which platform did he choose and why?&#8221;</p>
<h2>javascript</h2>
<p><!-- Carnival Submission --></p>
<p><strong>Jason Maletsky</strong> presents <a href="http://www.websitebuildersresource.com/2008/12/20/show-partial-content-slide-animate-with-jquery/">Show Partial Content, Slide Animate with jQuery</a> posted at <a href="http://www.websitebuildersresource.com">Website Builders Resource</a>, saying, &#8220;This plugin will show a partial amount of content from a and allow the user to click a link from the title or a link at the bottom to view the rest of the content with a sliding action.&#8221;</p>
<p><!-- EDIT THIS: the conclusion begins with this paragraph: --></p>
<p>That concludes this edition.  Submit your blog article to the next edition of <strong>Web Development 2.0</strong> using our <a title="Submit an entry to “web development 2.0”" href="http://blogcarnival.com/bc/submit_2377.html" target="_blank">carnival submission form</a>. Past posts and future hosts can be found on our <a title="Blog Carnival index for “web development 2.0”" href="http://blogcarnival.com/bc/cprof_2377.html" target="_blank"> blog carnival index page</a>.</p>
<p>Technorati tags:  <!-- add your technorati tags here! --> <a rel="tag" href="http://technorati.com/tag/web+development+2.0">web development 2.0</a>, <a rel="tag" href="http://technorati.com/tag/blog+carnival">blog carnival</a>.</p>
]]></content:encoded>
									<post-id xmlns="com-wordpress:feed-additions:1">468</post-id>	</item>
		<item>
		<title>Comment Relish Plugin + High CPU Usage &#8211; Fixed The Right Way</title>
		<link>https://webdevelopment2.com/wordpress-comment-relish-and-high-cpu-usage/</link>
				<comments>https://webdevelopment2.com/wordpress-comment-relish-and-high-cpu-usage/#comments</comments>
				<pubDate>Mon, 29 Dec 2008 12:00:25 +0000</pubDate>
		<dc:creator><![CDATA[Kevin Lloyd]]></dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[comment]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://webdevelopment2.com/?p=461</guid>
				<description><![CDATA[How The Problem Started Christmas Eve have just started at about 12:03 AM, when I logged on and saw that dreaded message: Your Account Has Exceeded Its CPU Quota So I did what all normal people do at first: I ignored it. Actually, I had a very good reason to at the time. Since it [&#8230;]]]></description>
								<content:encoded><![CDATA[<h3>How The Problem Started</h3>
<p>Christmas Eve have just started at about 12:03 AM, when I logged on and saw that dreaded message:</p>
<blockquote><p>Your Account Has Exceeded Its CPU Quota</p></blockquote>
<p>So I did what all normal people do at first: I ignored it. Actually, I had a very good reason to at the time. Since it was 12:03 AM, I assumed that my nightly backup job (backup and compress files and databases) was causing the issue.</p>
<p>So after it happened the next day (a few times) I decided to do some investigation.</p>
<h3>The Culprit &#8211; Comment Relish</h3>
<p>HostMonster does a good job of providing some helpful information that you can use to figure out these issues. I went to the directory: <em>cpu_exceeded_logs</em> and sure enough there was a file with today&#8217;s (and yesterday&#8217;s) date in there. I opened it up and so a ton of referrences to comments on a WordPress Blog:</p>
<blockquote><p>
/ramdisk/bin/php5 /home1/user/public_html/domain.com/wp-comments-post.php
</p></blockquote>
<p>That narrowed things down a little bit. The other helpful directory was <em>mysql_slow_queries</em>. Here I found the following query over and over again:</p>
<pre class="brush: sql; title: ; notranslate">
SELECT c.*, p.*
  FROM wp__comments c
  INNER JOIN wp__posts p ON p.ID = c.comment_post_ID
  LEFT JOIN wp__cr_emailed e ON e.email = c.comment_author_email
  WHERE e.email IS NULL AND c.comment_approved = '1'
</pre>
<p>It didn&#8217;t take too long to figure out that <em>cr</em> stood for <a href="http://www.justinshattuck.com/comment-relish/">Comment Relish</a>. </p>
<p>A little bit of Googling showed me that in some circles, it&#8217;s <a href="http://www.siteguide.us/2007/07/05/3-reasons-why-comment-relish-is-not-good-for-your-blog/">not a very well liked plugin</a>. Some more searching revealed something a bit <a href="http://www.chrisg.com/when-good-plugins-go-bad-comment-relish-considered-dangerous/">more technically helpful</a>.</p>
<p>So there you have it, disable Comment Relish and all is well with the world again.</p>
<h3>Best of Both Worlds &#8211; Proper Fix Instead of Disabling</h3>
<p>Now partly because this was <strong>a blog I was hosting for someone else</strong> and partly because <strong>I&#8217;m the type of person who&#8217;s never satisfied unless they have the answer to everything</strong>, I found a middle ground: Good server performance while still maintaining the functionality of the plugin.</p>
<p>So the main problem isn&#8217;t the query. Well maybe it is, but I didn&#8217;t want to go redesign the entire plugin. WordPress performs tons of these queries all the time and they don&#8217;t seem to cause issues. The problem is with table indexes (or lack thereof).</p>
<p>Pulling up PHPMyAdmin showed me that there&#8217;s <strong>no indexes on cr_emailed.email or comments.comment_author_email</strong>; both of which are used above. So that&#8217;s a simple fix right? Actually, no. Adding an index to the comments table was simple enough; although some people rather not mess with the WordPress core tables.</p>
<p>The problem is with the table used for Comment Relish: you <strong>can&#8217;t apply an index on wp__cr_emailed.email because it&#8217;s tinytext</strong>. Go ahead, try and there&#8217;s an error. I guess the author decided on tinytext because it would be smaller than varchar? Not sure if there&#8217;s a way arond this or not, but I really wasn&#8217;t in the mood to investigate. I&#8217;ve used varchar all my life and it&#8217;s served me well. So we simply get rid of it, then add the index:</p>
<pre class="brush: sql; title: ; notranslate">
ALTER TABLE `cr_emailed` CHANGE `email` `email` varchar(255); 
ALTER TABLE wp_cr_emailed ADD INDEX ( email )
</pre>
<p>And voila!</p>
<h3>Do I Need This With The New Version?</h3>
<p><strong>The short answer is yes!</strong><br />
Since this problem has arisen there has been a new version of the plugin put out the combats this problem; there are still many problems with this however: </p>
<ol>
<li>Since this isn&#8217;t part of the official WordPress Plugins, you don&#8217;t get the upgrade notice. So I didn&#8217;t even know I was running an old version.</li>
<li>The author has decided to use to very same 1.0 version number with the new version, so you can&#8217;t even tell if you running the old version without examining the code.</li>
<li>Although there has been a database fix that uses varchar instead of tinytext and applies an index, this fix is only for <em>creation</em> of a new database. So you won&#8217;t get the benefit is your table has already been created with the old code.</li>
</ol>
<p>Hope this helps you folks who are as curious as I was or those who&#8217;ve disabled this plugin because of its issues but secretly miss what it does.</p>
]]></content:encoded>
							<wfw:commentRss>https://webdevelopment2.com/wordpress-comment-relish-and-high-cpu-usage/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
						<post-id xmlns="com-wordpress:feed-additions:1">461</post-id>	</item>
		<item>
		<title>Round Corners With jQuery and CSS</title>
		<link>https://webdevelopment2.com/rounded-corners-jquery-css/</link>
				<comments>https://webdevelopment2.com/rounded-corners-jquery-css/#comments</comments>
				<pubDate>Mon, 22 Dec 2008 12:25:04 +0000</pubDate>
		<dc:creator><![CDATA[Kevin Lloyd]]></dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[ie]]></category>
		<category><![CDATA[internet explorer]]></category>
		<category><![CDATA[jquery corners]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://webdevelopment2.com/?p=435</guid>
				<description><![CDATA[Rounded Intro So you&#8217;re all grown up and want Rounded Corners on your site. There&#8217;s just one small problem: the normal rounded corners implementation comes with tons of divs used for styles and you&#8217;ve got your fellow web developers screaming down your neck about web semantics. So what&#8217;s this funky semantics thing? Basically, we&#8217;re looking [&#8230;]]]></description>
								<content:encoded><![CDATA[<h3>Rounded Intro</h3>
<p>So you&#8217;re all grown up and want Rounded Corners on your site. There&#8217;s just one small problem: the <a href="http://www.webcredible.co.uk/user-friendly-resources/css/css-round-corners-borders.shtml">normal rounded corners implementation</a> comes with tons of divs used for styles and you&#8217;ve got your fellow web developers screaming down your neck about <a href="http://en.wikipedia.org/wiki/Semantic_Web">web semantics</a>.</p>
<p>So what&#8217;s this funky semantics thing? Basically, we&#8217;re looking for a separation of styles and data. We want to keep all the styles in the CSS style sheets and all the data in the XHTML files. Now, I&#8217;ve been known to be flexible on this a bit, however it is a great idea with a purpose and in this case, it actually helps us out a ton.</p>
<h3>Ignore Me &#8211; Take The Easy Way Out</h3>
<p>There are two jQuery plugins that can do this instantly, aptly named <a href="http://www.atblabs.com/jquery.corners.html">jQuery Corners</a> and <a href="http://methvin.com/jquery/jq-corner.html">jQuery Corner</a>. Yeah, I know totally different, right? They vary slightly in terms of their capabilities (anti-aliasing, background images, etc.). So if you&#8217;re not up to the heavy lifting or your requirements are very light (just basic rounding) these plugins more than fit the bill.<br />
<span id="more-435"></span></p>
<h3>Classic Rounded Corners</h3>
<p>Now, if you&#8217;re looking for something that regular borders and the plugins above can&#8217;t manage, take a look <a href="http://www.webcredible.co.uk/user-friendly-resources/css/css-round-corners-borders.shtml">classic implementation of rounded corners</a>. We&#8217;re using images to make things look <em>exactly</em> like we want them to.</p>
<p>Essentially, we&#8217;re wrapping (if you think visually, it&#8217;s more layering actually) tons of divs in order to apply different background images. All these divs are needed because you can only apply one background image to an HTML element.</p>
<p>So a basic run down is that we need four (4) divs for the corners (top left, top right, bottom left, bottom right) and four (4) more for the sides (top, bottom, left, right). This allows us to add the four images in appropriate positions. Please note that all these divs gives us the option of having rounded divs that can be freely resized.</p>
<p>As mentioned about, the problem is that these are eight (8) huge divs, which are not very semantic; not to mention they add useless code  to the HTML download.</p>
<p>Some things to note:</p>
<ul>
<li>Side Divs First &#8211; Top, Bottom, Right, and Left divs must be on the outside of the corners. If not the effect may not come out right. I think it has something to do with transparency, but somethings are easier to fix than to diagnose.</li>
<li>Check Transparancy &#8211; Keep in mind that if your images are PNG you might need to apply some of the horrendous IE 6 hacks.</li>
<li>Padding and Margins &#8211; I don&#8217;t think the original article mentioned, however since we are <em>layering</em> divs, they shouldnt&#8217; have any margins. Divs don&#8217;t usually do, but depending on your current styles, you might need to reset.</li>
<li>Perfect Slices &#8211; Doesn&#8217;t really need much explanation, but your images need to be sliced perfectly so that everything lines up right.</li>
</ul>
<h3>Dynamic Divs</h3>
<p>Now, this is where the beauty of jQuery comes in. This is a modification of <a href="http://docs.jquery.com/Tutorials:Rounded_Corners">this tutorial</a>. We&#8217;re going to use javascript to inject these divs where we need them.</p>
<p>This is the markup we are aiming for:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;div class=&quot;rounded&quot;&gt;
	&lt;div class=&quot;t&quot;&gt;
		&lt;div class=&quot;r&quot;&gt;
			&lt;div class=&quot;b&quot;&gt;
			 	&lt;div class=&quot;l&quot;&gt;
					&lt;div class=&quot;tl&quot;&gt;
						&lt;div class=&quot;tr&quot;&gt;
							&lt;div class=&quot;br&quot;&gt;
								&lt;div class=&quot;bl inner&quot;&gt;
									Stuff in here 
									should appear 
									perfectly rounded
								&lt;/div&gt;
							&lt;/div&gt;
						&lt;/div&gt;
					&lt;/div&gt;
				&lt;/div&gt;
			&lt;/div&gt;
		&lt;/div&gt;
	&lt;/div&gt;
&lt;/div&gt;

</pre>
<p>I know, messy right? Although the original article mentions wrapping these <em>around</em> your main div, but it works perfectly fine by putting them inside. Also, it enables us to do some fun stuff later on. Since all these guys have no padding, the <em>inner</em> class is needed to apply needed padding for contents. You could just apply these styles to <em>bl</em> however, I don&#8217;t want to have to remember which one of these is the inner one.</p>
<p>Here&#8217;s out basic CSS</p>
<pre class="brush: css; title: ; notranslate">
.t  {background: url(t.png) 0 0 repeat-x;}
.b  {background: url(b.png) 0 100% repeat-x}
.l  {background: url(l.png) 0 0 repeat-y;}
.r  {background: url(r.png) 100% 0 repeat-y;}
.bl {background: url(bl.png) 0 100% no-repeat;}
.br {background: url(br.png) 100% 100% no-repeat;}
.tl {background: url(tl.png) 0 0 no-repeat;}
.tr {background: url(tr.png) 100% 0 no-repeat;}
</pre>
<p>Notice we&#8217;re repeating the images used for the sides, so slice accordingly.</p>
<p>With jQuery, this is the only HTML that you need:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;div class=&quot;rounded&quot;&gt;
	Stuff in here
	should appear
	perfectly rounded
&lt;/div&gt;
</pre>
<p>Now, isn&#8217;t that much nicer?</p>
<p>Now, here&#8217;s the magical jQuery code:</p>
<pre class="brush: jscript; title: ; notranslate">
$(document).ready(function() {
	$(&quot;.rounded&quot;).wrapInner('&lt;div class=&quot;t&quot;&gt;&lt;div class=&quot;r&quot;&gt;&lt;div class=&quot;b&quot;&gt;&lt;div class=&quot;l&quot;&gt;&lt;div class=&quot;tl&quot;&gt;&lt;div class=&quot;tr&quot;&gt;&lt;div class=&quot;br&quot;&gt;&lt;div class=&quot;bl inner&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;');
});
</pre>
<p>Now, I might have made a typo, so you may need to check. The <em>wrapInner( )</em> function does exactly what it says (sort of): it wraps your content with those nested divs, but on the inside.</p>
<p>Um, yeah, that&#8217;s about it. Cool huh?</p>
<h3>Yes, It&#8217;s Extensible</h3>
<p>Now you can use this and apply it to tons of different rounded corners on your site. Simply add the <em>rounded</em> class to the div in question. eg:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;div class=&quot;widget rounded&quot;&gt;
	New stuff here
&lt;/div&gt;
</pre>
<p>Then you modify your CSS to apply the new images:</p>
<pre class="brush: css; title: ; notranslate">
.widget .t  {background: url(widget-t.png);}
.widget .b  {background: url(widget-b.png);}
.widget .l  {background: url(widget-l.png);}
.widget .r  {background: url(widget-r.png);}
.widget .bl {background: url(widget-bl.png);}
.widget .br {background: url(widget-br.png);}
.widget .tl {background: url(widget-tl.png);}
.widget .tr {background: url(widget-tr.png);}
</pre>
<p>Now you see why we&#8217;re wrapping inside the div, instead of outside. That way, we can target different images for different divs on the site, without changing any javascript calls. Cool huh?</p>
<p>Now technically, we don&#8217;t need the images on the original divs, however I haven&#8217;t found a clean (shorthand) way of applying background positions and repeats without an image URL.</p>
<p>Hope you enjoyed and hope it works.</p>
]]></content:encoded>
							<wfw:commentRss>https://webdevelopment2.com/rounded-corners-jquery-css/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
						<post-id xmlns="com-wordpress:feed-additions:1">435</post-id>	</item>
		<item>
		<title>Why My WordPress 2.7 Install &#8220;Failed&#8221;</title>
		<link>https://webdevelopment2.com/why-my-wordpress-27-install-failed/</link>
				<comments>https://webdevelopment2.com/why-my-wordpress-27-install-failed/#comments</comments>
				<pubDate>Fri, 12 Dec 2008 00:49:43 +0000</pubDate>
		<dc:creator><![CDATA[Kevin Lloyd]]></dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://webdevelopment2.com/?p=420</guid>
				<description><![CDATA[Now, it&#8217;s no secret that I can be a moron sometimes, but I&#8217;d like to put it on record that it was all me and not WordPress 2.7 that had the issue. So I&#8217;m sitting here last night minding my own business and Chris Coyier sends out a tweet talking about how it took him [&#8230;]]]></description>
								<content:encoded><![CDATA[<p>Now, it&#8217;s no secret that I can be a moron sometimes, but I&#8217;d like to put it on record that it was all me and not WordPress 2.7 that had the issue.</p>
<p>So I&#8217;m sitting here last night minding my own business and <a href="http://css-tricks.com/">Chris Coyier</a> sends out a tweet talking about how it took him 10 minutes to upgrade. So I figure, why not? I already had the <a href="http://wordpress.org/extend/plugins/wordpress-automatic-upgrade/">WordPress Automatic Upgrade</a> plugin ready to go, so I figured it would be a breeze. I guess I was wrong.</p>
<h3>What Went Wrong</h3>
<p>So I follow all the steps in the automatic upgrade. Everything seems to be going fine, however after the database upgrade I was bumped back into the admin screen. Everything was looking totally screwed up. Icons were scattered all over, colors were wrong, things were positioned incorrectly. It basically looked like the CSS style sheet was screwed up for some reason.</p>
<p>So I figured that my CSS and possibly JS files are still cached on my browser and that&#8217;s what causing the problem. So I did a screen refresh; nothing. I did a forced refresh; nothing. I cleared the cache; nothing. I cleared all the cookies; nothing. I started up Internet Explorer; nothing.</p>
<p>So the obvious answer was that something was wrong with the automatic upgrade plugin. I spent the next 20 minutes installing manually (twice) just to get back to scare one. Maybe it was the host? Maybe it was my machine? Maybe my internet connection?</p>
<h3>What Actually Happened &#8211; My Server Setup, That&#8217;s What</h3>
<p>Now I need to brief you a lil&#8217; bit on the <em>stuff</em> I have set up on my server.</p>
<p>Some time ago, I was researching serving up compressed (Gzipped) data from my blog. Now I think WordPress has an option for this, at least they used to. Regardless, I use WP-SuperCache and I know that it has that functionality. However, what would really be great is if I could gzip my CSS and JS files. That&#8217;s what paying too much attention to <a href="http://website.grader.com/">Website Grader</a> does to you.</p>
<p>The first problem is that my current host doesn&#8217;t support mod_gzip. Therefore I had to use a <em>less elegant</em> method. I didn&#8217;t want to use any PHP method, since I figured that would be too much work for the server. So, this is my setup (don&#8217;t worry, I&#8217;ll most details later):</p>
<ul>
<li>Setup Apache rewrites to point all JS and CSS files to js.gz and css.gz if available. Here, I also set expires headers for way in the future.</li>
<li>Download and compile minifying script</li>
<li>Gzip minified scripts</li>
<li>Set up the above in a daily cron job</li>
</ul>
<p>Now, those of you chuckling right now, have seen huge mess that this is going to develop into. Basically, I make the server serve up compressed versions of the stles and JavaScript if available.</p>
<p>So, after doing the WordPress upgrade, although I had brand. new .css and .js files, my .js.gz and .css.gz files were still from WordPress 2.6.5. No wonder my admin screen was in a mess.</p>
<p>Sorry for blaming you, Mr. 2.7. So far everything looks great, I must say.</p>
]]></content:encoded>
							<wfw:commentRss>https://webdevelopment2.com/why-my-wordpress-27-install-failed/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
						<post-id xmlns="com-wordpress:feed-additions:1">420</post-id>	</item>
		<item>
		<title>Web Development 2.0 Carnival &#8211; November 21, 2008</title>
		<link>https://webdevelopment2.com/web-development-20-carnival/</link>
				<pubDate>Fri, 21 Nov 2008 13:26:22 +0000</pubDate>
		<dc:creator><![CDATA[Kevin Lloyd]]></dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Carnival]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://webdevelopment2.com/?p=391</guid>
				<description><![CDATA[Welcome to the November 21, 2008 edition of Web Development 2. Dereck presents My Google Penalty and My Response posted at I Will Not Die. Sly presents 5 Search Engine Optimization Tips for WordPress Blogs posted at Slyvisions dot Com. Although I&#8217;m more or less devoted to CakePHP as my PHP Frameowrk, it&#8217;s also good [&#8230;]]]></description>
								<content:encoded><![CDATA[<p>Welcome to the November 21, 2008 edition of Web Development 2.</p>
<p><!-- Carnival Submission --></p>
<p><strong>Dereck</strong> presents <a href="http://www.iwillnotdie.com/my-google-penalty-and-my-response/">My Google Penalty and My Response</a> posted at <a href="http://www.iwillnotdie.com">I Will Not Die</a>.</p>
<p><!-- Carnival Submission --></p>
<p><strong>Sly</strong> presents <a href="http://slyvisions.com/files/5-search-engine-optimization-tips-for-wordpress-blogs.php">5 Search Engine Optimization Tips for WordPress Blogs</a> posted at <a href="http://slyvisions.com">Slyvisions dot Com</a>.</p>
<p><!-- Carnival Submission --></p>
<p>Although I&#8217;m more or less devoted to CakePHP as my PHP Frameowrk, it&#8217;s also good to diversify sometimes. <strong>Greg Allard</strong> presents <a href="http://codespatter.com/2008/09/13/quick-thumbnails-in-django/">Quick Thumbnails in Django</a> posted at <a href="http://codespatter.com">Code Spatter</a>.</p>
<p><!-- Carnival Submission --></p>
<p><strong>Margaret Garcia</strong> presents <a href="http://www.webdesignschoolsguide.com/library/top-20-iphone-apps-for-entrepreneurs.html">Top 20 iPhone Apps for Entrepreneurs</a> posted at <a href="http://www.webdesignschoolsguide.com">Web Design Schools Guide</a>.</p>
<p><!-- EDIT THIS: the conclusion begins with this paragraph: --></p>
<p>That concludes this edition.  Submit your blog article to the next edition of <strong>Web Development 2</strong> using our <a title="Submit an entry to “web development 2”" href="http://blogcarnival.com/bc/submit_5594.html" target="_blank">carnival submission form</a>. Past posts and future hosts can be found on our <a title="Blog Carnival index for “web development 2”" href="http://blogcarnival.com/bc/cprof_5594.html" target="_blank"> blog carnival index page</a>.</p>
<p>Technorati tags:  <!-- add your technorati tags here! --> <a rel="tag" href="http://technorati.com/tag/web+development+2">web development 2</a>, <a rel="tag" href="http://technorati.com/tag/blog+carnival">blog carnival</a>.</p>
]]></content:encoded>
									<post-id xmlns="com-wordpress:feed-additions:1">391</post-id>	</item>
		<item>
		<title>A Bit On Open Source And Some Baz Background</title>
		<link>https://webdevelopment2.com/bit-open-source-baz-background/</link>
				<pubDate>Wed, 12 Nov 2008 13:03:17 +0000</pubDate>
		<dc:creator><![CDATA[Kevin Lloyd]]></dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[free]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://webdevelopment2.com/?p=356</guid>
				<description><![CDATA[This has always been a touchy subject, especially in larger computer firms. But first, let me tell you how I got into Open Source. I started coding in Turbo Pascal 7.0, in about 1996 when I was in Grammar School. I took Turbo Pascal more as an introduction to Programming, instead of a product to [&#8230;]]]></description>
								<content:encoded><![CDATA[<p>This has always been a touchy subject, especially in larger computer firms. But first, let me tell you how I got into <a href="http://en.wikipedia.org/wiki/Open_source">Open Source</a>. I started coding in Turbo Pascal 7.0, in about 1996 when I was in Grammar School. I took Turbo Pascal more as an introduction to Programming, instead of a product to do something constructive in.</p>
<p>After Pascal, I was looking into something visual. Hence, I fell into Visual Basic 5.0. Yeah, I know, I&#8217;m sorry.</p>
<h3>Legal Issues</h3>
<p>Now this was my first step towards the open source community. I must admit, that I downloaded a pirated copy and ran with it for a while. Now, that was all well and good when I was sitting home playing around with stuff. But when it came to actually, to producing something for a market, you can&#8217;t (or should I say, shouldn&#8217;t) do that with pirated software.</p>
<p>After that, I got into web development. For this, there was a plethora of free tools available, for use. So I did that for a while. When I got back to college, I got into C++ (using Visual Studio, but still essentially free). That was a step in the right direction. However, as the semesters went on, we got more into using the .NET library. However, for my web development I never got into ASP.</p>
<h3>The First Real Plunge into Open Source &#8211; Enter PHP</h3>
<p>Bit by bit, web development gave way to web programming. This is where PHP came in. I got more familiar with PHP when I started working on different projects for clients. I chose PHP for a few main reasons:</p>
<ol>
<li><strong>Free Documentation:</strong> I could learn almost everything I needed through online documentation.</li>
<li><strong>Cost:</strong> My first problem was hosting. ASP hosts used to be almost twice as expensive as their Linux counterparts.</li>
</ol>
<h3>The Open Source Misconception</h3>
<p>One of the problems that people have with Open Source is that they think that it&#8217;s unsupported. People seem to think that open source software is written by a bunch of kids in basements or something. This is not the case, by any means.  For example, a lot of the Linux distributions are totally free and totally supported.  Wake up people; free doesn&#8217;t mean unsupported. The whole <em>&#8220;You get what you pay for&#8221;</em> isn&#8217;t always true.<span id="more-356"></span></p>
<h4>Why I Use Open Source Software</h4>
<p>For my personal web development, I run a very small team and we do work part time. This is no time to shell out $6,000 for a standard license of SQL Server 2005. MySQL server 5.0 is a very robust database server. It should be able to handle itself in a lot of the situations that people think they need to throw SQL Server at. Where, MySQL fails to deliver, PostgreSQL should be more than sufficient.</p>
<p>Open source software and products just make life easier. Take examples like, <a href="http://jquery.com/">jQuery</a> and <a href="http://www.cakephp.org/">CakePHP</a>. Would it be possible for an in-house team to come up with the same thing? Yes, sure? But why? Especially when a team (not just one guy) has put years into one special product. The price of the software does not dictate it&#8217;s quality.</p>
<h3>What Not To Do</h3>
<p>Now, one word of wisdom: All open source software isn&#8217;t the same. You need to do your research before diving into open source. Look up research about the product&#8217;s history, community support, and most importantly the support. If you run a very small shop, then almost anything will work for you; especially since you&#8217;re main goal would be to keep costs down.</p>
<p>However, a large company should not thumb their nose at open source software either. Unless you have a team dedicated to doing one task, and doing it well, why not utilise a tried and true method? Why do we always feel the need to reinvent the wheel? Seriously, your team may be extremely skilled, but can you guys really crank out a better Javascript Framework than jQuery? I doubt it.</p>
<p>Take a hint from one of the largest; Microsoft has recenlty started <a href="http://weblogs.asp.net/scottgu/archive/2008/09/28/jquery-and-microsoft.aspx">shipping jQuery</a> with their .NET 3.5 framework. They even have intellisense support for it in Visual Studio. Open source is the way of the future, as long as we learn to use it correctly.</p>
]]></content:encoded>
									<post-id xmlns="com-wordpress:feed-additions:1">356</post-id>	</item>
		<item>
		<title>Password Requirements &#8211; Small Rant</title>
		<link>https://webdevelopment2.com/password-requirements-small/</link>
				<pubDate>Sat, 08 Nov 2008 21:21:39 +0000</pubDate>
		<dc:creator><![CDATA[Kevin Lloyd]]></dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://webdevelopment2.com/?p=360</guid>
				<description><![CDATA[I&#8217;m not sure how many of you guys share my views about passwords. Or maybe I just don&#8217;t feel comfortable with other people telling me what to do. Yeah, I think that&#8217;s it. If I decide that my password is going to be qwerty, password, letmein, or even 123; I think that&#8217;s my business. Don&#8217;t [&#8230;]]]></description>
								<content:encoded><![CDATA[<p>I&#8217;m not sure how many of you guys share my views about passwords. Or maybe I just don&#8217;t feel comfortable with other people telling me what to do. Yeah, I think that&#8217;s it. If I decide that my password is going to be <em>qwerty, password, letmein, </em>or even <em>123</em>; I think that&#8217;s my business. Don&#8217;t get me wrong, I totally understand the reason behind this. Some sites are trying to protect the users against themselves.</p>
<h3>Reasonable Requirements</h3>
<p>Now some of these requirements I can understand. Some of them are actually reasonable. I can deal with a minimum length; although these days they seem to be getting longer than eight (8) characters.</p>
<p>I just don&#8217;t think that I need this type of protection. Although I don&#8217;t use the same password for every website (any more, lol). Currently, I use an algorithm to generate a password for a new site. It&#8217;s a combination of a common <em>stem </em>or <em>base</em> and appending the service name that I&#8217;m logging into (eg. Yahoo, Gmail, etc.)</p>
<h3>My Problem With Requirements</h3>
<p>Currently, my stem only consists of lowercase letters and numbers. I know it&#8217;s not the most secure base, but it&#8217;s long enough and it serves the purpose. What I can&#8217;t stand is a site that needs me to enter a special character or an upper case character.</p>
<p>Call me crazy, I just hate having to hit the stupid &lt;Shift&gt; key when I need to be typing in a password. Hell, I hate holding down the shift key, period. So for all you website administrators out there, please don&#8217;t force me to do anything I don&#8217;t want to. The only thing this results in, is me forgetting my password the next time I come to your site.</p>
]]></content:encoded>
									<post-id xmlns="com-wordpress:feed-additions:1">360</post-id>	</item>
		<item>
		<title>CakePHP Contact Form &#8211; Quick and Dirty</title>
		<link>https://webdevelopment2.com/cakephp-contact-form-quick-dirty/</link>
				<comments>https://webdevelopment2.com/cakephp-contact-form-quick-dirty/#comments</comments>
				<pubDate>Fri, 07 Nov 2008 13:22:43 +0000</pubDate>
		<dc:creator><![CDATA[Kevin Lloyd]]></dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[form]]></category>

		<guid isPermaLink="false">http://webdevelopment2.com/?p=343</guid>
				<description><![CDATA[I must say, this was a major hurdle for me when I first started out with CakePHP. If you&#8217;re working with some data from a database, then it&#8217;s all Model-View-Controller magic. Your forms are automatic: $form->input() is pretty much all you need. Why is this? That&#8217;s because all the information about the fields (names, sizes, [&#8230;]]]></description>
								<content:encoded><![CDATA[<p>I must say, this was a major hurdle for me when I first started out with CakePHP. If you&#8217;re working with some data from a database, then it&#8217;s all Model-View-Controller magic. Your forms are automatic: $form->input() is pretty much all you need. Why is this? That&#8217;s because all the information about the fields (names, sizes, types, etc.) come straight from the database.</p>
<h3>You&#8217;re Out On Your Own</h3>
<p>The problem right now is that, you&#8217;re all on your own. You need to describe your data on your own. So, on with it:</p>
<p>Here&#8217;s your model code:</p>
<pre class="brush: php; title: ; notranslate">
class Contact extends AppModel {
	var $name = 'Contact';
	var $useTable = false;  // Not using the database, of course.
	
	// All the fancy validation you could ever want.
	var $validate = array(
	    'name' =&gt; array(
	        'rule' =&gt; '/.+/',
			'allowEmpty' =&gt; false,
	        'required' =&gt; true,
	    ),
		'subject' =&gt; array(
	        'rule' =&gt; array('minLength', 5),
			'message' =&gt; 'Subject must be 5 characters long'
	    ),
		'email' =&gt; array(
	        'rule' =&gt; 'email',
			'message' =&gt; 'Please enter a valid email address'
	    ),
	);

	// This is where the magic happens		   
	function schema() {
		return array (
			'name' =&gt; array('type' =&gt; 'string', 'length' =&gt; 60),
			'email' =&gt; array('type' =&gt; 'string', 'length' =&gt; 60),
			'message' =&gt; array('type' =&gt; 'text', 'length' =&gt; 2000),
			'subject' =&gt; array('type' =&gt; 'string', 'length' =&gt; 100),
		);
	}
}
</pre>
<h3>What The User Sees</h3>
<p>I think the model&#8217;s the hardest part. The view is ridiculous:</p>
<pre class="brush: php; title: ; notranslate">
	echo $form-&gt;create(null, array('action' =&gt; 'index'));
	echo $form-&gt;input('name');
	echo $form-&gt;input('email');
	echo $form-&gt;input('subject');
	echo $form-&gt;input('message');
	echo $form-&gt;submit();
	echo $form-&gt;end(); 
</pre>
<p>I know; you&#8217;re disappointed right? Sorry.</p>
<h3>How Do We Control All This?</h3>
<p>So, here&#8217;s your controller. I was going to leave that up to you, but it&#8217;s so simple that I can&#8217;t help it:</p>
<pre class="brush: php; title: ; notranslate">
class ContactController extends AppController
{
	var $name = 'Contact';
	var $uses = 'Contact';
	var $helpers = array('Html', 'Form', 'Javascript');
	var $components = array('Email', 'Session');
	function index(){
		if(isset($this-&gt;data)) {
			$this-&gt;Contact-&gt;create($this-&gt;data);
			// There is no save(), so we need to validate manually.
			if($this-&gt;Contact-&gt;validates()){
				$this-&gt;Email-&gt;to = Configure::read('CONTACT_EMAIL');
				$this-&gt;Email-&gt;replyTo = $this-&gt;data['Contact']['email'];
				$this-&gt;Email-&gt;from = $this-&gt;data['Contact']['name'].' &lt;'.$this-&gt;data['Contact']['email'].'&gt;';
				$this-&gt;Email-&gt;subject = 'Contact Form: '.$this-&gt;data['Contact']['subject'];
				//$this-&gt;Email-&gt;delivery = 'debug';
				if ($this-&gt;Email-&gt;send($this-&gt;data['Contact']['message'])) {
					$this-&gt;Session-&gt;setFlash('Thank you for contacting us');
					//$this-&gt;redirect('/');
				} else {
					$this-&gt;Session-&gt;setFlash('Mail Not Sent');
				}
				$this-&gt;redirect(array('action' =&gt; 'index'));
			} else {
				$this-&gt;Session-&gt;setFlash('Please Correct Errors');
				//$this-&gt;redirect('/contacts');
			}
		}
	}
}
</pre>
<p>After I got halfway through this, I remembered that <a href="http://snook.ca/">Snook</a> had written <a href="http://snook.ca/archives/cakephp/contact_form_cakephp/">something very similar</a>, sorry J.</p>
<p>There&#8217;s one subtle difference that I&#8217;ve noticed, that I need to point out.<br />
<em>var $_schema</em> as apposed to <em>function schema()</em>. In the original CakePHP code, one of the major actions of <em>Model::function()</em> is to return <em>var Model::$_shema</em>. So, Tom-ay-to/Tom-a-to; it really doesn&#8217;t matter.</p>
]]></content:encoded>
							<wfw:commentRss>https://webdevelopment2.com/cakephp-contact-form-quick-dirty/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
						<post-id xmlns="com-wordpress:feed-additions:1">343</post-id>	</item>
		<item>
		<title>HSBC Direct Doesn&#8217;t Support Firefox 3.0 &#8211; Another Reason To Dump IE 6.0</title>
		<link>https://webdevelopment2.com/hsbc-direct-doesnt-support-firefox-30-another-reason-to-dump-ie-60/</link>
				<comments>https://webdevelopment2.com/hsbc-direct-doesnt-support-firefox-30-another-reason-to-dump-ie-60/#comments</comments>
				<pubDate>Sun, 10 Aug 2008 13:14:35 +0000</pubDate>
		<dc:creator><![CDATA[Kevin Lloyd]]></dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[browser]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[ie]]></category>
		<category><![CDATA[internet explorer]]></category>

		<guid isPermaLink="false">http://webdevelopment2.com/?p=338</guid>
				<description><![CDATA[Before I start bashing Internet Explorer 6.0, I&#8217;d like to share a story with you. I&#8217;ve had a high yields savings account at HSBC Direct for some time now. Now I think I know why I haven&#8217;t experienced many user issues with their website before. I also use ING Direct Savings Account and Electric Orange [&#8230;]]]></description>
								<content:encoded><![CDATA[<p>Before I start bashing <a href="https://webdevelopment2.com/blog-theme-designers-given-up-on-ie-6/">Internet</a> <a href="https://webdevelopment2.com/ie-hack-css-centering/">Explorer</a> <a href="https://webdevelopment2.com/ie-css-min-height-hack/">6.0</a>, I&#8217;d like to share a story with you. I&#8217;ve had a high yields savings account at <a href="http://www.hsbcdirect.com">HSBC Direct</a> for some time now. Now I think I know why I haven&#8217;t experienced many user issues with their website before. I also use <a href="http://home.ingdirect.com/promo/promo_set.asp?t=%a8%a6%ca%cb%d1%c7%c9%c8%c6%c8%ca%c8%c4%d1%c9%c7%c6%c5%cb%fd%c9%c7">ING Direct Savings Account</a> and <a href="http://home.ingdirect.com/promo/promo_set.asp?t=%a8%43%67%64%6e%64%66%65%63%65%67%65%61%6e%66%64%63%62%68%9a%66%62">Electric Orange Account</a> for some of my banking, you know all eyes in one basket and that stuff. Now, maybe it&#8217;s their features or their interface, but I use ING Direct, daily. HSBC is more of a backup savings account. I send money there and don&#8217;t really worry about it, so I&#8217;ve never used it enough to find a problem.</p>
<h3>The Problem</h3>
<p>But the other day, I decided to open a second account with HSBC and I got the following error:</p>
<blockquote><p>A Technical Error Has Occurred</p></blockquote>
<p>I was only trying to transfer money from one account to another, I didn&#8217;t get it. So I figured there must be some problem with the website right? So I wait it out for a few days to let them fix their problem. But alas, the next time I checked, same problem. So finally, I decided to write their Tech Support and I got the following back in a lovely email:</p>
<blockquote><p>Recently our website had some updates that your Internet browser may not<br />
yet recognize. Â As such, please delete your browser&#8217;s cookies and<br />
temporary Internet files and attempt the transfer again. Â  If you are<br />
still unable to perform the transfer, please contact us at the number<br />
below so that we may help troubleshoot the problem.</p>
<p>The following are HSBC-supported browsers:</p>
<p>Windows:<br />
Internet Explorer &#8211; versions 6.0 and 7.0<br />
Mozilla/FireFox ? version 1.5 and 2.0</p>
<p>Macintosh:<br />
Safari ? version 2.0</p></blockquote>
<p>So I followed the instructions: I <strong>cleared my cache and deleted my cookies</strong> (even though it pained me), but it still didn&#8217;t work. I sat there and scratched my head for a minute before I finally realized what the heck was going on. Then <strong>I loaded up my copy of Internet Explorer 7.0 and did a transfer with no problems</strong>. Then I read the rest of the email. Yep, the <strong><em>recent updates</em></strong> to the website were <strong>not compatible with Firefox 3.0</strong>. Now I don&#8217;t understand something, because it&#8217;s not like there was any fancy AJAX functions. I just click the button that says transfer.Â  Later I found a link to <a href="http://www.hsbcdirect.co.kr/1/2/!ut/p/kcxml/04_Sj9SPykssy0xPLMnMz0vM0Y_QjzKLN4k39g0ESZnFG8Wb-1voR6KJmbqHYYiZBJiiiZnGG6MLGcQ7IkR8PfJzU_WDgDKR5kAhk0Bj_aic1PTE5Er9YH1v_QD9gtxQIIgo93Z0VAQAyCH3eg!!/delta/base64xml/L0lJSk03dWlDU1lBIS9JTGpBQU15QUJFUkVSRUlrLzRGR2dkWW5LSjBGUm9YZnJDRUEhLzdfNF80UTMvMg!!">HSBC&#8217;s Support Page</a> and found this remedy to my problem:</p>
<blockquote><p><strong>1) Keep your browser up-to-date.</strong><br />
HSBC Direct website supports MS Internet Explorer 5.5 SP4 or higher.<br />
Currently HSBC Direct website does not support other web browsers such Firefox &amp; Mozilla, Please use MS Internet Explorer and keep your computer &amp; browser up-to-date.</p></blockquote>
<p>So, let me get this straight, I need to keep my browser updated, but not too updated. OK, HSBC.</p>
<h3>What I Think Happened</h3>
<p>So let me take a wild crack at what happened, <strong>some executives at HSBC made the decision</strong> for the new updates on the website and they insisted that the developers support older browsers; IE 6, for example. Usually, there&#8217;s not much wrong with this if it&#8217;s done right. They got away with some hackish code that seems to work for what they had at the time, then Fireofx 3.0 came out with this strange idea called standards compliance and just messed up their whole backwards compatible world.</p>
<p>Again, let me point of this is <strong>what I <em>think</em> happened</strong>, but this is a classic reason, why we should be supporting better standards for web development.</p>
<p>But all of this is easier said than done. Before going down any path, you <strong>need to examine your market before making such decisions</strong>. But you also need to <strong>consider future markets</strong>. How much is it going to cost to fix this lil boo boo? Possibly a lot. Are they going to fix it anytime soon? I&#8217;m guessing no. I don&#8217;t think Firefox 3.0 (seeing, that it&#8217;s just a few months old) has any sort of market share that they are going to care much. So all you <strong>Linux and Mac users better not follow all those upgrade warnings</strong> for your browser. You won&#8217;t be able to transfer funds. Typical example of powerful people in expensive suits making decisions about technology.</p>
<h3>What Should Be Done</h3>
<p>Now, <strong>I&#8217;m not anti-Microsoft or even anti-IE-6, but I am anti-stuff-that-wastes-my-time</strong>. The problem isn&#8217;t IE 6 per say. IE 6 had a purpose, back in 2001 and (for the most part) it fulfilled that purpose. The <strong><em>real problem</em> is that we&#8217;re trying to implement 2008 technology on a 7 year old platform</strong>. You don&#8217;t really see this many other places in the tech world. New software comes out and you don&#8217;t have enough RAM, then tough nuts, you need to upgrade. Microsoft is notorious for this actually. <strong>SQL Server 2005 refuses to restore a backup fro SQL Server 2000</strong>, and they say tough nuts. The brand new <strong><em>Call of Duty 4</em> for the XBox 360</strong> (I assume) <strong>won&#8217;t run on a regular XBox</strong> will it? Nor do <strong>PS3 games work on PS2</strong> and <strong>Nintendo Wii games don&#8217;t work on a Gamecube</strong>. So I&#8217;m really tired of hearing this crap about IE 6 is being pushed by the market and not the industry. <strong>The industry controls the market</strong>. A <em>lot</em> of IE 6 users don&#8217;t really know any better. They got IE 6 and people make accommodations for them in the name of backwards compatibility.</p>
<p>Now, I&#8217;ve heard people say that all this browser compatibility issues is due to &#8220;developer whining&#8221;. And, they&#8217;d be right to a certain extent. But what very few realize, is that <em>developer whining</em> often translates directly to a dollar figure. <strong>The more time that goes into patching crappy, workaround code</strong> for older browsers; <strong>the less time that&#8217;s being spent on new development and fixing legitimate bugs</strong>. And when some HSBC-like snafu happens, someone needs to fix it. Now plain out boycott is a bit harsh. There are some people that can&#8217;t upgrade for good reason (the folks in the cooperate office with the older PCs that they don&#8217;t have rights to install stuff on). But I&#8217;m much in support of the gentle nudge approach like is done on Save The Developers:</p>
<pre class="brush: xml; title: ; notranslate">&lt;script src=&quot;http://www.savethedevelopers.org/say.no.to.ie.6.js&quot;&gt;&lt;/script&gt;</pre>
<p>This brings up a nice lil&#8217; AJAX-ish looking slide down image in the upper right corner with the details on why the user should upgrade. And no, it&#8217;s not a ploy to push Firefox. The first link on the page is to download IE 7. Even though, I&#8217;m a Firefox lover, I might not be using it if I started browsing with IE 7. To be honest, tabbed browsing is what did it for me. It had nothing to do with compatibility, with code, etc; because at that time I didn&#8217;t know better and didn&#8217;t care.</p>
<p>Now as a developer, I would love to see a boycott, but that&#8217;s not realistic; because like it or not, <strong>IE 6.0 still has a large grasp (at least 25%) on the market</strong>. However, I do explain the problems with IE 6.0 and I explain to them why it&#8217;s going to take more time and cost more to develop for. It&#8217;s simple Math: it takes time to do all those JavaScript and CSS hacks.</p>
<p>So we need to cuddling the users of Internet Explorer 6.0: ween them off the bottle, get the thumb out of their mouth, get them off the tit and on some formula. All IE 6.0 users, it&#8217;s time to ditch the Pampers a get some Big Boy Pants. 2001 was a long time ago, in the life of web technology, it&#8217;s time to grow up.</p>
]]></content:encoded>
							<wfw:commentRss>https://webdevelopment2.com/hsbc-direct-doesnt-support-firefox-30-another-reason-to-dump-ie-60/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
						<post-id xmlns="com-wordpress:feed-additions:1">338</post-id>	</item>
		<item>
		<title>WordPress 2.5+ Upload Image Error &#8211; Finally Fixed!</title>
		<link>https://webdevelopment2.com/wordpress-25-upload-image-error-finally-fixed/</link>
				<comments>https://webdevelopment2.com/wordpress-25-upload-image-error-finally-fixed/#comments</comments>
				<pubDate>Mon, 28 Jul 2008 12:02:48 +0000</pubDate>
		<dc:creator><![CDATA[Kevin Lloyd]]></dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[ie]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://webdevelopment2.com/?p=329</guid>
				<description><![CDATA[I know I&#8217;ve mentioned it before, but I&#8217;ve had some problems with WordPress 2.5 and their new image upload. Now I know there have been many, many, many, (well let&#8217;s just say a lot) of posts and articles about how to fix this problem. But, none of them seemed to work for me. Most of [&#8230;]]]></description>
								<content:encoded><![CDATA[<p>I know I&#8217;ve mentioned it before, but I&#8217;ve had some problems with WordPress 2.5 and their new <a href="https://webdevelopment2.com/wordpress-25-vista-blog-platforms/">image upload</a>. Now I know there have been <a href="http://wordpress.org/support/topic/165607">many</a>, <a href="http://wordpress.org/support/topic/164293?replies=7">many</a>, <a href="http://wordpress.org/support/topic/164999">many</a>, (<a href="http://wordpress.org/support/topic/167805">well</a> <a href="http://reviewabc.com/wordpress/wordpress-25-bug-cant-insert-image-into-post/">let&#8217;s</a> <a href="http://www.nierva.com/wordpress-25-bug-image-upload-fixworkaround/">just</a> <a href="http://www.realestatebloglab.com/blogging-in-general/customize-wordpress-insertedit-image/">say</a> <a href="http://www.davidtan.org/wordpress-25-media-manager-not-working-in-opera/">a lot</a>) of <a href="http://www.colicinfant.com/blog/biz-stuff/how-to-insert-photos-to-wordpress-blog-25/">posts</a> and <a href="http://joshhighland.com/blog/2008/03/30/wordpress-25-image-upload-problem-solved/">articles</a> about how to fix this problem. But, none of them seemed to work for me. Most of them just go into the basics: setting folders with the right permissions, etc.</p>
<h2>My Set Up</h2>
<p>I won&#8217;t go into detail, but I think being on Dreamhost has something to do with it, because trying all this on my local PC with XAMPP Lite on Windows XP.</p>
<h2>Here&#8217;s What I Tried</h2>
<p>In addition to trying all of the above on my existing blogs, I&#8217;ve tried the fresh install approach. I installed a fresh copy of WordPress and then bit by bit, I copied in database tables. All seemed to go fine, for a while, then (for some reason) I would just get that error again. It didn&#8217;t matter what the browswer was either. When I attempt to insert an image the screen would blank out.</p>
<h2>Here&#8217;s The Problem</h2>
<p>I noticed that the stuff would always break when I copied over the <em>options</em> table to my WordPress database. So after many, many hours and copying records (<em>almost</em>) one by one into the newly installed WordPress database, I&#8217;ve finally narrowed it down. The <strong><em>WordPress address (URL)</em> needs to be all lowercase</strong> or else the thing just doesn&#8217;t work. I don&#8217;t really have an explanation for it and frankly, after all this time, I don&#8217;t really care; I&#8217;m just happy it finally works.</p>
<p><a href="https://i1.wp.com/webdevelopment2.com/wp-content/uploads/wordpress-general-settings.png?ssl=1"><img class="alignnone size-medium wp-image-331" title="Wordpress General Settings" src="https://i1.wp.com/webdevelopment2.com/wp-content/uploads/wordpress-general-settings.png?resize=300%2C113&#038;ssl=1" alt="" width="300" height="113" srcset="https://i1.wp.com/webdevelopment2.com/wp-content/uploads/wordpress-general-settings.png?resize=300%2C113&amp;ssl=1 300w, https://i1.wp.com/webdevelopment2.com/wp-content/uploads/wordpress-general-settings.png?w=814&amp;ssl=1 814w" sizes="(max-width: 300px) 100vw, 300px" data-recalc-dims="1" /></a></p>
<p>Now, I suppose that it&#8217;s my fault for wanting <em>fancy</em> looking URLs, so I take the blame.</p>
<p>Hope everyone else finds this helpful.</p>
]]></content:encoded>
							<wfw:commentRss>https://webdevelopment2.com/wordpress-25-upload-image-error-finally-fixed/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
						<post-id xmlns="com-wordpress:feed-additions:1">329</post-id>	</item>
		<item>
		<title>Blog Theme Designers Given Up on IE 6?</title>
		<link>https://webdevelopment2.com/blog-theme-designers-given-up-on-ie-6/</link>
				<comments>https://webdevelopment2.com/blog-theme-designers-given-up-on-ie-6/#comments</comments>
				<pubDate>Sat, 26 Jul 2008 12:09:50 +0000</pubDate>
		<dc:creator><![CDATA[Kevin Lloyd]]></dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[ie]]></category>
		<category><![CDATA[internet explorer]]></category>

		<guid isPermaLink="false">http://webdevelopment2.com/?p=323</guid>
				<description><![CDATA[Lately, I&#8217;ve decided to switch themes on a few of my blogs. So I started looking around for some themes that are nice and simple enough. I found about five (5) candidates and that were nice, simple and not too loud. To my surprise none of these themes worked in Internet Explorer 6.0. It seems [&#8230;]]]></description>
								<content:encoded><![CDATA[<p>Lately, I&#8217;ve decided to switch themes on a few of my blogs. So I started looking around for some themes that are nice and simple enough. I found about five (5) candidates and that were nice, simple and not too loud. To my<em> surprise</em> none of these themes worked in Internet Explorer 6.0. It seems that, lately, blog theme designers are saying a big old &#8220;screw you IE 6.0&#8221; and I don&#8217;t blame them.</p>
<p>Now, I&#8217;m having mixed emotions about this. On one hand, I&#8217;m happy that people are finally putting the nail in IE 6.0&#8217;s coffin. However, I&#8217;m slightly pissed that I can&#8217;t use these themes. I, more than anyone, should know the reasons why we should abaondon IE 6.0 and move on to better, more productive web development and enjoyment. But, the purist in me still doesn&#8217;t want to leave the poor saps who are trapped behind the veil (whether is by software contraints or ignorance) of Internet Explorer 6.0 behind.</p>
<p>Browser statistics show that IE 6 still maintains between <a href="http://www.w3schools.com/browsers/browsers_stats.asp">26%</a> and <a href="http://www.thecounter.com/stats/2008/July/browser.php">37%</a> of the web browser market. Right now, that&#8217;s just too many people to ignore.</p>
]]></content:encoded>
							<wfw:commentRss>https://webdevelopment2.com/blog-theme-designers-given-up-on-ie-6/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
						<post-id xmlns="com-wordpress:feed-additions:1">323</post-id>	</item>
	</channel>
</rss>
