<?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:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
xmlns:rawvoice="http://www.rawvoice.com/rawvoiceRssModule/"
>

<channel>
	<title>centresource interactive agency blog &#187; Web Development</title>
	<atom:link href="http://blog.centresource.com/category/development/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.centresource.com</link>
	<description>web development &#124; nashville, tn</description>
	<lastBuildDate>Mon, 14 May 2012 19:34:30 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1</generator>
<!-- podcast_generator="Blubrry PowerPress/2.0.4" -->
	<itunes:summary>web development | nashville, tn</itunes:summary>
	<itunes:author>CentreSource</itunes:author>
	<itunes:explicit>no</itunes:explicit>
	<itunes:image href="http://cs-tv.s3.amazonaws.com/CentreSource_Podcast.png" />
	<itunes:owner>
		<itunes:name>CentreSource</itunes:name>
		<itunes:email>podcast@centresource.com</itunes:email>
	</itunes:owner>
	<managingEditor>podcast@centresource.com (CentreSource)</managingEditor>
	<itunes:subtitle>web development | nashville, tn</itunes:subtitle>
	<itunes:keywords>centresource,interactive,design,marketing,development,strategy,nashville,tn</itunes:keywords>
	<image>
		<title>centresource interactive agency blog &#187; Web Development</title>
		<url>http://cs-tv.s3.amazonaws.com/CentreSource_Podcast.png</url>
		<link>http://blog.centresource.com/category/development/</link>
	</image>
	<itunes:category text="Technology" />
		<rawvoice:location>Nashville, TN</rawvoice:location>
		<rawvoice:frequency>Monthly</rawvoice:frequency>
		<item>
		<title>Tennessean: Mobile application market heating up</title>
		<link>http://blog.centresource.com/2012/02/24/tennessean-mobile-application-market-heating-up/</link>
		<comments>http://blog.centresource.com/2012/02/24/tennessean-mobile-application-market-heating-up/#comments</comments>
		<pubDate>Fri, 24 Feb 2012 20:01:05 +0000</pubDate>
		<dc:creator>Matthew Phillips</dc:creator>
				<category><![CDATA[Company News]]></category>
		<category><![CDATA[iPhone OS]]></category>
		<category><![CDATA[Miscellaneous]]></category>
		<category><![CDATA[Mobile]]></category>

		<guid isPermaLink="false">http://blog.centresource.com/?p=4211</guid>
		<description><![CDATA[This past Sunday, the Tennessean published an article around the recent surge in mobile application development in Nashville. One of...]]></description>
			<content:encoded><![CDATA[<p>This past Sunday, the Tennessean published an article around the recent surge in mobile application development in Nashville. One of those interviewed was one of our most recent clients, PureSweat. PureSweat offers specialized basketball training and development programs to top high school, college and NBA players. Their program enhances player's skills and fundamentals, which allow them to be successful at any level. PureSweat's owner, Drew Hanlen is currently finishing up his senior year at Belmont University. We wish Drew and the rest of the Belmont team huge success during the March Madness season.  We are very excited to have the opportunity to work on such an amazing product and driven entrepreneur.</p>
<p>You can <a  href="http://www.tennessean.com/article/20120219/BUSINESS04/302190056/-App-economy-heats-up-consumers-go-mobile" target="_blank">read the article on the Tennessean</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.centresource.com/2012/02/24/tennessean-mobile-application-market-heating-up/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Freakin&#039; asymptotic notation: How does that work?</title>
		<link>http://blog.centresource.com/2012/01/23/freakin-asymptotic-notation-how-does-that-work/</link>
		<comments>http://blog.centresource.com/2012/01/23/freakin-asymptotic-notation-how-does-that-work/#comments</comments>
		<pubDate>Mon, 23 Jan 2012 18:15:32 +0000</pubDate>
		<dc:creator>Jeremy Holland</dc:creator>
				<category><![CDATA[Miscellaneous]]></category>
		<category><![CDATA[Theory]]></category>
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://blog.centresource.com/?p=3623</guid>
		<description><![CDATA[OK, I'll be the first to admit it - math is my favorite subject. I know that makes me weird...]]></description>
			<content:encoded><![CDATA[<p>OK, I'll be the first to admit it - math is my favorite subject. I know that makes me weird - even among fellow working software engineers - but it's the truth. It's also the truth that while they may be boring to many, knowing even a little bit about the numbers of computer science can help make you a better software engineer. Today, we're going to look at a little piece of applied discrete math - the analysis of algorithms - and how we can empirically describe the performance of one algorithm with respect to another using something called "asymptotic notation". If you already know what this is and how to read the various sub-notations, skip the rest of this post: it's old news. If you do not know what this is, and would like to, read on! If you do not know what this is and don't care, read on anyway - I promise you it'll be worth it.</p>
<p>Now, while I'm totally guilty of bandying around big scary terms like "asymptotic notation" (I'm a notorious stickler for nomenclature), what this boils down to is the following mathematical notation (and its related brothers, which we'll get to later):</p>
<p><p style='text-align:center;'><span class='MathJax_Preview'><img src='http://blog.centresource.com/wordpress/wp-content/plugins/latex/cache/tex_86170f0037842246df67f90ab032cf23.gif' style='' class='tex' alt="O(g(n)) " /></span></p></p>
<p>Most typically, you'll see this used and referred to not as <span class='MathJax_Preview'><img src='http://blog.centresource.com/wordpress/wp-content/plugins/latex/cache/tex_86170f0037842246df67f90ab032cf23.gif' style=' ' class='tex' alt="O(g(n)) " /></span>, which doesn't serve much purpose unless we know already what <span class='MathJax_Preview'><img src='http://blog.centresource.com/wordpress/wp-content/plugins/latex/cache/tex_9a4aa4746e3b82145ff1af2052b1325f.gif' style=' ' class='tex' alt="g(n) " /></span> is, but rather in terms of a <strong>specific</strong> <span class='MathJax_Preview'><img src='http://blog.centresource.com/wordpress/wp-content/plugins/latex/cache/tex_9a4aa4746e3b82145ff1af2052b1325f.gif' style=' ' class='tex' alt="g(n) " /></span>, say, <span class='MathJax_Preview'><img src='http://blog.centresource.com/wordpress/wp-content/plugins/latex/cache/tex_3ac3bd4c4c1f66111feb1ef16babaad6.gif' style=' padding-bottom:1px;' class='tex' alt="n^2 " /></span>:</p>
<p><p style='text-align:center;'><span class='MathJax_Preview'><img src='http://blog.centresource.com/wordpress/wp-content/plugins/latex/cache/tex_14fd02f6323f8a36e2bb5abc3af32923.gif' style='' class='tex' alt="O(n^2) " /></span></p></p>
<p>Moreover, for the purposes of this discussion, we're going to look primarily at the following notation style:</p>
<p><p style='text-align:center;'><span class='MathJax_Preview'><img src='http://blog.centresource.com/wordpress/wp-content/plugins/latex/cache/tex_f7dd4a60bc10c04a4c3da54cb9742773.gif' style='' class='tex' alt="f(n) = O(n^2) " /></span></p></p>
<p>So what on earth does this mean? Well, let's think about algorithms. What is an algorithm? Simply a series of instructions for performing some task, right? In computing specifically an algorithm is implemented as an actual, written program in your language of choice. But under the hood, mathematically, an algorithm is a <strong>function</strong> (sometimes pure, sometimes not): it takes some input(s) and delivers some output. In the above block o' math, let us equate <span class='MathJax_Preview'><img src='http://blog.centresource.com/wordpress/wp-content/plugins/latex/cache/tex_996cb805d9bfdfe8d06fed3a6f842841.gif' style=' ' class='tex' alt="f(n) " /></span> with some algorithm we would like to implement, say, sorting an array of integers from least to greatest. With an algorithm such as that, you would give it an array of dubiously sorted values, and it would give you back an array containing exactly the same elements but in sorted order. Represented mathematically, we have:</p>
<p><p style='text-align:center;'><span class='MathJax_Preview'><img src='http://blog.centresource.com/wordpress/wp-content/plugins/latex/cache/tex_a37aa991945fb7f4c4d9ce2a2485a695.gif' style='' class='tex' alt="s(a) " /></span></p></p>
<p>where <span class='MathJax_Preview'><img src='http://blog.centresource.com/wordpress/wp-content/plugins/latex/cache/tex_ff705f1b6f527fe2038d5ad152f64769.gif' style=' padding-bottom:2px;' class='tex' alt="s " /></span> is the algorithm function itself, and <span class='MathJax_Preview'><img src='http://blog.centresource.com/wordpress/wp-content/plugins/latex/cache/tex_99020cb24bd13238d907c65cc2b57c03.gif' style=' padding-bottom:2px;' class='tex' alt="a " /></span> is the array to be sorted. Now, let's keep in mind that there are many different ways of going about sorting an array - naturally, we would like to pick the fastest one for the task at hand. So in order to know anything about the <em>performance</em> of an algorithm, we should probably come up with some way to represent how long it takes to run. To wit:</p>
<p><p style='text-align:center;'><span class='MathJax_Preview'><img src='http://blog.centresource.com/wordpress/wp-content/plugins/latex/cache/tex_c9e5188fdbbb8ce19aecbcebe72f2bd9.gif' style='' class='tex' alt="T(s(a)) " /></span></p></p>
<p>represents the "time" <span class='MathJax_Preview'><img src='http://blog.centresource.com/wordpress/wp-content/plugins/latex/cache/tex_3b85a149146b36ea27855e7e05656385.gif' style=' padding-bottom:1px;' class='tex' alt="T " /></span> it takes to run algorithm <span class='MathJax_Preview'><img src='http://blog.centresource.com/wordpress/wp-content/plugins/latex/cache/tex_ff705f1b6f527fe2038d5ad152f64769.gif' style=' padding-bottom:2px;' class='tex' alt="s " /></span> on input <span class='MathJax_Preview'><img src='http://blog.centresource.com/wordpress/wp-content/plugins/latex/cache/tex_99020cb24bd13238d907c65cc2b57c03.gif' style=' padding-bottom:2px;' class='tex' alt="a " /></span>. OK. So, how can we begin to reason about what the range of this function might be? Actually, perhaps that's jumping the gun - what would really be the <em>domain</em> of this function? What measurement of your general work-a-day sorting algorithm would dictate how long it takes to run? The answer, my friend, is the size of the input: it should make sense to anybody who's actually had to do it that sorting a 10-element array is a heck of a lot faster than sorting a 10,000,000-element array. So, really, our <span class='MathJax_Preview'><img src='http://blog.centresource.com/wordpress/wp-content/plugins/latex/cache/tex_3b85a149146b36ea27855e7e05656385.gif' style=' padding-bottom:1px;' class='tex' alt="T " /></span> function can be abstracted further as a function of <span class='MathJax_Preview'><img src='http://blog.centresource.com/wordpress/wp-content/plugins/latex/cache/tex_6fa45c22bd311a4aa532cffb668d86a0.gif' style=' padding-bottom:2px;' class='tex' alt="n " /></span>, where <span class='MathJax_Preview'><img src='http://blog.centresource.com/wordpress/wp-content/plugins/latex/cache/tex_6fa45c22bd311a4aa532cffb668d86a0.gif' style=' padding-bottom:2px;' class='tex' alt="n " /></span> is the size of the array to be sorted:</p>
<p><p style='text-align:center;'><span class='MathJax_Preview'><img src='http://blog.centresource.com/wordpress/wp-content/plugins/latex/cache/tex_4df613dbccbdf85fc2a66aca70969a9c.gif' style='' class='tex' alt="T(n) " /></span></p></p>
<p>Since the value of <span class='MathJax_Preview'><img src='http://blog.centresource.com/wordpress/wp-content/plugins/latex/cache/tex_4df613dbccbdf85fc2a66aca70969a9c.gif' style=' ' class='tex' alt="T(n) " /></span> will grow as <span class='MathJax_Preview'><img src='http://blog.centresource.com/wordpress/wp-content/plugins/latex/cache/tex_6fa45c22bd311a4aa532cffb668d86a0.gif' style=' padding-bottom:2px;' class='tex' alt="n " /></span> grows (presumably), this seems like a solid footing to start our thinking upon.</p>
<p>Alrighty. Now that we've got some notation to start thinking about how we'll build this bad boy, let's actually pick a real, concrete algorithm and think through it. For the purposes of simplicity and succinctness (cue laughter), I'm going to go with <a  href="http://en.wikipedia.org/wiki/Bubble_sort">Bubble Sort</a>. If you want to learn more about the actual algorithm, I suggest you read the wikipedia article linked to above, because I'm gonna skip over a fat exposition on what it actually does and how it does it in favor of thinking about how long it <em>takes</em> to do it, and specifically how long it takes to do it to the worse possible case of input: an array that's already been sorted, but reversed. Please note I have copied the following pseudocode directly from wikipedia, and credit therefor is due directly to the author of the page linked to above.</p>
<div style="float: right; text-align: right; line-height: 20px;"><span class='MathJax_Preview'><img src='http://blog.centresource.com/wordpress/wp-content/plugins/latex/cache/tex_f5a8dc2100232317501798aef2136fce.gif' style=' padding-bottom:2px;' class='tex' alt="c_{1} " /></span><br />
<span class='MathJax_Preview'><img src='http://blog.centresource.com/wordpress/wp-content/plugins/latex/cache/tex_46a0953f49dc908f517f7b8e3599ce0f.gif' style=' padding-bottom:2px;' class='tex' alt="c_{2} " /></span><br />
<span class='MathJax_Preview'><img src='http://blog.centresource.com/wordpress/wp-content/plugins/latex/cache/tex_34e67db8f2efedeb7c00cc787613a2b2.gif' style=' padding-bottom:2px;' class='tex' alt="c_{3}n " /></span><br />
<span class='MathJax_Preview'><img src='http://blog.centresource.com/wordpress/wp-content/plugins/latex/cache/tex_56bc9141c4b140d44b8cb4ffc44b593f.gif' style=' padding-bottom:2px;' class='tex' alt="c_{4}n " /></span><br />
<span class='MathJax_Preview'><img src='http://blog.centresource.com/wordpress/wp-content/plugins/latex/cache/tex_29fbc20da3471cfac95817e174c6508f.gif' style=' ' class='tex' alt="c_{5}n(n-1) " /></span><br />
<span class='MathJax_Preview'><img src='http://blog.centresource.com/wordpress/wp-content/plugins/latex/cache/tex_114f1abc3d8cb8ac60905e49c99f9460.gif' style=' ' class='tex' alt="c_{6}n(n-1) " /></span><br />
<span class='MathJax_Preview'><img src='http://blog.centresource.com/wordpress/wp-content/plugins/latex/cache/tex_bb8bbb4afe68d6c721e7ff95e3a86d88.gif' style=' ' class='tex' alt="c_{7}n(n-1) " /></span></p>
<p><span class='MathJax_Preview'><img src='http://blog.centresource.com/wordpress/wp-content/plugins/latex/cache/tex_83e966c8380f5364e394ea832dbeb3be.gif' style=' padding-bottom:2px;' class='tex' alt="c_{8}n " /></span></p></div>
<div style="line-height: 20px;">procedure bubbleSort( A : list of sortable items )<br />
repeat<br />
swapped = false<br />
for i = 1 to length(A) - 1 inclusive do:<br />
if A[i-1] &gt; A[i] then<br />
swap( A[i-1], A[i] )<br />
swapped = true<br />
end if<br />
end for<br />
until not swapped<br />
end procedure</div>
<p>OK, so that's the algorithm from wikipedia - but what's all that nasty-looking business on the right? Put quite simply, that's our best guess as to how long that line of code takes to execute! Note that each line is some function of <span class='MathJax_Preview'><img src='http://blog.centresource.com/wordpress/wp-content/plugins/latex/cache/tex_6fa45c22bd311a4aa532cffb668d86a0.gif' style=' padding-bottom:2px;' class='tex' alt="n " /></span> and some constant <span class='MathJax_Preview'><img src='http://blog.centresource.com/wordpress/wp-content/plugins/latex/cache/tex_270988921d2d88e2bf292f4caccb0845.gif' style=' padding-bottom:2px;' class='tex' alt="c_{i} " /></span>. Now if we wanted to figure out <em>exactly</em> how long this algorithm takes to run, we'd need to know the value of those contants, e.g. <span class='MathJax_Preview'><img src='http://blog.centresource.com/wordpress/wp-content/plugins/latex/cache/tex_c4fa814f77f2a12b7f5dc261feae338f.gif' style=' padding-bottom:1px;' class='tex' alt="c_{1} = 12.2ms " /></span> or something. You'll notice that some lines <em>only</em> seem to take a constant time to run; that's because those lines are only executed once <em>regardless of how big the input is</em>. Other lines are the associated constant multiplied by <span class='MathJax_Preview'><img src='http://blog.centresource.com/wordpress/wp-content/plugins/latex/cache/tex_6fa45c22bd311a4aa532cffb668d86a0.gif' style=' padding-bottom:2px;' class='tex' alt="n " /></span> - those lines will execute once for every unit of input. Still others are multiplied by <span class='MathJax_Preview'><img src='http://blog.centresource.com/wordpress/wp-content/plugins/latex/cache/tex_3098b1083ac981b7c728533cfa4fbafe.gif' style=' ' class='tex' alt="n(n-1) " /></span> - these lines are executed <span class='MathJax_Preview'><img src='http://blog.centresource.com/wordpress/wp-content/plugins/latex/cache/tex_41c82d523ef9895c903eca0ccbda03bc.gif' style=' padding-bottom:1px;' class='tex' alt="n-1 " /></span> times for each input. Now, handily, we can figure out our overall formula by just adding all these things together:</p>
<p><p style='text-align:center;'><span class='MathJax_Preview'><img src='http://blog.centresource.com/wordpress/wp-content/plugins/latex/cache/tex_dbca013708a4a9a62f6fff5fae63721f.gif' style='' class='tex' alt="T(n) = c_{1} + c_{2} + c_{3}n + c_{4}n + c_{5}n(n-1) + c_{6}n(n-1) + c_{7}n(n-1) + c_{8}n " /></span></p><br />
<p style='text-align:center;'><span class='MathJax_Preview'><img src='http://blog.centresource.com/wordpress/wp-content/plugins/latex/cache/tex_6a84257bf25f7279d5f2a62b4aec3b37.gif' style='' class='tex' alt="T(n) = c_{1} + c_{2} + c_{3}n + c_{4}n + c_{5}n^{2}-n + c_{6}n^{2}-n + c_{7}n^{2}-n + c_{8}n " /></span></p><br />
<p style='text-align:center;'><span class='MathJax_Preview'><img src='http://blog.centresource.com/wordpress/wp-content/plugins/latex/cache/tex_321d1916a4318ce2b9b4d098602b0aa5.gif' style='' class='tex' alt="T(n) = (c_{5} + c_{6} + c_{7})n^{2} + (c_{3} + c_{4} + c_{8} - 3)n + (c_{1} + c_{2}) " /></span></p></p>
<p>But it turns out that the precise value of each constant is practically useless - the constants in question represent such complex matters and concrete facts of the real world as language of implementation, hardware specs, how many other processes are fighting for CPU time, etc. Remember that we only really care about the performance of the <em>algorithm</em> - not the performance of the hardware or implementation thereof, which is not affected by the algorithm itself. So we can happily simplify our job by just getting rid of all those pesky constants!</p>
<p><p style='text-align:center;'><span class='MathJax_Preview'><img src='http://blog.centresource.com/wordpress/wp-content/plugins/latex/cache/tex_13db7c457bd0320380dc18ee50d7d8da.gif' style='' class='tex' alt="T(n) = n^{2} + n " /></span></p></p>
<p>Wow, much nicer! But guess what: it gets even simpler. Since, for large enough inputs, the contribution of the lower-order term <span class='MathJax_Preview'><img src='http://blog.centresource.com/wordpress/wp-content/plugins/latex/cache/tex_6fa45c22bd311a4aa532cffb668d86a0.gif' style=' padding-bottom:2px;' class='tex' alt="n " /></span> makes virtually no difference to the output number, we can happily drop that too:</p>
<p><p style='text-align:center;'><span class='MathJax_Preview'><img src='http://blog.centresource.com/wordpress/wp-content/plugins/latex/cache/tex_bd661977b23acf8fe0e1efc93d998a6e.gif' style='' class='tex' alt="T(n) = n^{2} " /></span></p></p>
<p>And voilá! Unfortunately, we've boiled this timing function down so far and stripped so much from it that we can't really say that <span class='MathJax_Preview'><img src='http://blog.centresource.com/wordpress/wp-content/plugins/latex/cache/tex_4df613dbccbdf85fc2a66aca70969a9c.gif' style=' ' class='tex' alt="T(n) " /></span> is <em>exactly</em> <span class='MathJax_Preview'><img src='http://blog.centresource.com/wordpress/wp-content/plugins/latex/cache/tex_093456214537de9bf72aac04b00c55b7.gif' style=' padding-bottom:1px;' class='tex' alt="n^{2} " /></span>, just that (in the worst case) it follows a similar curve. More precisely, we have virtually guaranteed that, for large enough inputs, it can never be bigger than some constant <span class='MathJax_Preview'><img src='http://blog.centresource.com/wordpress/wp-content/plugins/latex/cache/tex_9400ebf223f50ff8fccb32ed13ea819e.gif' style=' padding-bottom:2px;' class='tex' alt="c " /></span> <em>times</em> <span class='MathJax_Preview'><img src='http://blog.centresource.com/wordpress/wp-content/plugins/latex/cache/tex_093456214537de9bf72aac04b00c55b7.gif' style=' padding-bottom:1px;' class='tex' alt="n^{2} " /></span>. This is the crux of asymptotic notation - specifically what is referred to as "Big-O notation". As such, when we say that:</p>
<p><p style='text-align:center;'><span class='MathJax_Preview'><img src='http://blog.centresource.com/wordpress/wp-content/plugins/latex/cache/tex_133e9f1515189423e9a2e5248a7dba57.gif' style='' class='tex' alt="T(n) = O(n^{2}) " /></span></p></p>
<p>What we mean is that there are some constants <span class='MathJax_Preview'><img src='http://blog.centresource.com/wordpress/wp-content/plugins/latex/cache/tex_9400ebf223f50ff8fccb32ed13ea819e.gif' style=' padding-bottom:2px;' class='tex' alt="c " /></span> and <span class='MathJax_Preview'><img src='http://blog.centresource.com/wordpress/wp-content/plugins/latex/cache/tex_99020cb24bd13238d907c65cc2b57c03.gif' style=' padding-bottom:2px;' class='tex' alt="a " /></span>, such that for all <span class='MathJax_Preview'><img src='http://blog.centresource.com/wordpress/wp-content/plugins/latex/cache/tex_6fa45c22bd311a4aa532cffb668d86a0.gif' style=' padding-bottom:2px;' class='tex' alt="n " /></span> where <span class='MathJax_Preview'><img src='http://blog.centresource.com/wordpress/wp-content/plugins/latex/cache/tex_3f4a026870b81ff5de38c54fe0096ccd.gif' style=' padding-bottom:1px;' class='tex' alt="0 \le a < n " /></span>, we know that <span class='MathJax_Preview'><img src='http://blog.centresource.com/wordpress/wp-content/plugins/latex/cache/tex_0c92d598ba6c40ec0c8c9ab004de2b93.gif' style=' ' class='tex' alt="T(n) \le cn^{2} " /></span>.</p>
<p>It should also be pointed out that the notation's use of the "equals sign" is a little unusual - we're not saying that <span class='MathJax_Preview'><img src='http://blog.centresource.com/wordpress/wp-content/plugins/latex/cache/tex_4df613dbccbdf85fc2a66aca70969a9c.gif' style=' ' class='tex' alt="T(n) " /></span> <em>is equal to</em> <span class='MathJax_Preview'><img src='http://blog.centresource.com/wordpress/wp-content/plugins/latex/cache/tex_3306139fad2e84214191fb8212060c4c.gif' style=' ' class='tex' alt="O(n^{2}) " /></span>, but that it is of equal or lesser <em>order</em> to <span class='MathJax_Preview'><img src='http://blog.centresource.com/wordpress/wp-content/plugins/latex/cache/tex_093456214537de9bf72aac04b00c55b7.gif' style=' padding-bottom:1px;' class='tex' alt="n^{2} " /></span>. This might be a bit of a trick to wrap your head around at first (it certainly was to me). If I'd have written the notation myself, I'd have tried to use some symbol that didn't already carry all the connotations and denotations the "equals sign" itself does; but c'est la vie - this is the way it's done. Another way (in fact, the proper way) to think of it is to think of <span class='MathJax_Preview'><img src='http://blog.centresource.com/wordpress/wp-content/plugins/latex/cache/tex_3306139fad2e84214191fb8212060c4c.gif' style=' ' class='tex' alt="O(n^{2}) " /></span> being some set of functions that follow the above definition, and for the notation</p>
<p><p style='text-align:center;'><span class='MathJax_Preview'><img src='http://blog.centresource.com/wordpress/wp-content/plugins/latex/cache/tex_133e9f1515189423e9a2e5248a7dba57.gif' style='' class='tex' alt="T(n) = O(n^{2}) " /></span></p></p>
<p>to in fact mean</p>
<p><p style='text-align:center;'><span class='MathJax_Preview'><img src='http://blog.centresource.com/wordpress/wp-content/plugins/latex/cache/tex_00f8df56f1fe095f524dbdc010c4ea05.gif' style='' class='tex' alt="T(n) \in O(n^{2}) " /></span></p></p>
<p>i.e. that <span class='MathJax_Preview'><img src='http://blog.centresource.com/wordpress/wp-content/plugins/latex/cache/tex_4df613dbccbdf85fc2a66aca70969a9c.gif' style=' ' class='tex' alt="T(n) " /></span> is an <em>element</em> of the set <span class='MathJax_Preview'><img src='http://blog.centresource.com/wordpress/wp-content/plugins/latex/cache/tex_3306139fad2e84214191fb8212060c4c.gif' style=' ' class='tex' alt="O(n^{2}) " /></span>.</p>
<p>OK, so we've been able to put an upper bound on some hypothetical order of our function <span class='MathJax_Preview'><img src='http://blog.centresource.com/wordpress/wp-content/plugins/latex/cache/tex_4df613dbccbdf85fc2a66aca70969a9c.gif' style=' ' class='tex' alt="T(n) " /></span>, but what does that really tell us? Not a whole lot, in isolation. But it really comes into play when you consider other algorithms, such as, say <a  href="http://en.wikipedia.org/wiki/Merge_Sort">Merge Sort</a>, which is bounded on top not by <span class='MathJax_Preview'><img src='http://blog.centresource.com/wordpress/wp-content/plugins/latex/cache/tex_3306139fad2e84214191fb8212060c4c.gif' style=' ' class='tex' alt="O(n^{2}) " /></span>, but by <span class='MathJax_Preview'><img src='http://blog.centresource.com/wordpress/wp-content/plugins/latex/cache/tex_6683d14c695737b36b0b60968b56c04e.gif' style=' ' class='tex' alt="O(n\log_{2}n) " /></span>! Graph those two functions and here's what you get (<span class='MathJax_Preview'><img src='http://blog.centresource.com/wordpress/wp-content/plugins/latex/cache/tex_093456214537de9bf72aac04b00c55b7.gif' style=' padding-bottom:1px;' class='tex' alt="n^{2} " /></span> is in black, <span class='MathJax_Preview'><img src='http://blog.centresource.com/wordpress/wp-content/plugins/latex/cache/tex_d5c3a3002b4a1a4c546caea68a7a6bcd.gif' style=' ' class='tex' alt="n\log_{2}n " /></span> is in red):</p>
<p><a  href="http://blog.centresource.com/wordpress/../wp-content/uploads/2012/01/graph-e1327292605398.png" class="thickbox no_icon" rel="gallery-3623" title="graph"><img class="alignnone size-medium wp-image-4131" title="graph" src="http://blog.centresource.com/wordpress/../wp-content/uploads/2012/01/graph-e1327292808431-300x173.png" alt="" width="300" height="173" /></a></p>
<p>This is a bit of an oversimplification, but sufficient to demonstrate the idea - notice that very quickly, <span class='MathJax_Preview'><img src='http://blog.centresource.com/wordpress/wp-content/plugins/latex/cache/tex_093456214537de9bf72aac04b00c55b7.gif' style=' padding-bottom:1px;' class='tex' alt="n^{2} " /></span> begins to overtake <span class='MathJax_Preview'><img src='http://blog.centresource.com/wordpress/wp-content/plugins/latex/cache/tex_d5c3a3002b4a1a4c546caea68a7a6bcd.gif' style=' ' class='tex' alt="n\log_{2}n " /></span>, and continues to do so, the gap getting ever wider as n gets ever bigger; and just like in golf, the lower score is the one you want.</p>
<p>So, in what I hope was nutshell-ish if not perfectly so, that's the basics of asymptotic notation! There are other, related notations like "Big Theta" <span class='MathJax_Preview'><img src='http://blog.centresource.com/wordpress/wp-content/plugins/latex/cache/tex_70cf58380aa0dadd0aefb858fa5f925f.gif' style=' ' class='tex' alt="\Theta(g(n)) " /></span>, "Big Omega" <span class='MathJax_Preview'><img src='http://blog.centresource.com/wordpress/wp-content/plugins/latex/cache/tex_aa0884f77bfcfdcaf1f0c8477a1d2dc2.gif' style=' ' class='tex' alt="\Omega(g(n)) " /></span>, and the lower-case versions of omega and o, but I'll leave those to you to explore.</p>
<p>Finally, as a disclaimer, I have tried to make the math herein as simple as possible for the purposes of the demonstration, and I could easily have borked something up terribly (I'm still getting the hang of LaTeX). If you spot an error, comment and I'll see that it's corrected. Thanks!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.centresource.com/2012/01/23/freakin-asymptotic-notation-how-does-that-work/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CSSOff</title>
		<link>http://blog.centresource.com/2011/12/13/cssoff/</link>
		<comments>http://blog.centresource.com/2011/12/13/cssoff/#comments</comments>
		<pubDate>Tue, 13 Dec 2011 16:57:22 +0000</pubDate>
		<dc:creator>Michael Calhoun</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://blog.centresource.com/?p=3885</guid>
		<description><![CDATA[Recently, Unmatched Style sponsored some "Friendly Markup Fisticuffs" where they issued design files to whoever wanted to compete, and the...]]></description>
			<content:encoded><![CDATA[<p><a  href="http://blog.centresource.com/wordpress/../wp-content/uploads/2011/12/CSSOFF2011-Design_small.png" class="thickbox no_icon" rel="gallery-3885" title="CSSOff Design"><img class="alignright size-full wp-image-3962" title="CSSOff Design" src="http://blog.centresource.com/wordpress/../wp-content/uploads/2011/12/CSSOFF2011-Design_small.png" alt="" width="250" height="706" /></a>Recently, <a  title="Unmatched Style" href="http://unmatchedstyle.com/" target="_blank">Unmatched Style</a> sponsored some "Friendly Markup Fisticuffs" where they issued design files to whoever wanted to compete, and the competitors would have two weeks to create a website using only their brains and their computers.  The rules were pretty straightforward: one page only necessary, all external libraries (jQuery, et al.) had to be included, and your submission had to run locally. Otherwise, go nuts.</p>
<p>The <a  title="CSSOff Judges" href="http://www.unmatchedstyle.com/cssoff/judges.php" target="_blank">judges</a> would then review your work and score it based on code (cleanliness, semantics, and validation); user experience (respect for design, good choice points, interactions); and support (modern browsers, legacy browsers, size of project, resource optimization).  In the judges hands rests the responsibility of deciding one grand prize winner, 2 second place winners, 2 third place winners, and 20 runners-up.</p>
<p>A few Centresourcers were up to the challenge, here is what they had to say about the experience:</p>
<h3>Mike Calhoun</h3>
<p>The big thing that jumped out at me with this design was how EVERYTHING had a textured background associated with it. After that initial shock, my attention turned to points that seemed like they could have some kind of user interaction. There were none specified by the designer and the rules had specified that it was left to the coder to decide what (if any) they would like.  The obstacles section was an obvious choice for some kind of hover/transition.  The count down clock and form area also seemed like something that would have an room to explore with whatever I came up with while creating the markup. After a closer look, a few other smaller nuances caught my eye such as the small transparent border at the end and beginning of each section, the text shadows and many of the headings, or (again) the textured background.  In the end, I made a conscious decision to try and keep this as small as possible in terms of the file size and sacrifice complete compatibility for items like the above nuances in legacy browsers.  Although this probably hurt me in terms of scoring, I thought it would be more beneficial to learn newer practices for HTML5 and CSS3 versus supporting Internet Explorer 6 (which honestly has not been something I’ve thought about for a few years).  The trade off worked out well for modern browsers as everything looked pretty close to the design and I was able to use lots of CSS3 properties to accomplish the gradient background effects (rgba transparent backgrounds with a gradient image), font face properties for all the non standard fonts (allowed for the ticking clock), and extensive use of the jQuery animate property for my transition effect on the prizes section. In all, this was a  great experience that should pay off in the long run for applying new process to future work.</p>
<h3>Travis Roberts</h3>
<p>Mike went over the different sections/elements of the design, so I'll talk about some of the tricks I used to accomplish the design while still keeping file sizes nice and small.</p>
<p>First, I exported all of my images as transparent GIFs instead of PNGs. The judging gives points for compatibility with older browsers, and everyone's favorite browser to hate, Internet Explorer 6, doesn't support transparent PNGs. The image quality of the exported assets were comparable as GIFs, the file sizes were much smaller, and they work with IE6 without having to do any weird hacks. By using GIFs, the total size for all image assets clocked in around 868KB.</p>
<p>Second, I used a CSS3 library (<a  href="http://daneden.me/animate" target="_blank">Animate</a> by <a  href="http://daneden.me/" target="_blank">Daniel Eden</a>) to accomplish all of the effects/transitions. This may seem counterintuitive to my previous paragraph about older browser compatibility. My thought was that effects/transitions are progressive enhancements. The site will still work fine without them, but they add a little polish to browsers that understand them. Because I used the CSS3 library for my effects, the only external javascript file I included was jQuery. This allowed my total project size to be relatively small (~1.1MB zipped).</p>
<p>My entry: <a  href="http://cssoff.csclientsite.com/troberts/">http://cssoff.csclientsite.com/troberts/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.centresource.com/2011/12/13/cssoff/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Technology Agnosticism and its Significance to Me</title>
		<link>http://blog.centresource.com/2011/11/07/technology-agnosticism-and-its-significance-to-me/</link>
		<comments>http://blog.centresource.com/2011/11/07/technology-agnosticism-and-its-significance-to-me/#comments</comments>
		<pubDate>Mon, 07 Nov 2011 18:27:57 +0000</pubDate>
		<dc:creator>Michael Calhoun</dc:creator>
				<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://blog.centresource.com/?p=3747</guid>
		<description><![CDATA[Starting out in web development, one fundamental truth that was difficult for me to understand is that there is no...]]></description>
			<content:encoded><![CDATA[<p>Starting out in web development, one fundamental truth that was difficult for me to understand is that there is no silver bullet for all client challenges.  It was initially very easy to get comfortable building one kind of website with one tool; however, when a new challenge came along that tool wasn’t always the right one for the job.  As a nascent programmer, I fell into the “when all you have is a hammer, then everything looks like a nail” mindset for one reason: I was pretty unsure of my skills. If I was able to do something well, fast, and it made clients happy then I did not want to stray from that comfort zone.  But that model was unsustainable in a constantly changing field.  Fundamentally, after a few years of development work, if all you have is a hammer then it may be time to consider a job besides carpentry.  To move beyond this hammer mindset, a sense of aloofness and open mindedness are necessary.</p>
<p>I started out programming Drupal which endeared it to me because it was my first job, I understood it, and my employer thought highly enough of my skills to pay me.  What I needed to better understand was that Drupal was not the only game in town.  When presented with a new problem one must always consider what the problem looks to solve and what best accomplishes that solution.  For me, I was confronted with a project that needed a pretty extensive custom database that, as hard as I tried, I could not get to work well with Drupal.  After extensive research I (begrudgingly) decided that Ruby on Rails was my best option.  This reflects another fact of life in web development: things advance very quickly (and usually for the better).  When I started my first job, Rails was still in version 1.x with syntax that was not immediately understandable to me and was lacking in the documentation or as big a community as PHP and Drupal.  By the time I came back to Rails, much had changed.  Rails was older, the documentation was great, and it made complete sense for this problem. In the end, the only hurdle to overcome were my preconceived notions about frameworks and how I understood them to work.  I had to  consider that something had gotten better, and realize the goal wasn’t to build a site in Drupal, but to build a site that thoughtfully considered the clients' needs and best addressed the goal of the project.</p>
<p>Much has been said about what technology agnosticism means or if it is even something at all.  For me, it means rationally and carefully thinking of the problem and how to best solve it, where best does not mean “something with which I’m most comfortable”. This is true in all facets, be it language, framework, Drupal module, Ruby gem, or Rails plugin.  We can use that with which we are most comfortable to start with, but from that point find other tools which improve our skills and improve our process.  As Marshal McLuhan, said in his book <em>The Medium is The Message</em>, “we shape our tools and thereafter our tools shape us.”</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.centresource.com/2011/11/07/technology-agnosticism-and-its-significance-to-me/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dilbert Knows Agile</title>
		<link>http://blog.centresource.com/2011/10/27/dilbert-knows-agile/</link>
		<comments>http://blog.centresource.com/2011/10/27/dilbert-knows-agile/#comments</comments>
		<pubDate>Thu, 27 Oct 2011 19:35:32 +0000</pubDate>
		<dc:creator>Matthew Phillips</dc:creator>
				<category><![CDATA[Interactive Strategy]]></category>
		<category><![CDATA[Miscellaneous]]></category>
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://blog.centresource.com/?p=3699</guid>
		<description><![CDATA[No planning, no documentation, no problem.  That is the Agile development approach right?  Well, I might be new to...]]></description>
			<content:encoded><![CDATA[<p><a  href="http://dilbert.com/strips/comic/2007-11-26/" title="Dilbert.com"><img src="http://dilbert.com/dyn/str_strip/000000000/00000000/0000000/000000/00000/1000/700/1791/1791.strip.gif" border="0" width="500px" alt="Dilbert.com" /></a></p>
<p>No planning, no documentation, no problem.  That is the Agile development approach right?  Well, I might be new to this Agile approach, but I would argue it's MORE.  I am a Project Manager by heart, so NO planning and NO documentation is simply unacceptable. Sorry Dilbert. Seeing how Agile Development is a buzz lately, I figured I would approach this topic from a Strategist’s point of view.</p>
<p>So, what is this Agile Development thing?<br />
Doing a quick search of Agile Development you will get several different definitions.  Most all of them say its a hard term to define.  The key words you will see are “evolve”, “collaboration”, “iterative” and “cross-functional teams.”  However you want to define it, we love agile development because it provides us the freedom to make decisions as we go.</p>
<p>What is the process for Agile Development?<br />
Well...Agile :) We start out with a charter, a mission statement for where we are going.  This will be our flag ship document that everything is based on upfront.  From there, we plan for the checkpoints to review progress and analyze results.  With each milestone that comes it is expected that timelines will adjust.  Tasks may be completed quicker, we may add more work to the task.  Revisions come as needed, but always with purpose. </p>
<p>When taking on an Agile project I look to document the process.  Documentation is the best way to track and show results.  From a strategist point of view taking on an Agile Development project can be a bit intimidating.  Since Strategists are ultimately responsible for scope, timeline and budget; Agile development may seem like herding cats.  We need to defend decisions with documentation.  </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.centresource.com/2011/10/27/dilbert-knows-agile/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>I&#039;m famous!</title>
		<link>http://blog.centresource.com/2011/10/13/im-famous/</link>
		<comments>http://blog.centresource.com/2011/10/13/im-famous/#comments</comments>
		<pubDate>Thu, 13 Oct 2011 21:01:57 +0000</pubDate>
		<dc:creator>Nicholas Holland</dc:creator>
				<category><![CDATA[Company News]]></category>
		<category><![CDATA[iPhone OS]]></category>
		<category><![CDATA[Social Media]]></category>

		<guid isPermaLink="false">http://blog.centresource.com/?p=3753</guid>
		<description><![CDATA[Just a quick note that VentureBeat quoted me in regards to FourSquare's new RADAR feature. Long story short, geo-fenced tips/notifications...]]></description>
			<content:encoded><![CDATA[<p>Just a quick note that VentureBeat quoted me in regards to FourSquare's new RADAR feature. Long story short, geo-fenced tips/notifications are cool if they are "opt in". If they herald the beginning of geo-advertising alerts, I think it could hurt the platform (anyone remember Facebook's Beacon fiasco?).</p>
<p>You <a  href="http://venturebeat.com/2011/10/12/foursquare-radar-ios-5/">can read the article</a> on VentureBeat.</p>
<p><a  href="http://venturebeat.com/2011/10/12/foursquare-radar-ios-5/"><img src="http://blog.centresource.com/wordpress/../wp-content/uploads/2011/10/venture-beat-300x66.jpg" alt="" title="venture-beat" width="300" height="66" class="aligncenter size-medium wp-image-3756" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.centresource.com/2011/10/13/im-famous/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Javascript Frameworks for Well Architected, Immersive Web Apps (Part II)</title>
		<link>http://blog.centresource.com/2011/10/13/javascript-frameworks-for-well-architected-immersive-web-apps-part-ii/</link>
		<comments>http://blog.centresource.com/2011/10/13/javascript-frameworks-for-well-architected-immersive-web-apps-part-ii/#comments</comments>
		<pubDate>Thu, 13 Oct 2011 14:41:30 +0000</pubDate>
		<dc:creator>Daniel Nelson</dc:creator>
				<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://blog.centresource.com/?p=3721</guid>
		<description><![CDATA[Part II of this video continues by using a demo application to go into detail on how to incorporate Angular.js...]]></description>
			<content:encoded><![CDATA[<p>Part II of this video continues by using a <a  href="https://github.com/centresource/angularjs_rails_demo">demo application</a> to go into detail on how to incorporate Angular.js into Rails 3.1 to build cleanly architected, maintainable web applications with rich user experiences.</p>
<p><iframe src="http://player.vimeo.com/video/30329977?title=0&amp;byline=0&amp;portrait=0" width="400" height="300" frameborder="0" webkitAllowFullScreen allowFullScreen></iframe>
<p><a  href="http://vimeo.com/30329977">Angular.js + Rails: Part 2</a> from <a  href="http://vimeo.com/centresource">centresource interactive agency</a> on <a  href="http://vimeo.com">Vimeo</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.centresource.com/2011/10/13/javascript-frameworks-for-well-architected-immersive-web-apps-part-ii/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Javascript Frameworks for Well Architected, Immersive Web Apps (Part I)</title>
		<link>http://blog.centresource.com/2011/10/11/javascript-frameworks-for-well-architected-immersive-web-apps-part-i/</link>
		<comments>http://blog.centresource.com/2011/10/11/javascript-frameworks-for-well-architected-immersive-web-apps-part-i/#comments</comments>
		<pubDate>Tue, 11 Oct 2011 15:13:13 +0000</pubDate>
		<dc:creator>Daniel Nelson</dc:creator>
				<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://blog.centresource.com/?p=3716</guid>
		<description><![CDATA[Immersive web applications involve sophisticated interactivity within the browser, connected to models and data persistence on the server. The structure...]]></description>
			<content:encoded><![CDATA[<div>Immersive web applications involve sophisticated interactivity within the browser, connected to models and data persistence on the server. The structure of the application is clearly delimited between client-side and server-side, but the available tools for building web applications have often blurred this distinction. The result is applications that are difficult to design and maintain.</p>
<p>Part I of this video explores the problem and what we are looking for in a solution. Part II (coming soon) goes into detail on a particular solution using Rails 3.1 and Angular.js. Source code for the demo application is available from the Centresource Github account.</p></div>
<p><iframe src="http://player.vimeo.com/video/30328747?title=0&amp;byline=0&amp;portrait=0" width="400" height="300" frameborder="0" webkitAllowFullScreen allowFullScreen></iframe>
<p><a  href="http://vimeo.com/30328747">Angular.js + Rails: Part 1</a> from <a  href="http://vimeo.com/centresource">centresource interactive agency</a> on <a  href="http://vimeo.com">Vimeo</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.centresource.com/2011/10/11/javascript-frameworks-for-well-architected-immersive-web-apps-part-i/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>A Developer&#039;s Arsenal: Mike Calhoun</title>
		<link>http://blog.centresource.com/2011/09/26/a-developers-arsenal-mike-calhoun/</link>
		<comments>http://blog.centresource.com/2011/09/26/a-developers-arsenal-mike-calhoun/#comments</comments>
		<pubDate>Mon, 26 Sep 2011 17:25:29 +0000</pubDate>
		<dc:creator>Michael Calhoun</dc:creator>
				<category><![CDATA[Miscellaneous]]></category>
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://blog.centresource.com/?p=3577</guid>
		<description><![CDATA[What tools do you use daily in the course of your development, and why those tools in particular?

Textmate....]]></description>
			<content:encoded><![CDATA[<ol>
<li><strong>What tools do you use daily in the course of your development, and why those tools in particular?</strong>
<ol>
<li><strong>Textmate</strong>. Q: How do you start an argume<a  href="http://blog.centresource.com/wordpress/../wp-content/uploads/2011/09/textmate-logo1.png" class="thickbox no_icon" rel="gallery-3577" title="Textmate"><img class="alignright size-full wp-image-3674" title="Textmate" src="http://blog.centresource.com/wordpress/../wp-content/uploads/2011/09/textmate-logo1.png" alt="" width="148" height="142" /></a>nt in a room of developers? Ask them "what texteditor is better and why?" I’ve always subscribed to the classic “if it isn’t broken don’t fix it” train of thought on this. Before I used Textmate, I couldn’t stand the editor I was using (possibly JEdit or Aptana or something else equally horrible...I was on a PC at the time). Changing over to a mac opened the world of Textmate up to me, and I’ve had no reason to really look for something better since then.</li>
<li><strong>iTunes &amp; a good pair of headphones</strong>. Honestly, I just can’t imagine working anymore without these two items that they’ve become a part of my required tools. Whether in the office or out in public it can be way to easy to get distracted by things happening around me, especially when I’m trying to get to the bottom of something complicated.</li>
<li><strong>Stackoverflow.com</strong>. This is definitely more of a resource than a tool, but I still make use of it on a daily basis and it is often an invaluable tool in getting a task accomplished. One of the biggest things that I love about programming is the community. When I have a problem, I can usually count on two things: 1: somebody else has has the same problem and 2: There is a thoughtful discussion about approaches and solutions to this problem. Beyond that, its not a one way street as you can help out your fellow programmer with something you’ve worked through that he/she may be losing sleep over.</li>
<li><strong>Google Chrome</strong>. More specifically, the Google Chrome developer tools. Having been a Firebug person for so long, this was kind of a weird changeover initially. But, once I got the hang of what was happening, going back and using Firebug seems kind of old and busted now.</li>
</ol>
</li>
<li><strong>How did you get into development/programming/engineering, and what keeps you in it?</strong><br />
I’d been “living with computers” since the 80’s when my parents got an Apple IIC. After that it just kind of seemed like it was a forgone conclusion that I would wind up working in a tech field. For a brief stint in college it seemed like the tech world and me may part ways; however, I found my way back in grad school while working on a Master’s of Information Science. One week before I graduated, I interviewed for and was offered my first full time, non freelance job working with Internet technology and the rest was history.</li>
<li><strong>Who is another programmer or developer you admire, and why?</strong><br />
Alan Turing. In<a  href="http://blog.centresource.com/wordpress/../wp-content/uploads/2011/09/Alan_Turing_photo.jpg" class="thickbox no_icon" rel="gallery-3577" title="Alan_Turing_photo"><img class="alignright size-medium wp-image-3675" title="Alan_Turing_photo" src="http://blog.centresource.com/wordpress/../wp-content/uploads/2011/09/Alan_Turing_photo-239x300.jpg" alt="" width="239" height="300" /></a> college, I was a dual major in computer science and history and his name kept popping up in both arenas all 4 years. Whether it was first year CS101 and a term paper I wrote on “<a  href="http://en.wikipedia.org/wiki/Turing_test" target="_blank">Turing Tests</a>” or my third year history seminar on WWII with the work he did on “<a  href="http://en.wikipedia.org/wiki/Bombe" target="_blank">The Bombe</a>” at Bletchey Park he was a present and fascinating figure. Granted he isn’t a developer or programmer in the sense of those terms that I work in today, but he is one of the first innovators and definitely a figure worthy of admiration for his brilliance and impact.</li>
<li><strong>How do you keep yourself up-to-date with the latest technologies and what new or upcoming tech are you excited about?</strong><br />
It is hard to answer this question because being in the tech field new developments seem to come at you from every which way. Probably the biggest ones I’ve looked at are meetings and conferences. Seems as though if you are in a city with a tech community, there will always be a designated get together to talk shop. Its great to attend conferences, but also just following them on any number mediums (twitter, blogs, etc. ) is great to learn about what new developments are popping up.</li>
<li><strong>What’s your favorite language of the moment? Why?</strong><br />
Working in a Ruby on Rails shop, it would be hard for me to answer this question with anything besides Ruby. But as to why it actually is my favorite presently, not so easy. Compared to other languages with which I’ve had experience, rails almost defies you to not like it. Writing apps it always come across as effortless and elegant because you are excited to work with it and proud of what you accomplish. Additionally, I’ve never come across a community that is so invested in advancing their interests that my job almost seems like a labor of love (with benefits).</li>
<li><strong>Do you have any advice for nascent developers?</strong><br />
Work! I remember first starting out one my ongoing complaints was that I couldn’t get a job because I didn’t have experience, and I couldn’t get experience because nobody would give me a job. But, I wish I had known then what I know now because working (albeit for free) is so easy to do in this industry. Find something you want to make (in my case it was a budget application to rein in my poor spending habits) and build it, and then share it on github or wherever. Do this with lots of things. Build yourself a website. Build your friend a website. Those are the best avenues to gain experience and some of the best things I’ve worked on since they’re for yourself and you can do/learn whatever you think would be cool.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://blog.centresource.com/2011/09/26/a-developers-arsenal-mike-calhoun/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Setting up a client site on Heroku</title>
		<link>http://blog.centresource.com/2011/09/23/setting-up-a-client-site-on-heroku/</link>
		<comments>http://blog.centresource.com/2011/09/23/setting-up-a-client-site-on-heroku/#comments</comments>
		<pubDate>Fri, 23 Sep 2011 16:01:38 +0000</pubDate>
		<dc:creator>Daniel Nelson</dc:creator>
				<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://blog.centresource.com/?p=3581</guid>
		<description><![CDATA[Thanks to Josh Crews for
cluing me in on how to set up staging on Heroku last February
First, add...]]></description>
			<content:encoded><![CDATA[<p><em>Thanks to <a  href="http://www.joshcrews.com">Josh Crews</a> for<br />
cluing me in on how to set up staging on Heroku last February</em></p>
<p>First, add heroku to the development group in the Gemfile and bundle install.</p>
<p>If this is a client site, you will want the client to own the<br />
application, so we'll sign in as the client from the beginning (you<br />
can also use "heroku sharing:transfer" to move an app to another user<br />
later):</p>
<p><code><br />
$ heroku auth:logout (only if you are already using heroku)<br />
$ heroku auth:login<br />
Enter your Heroku credentials.<br />
Email: client.email@address.com<br />
Password: client-password<br />
</code></p>
<p>Then create the production and staging apps:</p>
<p><code><br />
$ heroku create --stack bamboo-mri-1.9.2 mysitename<br />
$ heroku create --stack bamboo-mri-1.9.2 mysitename-staging<br />
</code></p>
<p>Then add yourself and anyone else on your team to the heroku apps:</p>
<p><code><br />
$ heroku sharing:add your.email@address.com --app mysitename<br />
$ heroku sharing:add your.email@address.com --app mysitename-staging<br />
$ heroku sharing:add team.member@address.com --app mysitename<br />
$ heroku sharing:add team.member@address.com --app mysitename-staging<br />
</code></p>
<p>Now you can sign out as the client and sign back into your own Heroku account:</p>
<p><code><br />
$ heroku auth:logout<br />
$ heroku auth:login<br />
Enter your Heroku credentials.<br />
Email: your.email@address.com<br />
Password: your-password<br />
</code></p>
<p>Next, we need to update project_root/.git/config so that we can deploy<br />
to the production and staging apps. Do this by copying the "heroku"<br />
block to a new "staging" block and updating the url to the name of the<br />
staging app. While you are at it, you might want to change "heroku" to<br />
"production" so that it is consistent with "staging":</p>
<p><code><br />
[remote "production"]<br />
       url = git@heroku.com:mysitename.git<br />
       fetch = +refs/heads/*:refs/remotes/heroku/*<br />
[remote "staging"]<br />
       url = git@heroku.com:mysitename-staging.git<br />
       fetch = +refs/heads/*:refs/remotes/heroku/*<br />
</code></p>
<p>Now, you can push to staging and production separately:</p>
<p><code><br />
$ git push staging master<br />
$ git push production master<br />
</code></p>
<p>And to push a branch other than master (such as develop) to staging<br />
for a beta reveal:</p>
<p><code><br />
$ git push staging develop:master<br />
</code></p>
<p>Note that for any Heroku commands, you will need to specify the app:</p>
<p><code><br />
$ heroku rake db:migrate --app mysitename-staging<br />
</code></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.centresource.com/2011/09/23/setting-up-a-client-site-on-heroku/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

