<?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/"
	>

<channel>
	<title>somedirection &#187; Agile Development</title>
	<atom:link href="http://somedirection.com/category/agile-development/feed/" rel="self" type="application/rss+xml" />
	<link>http://somedirection.com</link>
	<description></description>
	<lastBuildDate>Mon, 19 Jul 2010 21:21:58 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=6862</generator>
		<item>
		<title>Debugging Internet Explorer  CSS &#8211; My Methods</title>
		<link>http://somedirection.com/2008/03/22/debugging-internet-explorer-css-my-methods/</link>
		<comments>http://somedirection.com/2008/03/22/debugging-internet-explorer-css-my-methods/#comments</comments>
		<pubDate>Sat, 22 Mar 2008 22:27:47 +0000</pubDate>
		<dc:creator>Kyle</dc:creator>
				<category><![CDATA[Agile Development]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://somedirection.com/2008/03/22/debugging-internet-explorer-css-my-methods/</guid>
		<description><![CDATA[I recently spent the day debugging Internet Explorer. I save it for the absolute last step in front end development before pushing a site live. I want to avoid Explorer as much as possible. I figured my process would be worth sharing. This is my setup. MacBook running Firefox with the Web Developer Plugin and [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.flickr.com/photos/somedirection/2342051020/" title="How I Debug by somedirection, on Flickr"><img class="pic" src="http://farm4.static.flickr.com/3247/2342051020_8d3519fb22.jpg" width="500" height="375" alt="How I Debug" /></a></p>

<p>I recently spent the day debugging Internet Explorer. I save it for the absolute last step in front end development before pushing a site live. I want to avoid Explorer as much as possible.</p>

<p>I figured my process would be worth sharing. This is my setup. </p>

<ol>
<li>MacBook running Firefox with the Web Developer Plugin and Firebug plugins installed.</li>
<li>Old Toshiba Laptop 1.8ghz barebones Windows XP installation with IE6</li>
<li>Parallels installed on the MacBook with IE7 on Windows XP SP2</li>
</ol>

<p>With this setup I can test for any modern browser with any kind of significant market share.</p>

<ul>
<li>Firefox Mac</li>
<li>Firefox Win</li>
<li>IE 6 + 7 (soon to be 8 as well)</li>
<li>Camino</li>
<li>Safari</li>
</ul>

<p>Debugging IE issues is probably the most painful thing about my job, but one that&#8217;s made a little bit easier because of my approach so I thought it&#8217;d be useful to share.</p>

<p>I develop 9-5 in Firefox so any rendering bugs usually come to my attention right away and I&#8217;ll fix them immediately. Camino is based on the same Gecko rendering engine so I don&#8217;t have to worry about anomalies there. Safari does a good job rendering everything and my colleagues use it as their day to day browser so we usually catch any rendering bugs that way.</p>

<p>Then it comes down to IE debugging. I only concern myself with IE6 and above, I can handle well for modern browsers, besides the market share of browsers that fall outside this range is really insignificant statistically. For small development teams it&#8217;s hardly worth the extra effort to pay attention to the long tail of browsers.</p>

<p>Looking at Google Analytics for a heavy traffic site that I work on:</p>

<p><strong>5.6m Visitors</strong> from 8/1/07 &#8211; 3/20/08 </p>

<p><img class="pic" src="http://somedirection.com/wp-content/uploads/2008/03/6mo-browsers.png" alt="6+mo-browsers.png" border="0" width="553" height="147" />&lt;br/>
<em>IE is still dominant &#8211; so testing for these browsers is essential.</em></p>

<p><img class="pic" src="http://somedirection.com/wp-content/uploads/2008/03/ie-last-6-mo.png" alt="ie-last-6+-mo.png" border="0" width="553" height="118" />&lt;br/>
<em>If we look at the last 6 months, IE7.0 and IE6.0 are neck and neck ~50/50, however:</em></p>

<p><img class="pic" src="http://somedirection.com/wp-content/uploads/2008/03/ie-last-3mo.png" alt="ie-last-3mo.png" border="0" width="555" height="120" />&lt;br/>
<em>In the first 3+ months of 2008 you can see that IE7 has taken a significant leap above IE6 in the market 61/39 and IE 5.5 has gone to a 0.12% market share to a meager 0.07% market share.</em></p>

<p>That leaves us only concerned with IE6 and IE7 (and hopefully upcoming IE8 will be a non factor). The best way to deal with CSS and IE is by leveraging something called <a href="http://www.quirksmode.org/css/condcom.html">conditional comments</a></p>

<p>Before conditional comments I relied on browser hacks to differentiate between browsers, but conditional comments are a lot easier and so much more effective. Currently I use these declarations:</p>

<div class='code_parent'><div class='code_child'><code><pre>&#60;!--[if IE 6]>
&#60;link rel="stylesheet" href="/stylesheets/ie6.css" type="text/css" />
&#60;![endif]-->
&#60;!--[if IE 7]>
&#60;link rel="stylesheet" href="/stylesheets/ie7.css" type="text/css" />
&#60;![endif]--></pre></code></div></div>

<p>I start with IE6 and clean up any rendering issues &#8211; then I move on to IE7, which invariably has fewer issues to deal with. Because IE does not have a handy dandy tool like <a href="http://getfirebug.com/">Firebug</a> to help me diagnose the problem this process usually involves a lot of trial and error. It&#8217;s a very iterative process and one that my <a href="/2007/05/27/agile-development-workflow-part-1-setup/">Agile Development Workflow</a> is well suited for.</p>

<p>One technique I&#8217;ve found to be indispensable is assigning various background colors to the markup that I&#8217;m trying to debug. Often this is all I need to target CSS rules run amok. Over time you can avoid generating certain CSS + HTML that will break IE altogether &#8211; and that&#8217;s what separates the experts from novices. </p>

<p>Was this helpful? How do you approach debugging CSS in IE? Share!</p>
]]></content:encoded>
			<wfw:commentRss>http://somedirection.com/2008/03/22/debugging-internet-explorer-css-my-methods/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Agile Development Workflow Part 2 &#8211; Love the sync</title>
		<link>http://somedirection.com/2008/01/12/agile-development-workflow-part-2-love-the-sync/</link>
		<comments>http://somedirection.com/2008/01/12/agile-development-workflow-part-2-love-the-sync/#comments</comments>
		<pubDate>Sat, 12 Jan 2008 05:13:26 +0000</pubDate>
		<dc:creator>Kyle</dc:creator>
				<category><![CDATA[Agile Development]]></category>
		<category><![CDATA[Shameless Promotion]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://somedirection.com/2008/01/12/agile-development-workflow-part-2-love-the-sync/</guid>
		<description><![CDATA[Continuation of Agile Development Workflow Part 1 &#8211; Setup (I&#8217;d start there). My lively-hood depends on the sync. It&#8217;s really what pulls all my projects together and unifies my workflow. It allows me to develop in numerous web technologies like Ruby On Rails, PHP, Django, Catalyst with relative ease, all at once. The Sync process [...]]]></description>
			<content:encoded><![CDATA[<p>Continuation of <strong><a href="/2007/05/27/agile-development-workflow-part-1-setup/">Agile Development Workflow Part 1 &#8211; Setup</a></strong> (I&#8217;d start there).
<img class="right" src='http://somedirection.com/wp-content/uploads/2008/01/the_sync.png' alt='sync' />
My lively-hood depends on the <strong>sync</strong>. It&#8217;s really what pulls all my projects together and unifies my workflow. It allows me to develop in numerous web technologies like Ruby On Rails, PHP, Django, Catalyst with relative ease, all at once. The Sync process is based on customized <a href="http://samba.anu.edu.au/rsync/">rsync commands</a>. Assuming that you set up ssh properly (see Part 1), all we have to do now is create our shell script that does the heavy lifting for us. Essentially we&#8217;re <em>pushing</em> all of our changes up to the server as we see fit. Rsync can be customized to upload only the files that change with relative ease.</p>

<p>The first thing we&#8217;ll want to do is create the sync file which will be responsible for handling the rsync process.
In the command line do:
<div class='code_parent'><div class='code_child'><code><pre>macAttack: kb$ sudo touch /usr/bin/sync 
macAttack: kb$ sudo chmod +x /usr/bin/sync 
macAttack: kb$ mate /usr/bin/sync</pre></code></div></div></p>

<p>You should be staring at an empty file. What we want to do is replicate the process you would usually do to push the site up live, or upload it to your development server via ftp.</p>

<p>It&#8217;s important that you have a consistent directory structure for your websites to get all of these &#8220;rules&#8221; setup (assuming that you&#8217;ll be working with multiple sites) properly. It will allow us to setup new rules with minimal effort.</p>

<p>I use Subversion (svn) for all of my projects and because of this I have a common directory structure for most of my web apps. It looks like this:
<div class='code_parent'><div class='code_child'><code><pre>macAttack: kb$ /Development/Project/trunk/</pre></code></div></div></p>

<p>For branches the directory structure looks like this:
<div class='code_parent'><div class='code_child'><code><pre>macAttack: kb$ /Development/Project/branches/<em>name</em></pre></code></div></div></p>

<p>The beauty of syncing is all changes get moved over, overwriting the previous files so you rarely run into any sync errors and if you do it&#8217;s usually user error. <img src='http://somedirection.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>

<p>Here are the contents of my sync script (simplified)
<div class='code_parent'><div class='code_child'><code><pre>#!/bin/bash</p>

<p>REPO=""
SRC=""
BRANCH=""
DEV="Development"
HOME="/Users/kb"</p>

<p>case $1 in
    s) 
      rsync --exclude-from=$HOME/.rsync-exclude -e "ssh" -ruv $HOME/$DEV/somedirection/trunk/blog/  serveradmin@mediatemple.com:~/domains/somedirection.com/html/
        exit
        ;;
    *) echo "Unrecognized"
        ;;
esac</p>

<p></pre></code></div></div></p>

<p>Let&#8217;s break it down.
<ol>
<li>&#8211;exclude-from=$HOME is setup to be the same path that relates to ~/. In my user home dir ~/ there&#8217;s a file named .rsync-exclude, this file is a line-break separated list of filenames we want to exclude in our sync. Check out my exclude list &raquo; <a href='http://somedirection.com/wp-content/uploads/2008/01/rsync-exclude.txt' title='rsync exclude'>rsync exclude</a>. The exclude list prevents .svn (subversion dir&#8217;s) from being pushed to the remote server, so you can work on a checked out copy of your web project, but the server only gets what it needs without any unnecessary files.</li>
<li>-e &#8220;ssh&#8221; tells rsync to go over ssh to sync the files, since we already set up ssh to enable auto-login to the remote server we won&#8217;t be prompted to provide a password on every sync (and you will sync alot).</li>
<li>finally we pass the parameters -ruv
 -r, &#8211;recursive             recurse into directories #this way you only have to pass a top level path
 -u, &#8211;update                update only (don&#8217;t overwrite newer files) #it&#8217;s important that your computers internal clock matches the remote servers
 -v, &#8211;verbose               increase verbosity
</li>
<li>The Local Path: $HOME/$DEV/somedirection/trunk/blog/ </li>
<li>The Remote Path: serveradmin@mediatemple.com:~/domains/somedirection.com/html/ => username@remotehost:remotepath</li>
</ul></p>

<p>If the following command is run from from Terminal:
<div class='code_parent'><div class='code_child'><code><pre>macAttack: kb$/usr/bin/sync s</pre></code></div></div>
If all goes well you should get verbose output from your sync!</p>

<p>Rsync is a powerful tool, can work wonders with <a href="http://www.linux.com/feature/117236">backups</a> as well.</p>

<p>Let me know if you found this article helpful and give feedback. Stay tuned for Sync integration with TextMate that will really put your whole dev process in overdrive!</p>
]]></content:encoded>
			<wfw:commentRss>http://somedirection.com/2008/01/12/agile-development-workflow-part-2-love-the-sync/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Agile Development Workflow Part 1 &#8211; Setup</title>
		<link>http://somedirection.com/2007/05/27/agile-development-workflow-part-1-setup/</link>
		<comments>http://somedirection.com/2007/05/27/agile-development-workflow-part-1-setup/#comments</comments>
		<pubDate>Mon, 28 May 2007 00:54:25 +0000</pubDate>
		<dc:creator>Kyle</dc:creator>
				<category><![CDATA[Agile Development]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://somedirection.com/2007/05/27/agile-development-workflow-part-1-setup/</guid>
		<description><![CDATA[The cornerstones of the agile development workflow I&#8217;ve developed over time are speed and flexibility. As someone who has fallen in love with his mac and refuses to work on any other operating system &#8211; I&#8217;ve had to adjust my workflow for whichever frameworks I&#8217;m working with. This workflow will be of no use to [...]]]></description>
			<content:encoded><![CDATA[<p>The cornerstones of the agile development workflow I&#8217;ve developed over time are speed and flexibility. As someone who has fallen in love with his mac and refuses to work on any other operating system &#8211; I&#8217;ve had to adjust my workflow for whichever frameworks I&#8217;m working with. </p>

<p>This workflow will be of no use to 9-5ers that punch in and out promptly, who work only on a company provided computer and exclusively work with Active Server Pages and other web technologies circa 2000. If you have a <em>passion</em> for the web and <a href="http://en.wikipedia.org/wiki/List_of_web_application_frameworks">web technologies</a> &#8211; this will meet all of your needs (and possibly desires).</p>

<p>I have had to work with many co-currently, from working with .net applications (<a href="http://yumdrop.com">yumdrop</a>) to perl applications (<a href="http://quibblo.com">quibblo</a>) and php based solutions (this blog), etc. I needed something that was flexible and fast, that I could use at work or at home (I work on my MacBook Pro exclusively), with a speed that would not interrupt my development process &#8211; I make changes fast and frequent. Plus &#8211; I am a <strong>front end web developer</strong> &#8211; so I don&#8217;t have to worry about developing with <abbr title="Integrated Development Environment">IDE</abbr>&#8216;s  (RIP VisualStudio.net) &#8211; <a href="http://macromates.com/">TextMate</a> is my monkey wrench.</p>

<p>I&#8217;m splitting up this series over numerous posts &#8211; I believe it&#8217;s just too much information. Once I get all the information maybe I&#8217;ll release a condensed version but I think a walk-through will serve everyone equally well.</p>

<h2>The Connector</h2>

<p>The first thing that is required is a way to build a bridge. Since I work mostly on remote servers (although this is not required) I run some automation scripts over ssh. The problem with ssh or any remote login is the dreadful password prompt. What good is automation if you have to type in your password everytime? Luckily ssh allows you setup your account in a way that will give you access to your servers <em>sans password</em>.</p>

<h2>Setup Time</h2>

<p>Since this is an agile dev workflow that is catered towards Mac users &#8211; I&#8217;ll assume you have ssh available by default.</p>

<p>Fire up terminal (I prefer <a href="http://iterm.sourceforge.net/">iTerm</a>)</p>

<p>Navigate to 
<div class='code_parent'><div class='code_child'><code><pre>~/.ssh</p>

<p>macAttack:~/.ssh kb$ ls
id<em>rsa          id</em>rsa.pub      known_hosts</pre></code></div></div></p>

<p>Upload your <div class='code_parent'><div class='code_child'><code><pre>id_rsa.pub</pre></code></div></div> file up to the root folder of your remote ssh-enabled server via FTP</p>

<p>This is an <strong>IMPORTANT</strong> step. If you are logged in via ssh do not copy and paste your key &#8211; it won&#8217;t work! </p>

<p>Log in to your webserver via ssh: <div class='code_parent'><div class='code_child'><code><pre> ssh username@server.whatever</pre></code></div></div></p>

<p>In the directory you uploaded your id<em>rsa.pub file &#8211; run the follow command:
<div class='code_parent'><div class='code_child'><code><pre>cat id</em>rsa.pub  >> ~/.ssh/authorized_keys</pre></code></div></div></p>

<p>This will append your computers public rsa key to your remote computer <div class='code_parent'><div class='code_child'><code><pre>authorized_keys</pre></code></div></div> file</p>

<p><strong>Test it out!</strong> disconnect and reconnect &#8211; it should be automatic!</p>

<p>If I lost you, I found these resources that go into a bit more depth of the setup process and may clear up any confusion: 
<ul>
    <li><a href="http://www.stocksy.co.uk/articles/Mac/ssh_on_mac_os_x/">SSH on Mac OSX</a></li>
    <li><a href="http://wiki.dreamhost.com/index.php/SSH#Passwordless_Login">passwordless ssh login</a></li></p>

<p></ul></p>

<p>Setup Complete!</p>

<p>If you got tripped up feel free to contact me and I will try to help you out.</p>

<p>Watch for updates here: <a href="/category/agile-development/">Agile Development Workflow Series</a></p>

<p>Next in line: <strong><a href="/2008/01/12/agile-development-workflow-part-2-love-the-sync/">Agile Development Workflow Part 2 &#8211; Love The Sync</a></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://somedirection.com/2007/05/27/agile-development-workflow-part-1-setup/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Most Agile Web Development Workflow &#8211; Ever</title>
		<link>http://somedirection.com/2007/05/02/the-most-agile-web-development-workflow-ever/</link>
		<comments>http://somedirection.com/2007/05/02/the-most-agile-web-development-workflow-ever/#comments</comments>
		<pubDate>Thu, 03 May 2007 03:59:43 +0000</pubDate>
		<dc:creator>Kyle</dc:creator>
				<category><![CDATA[Agile Development]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://somedirection.com/2007/05/02/the-perfect-most-agile-web-development-workflow-ever/</guid>
		<description><![CDATA[Over time, I&#8217;ve developed a perfect workflow for all of my web development needs. My MacBook Pro has become the epicenter of my dev universe. Below are just a view of the frameworks I have worked with. Asp.Net Catalyst Ruby On Rails PHP Whether I&#8217;m developing on my local host or a remote server, the [...]]]></description>
			<content:encoded><![CDATA[<p>Over time, I&#8217;ve developed a perfect workflow for all of my web development needs. My MacBook Pro has become the epicenter of my dev universe. Below are just a view of the frameworks I have worked with. </p>

<ul>
<li>Asp.Net</li>
<li>Catalyst</li>
<li>Ruby On Rails</li>
<li>PHP</li>
</ul>

<p>Whether I&#8217;m developing on my local host or a remote server, the workflow can adapt to the situation. I&#8217;m going to split this up into a 3 part series; this is just the teaser. Consider yourself teased!</p>

<p>Watch for updates here: <a href="/category/agile-development/">Agile Development Workflow Series</a></p>
]]></content:encoded>
			<wfw:commentRss>http://somedirection.com/2007/05/02/the-most-agile-web-development-workflow-ever/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
