<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Voce Communications</title>
	
	<link>http://vocecommunications.com</link>
	<description>Building brand awareness through content creation and community engagement.</description>
	<lastBuildDate>Thu, 22 Jul 2010 16:40:51 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/VoceNation" /><feedburner:info uri="vocenation" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>VoceNation</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item>
		<title>Talking Caching at WordPress Boulder</title>
		<link>http://feedproxy.google.com/~r/VoceNation/~3/4tZ7vKu7lcg/</link>
		<comments>http://vocecommunications.com/blog/2010/07/talking-caching-at-wordpress-boulder/#comments</comments>
		<pubDate>Wed, 21 Jul 2010 16:30:51 +0000</pubDate>
		<dc:creator>Chris Scott</dc:creator>
				<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://vocecommunications.com/?p=3528</guid>
		<description><![CDATA[Sean and I were pleased to have the opportunity to give a talk on WordPress caching at WordCamp Boulder last weekend. I gave an intro to the two types of caching in WordPress along with tips for developers and Sean showed the results of caching through benchmarking a test installation of one of our client&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://vocecommunications.com/about/our-staff/sean-oshaughnessy/">Sean</a> and <a href="http://vocecommunications.com/about-us/our-staff/chris-scott/">I</a> were pleased to have the opportunity to give a talk on WordPress caching at <a href="http://2010.boulder.wordcamp.org/">WordCamp Boulder </a>last weekend. I gave an intro to the two types of caching in WordPress along with tips for developers and Sean showed the results of caching through benchmarking a test installation of one of our client&#8217;s sites we developed which uses caching extensively, the <a href="http://blog.us.playstation.com/">PlayStation Blog</a>. You can <a href="http://wordpress-caching.heroku.com/">view the slides online</a> (use the arrow keys to move between slides) but I&#8217;ll give a brief rundown.</p>
<h2>Caching is Important</h2>
<p>It doesn&#8217;t matter if your site is small or large, gets a little bit of traffic or a bunch of traffic: caching can help. While many WordPress sites with relatively low traffic levels may never receive traffic spikes that bring them to a crawl, they can still benefit from caching with faster page load times and fewer server resources. For moderate or high-traffic sites, caching is a must to keep pages loading quickly, prevent requests from timing out, and keeping server admins happy.</p>
<h2>Caching is Easy</h2>
<p>Using caching in WordPress is as easy as installing a plugin and taking a few minutes to configure it. The most common plugins for output caching are <a href="http://wordpress.org/extend/plugins/wp-super-cache/">WP Super Cache</a> and <a href="http://wordpress.org/extend/plugins/w3-total-cache/">W3 Total Cache</a>. Either of these is a great choice and will cache the output of your pages for fast retrieval. If you aren&#8217;t using one of these, give them a try and see which one you like and keep it active.</p>
<h2>Caching <em>is</em> About Money</h2>
<p>After our talk, the volunteer helping with our venue at <a href="http://www.techstars.org/">Techstars</a> mentioned that someone commented that they thought the talk was going to be about making money with WordPress. Well, you can&#8217;t please everyone&#8230; While caching isn&#8217;t about making money, it is about saving money. Many hosting plans restrict server resources and charge for overages. Caching lets you reduce server resources which may save you money either in the hosting plan you fit in or by avoiding overages. Reduced resource usage also allows hosting companies to maximize the hardware they have and pass this on to you by keeping their hosting plans priced low.</p>
<p>Thanks to Devin, Alex, everyone else at <a href="http://crowdfavorite.com/">Crowd Favorite</a> and the volunteers for putting on really great WordCamp.</p>
<img src="http://feeds.feedburner.com/~r/VoceNation/~4/4tZ7vKu7lcg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://vocecommunications.com/blog/2010/07/talking-caching-at-wordpress-boulder/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://vocecommunications.com/blog/2010/07/talking-caching-at-wordpress-boulder/</feedburner:origLink></item>
		<item>
		<title>Extending WordPress search with Sphinx (Part II)</title>
		<link>http://feedproxy.google.com/~r/VoceNation/~3/h20ZXo5tOwc/</link>
		<comments>http://vocecommunications.com/blog/2010/07/extending-wordpress-search-with-sphinx-part-ii/#comments</comments>
		<pubDate>Tue, 13 Jul 2010 15:00:31 +0000</pubDate>
		<dc:creator>Michael Pretty (prettyboymp)</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Search]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://vocecommunications.com/?p=3412</guid>
		<description><![CDATA[Once theSphinx server is setup, we can begin with WordPress integration.  The first thing we need to do capture the override the query_vars in WP_Query before it runs it&#8217;s own search.  We&#8217;ll do this by running an action on &#8216;parse_query&#8217; with the code below.
function my_parse_query&#40;&#38;$wp_query&#41; &#123;
&#160; if&#40;$wp_query-&#62;is_search &#38;&#38; class_exists&#40;'SphinxClient'&#41;&#41; &#123;
&#160; &#160; $results = [...]]]></description>
			<content:encoded><![CDATA[<p>Once the<a href="http://vocecommunications.com/blog/2010/07/extending-wordpress-search-with-sphinx-part-i/">Sphinx server is setup</a>, we can begin with WordPress integration.  The first thing we need to do capture the override the query_vars in WP_Query before it runs it&#8217;s own search.  We&#8217;ll do this by running an action on &#8216;parse_query&#8217; with the code below.</p>
<div class="codecolorer-container php mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">function</span> my_parse_query<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span><span style="color: #000088;">$wp_query</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$wp_query</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">is_search</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #990000;">class_exists</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'SphinxClient'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000088;">$results</span> <span style="color: #339933;">=</span> my_sphinx_search_posts<span style="color: #009900;">&#40;</span><span style="color: #000088;">$wp_query</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">query_vars</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$results</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #000088;">$matching_ids</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">intval</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$results</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'total'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&gt;</span> <span style="color: #cc66cc;">0</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$results</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'matches'</span><span style="color: #009900;">&#93;</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$result</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$matching_ids</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #990000;">intval</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$result</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'attrs'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'post_id'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$matching_ids</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;">//clear the search query var so posts aren't filtered based on the search</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #000088;">$wp_query</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">query_vars</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'sphinx_search_term'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$wp_query</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">query_vars</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'s'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #990000;">unset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$wp_query</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">query_vars</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'s'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$wp_query</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">query_vars</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'paged'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;">//set our own copy of paged so that wordpress doesn't try to page a query already limiting posts</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$wp_query</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">query_vars</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'sphinx_paged'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$wp_query</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">query_vars</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'paged'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #990000;">unset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$wp_query</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">query_vars</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'paged'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #000088;">$wp_query</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">query_vars</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'post__in'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$matching_ids</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #000088;">$wp_query</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">query_vars</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'sphinx_num_matches'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #990000;">intval</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$results</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'total'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span> <br />
<span style="color: #009900;">&#125;</span><br />
add_action<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'parse_query'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'my_sphinx_parse_query'</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">10</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></div>
<p>In the above, we&#8217;re first verifying that the current <code class="codecolorer php mac-classic"><span class="php"><span style="color: #000088;">$wp_query</span></span></code> object is trying to run a search and that the Sphinx extension for PHP is correctly installed on the server.  If both of the previous statements are true, it runs the <code class="codecolorer php mac-classic"><span class="php">my_sphinx_search_posts<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span></span></code> function to get the post ID&#8217;s matching our search terms; we&#8217;ll get more into that function in a bit.  To prevent the <code class="codecolorer php mac-classic"><span class="php">WP_Query<span style="color: #339933;">-&gt;</span><span style="color: #004000;">get_posts</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span></span></code> function from further filtering the posts that Sphinx has already selected, we are un-setting the &#8217;s&#8217;, &#8216;paged&#8217; query_vars, but we are saving them for later use by storing them under different names with the query_vars array as &#8217;sphinx_search_term&#8217; and &#8217;sphinx_paged&#8217; accordingly.  Not also that we&#8217;re saving the total number of matches sphinx found under &#8217;sphinx_num_matches&#8217; in the query_vars as well.</p>
<p>Now lets dig into the <code class="codecolorer php mac-classic"><span class="php">my_sphinx_search_posts<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span></span></code> function.</p>
<div class="codecolorer-container php mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">function</span> my_sphinx_search_posts<span style="color: #009900;">&#40;</span><span style="color: #000088;">$args</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; <span style="color: #000088;">$defaults</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">'search_using'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'any'</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">'paged'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">'posts_per_page'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">'showposts'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">0</span><br />
&nbsp; <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #000088;">$args</span> <span style="color: #339933;">=</span> wp_parse_args<span style="color: #009900;">&#40;</span><span style="color: #000088;">$args</span><span style="color: #339933;">,</span> <span style="color: #000088;">$defaults</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #000088;">$sphinx</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> SphinxClient<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #000088;">$sphinx</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setServer</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'127.0.0.1'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'9312'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; <span style="color: #000088;">$search</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$args</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'s'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #b1b100;">switch</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$args</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'search_using'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">case</span> <span style="color: #0000ff;">'all'</span><span style="color: #339933;">:</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #000088;">$sphinx</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setMatchMode</span><span style="color: #009900;">&#40;</span>SPH_MATCH_ALL<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">break</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">case</span> <span style="color: #0000ff;">'exact'</span><span style="color: #339933;">:</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #000088;">$sphinx</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setMatchMode</span><span style="color: #009900;">&#40;</span>SPH_MATCH_PHRASE<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">break</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">default</span><span style="color: #339933;">:</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #000088;">$sphinx</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setMatchMode</span><span style="color: #009900;">&#40;</span>SPH_MATCH_ANY<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><br />
<br />
&nbsp; <span style="color: #000088;">$page</span> <span style="color: #339933;">=</span> <span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$args</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'paged'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">intval</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$args</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'paged'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&gt;</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span> ? <span style="color: #990000;">intval</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$args</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'paged'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">:</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #000088;">$per_page</span> <span style="color: #339933;">=</span> <span style="color: #990000;">max</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$args</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'posts_per_page'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$args</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'showposts'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$per_page</span> <span style="color: #339933;">&lt;</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000088;">$per_page</span> <span style="color: #339933;">=</span> get_option<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'posts_per_page'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; <br />
&nbsp; <span style="color: #000088;">$sphinx</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setLimits</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$page</span> <span style="color: #339933;">-</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">*</span> <span style="color: #000088;">$per_page</span><span style="color: #339933;">,</span> <span style="color: #000088;">$per_page</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #000088;">$sphinx</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setMaxQueryTime</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">30</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #000088;">$result</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$sphinx</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">query</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$search</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #b1b100;">return</span> <span style="color: #000088;">$result</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span></div></div>
<p>The function above is just a wrapper around the Sphinx search.  It accepts an array of arguments, which matches up to the query_vars array used by <code class="codecolorer php mac-classic"><span class="php">WP_Query</span></code> during a search query.  It is using the search based query_vars to create the search arguments to send to Sphinx and then returning the final result.</p>
<p>Now that we&#8217;ve searched against Sphinx and have gotten <code class="codecolorer php mac-classic"><span class="php">WP_Query</span></code> to return the posts based on the Sphinx result, we need to reset the query_vars that we modified earlier so that WordPress continues to behave as if it ran the search itself.  We&#8217;re going to do this by adding an filter to &#8216;found_posts&#8217;.</p>
<div class="codecolorer-container php mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">function</span> my_sphinx_search_filter_found_posts<span style="color: #009900;">&#40;</span><span style="color: #000088;">$found_posts</span><span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span><span style="color: #000088;">$wp_query</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">is_null</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$wp_query</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$wp_query</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">query_vars</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'sphinx_num_matches'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #000088;">$found_posts</span> <span style="color: #339933;">=</span> <span style="color: #990000;">intval</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$wp_query</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">query_vars</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'sphinx_num_matches'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$wp_query</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">query_vars</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'sphinx_search_term'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #000088;">$wp_query</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">query_vars</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'s'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$wp_query</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">query_vars</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'sphinx_search_term'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$wp_query</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">query_vars</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'sphinx_paged'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #000088;">$wp_query</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">query_vars</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'paged'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$wp_query</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">query_vars</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'sphinx_paged'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; <br />
&nbsp; <span style="color: #b1b100;">return</span> <span style="color: #000088;">$found_posts</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
add_filter<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'found_posts'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'my_sphinx_search_filter_found_posts'</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">10</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></div>
<p>That&#8217;s it.  We&#8217;ve setup WordPress to use Sphinx as its search engine, while letting it still degrade nicely to use WordPress&#8217; default search if Sphinx isn&#8217;t available.</p>
<p>I have grouped this code together as a stand-alone plugin that can be downloaded and used on your own site: <a href="http://vocecommunications.com/services/web-development/wordpress/plugins/wp-sphinx-search/">WP Sphinx Search</a></p>
<img src="http://feeds.feedburner.com/~r/VoceNation/~4/h20ZXo5tOwc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://vocecommunications.com/blog/2010/07/extending-wordpress-search-with-sphinx-part-ii/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://vocecommunications.com/blog/2010/07/extending-wordpress-search-with-sphinx-part-ii/</feedburner:origLink></item>
		<item>
		<title>Extending WordPress search with Sphinx (Part I)</title>
		<link>http://feedproxy.google.com/~r/VoceNation/~3/6xi8qiY0bbk/</link>
		<comments>http://vocecommunications.com/blog/2010/07/extending-wordpress-search-with-sphinx-part-i/#comments</comments>
		<pubDate>Mon, 12 Jul 2010 20:00:15 +0000</pubDate>
		<dc:creator>Sean O'Shaughnessy</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Search]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://vocecommunications.com/?p=3471</guid>
		<description><![CDATA[Sphinx is a powerful open source SQL full-text search engine. It runs as a single process in the background, and can be connected to over a specified IP and port.
It supports weighted ranking of search results, different search matching modes (all words in the query, any words in the query, exact phrase), and filtering on [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.sphinxsearch.com/">Sphinx</a> is a powerful open source SQL full-text search engine. It runs as a single process in the background, and can be connected to over a specified IP and port.</p>
<p>It supports weighted ranking of search results, different search matching modes (all words in the query, any words in the query, exact phrase), and filtering on specific attributes. Sphinx also supports distributed searching, and phrase proximity ranking for better relevance.</p>
<p>Keep an eye out tomorrow &#8211; Mike Pretty will be providing some code examples in Part II on how to tie this setup and configuration into WordPress…</p>
<h2>So why Sphinx? What&#8217;s wrong with the default WordPress search?</h2>
<p>Nothing is wrong with the default WordPress search, it suits plenty of use-cases out of the box. Sometimes, you just need more features than the standard search can provide with <em>post_content LIKE &#8216;%phrase%&#8217;</em>.</p>
<p>What if searching comments was desired? Or custom post types? Using Sphinx can help extend the default search to include posts, pages, comments, custom post types and any other data that can be retrieved with a MySQL query.</p>
<p>There are plenty of <a href="http://www.sphinxsearch.com/docs/current.html#installing">resources</a> out there that can help you install Sphinx. <a href="http://rpmrepo.org/RPMforge">RPMforge</a> carries a Sphinx package, and you can also download, compile, and install yourself.</p>
<h2>Sources and Indexes</h2>
<p>The two fundamental components to Sphinx are a <em>source</em> and an <em>index</em>. The <em>source</em> tells Sphinx where to get the data from and an <em>index</em> uses the <em>source</em> to define how to store the data. There are also various settings you can apply to the indexer process itself (such as port to listen on, memory limit, and where to store logs).</p>
<p>For now, we&#8217;re going to start with a simple configuration file that will allow us to search through posts in our blog.</p>
<div class="codecolorer-container text mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">#<br />
# &nbsp;GENERAL SETTINGS<br />
#<br />
indexer {<br />
mem_limit = 32M<br />
}<br />
<br />
searchd {<br />
listen = 9312<br />
<br />
log = /var/log/searchd.log<br />
query_log = /var/log/query.log<br />
<br />
read_timeout = 5<br />
client_timeout = 300<br />
<br />
max_children = 30<br />
<br />
pid_file = /var/run/searchd.pid<br />
<br />
max_matches = 1000<br />
seamless_rotate = 1<br />
preopen_indexes = 0<br />
unlink_old = 1<br />
<br />
mva_updates_pool = 1M<br />
max_packet_size = 8M<br />
<br />
max_filters = 256<br />
max_filter_values = 4096<br />
}<br />
<br />
#<br />
# &nbsp;INDEX GROUP:<br />
# &nbsp;MY BLOG<br />
#<br />
# &nbsp;SOURCES:<br />
# &nbsp;src_my_blog<br />
#<br />
# &nbsp;INDEXES:<br />
# &nbsp;idx_my_blog<br />
#<br />
#<br />
source src_my_blog {<br />
type = mysql<br />
sql_host = localhost<br />
sql_user = mysql_user<br />
sql_pass = mysql_user_password<br />
sql_db = mysql_table<br />
<br />
sql_query_pre = SET NAMES utf8<br />
<br />
sql_query = \<br />
SELECT \<br />
p.ID*2+1 AS ID, \<br />
p.ID as post_ID, \<br />
p.post_title as title, \<br />
p.post_content as body, \<br />
UNIX_TIMESTAMP(p.post_date) AS date_added \<br />
FROM \<br />
wp_posts as p \<br />
WHERE \<br />
p.post_type = 'post' AND \<br />
p.post_status = 'publish';<br />
<br />
sql_attr_uint = post_id<br />
sql_attr_str2ordinal = title<br />
sql_attr_timestamp = date_added<br />
<br />
sql_query_info = SELECT ID, post_title FROM wp_posts WHERE id=($id - 1)/2<br />
}<br />
<br />
index idx_my_blog {<br />
source = src_my_blog<br />
path = /var/data/idx_my_blog<br />
<br />
docinfo = extern<br />
mlock = 0<br />
morphology = stem_enru<br />
min_stemming_len = 4<br />
min_word_len = 1<br />
charset_type = sbcs # or utf-8<br />
html_strip = 0<br />
html_index_attrs = img=alt,title; a=title;<br />
html_remove_elements = style, script, object, embed, span<br />
}</div></div>
<p>For the sake of example, we&#8217;re going to save this file in <em>/etc/sphinx/sphinx.conf</em>.</p>
<p>You&#8217;ll need to change your <em>sql_host</em>, <em>sql_user</em>, <em>sql_pass</em>, <em>sql_db</em> values accordingly to match your environment.</p>
<p>A couple configuration settings worth noting:</p>
<ul>
<li><strong>searchd { listen = 9312 }</strong> &#8211; this tells the Sphinx daemon what port to listen on.</li>
<li><strong>source src_my_blog { sql_query } </strong> &#8211; this tells Sphinx using the SQL connection info above, what data from what table(s) to index. The important thing to note here is that <strong>your query must return a unique ID for every row</strong>. You can test your query first using the MySQL command line, or something like <a href="http://www.phpmyadmin.net/home_page/index.php">phpMyAdmin</a></li>
<li><strong>source src_my_blog { sql_query_info }</strong> &#8211; the sql_query_info directive allows you to use the command line tool <em>search</em> to test the index(es).</li>
<li><strong>index idx_my_blog { html_index_attrs = img=alt,title; a=title; } and index idx_my_blog { html_remove_elements = style, script, object, embed, span }</strong> &#8211; These two settings tell Sphinx that we want to index the <em>alt</em> and/or <em>title</em> attributes of an image, and the <em>title</em> attribute of links. The <em>html_remove_elements</em> tells Sphinx that we don&#8217;t want to index those HTML tags or anything in between them (JavaScripts, embed tags, etc.)</li>
</ul>
<p>You can read up on all the available configuration settings and recommended values in the <a href="http://www.sphinxsearch.com/docs/current.html#api-reference">Sphinx API reference</a>.</p>
<h2>Building the Index</h2>
<p>Now that we have defined a basic source and a basic index, we&#8217;ll want to get the data indexed. We&#8217;re going to use the <em>indexer</em> command which is responsible for gathering the index and storing it where you defined <strong>path</strong> in your index (in the above example: /var/data/idx_my_blog):</p>
<div class="codecolorer-container text mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$ indexer --config /etc/sphinx/sphinx.conf --all</div></div>
<h2>Start searchd</h2>
<p>So we have a working configuration, and have built our first index. Now, we&#8217;ll want to start the <em>searchd</em> process that will interface our application to the previously built indexes.</p>
<div class="codecolorer-container text mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$ searchd --config /etc/sphinx/sphinx.conf</div></div>
<h2>Re-indexing</h2>
<p>At this point, any new posts you publish won&#8217;t be added to your Sphinx index. How come? Well, you have to tell Sphinx to rebuild the index. Since we don&#8217;t want to manually have to build our index, we&#8217;ll add it to <em>cron</em> to rebuild every 5 minutes:</p>
<div class="codecolorer-container text mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">*/5 * * * * /usr/bin/indexer --config /etc/sphinx/sphinx.conf --all --rotate</div></div>
<p>* note: the path to your &#8216;indexer&#8217; command may vary&#8230;</p>
<p>This time, we passed in the <em>&#8211;rotate</em> option. Since it&#8217;s not practical to take your index offline to rebuild it, the <em>&#8211;rotate</em> option will build your index in parallel and send a <em>SIGHUP</em> to your searchd process.</p>
<p>For larger indexes, you can also use &#8216;delta&#8217; indexing. &#8216;Delta&#8217; indexing will create a &#8216;master&#8217; index, that will take some time to build initially (depending on your query/size of your data). A second &#8216;delta&#8217; index is maintained that only adds records to it that are greater than the defined field.</p>
<p>For example, you can build your &#8216;master&#8217; index, and upon completion, have Sphinx save the highest auto-incrementing ID of the table. You then instruct your &#8216;delta&#8217; index to only index records greater than the previously stored ID. See &#8220;<a href="http://www.sphinxsearch.com/docs/current.html#live-updates">Live index updates</a>&#8221; in the Sphinx docs for more info.</p>
<p>Read <a href="http://vocecommunications.com/blog/2010/07/extending-wordpress-search-with-sphinx-part-ii/">Extending WordPress search with Sphinx Part II</a> for some code examples on how to tie your above setup and configuration into WordPress…</p>
<img src="http://feeds.feedburner.com/~r/VoceNation/~4/6xi8qiY0bbk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://vocecommunications.com/blog/2010/07/extending-wordpress-search-with-sphinx-part-i/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://vocecommunications.com/blog/2010/07/extending-wordpress-search-with-sphinx-part-i/</feedburner:origLink></item>
		<item>
		<title>On Content Curation</title>
		<link>http://feedproxy.google.com/~r/VoceNation/~3/kkc3CitNwGk/</link>
		<comments>http://vocecommunications.com/blog/2010/07/on-content-curation/#comments</comments>
		<pubDate>Mon, 12 Jul 2010 16:00:36 +0000</pubDate>
		<dc:creator>Doug Haslam</dc:creator>
				<category><![CDATA[Events]]></category>

		<guid isPermaLink="false">http://vocecommunications.com/?p=3464</guid>
		<description><![CDATA[On Friday (July 9), I attended Boston Social Media Breakfast 18. The Topic? Content Curation. It was a timely topic because I had been seeing a few posts lately that made me think that we are growing weary of the blog-as-news-feed format, and need to think fresh about how we present our content. This starts, [...]]]></description>
			<content:encoded><![CDATA[<p>On Friday (July 9), I attended<a href="http://smb18.eventbrite.com/"> Boston Social Media Breakfast 18</a>. The Topic? Content Curation. It was a timely topic because I had been seeing a few posts lately that made me think that we are growing weary of the blog-as-news-feed format, and need to think fresh about how we present our content. This starts, of course, with how we want this content to serve our audiences/customers (and our businesses).</p>
<p>Regarding the posts that caught my attention:</p>
<p>First was a missive from Chip Griffin on his &#8220;Pardon the Disruption&#8221; blog. In his post, &#8220;<a href="http://www.pardonthedisruption.com/2010/07/06/all-blog-posts-are-not-created-equal/">All Blog Posts are Not Created Equal</a>,&#8221; he bemoans the lack of editorial recommendation in most blogs, owing to the &#8220;latest post first&#8221; timeline format of the typical blog. (Have a look at the <a href="http://vocenation.com">Voce Nation home page</a> for a simple example of highlighting an &#8220;editor&#8217;s choice&#8221; post rather than the latest bulletin).</p>
<p><a href="http://scobleizer.com/2010/03/27/the-seven-needs-of-real-time-curators/">Robert Scoble wrote last week</a> about curation of outside content- we all do it (a point taken a bit further later in this post), by personally recommending links, but in the same article he also hopes to scold the industry into coming up with a better content curation tool.</p>
<p>There was also <a href="http://vocecommunications.com/blog/2010/07/maximizing-value-of-old-content/">Josh Hallett&#8217;s post right here</a> on using old content rather than letting it mold in the vaults.</p>
<p>The Social Media Breakfast speakers (and attendees) attacked the curation topic from different angles, but I took several points away as a I listened:</p>
<p>First, there was the use of the word &#8220;curation&#8221; itself. Tamsen McMahon wondered aloud what professional museum curators would think of this use, as to them it means painstaking use of deep knowledge of the topic.</p>
<p><a href="http://twitter.com/tamadear/status/18119206543"><img class="alignnone size-medium wp-image-3466" title="tamsen" src="http://vocecommunications.com/wp-content/uploads/2010/07/tamsen-499x222.jpg" alt="" width="499" height="222" /></a></p>
<p>On speaking with her later, I came away thinking that the best of corporate content curation meets similar standards: a company should be the foremost source of knowledge on their topic, and know where to find the right content and present it in a way that is useful. I&#8217;d be curious- and a little surprised- if museum curators objected to the piracy of their term, though.</p>
<p>Pawan Deshpande from <a href="http://hivefire.com">HiveFire </a>laid out a plain case for content duration from a corporate point of view. His thoughts are also measured out on the <a href="http://www.contentcurationmarketing.com/">Content Curation Marketing site</a>,  but my distillation of his talk is thus: serve content that aligns with your customer/audience and your business; have a focus and publish frequently.</p>
<p><a href="http://twitter.com/DougH/status/18117378900"><img class="alignnone size-medium wp-image-3467" title="pawan" src="http://vocecommunications.com/wp-content/uploads/2010/07/pawan-500x248.jpg" alt="" width="500" height="248" /></a></p>
<p>Also among the presenters was Andrew Davis of <a href="http://tippingpointlabs.com/">TippingPoint Labs</a>. After talking about the online informational chaos awaiting anyone who makes even the most mundane of searches. His example: &#8220;Meat Loaf,&#8221; through which he explained a journey of clicks from s craving for the dish to the realization the singer was playing in town that night.  The one thing he said that grabbed me was that the crowds on the Internet do a pretty good job of curation if you know where to look for it- and thus the semantic Web, in a way, is already here- created by us.</p>
<p>Does that mean companies should rely on the crowds to curate for them? Of course not- but this event and the aforementioned posts prove that content curation- finding and displaying meaning- is on all of out minds.</p>
<p>By the way- while displaying the materials only does no justice to Davis&#8217; frenetic presentation style, his use of Prezi- rather than PowerPoint or Keynote- is very interesting and worth a look.</p>
<div class="prezi-player"><!-- .prezi-player { width: 550px; } .prezi-player-links { text-align: center; } --><object id="prezi_q-1mxbtuoxy0" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="500" height="366" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="name" value="prezi_q-1mxbtuoxy0" /><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="bgcolor" value="#ffffff" /><param name="flashvars" value="prezi_id=q-1mxbtuoxy0&amp;lock_to_path=0&amp;color=ffffff&amp;autoplay=no" /><param name="src" value="http://prezi.com/bin/preziloader.swf" /><embed id="prezi_q-1mxbtuoxy0" type="application/x-shockwave-flash" width="500" height="366" src="http://prezi.com/bin/preziloader.swf" flashvars="prezi_id=q-1mxbtuoxy0&amp;lock_to_path=0&amp;color=ffffff&amp;autoplay=no" bgcolor="#ffffff" allowscriptaccess="always" allowfullscreen="true" name="prezi_q-1mxbtuoxy0"></embed></object></p>
<div class="prezi-player-links">
<p><a title="SMB18 will feature presentations by some of the most advanced thinkers in content strategy and creation - bringing a fresh and wide variety of first hand experiences and case studies.  " href="http://prezi.com/q-1mxbtuoxy0/content-creation-in-the-new-age-of-search-engagement/">Content Creation in the New Age of Search &amp; Engagement</a> on <a href="http://prezi.com">Prezi</a></p>
</div>
</div>
<img src="http://feeds.feedburner.com/~r/VoceNation/~4/kkc3CitNwGk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://vocecommunications.com/blog/2010/07/on-content-curation/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://vocecommunications.com/blog/2010/07/on-content-curation/</feedburner:origLink></item>
		<item>
		<title>There Is Work to Be Done</title>
		<link>http://feedproxy.google.com/~r/VoceNation/~3/0afJJ9rdYK8/</link>
		<comments>http://vocecommunications.com/blog/2010/07/there-is-work-to-be-done/#comments</comments>
		<pubDate>Thu, 08 Jul 2010 14:00:44 +0000</pubDate>
		<dc:creator>John Welton</dc:creator>
				<category><![CDATA[Random Stuff]]></category>

		<guid isPermaLink="false">http://vocecommunications.com/?p=3378</guid>
		<description><![CDATA[Sitting at the Silicon Valley Energy Summit at Stanford in Palo Alto, CA. with a client a week ago, one message came clear from the sessions&#8212;we have work to do&#8212;and we cannot assume innovation will simply solve the “green” problem out there. With oil spills in the news, a system of incentives for going green [...]]]></description>
			<content:encoded><![CDATA[<p>Sitting at the Silicon Valley Energy Summit at Stanford in Palo Alto, CA. with a client a week ago, one message came clear from the sessions&#8212;we have work to do&#8212;and we cannot assume innovation will simply solve the “green” problem out there. With oil spills in the news, a system of incentives for going green not yet perfected and big business driving big consumption we have to think about big behavior change too.</p>
<p><a rel="attachment wp-att-3379" href="http://vocecommunications.com/blog/2010/07/there-is-work-to-be-done/img00333-20100625-1235/"><img class="aligncenter size-medium wp-image-3379" title="IMG00333-20100625-1235" src="http://vocecommunications.com/wp-content/uploads/2010/06/IMG00333-20100625-1235-500x375.jpg" alt="" width="500" height="375" /></a></p>
<p>(No surprises here, I know.) I am no green expert but I kept thinking while sitting there: 1) How can we help as communications people? 2) What is our role?</p>
<p>Also, how can we make sure that the stories we as communicators are helping our clients tell are authentic and truly &#8220;green.&#8221; Are we digging into the stories behind the scenes enough to help people  understand what real innovation is taking place?</p>
<p>I don’t have the answer but I think marketers need to think green and we have a duty to challenge our clients a little bit as outside consultants.</p>
<img src="http://feeds.feedburner.com/~r/VoceNation/~4/0afJJ9rdYK8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://vocecommunications.com/blog/2010/07/there-is-work-to-be-done/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://vocecommunications.com/blog/2010/07/there-is-work-to-be-done/</feedburner:origLink></item>
		<item>
		<title>Maximizing Value of Old Content</title>
		<link>http://feedproxy.google.com/~r/VoceNation/~3/-ljgkwqrG8c/</link>
		<comments>http://vocecommunications.com/blog/2010/07/maximizing-value-of-old-content/#comments</comments>
		<pubDate>Wed, 07 Jul 2010 17:00:18 +0000</pubDate>
		<dc:creator>Josh Hallett</dc:creator>
				<category><![CDATA[Marketing]]></category>
		<category><![CDATA[Search]]></category>

		<guid isPermaLink="false">http://vocecommunications.com/?p=3448</guid>
		<description><![CDATA[We have short attention spans, and so much of what happens in social media is ‘in the moment’ – that leads to one of the long-term problems of social media; maximizing value of old content.   A number of corporate blogs have been publishing for more than 3-4 years now and that is a [...]]]></description>
			<content:encoded><![CDATA[<p>We have short attention spans, and so much of what happens in social media is <em>‘in the moment’</em> – that leads to one of the long-term problems of social media; maximizing value of old content.   A number of <a href="http://blog.us.playstation.com/">corporate blogs</a> have been publishing for more than 3-4 years now and that is a great deal of old posts.  With the shelf-life of a tweet lasting a few minute, imagine the challenge or drawing attention to a post from 3 years ago.</p>
<p>Sure many things are topical, but a great deal of content is still relevant, even a few years later.  There is natural discovery via search, and that long tail of visitors streaming in via old content is of value, but how to get more?</p>
<p>Now we won’t go the way of the newspapers and charge for access to the archives, we want all the readers we can get for that archived content.  That long-term value is something we work on daily with our clients.  It’s a combination of smart content planning and promotion along with the right technology.</p>
<p>While it’s important to seize opportunities now and live <em>‘in the moment’</em> you also need to live in the past.</p>
<img src="http://feeds.feedburner.com/~r/VoceNation/~4/-ljgkwqrG8c" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://vocecommunications.com/blog/2010/07/maximizing-value-of-old-content/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://vocecommunications.com/blog/2010/07/maximizing-value-of-old-content/</feedburner:origLink></item>
		<item>
		<title>Web Typography: 3 Choices</title>
		<link>http://feedproxy.google.com/~r/VoceNation/~3/eEoiq6nvzlc/</link>
		<comments>http://vocecommunications.com/blog/2010/07/web-typography-3-choices/#comments</comments>
		<pubDate>Tue, 06 Jul 2010 22:34:06 +0000</pubDate>
		<dc:creator>Pete Schiebel</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://vocecommunications.com/?p=3426</guid>
		<description><![CDATA[For all of the advancements in web design and development, one problem has remained: the inability to easily incorporate real fonts into websites. It&#8217;s frustrating for designers because they want to make a visually inspiring site and don&#8217;t want to be shackled by the &#8216;web-friendly&#8217; fonts such as Arial, Verdana, Times New Roman, Courier, Comic [...]]]></description>
			<content:encoded><![CDATA[<p>For all of the advancements in web design and development, one problem has remained: the inability to <em>easily</em> incorporate real fonts into websites. It&#8217;s frustrating for designers because they want to make a visually inspiring site and don&#8217;t want to be shackled by the &#8216;web-friendly&#8217; fonts such as Arial, Verdana, Times New Roman, Courier, Comic Sans and Impact. Helvetica and Georgia are also common fonts that are widely accepted across browsers.Let&#8217;s face it, you can only do so much with these fonts.</p>
<p>In most cases designers will use fancy fonts for navigation items, special graphics and some headlines. Developers cut these up into images or even combine them into image sprites and integrate them into the web site template. This is fine for items that don&#8217;t change often but really limits flexibility. What if you want your blog post titles to have a cool font? You can&#8217;t use images for dynamically generated content. So what do you do?</p>
<h2>sIFR (scalable Inman Flash replacement)</h2>
<p>For a while <a href="http://wiki.novemberborn.net/sifr/">sIFR</a> was the best option around. This method requires using JavaScript and a Flash plugin installed in the user&#8217;s browser. It would take the text you specified and use Javascript and Flash to replace it with a font you include in a directory. I had mixed results using sIFR. Sometimes I could get it integrated fairly easily while other times I never could quite get it looking right. It&#8217;s been a while now since I used it because I got turned off by the hassle of getting it integrated and then trying to tweak it to look right. I&#8217;ve seen that there is a <a href="http://wordpress.org/extend/plugins/wp-sifr/">WordPress plugin</a> available for it now, so it&#8217;s possible that it has gotten more streamlined since I&#8217;ve stopped using it.</p>
<h2>TypeKit</h2>
<p>TypeKit is a subscription-based service for linking high-quality fonts into your website. Instead of having to include the font file in one of your directories, TypeKit uses two JavaScript calls and a line of CSS to pull in the font from their servers. Because TypeKit uses commercial fonts, there are different subscription levels available based on how much traffic your site gets and which font(s) you want to use. They even have a Trial subscription that is free. Their font library is ever expanding and the ease of use is great. They have a <a href="http://wordpress.org/extend/plugins/typekit-fonts-for-wordpress/">WordPress plugin</a> as well. So far I&#8217;ve enjoyed working with TypeKit. <a href="http://ebayinkblog.com">eBay Ink</a> is an example of a site we use it on.<br />
<a href="http://vocecommunications.com/wp-content/uploads/2010/07/ebay-screen.jpg"><img class="aligncenter size-medium wp-image-3429" title="ebay-screen" src="http://vocecommunications.com/wp-content/uploads/2010/07/ebay-screen-500x178.jpg" alt="" width="500" height="178" /></a></p>
<h2>Google Fonts</h2>
<p>Google had a feeling that TypeKit is on to something so they jumped right into the font-linking method that TypeKit uses. They have some <a href="http://code.google.com/apis/webfonts/">simple documentation</a> that shows you just how easy it is to include their fonts, as little as one line of JavaScript and one line of CSS (similar to TypeKit). Unlike TypeKit, the Google Font Directory is available under an open source license. This means it&#8217;s free! There are no subscriptions or license fees, but the font selection is pretty small at this point (18 font families). My hope/assumption is that their font library will continue to grow and this is just their starting point. You can even download the fonts and host them on your server. This is helpful for including them in designs or in the event you think your server is more reliable than having them hosted on Google&#8217;s servers.</p>
<p>Obviously I prefer either TypeKit or the Google Font Library over sIFR. They&#8217;ve both made it very easy to integrate and each have their pros and cons versus the other. Both are relatively new so it will be interesting to see how well they do. These are the tools I&#8217;ve used most frequently, but there are many more out there like Cufón, Typeface and AnyFont. Which is your favorite?</p>
<img src="http://feeds.feedburner.com/~r/VoceNation/~4/eEoiq6nvzlc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://vocecommunications.com/blog/2010/07/web-typography-3-choices/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://vocecommunications.com/blog/2010/07/web-typography-3-choices/</feedburner:origLink></item>
		<item>
		<title>WordCamp Boulder – We’ll be There!</title>
		<link>http://feedproxy.google.com/~r/VoceNation/~3/LETNUZcAils/</link>
		<comments>http://vocecommunications.com/blog/2010/07/wordcamp-boulder-well-be-there/#comments</comments>
		<pubDate>Thu, 01 Jul 2010 20:33:40 +0000</pubDate>
		<dc:creator>Nick Gernert</dc:creator>
				<category><![CDATA[Voce Platform Services]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://vocecommunications.com/?p=3385</guid>
		<description><![CDATA[WordCamp Boulder is coming upon July 10. We&#8217;ll be there not only attending the sessions, but Chris and Sean will be giving a talk on caching with WordPress.  Here&#8217;s a brief description of the session:
As a WordPress site owner you want your WordPress site to be fast, use less server resources, and be able [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://2010.boulder.wordcamp.org/">WordCamp Boulder</a> is coming upon July 10. We&#8217;ll be there not only attending the <a href="http://2010.boulder.wordcamp.org/schedule/">sessions</a>, but <a href="http://vocecommunications.com/about/our-staff/chris-scott/">Chris</a> and <a href="http://vocecommunications.com/about/our-staff/sean-oshaughnessy/">Sean</a> will be giving a talk on caching with WordPress.  Here&#8217;s a brief description of the session:</p>
<blockquote><p>As a WordPress site owner you want your WordPress site to be fast, use less server resources, and be able to handle increases in traffic. As a theme designer or plugin developer, you want to do your part by avoiding repeatedly making expensive database or API calls. WordPress’ output and object caching are there to help everyone realize these goals. This talk covers the differences and interactions between these two types of caching, benchmarks of common caching plugins, and tips for ensuring your themes and plugins are taking advantage of caching.</p></blockquote>
<p>Also, I&#8217;ll be part of a panel talking about the consulting we do with WordPress.  Hope to see you there!</p>
<div class="clr"></div>
<img src="http://feeds.feedburner.com/~r/VoceNation/~4/LETNUZcAils" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://vocecommunications.com/blog/2010/07/wordcamp-boulder-well-be-there/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://vocecommunications.com/blog/2010/07/wordcamp-boulder-well-be-there/</feedburner:origLink></item>
		<item>
		<title>Innovation Events: a Tale of Two Coasts</title>
		<link>http://feedproxy.google.com/~r/VoceNation/~3/JAD81vr5TLw/</link>
		<comments>http://vocecommunications.com/blog/2010/06/innovation-events-a-tale-of-two-coasts/#comments</comments>
		<pubDate>Fri, 25 Jun 2010 21:46:38 +0000</pubDate>
		<dc:creator>Doug Haslam</dc:creator>
				<category><![CDATA[Events]]></category>

		<guid isPermaLink="false">http://vocecommunications.com/?p=3336</guid>
		<description><![CDATA[Being based in Boston but spending a fair amount of time in San Francisco and Silicon Valley, I have had a chance to sample the &#8220;innovation&#8221; communities in both regions.
One thing that struck me- and the catalyst for this post- is that in both areas I have seen events that  highlight selected entrepreneurs, and they [...]]]></description>
			<content:encoded><![CDATA[<p>Being based in Boston but spending a fair amount of time in San Francisco and Silicon Valley, I have had a chance to sample the &#8220;innovation&#8221; communities in both regions.</p>
<p>One thing that struck me- and the catalyst for this post- is that in both areas I have seen events that  highlight selected entrepreneurs, and they are not entirely different in format.</p>
<p>In Boston, there are two regular events: Web Innovators Group (<a href="http://www.webinnovatorsgroup.com/">http://www.webinnovatorsgroup.com/</a>) (pictured) and <a href="http://massinnovationnights.com/">Mass Innovation Nights</a>. As a local, I am much more familiar with these events and their formats. WebInno (which recently held it&#8217;s 26th event in Cambridge, MA) is run by David Beisel of <a href="http://www.venrock.com/">Venrock</a> (also a sponsor along with Microsoft) began in the fall of 2005, and has grown into a quarterly event of more than 1,000 attendees, viewing and voting on three startups who present on the main stage, along with a number of &#8220;side dishes&#8221; that are also given air time. the format allows each presenting startup a limited-time presentation (a familiar theme, especially to those who have been to DEMO) followed by audience voting and capped by a general networking session. On occasions they have also run panels on entrepreneurship, marketing and PR, but the attraction to most attendees seems to be the massive networking opportunity- which is best used by those who come with a plan on whom they want to meet.</p>
<p>Also, it gives a sense that the entrepreneurial community, often compared unfavorably to that of Silicon Valley, is quite vital and large, cheered on by media champions such as the <em><a href="http://www.boston.com/business/technology/innoeco/">Boston Globe</a></em><a href="http://www.boston.com/business/technology/innoeco/">&#8217;s Scott Kirsner</a>.</p>
<div id="attachment_3338" class="wp-caption alignnone" style="width: 360px"><img class="size-medium wp-image-3338 " title="WebInno" src="http://vocecommunications.com/wp-content/uploads/2010/06/IMG_4692-500x375.jpg" alt="" width="350" height="263" /><p class="wp-caption-text">DoInk.com at Web Innovators Group in Boston</p></div>
<p>Mass Innovation Nights sounds like a similar event, but wisely is not a copycat. Smaller in attendance but higher in frequency (monthly), MassInno, a newer event, gives the feel of a much tighter-nit community and offers slightly more formal features such as an &#8220;experts corner,&#8221; allowing people to interact and learn in a structured- but not too-structured- way. (Disclosure- I was lucky enough to get to know MassInno founder Bobbie Carlton shortly before she started this venture).</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="480" height="289" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://www.youtube.com/v/trDfab2tEAw&amp;color1=0xb1b1b1&amp;color2=0xd0d0d0&amp;hl=en_US&amp;feature=player_embedded&amp;fs=1" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="480" height="289" src="http://www.youtube.com/v/trDfab2tEAw&amp;color1=0xb1b1b1&amp;color2=0xd0d0d0&amp;hl=en_US&amp;feature=player_embedded&amp;fs=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>Being familiar with the Boston events, I was curious to see an example of Silicon Valley/San Francisco entrepreneurship, and got a taste at <a href="http://vatorsplash.eventbrite.com/">May&#8217;s VatorSplash</a> event, run by <a href="http://vator.tv">Vator.tv</a>. There were a number of differences- first, unlike the above events, there was a significant admission fee (discounted for those who sign up early), rather than relying solely on sponsors to cover costs.</p>
<p>Another difference was the addition of high-profile speakers (like Tony Hsieh of Zappo&#8217;s- pictured). Are these attractions really distractions from the innovators- or does it lend cache and prestige to the event, letting the startups grab some reflected glory? It may just be a matter of style.</p>
<div class="wp-caption alignnone" style="width: 410px"><a title="vatorsplash tonyhsieh zappos (1) by doughaslam, on Flickr" href="http://www.flickr.com/photos/doughaslam/4655901303/"><img src="http://farm5.static.flickr.com/4066/4655901303_0d326169e9.jpg" alt="vatorsplash tonyhsieh zappos (1)" width="400" height="300" /></a><p class="wp-caption-text">Zappo&#39;s Tony Hsieh at VatorSplash</p></div>
<p>A final difference, one which I would be interested to see one of the Boston events try, was that Vatorsplash had rotating panels of venture capitalist judges critiquing the demos in real-time, giving a little bit of show-biz (think American Idol for geeks tech geeks) to the proceedings, and putting the presenters on the spot just a little bit more. There&#8217;s nothing wrong with that in what should be a pretty cutthroat competitive world of raising capital and launching new companies.</p>
<p>Differences? Yes. Are there more events I am neglecting? Probably. Are other cities doing this? They had better be. Are you going and supporting these events and others like them?</p>
<p>Please do.</p>
<img src="http://feeds.feedburner.com/~r/VoceNation/~4/JAD81vr5TLw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://vocecommunications.com/blog/2010/06/innovation-events-a-tale-of-two-coasts/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://vocecommunications.com/blog/2010/06/innovation-events-a-tale-of-two-coasts/</feedburner:origLink></item>
		<item>
		<title>This Anniversary Goes to 11</title>
		<link>http://feedproxy.google.com/~r/VoceNation/~3/G4PdK58aNYE/</link>
		<comments>http://vocecommunications.com/blog/2010/06/this-anniversary-goes-to-11/#comments</comments>
		<pubDate>Wed, 23 Jun 2010 21:35:40 +0000</pubDate>
		<dc:creator>Rich Cline</dc:creator>
				<category><![CDATA[Voce Culture]]></category>
		<category><![CDATA[Voce News]]></category>
		<category><![CDATA[Voce People]]></category>

		<guid isPermaLink="false">http://vocecommunications.com/?p=3358</guid>
		<description><![CDATA[Tonight we celebrate our 11th anniversary and borrowed our theme from “One of rock’s loudest bands”, Spinal Tap. This one goes to eleven!

As much as we had hoped we could build a company that would one day celebrate its eleventh birthday and more, it was hard to believe it in 1999.  It seems like a [...]]]></description>
			<content:encoded><![CDATA[<p>Tonight we celebrate our 11th anniversary and borrowed our theme from “One of rock’s loudest bands”, Spinal Tap. This one goes to eleven!</p>
<p><a title="Voce's 11th Anniversary  by VoceCommunications, on Flickr" href="http://www.flickr.com/photos/vocenation/4728634800/"><img src="http://farm2.static.flickr.com/1367/4728634800_a7839373df_o.jpg" alt="Voce's 11th Anniversary " width="500" height="324" /></a></p>
<p>As much as we had hoped we could build a company that would one day celebrate its eleventh birthday and more, it was hard to believe it in 1999.  It seems like a long time ago and just yesterday. Working with talented, fun, passionate and creative people will do that for you. Our people, our community, our friends we have created over the years make it seem like we&#8217;ve worked together forever. We celebrate tonight you, our friends and colleagues who have helped us grow and succeed. I know we have all worked hard along the way knowing that it’s possible to love the work you do and the people who do it with you.  For Voce it’s always been about the people. We gravitate to good people and do our best to involve them and help them in building an environment of opportunity and reward.</p>
<p>There is no magic to it. It is our people, our community and our friends who deserve our congratulations.</p>
<p>So tonight we celebrate our people, past and present. We celebrate the scribes, journalists, analysts, influencers, pundits and all the people we contact on behalf of our clients: thank you for your dedication to the craft and for giving us the chance to tell our story. And we celebrate our clients, the people and organizations who took a chance on us. We are honored to be a part of your teams and programs.</p>
<p>Thank you, Voce Nation, for allowing me to work with the very best in the business.</p>
<p>As a parting thought, here is a snapshot of the headlines from 1999. Y2K software patch, anyone?</p>
<ul>
<li>Toy Story 2, Fight Club, The Matrix, Star Wars Episode I, and American Beauty are in the theaters.  Shakespeare in Love  wins Best Picture.</li>
<li>The Backstreet Boys set a first-week sales record, and Woodstock ’99 is held in Rome, NY</li>
<li>The Mandalay Bay Hotel opens in Vegas</li>
<li>The Dow closes above 10,000 for the first time on March 29.  The Dow closes above 11,000 for the first time on May 3.  (what bubble?)</li>
<li> Napster is born</li>
<li> Apple releases the first iBook</li>
<li> Lance Armstrong wins his first Tour de France</li>
<li> Viacom and CBS merge</li>
<li> World population reaches 6 billion</li>
</ul>
<img src="http://feeds.feedburner.com/~r/VoceNation/~4/G4PdK58aNYE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://vocecommunications.com/blog/2010/06/this-anniversary-goes-to-11/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://vocecommunications.com/blog/2010/06/this-anniversary-goes-to-11/</feedburner:origLink></item>
	</channel>
</rss>
