<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="/stylesheets/rss.css"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>Kellogg Associates</title>
    <link>http://kellogg-assoc.com/articles</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description></description>
    <item>
      <title>Above the Bay Area</title>
      <description>&lt;p&gt;Recently, my good friend and local traffic reporting luminary, Stan Burford, got me up in the &lt;span class="caps"&gt;KGO&lt;/span&gt; Radio Traffic helicopter on a beautiful day where I could put my Nikon &lt;span class="caps"&gt;D200&lt;/span&gt; through it&amp;#8217;s paces. I think you&amp;#8217;ll enjoy the results. We&amp;#8217;re blessed here in the Bay Area with some of the most beautiful scenery in the country.&lt;/p&gt;


	&lt;p&gt;Picture can be found through the &lt;a href="http://kellogg-assoc.com/pages/photography"&gt;photography page&lt;/a&gt; on my site, or directly &lt;a href="http://kellogg-assoc.com/galleries/Above%20the%20Bay%20Area/index.html"&gt;here&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;The ships you see are known as the &lt;i&gt;Mothball Fleet&lt;/i&gt;. They include the Glomar Explorer, famous for attempting the recovery of a Soviet Submarine during the Cold War, and the &lt;span class="caps"&gt;USS&lt;/span&gt; Iowa battleship.&lt;/p&gt;


Other notable highlights were
	&lt;ul&gt;
	&lt;li&gt;an orbit around my house in San Rafael,&lt;/li&gt;
		&lt;li&gt;two passes by the Golden Gate Bridge,&lt;/li&gt;
		&lt;li&gt;the Palace of Fine Arts,&lt;/li&gt;
		&lt;li&gt;Fisherman&amp;#8217;s Wharf,&lt;/li&gt;
		&lt;li&gt;Coit Tower,&lt;/li&gt;
		&lt;li&gt;San Francisco Skyline, &lt;/li&gt;
		&lt;li&gt;AT&amp;#38;T Park,&lt;/li&gt;
		&lt;li&gt;the Bay Bridge,&lt;/li&gt;
		&lt;li&gt;a shot of the &lt;span class="caps"&gt;KGO TV&lt;/span&gt; helicopter, and&lt;/li&gt;
		&lt;li&gt;McAfee park, home of the Oakland A&amp;#8217;s, who you can see warming up on the field.&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;Thanks to Gary and Terry (reporter and pilot) for making this a most memorable experience!&lt;/p&gt;


	&lt;p&gt;Gregg&lt;/p&gt;</description>
      <pubDate>Thu, 15 May 2008 09:48:00 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:1f20b3ff-fc54-4f58-a07f-7b827e04825a</guid>
      <author>gregg@kellogg-assoc.com (Gregg Kellogg)</author>
      <link>http://kellogg-assoc.com/articles/2008/05/15/above-the-bay-area</link>
      <category>Photography</category>
      <trackback:ping>http://kellogg-assoc.com/articles/trackback/48</trackback:ping>
    </item>
    <item>
      <title>Italy &amp;amp; France 2007</title>
      <description>&lt;p&gt;Here are some pictures from our trip to 
&lt;a href="http://kellogg-assoc.com/galleries/Italy-France%202007/index.html"&gt;Lake Como and Provence&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;Enjoy,&lt;/p&gt;


	&lt;p&gt;Gregg &amp;#38; Rebecca&lt;/p&gt;</description>
      <pubDate>Sat, 13 Oct 2007 11:36:00 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:737233d2-597e-431d-9cd4-d2441b5fd8c9</guid>
      <author>gregg@kellogg-assoc.com (Gregg Kellogg)</author>
      <link>http://kellogg-assoc.com/articles/2007/10/13/italy-france-2007</link>
      <category>Photography</category>
      <trackback:ping>http://kellogg-assoc.com/articles/trackback/35</trackback:ping>
    </item>
    <item>
      <title>Channel Islands July 2007</title>
      <description>&lt;p&gt;Here are some pictures from my recent trip to the 
&lt;a href="http://kellogg-assoc.com/galleries/Channel%20Islands%202007-07/index.html"&gt;Channel Islands&lt;/a&gt; including San Clemente, Catalina and Santa Cruz Islands.&lt;/p&gt;


	&lt;p&gt;Enjoy,&lt;/p&gt;


	&lt;p&gt;Gregg&lt;/p&gt;</description>
      <pubDate>Wed, 18 Jul 2007 16:59:00 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:46a41799-763b-4d65-a1f7-730a8fb6f124</guid>
      <author>gregg@kellogg-assoc.com (Gregg Kellogg)</author>
      <link>http://kellogg-assoc.com/articles/2007/07/18/channel-islands-july-2007</link>
      <category>Diving</category>
      <category>Photography</category>
      <trackback:ping>http://kellogg-assoc.com/articles/trackback/34</trackback:ping>
    </item>
    <item>
      <title>Channel Islands May 2007</title>
      <description>&lt;p&gt;Here are some pictures from my recent trip to the 
&lt;a href="http://kellogg-assoc.com/galleries/Channel%20Islands%202007-05/index.html"&gt;Channel Islands, including two days at San Miguel Island&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;Enjoy,&lt;/p&gt;


	&lt;p&gt;Gregg&lt;/p&gt;</description>
      <pubDate>Sat, 02 Jun 2007 17:44:00 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:6a8312b2-40d5-4384-942d-c8cd5b829f4d</guid>
      <author>gregg@kellogg-assoc.com (Gregg Kellogg)</author>
      <link>http://kellogg-assoc.com/articles/2007/06/02/channel-islands-pics</link>
      <category>Diving</category>
      <category>Photography</category>
      <category>diving</category>
      <category>Underwater</category>
      <category>Photography</category>
      <trackback:ping>http://kellogg-assoc.com/articles/trackback/32</trackback:ping>
    </item>
    <item>
      <title>ActiveWarehouse</title>
      <description>&lt;p&gt;Related to the interesting talk at a recent NBRug meeting on Ruport, I&amp;#8217;ve been looking at doing data warehousing in Ruby. Fortunately, &lt;a href="http://anthonyeden.com/"&gt;Anthony Eden&lt;/a&gt; has beaten me to the punch with &lt;a href="http://activewarehouse.rubyforge.org/"&gt;ActiveWarehouse&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;For those unfamiliar with Data Warehousing, the concepts are basically to create a series of &lt;em&gt;facts&lt;/em&gt; that are indexed buy multiple &lt;em&gt;dimensions&lt;/em&gt;. A &lt;em&gt;fact&lt;/em&gt; is typically an integer (eg, sales amount) with data relating to the fact expressed in &lt;em&gt;dimensions&lt;/em&gt;. (Note that in some cases, you can have a &lt;em&gt;Factless Fact&lt;/em&gt; table where the information is entirely in the dimensions). &lt;em&gt;Dimensions&lt;/em&gt; provide different types of data relating to the fact (e.g., date &amp;#38; time of entry, user, product, location, etc.), so a &lt;em&gt;fact&lt;/em&gt; table has a column for each &amp;#8217;&amp;#8217;dimension&amp;#8217;&amp;#8217; with a column for the fact scalar value itself.&lt;/p&gt;


	&lt;p&gt;The &amp;#8217;&amp;#8217;dimension&amp;#8217;&amp;#8217; tables contain an id index column, a column for the fact value (e.g., timestamp for date &amp;#38; time) and columns for each &amp;#8217;&amp;#8217;summary&amp;#8217;&amp;#8217; to be associated with the &lt;em&gt;dimension&lt;/em&gt; (e.g., day of week, day of month, month, year, hour minute, ...).&lt;/p&gt;


	&lt;p&gt;At this point, queries can be performed by joining the dimension and fact tables and summarizing (or counting) the scalar fact value against conditions against the dimension tables (e.g., sales per year by person and region).&lt;/p&gt;


	&lt;p&gt;Typically, this data is pre-summarized in &amp;#8217;&amp;#8217;cubes&amp;#8217;&amp;#8217; with summary tables that contain the results of these summary queries.&lt;/p&gt;


	&lt;p&gt;The &lt;strong&gt;ActiveWarehouse&lt;/strong&gt; plugin contains everything necessary to define, populate and report on this data.&lt;/p&gt;


	&lt;p&gt;I expect to be using this to hold information on user listening habits for &lt;span class="caps"&gt;MP3&lt;/span&gt; files.&lt;/p&gt;


	&lt;p&gt;Gregg Kellogg&lt;/p&gt;</description>
      <pubDate>Sat, 19 May 2007 18:10:00 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:99f73d7d-2b08-4153-80c7-1fdf0dcf8630</guid>
      <author>gregg@kellogg-assoc.com (Gregg Kellogg)</author>
      <link>http://kellogg-assoc.com/articles/2007/05/19/activewarehouse</link>
      <category>Ruby on Rails</category>
      <trackback:ping>http://kellogg-assoc.com/articles/trackback/31</trackback:ping>
    </item>
    <item>
      <title>Bonaire May 2007</title>
      <description>&lt;p&gt;Pictures from dive trip to &lt;a href="http://kellogg-assoc.com/galleries/Bonaire%202007-05/index.html"&gt;Bonaire in May 2007&lt;/a&gt;.&lt;/p&gt;</description>
      <pubDate>Thu, 10 May 2007 09:12:00 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:cf1bd4bc-143b-466e-8059-09819f76d2f1</guid>
      <author>gregg@kellogg-assoc.com (Gregg Kellogg)</author>
      <link>http://kellogg-assoc.com/articles/2007/05/10/bonaire-may-2007</link>
      <category>Diving</category>
      <category>Photography</category>
      <trackback:ping>http://kellogg-assoc.com/articles/trackback/30</trackback:ping>
    </item>
    <item>
      <title>RailsConf Sessions</title>
      <description>&lt;p&gt;Here are the &lt;a href="http://myconfplan.com/conferences/RailsConf2007/users/gkellogg"&gt;sessions&lt;/a&gt; Ill be attending at &lt;a href="http://conferences.oreillynet.com/rails/"&gt;RailsConf&lt;/a&gt;. Hope to &lt;a href="http://railsconf2007.conferencemeetup.com/p/356-gregg-kellogg"&gt;see you&lt;/a&gt; there.&lt;/p&gt;


	&lt;p&gt;Gregg&lt;/p&gt;</description>
      <pubDate>Thu, 26 Apr 2007 15:05:00 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:cd2d476d-9fc6-4b09-827b-e033490d08b8</guid>
      <author>gregg@kellogg-assoc.com (Gregg Kellogg)</author>
      <link>http://kellogg-assoc.com/articles/2007/04/26/railsconf-sessions</link>
      <category>Ruby on Rails</category>
      <trackback:ping>http://kellogg-assoc.com/articles/trackback/29</trackback:ping>
    </item>
    <item>
      <title>Observers in Rails 1.2</title>
      <description>Thanks to &lt;a href="http://weblog.techno-weenie.net"&gt;Rick Olson&lt;/a&gt; for providing assistance with the proper syntax for instantiating observers in Rails 1.2. The old way was to add an &lt;em&gt;observer&lt;/em&gt; statement to the appropriate controler, such as:
&lt;pre&gt;&lt;code&gt;observer :user_observer&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;Hidden in the ignored parts of conf/environment.rb was the proper notation:&lt;/p&gt;


&lt;pre&gt;&lt;code&gt;# Activate observers that should always be running
# config.active_record.observers = :cacher, :garbage_collector&lt;/pre&gt;&lt;/code&gt;

	&lt;p&gt;This makes the last of my deprecation messages go away!&lt;/p&gt;


	&lt;p&gt;Gregg&lt;/p&gt;</description>
      <pubDate>Fri, 26 Jan 2007 21:13:00 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:0cfa68fe-1614-43c1-886d-3ce5011ed62d</guid>
      <author>gregg@kellogg-assoc.com (Gregg Kellogg)</author>
      <link>http://kellogg-assoc.com/articles/2007/01/26/observers-in-1-2</link>
      <category>Ruby on Rails</category>
      <trackback:ping>http://kellogg-assoc.com/articles/trackback/20</trackback:ping>
    </item>
    <item>
      <title>Eager Finder SQL</title>
      <description>&lt;p&gt;&lt;em&gt;EagerFinderSql&lt;/em&gt; allows custom &lt;span class="caps"&gt;SQL&lt;/span&gt; to be specified when doing eager loading of associations through the &lt;tt&gt;:include&lt;/tt&gt; option
to &lt;tt&gt;find&lt;/tt&gt;. This allows for purpose-constructed queries to be used and still result in a fully linked
object model.&lt;/p&gt;


	&lt;h3&gt;Background&lt;/h3&gt;


	&lt;p&gt;&lt;strong&gt;ActiveRecord&lt;/strong&gt; constructs &lt;span class="caps"&gt;SQL&lt;/span&gt; to satisfy the requirements of a &lt;tt&gt;find&lt;/tt&gt; request. &lt;em&gt;Associations&lt;/em&gt; allow for customized
&lt;span class="caps"&gt;SQL&lt;/span&gt; to be specified, using the &lt;tt&gt;:finder_sql&lt;/tt&gt; option, but this has not been available when performing eager loading
using the &lt;tt&gt;:include&lt;/tt&gt; option. The result is that a standardized query is constructed to bring in the associated
tables using &lt;tt&gt;&lt;span class="caps"&gt;LEFT OUTER JOIN&lt;/span&gt;&lt;/tt&gt;. For some queries, this can be result in expensive queries and potentially very
large result sets.&lt;/p&gt;


	&lt;h3&gt;Custom &lt;span class="caps"&gt;SQL&lt;/span&gt;&lt;/h3&gt;


	&lt;p&gt;&lt;em&gt;EagerFinderSql&lt;/em&gt; addresses this problem by allowing &lt;tt&gt;:finder_sql&lt;/tt&gt; to be added
to &lt;tt&gt;find&lt;/tt&gt; options when the &lt;tt&gt;:include&lt;/tt&gt; option is also specified.&lt;/p&gt;&lt;p&gt;Columns in the result set are mapped to attributes in the resuting object model through the
&lt;tt&gt;:column_mapping&lt;/tt&gt; option.&lt;/p&gt;


	&lt;p&gt;The &lt;tt&gt;:column_mapping&lt;/tt&gt; option specifies a hash containing the following entries:&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;&lt;tt&gt;primary_key&lt;/tt&gt; &amp;#8211; indicates the column alias associated with the classes &lt;em&gt;id&lt;/em&gt; attribute.&lt;/li&gt;
		&lt;li&gt;&lt;tt&gt;columns&lt;/tt&gt; &amp;#8211; is a hash of attribute to column alias associations.&lt;/li&gt;
		&lt;li&gt;&lt;tt&gt;associatios&lt;/tt&gt; &amp;#8211; is a hash of association mappings for each directly included model. The &lt;em&gt;key&lt;/em&gt; for each entry is the name of the association, while the value is a hash similar to the hash for the parent class.&lt;/li&gt;
	&lt;/ul&gt;


	&lt;h3&gt;Example&lt;/h3&gt;


Consider the following query relating authors with many books:
&lt;pre&gt;&lt;code&gt;
Author.find(:all, :include =&amp;gt; :books)
&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;This would likely produce the following &lt;span class="caps"&gt;SQL&lt;/span&gt;:&lt;/p&gt;


&lt;pre&gt;&lt;code&gt;
SELECT
    authors.id AS t0_c0, authors.name AS t0_c1,
    books.id AS t1_c0, books.author_id AS t1_c1, books.title AS t1_c2
  FROM authors
  LEFT OUTER JOIN books ON books.author_id = authors.id
&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;The query might be written with books as the driver, rather than authors as follows:&lt;/p&gt;


&lt;pre&gt;&lt;code&gt;
 SELECT
    authors.id, authors.name,
    books.id AS book_id, books.name AS book_name
  FROM books
  JOIN authors ON authors.id = books.author_id
&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;The Rails query would then be written as follows:&lt;/p&gt;


&lt;pre&gt;&lt;code&gt;
Author.find(:all, :include =&amp;gt; books,
           :finder_sql =&amp;gt; " 
                SELECT
                    authors.id, authors.name,
                    books.id AS book_id, books.name AS book_name
                  FROM books
                  JOIN authors ON authors.id = books.author_id".
           :column_mapping =&amp;gt; {
             :primary_key =&amp;gt; 'id',
             :columns =&amp;gt; {
                  'id'  =&amp;gt; 'id',
                  'name =&amp;gt; 'name'
              },
              :associations =&amp;gt; {
                :books =&amp;gt; {
                  :primary_key =&amp;gt; book_id,
                  :columns =&amp;gt; {
                      'id'        =&amp;gt; 'book_id',
                      'author_id' =&amp;gt; 'id',
                      'name'      =&amp;gt; 'book_name
                  }
                }
              }
            })

&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;This is more verbose, but allows for absolute control of the &lt;span class="caps"&gt;SQL&lt;/span&gt; used to return results across multiple model associations.&lt;/p&gt;


	&lt;p&gt;A more complicated example would be the following:&lt;/p&gt;


&lt;pre&gt;&lt;code&gt;
QUERY = " 
SELECT
    a.id AS author_id,
    a.name AS author_name,
    p.id AS post_id,
    p.title AS post_title,
    p.body AS post_body,
    p.type AS post_type,
    c.id AS comment_id,
    c.body AS comment_body,
    c.type AS comment_type
  FROM authors a
  LEFT JOIN posts p ON p.author_id = a.id
  LEFT JOIN comments c ON c.post_id = p.id" 

MAPPING = {
  :primary_key =&amp;gt; 'author_id',
  :columns =&amp;gt; {
    'id' =&amp;gt; 'author_id',
    'name' =&amp;gt; 'author_name'
  },                         
  :associations=&amp;gt; {
    :posts =&amp;gt; {
      :primary_key  =&amp;gt; 'post_id',
      :columns =&amp;gt; {
        'id' =&amp;gt; 'post_id',
        'title' =&amp;gt; 'post_title',
        'author_id' =&amp;gt; 'author_id',
        'body' =&amp;gt; 'post_pody',
        'type' =&amp;gt; 'post_type'
      },
      :associations =&amp;gt; {
        :comments =&amp;gt; {
          :primary_key  =&amp;gt; 'comment_id',
          :columns =&amp;gt; {
            'id' =&amp;gt; 'comment_id',
            'post_id' =&amp;gt; 'post_id',
            'author_id' =&amp;gt; 'author_id',
            'body' =&amp;gt; 'comment_body',
            'type' =&amp;gt; 'comment_type'
          }
        }
      }
    }
  }
}
Author.find(:all,
            :include=&amp;gt;{:posts=&amp;gt;:comments},
            :order=&amp;gt;"authors.id",
            :finder_sql =&amp;gt; QUERY,
            :column_mapping =&amp;gt; MAPPING)
&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;This example shows the recursive nature of associations. It can also be used to render deeper structures
that may reference the same model multiple times, such as the following:&lt;/p&gt;


&lt;pre&gt;&lt;code&gt;
Firm.find(:all,
          :include=&amp;gt;{:account=&amp;gt;{:firm=&amp;gt;:account}},
          :order=&amp;gt;"companies.id")
&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;(Here, the query and mapping is left to the reader; or, you can look at the unit test which documents
many more possibilities).&lt;/p&gt;


	&lt;p&gt;Install using&lt;/p&gt;


&lt;pre&gt;&lt;code&gt;
script/plugin install svn://rubyforge.org/var/svn/eagerfindersql
&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;The plugin is managed on &lt;a href="http://rubyforge.org/projects/eagerfindersql/"&gt;RubyForge&lt;/a&gt;.
&lt;a href="/rdoc/eager_finder_sql/index.html"&gt;Rdoc&lt;/a&gt; is available.&lt;/p&gt;</description>
      <pubDate>Sun, 05 Nov 2006 19:31:00 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:b92f8540-e3ba-47f4-b3bf-2bfd95bc4e95</guid>
      <author>gregg@kellogg-assoc.com (Gregg Kellogg)</author>
      <link>http://kellogg-assoc.com/articles/2006/11/05/eager-finder-sql</link>
      <category>Ruby on Rails</category>
      <category>rails</category>
      <category>mixin</category>
      <category>ActiveRecord</category>
      <category>query</category>
      <category>eager loading</category>
      <trackback:ping>http://kellogg-assoc.com/articles/trackback/19</trackback:ping>
    </item>
    <item>
      <title>Project Communication</title>
      <description>&lt;p&gt;Many software projects fail to deliver on-time and on-budget and a factor in that is normally inefficient project communication.   Studies have shown that software teams that consistently deliver on-time and on-budget communicate in an effective manner.  These teams stay in contact constantly, but wisely use each other&amp;#8217;s time during the communication process and are careful not to waste other people&amp;#8217;s time.&lt;/p&gt;


	&lt;p&gt;Below are some tips for enhancing project communication when working in software development projects:&lt;/p&gt;&lt;ol&gt;
	&lt;li&gt;Set up an online repository for documentation &amp;#8211; For effective communication, all your project documents should be online, up-to-date, and available at everyone&amp;#8217;s finger tips.  This includes requirement documents, detailed designs, test plans, project plans, status reports, user acceptance plans, post mortem documents, etc.   Having all of these documents at everyone&amp;#8217;s disposal ensures that everyone is working on the same set of deliverables. Many groups usefully solve this problem by setting up a department Wiki that acts as a convenient location for storing and updating important project information such as documentation.&lt;/li&gt;
		&lt;li&gt;Specify Clear Roles and Responsibilities &amp;#8211; For effective communication, everyone on the team should know what their role is and what they are accountable for.  Each role should be documented during the initial phases of the project and every team member should sign off on their responsibilities.  Post these in your online documentation repository.&lt;/li&gt;
		&lt;li&gt;Monitor Employee Performance &amp;#8211; Each employee should have defined goals and should be measured against their goals monthly or quarterly (depending on project duration).  Goals should be specific, measurable and achievable.  Progress to goals should be based on objective measurement. &lt;/li&gt;
		&lt;li&gt;Progress Reports &amp;#8211; Progress reports should be created weekly.  This can be as informal as creating a weekly status report for management review or as formal as creating reports using a project planning tool. Consider using a tool for this, some good ones are Software Planner and Microsoft Project. &lt;/li&gt;
		&lt;li&gt;Make Decisions based on Facts &amp;#8211; All decisions should be objective and should not be self-serving.  Decisions should be based on facts, performance and in the spirit of improving overall team performance. &lt;/li&gt;
		&lt;li&gt;Project Tracking should be done Online &amp;#8211; All phases of the Software Lifecycle should be managed online, preferably via the web.  This includes managing of requirements, tasks, issues, defects, test cases. sharing knowledge with discussion forums and your document repository.&lt;/li&gt;
		&lt;li&gt;Be Careful of People&amp;#8217;s Time &amp;#8211; It is good to have periodic meetings, but the presence of solid project tracking tools eliminates many of the long-winded meetings that teams have.  Team members are most productive when they know their roles, responsibilities and have a way of showing progress online.  This can greatly reduce the number of face-to-face meetings that are needed.&lt;/li&gt;
	&lt;/ol&gt;


	&lt;p&gt;(Thanks to Steve Miller of &lt;a href="http://www.PragmaticSW.com"&gt;Pragmatic Software&lt;/a&gt; for insights into these issues.)&lt;/p&gt;


	&lt;p&gt;Gregg Kellogg&lt;/p&gt;</description>
      <pubDate>Thu, 02 Nov 2006 12:00:00 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:dd7c6bcc-eaa3-4f6a-8909-da8784d3c6e0</guid>
      <author>gregg@kellogg-assoc.com (Gregg Kellogg)</author>
      <link>http://kellogg-assoc.com/articles/2006/11/02/project-communication</link>
      <category>Design</category>
      <category>Scrum</category>
      <trackback:ping>http://kellogg-assoc.com/articles/trackback/8</trackback:ping>
    </item>
  </channel>
</rss>
