<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom">

	<channel>
	
	<title>EE Blog</title>
	<link>http://expressionengine.com/blog/</link>
	<description>ExpressionEngine Blog</description>
	<copyright>Copyright 2008 ExpressionEngine</copyright>
	<docs>http://www.rssboard.org/rss-specification</docs>
	<generator>ExpressionEngine v1.6.3 http://expressionengine.com/</generator>
	<language>en</language>
	<lastBuildDate>Thu, 15 May 2008 18:48:25 GMT</lastBuildDate>
	<atom:link href="http://expressionengine.com/feeds/rss_new/full/" rel="self" type="application/rss+xml" />


	<item>
		<title>Another day in the Global Village</title>
		<link>http://expressionengine.com/blog/entry/another_day_in_the_global_village/</link>
		<dc:creator>Kurt Deutscher</dc:creator>
		<category>The Insider</category>
		<comments>http://expressionengine.com/blog/entry/another_day_in_the_global_village/</comments>		<description><![CDATA[<p>When I was studying at a local university to become an elementary school teacher, there was some sort of mandate at the school to prepare us all for the global village; this concept that, someday, the world would be interconnected in such a way that all of us would compete with folks throughout the world for our jobs and other resources. At the time, this was not my experience of the world and I had difficulty believing it could ever happen.
</p>
<p>
Basically, I thought my professors were crazy. Maybe that was because, as a middle and high school student, I kept hearing we were learning the metric system because the United States would be switching from our antiquated English system of measurement to a metric system during my lifetime. The switch still hasn’t happened. At this point, all my measuring tools include English and metric, yet we’re far from changing to metric-only anytime soon. 
</p>
<p>
So when my professors professed that I would be engaged in a global economy someday, I was, shall we say, less than receptive to the idea. Mind you, this was all pre-Internet, way back in the last century. My attitude at the time was, “I’ll believe it when I see it, and not a moment before.”
</p>
<p>
Well, as humbling as it is, especially for a guy who prided himself during his twenties on being “right,” I was way, way wrong. It happened: the time is now, and I’m working for an international company with a vibrant international audience and an international staff. I wish I could go back in time and slap some sense into myself. How could I not have seen this coming? Under what rock was I living? Was there something blocking my view? How could my perspective have been so clouded? Why didn’t I prepare for this better? Why couldn&#8217;t I accept the concept of a connected global village?
</p>
<p>
One morning last week, I arose at 5:30 a.m. to shower, shave, dress and caffeinate myself for a 7:00 a.m. videoconference with a large organization in London. We used Skype and it worked better than I expected. I was attending a 3:00 p.m. meeting with eight people at the organization. There was less than a quarter second in the audio delay, so our conversation was almost as if we were right next-door to one another. I’m in Oregon on the west coast of the USA; they were clear across the continent and an ocean away and I could see and hear everyone in some meeting room in the UK. Via wireless connection, I appeared “inside” a laptop that was placed on a table in a London conference room, while physically sitting in my home office in Oregon. 
</p>
<p>
I tried to behave as if this was a typical day for me, nothing special. “Yeah, I commute to meetings through cyberspace all the time, no big deal, just another day at the office. La la la… ” In reality though, this experience was a major eye-opener for me. I&#8217;ve spent the better part of the last five years with my face in a flat-panel monitor online at all hours of the day and night. The Internet has become so commonplace in my daily routine that I rarely take a step back to look at the big picture anymore. I&#8217;ve been taking the web for granted.
</p>
<p>
When I pause just long enough to consider what it took to make that one-hour videoconference happen between my home office in Oregon and that organization in London, I&#8217;m in awe; it&#8217;s nothing short of magic.
</p>
<p>
So I was wrong, and my university professors were right. I can live with that and have learned from it. The question subsequently arises though: What part of the future could I be preparing for now, if only I would accept that it will happen? 
<br />

</p>]]></description>
		<guid isPermaLink="false">http://expressionengine.com/blog/entry/another_day_in_the_global_village/#When:17:39:01Z</guid>
		<pubDate>Thu, 15 May 2008 17:39:01 GMT</pubDate>
	</item>

	<item>
		<title>Building a Bug Tracker: Filtering by Severity</title>
		<link>http://expressionengine.com/blog/entry/building_a_bug_tracker_filtering_by_severity/</link>
		<dc:creator>Lisa Wess</dc:creator>
		<category>Learn ExpressionEngine</category><category>Building a Bug Tracker</category>
		<comments>http://expressionengine.com/blog/entry/building_a_bug_tracker_filtering_by_severity/</comments>		<description><![CDATA[<p>In the beginning of this series, we set up some custom fields to handle data for the bug tracker.&nbsp; Those custom fields can be used now, to help filter the data and get a more specific view for issues pertaining to any of those custom fields.&nbsp; 
</p>
<p>
The magic here will be using the weblog entries tag with the search parameter and segments.
</p>
<p>
Shall we?&nbsp; 
</p>
<p>
For this article, we&#8217;re going to focus on filtering all bug reports by their severity.&nbsp; We&#8217;re going to be careful to build a template that we can use later for filtering by other custom fields while re-using the same template.
</p>
<p>
To begin, duplicate the index in the bug tracker template group and call the new template filter_by.
</p>
<p>
Now, open up that new template and find this code:
</p>
<p>
</p><div class="codeblock"><code>
<span style="color: #0000BB">&#123;exp</span><span style="color: #007700">:</span><span style="color: #0000BB">weblog</span><span style="color: #007700">:</span><span style="color: #0000BB">entries weblog</span><span style="color: #007700">=</span><span style="color: #DD0000">"&#123;bug_tracker_weblog&#125;" </span><span style="color: #0000BB">limit</span><span style="color: #007700">=</span><span style="color: #DD0000">"30" </span><span style="color: #0000BB">status</span><span style="color: #007700">=</span><span style="color: #DD0000">"Open|New|Confirmed|Unconfirmed|External|Resolved" </span><span style="color: #0000BB">sort</span><span style="color: #007700">=</span><span style="color: #DD0000">"desc"</span><span style="color: #0000BB">&#125;</span>
</code></div><p>
</p>
<p>
To this, we&#8217;re going to add the <a href="http://expressionengine.com/docs/modules/weblog/parameters.html#par_search">search parameter</a>.&nbsp; We&#8217;ll add it like so:
</p>
<p>
</p><div class="codeblock"><code>
<span style="color: #0000BB">search</span><span style="color: #007700">:</span><span style="color: #0000BB">bug_tracker_&#123;segment_3&#125;</span><span style="color: #007700">=</span><span style="color: #DD0000">"=&#123;segment_4&#125;" </span><span style="color: #0000BB">dynamic</span><span style="color: #007700">=</span><span style="color: #DD0000">"off"</span>
</code></div><p>
</p>
<p>
We&#8217;re turning dynamic off here as we&#8217;re again defining our own semantics.&nbsp; For the search parameter, we want to keep this flexible so we can use it for our other custom fields, hence calling segment_3.&nbsp; We also want to be able to pass a variable to it so that we can re-use the template for all of our custom fields, so we&#8217;ll call segment_4 as well.
</p>
<p>
You&#8217;ll remember that our custom fields were all prepended with the short name of the weblog; however, we don&#8217;t want that to be reflected several times in the URL as that would be redundant.&nbsp; To keep the URLs neat and tidy, we&#8217;re adding short name to the search parameter and then appending segment 3.&nbsp; Momentarily you&#8217;ll see why.
</p>
<p>
Before that, as we did in last week&#8217;s article, we&#8217;re going to add the no_results variable pair here, like so:
</p>
<p>
</p><div class="codeblock"><code>
<span style="color: #0000BB">&#123;if no_results&#125;<br />No bugs of &#123;segment_4&#125; &#123;segment_3&#125;</span><span style="color: #007700">.<br /></span><span style="color: #0000BB">&#123;</span><span style="color: #007700">/</span><span style="color: #0000BB">if&#125;</span>
</code></div><p>
</p>
<p>
And in order to have a conditional heading telling us what we&#8217;re filtering by, we&#8217;ll add this right below our already existing count conditional, and above the opening table tag:
</p>
<p>
</p><div class="codeblock"><code>
<span style="color: #007700">&lt;</span><span style="color: #0000BB">h3</span><span style="color: #007700">&gt;</span><span style="color: #0000BB">Filtering by &#123;segment_4&#125; &#123;segment_3&#125;</span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">h3</span><span style="color: #007700">&gt;</span>
</code></div><p>
</p>
<p>
We&#8217;ll make one more change to this template, and that is the embed calling inc/.head.&nbsp; We need to pass it a correct title to display, so it should now look like so:
</p>
<p>
</p><div class="codeblock"><code>
<span style="color: #0000BB">&#123;embed</span><span style="color: #007700">=</span><span style="color: #DD0000">"inc/.head" </span><span style="color: #0000BB">title</span><span style="color: #007700">=</span><span style="color: #DD0000">"Bug Tracker - &#123;segment_4&#125; &#123;segment_3&#125;"</span><span style="color: #0000BB">&#125;</span>
</code></div><p>
</p>
<p>
It&#8217;s time to create links that allow for filtering by severity and segments.&nbsp; Open up inc/.leftnav.
</p>
<p>
We&#8217;ll want to replace the severity link with a list of severities to filter by; replace this link:
</p>
<p>
</p><div class="codeblock"><code>
<span style="color: #007700">&lt;</span><span style="color: #0000BB">li</span><span style="color: #007700">&gt;&lt;</span><span style="color: #0000BB">a href</span><span style="color: #007700">=</span><span style="color: #DD0000">"#"</span><span style="color: #007700">&gt;</span><span style="color: #0000BB">Severity</span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">a</span><span style="color: #007700">&gt;&lt;/</span><span style="color: #0000BB">li</span><span style="color: #007700">&gt;</span>
</code></div><p>
</p>
<p>
with:
</p>
<p>
</p><div class="codeblock"><code>
<span style="color: #007700">&lt;</span><span style="color: #0000BB">li</span><span style="color: #007700">&gt;</span><span style="color: #0000BB">Severity</span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">li</span><span style="color: #007700">&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;</span><span style="color: #0000BB">ul</span><span style="color: #007700">&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;</span><span style="color: #0000BB">li</span><span style="color: #007700">&gt;&lt;</span><span style="color: #0000BB">a href</span><span style="color: #007700">=</span><span style="color: #DD0000">"&#123;path="</span><span style="color: #0000BB">&#123;bug_tracker_template_group&#125;</span><span style="color: #007700">/</span><span style="color: #0000BB">filter_by</span><span style="color: #DD0000">"&#125;severity/Trivial/"</span><span style="color: #007700">&gt;</span><span style="color: #0000BB">Trivial</span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">a</span><span style="color: #007700">&gt;&lt;/</span><span style="color: #0000BB">li</span><span style="color: #007700">&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;</span><span style="color: #0000BB">li</span><span style="color: #007700">&gt;&lt;</span><span style="color: #0000BB">a href</span><span style="color: #007700">=</span><span style="color: #DD0000">"&#123;path="</span><span style="color: #0000BB">&#123;bug_tracker_template_group&#125;</span><span style="color: #007700">/</span><span style="color: #0000BB">filter_by</span><span style="color: #DD0000">"&#125;severity/Minor/"</span><span style="color: #007700">&gt;</span><span style="color: #0000BB">Minor</span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">a</span><span style="color: #007700">&gt;&lt;/</span><span style="color: #0000BB">li</span><span style="color: #007700">&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;</span><span style="color: #0000BB">li</span><span style="color: #007700">&gt;&lt;</span><span style="color: #0000BB">a href</span><span style="color: #007700">=</span><span style="color: #DD0000">"&#123;path="</span><span style="color: #0000BB">&#123;bug_tracker_template_group&#125;</span><span style="color: #007700">/</span><span style="color: #0000BB">filter_by</span><span style="color: #DD0000">"&#125;severity/Major/"</span><span style="color: #007700">&gt;</span><span style="color: #0000BB">Major</span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">a</span><span style="color: #007700">&gt;&lt;/</span><span style="color: #0000BB">li</span><span style="color: #007700">&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;</span><span style="color: #0000BB">li</span><span style="color: #007700">&gt;&lt;</span><span style="color: #0000BB">a href</span><span style="color: #007700">=</span><span style="color: #DD0000">"&#123;path="</span><span style="color: #0000BB">&#123;bug_tracker_template_group&#125;</span><span style="color: #007700">/</span><span style="color: #0000BB">filter_by</span><span style="color: #DD0000">"&#125;severity/Critical/"</span><span style="color: #007700">&gt;</span><span style="color: #0000BB">Critical</span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">a</span><span style="color: #007700">&gt;&lt;/</span><span style="color: #0000BB">li</span><span style="color: #007700">&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;/</span><span style="color: #0000BB">ul</span><span style="color: #007700">&gt;</span>
</code></div><p>
</p>
<p>
The search parameter is not case sensitive; however, we&#8217;re also going to use this in our heading tags, so we will want it to have proper capitalization with minimal mark-up; capitalizing the severity in our links helps reach this goal.
</p>
<p>
Now visit the bug tracker, and click on the Trivial link - it should look like this:
</p>
<p>
<img src="http://expressionengine.com/files/blog/bug_tracker_filter_by_severity.png" alt="Bug Tracker Filter by Severity" width="407" height="381" />
</p>
<p>
And here is the template code for bug_tracker/filter_by:
</p>
<p>
</p><div class="codeblock"><code>
<span style="color: #0000BB">&#123;html_begin&#125;<br /><br />&#123;embed</span><span style="color: #007700">=</span><span style="color: #DD0000">"inc/.head" </span><span style="color: #0000BB">title</span><span style="color: #007700">=</span><span style="color: #DD0000">"Bug Tracker - &#123;segment_4&#125; &#123;segment_3&#125;"</span><span style="color: #0000BB">&#125;<br /><br /></span><span style="color: #007700">&lt;</span><span style="color: #0000BB">body</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">div id</span><span style="color: #007700">=</span><span style="color: #DD0000">"container"</span><span style="color: #007700">&gt;<br /></span><span style="color: #0000BB">&#123;embed</span><span style="color: #007700">=</span><span style="color: #DD0000">"inc/.banner"</span><span style="color: #0000BB">&#125;<br />&#123;embed</span><span style="color: #007700">=</span><span style="color: #DD0000">"inc/.leftnav"</span><span style="color: #0000BB">&#125;<br /></span><span style="color: #007700">&lt;</span><span style="color: #0000BB">div id</span><span style="color: #007700">=</span><span style="color: #DD0000">"content"</span><span style="color: #007700">&gt;<br /><br /></span><span style="color: #0000BB">&#123;</span><span style="color: #007700">!-- List </span><span style="color: #0000BB">of all reported bugs </span><span style="color: #007700">--</span><span style="color: #0000BB">&#125;<br /><br />&#123;exp</span><span style="color: #007700">:</span><span style="color: #0000BB">weblog</span><span style="color: #007700">:</span><span style="color: #0000BB">entries weblog</span><span style="color: #007700">=</span><span style="color: #DD0000">"&#123;bug_tracker_weblog&#125;" </span><span style="color: #0000BB">limit</span><span style="color: #007700">=</span><span style="color: #DD0000">"30" </span><span style="color: #0000BB">status</span><span style="color: #007700">=</span><span style="color: #DD0000">"Open|New|Confirmed|Unconfirmed|External|Resolved" </span><span style="color: #0000BB">sort</span><span style="color: #007700">=</span><span style="color: #DD0000">"desc" </span><span style="color: #0000BB">search</span><span style="color: #007700">:</span><span style="color: #0000BB">bug_tracker_&#123;segment_3&#125;</span><span style="color: #007700">=</span><span style="color: #DD0000">"=&#123;segment_4&#125;" </span><span style="color: #0000BB">dynamic</span><span style="color: #007700">=</span><span style="color: #DD0000">"off"</span><span style="color: #0000BB">&#125;<br />&#123;if no_results&#125;<br />No bugs of &#123;segment_4&#125; &#123;segment_3&#125;</span><span style="color: #007700">.<br /></span><span style="color: #0000BB">&#123;</span><span style="color: #007700">/</span><span style="color: #0000BB">if&#125;<br />&#123;if count </span><span style="color: #007700">== </span><span style="color: #DD0000">"1"</span><span style="color: #0000BB">&#125;<br /></span><span style="color: #007700">&lt;</span><span style="color: #0000BB">h3</span><span style="color: #007700">&gt;</span><span style="color: #0000BB">Filtering by &#123;segment_4&#125; &#123;segment_3&#125;</span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">h3</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">table</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">tr</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">th</span><span style="color: #007700">&gt;</span><span style="color: #0000BB">ID</span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">th</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">th</span><span style="color: #007700">&gt;</span><span style="color: #0000BB">Status</span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">th</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">th</span><span style="color: #007700">&gt;</span><span style="color: #0000BB">Version</span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">th</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">th</span><span style="color: #007700">&gt;</span><span style="color: #0000BB">Description</span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">th</span><span style="color: #007700">&gt;<br />&lt;/</span><span style="color: #0000BB">tr</span><span style="color: #007700">&gt;<br /></span><span style="color: #0000BB">&#123;</span><span style="color: #007700">/</span><span style="color: #0000BB">if&#125;<br /></span><span style="color: #007700">&lt;</span><span style="color: #0000BB">tr</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">td</span><span style="color: #007700">&gt;</span><span style="color: #0000BB">&#123;entry_id&#125;</span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">td</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">td</span><span style="color: #007700">&gt;</span><span style="color: #0000BB">&#123;status&#125;</span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">td</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">td</span><span style="color: #007700">&gt;</span><span style="color: #0000BB">&#123;bug_tracker_version&#125;</span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">td</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">td</span><span style="color: #007700">&gt;</span><span style="color: #0000BB">&#123;title&#125;</span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">td</span><span style="color: #007700">&gt;<br />&lt;/</span><span style="color: #0000BB">tr</span><span style="color: #007700">&gt;<br /></span><span style="color: #0000BB">&#123;if count </span><span style="color: #007700">== </span><span style="color: #0000BB">total_results&#125;<br /></span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">table</span><span style="color: #007700">&gt;<br /></span><span style="color: #0000BB">&#123;</span><span style="color: #007700">/</span><span style="color: #0000BB">if&#125;<br />&#123;</span><span style="color: #007700">/</span><span style="color: #0000BB">exp</span><span style="color: #007700">:</span><span style="color: #0000BB">weblog</span><span style="color: #007700">:</span><span style="color: #0000BB">entries&#125;<br /><br />&#123;</span><span style="color: #007700">!-- </span><span style="color: #0000BB">End Bug </span><span style="color: #007700">List --</span><span style="color: #0000BB">&#125;<br /></span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">div</span><span style="color: #007700">&gt;<br /></span><span style="color: #0000BB">&#123;embed</span><span style="color: #007700">=</span><span style="color: #DD0000">"inc/.footer"</span><span style="color: #0000BB">&#125;<br /></span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">div</span><span style="color: #007700">&gt;<br /></span><span style="color: #0000BB">&#123;html_end&#125;</span>
</code></div><p>
</p>
<p>
and the code for the updated inc/.leftnav template:
</p>
<p>
</p><div class="codeblock"><code>
<span style="color: #007700">&lt;</span><span style="color: #0000BB">div id</span><span style="color: #007700">=</span><span style="color: #DD0000">"leftnav"</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">h3</span><span style="color: #007700">&gt;</span><span style="color: #0000BB">Filter By</span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">h3</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">ul</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">li</span><span style="color: #007700">&gt;&lt;</span><span style="color: #0000BB">a href</span><span style="color: #007700">=</span><span style="color: #DD0000">"#"</span><span style="color: #007700">&gt;</span><span style="color: #0000BB">Status</span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">a</span><span style="color: #007700">&gt;&lt;/</span><span style="color: #0000BB">li</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">li</span><span style="color: #007700">&gt;</span><span style="color: #0000BB">Severity</span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">li</span><span style="color: #007700">&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;</span><span style="color: #0000BB">ul</span><span style="color: #007700">&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;</span><span style="color: #0000BB">li</span><span style="color: #007700">&gt;&lt;</span><span style="color: #0000BB">a href</span><span style="color: #007700">=</span><span style="color: #DD0000">"&#123;path="</span><span style="color: #0000BB">&#123;bug_tracker_template_group&#125;</span><span style="color: #007700">/</span><span style="color: #0000BB">filter_by</span><span style="color: #DD0000">"&#125;severity/Trivial/"</span><span style="color: #007700">&gt;</span><span style="color: #0000BB">Trivial</span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">a</span><span style="color: #007700">&gt;&lt;/</span><span style="color: #0000BB">li</span><span style="color: #007700">&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;</span><span style="color: #0000BB">li</span><span style="color: #007700">&gt;&lt;</span><span style="color: #0000BB">a href</span><span style="color: #007700">=</span><span style="color: #DD0000">"&#123;path="</span><span style="color: #0000BB">&#123;bug_tracker_template_group&#125;</span><span style="color: #007700">/</span><span style="color: #0000BB">filter_by</span><span style="color: #DD0000">"&#125;severity/Minor/"</span><span style="color: #007700">&gt;</span><span style="color: #0000BB">Minor</span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">a</span><span style="color: #007700">&gt;&lt;/</span><span style="color: #0000BB">li</span><span style="color: #007700">&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;</span><span style="color: #0000BB">li</span><span style="color: #007700">&gt;&lt;</span><span style="color: #0000BB">a href</span><span style="color: #007700">=</span><span style="color: #DD0000">"&#123;path="</span><span style="color: #0000BB">&#123;bug_tracker_template_group&#125;</span><span style="color: #007700">/</span><span style="color: #0000BB">filter_by</span><span style="color: #DD0000">"&#125;severity/Major/"</span><span style="color: #007700">&gt;</span><span style="color: #0000BB">Major</span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">a</span><span style="color: #007700">&gt;&lt;/</span><span style="color: #0000BB">li</span><span style="color: #007700">&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;</span><span style="color: #0000BB">li</span><span style="color: #007700">&gt;&lt;</span><span style="color: #0000BB">a href</span><span style="color: #007700">=</span><span style="color: #DD0000">"&#123;path="</span><span style="color: #0000BB">&#123;bug_tracker_template_group&#125;</span><span style="color: #007700">/</span><span style="color: #0000BB">filter_by</span><span style="color: #DD0000">"&#125;severity/Critical"</span><span style="color: #007700">&gt;</span><span style="color: #0000BB">Critical</span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">a</span><span style="color: #007700">&gt;&lt;/</span><span style="color: #0000BB">li</span><span style="color: #007700">&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;/</span><span style="color: #0000BB">ul</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">li</span><span style="color: #007700">&gt;&lt;</span><span style="color: #0000BB">a href</span><span style="color: #007700">=</span><span style="color: #DD0000">"#"</span><span style="color: #007700">&gt;</span><span style="color: #0000BB">Version</span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">a</span><span style="color: #007700">&gt;&lt;/</span><span style="color: #0000BB">li</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">li</span><span style="color: #007700">&gt;&lt;</span><span style="color: #0000BB">a href</span><span style="color: #007700">=</span><span style="color: #DD0000">"#"</span><span style="color: #007700">&gt;</span><span style="color: #0000BB">Category</span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">a</span><span style="color: #007700">&gt;&lt;/</span><span style="color: #0000BB">li</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">li</span><span style="color: #007700">&gt;&lt;</span><span style="color: #0000BB">a href</span><span style="color: #007700">=</span><span style="color: #DD0000">"#"</span><span style="color: #007700">&gt;</span><span style="color: #0000BB">Reported by</span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">a</span><span style="color: #007700">&gt;&lt;/</span><span style="color: #0000BB">li</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">li</span><span style="color: #007700">&gt;&lt;</span><span style="color: #0000BB">a href</span><span style="color: #007700">=</span><span style="color: #DD0000">"#"</span><span style="color: #007700">&gt;</span><span style="color: #0000BB">Assigned To</span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">a</span><span style="color: #007700">&gt;&lt;/</span><span style="color: #0000BB">li</span><span style="color: #007700">&gt;<br />&lt;/</span><span style="color: #0000BB">ul</span><span style="color: #007700">&gt;<br /><br />&lt;</span><span style="color: #0000BB">h3</span><span style="color: #007700">&gt;</span><span style="color: #0000BB">Search </span><span style="color: #007700">and </span><span style="color: #0000BB">Report</span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">h3</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">ul</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">li</span><span style="color: #007700">&gt;&lt;</span><span style="color: #0000BB">a href</span><span style="color: #007700">=</span><span style="color: #DD0000">"#"</span><span style="color: #007700">&gt;</span><span style="color: #0000BB">Search</span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">a</span><span style="color: #007700">&gt;&lt;/</span><span style="color: #0000BB">li</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">li</span><span style="color: #007700">&gt;&lt;</span><span style="color: #0000BB">a href</span><span style="color: #007700">=</span><span style="color: #DD0000">"&#123;path="</span><span style="color: #0000BB">&#123;bug_tracker_template_group&#125;</span><span style="color: #007700">/</span><span style="color: #0000BB">submit_bug</span><span style="color: #DD0000">"&#125;"</span><span style="color: #007700">&gt;</span><span style="color: #0000BB">Report</span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">a</span><span style="color: #007700">&gt;&lt;/</span><span style="color: #0000BB">li</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">li</span><span style="color: #007700">&gt;&lt;</span><span style="color: #0000BB">a href</span><span style="color: #007700">=</span><span style="color: #DD0000">"&#123;path="</span><span style="color: #0000BB">&#123;bug_tracker_template_group&#125;</span><span style="color: #007700">/</span><span style="color: #0000BB">by_author&#125;&#123;logged_in_username&#125;</span><span style="color: #DD0000">"&#125;"</span><span style="color: #007700">&gt;</span><span style="color: #0000BB">View My Bugs</span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">a</span><span style="color: #007700">&gt;&lt;/</span><span style="color: #0000BB">li</span><span style="color: #007700">&gt;<br />&lt;/</span><span style="color: #0000BB">ul</span><span style="color: #007700">&gt;<br /><br />&lt;</span><span style="color: #0000BB">h3</span><span style="color: #007700">&gt;</span><span style="color: #0000BB">Subscribe</span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">h3</span><span style="color: #007700">&gt;<br /><br />&lt;</span><span style="color: #0000BB">ul</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">li</span><span style="color: #007700">&gt;&lt;</span><span style="color: #0000BB">a href</span><span style="color: #007700">=</span><span style="color: #DD0000">"#"</span><span style="color: #007700">&gt;</span><span style="color: #0000BB">RSS</span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">a</span><span style="color: #007700">&gt;&lt;/</span><span style="color: #0000BB">li</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">li</span><span style="color: #007700">&gt;&lt;</span><span style="color: #0000BB">a href</span><span style="color: #007700">=</span><span style="color: #DD0000">"#"</span><span style="color: #007700">&gt;</span><span style="color: #0000BB">Atom</span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">a</span><span style="color: #007700">&gt;&lt;/</span><span style="color: #0000BB">li</span><span style="color: #007700">&gt;<br />&lt;/</span><span style="color: #0000BB">ul</span><span style="color: #007700">&gt;<br /><br />&lt;/</span><span style="color: #0000BB">div</span><span style="color: #007700">&gt;</span>
</code></div><p>
</p>
<p>
And now we can easily filter posts by any severity, using one template.&nbsp; We&#8217;ll expand on this concept as we go through and implement the features indicated in the left navigation menu.
</p>]]></description>
		<guid isPermaLink="false">http://expressionengine.com/blog/entry/building_a_bug_tracker_filtering_by_severity/#When:18:17:00Z</guid>
		<pubDate>Mon, 12 May 2008 18:17:00 GMT</pubDate>
	</item>

	<item>
		<title>Communicating with a Dispersed Team</title>
		<link>http://expressionengine.com/blog/entry/communicating_with_a_dispersed_team/</link>
		<dc:creator>Kurt Deutscher</dc:creator>
		<category>The Insider</category>
		<comments>http://expressionengine.com/blog/entry/communicating_with_a_dispersed_team/</comments>		<description><![CDATA[<p>EllisLab, like many contemporary companies, has a staff that is dispersed around the world. We have staff in at least six states in the United States and in two other countries. Every workday for us now spans several time zones. This kind of situation can create some communication challenges for any size organization and we&#8217;re keenly aware of how this could affect us as we continue to grow in the months and years ahead. Looking at ways to improve our communications with each other is one of a handful of behind-the-scenes projects we&#8217;re currently working on.
</p>
<p>
When I served as the director of a childcare center we also tackled the challenge of communicating information within a somewhat dispersed staff. Even though we all worked in the same building, we were situated in different rooms in the building, we worked overlapping shifts, and employment laws and childcare laws created a situation in which the whole staff could not meet at the same time, in the same place, without the center having to pay overtime wages. Our staff had to meet after closing in the evenings, and we had to pay folks their hourly wage plus one-half hour’s time for every hour of the meeting. This made meetings very expensive so we only held them about 10 times a year. 
</p>
<p>
There were 27 employees, six daily volunteers and other volunteers who comprised the staff of the center. At the time I started as the director, the center had a ton of dysfunctional issues that needed attention, and I was leading some pretty major change initiatives and really needed some way of communicating with staff to keep it up to speed on a daily basis. The building had one computer, two phone lines, no employee lunchroom or break room, and no intercom. Basically there was no way to communicate between the office and the classrooms or from one classroom to another except to have someone physically walk from room to room or yell down the hallway.
</p>
<p>
The building was very old and among its many challenges it had one adult toilet for the entire staff and visiting adults. Over 100 adults worked in or visited the building each day and we had one toilet in a small room with a sink at one end of a long building. Student toilets were in rooms with little or no privacy and were not suitable for an adult. It was also not a good practice for students to use the same facilities at the adults.
</p>
<p>
It wasn&#8217;t long before I realized that the one adult toilet was the functional bottleneck (constraint) of the whole center. If just about any other functional system in the building quit working, we could stay open and legally continue to care for the 80+ children we were licensed for. But if that adult toilet ever quit working, even for a couple of hours, the whole operation would have to shut down. 
</p>
<p>
One night, I was writing a contingency plan to cover us in the event the one adult toilet ever quit working, and something occurred to me. That toilet was the one place, the only place, that I could pretty much guarantee the entire staff would visit on any given day. Also, I could presume that at least one daily visit would take three or four minutes with the person sitting still long enough to read something. 
</p>
<p>
The next day, I wrote the first edition of my &#8220;Soapbox;&#8221; a mini-newsletter printed in a large font. I taped it to the back of the toilet room door so that it could be easily read from the &#8220;seated position.&#8221;  Within an hour, one of the staff was so offended that I had found a way to invade her &#8220;personal space&#8221; that she ripped it down, wadded it up, and ran water over it in the sink to ensure it wouldn&#8217;t be put back up.
</p>
<p>
That first week, I remember replacing the Soapbox with a fresh copy about 10 times as staff kept removing it in protest. Then one day, I noticed the copy hung on the door was one that had been ripped down, crumpled up, retrieved and re-hung with fresh tape. Someone on the staff actually wanted to read the thing and had hung it back up.
</p>
<p>
I continued to publish the Soapbox at least once a week and each edition improved on the layout and presentation of information. After that first week, it wasn&#8217;t ever ripped down again. Within the first few months the staff accepted this new form of communication, and I knew the acceptance had reached critical mass when a staff member asked me to start putting a second copy of it on the outside of the door for those waiting in line to read. 
</p>
<p>
The Soapbox became our primary source of news and information at the center. Once information was posted, nearly the entire staff would know about it within 24 hours. The staff learned to rely on the Soapbox for important information about employee benefits, vacation schedules, changes in funding, policies, procedures changes, requests for input to assist with decision making and updates on our ongoing remodeling projects: essentially everything and anything that mattered to the staff and parents. One edition featured paint color samples so the staff could choose the color we would have the building painted.
</p>
<p>
The consistent flow of up-to-date information from the main office, and the fact that everyone had equal access to it on a daily basis made the Soapbox a success. Our staff was kept updated on all pertinent news and announcements, as often as new information was available. This proved to be a big help with preventing and controlling rumors, and encouraging useful conversations between staff members. 
</p>
<p>
The key things that made that made the Soapbox a success were:
</p>
<p>
1. A captive audience with 100 percent attendance; everybody read it within 24 hours of each other
<br />
2. Regularly updated information from a reliable source 
<br />
3. A presentation format that made the information quick and easy to consume
</p>
<p>
Today, I&#8217;m considering what might prove equally successful that can be served up to our dispersed staff at EllisLab. We have some systems in place now; might there be something even better? What&#8217;s the best way to ensure the captive audience? Who will be in charge of posting the information to ensure the steady flow of updates? A blog, RSS, staff forums, bulk email, a weekly podcast, project management software? You would think that with all these options available, and all the geeky, techno savvy folks here at EllisLab this communication thing would be easy to figure out, and maybe it will be, but for now, it’s a work in progress. 
</p>
<p>
If you work in a large group of folks that are dispersed in one way or another, what&#8217;s your winning solution, and how&#8217;s it working out for you?
<br />

</p>]]></description>
		<guid isPermaLink="false">http://expressionengine.com/blog/entry/communicating_with_a_dispersed_team/#When:23:12:01Z</guid>
		<pubDate>Wed, 07 May 2008 23:12:01 GMT</pubDate>
	</item>

	<item>
		<title>EE in Short Order</title>
		<link>http://expressionengine.com/blog/entry/ee_in_short_order/</link>
		<dc:creator>Kurt Deutscher</dc:creator>
		<category>The Insider</category>
		<comments>http://expressionengine.com/blog/entry/ee_in_short_order/</comments>		<description><![CDATA[<p>How do you explain to someone what EE does when that person may have limited computer skills, may not understand how a database works, or even what one is?
</p>
<p>
Some days I have to remind myself that the Internet is still a new experience for many people. Even folks who have been using email for a decade may not know much about the web or how websites work, and frequently they are the very people charged with choosing a CMS and/or CMS consultant for their business. 
</p>
<p>
Also, among these folks is a sub-group I&#8217;ve run into that hate anything that has to do with databases. They have an emotional reaction to databases as if they are inherently evil and out to destroy the world.
</p>
<p>
When we&#8217;re presenting to folks like this, we might be using the latest techno-speak to describe the website we&#8217;ll build for them, and they might be hearing something completely different.
</p>
<p>
I might say, &#8220;Your new dynamic website will be built in a Content Management System called ExpressionEngine, running on a foundation of the powerful open source technologies of the PHP language and MySQL database.&#8221;
</p>
<p>
By the time you finish that sentence, they are thinking, &#8220;Ack! It requires a free database I&#8217;ve never heard of, it&#8217;s in some language I&#8217;ve never heard of and the whole expression whatever and dynamic thing just sounds like it will create a lot of drama around here we don&#8217;t need. I don&#8217;t want a database, I want a website!&#8221;
</p>
<p>
When I sense this is going on, that the person or group I&#8217;m presenting to is not receptive to my carefully practiced techno-speak (I&#8217;ve seen people turn red and start shaking), I try to take a step back in the conversation to explain how EE works. My favorite analogy is that of a short-order cook in a breakfast restaurant.
</p>
<p>
Here in the States, we have restaurants that specialize in serving the American breakfast. At the center of these restaurants are one or more short-order cooks who can take a customer&#8217;s request for two eggs (cooked anyway he likes) bacon, hash browns, toast and a stack of pancakes, cook it and get it on a hot plate in a manner of minutes. A good short-order cook in a well-designed kitchen can plate 100 meals an hour during morning rush. It’s a bit like a highly improvised kitchen ballet. 
</p>
<p>
This kind of restaurant is familiar to most of the folks to whom I end up explaining EE to, so it has proven to be a good analogy for me. Here&#8217;s how I might use the restaurant to explain a dynamic EE site versus a static website.
</p>
<p>
If you walk into a &#8220;static&#8221; restaurant for breakfast, you will be served the same breakfast prepared the same way as the person before you, and as the person who comes in after you will have. The place basically serves one breakfast, cooked one way, for everyone that visits. In fact, the food may have been precooked and/or prepared weeks in advance; think frozen dinner.
</p>
<p>
If you walk into a &#8220;dynamic&#8221; restaurant, a waitperson will send your request for breakfast back to the kitchen, where a very busy short-order cook will read your request and quickly prepare your requested breakfast from scratch, out of resources in the kitchen. He will go get eggs, butter, bacon and bread and start cooking those on the grill. He may also find some pre-mixed batter from a bowl (a cache) and pour some of that on the grill at the same time to make you some pancakes. The second everything is cooked, he assembles it all on a hot plate and your waitperson brings it out to your table. In a good breakfast restaurant, this takes less than five minutes. When EE does this for your website, it will take a fraction of a second.
</p>
<p>
The kitchen is very much like a database of information that has been stocked, stored and positioned so that it can be accessed quickly and assembled into a hot breakfast by your short-order cook. ExpressionEngine acts as your short-order cook assembling your meal for you as you requested. The restaurant is your hosting server and your waitperson is your browser in this analogy. 
</p>
<p>
This is analogy is far from perfect, but enough folks identify with it that I just keep using it. Also, by avoiding unfamiliar technical speak, and using somewhat familiar terms related to kitchens and restaurants, some people feel more comfortable talking with me about EE. The whole CMS conversation becomes less threatening and sometimes quite silly. 
</p>
<p>
If you&#8217;ve not encountered the kind of restaurant I&#8217;m talking about in this post, I found this video of a short-order cook preparing a late night meal. This will give you a visual even though this cooks not preparing breakfast during rush-hour. This video is nearly perfect for my analogy though, as you can see the cook querying the database, retrieving the data, formatting it, and assembling it.
</p>
<p>
<a href="http://youtube.com/watch?v=fVPO42XXfZs" target="_blank" title="Short Order Cook Video">Short Order Cook Video</a>
</p>
<p>
So far, I&#8217;ve had pretty good luck using this short-order cook analogy to explain how EE works to folks who are unfamiliar with the web, computers and databases. I&#8217;m always on the lookout for a better analogy though, and I&#8217;ll bet there are some good ones out there. So I invite you to share yours if you&#8217;ve found one that works for you.
<br />
 
<br />
How do you explain EE to the non tech savvy?
<br />

</p>]]></description>
		<guid isPermaLink="false">http://expressionengine.com/blog/entry/ee_in_short_order/#When:22:52:00Z</guid>
		<pubDate>Wed, 30 Apr 2008 22:52:00 GMT</pubDate>
	</item>

	<item>
		<title>Paul Burdick steps down, Derek Jones steps up</title>
		<link>http://expressionengine.com/blog/entry/paul_burdick_steps_down_derek_jones_steps_up/</link>
		<dc:creator>Rick Ellis</dc:creator>
		
		<comments>http://expressionengine.com/blog/entry/paul_burdick_steps_down_derek_jones_steps_up/</comments>		<description><![CDATA[<p>It&#8217;s with some sadness that I announce today that Paul Burdick is stepping down from his position as Chief Technology Officer, a role he has held for over four years, in order to pursue some personal goals.&nbsp; Although Paul will continue with us in a reduced capacity, he is being replaced as CTO by Derek Jones.
</p>
<p>
They say that in life, timing is everything.&nbsp; In 2003, fresh out of college, Paul was hired by the Oregon Wine Board to build a website using our first generation publishing system, pMachine Pro.&nbsp; That site had a number of needs that were not able to be met natively by pM Pro, so Paul, despite never having coded anything in PHP before, rolled up his sleeves and figured out how to develop those features.&nbsp; He then generously donated his new code back to our community, which is how I first met him.&nbsp; 
</p>
<p>
I remember looking at his code and being blown away that he had only been coding a few weeks.&nbsp; He was a natural.&nbsp; He also happened to live in the same city as I did, and as luck would have it, my little company had grown to the point of needing some development help, so I offered him a job.&nbsp; Paul became employee number three.&nbsp; There was me, a guy named Chris doing tech support (who left the company years ago), and Paul.
</p>
<p>
At the time Paul came on-board, I was a few months away from unveiling ExpressionEngine, the secret new project I had been working on.&nbsp; In order to stay focussed on EE, I turned pMachine&#8217;s development over to Paul; a risky move for sure, given how little experience he had.&nbsp; To Paul&#8217;s credit, he took the challenge by the horns, dove head first into the code, and single-handedly developed the very next release of pM Pro.&nbsp; A natural indeed.
</p>
<p>
As good as Paul&#8217;s technical skills were, his work ethic and commitment were even more impressive.&nbsp; Paul immediately became my trusted right-hand man, and for the past four years has been an integral component to our success.&nbsp; During those early years in particular, Paul was more like a brother than an employee.&nbsp; I can&#8217;t express how grateful I am that Paul emerged in our forums one day, and helped shape who we are today.&nbsp; I couldn&#8217;t have done it without his help.
</p>
<p>
A couple years ago, we had a similar good fortune in finding Derek Jones.&nbsp; He had been participating in our forums, having built a couple projects using our software.&nbsp; We needed to grow our team just as Derek&#8217;s career was transitioning, so we offered him a job.&nbsp; Similar to Paul, Derek was very new to programming when he started, but he had that special mojo that enabled him to learn rapidly and get productive very quickly.&nbsp; In less then two years Derek has gone from having little programming experience to becoming CTO of our company.&nbsp; Impressive.
</p>
<p>
Paul, and later Derek, taught me my philosophy on hiring:&nbsp; Hire people who are brilliant, who get things done, and who show great aptitude&#8212;and this is important&#8212;even if they don&#8217;t have a particular skill-set.&nbsp; Skills can be learned.&nbsp; The other stuff can&#8217;t.
</p>
<p>
So today marks a day of transition.&nbsp; Paul Burdick is leaving to spread his wings, tackle some new challenges, and meet some personal goals.&nbsp; And Derek Jones is emerging as the cornerstone of our technical team.&nbsp; Paul leaves a big void to fill, but fortunately we&#8217;ve had some months to make the transition internally, and he will still be with us in a reduced role, so our development goals shouldn&#8217;t be affected.&nbsp; 
</p>
<p>
Thank you for all you&#8217;ve done for us, Paul.&nbsp; You&#8217;ll be missed!
</p>]]></description>
		<guid isPermaLink="false">http://expressionengine.com/blog/entry/paul_burdick_steps_down_derek_jones_steps_up/#When:21:02:01Z</guid>
		<pubDate>Wed, 30 Apr 2008 21:02:01 GMT</pubDate>
	</item>

	<item>
		<title>Lisa Wess Promoted to Director of Community Services</title>
		<link>http://expressionengine.com/blog/entry/lisa_wess_promoted_to_director_of_community_services/</link>
		<dc:creator>Leslie Camacho</dc:creator>
		<category>News</category>
		<comments>http://expressionengine.com/blog/entry/lisa_wess_promoted_to_director_of_community_services/</comments>		<description><![CDATA[<p>A long overdue video entry in which we promote Lisa to Director of Community Services, a position customized for all the positives she brings to the community.
</p>]]></description>
		<guid isPermaLink="false">http://expressionengine.com/blog/entry/lisa_wess_promoted_to_director_of_community_services/#When:21:50:00Z</guid>
		<pubDate>Tue, 29 Apr 2008 21:50:00 GMT</pubDate>
	</item>

	<item>
		<title>Building a Bug Tracker: My Bugs Section</title>
		<link>http://expressionengine.com/blog/entry/building_a_bug_tracker_my_bugs_section/</link>
		<dc:creator>Lisa Wess</dc:creator>
		<category>Learn ExpressionEngine</category><category>Building a Bug Tracker</category>
		<comments>http://expressionengine.com/blog/entry/building_a_bug_tracker_my_bugs_section/</comments>		<description><![CDATA[<p>With the layout ready to go, we are ready to consider how to display posts in a variety of useful ways, so that both reporters and developers can easily sift through what has already been reported, the report&#8217;s status, and any discussion regarding that report.
</p>
<p>
To begin, let&#8217;s start by quickly supply the reporters a list of their own reports.&nbsp; That way they can track the status on those reports as well as respond to any enquiries for further details.
</p>
<p>
In order to achieve an infrastructure that can easily be expanded down the line, we&#8217;re not going to restrict ourselves to one mega-template; instead, we&#8217;ll create function-based templates that we can expand on later in order to get detailed reports.
</p>
<p>
Our first goal for this is to be able to limit bug reports by the reporter.&nbsp; So, let&#8217;s make a template and call it by_author.&nbsp; This will be in the bug_tracker template group.&nbsp; When you create this template, duplicate the bug_tracker template group&#8217;s index.
</p>
<p>
This template is going to remain largely the same as the index template.&nbsp; Only now, we&#8217;re going to add the dynamic= and username= parameters, with the username= calling the third segment.&nbsp; This will be the new weblog entries opening tag:
</p>
<p>
</p><div class="codeblock"><code>
<span style="color: #0000BB">&#123;exp</span><span style="color: #007700">:</span><span style="color: #0000BB">weblog</span><span style="color: #007700">:</span><span style="color: #0000BB">entries weblog</span><span style="color: #007700">=</span><span style="color: #DD0000">"&#123;bug_tracker_weblog&#125;" </span><span style="color: #0000BB">limit</span><span style="color: #007700">=</span><span style="color: #DD0000">"30" </span><span style="color: #0000BB">status</span><span style="color: #007700">=</span><span style="color: #DD0000">"Open|New|Confirmed|Unconfirmed|External|Resolved" </span><span style="color: #0000BB">username</span><span style="color: #007700">=</span><span style="color: #DD0000">"&#123;segment_3&#125;" </span><span style="color: #0000BB">dynamic</span><span style="color: #007700">=</span><span style="color: #DD0000">"off"</span><span style="color: #0000BB">&#125;</span>
</code></div><p>
</p>
<p>
Important to note is that if we did not turn <a href="http://expressionengine.com/docs/modules/weblog/parameters.html#par_dynamic">dynamic off</a> here, then the weblog entries tag would believe that Segment 3 was a URL Title, and would give us different results than what we are after.
</p>
<p>
Now we&#8217;ll add a link in our left navigation, under &#8220;Search and Report&#8221;, and call it &#8220;View My Bugs&#8221;.&nbsp; The link will look like this:
</p>
<p>
</p><div class="codeblock"><code>
<span style="color: #007700">&lt;</span><span style="color: #0000BB">a href</span><span style="color: #007700">=</span><span style="color: #DD0000">"&#123;path="</span><span style="color: #0000BB">&#123;bug_tracker_template_group&#125;</span><span style="color: #007700">/</span><span style="color: #0000BB">by_author&#125;&#123;logged_in_username&#125;</span><span style="color: #DD0000">"&#125;"</span><span style="color: #007700">&gt;</span><span style="color: #0000BB">View My Bugs</span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">a</span><span style="color: #007700">&gt;</span>
</code></div><p>
</p>
<p>
Not only have we now set up the ability for the reporter to view their own reports, we have also set up the infrastructure that will allow us to create links for any bug reporter, by simply passing the username in the URL.&nbsp;  
</p>
<p>
If you test at this point, it beccomes readily apparent that we get a rather uninformative page if we pass an non-existing username via Segment 3.&nbsp; At this point, it would be good to make use of the <a href="http://expressionengine.com/docs/modules/weblog/conditional_variables.html#cond_if_no_results">if no_results conditional variable pair</a>.&nbsp; You can do that by simply adding the following code directly under your opening weblog entries tag:
</p>
<p>
</p><div class="codeblock"><code>
<span style="color: #0000BB">&#123;if no_results&#125;<br /></span><span style="color: #007700">&lt;</span><span style="color: #0000BB">p</span><span style="color: #007700">&gt;</span><span style="color: #0000BB">No Bugs Reported</span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">p</span><span style="color: #007700">&gt;<br /></span><span style="color: #0000BB">&#123;</span><span style="color: #007700">/</span><span style="color: #0000BB">if&#125;</span>
</code></div><p>
</p>
<p>
Here is the finished by_author template:
</p>
<p>
</p><div class="codeblock"><code>
<span style="color: #0000BB">&#123;html_begin&#125;<br /><br />&#123;embed</span><span style="color: #007700">=</span><span style="color: #DD0000">"inc/.head" </span><span style="color: #0000BB">title</span><span style="color: #007700">=</span><span style="color: #DD0000">"Bug Tracker"</span><span style="color: #0000BB">&#125;<br /><br /></span><span style="color: #007700">&lt;</span><span style="color: #0000BB">body</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">div id</span><span style="color: #007700">=</span><span style="color: #DD0000">"container"</span><span style="color: #007700">&gt;<br /></span><span style="color: #0000BB">&#123;embed</span><span style="color: #007700">=</span><span style="color: #DD0000">"inc/.banner"</span><span style="color: #0000BB">&#125;<br />&#123;embed</span><span style="color: #007700">=</span><span style="color: #DD0000">"inc/.leftnav"</span><span style="color: #0000BB">&#125;<br /></span><span style="color: #007700">&lt;</span><span style="color: #0000BB">div id</span><span style="color: #007700">=</span><span style="color: #DD0000">"content"</span><span style="color: #007700">&gt;<br /><br /></span><span style="color: #0000BB">&#123;</span><span style="color: #007700">!-- </span><span style="color: #0000BB">Showing My Bug Reports </span><span style="color: #007700">--</span><span style="color: #0000BB">&#125;<br /><br /></span><span style="color: #007700">&lt;</span><span style="color: #0000BB">h3</span><span style="color: #007700">&gt;</span><span style="color: #0000BB">Bugs Reported by &#123;logged_in_username&#125;</span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">h3</span><span style="color: #007700">&gt;<br /></span><span style="color: #0000BB">&#123;exp</span><span style="color: #007700">:</span><span style="color: #0000BB">weblog</span><span style="color: #007700">:</span><span style="color: #0000BB">entries weblog</span><span style="color: #007700">=</span><span style="color: #DD0000">"&#123;bug_tracker_weblog&#125;" </span><span style="color: #0000BB">limit</span><span style="color: #007700">=</span><span style="color: #DD0000">"30" </span><span style="color: #0000BB">status</span><span style="color: #007700">=</span><span style="color: #DD0000">"Open|New|Confirmed|Unconfirmed|External|Resolved" </span><span style="color: #0000BB">username</span><span style="color: #007700">=</span><span style="color: #DD0000">"&#123;segment_3&#125;" </span><span style="color: #0000BB">dynamic</span><span style="color: #007700">=</span><span style="color: #DD0000">"off"</span><span style="color: #0000BB">&#125;<br />&#123;if no_results&#125;<br /></span><span style="color: #007700">&lt;</span><span style="color: #0000BB">p</span><span style="color: #007700">&gt;</span><span style="color: #0000BB">No Bugs Reported</span><span style="color: #007700">.&lt;/</span><span style="color: #0000BB">p</span><span style="color: #007700">&gt;<br /></span><span style="color: #0000BB">&#123;</span><span style="color: #007700">/</span><span style="color: #0000BB">if&#125;<br />&#123;if count </span><span style="color: #007700">== </span><span style="color: #DD0000">"1"</span><span style="color: #0000BB">&#125;<br /></span><span style="color: #007700">&lt;</span><span style="color: #0000BB">table</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">tr</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">th</span><span style="color: #007700">&gt;</span><span style="color: #0000BB">ID</span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">th</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">th</span><span style="color: #007700">&gt;</span><span style="color: #0000BB">Status</span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">th</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">th</span><span style="color: #007700">&gt;</span><span style="color: #0000BB">Version</span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">th</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">th</span><span style="color: #007700">&gt;</span><span style="color: #0000BB">Description</span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">th</span><span style="color: #007700">&gt;<br />&lt;/</span><span style="color: #0000BB">tr</span><span style="color: #007700">&gt;<br /></span><span style="color: #0000BB">&#123;</span><span style="color: #007700">/</span><span style="color: #0000BB">if&#125;<br /></span><span style="color: #007700">&lt;</span><span style="color: #0000BB">tr</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">td</span><span style="color: #007700">&gt;</span><span style="color: #0000BB">&#123;entry_id&#125;</span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">td</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">td</span><span style="color: #007700">&gt;</span><span style="color: #0000BB">&#123;status&#125;</span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">td</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">td</span><span style="color: #007700">&gt;</span><span style="color: #0000BB">&#123;bug_tracker_version&#125;</span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">td</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">td</span><span style="color: #007700">&gt;</span><span style="color: #0000BB">&#123;bug_tracker_details&#125;</span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">td</span><span style="color: #007700">&gt;<br />&lt;/</span><span style="color: #0000BB">tr</span><span style="color: #007700">&gt;<br /></span><span style="color: #0000BB">&#123;if count </span><span style="color: #007700">== </span><span style="color: #0000BB">total_results&#125;<br /></span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">table</span><span style="color: #007700">&gt;<br /></span><span style="color: #0000BB">&#123;</span><span style="color: #007700">/</span><span style="color: #0000BB">if&#125;<br />&#123;</span><span style="color: #007700">/</span><span style="color: #0000BB">exp</span><span style="color: #007700">:</span><span style="color: #0000BB">weblog</span><span style="color: #007700">:</span><span style="color: #0000BB">entries&#125;<br /><br />&#123;</span><span style="color: #007700">!-- </span><span style="color: #0000BB">End Bug </span><span style="color: #007700">List --</span><span style="color: #0000BB">&#125;<br /></span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">div</span><span style="color: #007700">&gt;<br /></span><span style="color: #0000BB">&#123;embed</span><span style="color: #007700">=</span><span style="color: #DD0000">"inc/.footer"</span><span style="color: #0000BB">&#125;<br /></span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">div</span><span style="color: #007700">&gt;<br /></span><span style="color: #0000BB">&#123;html_end&#125;</span>
</code></div><p>
</p>
<p>
<img src="http://expressionengine.com/files/blog/bug_tracker_mine.png" alt="desc" width="490" alt="bug tracker - my bugs" />
</p>
<p>
Of course, there are other ways that we could have handled this, and I&#8217;ll give a brief mention of them.&nbsp; We could have, for instance, used:
</p>
<p>
</p><div class="codeblock"><code>
<span style="color: #0000BB">username</span><span style="color: #007700">=</span><span style="color: #DD0000">"CURRENT_USER"</span>
</code></div><p>
</p>
<p>
However, to do that would have involved either a dedicated template, or a series of conditionals in order to ascertain what segment 3 contained.&nbsp; In this case, by simply using the logged in member&#8217;s username, we were able to create a clean, optimized template with all the functionality that we required.
</p>
<p>
It is easy to see how important URL segments can be to ExpressionEngine; not just in the normal usage, but when we vary up what they mean, and define our very own semantics.&nbsp; 
</p>]]></description>
		<guid isPermaLink="false">http://expressionengine.com/blog/entry/building_a_bug_tracker_my_bugs_section/#When:02:52:01Z</guid>
		<pubDate>Mon, 28 Apr 2008 02:52:01 GMT</pubDate>
	</item>

	<item>
		<title>Choosing a new hire? Ask a two&#45;year&#45;old.</title>
		<link>http://expressionengine.com/blog/entry/choosing_a_new_hire_ask_a_two_year_old/</link>
		<dc:creator>Kurt Deutscher</dc:creator>
		<category>The Insider</category>
		<comments>http://expressionengine.com/blog/entry/choosing_a_new_hire_ask_a_two_year_old/</comments>		<description><![CDATA[<p>Many years ago, I was in charge of a childcare center with a staff of 29 that looked after about 60 children five days a week. The children were no younger than six weeks and no older than six years of age. 
</p>
<p>
When I took over the leadership role at the center there were a lot of dysfunctional practices and systems that needed overhauling; one of them was the way we hired new staff. 
</p>
<p>
Traditionally, we had run ads in the local paper to attract candidates. Each person interested in working with us was required to come to the center to pick up a copy of a three-page application that he or she would need to complete and submit with a resumé by a deadline. The Director of the center would then review the applications, pick eight to 10 candidates and line them up for 30-minute interviews. At the end of the day of interviews, one candidate would be chosen by the Director and would receive a job offer by phone while the rest were mailed a postcard informing them they were not chosen.
</p>
<p>
That system had a lot of room for improvement. One day, I just couldn&#8217;t stand it any more and I set out to design a new system. 
</p>
<p>
For starters, why have all candidates fill out three-page applications if, instead, you could screen them for interviews based solely on their resumés? Most of the information on the application was already in the candidates&#8217; resumés, so why would you want to look at the same information twice? It takes twice as long to review all that extra paper. If you have 200 candidates submitting resumés for an opening, why on earth would you want to add 600 more pages of information to review, especially if you only needed that information for, say, maybe four people?
</p>
<p>
We made a new rule that the three-page application would only be filled out by people we invited for a second interview. If you weren&#8217;t invited to interview, you received either a yellow postcard from us thanking you for your submission and stating that your resumé was reviewed but we didn&#8217;t feel it matched the set of experience we were currently seeking, or you were mailed a green postcard letting you know your resumé would be kept on file. We sent out very few green postcards, but we actually contacted these folks and ended up finding a couple of good hires in our &#8220;green poll.&#8221;
</p>
<p>
We really wanted to screen our candidates better than we had in the past, so we divided up the interview process into three steps: Step One was with me, the Director, Step Two was with the Head Teachers, and Step Three was with some of the children in a supervised classroom setting. 
</p>
<p>
After the Head Teachers and I had reviewed all the resumés, we would sort them in order of preference and I would invite the top six to eight candidates for a one-hour interview. This interview was one-on-one with me. During the hour I would take the applicant on a tour of our center so the candidate could see the full facility. I would explain our organization&#8217;s culture, the compensation package we were offering and our employee benefits. I would also ask the person five questions and note his/her responses. I asked every candidate the same five questions:
</p>
<p>
1. If I asked a young child you taught, to describe what he or she remembers about you 20 years from now, what would the child/adult tell me?
<br />
2. What is/was the single most difficult challenge in your life that you have overcome?
<br />
3. What are you passionate about?
<br />
4. What will you be doing five years from now?
<br />
5. What would you die for?
</p>
<p>
Finally, I would hand the applicant a copy of our three-page application and ask her to go home to think about our interview, the center and everything she learned about us, and to decide if this was a place where she would enjoy working. The candidate could call me anytime after 12:00 noon the next day with an answer. I would not accept an answer any sooner. If she called and said he didn&#8217;t want to work with us, I would wish her well, and encourage her to share what she had learned about us with others. If she did want to join our team, she needed to submit the three-page application with references within 48 hours and schedule a second one-hour interview, this time with our Head Teachers.
</p>
<p>
About half our candidates would bail out at this point. This was great as I didn&#8217;t even have to consider them for the job, they hadn&#8217;t used up any of my Head Teachers&#8217; valuable time and they made the decision not to work at the center before we had invested much energy in them. Also, those folks were not rejected and most left with a good feeling about us even if they knew this was not the right fit for them.
</p>
<p>
My interview with the potential candidates was all about finding out if our culture, pay and benefits were a good match with the needs of each candidate. The Head Teachers&#8217; interview was all about the candidates&#8217; educational background, teaching philosophy and current knowledge in the field of early childhood education. That second interview included teaching a short lesson and, just like mine, sent the candidates home to think about things over night. If at this point, after interacting with our Head Teachers (the two people who would be supervising a new hire most often), they didn&#8217;t think this was the place they wanted to work, they could opt out, and over half of them did.
</p>
<p>
If they still thought our center was a place they wanted to work, we would have them back for a third and final interview. Up to this point, the candidates had not been in any of our classrooms and had not interacted with any of our students or classroom teachers.
</p>
<p>
For our third and final interview, we would rely on the people in our building who were the best judges of character: our two-year-olds. I&#8217;ve never fully understood how this works, but two-year-olds in a group setting are brilliant judges of character. They can size someone up in short order and issue a definitive judgment on a person in the time it takes you to read, &#8220;Everybody Poops.&#8221; 
</p>
<p>
The third interview involved the candidate spending 30 minutes interacting with our two-year-olds under the supervision of both Head Teachers along with the two teachers whose class the candidate was visiting. 
</p>
<p>
If the two-year-olds quickly adopted the candidate into a playgroup and engaged in active play with the candidate, and the candidate appeared comfortable and confident in the playgroup, then there was a good likelihood we would extend an offer to the person. If the children did not engage with the new person on their own, or had to be prompted to play with the candidate, or ignored the candidate, then, regardless of any degrees or credentials, or flawless answers to previous questions, the person would not be offered a job with us. 
</p>
<p>
After 30 minutes in the classroom, the Head Teachers would ask the candidate how he or she thought the experience with the children had gone and would share observations with the candidate. At the end of the interview, the candidate would again be asked to go home to think about the experience and decide if our center would be a good match. About one in four would opt out at this point.
</p>
<p>
If a candidate didn&#8217;t opt out, and the third interview with the children had not proceeded well, one of the Head Teachers would call the person and give the person an honest assessment of what our staff observed and what we would need to see in the future from this person should he or she ever decide to apply for another position.
</p>
<p>
If more than one person progressed this far in the interview process and we had two or three people who appeared qualified for the position, and none of us had any objections to the candidates, then it was my job to try to disqualify one of them. I would at this point call references, call the universities listed and make sure all their credentials listed could be confirmed. If we had only one suitable candidate, I had to check references and credentials anyway, so this wasn&#8217;t a big deal.
</p>
<p>
If all the qualified candidates survived the references and qualifications checks, then the Head Teachers and I would meet to pick the person we thought would best balance our current team in place. I would offer the chosen candidate the job. I would also call the other candidate to explain why another person was offered the job and why he or she wasn’t receiving the offer, and then I would ask this person to check in with me every two weeks if he or she was still looking for employment.
</p>
<p>
The final step in the hiring process was to run a criminal background check on our final candidate. If he passed this (and all of the final candidates did) then he had the job.
</p>
<p>
There was a lot we liked about this hiring process. 
</p>
<p>
Within a year of implementing it, we experienced a 120 percent reduction in staff turnover. Other changes we made at the center also contributed to this sharp reduction in staff turnover, but this new interview process played a huge role in ending the revolving door of teachers the center had experienced for years.
</p>
<p>
About 80 percent of our top candidates self-selected out: half of them opted out after the first interview with me, and another 30 percent opted out after the interview with the Head Teachers. Very few candidates made it to the classroom interview, typically only one or two, and nearly all of them passed with flying colors. The two who didn&#8217;t opted out. 
</p>
<p>
By the time we extended an opportunity to someone, she had already spent an hour with the center&#8217;s Director, accepted our pay and benefits structure, our culture, our work place, who her supervisors would be and what their personalities were like, met a couple of our classroom teachers and seen our most challenging children close up and personal. She had been given at least three chances to opt out if she felt this was not the place she wanted to work. 
</p>
<p>
Also, I had spent an hour with the candidate, our Head Teachers had spent two hours with this person, our office manager had interacted with him or her, two of our classroom teachers and over a dozen of our students had had a chance to observe this person and express any concerns before a job offer was made. We had a lot of folks engaged in the process.
</p>
<p>
We did not involve the parents of the children in the hiring decisions. We thought about it, talked with our Parent Advisory Board and the decision was made that the system we had did such a good job of selecting the best people for the job, the parents did not feel the need to be involved before a new teacher&#8217;s first day. 
</p>
<p>
By the time a new teacher was hired and placed in one of our classrooms, he was committed to working with us, and we were confident in him and committed to seeing him succeed at our center. The new teacher felt like he belonged there, and we felt like he belonged there. 
</p>
<p>
While the ultimate responsibility for hiring the right people rested with me, as I was the Director, the functional responsibility was shared among myself, the Head Teachers, a couple of our most experienced classroom teachers, the candidates themselves and even the children. This not only did a great job of ensuring that we had the right people on our team, it also meant that new hires were accepted by and integrated into the rest of our team much, much faster than ever before, and this helped to ensure their success. 
</p>
<p>
Choosing the people who will serve on your team is arguably the most important decision you&#8217;ll make in your company. How you go about selecting those people should be given a considerable amount of thought. 
</p>
<p>
The new-hire selection system the staff and I developed for the childcare center is likely not a great match for you if you&#8217;re hiring folks for a web firm, unless of course you happen to have a dozen two-year-olds running around. It may however, encourage you to consider your own firm&#8217;s hiring process, and how well your process is meeting your needs and the needs of the folks on your team.
</p>
<p>
What are you doing to make sure you find the right people for your team?
</p>]]></description>
		<guid isPermaLink="false">http://expressionengine.com/blog/entry/choosing_a_new_hire_ask_a_two_year_old/#When:02:12:00Z</guid>
		<pubDate>Thu, 24 Apr 2008 02:12:00 GMT</pubDate>
	</item>

	<item>
		<title>Building a Bug Tracker: Bug List Layout</title>
		<link>http://expressionengine.com/blog/entry/building_a_bug_tracker_bug_list_layout/</link>
		<dc:creator>Lisa Wess</dc:creator>
		<category>Learn ExpressionEngine</category><category>Building a Bug Tracker</category>
		<comments>http://expressionengine.com/blog/entry/building_a_bug_tracker_bug_list_layout/</comments>		<description><![CDATA[<p>Before we can adventure into  filtering and sorting content, we should first come up with a good display for that content.
</p>
<p>
One of the things that newcomers often don&#8217;t realize with ExpressionEngine is that the templates really are entirely under your control.&nbsp; Expression assumes very little, so it follows that the weblog entries tag outputs only what you&#8217;ve told it specifically to output, and this leaves the design entirely in your hands.
</p>
<p>
While the default templates ship with CSS  based layouts, a bug tracker is definitely more tabular data.&nbsp; So let&#8217;s explore how to create a table with the weblog entries tag.
</p>
<p>
Creating a table within the weblog entries tag is all about controlling the table and table row repeating elements.&nbsp; We have to remember that everything inside the weblog entries tags loop, and unless you are very specific, your table tags will loop as well, putting each entry in its own table.
</p>
<p>
At the same time, we don&#8217;t want the table tags outside of the weblog entries tags.&nbsp; Why?&nbsp; If there are no entries, we&#8217;ll have an empty table! 
</p>
<p>
So, what can we do to exercise the control we need?&nbsp; Bring on the <a href="http://expressionengine.com/docs/templates/globals/conditionals.html">conditionals</a>!
</p>
<p>
First, we want to open our bug_tracker/index template and locate the &#123;exp:weblog:entries&#125; tag.&nbsp; We&#8217;ll start there.&nbsp; You should already have this line in your template:
</p>
<p>
</p><div class="codeblock"><code>
<span style="color: #0000BB">&#123;exp</span><span style="color: #007700">:</span><span style="color: #0000BB">weblog</span><span style="color: #007700">:</span><span style="color: #0000BB">entries weblog</span><span style="color: #007700">=</span><span style="color: #DD0000">"&#123;bug_tracker_weblog&#125;" </span><span style="color: #0000BB">limit</span><span style="color: #007700">=</span><span style="color: #DD0000">"30" </span><span style="color: #0000BB">status</span><span style="color: #007700">=</span><span style="color: #DD0000">"Open|New|Confirmed|Unconfirmed|External|Resolved"</span><span style="color: #0000BB">&#125;</span>
</code></div><p>
</p>
<p>
Now, right under that, let&#8217;s add our first conditional:
</p>
<p>
</p><div class="codeblock"><code>
<span style="color: #0000BB">&#123;if count </span><span style="color: #007700">== </span><span style="color: #DD0000">"1"</span><span style="color: #0000BB">&#125;<br /></span><span style="color: #007700">&lt;</span><span style="color: #0000BB">table</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">tr</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">th</span><span style="color: #007700">&gt;</span><span style="color: #0000BB">ID</span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">th</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">th</span><span style="color: #007700">&gt;</span><span style="color: #0000BB">Status</span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">th</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">th</span><span style="color: #007700">&gt;</span><span style="color: #0000BB">Version</span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">th</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">th</span><span style="color: #007700">&gt;</span><span style="color: #0000BB">Description</span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">th</span><span style="color: #007700">&gt;<br />&lt;/</span><span style="color: #0000BB">tr</span><span style="color: #007700">&gt;<br /></span><span style="color: #0000BB">&#123;</span><span style="color: #007700">/</span><span style="color: #0000BB">if&#125;</span>
</code></div><p>
</p>
<p>
So here we can see that we&#8217;re comparing <a href="http://expressionengine.com/docs/modules/weblog/variables.html#var_count">{count}</a> to the value of 1; this tells ExpressionEngine to output this information only if we&#8217;re on the first entry in the loop. This is useful as we want our table and table heading tags to appear only once. 
</p>
<p>
The table headings consist of the basic information that we need when listing out bug reports.&nbsp; So now we simply need to get the rest of our custom fields, status, and ID into our table in the proper locations.&nbsp; To do that, we simply follow our table headings, with the appropriate variables inside a standard table structure:
</p>
<p>
</p><div class="codeblock"><code>
<span style="color: #007700">&lt;</span><span style="color: #0000BB">tr</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">td</span><span style="color: #007700">&gt;</span><span style="color: #0000BB">&#123;entry_id&#125;</span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">td</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">td</span><span style="color: #007700">&gt;</span><span style="color: #0000BB">&#123;status&#125;</span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">td</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">td</span><span style="color: #007700">&gt;</span><span style="color: #0000BB">&#123;bug_tracker_version&#125;</span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">td</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">td</span><span style="color: #007700">&gt;</span><span style="color: #0000BB">&#123;bug_tracker_details&#125;</span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">td</span><span style="color: #007700">&gt;<br />&lt;/</span><span style="color: #0000BB">tr</span><span style="color: #007700">&gt;</span>
</code></div><p>
</p>
<p>
Lastly, we want to close off our table, but we want to ensure that only happens after the last entry.&nbsp; To do this, we&#8217;ll compare count with <a href="http://expressionengine.com/docs/modules/weblog/variables.html#var_total_results">{total_results}</a> so that only if they&#8217;re equal, we output that final code:
</p>
<p>
</p><div class="codeblock"><code>
<span style="color: #0000BB">&#123;if count </span><span style="color: #007700">== </span><span style="color: #0000BB">total_results&#125;<br /></span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">table</span><span style="color: #007700">&gt;<br /></span><span style="color: #0000BB">&#123;</span><span style="color: #007700">/</span><span style="color: #0000BB">if&#125;</span>
</code></div><p>
</p>
<p>
This code between our weblog entries tags ends up with a result like that should look similar to this:
</p>
<p>
<img src="http://expressionengine.com/files/blog/bug_tracker_bug_list_layout.jpg" alt="Bug Tracker Bug List Layout" width="437" height="252" />
</p>
<p>
And the full code, now, for our bug_tracker/index template is like so:
</p>
<p>
</p><div class="codeblock"><code>
<span style="color: #0000BB">&#123;html_begin&#125;<br /><br />&#123;embed</span><span style="color: #007700">=</span><span style="color: #DD0000">"inc/.head" </span><span style="color: #0000BB">title</span><span style="color: #007700">=</span><span style="color: #DD0000">"Bug Tracker"</span><span style="color: #0000BB">&#125;<br /><br /></span><span style="color: #007700">&lt;</span><span style="color: #0000BB">body</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">div id</span><span style="color: #007700">=</span><span style="color: #DD0000">"container"</span><span style="color: #007700">&gt;<br /></span><span style="color: #0000BB">&#123;embed</span><span style="color: #007700">=</span><span style="color: #DD0000">"inc/.banner"</span><span style="color: #0000BB">&#125;<br />&#123;embed</span><span style="color: #007700">=</span><span style="color: #DD0000">"inc/.leftnav"</span><span style="color: #0000BB">&#125;<br /></span><span style="color: #007700">&lt;</span><span style="color: #0000BB">div id</span><span style="color: #007700">=</span><span style="color: #DD0000">"content"</span><span style="color: #007700">&gt;<br /><br /></span><span style="color: #0000BB">&#123;</span><span style="color: #007700">!-- List </span><span style="color: #0000BB">of all reported bugs </span><span style="color: #007700">--</span><span style="color: #0000BB">&#125;<br /><br />&#123;exp</span><span style="color: #007700">:</span><span style="color: #0000BB">weblog</span><span style="color: #007700">:</span><span style="color: #0000BB">entries weblog</span><span style="color: #007700">=</span><span style="color: #DD0000">"&#123;bug_tracker_weblog&#125;" </span><span style="color: #0000BB">limit</span><span style="color: #007700">=</span><span style="color: #DD0000">"30" </span><span style="color: #0000BB">status</span><span style="color: #007700">=</span><span style="color: #DD0000">"Open|New|Confirmed|Unconfirmed|External|Resolved"</span><span style="color: #0000BB">&#125;<br />&#123;if count </span><span style="color: #007700">== </span><span style="color: #DD0000">"1"</span><span style="color: #0000BB">&#125;<br /></span><span style="color: #007700">&lt;</span><span style="color: #0000BB">table</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">tr</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">th</span><span style="color: #007700">&gt;</span><span style="color: #0000BB">ID</span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">th</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">th</span><span style="color: #007700">&gt;</span><span style="color: #0000BB">Status</span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">th</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">th</span><span style="color: #007700">&gt;</span><span style="color: #0000BB">Version</span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">th</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">th</span><span style="color: #007700">&gt;</span><span style="color: #0000BB">Description</span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">th</span><span style="color: #007700">&gt;<br />&lt;/</span><span style="color: #0000BB">tr</span><span style="color: #007700">&gt;<br /></span><span style="color: #0000BB">&#123;</span><span style="color: #007700">/</span><span style="color: #0000BB">if&#125;<br /></span><span style="color: #007700">&lt;</span><span style="color: #0000BB">tr</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">td</span><span style="color: #007700">&gt;</span><span style="color: #0000BB">&#123;entry_id&#125;</span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">td</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">td</span><span style="color: #007700">&gt;</span><span style="color: #0000BB">&#123;status&#125;</span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">td</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">td</span><span style="color: #007700">&gt;</span><span style="color: #0000BB">&#123;bug_tracker_version&#125;</span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">td</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">td</span><span style="color: #007700">&gt;</span><span style="color: #0000BB">&#123;bug_tracker_details&#125;</span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">td</span><span style="color: #007700">&gt;<br />&lt;/</span><span style="color: #0000BB">tr</span><span style="color: #007700">&gt;<br /></span><span style="color: #0000BB">&#123;if count </span><span style="color: #007700">== </span><span style="color: #0000BB">total_results&#125;<br /></span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">table</span><span style="color: #007700">&gt;<br /></span><span style="color: #0000BB">&#123;</span><span style="color: #007700">/</span><span style="color: #0000BB">if&#125;<br />&#123;</span><span style="color: #007700">/</span><span style="color: #0000BB">exp</span><span style="color: #007700">:</span><span style="color: #0000BB">weblog</span><span style="color: #007700">:</span><span style="color: #0000BB">entries&#125;<br /><br />&#123;</span><span style="color: #007700">!-- </span><span style="color: #0000BB">End Bug </span><span style="color: #007700">List --</span><span style="color: #0000BB">&#125;<br /></span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">div</span><span style="color: #007700">&gt;<br /></span><span style="color: #0000BB">&#123;embed</span><span style="color: #007700">=</span><span style="color: #DD0000">"inc/.footer"</span><span style="color: #0000BB">&#125;<br /></span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">div</span><span style="color: #007700">&gt;<br /><br /></span><span style="color: #0000BB">&#123;html_end&#125;</span>
</code></div><p>
</p>
<p>
You&#8217;ll most certainly want to style your table down the line, as well.&nbsp; But for now this gives us a working, informative, tabular list to output our bug reports, and we can now move on to sorting and filtering this information in a way that will be useful to both bug reporters and developers.
</p>]]></description>
		<guid isPermaLink="false">http://expressionengine.com/blog/entry/building_a_bug_tracker_bug_list_layout/#When:03:54:00Z</guid>
		<pubDate>Fri, 18 Apr 2008 03:54:00 GMT</pubDate>
	</item>

	<item>
		<title>Gearlive Publishes EE Sneak Preview Video</title>
		<link>http://expressionengine.com/blog/entry/gearlive_publishes_ee_sneak_preview_video/</link>
		<dc:creator>Leslie Camacho</dc:creator>
		<category>The Insider</category>
		<comments>http://expressionengine.com/blog/entry/gearlive_publishes_ee_sneak_preview_video/</comments>		<description><![CDATA[<p>A <a href="http://expressionengine.com/blog/entry/beer_debt_sxsw_2008_wrap_up/">couple days ago</a> I mentioned that Andru had recorded the EE 2.0 Sneak Preview. Good news, the <a href="http://video.gearlive.com/video/article/q208-bleeding-edge-tv-expressionengine-20-sneak-preview/">video is now live</a> at, um, GearLive. Check it out (and thanks Andru)! 
</p>
<p>
<a href="http://video.gearlive.com/video/article/q208-bleeding-edge-tv-expressionengine-20-sneak-preview/"><img src="http://expressionengine.com/files/blog/gearlivecap.jpg" alt="EE 2.0 Sneak Preview Video" width="450" height="338" /></a>
</p>]]></description>
		<guid isPermaLink="false">http://expressionengine.com/blog/entry/gearlive_publishes_ee_sneak_preview_video/#When:19:47:00Z</guid>
		<pubDate>Wed, 16 Apr 2008 19:47:00 GMT</pubDate>
	</item>

	<item>
		<title>Landing That First Client</title>
		<link>http://expressionengine.com/blog/entry/landing_that_first_client/</link>
		<dc:creator>Kurt Deutscher</dc:creator>
		<category>The Insider</category>
		<comments>http://expressionengine.com/blog/entry/landing_that_first_client/</comments>		<description><![CDATA[<p>This is a short story about landing my first paying client a few years ago when I was starting my web firm.
</p>
<p>
I launched the site for my new web business on April 2. It was ready for launch the day before, but I just couldn&#8217;t bring myself to launch on April 1 due to that day&#8217;s association with foolish endeavors. For the next few months, I continued to play music gigs and do construction work part-time, while I refined my skills as a web site builder and continued to market my web services.
</p>
<p>
Nearly every week, I attended some sort of consultants&#8217; group meeting or met for coffee with some established web-services provider in my area. I was networking with people as much as I could stand, but it hadn&#8217;t paid off for me yet. My new business was nearly six months old and I didn&#8217;t have a single paying client signed up for services. 
</p>
<p>
One of the tech meetings I attended was with a group of volunteers planning an event near my home called Penguin Day. The intent was to bring geeks, consultants, nonprofit staff and open source software developers together for a day of learning and conversation. This was the next-to-last meeting of the volunteer planning committee before the event. 
</p>
<p>
One of the volunteers was reading through a checklist of everything the committee had accomplished, and what it hadn&#8217;t. Of the remaining goals needing completion, two included the creation of a website and an online registration system. 
</p>
<p>
It was about two weeks before the event, so the committee was about to give up on the site and the registration system when I spoke up. I said &#8220;I can have the site and the registration system online and ready for you by noon tomorrow, if you can give me the information you want on the site and a list of fields you need to capture in the reg. form.&#8221; The committee of tech-savvy volunteers giggled nervously and looked down into their notes in an attempt to be polite about my outlandish claims.
</p>
<p>
Four hours after the meeting ended, I emailed the lead volunteer on the committee a temporary URL for an EE CMS site that was all set up and awaiting his content. I also sent him a link to the reg form. He was a little surprised at how fast I accomplished this. I had built the site in EE and the registration form in PHPList. At the time, EE was pretty new to me and building a fully functional site in four hours was a personal challenge; I just wanted to see if I could do it.
</p>
<p>
By the next evening, the new site was live and we had the registration form working and connecting people to PayPal to make payment. I was able to add my firm to the list of sponsors for providing the website, hosting and the online registration.
</p>
<p>
In the two weeks prior to the event, the website received plenty of updates and the online registration system processed about half of the 100 or so participants. The site worked! There were some on the volunteer committee who grumbled about the site being built on EE because EE was a licensed product (not free open source), but no one complained about how well everything worked.
</p>
<p>
The night before Penguin Day, I told my wife I was going to snag my first client at the event. I didn&#8217;t know what organization it would be, but I was determined to find a client there. The next morning, while getting ready to leave the house, I kept telling myself I would come home with a new client&#8217;s contact information. On the drive, I imagined striking up conversations with people looking for a web site developer/designer.
</p>
<p>
Had you seen me that day, you would have thought I was running for office. I wore a nicely pressed shirt, a full-color homemade nametag with my new firm&#8217;s logo on it and I had a pocket full of my business cards. I purposefully introduced myself to everyone in the room and tried to hand them my business card and talk to them about what it was my web firm did. I talked about my firm as if it was well established and a recognized name, even though none of these folks had ever heard of it before.
</p>
<p>
At lunch, I asked if I could join a table where people from three different nonprofits were sitting. Halfway through lunch I moved to another table. By the end of the day I had handed out about 50 of my business cards and had collected about 20 from other individuals. I told everyone who would listen what it was my web firm did and that it was currently accepting new clients.
</p>
<p>
Even though people had never heard of my firm, or me, being a sponsor of the event meant my logo was printed on the handouts and I was given a couple of minutes to introduce myself and my firm to a captive audience.
</p>
<p>
The evening after the event, I sent personal thank-you emails to everyone I had an email address for. I thanked them for attending the event and asked them for any feedback I could pass along to the volunteer committee for planning the next year&#8217;s event.
</p>
<p>
Within two weeks, I had my first two clients signed up for website services, and I had met both of them at Penguin Day. The best part of this story is that, all these years later, those first two clients are still with the firm. 
</p>
<p>
When I started in this business, I didn&#8217;t have a network of established contacts that could refer services to me. So I had to start from scratch, surfing the Internet for local meet-ups and tech-related trainings that I could crash as a way of getting out in front of potential clients. It was not the easiest way to get started, but it worked.
</p>
<p>
Presenting at technology meet-ups (like Penguin Day) continue to be a good investment of my time. I volunteered to present at another event about a year ago on the topic of how nonprofits were utilizing the new web technologies, and I ended up with five new clients from an audience of about 40 people. That has to be my most successful presentation to date. 
</p>
<p>
How did you get started? How did you meet your first paying client? Did he come to you by referral, did you meet her at an event, or did that person just find you online? Please <a href="http://expressionengine.com/forums/viewthread/76907/">share your story</a> with us.
<br />

</p>]]></description>
		<guid isPermaLink="false">http://expressionengine.com/blog/entry/landing_that_first_client/#When:21:51:00Z</guid>
		<pubDate>Tue, 15 Apr 2008 21:51:00 GMT</pubDate>
	</item>

	<item>
		<title>Beer Debt, SXSW 2008 Wrap up</title>
		<link>http://expressionengine.com/blog/entry/beer_debt_sxsw_2008_wrap_up/</link>
		<dc:creator>Leslie Camacho</dc:creator>
		<category>The Insider</category>
		<comments>http://expressionengine.com/blog/entry/beer_debt_sxsw_2008_wrap_up/</comments>		<description><![CDATA[<p>SXSW 2008 happened over a month ago and yet its just this afternoon that I&#8217;ve managed to clear a little bit of time to post some closing thoughts about it. To say that March and April have been busy would be a tremendous understatement but still, this post is long overdue. 
</p>
<p>
First, we have a beer debt to clear! <a href="http://expressionengine.com/forums/member/37819/">Steve</a> <a href="http://www.hambodesign.com.au/">Hambo</a> had a case of <a href="http://www.boags.com.au/Files/00689-James-Boags-Premium.asp">James Boag&#8217;s Premium Lager</a> delivered to our hotel for SXSW. After several grueling days at SXSW we were exhausted and Steve&#8217;s gift came in quite handy. 
</p>
<p>
<img src="http://expressionengine.com/files/blog/steves_brew_post.jpg" alt="The team enjoys Steve's fine gift" width="450" height="225" />
</p>
<p>
Our SXSW 2008 experience can be summed up in two words, wonderfully exhausting. In 2007 we felt we stayed too long and in 2008 we didn&#8217;t stay long enough. We arrived, we worked, we talked, we had Steve&#8217;s beer, we left. Next year I plan to stay a day or two longer just to meet people and hang out without the pressure of a schedule looming over my head. I think most of the team felt constantly rushed with the exception of a few hours Sunday afternoon. 
</p>
<p>
We arrived late Friday afternoon and stayed up until 2am finishing the presentation. Saturday we were up by 7am and off to the convention center where we presented three times and concluded with a Q&amp;A. That was the exhausting part. 
</p>
<p>
The wonderful part was getting to throw a great party for the community! For three hours we got to take off our work hats and just share a beer or three with the community. It was a stellar experience and worth all the effort it took to pull it off. That was followed up by a relaxing time at the Solspace Nightcap. You can find a number of photos in the <a href="http://flickr.com/groups/ellislabsxsw2008/pool/">EllisLab SXSW 2008 Flickr Pool</a>. 
</p>
<p>
As promised we <a href="http://expressionengine.com/ee2_sneak_preview/">released the information on EE 2.0 to the public</a> though if you&#8217;re reading this chances are you&#8217;ve already seen it. Andru from <a href="http://gearlive.com">GearLive</a> did record the Q&amp;A session but had a very legit delay in getting it out. You may want to send him a friendly nudge to get it released. By the way, Andru it was great to finally meet you in person! That goes for everyone I was able to shake hands with and spend some time with. 
</p>
<p>
At this point most of you are likely wondering &#8220;this is all very nice, but where&#8217;s the latest 2.0 news?&#8221; For the time being we&#8217;re laying low with EE 2.0 news. There are several important items the dev team wants to finish before releasing new information. Right now we&#8217;re being highly productive and don&#8217;t want to interrupt that until we&#8217;re ready for a break. This means we&#8217;ll all have to be patient as we want to tell you what we&#8217;re working on as much as you want to hear it.&nbsp;
</p>]]></description>
		<guid isPermaLink="false">http://expressionengine.com/blog/entry/beer_debt_sxsw_2008_wrap_up/#When:20:04:00Z</guid>
		<pubDate>Mon, 14 Apr 2008 20:04:00 GMT</pubDate>
	</item>

	<item>
		<title>Ingmar Greil Joins EllisLab as Technical Support Specialist</title>
		<link>http://expressionengine.com/blog/entry/ingmar_greil_joins_ellislab_as_technical_support_specialist/</link>
		<dc:creator>Leslie Camacho</dc:creator>
		<category>News</category>
		<comments>http://expressionengine.com/blog/entry/ingmar_greil_joins_ellislab_as_technical_support_specialist/</comments>		<description><![CDATA[<p>We are please to welcome Ingmar to the EllisLab team as a Tech Support Specialist. Ingmar joined the ExpressionEngine community back in 2004 and started contributing right away. With 7000+ posts on the ExpressionEngine forums there is a good chance that Ingmar has already helped you. Ingmar is an accomplished web developer knowledgeable in HTML, php, and of course ExpressionEngine; he also lives in Austria giving him the the distinction of being the first European to join EllisLab. 
</p>
<p>
<a href="http://expressionengine.com/forums/viewthread/76749/">Stop by the forums and join us in giving Ingmar an official welcome</a>.&nbsp;
</p>]]></description>
		<guid isPermaLink="false">http://expressionengine.com/blog/entry/ingmar_greil_joins_ellislab_as_technical_support_specialist/#When:16:34:00Z</guid>
		<pubDate>Mon, 14 Apr 2008 16:34:00 GMT</pubDate>
	</item>

	<item>
		<title>ABA Journal, MyTerritory, Truthdig Nominated for Webby Awards</title>
		<link>http://expressionengine.com/blog/entry/aba_journal_myterritory_nominated_for_webby_awards/</link>
		<dc:creator>Leslie Camacho</dc:creator>
		<category>The Insider</category>
		<comments>http://expressionengine.com/blog/entry/aba_journal_myterritory_nominated_for_webby_awards/</comments>		<description><![CDATA[<p>Congratulations to all sites on getting nominated. Don&#8217;t be shy, support these ExpressionEngine powered sites with your vote. 
</p>
<p>
<a href="http://www.abajournal.com/"> <img src="http://expressionengine.com/files/blog/abajournal.jpg" alt="ABA Journal, up for a Webby, powered by ExpressionEngine" width="450" height="338" /></a>
</p>
<p>
<a href="http://pv.webbyawards.com/nominee/entry/128829005">Vote for the ABA Journal</a>. 
</p>
<p>
<a href="http://myterritory.com/"><img src="http://expressionengine.com/files/blog/myterritory.jpg" alt="MyTerritory up for a Webby, powered by ExpressionEngine" width="450" height="338" /></a>
</p>
<p>
<a href="http://pv.webbyawards.com/nominee/entry/368924795">Vote for MyTerritory</a>.
</p>
<p>
<a href="http://truthdig.com/"><img src="http://expressionengine.com/files/blog/truthdig.jpg" alt="Truthdig up for a Webby, powered by ExpressionEngine" width="450" height="338" /></a>
</p>
<p>
<a href="http://pv.webbyawards.com/nominee/entry/679492987">Vote for Truthdig</a>.
</p>
<p>
Hat tip to <a href="http://solspace.com">Mitchell</a> and <a href="http://hopstudios.com">Travis</a> for the heads up.&nbsp;
</p>]]></description>
		<guid isPermaLink="false">http://expressionengine.com/blog/entry/aba_journal_myterritory_nominated_for_webby_awards/#When:21:09:00Z</guid>
		<pubDate>Thu, 10 Apr 2008 21:09:00 GMT</pubDate>
	</item>

	<item>
		<title>Counter Programming &#45; Being First in the Market</title>
		<link>http://expressionengine.com/blog/entry/counter_programming_being_first_in_the_market/</link>
		<dc:creator>Kurt Deutscher</dc:creator>
		<category>The Insider</category>
		<comments>http://expressionengine.com/blog/entry/counter_programming_being_first_in_the_market/</comments>		<description><![CDATA[<p>I was reading Rick&#8217;s post titled, <a href="http://ellislab.com/blog/comments/be_number_one/">&#8220;Be Number One,&#8221;</a> and he touched on something in that post upon which I want to elaborate.
</p>
<p>
<em>&#8220;If you can’t be number one in your market, redefine your market.&#8221;</em>
</p>
<p>
I spent a few years involved in Public Radio. I was a volunteer disc jockey and producer for a jazz radio station. I produced a weekly four-hour program that was one of two specialty shows on the station. Most of the week the station played jazz recordings, but on Sunday evenings my show featured music that was categorized as &#8220;New-Age.&#8221; It was not, by most listeners’ opinions, jazz. Many people hated the show and thought it had no place on a jazz station. 
</p>
<p>
At the time, I was earning a living as a jazz drummer. I played music and/or taught private music lessons several nights a week and was going to college during the day. Sunday evening was just about the only time slot in my schedule I had available to volunteer at the radio station. 
</p>
<p>
Even though the station needed a producer for the Sunday night program, the station managers hadn&#8217;t asked me if I would like to take over the time slot because they didn&#8217;t think I would be interested in programming a New-Age music show. I was a jazz drummer after all, and this was a New-Age program; surely a working jazz drummer wouldn&#8217;t be caught dead playing New-Age recordings in public. I surprised quite a few folks when I agreed to take over the show.
</p>
<p>
The first thing I did was study the market to see what else was on the air on Sunday evenings. Turned out this was the only show of its kind on the air in our town of about 40 radio stations. It was one of the few locally produced specialty shows where most of the music was on CD instead of vinyl (tells you how long ago this was), so the quality of the recordings was pretty high. It was also broadcast from 7:00 pm to 11:00 pm, which is a good chunk of the evening for most folks.
</p>
<p>
The first few months on the air, I took notes of all the calls I was getting from listeners. Some of them yelled at me and even threatened me; others loved the music I was selecting. After a while, I noticed some patterns in the callers and their comments, and I started to experiment with the flow of the music to see if I could get more positive calls and fewer highly enraged &#8220;jazz-experts&#8221; calling to ridicule me. 
</p>
<p>
After about six months on the air, I saw my first ratings book, which was a poll of what kinds of listeners were tuning in to the show, taken by an independent ratings business. I learned that nearly the entire audience was composed of men in their 40s and 50s. There were a couple of thousand listeners, according to the ratings. I really wanted a bigger and more diverse audience, so I took a close look at my notes from the calls I received, my only other listener feedback and made more changes in the programming.
</p>
<p>
I played tracks with drums in them, mostly up-beat, soft-rockish tunes for the first hour, then slowed things down with tracks that featured just two or three instruments at a time—solo guitar, piano, and harp. About 10:00 pm I would play a half hour of electronic instruments, and finally, in the last half-hour, started slipping in some jazz ballads to ease folks back into the standard jazz programming.
</p>
<p>
When the next ratings book came out a few months later, the station manager called me into his office. I thought I was getting canned. He held out the ratings book so I could see my time slot in relation to the whole market on Sunday nights. In six months, the show went from less than a 1 percent audience share to 19 percent of the whole market between 7:30 pm and 11:00 pm.
</p>
<p>
This was a show that played music most folks had never heard before, during a less than desirable time slot and on a college station with an unreliable broadcast signal. The show was pulling a big share of the women in the market at that time slot and a much broader range of men than any other single offering. Little college radio stations don&#8217;t get this kind of market share around here. It just doesn&#8217;t happen. 
</p>
<p>
Within a month of that ratings book coming out, three commercial stations in the market launched new locally produced programs to compete directly with my show. They played some of the same artists I featured and tried to copy my format. Over time, the new shows grabbed half my audience away, leaving me with just 9 percent of the Sunday evening market.
</p>
<p>
In that first year my show went from 1 percent of the audience share to a solid 9 percent and inspired new listening opportunities for another 10 percent of the Sunday evening market. My show held on to its new audience for at least the next four years that I continued to produce the show. It was the first regularly scheduled, locally produced radio program of New-Age music in the market, and the music we played was not only different from any other music on our station at the time, but it was also different than anything you could find on your radio dial in our market. 
</p>
<p>
It was being first in the market, and very much counter programming, that fueled much of the program&#8217;s success. I would like to think that having a musician programming the music had something to do with the show&#8217;s success too.
</p>
<p>
Fast foreword a decade to when I was laying the groundwork for my web services business, and that experience in counter programming and being first to do something in the local radio market played a big role in my decision to choose nonprofits as a target audience for my web business. 
</p>
<p>
When I started looking into who was serving the nonprofits in my area, there were only six web firms locally and four nationally that had an established presence. I live in a state in the U.S. with over 11,000 registered nonprofit organizations, so I figured there&#8217;s no way this small number of firms could keep up with demand for CMS-based websites. There were so few web providers focused on nonprofits that I took the principals of each firm out for coffee to meet them and to find out if any of them had a compelling reason I shouldn&#8217;t go after the nonprofit/education market in our area. None of them did.
</p>
<p>
Within five years, my web firm became one of the largest providers of web services for nonprofits in the local market. We weren&#8217;t the first ones on the scene, but we were the first firm building all our sites in a CMS called ExpressionEngine. We also were the first to offer a two-year comprehensive website subscription-based service plan instead of either an hourly project-based service or the ever popular Application Service Provider model. 
</p>
<p>
Not only were we among the first to serve a segmented client base that almost no one was going after, but we were also the first to offer EE-based CMS style websites and a comprehensive service plan as a package deal. 
</p>
<p>
If your web business is in its infancy, or you feel like your competition is grabbing all the &#8220;good&#8221; clients, then I recommend you sit down with your favorite search engine to start looking for underserved market segments in your area. 
</p>
<p>
Is there a firm specializing in CMS intranets for small business? Is there a web firm in our town serving all the private schools, the local artists, the farmers, the used-car dealers, the home remodeling companies? How about the CPAs, the lawyers and other professionals? Who&#8217;s underserved in your market and who is going to need your services six months from now or a year from now when they are ready to make the leap from static websites to dynamic? Are you placing yourself out in front of them so they can find you?
</p>
<p>
Need some inspiration? Head on over to our <a href="http://expressionengine.com/professionals/">Professionals Network</a> and read through the profiles. Note how many EE Pro Net users are focused on creating websites for a specific market or a small group of markets. Note how many of them were early adopters of EE and among the first to introduce a whole new market segment to EE. These folks know the benefits of being first and carefully choosing one’s market, and stand to benefit from that careful positioning.
</p>
<p>
Sure, you&#8217;ll still want to <a href="http://expressionengine.com/blog/entry/customer_success_knowing_your_ideal_client">pick your clients</a>, but being first in your market can play a huge role in your success.
<br />

</p>]]></description>
		<guid isPermaLink="false">http://expressionengine.com/blog/entry/counter_programming_being_first_in_the_market/#When:23:30:00Z</guid>
		<pubDate>Wed, 09 Apr 2008 23:30:00 GMT</pubDate>
	</item>

	
	</channel>
</rss>