<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Technosailor.com&#187; Aaron</title>
	<atom:link href="http://technosailor.com/author/admin/feed/" rel="self" type="application/rss+xml" />
	<link>http://technosailor.com</link>
	<description>Business and Technology with Common Sense</description>
	<lastBuildDate>Thu, 24 May 2012 14:44:48 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.4-beta4-20883</generator>
		<item>
		<title>10 Things You Need to Know About WordPress 3.4</title>
		<link>http://technosailor.com/2012/05/23/10-things-you-need-to-know-about-wordpress-3-4/</link>
		<comments>http://technosailor.com/2012/05/23/10-things-you-need-to-know-about-wordpress-3-4/#comments</comments>
		<pubDate>Wed, 23 May 2012 20:50:27 +0000</pubDate>
		<dc:creator>Aaron</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[wordpress 3.4]]></category>
		<category><![CDATA[wordpress cheatsheets]]></category>
		<category><![CDATA[wordpress development]]></category>

		<guid isPermaLink="false">http://technosailor.com/?p=8564</guid>
		<description><![CDATA[WordPress 3.4 is around the corner. It&#8217;s currently beta4 which means a Release Candidate or three will be needed before it drops officially. If you want to test what&#8217;s out there now, the way to do that is through SVN. As usual, however, pre-release WordPress is not supported. As usual, however, I have been running trunk [...]]]></description>
			<content:encoded><![CDATA[<p>WordPress 3.4 is around the corner. It&#8217;s currently beta4 which means a Release Candidate or three will be needed before it drops officially. If you want to test what&#8217;s out there now, the way to do that is through <a href="http://core.svn.wordpress.org/trunk/">SVN</a>. As usual, however, pre-release WordPress is not supported. As usual, however, I have been running trunk throughout the entire development cycle without any problems.</p>
<p>Before I get into the guts of WordPress 3.4, I want to point you to a resource which highlights some of the thinking that is going into the development, now and in the future, of how WordPress is built. Andrew Nacin sent <a href="http://lists.automattic.com/pipermail/wp-hackers/2012-March/042586.html">an email</a> to the &#8220;hackers&#8221; mailing list discussing object-oriented development that informs the thinking of the core developers now that WordPress supports PHP 5.2 and true object-oriented programming.</p>
<p>While it may be over the head of non-developer types, the gist is that now that we (used loosely) can write code smarter, we&#8217;re working our way in that direction. Some of the code in WordPress has existed for &#8220;generations&#8221; of versions and is bulky and inefficient. With new tools at our fingertips, we can begin to approach the idea of refactoring some of this code in better ways. <em>Backwards compatibility is always retained, however, in 99 out of 100 times.</em> <strong><em>WE ARE NOT DRUPAL!</em></strong><em></em></p>
<p>Without further adieu, however, let&#8217;s get into what you can expect in the new version of WordPress.</p>
<h3>Embed Tweets with oEmbed</h3>
<p><img class="aligncenter size-large wp-image-8567" title="oembed" src="http://technosailor.com/files/oembed-600x156.jpg" alt="" width="600" height="156" />Since version <a href="http://technosailor.com/2009/11/11/10-things-you-need-to-know-about-wordpress-2-9/">2.9</a>, WordPress has supported a technology called <a href="http://oembed.com/">oEmbed</a> that, simply put, has allowed the inclusion of rich media in content in a very simple way. Simply paste a YouTube link on a new line, and WordPress turns it into a properly sized video. No embed code needed. Same for Vimeo, Flickr, Scribd and more. The entire list can be found on the <a href="http://codex.wordpress.org/Embeds">Codex</a>. Now, however, Twitter is supported. Simply place the URL of a tweet on it&#8217;s own line and&#8230; bam, you have this:</p>
<blockquote class="twitter-tweet" width="550"><p>Twitter is an oEmbed provider that is supported out of the box in WordPress 3.4</p>
<p>&mdash; Aaron Brazell (@technosailor) <a href="https://twitter.com/technosailor/status/205343003328512000" data-datetime="2012-05-23T17:02:41+00:00">May 23, 2012</a></p></blockquote>
<p><script src="//platform.twitter.com/widgets.js" charset="utf-8"></script></p>
<h3>Query Efficiency Improvements</h3>
<p><img class="aligncenter size-large wp-image-8568" title="query.php" src="http://technosailor.com/files/query.php_-600x331.jpg" alt="" width="600" height="331" />The common bottleneck for all WordPress users are database queries and data &#8220;munging&#8221;&#8230; that is, what WordPress does with data when it&#8217;s returned from the database. The query that brings in all the necessary content necessary to render a page used to look like this:</p>
<div class="codecolorer-container sql default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="sql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #993333; font-weight: bold;">SELECT</span> <span style="color: #66cc66;">*</span> <span style="color: #993333; font-weight: bold;">FROM</span> wp_posts <span style="color: #993333; font-weight: bold;">WHERE</span><span style="color: #66cc66;">...</span></div></td></tr></tbody></table></div>
<p>This has been how the query has worked for years. Really since the beginning of WordPress. And while, in theory that works (and it does, again it has for years), the core reality of this approach is that all the data in the posts table matching the criteria in the WHERE clause is more data than is needed, thus causing potential performance problems.</p>
<p>The <a href="http://core.trac.wordpress.org/ticket/18536">new approach is simple and elegant</a>. The first database query simply fetches a list of post IDs that fit the criteria provided in the WHERE clause.</p>
<div class="codecolorer-container sql default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="sql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #993333; font-weight: bold;">SELECT</span> ID <span style="color: #993333; font-weight: bold;">FROM</span> wp_posts <span style="color: #993333; font-weight: bold;">WHERE</span><span style="color: #66cc66;">...</span></div></td></tr></tbody></table></div>
<p>This approach means the amount of data in memory and floating around WordPress is concise and compact. PHP doesn&#8217;t have to work harder to traverse arrays or objects&#8230; it is simply a smaller list of data.</p>
<p>But what about the other data? We need the other data! Yes, in fact we do. But since WordPress has an object cache, much of this data is in the object cache. We don&#8217;t need to retrieve it from the database.</p>
<p>The second step is to look to the object cache for posts with IDs matching any of the IDs in the first dataset. Anything we can&#8217;t find is followed with a second query to get all the information matching the non-matched IDs using MySQL&#8217;s <code class="codecolorer sql default"><span class="sql"><span style="color: #993333; font-weight: bold;">IN</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span></span></code> function:</p>
<div class="codecolorer-container sql default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="sql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #993333; font-weight: bold;">SELECT</span> <span style="color: #66cc66;">*</span> <span style="color: #993333; font-weight: bold;">FROM</span> wp_posts <span style="color: #993333; font-weight: bold;">WHERE</span> ID <span style="color: #993333; font-weight: bold;">IN</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">10</span><span style="color: #66cc66;">,</span> <span style="color: #cc66cc;">34</span><span style="color: #66cc66;">,</span> <span style="color: #cc66cc;">78</span><span style="color: #66cc66;">&#41;</span>;</div></td></tr></tbody></table></div>
<p>By changing how SQL and object caching is used, WordPress 3.4 finds new efficiencies. In the original ticket, developers were observing 2-3x speed performance improvements. I&#8217;ll drink to that.</p>
<h3>Theme Customizer</h3>
<p><iframe width="600" height="338" src="http://www.youtube.com/embed/vD8v6u3noPg?fs=1&#038;feature=oembed" frameborder="0" allowfullscreen></iframe></p>
<p>Non-technical WordPress users will love the new Theme Customizer. Otto has a <a href="http://ottopress.com/2012/how-to-leverage-the-theme-customizer-in-your-own-themes/">great write-up</a> on this new feature. His video is above. The key takeaway from this new feature is that is possible now to customize a great number of things in a theme <em></em> from right within WordPress. On the fly. with a live preview.</p>
<p>Change your title, tagline, background color, image and more with a click of a mouse. I can see this being used to create child themes in the future, but for now, it manages settings that are already in WordPress (and accessible in other areas of the WordPress Admin) on the fly. The best way to really appreciate this feature is via Otto&#8217;s video above. Related: The best way to leverage this as theme developers is outlined in <em>great detail</em> in his post&#8230;</p>
<h3>Bundled &#8216;Touch&#8217; Support</h3>
<p><img class="alignleft size-large wp-image-8569" title="iphone" src="http://technosailor.com/files/iphone-300x450.png" alt="" width="300" height="450" />We live in a touchy-feeley world. And by that, I mean mobile. Specifically iOS and Android. In WordPress 3.3, we saw <a title="10 Things You Need to Know About WordPress 3.3" href="http://technosailor.com/2011/11/17/10-things-you-need-to-know-about-wordpress-3-3/">adaptive design</a> come to portions of WordPress. Adaptive design, for the uninitiated, is a technology that elegantly resizes a website to adapt to the the screen it is rendered on. It is a way for developers to create a single experience that works on desktop/laptop browsers as well as mobile interfaces with arbitrary resolutions.</p>
<p>As mobile continues to lead the charge in today&#8217;s web, WordPress 3.4 has bundled the <a href="http://touchpunch.furf.com/">jQuery UI Touch Punch</a> library that will give front-end developers more tools to work with in making a website mobile-friendly. Simply include the library via <code class="codecolorer php default"><span class="php">wp_enqueue_script<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span></span></code> and now your element has the <code class="codecolorer javascript default"><span class="javascript">.<span style="color: #660066;">draggable</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span></span></code> method available. This method enables &#8220;drag and drop&#8221; support that was previously unavailable and the one major caveat is that <a href="http://wpdevel.wordpress.com/2012/05/03/wordpress-3-4-tablets-touch-ui/">it does not support Windows 7/7.5 phones</a> due to limitations in the IE9 browser.</p>
<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br /></div></td><td><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;">&lt;?php</span><br />
<span style="color: #000000; font-weight: bold;">class</span> My_Awesome_Plugin <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> __construct<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">hooks</span><span style="color: #009900;">&#40;</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: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> hooks<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; add_action<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'wp_head'</span><span style="color: #339933;">,</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$this</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'js'</span> <span style="color: #009900;">&#41;</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: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> js<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; wp_enqueue_script<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'jquery'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; wp_enqueue_script<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'jquery-ui'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; wp_enqueue_script<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'jquery-touch-punch'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; wp_print_scripts<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">?&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;script&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; jQuery(document).ready(function(){<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; jQuery('#element').draggable();<br />
&nbsp; &nbsp; &nbsp; &nbsp; });<br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;/script&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">&lt;?php</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span><br />
<span style="color: #000088;">$my_awesome_plugin</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> My_Awesome_Plugin<span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<h3>HTML in Captions</h3>
<div id="attachment_8570" class="wp-caption aligncenter" style="width: 610px"><img class="size-large wp-image-8570" title="redsox" src="http://technosailor.com/files/redsox-600x398.jpg" alt="Red Sox" width="600" height="398" /><p class="wp-caption-text">Photo by <a href="http://www.flickr.com/photos/kylemccluer/4516481287/">Kyle McCluer</a> and used under <strong>Creative Commons</strong>. <em>Some Rights Reserved.</em></p></div>
<p>I&#8217;m trying to rotate between developer tools and user tools in this article, so at this time, I&#8217;d like to point out a simple yet important frustration in previous versions of WordPress. When you upload an image and use the media uploader to then insert an image, you have the option of writing a caption. Sadly, it was impossible to include HTML in previous WordPress versions.</p>
<p>Often times, linking the source of a photo is welcome and, possibly depending on the usage restrictions on a photo, required. Before, the only way to do that was to set a link in the media uploader and then <em>the photo</em> would be linked. Now, in WordPress 3.4, you can include basic HTML in your captions as I have done above.</p>
<h3>XML-RPC Improvements</h3>
<p>XML-RPC. The thing that allows the WordPress apps for Android, BlackBerry and iOS to function. The thing that allows offline editors to function by remotely communicating with WordPress through a public-facing API.</p>
<p>XML-RPC is a venerable technology that is based mainly on the <a href="http://xmlrpc.scripting.com/metaWeblogApi.html"><em>Metaweblog API</em></a> invented a decade ago. WordPress has supported this iteration of XML-RPC as well as the <a href="http://www.movabletype.org/documentation/man/MT/XMLRPC.html">Movable Type XML-RPC</a> and <a href="http://codex.wordpress.org/XML-RPC_Blogger_API">Blogger XML-RPC</a> APIs for a long, long time. However, WordPress has also extended the Metaweblog API and added it&#8217;s own methods along the way.</p>
<p>No more. Instead of band-aiding a solution on top of a limited set of methods intended for blogging only, WordPress 3.4 includes a brand new <a href="http://codex.wordpress.org/XML-RPC_WordPress_API">WordPress XML-RPC</a> API designed to support all the rich features that have evolved since WordPress started focusing on CMS-style features. It incorporates all the methods introduced before as extensions to Metaweblog such as wp.getOptions, wp.getMediaItem, etc and introduces new ones such as wp.getPostTypes and wp.getTaxonomies to name just a few.</p>
<p>It&#8217;s important to note that <em>only</em> WordPress products are likely to ship with support for this new API at first, but old capabilities will still exist and function, as backwards compatibility is ensured. As API clients add support for WordPress&#8217; new capabilities, we will see more common usage.</p>
<h3>Internationalization (i18n) Improvements</h3>
<p>For international WordPress users, WordPress 3.4 continues the tradition of enhancing your experience. As we in the community have stated many times, i18n is incredibly important to WordPress growth and development. In discussing this article with someone inside of the WordPress core community, I am told 2 out of every 3 WordPress users are non-American. Additionally, I am told that 40% of WordPress installations are non-english.</p>
<p><strong>That&#8217;s Huge!</strong></p>
<p>The running list of i18n chages in WordPress 3.4 is <a href="http://wppolyglots.wordpress.com/important-changes-for-wordpress-3-4/">here</a>. Some notable changes include:</p>
<ul>
<li>Comma translation. While most languages use a comma as a separater (or delimiter), some do not. This enhancement is useful for languages like Chinese and Arabic that don&#8217;t use a comma.</li>
<li>Single-Double quote translation. It&#8217;s odd to think, but some languages like Hebrew, actually have distinct meanings for jots that are punctuation marks in an English world.</li>
<li>Default Timezones. It&#8217;s possible now to override the timezone WordPress uses in a translation. This, as you can imagine, is important when a language is largely spoken in one region in a single timezone.</li>
</ul>
<h3>Page Template Handling</h3>
<p>For theme developers looking to put more organization around their theme file structure, a new change has gone in that has both an obvious, front-facing benefit as well as a background benefit. Now, you can place any page template inside a subdirectory of a theme. So you can now have a <code class="codecolorer text default"><span class="text">/pages/</span></code> subdirectory and segregate all of your extraneous one-off or multi-use page templates to that folder (or any folder). WordPress will identify all page templates in the theme root or in a subdirectory of a theme root and make them available for pages to use.</p>
<p>The background benefit of this comes in a new <code class="codecolorer php default"><span class="php">WP_Theme</span></code> API that is lighter weight, more efficient and handles all the work for you. It&#8217;s important to note that most developers will never need to use this API and it is largely considered an &#8220;internals&#8221; thing.</p>
<p>In relation to the i18n improvements discussed earlier, the headers in these page templates are also now translatable. Simply include a <code class="codecolorer text default"><span class="text">Text Domain:</span></code> and <code class="codecolorer text default"><span class="text">Domain Path:</span></code> header in your style.css where the textdomain is the defined textdomain for translations (i.e. twentyeleven) and the Domain Path is the path relative to the stylesheet directory (i.e. the proper place the theme is regardless of if it&#8217;s a parent theme or a child theme) where the POT file is (<code class="codecolorer text default"><span class="text">/langs</span></code>). I don&#8217;t want to get too deep into this as Andrew Nacin, the architect of this feature, plans to put out a <a href="http://nacin.com/tag/field-guide/">field guide</a> going into detail. Stay tuned to that.</p>
<h3>Custom Header API</h3>
<p>For a few versions now, WordPress has supported two functions <code class="codecolorer php default"><span class="php">add_custom_header_image<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span></span></code> and <code class="codecolorer php default"><span class="php">add_custom_background<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span></span></code>. These two functions have added new menus for designating header and background images to the Appearances menu.</p>
<p>WordPress 3.4 introduces a new API for dealing with custom headers and backgrounds and introduces new flexibility in terms of image sizes, etc. The two functions above have been deprecated (which means they&#8217;ll work for awhile but will ultimately go away, so use the new techniques) and replaced with new theme support. If you recall from previous version, we use the <code class="codecolorer php default"><span class="php">add_theme_support<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span></span></code> function to, well, add support for a feature in a theme. To integrate the new stuff, include these lines in your theme <code class="codecolorer text default"><span class="text">functions.php</span></code>:</p>
<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br /></div></td><td><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;">&lt;?php</span><br />
add_theme_support<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'custom-header'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
add_theme_support<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'custom-background'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>Both function calls can take a second argument which must be an array of presets, but it&#8217;s entirely optional. To omit the second argument renders behavior as we&#8217;ve known it for some time. To include it allows theme developers to designate designate parameters for both elements, that can then be customized by the end user.</p>
<p>For custom headers, you may include defaults along these lines (gregariously stolen from <a href="http://codex.wordpress.org/Custom_Headers">the Codex</a>):</p>
<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br /></div></td><td><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;">&lt;?php</span><br />
<span style="color: #000088;">$defaults</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">'default-image'</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">'random-default'</span> &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">'width'</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">'height'</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">'flex-height'</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">'flex-width'</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">'default-text-color'</span> &nbsp; &nbsp; <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">'header-text'</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">'uploads'</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">'wp-head-callback'</span> &nbsp; &nbsp; &nbsp; <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">'admin-head-callback'</span> &nbsp; &nbsp;<span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">'admin-preview-callback'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">,</span><br />
<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
add_theme_support<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'custom-header'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$defaults</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>Likewise, for custom background defaults you might have this:</p>
<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br /></div></td><td><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;">&lt;?php</span><br />
<span style="color: #000088;">$defaults</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">'default-color'</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">'default-image'</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">'wp-head-callback'</span> &nbsp; &nbsp; &nbsp; <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'_custom_background_cb'</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">'admin-head-callback'</span> &nbsp; &nbsp;<span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">'admin-preview-callback'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">''</span><br />
<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
add_theme_support<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'custom-background'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$defaults</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<h3>Bonus</h3>
<p>Did you know?</p>
<ul>
<li>PHP end of file closing PHP tags are now removed. Those are these &#8211; <code class="codecolorer php default"><span class="php"><span style="color: #000000; font-weight: bold;">?&gt;</span></span></code> Why is this important? Including the closing tag means that if there is any white space at the end of a file, PHP is likely to break. Omission means that PHP assumes a close tag at the end of the file and whitespace can&#8217;t corrupt. Personally I&#8217;ve argued for this in the past. The main opponent must have been in a coma when this was slipped through by other core developers.</li>
<li>Distraction Free Writing, first introduced in <a href="http://technosailor.com/2011/06/20/10-things-you-need-to-know-about-wordpress-3-2/">WordPress 3.2</a> is now supported by all custom post types.</li>
<li>The theme installer now has infinite scroll which is just kind of pretty aesthetic thing. It also defaults to keyword searches when you&#8217;re browsing for a new theme on the WordPress Theme repository.</li>
<li>Internal functions and classes now output &#8220;rtl&#8221;, &#8220;ie7&#8243;, &#8220;ie8&#8243;, etc as classes for browser targetting.
</ul>
]]></content:encoded>
			<wfw:commentRss>http://technosailor.com/2012/05/23/10-things-you-need-to-know-about-wordpress-3-4/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>User Generated Hiring</title>
		<link>http://technosailor.com/2012/05/22/user-generates-hiring/</link>
		<comments>http://technosailor.com/2012/05/22/user-generates-hiring/#comments</comments>
		<pubDate>Wed, 23 May 2012 01:30:02 +0000</pubDate>
		<dc:creator>Aaron</dc:creator>
				<category><![CDATA[social media]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[hiring]]></category>
		<category><![CDATA[linkedin]]></category>
		<category><![CDATA[Social Media]]></category>

		<guid isPermaLink="false">http://technosailor.com/?p=8562</guid>
		<description><![CDATA[I was not at the latest incarnation of Social Media Club Austin. I stopped going to SMC back in DC. The reason is&#8230; Marketing has usurped social media. Today, when someone mentions a social media job, it&#8217;s almost always a marketing job. This is all wrong. Social media pertains to every industry. Not just marketing. [...]]]></description>
			<content:encoded><![CDATA[<p>I was not at the latest incarnation of Social Media Club Austin. I stopped going to SMC back in DC. The reason is&#8230; Marketing has usurped social media.</p>
<p>Today, when someone mentions a social media job, it&#8217;s almost always a marketing job. This is all wrong. Social media pertains to <em>every</em> industry. Not just marketing. And I&#8217;m tired of it being bastardized by coat-riders.</p>
<p>I was using social media in 2000 on forums. It&#8217;s how I learned my art. Or the beginnings of it. I started blogging in 2003 long before Twitter, Facebook and LinkedIn. </p>
<p>When panelists say, &#8220;I&#8217;d look at LinkedIn&#8221; or, &#8220;I&#8217;d look at Facebook&#8221; when asked what source they would look to if they could only choose one in the hiring process&#8230; I want to smack my face!</p>
<p>Why are you going to rely on user-generated content to validate an employee. Ask Yahoo! And their board how that worked out for them.</p>
<p>I can say anything I want. CS degree from University of Maryland (Go Terps!) and 6 years of experience using social media (true, I was a Twitter early adopter and a Facebook member in 2006 when they opened up their walled garden to non-college students). It doesn&#8217;t make it <em>true!</em></p>
<p>But I&#8217;m not the guy they want. They want someone with digital marketing experience. </p>
<p>So why the fuck are they looking at FB or LI??</p>
<p>I mean, the bar is set low, right?</p>
<p>I&#8217;ve got 10kish followers on Twitter. I must be important. Maybe not as important as, say, <a href="http://twitter.com/katyperry">@katyperry</a>, but I must be an awesome communicator&#8230;</p>
<p>Hahah. Do you see the bullshit I tweet? And my follower count keeps going up! And people still want to hire me for their bullshit marketing jobs!</p>
<p>Common sense&#8230; Checked out.</p>
<p>Ronald Reagan said, &#8220;Trust yet verify&#8221;. Clearly Yahoo! didn&#8217;t do that.</p>
<p>And here&#8217;s the crux. You&#8217;re trusting marketers looking for a job to paint an accurate picture of themselves on social networks that are infested with self-aggrandizing?</p>
<p>&#8220;Oh I know the CEO of Startupr&#8230; The instagram of photo sharing&#8221;.</p>
<p>O RLY?  Do tell!</p>
<p>Fuck that noise.</p>
<p>There&#8217;s a reason the FBI, CIA and NSA do extensive background checks and polygraphs. And the polys have to be re-upped. Every 5 years. Do we still trust him? Can we verify? Has he cheated on his wife and is he susceptible to blackmail? Same with credit checks. If he needs money, what will he do with our secrets?</p>
<p>(I&#8217;d fail)</p>
<p>So stop blowing smoke and hand-jobbing people. That communication intern may be cheap but he&#8217;s got 6 months experience and has no LinkedIn quality.</p>
<p>Look at GitHub. That&#8217;s social media. Oh but damn&#8230; It&#8217;s not marketing. Yeah but the code is public and you can bet on ACTUAL data rather that user-generated data.</p>
<p>By the way&#8230; I graduated from Stanford.</p>
]]></content:encoded>
			<wfw:commentRss>http://technosailor.com/2012/05/22/user-generates-hiring/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Crazy Christians and Bad Spam and Mailing List Management</title>
		<link>http://technosailor.com/2012/04/27/bad-spam-and-mailing-list-management/</link>
		<comments>http://technosailor.com/2012/04/27/bad-spam-and-mailing-list-management/#comments</comments>
		<pubDate>Fri, 27 Apr 2012 21:24:39 +0000</pubDate>
		<dc:creator>Aaron</dc:creator>
				<category><![CDATA[Spam]]></category>
		<category><![CDATA[christians]]></category>
		<category><![CDATA[don't fuck with me]]></category>
		<category><![CDATA[Email]]></category>
		<category><![CDATA[otherinbox]]></category>
		<category><![CDATA[spam]]></category>

		<guid isPermaLink="false">http://technosailor.com/?p=8557</guid>
		<description><![CDATA[I somehow got added to a mailing list recently unsolicited. It&#8217;s called Christian Report and I refuse to link to them. It is an arrogant, self-serving site that is plagued by guilt. There is therefore now no condemnation for those that are in Christ Jesus. -Romans 8:1 What is seriously tragic about this site (aside [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-large wp-image-8558" title="spam" src="http://technosailor.com/files/spam-600x338.jpg" alt="" width="600" height="338" />I somehow got added to a mailing list recently unsolicited. It&#8217;s called Christian Report and I refuse to link to them. It is an arrogant, self-serving site that is plagued by guilt.</p>
<p style="text-align: center;"><em>There is therefore now no condemnation for those that are in Christ Jesus. -Romans 8:1</em></p>
<p style="text-align: left;">What is seriously tragic about this site (aside from the content) is that I was added to this mailing list unknown. For God knows what reason. I mean, I&#8217;m used to getting spam and all, but at least a mailinglist has an unsubscribe, right?</p>
<p style="text-align: left;">I am a user of <a href="http://otherinbox.com">Other Inbox</a>, which has this neat &#8220;Unsubscribe&#8221; feature. Drag mail in Gmail (Or Yahoo mail) to the Unsubscribe folder and, in theory, they will unsubscribe you safely from spam or mailing list and, if they can&#8217;t, they&#8217;ll just sequester mail in the future so you don&#8217;t have to see it. Except it wasn&#8217;t working for this particular listserv as I&#8217;ve been doing that for a few weeks.</p>
<p style="text-align: left;">So I finally manually unsubscribed yesterday. Typical unsubscribe process that&#8217;s normal with this particular very common listserv&#8230; it should be done, right?</p>
<p style="text-align: left;">Wrong. I got another one today.</p>
<p style="text-align: left;">This led me to find the site and manually contact the owner asking why my unsubscribe wasn&#8217;t being honored. Within an hour, I finally got the unsubscribe confirmation.</p>
<p style="text-align: left;">I offer, without comment, the text of that email. Sufficed to say, I&#8217;m sure I&#8217;ll end up on this list again and I can&#8217;t wait to report them to the authorities on such matters.</p>
<p style="text-align: left;">&#8212;</p>
<blockquote>
<p style="text-align: left;"><em>Wow!  We can&#8217;t believe you are leaving!  So Sad.</em></p>
<p><em>#1) If it because we have you on multiple emails and you need to get</em><em>it down to one, we understand, if that&#8217;s the case then disregard the</em><em>following messages&#8230;</em></p>
<p><em>#2) To those who are leaving all together because they refuse to </em><em>believe the REALITY that All have sinned and ALL will be judged and </em><em>found GUILTY by Father God.  And then the WRATH of God will come upon </em><em>them for ETERNITY:  Then they will be sentenced to God&#8217;s prison; The </em><em>Lake of Fire also known as HELL for committing JUST ONE sin in their </em><em>entire lives. However, God loves EVERYONE, not just some He supposedly </em><em>pre-chose, so He provided a way out of this INEVITABLE consequence of </em><em>our sin.  He came down to earth  in the Man Jesus Christ.  He lived a </em><em>SINLESS life, teaching and preforming countless miracles.  Then He was </em><em>crucified by the Jewish leaders of the time as a criminal, some of </em><em>which knew in their hearts He was the Messiah.  Because the Staff of </em><em>corporal punishment was taken from them years before, the Jews </em><em>employed the Romans to Crucify Jesus. But then Jesus beat DEATH and </em><em>rose again 3 days later after the Passover.  Over 500 Jews,</em><em>Christians, Romans, and many other tongues witnessed Jesus after His </em><em>death. Jesus then COMMANDS us to REPENT of our sins, realize that We </em><em>need a Savior to pay the debt that is owed by us to God for our sin,</em><em>and that Savior is in fact Jesus Christ.  We MUST believe in Him. We</em><em>CANNOT give lip service to such a thing.  God PROMISES us that if we </em><em>Truly Believe in Him, then He will destroy the old man and create a </em><em>NEW Creature CHRIST. This moment that happens is called REGENERATION. </em><em>At that point we will no longer be a slave to sin.  We will hate the </em><em>things of this wicked world and LOVE the Things of His Kingdom. If you </em><em>merely gave Jesus lip service, then you will continue practicing sin </em><em>and seeking the lusts of this world.  That will be the EVIDENCE that </em><em>you are not a Christian. The MAJORITY of western Christians are </em><em>hypocrites, thus you as non-beleiver are wondering whether this God is </em><em>real or not. The Bible tells us that His chosen saints will depart </em><em>from inequity (sin), therefore those who you see as hypocrites are </em><em>indeed hypocrites and ARE NOT  Christians.  Those people will hear the </em><em>words of Jesus as described in Matthew 7:20-23 upon Judgment Day. But </em><em>friend, that is not of your concern.  Salvation is personal.  There </em><em>won&#8217;t be a priest, lawyer, or relative with you on the moment of your </em><em>death.  In a snap, you will be facing your Creator who will know EVERY </em><em>secret sin you did.  And you will be found GUILTY of those CRIMES and </em><em>sent to HELL. So I beg you to read the Book of John TONIGHT and repent </em><em>of your sins and choose eternal life in heaven instead of eternal life </em><em>in HELL.</em></p>
<p><em># 3) If you are claiming to be a Christian then&#8230; Why are you going? </em><em>Was it because the TRUTH was too hard to swallow?  After 12 years of </em><em>street preaching, we have found that the MAJORITY of western</em><em>&#8220;christians&#8221; are deceived by the god of this world!  That is a painful </em><em>reality, but true.  If you are believing that your social club church </em><em>is actually part of &#8220;The Church&#8221; when it resembles MORE of the world </em><em>than it does of Scripture, then you are deceived. A true Christian has </em><em>departed from sin, 2 Tim 2:19.  If you are practicing sin, then you are </em><em>NOT a Christian, 1 John 3:8,  no matter what your church, pastor, and </em><em>other unsaved christian friends tell you! You may have been deceived </em><em>into believing from your social church conditioning that anyone who </em><em>states what I just stated is unloving, judgmental, rude, legalistic, </em><em>and a Pharisee.  But that is EXACTLY what the Deceiver has taught them</em><br />
<em> to make you believe.  The BIBLE states the EXACT opposite.  If we are </em><em>spiritual, then we are to JUDGE ALL things, 1 Corinthians 2:15. </em><em>Obeying God&#8217;s Commandments is NOT legalistic, Jesus says that if we </em><em>LOVE Him, we will obey, John 14:15 &amp; 23, not to earn our salvation but </em><em>in fact to show EVIDENCE of it.  Ask your self what is more loving.</em><em>To have knowledge of the Truth and tell you about it. Or to keep quiet </em><em>and and make nicey nice with you here on earth without the least care </em><em>about your eternal life?  The Bible is clear as to which is the REAL </em><em>Christian, it is he who speaks the Truth to you from His WORD.  Not </em><em>the false Christian who values temporal relationships here on earth</em><em>while believing they themselves are going to heaven and their</em><em>&#8220;friends&#8221; are not.  A true friend will WARN you of the dangers ahead. </em><em>Remember, Jesus did not come here to bring peace, He came to bring </em><em>Truth, Matthew 10:34-38.  Your New Evangelical Modern Gospel has </em><em>brainwashed you into believing that we should be more concerned about</em><em>one&#8217;s feelings or our &#8220;love&#8221; for each other than we should be </em><em>concerned for our first Love, Jesus, and OBEDIENCE to Him above all. </em><em>We CANNOT help you if you wish to believe those who condemn us.  We </em><em>suggest you walk away from that false church and read the Word daily </em><em>for at least 2 hours per day.  Please pray that God delivers you from </em><em>the deception that you have been brainwashed into by the false</em><em>teachers, churches, and ministries of the western culture. Otherwise </em><em>you may hear the Words of Jesus in Matthew 7:20-23.</em></p>
<p><em>We will be praying for you.</em></p>
<p><em>The Christian Report Staff</em></p></blockquote>
<p>&#8212;</p>
<p>The more you know!</p>
]]></content:encoded>
			<wfw:commentRss>http://technosailor.com/2012/04/27/bad-spam-and-mailing-list-management/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Tech: We Need to Start Being Feminists. Stat!</title>
		<link>http://technosailor.com/2012/04/26/tech-we-need-to-start-being-feminists-stat/</link>
		<comments>http://technosailor.com/2012/04/26/tech-we-need-to-start-being-feminists-stat/#comments</comments>
		<pubDate>Thu, 26 Apr 2012 19:42:21 +0000</pubDate>
		<dc:creator>Aaron</dc:creator>
				<category><![CDATA[Feminism]]></category>
		<category><![CDATA[equality]]></category>
		<category><![CDATA[feminism]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://technosailor.com/?p=8555</guid>
		<description><![CDATA[How are some of the brightest minds on the internet not seeing the harm in how we collectively perceive women, women in tech, women in our industry?

How is it funny to send nude photos of women to a prospective boss and get hired as a result?

How is it humorous to make jokes about "gangbang interviews" in a professional presentation?

How is this okay?]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<div id="attachment_8556" class="wp-caption aligncenter" style="width: 610px"><a href="http://www.flickr.com/photos/artiseverywhere/3987414509/"><img class="size-large wp-image-8556" title="OLYMPUS DIGITAL CAMERA" src="http://technosailor.com/files/feminism-600x450.jpg" alt="" width="600" height="450" /></a><p class="wp-caption-text">Used under Creative Commons. Photo by Jay Morrison.</p></div>
<p><a href="http://motherjones.com/media/2012/04/silicon-valley-brogrammer-culture-sexist-sxsw">This</a>.</p>
<p>That extends <a href="http://technosailor.com/2012/04/09/scantily-clad-women-are-for-the-bedroom-not-the-showroom-floor/">this</a> I wrote about a few weeks ago.</p>
<p><strong>This is pissing me the hell off! </strong>All that. It all needs to stop.</p>
<p>How are some of the brightest minds on the internet <em>not</em> seeing the harm in how we collectively perceive women, women in tech, women in <em>our</em> industry?</p>
<p>How is it funny to send nude photos of women to a prospective boss and get hired as a result?</p>
<p>How is it humorous to make jokes about &#8220;gangbang interviews&#8221; in a professional presentation?</p>
<p>How is this okay?</p>
<p>In the context of discussion around this article, someone said something to the effect of, &#8220;Well, you know, most resumés I get are from guys so I just hire best available.&#8221;</p>
<p>Bullshit. Recruitment is everything, especially when small. And not just for gender equality. You always want to find the best and sometimes the best are working for another company. Sometimes the best are working for themselves and they need to be convinced to come work for you. You have to be <em>proactive</em> to find who you want. If you take the passive approach, you&#8217;ll almost always get mediocre talent.</p>
<p>I&#8217;ve always proactively recruited as a hiring manager. We were reminiscing yesterday about the &#8220;vintage&#8221; days of b5media (which was just acquired, congrats!) when <a href="http://twitter.com/brianlayman">Brian Layman</a> posted an old article <a href="http://thecodecave.com/2007/05/21/my-interview-with-b5media/">describing his interview</a>. We eventually hired him (because I personally recruited and hand-picked him) and he ended up being one of the best developers the company ever had.</p>
<p>If you want women in your company, don&#8217;t be a douche, go out and find them and hire them. Pay them top salaries along with all your guys.</p>
<p>I will eventually be a hiring manager again and I pledge that I will make every good faith effort to hire at least one woman for every man I hire. Obviously, I&#8217;m not naive. It may not always be possible. But to the best of my ability, I will do this.</p>
<p>Hey industry, we need to stop paying lip service to feminism. Let&#8217;s <em>be </em>feminists and practice what we preach.</p>
]]></content:encoded>
			<wfw:commentRss>http://technosailor.com/2012/04/26/tech-we-need-to-start-being-feminists-stat/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>David Simon on Debate and Journalism</title>
		<link>http://technosailor.com/2012/04/26/david-simon-on-debate-and-journalism/</link>
		<comments>http://technosailor.com/2012/04/26/david-simon-on-debate-and-journalism/#comments</comments>
		<pubDate>Thu, 26 Apr 2012 17:05:44 +0000</pubDate>
		<dc:creator>Aaron</dc:creator>
				<category><![CDATA[Quotes]]></category>
		<category><![CDATA[debate]]></category>
		<category><![CDATA[Journalism]]></category>
		<category><![CDATA[news room]]></category>

		<guid isPermaLink="false">http://technosailor.com/?p=8553</guid>
		<description><![CDATA[It’s why I used to love a healthy newsroom, which I have described as a magical place where everyone disagrees with everything all of the time.  Arguments make the work better; when people stop arguing, or at least arguing intelligently, absent the usual half-assed, rhetorical cheating, the work invariably suffers.]]></description>
			<content:encoded><![CDATA[<blockquote><p>It’s why I used to love a healthy newsroom, which I have described as a magical place where everyone disagrees with everything all of the time.  Arguments make the work better; when people stop arguing, or at least arguing intelligently, absent the usual half-assed, rhetorical cheating, the work invariably suffers.</p></blockquote>
<p>(Source: <a href="http://davidsimon.com/introduction2/">davidsimon.com</a>)</p>
]]></content:encoded>
			<wfw:commentRss>http://technosailor.com/2012/04/26/david-simon-on-debate-and-journalism/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Scantily Clad Women are for the Bedroom, not the Showroom Floor.</title>
		<link>http://technosailor.com/2012/04/09/scantily-clad-women-are-for-the-bedroom-not-the-showroom-floor/</link>
		<comments>http://technosailor.com/2012/04/09/scantily-clad-women-are-for-the-bedroom-not-the-showroom-floor/#comments</comments>
		<pubDate>Mon, 09 Apr 2012 17:00:08 +0000</pubDate>
		<dc:creator>Aaron</dc:creator>
				<category><![CDATA[Feminism]]></category>
		<category><![CDATA[adtech]]></category>
		<category><![CDATA[sex]]></category>
		<category><![CDATA[tech]]></category>

		<guid isPermaLink="false">http://technosailor.com/?p=8550</guid>
		<description><![CDATA[I love women. I love scantily clad women. I think the majority of men, and of course some women, would agree with me. Sexual attraction is inherently part of the human experience and part of the instinctual core that makes up who we are. The same goes for women with men.]]></description>
			<content:encoded><![CDATA[<p>I love women. I love scantily clad women. I think the majority of men, and of course some women, would agree with me. Sexual attraction is inherently part of the human experience and part of the instinctual core that makes up who we are. The same goes for women with men.</p>
<p>However, <a href="http://www.digiday.com/social/the-10-most-stereotypical-adtech-photos/">this is not okay</a>.</p>
<p>*This* is a glimpse inside Ad:Tech San Francisco. Maybe not all of Ad:Tech. Maybe not even most of Ad:Tech. But it&#8217;s certainly a representation of how at least a few people decided to capture it. And this is not directed toward the photographers, at least one of whom I am personally acquainted with. And certainly not directed toward the women who are captured in the photographs or women who have embraced their own sexuality and their own representation of it.</p>
<p>It&#8217;s not directed toward sex in art, sex in social commentary, sex in music, sex in film, or choice of sexual exhibitionism. This is entirely about the objectifying of women for comercial gain.</p>
<p>Sex sells, right? It&#8217;s been used for decades to touch on an instinctual desire, particularly in men, that ties desire to a commercial action, such as buying. This is why the porn industry is so huge. This is why men will pour hundreds, if not thousands of dollars, into the sex industry and the industry thrives.</p>
<p>I am not naive, nor am I a curmudgeon. As a man, I readily admit to, at least occasionally, &#8220;Thinking with my penis&#8221;&#8230;</p>
<p>But this is an industry that is loosely defined as &#8220;tech&#8221; and tech is largely dominated by men. We have an image problem. On one hand, the industry as a whole has spoken out vocally about the representation of women in presentations, at conferences, on speaker lineups, etc. We have vilified organizations that put on events not proportionally represented by women and yet&#8230; somehow it&#8217;s okay, with a wink and a nod, to put women on display on show room floors for the purpose of selling a product. That&#8217;s, somehow, okay&#8230; even if no one will say that. After all, these &#8220;booth babes&#8221; are getting paid and this is their job. Sure, gimme a free tee-shirt or a brand-labeled rubber band ball. Cool.</p>
<p>I love scantly clad women as much as the next guy. I&#8217;d rather she be in my bedroom or sipping a bourbon and ginger at a bar or show, than pushing some new mobile ad network on a showroom floor so the married ad executive from Burbank can get his nards off. To me, this is a practice that really needs to end.</p>
<p>Note: Despite my desire to use a sexy image for this post, I&#8217;ve chosen not to for obvious reasons.</p>
]]></content:encoded>
			<wfw:commentRss>http://technosailor.com/2012/04/09/scantily-clad-women-are-for-the-bedroom-not-the-showroom-floor/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Twitter as a Protocol</title>
		<link>http://technosailor.com/2012/03/01/twitter-as-a-protocol/</link>
		<comments>http://technosailor.com/2012/03/01/twitter-as-a-protocol/#comments</comments>
		<pubDate>Thu, 01 Mar 2012 20:06:01 +0000</pubDate>
		<dc:creator>Aaron</dc:creator>
				<category><![CDATA[Twitter]]></category>
		<category><![CDATA[protocols]]></category>
		<category><![CDATA[rfc]]></category>
		<category><![CDATA[standards]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://technosailor.com/?p=8548</guid>
		<description><![CDATA[Yesterday, I had lunch with a guy who was picking my brain about various topics. One of the conversations we ended up having was about the longevity of Twitter as a company. It hearkens back to conversations I had years ago when Twitter was barely making it as a service. It was down seemingly half the time, a problem they have long since solved.]]></description>
			<content:encoded><![CDATA[<div id="attachment_8549" class="wp-caption aligncenter" style="width: 610px"><a href="http://www.flickr.com/photos/thecampbells/5042764163/"><img class="size-large wp-image-8549" title="twitter-sketch" src="http://technosailor.com/files/twitter-sketch-600x450.jpg" alt="Twitter" width="600" height="450" /></a><p class="wp-caption-text">Image from Shawn Campbell. Used under Creative Commons</p></div>
<p>Yesterday, I had lunch with a guy who was picking my brain about various topics. One of the conversations we ended up having was about the longevity of Twitter as a company. It hearkens back to conversations I had years ago when Twitter was barely making it as a service. It was down seemingly half the time, a problem they have long since solved.</p>
<p>In those days of 2007 and 2008, Twitter was just beginning it&#8217;s conquest of communication mediums. It was nowhere near as big, influential or <em>necessary</em> as it is today. It was getting there but it wasn&#8217;t there yet. And it was failing. And people were jumping ship to more reliable services.</p>
<p>In those days, I posed the concept that Twitter should not be a company alone. It should be an open protocol much like HTTP or email protocols (IMAP/POP). There should be an adopted industry standard that Twitter, the company, should and could (and still can) champion and work through with the guidance of other industry members.</p>
<p>The point is this: When Twitter, the company, goes away as it likely will at some point (hopefully years from now), then what will we as a society &#8211; and the human race &#8211; do?</p>
<p>Already, Twitter has had direct intervention from the State Department because governments are seeing it as a vital communication medium. Is anything classified as vital safe in the hands of a single private entity? Not that Twitter, Inc. isn&#8217;t doing a fine job of it, but there is a concept of continuity that is lost here.</p>
<p>To this day, Twitter is still trying to figure out how to make money. They are still trying to find their sustainable model. And that doesn&#8217;t even address the issue of infinite scaleability. What happens if every human being on the planet had a Twitter account (it&#8217;s a hypothetical as that will never happen)? What happens when the societal demand on Twitter, Inc. is so vast that no single entity can sustain it? It&#8217;s coming. Hopefully not for awhile, but it is coming.</p>
<p>If the State Department considers Twitter as an essential and vital service, necessary to Homeland Security and International Relations, doesn&#8217;t it go to wonder why the State Department, among others, isn&#8217;t pushing for a Twitter Open Standard.</p>
<p>This is what I&#8217;m thinking. Twitter (the protocol) would allow anyone to build their own versions of Twitter that communicate interchangeably over a common set of protocols. This idea was attempted with <a href="http://identi.ca/">Identi.ca</a> but without the support and integration of Twitter, it stands no chance on its own.</p>
<p>Of course, Twitter is going the exact opposite direction of opening and heading in the direction of siloed &#8220;walled gardens&#8221;. Even Facebook, the ultimate modern-day walled-garden is opening up their service in other ways &#8211; but even they are not doing what I&#8217;m suggesting.</p>
<p>There should be a non-profit, independent &#8220;Twitter Foundation&#8221; that champions this cause, brings trade organizations - <em>including Twitter, Inc.</em> &#8211; together to begin work on a public standard protocol. Companies like Twitter, Inc.  should champion and use this public protocol and build services around it. All of Twitter does not have to be public standard but common elements like &#8220;friends&#8221;, &#8220;followers&#8221;, &#8220;messages&#8221;, &#8220;direct messages&#8221; and &#8220;replies&#8221; should all be part of this standard.</p>
<p>Work on this needs to begin now. RFCs take a long long time before they are considered final. The first draft of the HTML5 spec was released in 2008 and it&#8217;s still not stable. The 802.11n wireless ethernet (Wifi) standard took 7 years from the time work began to the time it was published in 2009.</p>
<p>Honestly&#8230; at current growth and usage rates, can we wait maybe 10 years to begin moving toward decentralization and standards ratification? This needs to happen now.</p>
]]></content:encoded>
			<wfw:commentRss>http://technosailor.com/2012/03/01/twitter-as-a-protocol/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Politics: It&#8217;s the Journey, not the Destination</title>
		<link>http://technosailor.com/2012/02/29/politics-its-the-journey-not-the-destination/</link>
		<comments>http://technosailor.com/2012/02/29/politics-its-the-journey-not-the-destination/#comments</comments>
		<pubDate>Wed, 29 Feb 2012 17:15:26 +0000</pubDate>
		<dc:creator>Aaron</dc:creator>
				<category><![CDATA[Politics]]></category>
		<category><![CDATA[campaigns]]></category>
		<category><![CDATA[democrats]]></category>
		<category><![CDATA[government]]></category>
		<category><![CDATA[obama]]></category>
		<category><![CDATA[politics]]></category>
		<category><![CDATA[republic]]></category>
		<category><![CDATA[romney]]></category>
		<category><![CDATA[santorum]]></category>
		<category><![CDATA[washington]]></category>

		<guid isPermaLink="false">http://technosailor.com/?p=8545</guid>
		<description><![CDATA[It's been a long time since I discussed politics here. I occasionally get into politics over on Twitter, but rarely do I write about it. I don't consider myself a political wonk so I leave the blogging to the wonks. However, I am not exactly a political outsider either. With years under my belt in the political epicenter of the country - the Greater Washington, D.C. Region - I'm not exactly naive about the political gamesmanship that happens every day.
]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-large wp-image-8546" title="U.S. Capitol." src="http://technosailor.com/files/388673_10150484728164396_500924395_8418025_1820850337_n-600x398.jpg" alt="" width="600" height="398" />It&#8217;s been a long time since I discussed politics here. I occasionally get into politics over on <a href="http://twitter.com/technosailor">Twitter</a>, but rarely do I write about it. I don&#8217;t consider myself a political wonk so I leave the blogging to the wonks. However, I am not exactly a political outsider either. With years under my belt in the political epicenter of the country &#8211; the Greater Washington, D.C. Region &#8211; I&#8217;m not exactly naive about the political gamesmanship that happens every day.</p>
<p>Now, living in Austin, Texas &#8211; the state capital, and center of political activity in the great State of Texas &#8211; it&#8217;s not like I&#8217;m unaware of the way things work on a state level either (though admittedly, I know far less about Texas politics than I do about Maryland or National politics). However, living and traveling outside of the Beltway bubble has been enlightening in how the rest of the country sees the political process.</p>
<p>More or less, outside the beltway, the vast majority of laypeople see politics as something that is offensive, or at minimum, charged with rhetoric, hate and something that is to be shunned in casual social scenarios. Things are so personal to the electorate that, right or left, the objective of governing is lost. The right sees the left as a bloc of people intent on taking away personal liberties, led by a man so vilified for ideas that are less written in stone, and more written in perception based on questionable, if not indiscriminately inaccurate, data.</p>
<p>The left is not much better. The left sees the right as a segment of the country who wants to simply obstruct every bit of progress possible, while returning the country to a racist, misogynist, hateful past.</p>
<p>Both of these perceptions, while steeped in some level of truth, are shams. Both highlight tendencies that reflect deeper conditions among both groups. But here&#8217;s the funny part&#8230; Both views are curated by both parties inside the beltway.</p>
<p><em>Whyever would anyone want to perpetrate these despicable ideas???</em></p>
<p>It&#8217;s funny how politics works. Politics is based entirely on manipulation and both parties (the establishment, not the people holding a voter registration card in South Dakota) are masters of it. Politics exists for the sake of power and both parties know that. Both parties also know they need each other to retain power. Both parties agree and walk in unison on 80% of issues. It&#8217;s the 20% that is a grand, choreographed display of artistic fortitude. It&#8217;s the 20% that allows the GOP to fire up their base of voters to keep keep them (or re-take) power. It&#8217;s the 20% that carries the Democrats to a 2006 and 2008 landslide based on anti-Bush sympathy and promises of Hope and Change. It&#8217;s the 20% that turns the Tea Party into a movement to be reckoned with in 2010.</p>
<p>Both parties know this and both parties work in lock-step to ensure this epic drama unfolds as it&#8217;s supposed to. To do so ensure that Democrats and Republicans lock-in the two party system, that benefits both of them in terms of money and power, for decades to come. To fail to do so (as in, an apathetic American public who isn&#8217;t angered by the <em>Thème de la Jour</em>), reveals cracks in the armor, possible loss of campaign contributions, corporate lobbying dollars, and power.</p>
<p>Having lived inside the Beltway, Hill staffers from both sides of the aisle put on their contorted political dance during the day, on television, radio programs, interviews and other media avenues, just to go to happy hour with their colleagues from across the aisle after hours. They are just like us in their every day life (with maybe more hectic schedules). They watch sports, go shopping, eat at restaurants, enjoy craft beers and go through their lives like all of us. The difference is, when they are at work, they are creating an elaborate illusion for the rest of the country.</p>
<p>The illusion is one of hatred, angst, bitter rivalries and political gamesmanship. The point: Keep the proletaria right so bent out of shape about Obama (or whoever) policies and the grassroots left looking at disgust at Republicans using parliamentary games that block Democratic initiatives.</p>
<p>It&#8217;s all a game.</p>
<p>Which brings me to the point I took a long time getting to: the GOP primaries.</p>
<p>Last night, I watched as Twitter exploded with chatter about Arizona and Michigan results where Mitt Romney won handily and barely, respectively. People scoffed at Santorum&#8217;s pro-life, anti-abortion stance while (inaccurately) putting out misinformation like, &#8220;If Santorum gets elected president, he&#8217;s going to take away your condoms&#8221;. Likewise, equally vilifying statements were made about Mitt Romney.</p>
<p>Now, I am not a partisan. I am unaffiliated with either party and I&#8217;m certainly not casting any support to the GOP candidate or to President Obama. I just don&#8217;t know who I&#8217;ll vote for in November. But I&#8217;ll tell you that watching the ongoing angst over the GOP Presidential hopefuls is both funny and tragic. It&#8217;s funny because&#8230; well, the GOP will get a 40% base no matter who gets the nomination and Obama will get his 40% base no matter who gets the nomination. It&#8217;s the 20% in the middle that will decide the race. You can get pissed off about Obama  but the historical data on election trends speaks for itself. Likewise, you can throw statements around about Romney and Santorum, but there&#8217;s no reason to believe that the election results in November will break any other way than they always have.</p>
<p>It&#8217;s tragic because I realize so few people sit back and enjoy the process. They lose the process through the politics. The process &#8211; the primaries as well as the other aspects of Washington work &#8211; is a beautiful work of art that has been around for centuries. The system is to be cherished. The politics not so much.</p>
<p>The primaries are not about elections. They aren&#8217;t even about politics. They are a mechanism of a party to determine who is going to be on the ticket for the general election (which is about politics). The rules for primaries are different between parties. The outcomes are irrelevant, except for the party internal mechanisms.</p>
<p>While the media does 24 hour coverage of these cycles (did ya hear Super Tuesday is coming up?!), the electorate gets more worked up into a fevered frenzy. It&#8217;s sort of like the snake charmer and the cobra where we the people are the cobra and the media and the beltway operation is the snake charmer.</p>
<p>So enjoy this process. Enjoy our system of government that, while not perfect, is still quite amazing. Everything that is old is new again. Everything new is fading away. It&#8217;s made up of cycles and we are just players in a grand dance.</p>
]]></content:encoded>
			<wfw:commentRss>http://technosailor.com/2012/02/29/politics-its-the-journey-not-the-destination/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>TUTORIAL: Using WordPress&#8217; Ajax API</title>
		<link>http://technosailor.com/2012/02/08/tutorial-using-wordpress-ajax-api/</link>
		<comments>http://technosailor.com/2012/02/08/tutorial-using-wordpress-ajax-api/#comments</comments>
		<pubDate>Wed, 08 Feb 2012 17:46:35 +0000</pubDate>
		<dc:creator>Aaron</dc:creator>
				<category><![CDATA[Aaron Brazell]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[plugins]]></category>
		<category><![CDATA[rest]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://technosailor.com/?p=8543</guid>
		<description><![CDATA[WordPress has tons of APIs to do tons of things. It really does. One of the cool ones that I&#8217;ve been using a lot lately, has been around for a bit. It&#8217;s the Ajax API. Sure, you could write your own Ajaxy thing but why do that when WordPress lets you do it all very [...]]]></description>
			<content:encoded><![CDATA[<p>WordPress has tons of APIs to do tons of things. It really does. One of the cool ones that I&#8217;ve been using a lot lately, has been around for a bit. It&#8217;s the Ajax API. Sure, you could write your own Ajaxy thing but why do that when WordPress lets you do it all very simply.</p>
<p>This tutorial will show you how to replicate the functionality that is presented in the &#8220;Like&#8221; button at Facebook. It assumes that you have WordPress set to require users to be logged in to take such actions. It wouldn&#8217;t make much sense for someone to not be logged in for such functionality. Obviously, you could do something else with Ajax (polls? Loading new content?) that doesn&#8217;t have the same assumption, but in this case&#8230; we&#8217;re assuming a user is logged in and the <code class="codecolorer php default"><span class="php"><span style="color: #000088;">$current_user</span></span></code> global is set.</p>
<h2>Getting Started</h2>
<p>Let&#8217;s start with the basic PHP class (<a href="http://stackoverflow.com/questions/2285404/why-should-i-use-classes-rather-than-just-a-collection-of-functions">you do write good object-oriented code, right?</a>)</p>
<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br /></div></td><td><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;">class</span> My_Like_Button <span style="color: #009900;">&#123;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">function</span> __construct<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #000088;">$my_like_button</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> My_Like_Button<span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>This code is just a basic skeleton that provides a constructor (the <code class="codecolorer php default"><span class="php">__construct<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span></span></code> method, which I&#8217;ll use later. It also instantiates a new <code class="codecolorer php default"><span class="php">My_Like_Button</span></code> object and assigns it to the <code class="codecolorer text default"><span class="text">$my_like_button</span></code> variable for use in the global scope. Obviously, you can use whatever strikes your fancy for the class name or the global variable.</p>
<h2>Building the HTML for the Like Button</h2>
<p>Next, we need the basic HTML structure that will be used in our theme for the Like button. For the sake of simplicity, I&#8217;m not providing any CSS, but feel free to do as you wish. We need to add this as a new method in our class.</p>
<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br /></div></td><td><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> like_button<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><br />
<span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span>is_user_logged_in<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">return</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">global</span> <span style="color: #000088;">$current_user</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #000088;">$html</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'&lt;form action=&quot;&quot; method=&quot;post&quot;&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;input type=&quot;hidden&quot; name=&quot;like_post_id&quot; id=&quot;like_post_id&quot; value=&quot;'</span> <span style="color: #339933;">.</span> get_the_ID<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span><span style="color: #0000ff;">'&quot;&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;input type=&quot;hidden&quot; name=&quot;like_user_id&quot; id=&quot;like_user_id&quot; value=&quot;'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$current_user</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">ID</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&quot;&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;input type=&quot;button&quot; name=&quot;like_this_post&quot; id=&quot;like_this_post&quot; value=&quot;Like&quot; /&gt;<br />
&nbsp; &nbsp; &lt;/form&gt;'</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">return</span> <span style="color: #000088;">$html</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>This form provides two hidden form fields using <code class="codecolorer php default"><span class="php">get_the_ID<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span></span></code> and the <code class="codecolorer php default"><span class="php"><span style="color: #000088;">$current_user</span></span></code> object. Having done this (and after ensuring there is a logged in user), we can now drop this into our theme <em>in the Loop</em> as a template tag:</p>
<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><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;">&lt;?php</span> <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$my_like_button</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">like_button</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span></div></td></tr></tbody></table></div>
<h2>Sending the Ajax Request with jQuery</h2>
<p>This is useless by itself. We need something to handle the Ajax. But before we get there, we need to understand how Ajax works within the WordPress context.</p>
<p><strong><em>All requests must go to <code class="codecolorer text default"><span class="text">wp-admin/admin-ajax.php</span></code>. Forget the confusion about why you would send a front-end Ajax request to the back-end. You just do.</em></strong></p>
<p>On the back-end, you&#8217;ll have to define functions that will hook into the Ajax API to let WordPress know how to handle the request. More on that in a minute. Let&#8217;s build some jQuery to send this to <code class="codecolorer text default"><span class="text">admin-ajax.php</span></code>.</p>
<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">function js()<br />
{<br />
&nbsp; &nbsp; wp_enqueue_script( 'jquery' );<br />
&nbsp; &nbsp; wp_print_scripts();<br />
&nbsp; &nbsp; ?&gt;<br />
&nbsp; &nbsp; &lt;script&gt;<br />
&nbsp; &nbsp; jQuery(document).ready(function(){<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; jQuery('#like_this_post').click(function(){<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var like_post_id = jQuery('#like_post_id').val();<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var like_user_id = jQuery('#like_user_id').val();<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; jQuery.post(<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; '<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> get_option<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'siteurl'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'/wp-admin/admin-ajax.php'</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>',<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; action&nbsp; &nbsp; &nbsp; : 'register_like',<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; user_id &nbsp; &nbsp; : like_user_id,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; post_id &nbsp; &nbsp; : like_post_id,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _wpnonce&nbsp; &nbsp; : '<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> wp_create_nonce<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'nonce-register_like'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>',<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; },<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; function(response) {&nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; alert(response);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; );<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; });<br />
&nbsp; &nbsp; });<br />
&nbsp; &nbsp; &lt;/script&gt;<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">&lt;?php</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>This is just a PHP function that we can use to throw some jQuery (using the <code class="codecolorer javascript default"><span class="javascript">.<span style="color: #660066;">post</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span></span></code> method for our Ajax call) into the head. Note the nonce. You must include this for security. Additionally, you must have an action set. The action is used by WordPress to route the Ajax request.</p>
<p>Finally, we&#8217;re passing two extra pieces of data &#8211; <code class="codecolorer javascript default"><span class="javascript">user_id</span></code> which is the WordPress user ID and the <code class="codecolorer javascript default"><span class="javascript">post_id</span></code> which is the WordPress post ID of the current <code class="codecolorer php default"><span class="php"><span style="color: #000088;">$post</span></span></code> object inside the Loop. Both of these are supplied in the hidden form fields we created earlier.</p>
<p>Let&#8217;s add a new method for hooks and call it in our constructor, so that hooks are executed when the object is instantiated:</p>
<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br /></div></td><td><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> __construct<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><br />
<span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">hooks</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <br />
<span style="color: #000000; font-weight: bold;">function</span> hooks<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><br />
<span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; add_action<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'wp_head'</span><span style="color: #339933;">,</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$this</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'js'</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<h2>Supplying the Ajax Handler</h2>
<p>Having hooked the jQuery into WordPress, we now need something on the other end to handle the request and return something back to our page. For this, let&#8217;s create a method called <code class="codecolorer text default"><span class="text">handle_like()</span></code>.</p>
<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br /></div></td><td><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> handle_like<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><br />
<span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">global</span> <span style="color: #000088;">$wpdb</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #000088;">$user_id</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>int<span style="color: #009900;">&#41;</span> <span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'user_id'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #000088;">$post_id</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>int<span style="color: #009900;">&#41;</span> <span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'post_id'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span>is_user_logged_in<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">return</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span>wp_verify_nonce<span style="color: #009900;">&#40;</span> <span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'_wpnonce'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'nonce-register_like'</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/die"><span style="color: #990000;">die</span></a><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'Go away, asshole!'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;">/* <br />
&nbsp; &nbsp; &nbsp; &nbsp; Here is where we do some sort of database operation to associate<br />
&nbsp; &nbsp; &nbsp; &nbsp; the Like of the given post with the user who performed the action<br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; Make sure you check for errors. In order to return data, you must<br />
&nbsp; &nbsp; &nbsp; &nbsp; echo something that the originating page can see. True or false<br />
&nbsp; &nbsp; &nbsp; &nbsp; only makes sense on this page and not back there.<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; Typically, you'd output some sort of JSON, XML or plain text.<br />
&nbsp; &nbsp; */</span><br />
&nbsp; &nbsp; <span style="color: #000088;">$meta_id</span> <span style="color: #339933;">=</span> add_post_meta<span style="color: #009900;">&#40;</span> <span style="color: #000088;">$post_id</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'user_liked'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$user_id</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: #339933;">!</span><span style="color: #000088;">$meta_id</span> <span style="color: #009900;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;Like not recorded&quot;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">else</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;Like recorded&quot;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <a href="http://www.php.net/exit"><span style="color: #990000;">exit</span></a><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>In this method, it&#8217;s important that all data be sanitized to avoid security problems. I&#8217;m performing the most basic of data security here by casting the $_POST variables for the users ID and the post ID to integers.</p>
<p>We&#8217;re also checking to make sure the user is logged in. <em>This is why using the built in WordPress Ajax API is actually kind of important. If you build your own Ajax handler, there&#8217;s no way to reliable tie in to WordPress to use other APIs like the User API.</em></p>
<p>Finally, make sure you verify the nonce so you know the request is coming from a legitimate source.</p>
<p>The three security procedures I just listed will largely prevent SQL Injection, ensure authenticated users and eliminate the possibility of Cross Site Request Forgery (CSRF) and generally should be used in <em>all</em> WordPress plugin development.</p>
<p>Simply though, the above method takes the post ID, the user ID and creates a new record in the <code class="codecolorer text default"><span class="text">postmeta</span></code> table. On success, it will print a success method readable by the original sending page and vica versa on failure.</p>
<p><strong>Note: You must use <code class="codecolorer php default"><span class="php"><a href="http://www.php.net/die"><span style="color: #990000;">die</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span></span></code> or <code class="codecolorer php default"><span class="php"><a href="http://www.php.net/exit"><span style="color: #990000;">exit</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span></span></code> at the end of the method to make sure the Ajax response exits properly.</strong></p>
<h2>Tying the Handler into WordPress</h2>
<p>Now that we have a handler method to do our bidding, we need to make sure WordPress knows about it so it routes Ajax requests to the proper place. To do this, we leverage the <code class="codecolorer php default"><span class="php">wp_ajax_<span style="color: #009900;">&#123;</span><span style="color: #000088;">$action</span><span style="color: #009900;">&#125;</span></span></code> hook.</p>
<p>Remember earlier, while building the jQuery Ajax request, I mentioned that an <code class="codecolorer text default"><span class="text">action</span></code> POST variable had to be set? WordPress looks to this variable to create a dynamic hook that we can use our new Ajax callback to hook into.</p>
<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">add_action<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'wp_ajax_register_like'</span><span style="color: #339933;">,</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$this</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'handle_like'</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>Because our action in the <code class="codecolorer php default"><span class="php">js<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span></span></code> method was set to <code class="codecolorer text default"><span class="text">register_like</span></code>, the hook WordPress creates dynamically is <code class="codecolorer text default"><span class="text">wp_ajax_register_like</span></code> and we can use that to hook our Ajax handler onto.</p>
<h2>Wrapping it all Together</h2>
<p>Easy right? Use jQuery to send data, <code class="codecolorer text default"><span class="text">wp-admin/admin-ajax.php</span></code> to receive the Ajax request and pass it on to an appropriate handler function, and send data back to the original page. On the receiving end, you can use normal means to handle the returned data as you wish.</p>
<p>You can download the full code used here at <a href="https://gist.github.com/1771566">Github</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://technosailor.com/2012/02/08/tutorial-using-wordpress-ajax-api/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Blackouts, Boycotts and Regressing From Progress</title>
		<link>http://technosailor.com/2012/01/30/blackouts-boycotts-and-regressing-from-progress/</link>
		<comments>http://technosailor.com/2012/01/30/blackouts-boycotts-and-regressing-from-progress/#comments</comments>
		<pubDate>Mon, 30 Jan 2012 21:54:03 +0000</pubDate>
		<dc:creator>Aaron</dc:creator>
				<category><![CDATA[Aaron Brazell]]></category>
		<category><![CDATA[blackout]]></category>
		<category><![CDATA[boycott]]></category>
		<category><![CDATA[censorship]]></category>
		<category><![CDATA[free speech]]></category>
		<category><![CDATA[pipa]]></category>
		<category><![CDATA[sopa]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://technosailor.com/?p=8539</guid>
		<description><![CDATA[A couple of weeks ago, the United States, and in fact, the world saw the internet grow up. Namely, through the use of blackouts &#8211; a previously unused tactic of protest and grassroots organizing &#8211; we saw the evil Stop Online Privacy Act (SOPA) and it&#8217;s evil twin Protect IP (PIPA) anti-piracy legislation fail in [...]]]></description>
			<content:encoded><![CDATA[<p>A couple of weeks ago, the United States, and in fact, the world saw the internet grow up. Namely, through the use of blackouts &#8211; a previously unused tactic of protest and grassroots organizing &#8211; we saw the evil Stop Online Privacy Act (SOPA) and it&#8217;s evil twin Protect IP (PIPA) anti-piracy legislation fail in what seemed like an instant.</p>
<p>Back in December, it became clear that Congress would hearken to their corporate sugar daddys and shove these two pieces of legislation through the Congress without so much as a minimal amount of input from the technology world that would be devastated by their provisions. After votes on these bills were delayed until after the new year, the Internet &#8211; led by Wikipedia, Google, Craigslist, and hundreds of thousands of other sites, including this one &#8211; self-organized a protest that would involve &#8220;blackouts&#8221; of sites (and in some cases, very pronounced messaging in he case where blackouts were not feasible.</p>
<p>Despite defensive posturing by the Motion Picture Association of America (MPAA) and others who served to benefit from the legislation, Congressmen and Senators began fleeing the bills <em>en masse</em>. We had successfully made our mark on Washington.</p>
<p><img src="http://technosailor.com/files/tweet-withheld-600x91.png" alt="" title="tweet withheld" width="584" height="88" class="aligncenter size-large wp-image-8540" /></p>
<p>But then a funny thing happened. Twitter made some changes to it&#8217;s infrastructure to make it possible for them to operate transparently and legally inside countries that have stricter laws on free speech. It&#8217;s a necessary problem that companies have had to face for decades in places like China where speech is censored. I&#8217;ll let you read <a href="http://blog.twitter.com/2012/01/tweets-still-must-flow.html">their blog post on the topic</a>.</p>
<p>A small portion of the internet cried foul, claiming censorship. They looked at Twitter as anti-free speech and attempted &#8211; unsuccessfully &#8211; to self-organize a boycott of Twitter. It failed.</p>
<p>A very specific truth is at play and this is the crux of things. We matured on SOPA blackout day. We decided we wouldn&#8217;t be independent and fractioned, which is our nature as independent organizations and people. We had a desired goal (the defeat of SOPA/PIPA) and very specific actions and messaging that needed to happen.</p>
<p>The Twitter boycott (and most boycotts like it) cannot be effective in the same way. The Twitter boycott was a regression in our maturity. We didn&#8217;t have the same goal with surgical precision. We didn&#8217;t have any ground-swell of support. We had no stated goal or desirable outcome. We can&#8217;t use the same tactic every time. We regressed. </p>
<p>And by we, I don&#8217;t mean me. I knew it would be a failure. </p>
<p>Grassroots organizing is important and there will be other necessary flexing of muscle. But we can&#8217;t just cry foul because we don&#8217;t like a decision a company has made. We need to be selective about the fights we engage in and do them tactfully, strategically and surgically. That is maturity.</p>
]]></content:encoded>
			<wfw:commentRss>http://technosailor.com/2012/01/30/blackouts-boycotts-and-regressing-from-progress/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Congratulations, Internet. We Won the Day.</title>
		<link>http://technosailor.com/2012/01/19/congratulations-internet-we-won-the-day/</link>
		<comments>http://technosailor.com/2012/01/19/congratulations-internet-we-won-the-day/#comments</comments>
		<pubDate>Thu, 19 Jan 2012 20:05:11 +0000</pubDate>
		<dc:creator>Aaron</dc:creator>
				<category><![CDATA[Aaron Brazell]]></category>
		<category><![CDATA[activism]]></category>
		<category><![CDATA[congress]]></category>
		<category><![CDATA[house of representatives]]></category>
		<category><![CDATA[legislation]]></category>
		<category><![CDATA[lobbying]]></category>
		<category><![CDATA[pipa]]></category>
		<category><![CDATA[senate]]></category>
		<category><![CDATA[sopa]]></category>

		<guid isPermaLink="false">http://technosailor.com/?p=8527</guid>
		<description><![CDATA[Today, I feel like a proud poppa. I don&#8217;t want to get too celebratory and put out some kind of aura that our battle against SOPA and PIPA are over. In fact, neither are over. But I&#8217;ll get to that in a minute, because yesterday was AMAZING! Yesterday, we saw the Internet come of age. [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://technosailor.com/files/US_Capitol_HDR-600x399.jpg" alt="" title="US_Capitol_HDR" width="584" height="388" class="aligncenter size-large wp-image-8534" />Today, I feel like a proud poppa. I don&#8217;t want to get too celebratory and put out some kind of aura that our battle against SOPA and PIPA are over. In fact, neither are over. But I&#8217;ll get to that in a minute, because yesterday was <strong>AMAZING</strong>!</p>
<p>Yesterday, we saw the Internet come of age. We&#8217;ve seen the trend. The Internet has played a crucial role in the <a href="http://www.guardian.co.uk/world/interactive/2011/mar/22/middle-east-protest-interactive-timeline">Arab Spring</a>, political activism and fundraising as seen in the Obama election campaign in 2008, news reporting as seen in the incident of the US Airways jet in the Hudson River. We&#8217;ve seen a definite maturation process on the Internet over the years.</p>
<p>However, we have always been to dysfunctional to be a force. We are all too inbred with independent streaks to band together. In auto racing, cars often &#8220;draft&#8221; each other to increase speed, because drafting &#8211; or riding the sometimes-literal bumper of a car in front of you reduces wind resistence, and increases aerodynamics, thus increasing overall speed of the collective over the individual. </p>
<p>Ladies and gentlemen, we were drafting like pros yesterday. </p>
<p>We were drafting so well that the CEO of the Motion Pictures Association of America (MPAA) &#8211; former Senator Chris Dodd &#8211; came out shooting at proposed blackouts&#8230; <em>on Tuesday before it happened!</em> <a href="http://motherjones.com/mojo/2012/01/dodd-to-internet-you-and-your-blackout-can-drop-dead">Mother Jones</a> covers this nicely.</p>
<p>But we went out there, amidst a national media blackout (no pun intended) and did our thing. We were obviously led by the big dogs &#8211; <a href="http://wikipedia.org">WikiPedia</a>, <a href="http://en.blog.wordpress.com/2012/01/18/join-our-censorship-protest/">WordPress.com</a>, Google, Tumblr, Reddit and more, but Flickr, WordPress (dot org and dot com), and many more funneled the millions into political action. </p>
<p>This site was blacked out, as were all of my sites. Avatars on Twitter and Facebook were updated en masse with protest messages.</p>
<p>The collective made a statement like we&#8217;ve never made a statement before. And it worked. We turned the tide.</p>
<p>13 Senators flipped. Multiple Congressspeople flipped. Sponsors that had names added to the bills, undoubtedly as a matter of normal course of Washington handshakes and blowjobs, suddenly wondered how their names were attached to the bill and suddenly had to reconsider their positions among public scrutiny.</p>
<p>We won the day.</p>
<p>We have not won the battle. To this day, Rep. Lamar Smith, who chairs the House Judiciary Committee, continues to give a middle-finger to his colleagues (including his own Majority Leader) and insists on resuming markup of SOPA in February. Damn the President&#8217;s threat to veto. <a href="http://technosailor.com/2012/01/18/open-letter-to-congressman-lamar-smith-regarding-sopa-championing/">I wrote him a letter yesterday</a> and I wish you would share that across your networks. It&#8217;s very important.</p>
<p>Inside the beltway, nothing is dead until it&#8217;s dead. Using lines like, &#8220;I will not support this bill in its present form&#8221; only means, &#8220;Go get me some political cover, and I&#8217;ll reconsider&#8221;. The fact that Eric Cantor says it won&#8217;t come to the House floor for a vote, doesn&#8217;t mean it won&#8217;t. Just because the President says he&#8217;s veto it doesn&#8217;t mean he will. SOPA needs to be killed in committee and never see the light of day.</p>
<p>Likewise, PIPA in the Senate is losing support very quickly, but if SOPA were to die and PIPA were clear the Senate, my feeling is it would go to the President for a signature and let him make the political call in an election year.</p>
<p>Nothing is dead yet. We must be vigilant. We must maintain the protest, the calls, the emails, the pressure. Stop by your Congressman&#8217;s hometown office and talk to his staff. That&#8217;ll be more effective than emails and letters and phone calls. Be respectful, but make your voice heard.</p>
]]></content:encoded>
			<wfw:commentRss>http://technosailor.com/2012/01/19/congratulations-internet-we-won-the-day/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Open Letter to Congressman Lamar Smith Regarding SOPA Championing</title>
		<link>http://technosailor.com/2012/01/18/open-letter-to-congressman-lamar-smith-regarding-sopa-championing/</link>
		<comments>http://technosailor.com/2012/01/18/open-letter-to-congressman-lamar-smith-regarding-sopa-championing/#comments</comments>
		<pubDate>Wed, 18 Jan 2012 19:55:47 +0000</pubDate>
		<dc:creator>Aaron</dc:creator>
				<category><![CDATA[Aaron Brazell]]></category>
		<category><![CDATA[activism]]></category>
		<category><![CDATA[lamar smith]]></category>
		<category><![CDATA[open letter]]></category>
		<category><![CDATA[pipa]]></category>
		<category><![CDATA[politics]]></category>
		<category><![CDATA[sopa]]></category>

		<guid isPermaLink="false">http://technosailor.com/?p=8524</guid>
		<description><![CDATA[An email sent to the House Judiciary Committee Chairman, Rep. Lamar Smith (R-TX), who insists on pushing the SOPA bill through committee. Dear Mr. Smith- This is an open letter which will be published online, and promoted on Facebook, Twitter and other networks. As a Texas resident, I find it egregious that you have decided [...]]]></description>
			<content:encoded><![CDATA[<p><em>An email sent to the House Judiciary Committee Chairman, Rep. Lamar Smith (R-TX), who insists on pushing the SOPA bill through committee.</em></p>
<p>Dear Mr. Smith-</p>
<p>This is an open letter which will be published online, and promoted on Facebook, Twitter and other networks.</p>
<p>As a Texas resident, I find it egregious that you have decided to sell out so uniformly to the entertainment industry. It is so transparent, in fact, that federal records show that your biggest donor are from the holding company for <a href="http://www.opensecrets.org/politicians/contrib.php?cycle=2012&#038;cid=N00001811&#038;type=I">Clear Channel</a> and your biggest campaign contributions come from the <a href="http://www.opensecrets.org/politicians/industries.php?cycle=2012&#038;cid=N00001811&#038;type=I">entertainment industry</a> itself. Shockingly, the records also show that a Texas elected representative has taken less money from the powerful energy industry that directly effects his constituents, than from an industry who has tried for over a decade to protect their own interests at the expense of your constituents.</p>
<p>This same industry has consistently bullied law-abiding citizens across this country with exorbitant lawsuits and heavy-handed scare tactics.</p>
<p>Your colleagues, in both the House and the Senate, have realized that the Stop Online Piracy Act (SOPA) and the Protect IP Act (PIPA), while idealistic in nature, are destructive to the innovative and stable nature of the Internet &#8211; the same nature that has created great economic vitality and growth over the past 20 years. </p>
<p>Your own majority leader, Mr. Eric Cantor, has expressed that <a href="http://thehill.com/blogs/hillicon-valley/technology/204167-sopa-shelved-until-consensus-is-found">SOPA will not come to a vote on the House floor without significant thought, intention, and consensus</a>. This is clearly not happening as your colleagues have backed away from support, going the exact opposite direction from consensus &#8211; some even removing their names as co-sponsors.</p>
<p>Sir, you must listen to me and the American public. We see your transparent appeasement to your most significant donors. We understand campaign contributions are important for you and your efforts on behalf of the great State of Texas. However, attempting to ramrod this legislation through will be harmful to Texas, Texas innovation, Texas business as well as collaboration, security and health of the Internet, and business across the nation and globe.</p>
<p>You must abandon your single-sighted focus on ramming this legislation through the House of Representatives with the transparent motive of appeasing your donors. This is a democracy, not a business. You represent us.</p>
<p>Very respectfully,</p>
<p>Aaron Brazell</p>
]]></content:encoded>
			<wfw:commentRss>http://technosailor.com/2012/01/18/open-letter-to-congressman-lamar-smith-regarding-sopa-championing/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Your Fiefdom Doesn&#8217;t Matter (Or Get your Head out of Your Regional Startup Ass)</title>
		<link>http://technosailor.com/2012/01/05/your-fiefdom-doesnt-matter-or-get-your-head-out-of-your-regional-startup-ass/</link>
		<comments>http://technosailor.com/2012/01/05/your-fiefdom-doesnt-matter-or-get-your-head-out-of-your-regional-startup-ass/#comments</comments>
		<pubDate>Thu, 05 Jan 2012 20:58:47 +0000</pubDate>
		<dc:creator>Aaron</dc:creator>
				<category><![CDATA[Aaron Brazell]]></category>

		<guid isPermaLink="false">http://technosailor.com/?p=8520</guid>
		<description><![CDATA[There&#8217;s this thing called Protectionism. Protectionism is largely a political word used to describe the retreat to self-isolationism for the sake of preserving well-being. It was a word tossed around in late 2008 and 2009 after the market crash when the international community joined together to try to stave off a global economic failure. There [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_8521" class="wp-caption aligncenter" style="width: 594px"><a href="http://www.flickr.com/photos/richevenhouse/4666078071"><img class="size-large wp-image-8521" title="bubbles" src="http://technosailor.com/files/bubbles-600x400.jpg" alt="" width="584" height="389" /></a><p class="wp-caption-text">Photo used under Creative Commons. Taken by Fellowship of the Rich</p></div>
<p>There&#8217;s this thing called Protectionism. Protectionism is largely a political word used to describe the retreat to self-isolationism for the sake of preserving well-being. It was a word tossed around in late 2008 and 2009 after the market crash when the international community joined together to try to stave off a global economic failure. There were some who believed the United States had their own issues and shouldn&#8217;t be worrying about bailing out Europe. This mentality still exists, for better or for worse.</p>
<p>But protectionism is also something that is <em>hurting</em> innovation, business, and startups in an Internet world. It seems like weekly, someone is writing a post about why NYC is the best place to start a company, or why Austin is better than the Valley.</p>
<p>Here&#8217;s the honest to God truth&#8230; your fiefdoms don&#8217;t matter. Your little land grabs and protectionist ideas are hurting the global collective that we all rely on and need. Austin is better than the Valley in some ways but the Valley is better than NYC in others and NYC is better than Europe in others and Europe is better than China in others. You get the point.</p>
<p>Let me pick on my Austin colleagues for a minute. Why don&#8217;t you pay attention to what&#8217;s happening outside of Austin for a minute? You touted Gowalla as the best thing ever. Why? Because it was from Austin. The data clearly showed differently. Foursquare was better. And now Gowalla is gone and in Palo Alto and doesn&#8217;t even exist anymore. Data can&#8217;t be argued with.</p>
<p>You think your little community (Austin and other places) makes any real difference? It doesn&#8217;t. It&#8217;s part of a global community and your little bubble can&#8217;t exist in a vacuum. It&#8217;s best you start understanding that. We <em>need</em> the Valley. We <em>need</em> Chicago. We <em>need</em> NYC. And they need us.</p>
<p>It&#8217;s best we stop pretending that Austin is the best place on earth. It&#8217;s not. It&#8217;s an awesome place among other awesome places. We are doing awesome things but we aren&#8217;t the only people doing awesome things. So let&#8217;s stop pretending, get rid of the navel-gazing myopia and get our collective heads out of our asses.</p>
<p>We need our regional fiefdoms for mentorship, collaboration and sharing. We are not the end of the story.</p>
<p>Austin. San Francisco. Europe. New York City. All of us.</p>
]]></content:encoded>
			<wfw:commentRss>http://technosailor.com/2012/01/05/your-fiefdom-doesnt-matter-or-get-your-head-out-of-your-regional-startup-ass/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Dude, Shut Your Effing Social Media Mouth.</title>
		<link>http://technosailor.com/2012/01/04/dude-shut-your-effing-social-media-mouth/</link>
		<comments>http://technosailor.com/2012/01/04/dude-shut-your-effing-social-media-mouth/#comments</comments>
		<pubDate>Wed, 04 Jan 2012 19:24:37 +0000</pubDate>
		<dc:creator>Aaron</dc:creator>
				<category><![CDATA[Aaron Brazell]]></category>
		<category><![CDATA[douchebags]]></category>
		<category><![CDATA[Marketing]]></category>
		<category><![CDATA[rants]]></category>
		<category><![CDATA[Social Media]]></category>

		<guid isPermaLink="false">http://technosailor.com/?p=8517</guid>
		<description><![CDATA[It&#8217;s been awhile since I ranted. Like really ranted. I&#8217;m about to change that. &#60;rant&#62; It&#8217;s no secret that social media marketing has turned largely douchey. Self-important blowhards show up at SXSW, Blog World Expo and many other industry events every year with the sole purpose of being socialites and schmoozing with their peers and getting [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_8518" class="wp-caption aligncenter" style="width: 508px"><a href="http://www.flickr.com/photos/bruce_mcadam/2861351996/"><img class="size-large wp-image-8518" title="Honey Badger" src="http://technosailor.com/files/honeybadger-498x450.jpg" alt="Honey Badger" width="498" height="450" /></a><p class="wp-caption-text">Honey Badger don&#39;t care! (Photo used under Creative Commons. Taken by Bruce McAdam)</p></div>
<p>It&#8217;s been awhile since I ranted. Like <em>really</em> ranted. I&#8217;m about to change that.</p>
<p>&lt;rant&gt;</p>
<p>It&#8217;s no secret that social media marketing has turned largely douchey. Self-important blowhards show up at SXSW, Blog World Expo and many other industry events every year with the sole purpose of being socialites and schmoozing with their peers and getting into the hottest parties. I&#8217;ve done it. We&#8217;ve all done it.</p>
<p>But there&#8217;s no authenticity in any of it. We call those self-labelled social media gurus as social media douchebags for a reason. It&#8217;s because no one (with rare exception) is actually doing real marketing. They are doing friend-mongering. If they can get their clients Facebook likes and Twitter followers then they are being successful. But largely, all they are doing is going to their network of peers who are doing the same goddamn thing and getting them to &#8220;Like&#8221; their clients Facebook page.</p>
<p>How is this genuine? How is this legitimate? Do I really like Ford because Scott Monty is the head of social media for Ford? Well, I might&#8230; and I do like Scott&#8230; and I haven&#8217;t actually interacted with Scott in a long time so this actually has nothing to do with him.</p>
<p>I added someone who I met in a non-professional setting in Chicago last week to Facebook. I joked with her that it&#8217;s surprising we weren&#8217;t already friends because we had 41 friends in common.</p>
<p>Why is social media all about clustering together? By all means, we see mutual respect among journalists, but I bet Paul Krugman isn&#8217;t tweeting Thomas Friedman asking for a retweet simply to get exposure to his economic op-eds. He doesn&#8217;t have to. His work speaks for itself and amplifies itself.</p>
<p>If we dig deep on the social media marketing industry, the discovery under the surface is mind-numbing. I&#8217;m about to blow your mind. Social Media people have no clout (or Klout, if you want to play on that metaphor). If they did, their work would self-amplify. They wouldn&#8217;t need to look like industry hookers trying to make money with the only assets available to them. They would just&#8230; be. And they would be successful. And they wouldn&#8217;t have to prove to their clients that they can get the job done. They wouldn&#8217;t need to add milestones like &#8220;Acquire 1000 Likes on the company Facebook page&#8221; or &#8220;Build up to 5000 followers on Twitter using mutual retweet tactics&#8221; to proposals. Their reputation would precede them. They wouldn&#8217;t need to write a book to falsely inflate their value. They would have reputation.</p>
<p>Take Dean McBeth, who I also met last week. Dean works for a small boutique agency in New York. I had never heard of Dean personally, but then he informed me that his claim to fame was architecting the now-legendary Old Spice ads. Ok, your reputation precedes you, then, Dean. Thanks for not asking me to let my network of people know to Like your agency on Facebook.</p>
<p>Look, I understand that there are people like Dean doing great work. For every Dean, however, there are 5 people doing shitty work, relying way to heavily on nerd cred and too little on reputation and results.</p>
<p>People earn their reputations through hard work, perseverence, and time. Yes, that involves networking and schmoozing. But there is no credibility lent to your client by getting a bunch of your friends to &#8220;do you a solid&#8221; and help you get your work done. If you need 1000 Likes on Facebook, don&#8217;t ask me to help unless it&#8217;s something that I genuinely like. I&#8217;m not going to follow you because you follow me on Twitter. I don&#8217;t care about your client&#8230; you do. Do good work and let it self-amplify. Otherwise it&#8217;s all smoke and mirrors.</p>
<p>&lt;/rant&gt;</p>
<p><strong>Update:</strong> If you still feel like you need to get a handjob, here&#8217;s a<a href="http://www.socialmedia.biz/2012/01/02/2012-conferences-social-media-tech-marketing/"> list of Social Media conferences</a> where you can meet people, follow them on Twitter for the purpose of using your network for the benefit of your client later down the road.</p>
]]></content:encoded>
			<wfw:commentRss>http://technosailor.com/2012/01/04/dude-shut-your-effing-social-media-mouth/feed/</wfw:commentRss>
		<slash:comments>30</slash:comments>
		</item>
		<item>
		<title>Skunkworks</title>
		<link>http://technosailor.com/2012/01/03/skunkworks/</link>
		<comments>http://technosailor.com/2012/01/03/skunkworks/#comments</comments>
		<pubDate>Tue, 03 Jan 2012 19:08:54 +0000</pubDate>
		<dc:creator>Aaron</dc:creator>
				<category><![CDATA[Aaron Brazell]]></category>
		<category><![CDATA[innovation]]></category>
		<category><![CDATA[jobs]]></category>
		<category><![CDATA[Social Media]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://technosailor.com/?p=8514</guid>
		<description><![CDATA[Back in October, I announced my departure from WP Engine. At that time, though I didn&#8217;t talk about it on this blog, I decided to take some time off, more or less. Since 2006, I&#8217;ve been hard at work with very little time alotted to myself. I spent 2 years with b5media and jumped immediately [...]]]></description>
			<content:encoded><![CDATA[<p>Back in October, I announced <a href="http://technosailor.com/2011/10/03/changing-roles-at-wp-engine/">my departure from WP Engine</a>. At that time, though I didn&#8217;t talk about it on this blog, I decided to take some time off, more or less. Since 2006, I&#8217;ve been hard at work with very little time alotted to myself. I spent 2 years with <a href="http://b5media.com">b5media</a> and jumped immediately into a failed role at <a href="http://www.lijit.com/blog/2011/10/04/go-big-or-stay-home/">Lijit</a> (who has now been acquired by <a href="http://www.federatedmedia.net/">Federated Media</a> &#8211; nice work, guys!). Upon my departure from Lijit, shortly after the market bottom in 2008, and needing money desperately, I went into full time WordPress consulting. I did that until I moved to Austin last year when I went in full time on <a href="http://wpengine.com">WP Engine</a> and stayed there for 15 months or so.</p>
<p>So basically, I haven&#8217;t had a lot of time to myself. So I took time. In the past few months, I&#8217;ve taken some large consulting contracts, but mostly, I&#8217;ve spent time travelling to Maryland, Seattle, Chicago &#8211; all for pleasure, nothing for work. I&#8217;ve spent time trying to weigh my priorities and wants. I&#8217;ve tossed around starting up a new company or doing something different.</p>
<p>At the end of the day, now that it&#8217;s 2012, I know what I want to do. It&#8217;s a bit unusual, but I think it&#8217;s important and can really revolutionize a boutique agency. I&#8217;m not comfortable doing social media work. I&#8217;m too honest and raw in my own online presence and many companies and clients may not be comfortable with my level of authenticity.</p>
<p>I also don&#8217;t want to do what is common among agencies &#8211; sweatshop site development. Hey, no offense. That&#8217;s what it is. Take on 30 new clients, promise them websites that are the brainchilds of the agency marketing &#8220;expertise&#8221; and ask the developers to crank them out with little to no strategic or creative input.</p>
<p>That might work for some developers, but I&#8217;m not a normal developer. I&#8217;m a highly established WordPress professional that has commanded 5 figure consulting deals, written a 700+ page book on the subject and have built some of the most complex WordPress solutions I&#8217;ve ever seen (Humble brag! Also proprietary, but can provide in person demos). I&#8217;m not a good fit for sweatshop site generation.</p>
<p><img class="alignright size-full wp-image-8515" title="skunkworks" src="http://technosailor.com/files/skunkworks.jpg" alt="" width="410" height="160" />You know what agencies need that no one is doing because no one has taken the time to think outside the box? A skunkworks division. What agencies need to differentiate themselves from the thousands of other agencies they are competing with is a person or small group of people with autonomy and who are focused soley on creating disruptive technologies that no one else is doing. Try things. Fail at some, succeed at others. Test market demand. Offer exclusive access to stuff that no other agency has. Innovate, innovate, innovate.</p>
<p>That&#8217;s what I want to do. And someone sees the sense in that. And someone realizes that <em>that</em> is worth thinking outside the box for. Someone is willing to invest in that competitive advantage. Someone gets it. It&#8217;ll take money. It&#8217;ll take risk. It&#8217;ll take balls of steel. Or you can be normal. Who wants to be normal?</p>
<p>So as we enter 2012, I am open to conversations around this or other creative outlets you might want to explore if you want a competitive advantage. Email me at <a href="mailto:aaron@technosailor.com">aaron@technosailor.com</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://technosailor.com/2012/01/03/skunkworks/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>The Top 50 Stories Since the Invasion of Iraq</title>
		<link>http://technosailor.com/2011/12/15/the-top-50-stories-since-the-invasion-of-iraq/</link>
		<comments>http://technosailor.com/2011/12/15/the-top-50-stories-since-the-invasion-of-iraq/#comments</comments>
		<pubDate>Thu, 15 Dec 2011 20:13:49 +0000</pubDate>
		<dc:creator>Aaron</dc:creator>
				<category><![CDATA[Aaron Brazell]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[bush]]></category>
		<category><![CDATA[Economics]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[iraq]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[obama]]></category>
		<category><![CDATA[politics]]></category>
		<category><![CDATA[pope]]></category>
		<category><![CDATA[wall street]]></category>

		<guid isPermaLink="false">http://technosailor.com/?p=8509</guid>
		<description><![CDATA[War is over, if you want it. ~John Lennon This is a time of year, as we draw 2011 to a close and embark on 2012, to reminisce about the events of the last year. It&#8217;s a tradition followed by journalists, bloggers, and opinionistas alike. But since today marks the day where the War in [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>War is over, if you want it. ~John Lennon</p></blockquote>
<p>This is a time of year, as we draw 2011 to a close and embark on 2012, to reminisce about the events of the last year. It&#8217;s a tradition followed by journalists, bloggers, and opinionistas alike. But since today marks the day where the War in Iraq is officially drawn to a close, I thought I&#8217;d share some of the top stories of the past nearly 8 years. The world has changed drastically. For those who served, bled and maybe died&#8230; we salute you.</p>
<h2>50. Saddaam Hussein Captured (December 13, 2003)</h2>
<p>A mere 9 months after the U.S. Invasion began, Sadaam Hussein is captured by Special Forces and turned over to the interim Iraqi Government. He was tried and convicted for crimes against humanity and was later executed by hanging.</p>
<h2>49. NASA Mars Rover Confirms Water (March 2, 2004)</h2>
<p>NASA Rover <em>Opportunity</em> confirms that the area where she landed on the surface of Mars once was covered in water. The discovery was made when Opportunity confirmed the presence of gypsum, a compound formed when calcium water encounters sulfates.</p>
<h2>48. Massachusetts Gay Marriage (May 17, 2004)</h2>
<p>Massachusetts becomes the first state in the United States to formally legalize gay marriage. This came about after a Massachusetts Supreme Court decision deemed it unconstitutional to limit marriage to heterosexual couples. Governor Mitt Romney ordered State agencies and government to issue marriage licenses in compliance with the Supreme Court ruling. Efforts continue to formally amend the Massachusetts Constitution.</p>
<h2>47. Freedom Tower Groundbreaking (July 4, 2004)</h2>
<p>After several years of planning and politics, ground is broke for the building of the new Freedom Tower at Ground Zero in lower Manhattan. When complete, the tower will stand 105 stories and cost over $3.1B. It is estimated to open in 2013.</p>
<h2>46. Boston Red Sox win Game 4 of the ALCS (Oct 17, 2004)</h2>
<p><img class="alignright size-large wp-image-8511" style="border-style: initial; border-color: initial; margin-top: 0.4em; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;" title="fenway3" src="http://technosailor.com/files/fenway3-600x203.jpg" alt="" width="584" height="197" /></p>
<p>Red Sox faithful are given a spark of hope when, after being down to the New York Yankees 3 games to none in a best-of-seven series, came from behind in the 9th inning to avoid elimination in Game 4. The game proved to be pivotal as the Red Sox went on to win the ALCS 4-3 taking the Yankees to Game 7 and then sweeping the St. Louis Cardinals for their first World Series win since 1918.</p>
<h2>45. South Asian Tsunami (Dec 26, 2004)</h2>
<p>Tragedy struck on Boxing Day as a powerful sub-oceanic earthquake triggers a tsunami that would affect the entire Indian Ocean rim. Most devastating were the effects in Sri Lanka and Indonesia where confirmed deaths approached 170k.</p>
<h2>44. Scott Peterson Sentenced to Death (March 16, 2005)</h2>
<p>Scott Peterson is convicted of the capital crime of murdering his wife, Laci Peterson, and their unborn child. Laci was 8 months pregnant and had gone missing. While Scott was a &#8220;person of interest&#8221;, it wasn&#8217;t until the remains of Laci and their child were discovered, that Scott was arrested and ultimately convicted. He was sentenced to death by lethal injection and remains on death row in San Quentin Prison.</p>
<h2>43. Pope John Paul II Dies (April 2, 2005)</h2>
<p>The Catholic Church and the world go into mourning at the passing of 84 year old Pope John Paul II. Born Karol Jósef Wojtyla to Polish parents, the Pope was renowned for his progressive world views and is widely credited with helping to bring about the end of communism in Poland. He served for 26 years.</p>
<h2>42. Deep Throat Revealed (May 31, 2005)</h2>
<p>Since 1972, the identity of the notorious Watergate informer was speculated on but never really known except to Bob Woodward and Carl Bernstein, the Washington Post reporters who legendarily covered the scandal. On May 31, 2005, Mark Felt, then the number two guy at the CIA, revealed himself as Deep Throat. Bob Woodward, when reached for confirmation, acknowledged the revelation to be true bringing to an end one of the most intriguing conspiracy stories of recent history.</p>
<h2>41. Steve Jobs Gives His Stanford Commencement Address (June 12, 2005)</h2>
<p><iframe width="600" height="450" src="http://www.youtube.com/embed/UF8uR6Z6KLc?fs=1&#038;feature=oembed" frameborder="0" allowfullscreen></iframe></p>
<p>Since the death of Steve Jobs a few months ago, his famous &#8220;Stay Hungry, Stay Foolish&#8221; commencement address at Stanford University has seen a resurgence. In this 15 minute address, Jobs relates three anecdotes from his life and lessons learned from them. It would go on to become a window into the kind of man Jobs was and continues to serve as inspiration.</p>
<h2>40. Lance Armstrong Wins His 7th Tour de France (July 24, 2005)</h2>
<p>Lance Armstrong, the six-time Tour de France winner, notches his 7th win, an unprecedented feat. Armstrongs story in inspiring considering his battle with (and his defeat of) testicular cancer.</p>
<h2>39. Hurricane Katrina (August 29, 2005)</h2>
<p><img class="alignright size-large wp-image-8512" title="2815889929_9bee86c5cb_o" src="http://technosailor.com/files/2815889929_9bee86c5cb_o-600x450.jpg" alt="" width="584" height="438" /></p>
<p>A devastating time in American history, Katrina became the biggest natural disaster ever to occur in the United States. The initial brunt of the storm wreaked havoc on the Mississippi and Alabama coastline, but the whiplash effect that occurs as a storm passes by proved to be as devastating. As the storm passed over Mississippi, the back winds pushed water from Lake Pontchatrain on the north-side of New Orleans over and through levees setup to hold the water back from the sub-sea level city. The media coverage was vast. The horrors and atrocities deplorable. And the political response wreaked of incompetence.</p>
<h2>38. The Sago Mine rescue (January 5, 2006)</h2>
<p>A mining explosion deep in the tunnels of the Sago Mine in West Virginia trapped 13 miners underground for over 2 days. Ultimately, only one survived. This came after the mine released misinformation that led news outlets to report the exact opposite &#8211; that one miner was found dead and 12 rescued.</p>
<h2>37. Apple sells it&#8217;s 1B Song via the iTunes Store (February 22, 2006)</h2>
<p>Announced to great hype and with great marketing prowess, Apple sold it&#8217;s 1 billionth song via the iTunes Store continuing to mark the iPod as one of the greatest market-transforming technologies ever built by the Cupertino, California company.</p>
<h2>36. The Enron Trial Jury Conviction (May 25, 2006)</h2>
<p>After a much publicized &#8220;media trial&#8221;, a jury convicts former Enron CEO Kenneth Lay and COO Jeffrey Skilling. Skilling was convicted on 19 counts of securities fraud and wire fraud. Lay was convicted on 6 counts. Lay died before sentencing and, accordingly, his conviction was vacated. Skilling is currently serving a 24 year sentence.</p>
<h2>35. Twitter launched to the public (July 15, 2006)</h2>
<p>Formerly known as Twittr and, really, at the time unknown to the public, Jack Dorsey launches a prototype of the short form status message service based on text messaging. With funding and support by Odeo&#8217;s Evan Williams and Biz Stone, Twitter quickly becomes the horse they all rode in on. Twitter has become one of the most necessary and integrated forms of online communication and has contributed to social, economic, political and mundane events around the world.</p>
<h2>34. Crocodile Hunter Steve Erwin Killed By a Stingray (September 4, 2006)</h2>
<p>Beloved crazy man, Steve Erwin, is killed by a stingray who stung him through his chest to his heart while filming a stunt. He was known for putting himself in dangerous situations with unpredictable wildlife.</p>
<h2>33. The Louisiana Superdome Re-opens After Katrina (September 25, 2006)</h2>
<p>An emotional New Orleans celebrates the re-opening of the Superdome, the location of shelter and horrendous criminal actions following Hurricane Katrina. The Dome was re-opened with a New Orleans Saints-Atlanta Falcons Monday Night Football game. The halftime show featured U2 and Green Day. The Saints won an emotional game 23-3.</p>
<h2>32. Facebook Opens It&#8217;s Walls to the Public (September 26, 2006)</h2>
<p>Facebook before September 26, 2006, was only available to college students or select corporations that were registered with Facebook. That changed when the doors were opened for everyone. This was the first step for Facebook to dominate the Myspace-Facebook war.</p>
<h2>31. North Korea Tests a Nuke (October 9, 2006)</h2>
<p>North Korea gives a 6-day warning of an impending nuclear test, the first time that any country has ever done that. China is alerted 20 minutes ahead of the test and they promptly sent an emergency dispatch to Washington. North Korea explodes a small-time nuclear bomb under a mountain near the Chinese border. The test garnered international criticism and put troops in South Korea and Japan on high alert.</p>
<h2>30. The Democratic Landslide of 2006 (November 7, 2006)</h2>
<p>In an election widely scene as a referendum on President George W. Bush, Democrats won the day in a large and sweeping manner. Nationally, the Democrats took control of both the House and the Senate. In the Senate, the Democrats picked up 7 seats for a 51-49 majority. In the House, they commanded a 233-202 majority. They also took 6 Governorships from the GOP giving them a 28-22 majority there. In statewide elections, similar results were reflected as the national electorate was widely seen as rebuffing the Bush Administration.</p>
<h2>29. The iPhone Launch (June 29, 2007)</h2>
<p>To much pomp, circumstance and expectation, people lined up outside of Apple, AT&amp;T and other partner carrier stores around the world to get their hands on the iPhone, a first of its kind product. To that date, no one had effectively released and mass-marketed a touch screen convergence device such as what Apple promised. People camped out for days to be the first to buy the phone with a price-tag of $600.</p>
<h2>28. Public Vote for a Barry Bonds Asterisk on #756 (September 26, 2007)</h2>
<p>Mark Ecko makes a controversial purchase of the homerun ball that was Barry Bonds 756th and record-setting homerun. Due to the steroids controversy, sports fans debated <em>ad nauseum</em> about whether the hall of fame ball (and player) should have an asterisk (the proverbial, &#8220;oh by the way this is controversial&#8221; indication).</p>
<p>Ecko put a website up asking the public to vote on whether his purchased ball, which he intended to donate to the Baseball Hall of Fame, should be marked with an asterisk prior to donation. The public thought it should, and so it does.</p>
<h2>27. The Mitchell Report (December 13, 2007)</h2>
<p>Former Senator George Mitchell releases his controversial report from the steroid investigation committee he chaired on behalf of Major League Baseball. The report blamed a culture of performance-enhancing drugs on both players and management and implicated a menagerie of current and former players, including Andy Pettite, Miguel Tejada and Jason Giambi, in substance abuse problems.</p>
<h2>26. Michael Phelps Wins 8 Gold Medals (August 17, 2008)</h2>
<p>Baltimore-born swimming superstar, Michael Phelps, dominates mens swimming at the Beijing Olympics with a record 8 gold medals. He previously won 6 golds and 2 silvers in Athens.</p>
<h2>25. Sarah Palin Makes Her National Debut (August 29, 2008)</h2>
<p>In what may go down in history as one of politics biggest &#8220;oops&#8221; moment, GOP Presidential Candidate John McCain, wanting to make a statement with a woman VP candidate, names Alaska Governor Sarah Palin as his running mate. The move proved to be disastrous as Palin was not prepared for the national spotlight. After the Campaign ended, controversy continued to swirl around her, her odd resignation as Governor and her personal and home life.</p>
<h2>24. Market Crash of 2008 (October 2, 2008)</h2>
<p>The Global Recession, by most accounts, began in late 2006 or early 2007, but it became acute and pronounced on October 2, 2008 when the Dow Jones fell 3.22% (~348 points). It would continue to fall for the rest of the week losing 22% of it&#8217;s value in 4 days. The market was exacerbated by the failure of Bear Stearns, Freddie Mac and Fannie Mae and would ultimately lead to government bailouts or facilitated mergers of some of the worlds largest lending institituions under the mantra, &#8220;Too big to fail.&#8221;</p>
<h2>23. Too Big to Fail &#8211; Bush Bailouts (October 3, 2008)</h2>
<p>Under the Bush administration, with tremendous economic pressure and fatal outlooks, a $700B emergency bailout fund was established by Congress to assist in the closure, restructuring, merger and re-capitalization of major banks and institutions like Bank of America, Washington Mutual, Wachovia, Wells Fargo, AIG and more. It became one of the most controversial economic storylines of recent times and was extended by the incoming Obama Administration.</p>
<h2>22. Obama Landslide (November 4, 2008)</h2>
<p>With celebrations in Washington, DC and major cities around the United States and world, Obama is elected as the 44th President of the United States marking the end of a terrible Bush Administration and marking the first time a black man was elected to the most powerful Office in the world. Impromptu celebrations were held in front of the White House and in the streets around the world.</p>
<h2>21. California Adopts Proposition 8 (November 4, 2008)</h2>
<div class="wp-caption alignnone" style="width: 650px"><a href="http://www.flickr.com/photos/chriki/3025774097/"><img title="Stop the Hate" src="http://farm4.staticflickr.com/3064/3025774097_f054049f37_z.jpg?zz=1" alt="Stop the Hate" width="640" height="427" /></a><p class="wp-caption-text">Photo by Chriki on Flickr. Used under Creative Commons.</p></div>
<p>In what has been viewed by equal rights organizations around the country as a severe regression, one of the most progressive states in the nation adopts Proposition 8, a statewide ballot initiative that would prohibit gay marriage in California. It also became a hot button issue for critics of special interest influence in politics as the ballot initiative was largely funded by the Church of Jesus Christ of Latter Day Saints &#8211; the Mormons &#8211; who executed a well-funded grass-roots effort to pass the proposition.</p>
<h2>20. Obama is Inaugurated (January 20, 2009)</h2>
<p>On a frigid day in January, 1.8M people descended on the National Mall to witness the Inauguration of America&#8217;s first African-American president. Parties included a concert the day before at the Lincoln Memorial where rapper Jay-Z sang &#8220;I&#8217;ve Got 99 Problems but a Bush ain&#8217;t one&#8221; and the ceremonial Marine One whisking away of the outgoing president was greeted by millions chanting, &#8220;Nah nah nah nah. Nah nah nah nah. Hey hey hey. Goodbye&#8221;.</p>
<h2>19. The Birth of the Tea Party (April 15, 2009)</h2>
<p>Around the country, on tax day in 2009, hundreds of thousands of Americans gathered to protest heavy taxation by the government. What began as an anti-tax movement, quickly turned into one of the most influential &#8211; and arguably nutty &#8211; political fraction groups in the history of the United States. In 2010, the Tea Party successfully elected pro-Tea Party Congressmen in the GOP takeover of the House of Representatives.</p>
<h2>18. H1N1 (June 1, 2009)</h2>
<p>The Swine flu became a hot button issue of concern for many fearing a pandemic &#8211; and a source of ridicule for Halloween goers later in the year who dressed up as the H1N1 virus. The swine flue was a strain of the common flu that was potentially fatal and caused deaths nationwide. The CDC, along with other sister agencies in other countries and the World Health Organization, ran heavy public education campaigns to reduce the risk of pandemic.</p>
<h2>17. Michael Jackson Dies (June 25, 2009)</h2>
<p>The world mourned the loss of Michael Jackson who died of an overdose mis-administered by his personal doctor. His death was not believed to be suicide, but was the result of negligence. Days later at the Staples Center in Los Angeles, a funeral was held with touching eulogies from his brother and father, among others.</p>
<h2>16. Steve McNair Murdered by His Mistress (July 4, 2009)</h2>
<p>NFL Quarterback Steve McNair, who played for both the Tennessee Titans and the Baltimore Ravens, was killed by his 22 year old mistress in Nashville. Rumors of jealousy and rage were circled as particular motives.</p>
<h2>15. Wikileaks Bursts on the Scene with Cablegate (February 18, 2010)</h2>
<p>The controversial grassroots organization founded by Aussie vigilante Julian Assange, Wikileaks, makes huge political waves by releasing State Department cables to select media organizations. Though redacted to protect the identities of spies, informants and individual workers, the cables represent damning internal and international diplomatic decision making and communications.</p>
<h2>14. Health Care Reform Act (March 21, 2010)</h2>
<p>After over a year of debate, arguing, politicking, and blockage, the House and Senate finally agree to a compromise Health Care Reform Bill that has become President Obama&#8217;s signature legislation. Parts of the bill are under judicial review.</p>
<h2>13. Icelandic Volcano Grounds Europe (April 14, 2010)</h2>
<p>Mount Eyjafjallajökull erupts in Iceland spreading volcanic ash across the UK, Europe and the trans-atlantic flight corridors. Flights are grounded for days and passengers stranded. Some passengers reported trying to drive across Europe to other countries, like Spain, to get to an airport with outgoing flights &#8211; like Barcelona &#8211; but with no success. It became a massive economic problem.</p>
<h2>12. The BP Oil Spill (April 20, 2010)</h2>
<p>An explosion on the Deepwater Horizon oil rig operated by BP caused the rig to collapse and snap the pipe dug into the earths crust. The result was 3 months of oil continually flowing into the Gulf of Mexico. Multiple solutions were attempted to seal the well but nothing was successul until September. Cleanup continues to this day.</p>
<h2>11. Reggie Bush Gives His Heisman Trophy Back (September 15, 2010)</h2>
<p>New Orleans Saints Running Back Reggie Bush, who won the 2005 Heisman Trophy while at USC, gave back his Heisman Trophy amid public pressure after sanctions were dropped on USC for recruiting and other violations. USC was required to vacate all 2004-2005 wins including their National Championship win over Oklahoma, and is banned from post-season play for both the 2010 and 2011 seasons. Bush became the first player ever to return a Heisman Trophy.</p>
<h2>10. Brett Favre&#8217;s Penis (October 7, 2010)</h2>
<p>Brett Favre apparently has a little penis, or so the pictures say. The news of Favre texting pictures of his junk to, then-Jets sideline reporter Jenn Sterger was broken by sports-gossip blog Deadspin. Brett&#8217;s taste in women&#8230; impeccable. Brett&#8217;s taste in text message appropriateness&#8230; questionable.</p>
<h2>9. The Republicans Win Back the House (November 2, 2010)</h2>
<p>In a national referendum on Obama, the GOP retook the House of Representatives and made significant strides in the Senate on a wave of Tea Party momentum. Freshman Republican legislators, such as Rand Paul, would become influential in the budget and taxation issues in the current Congress.</p>
<h2>8. The Arab Spring Begins (December 17, 2010)</h2>
<p>The Arab Spring, a coordinated series of protests that would ultimately turn the Middle East on its head, begins with a Tunisian man setting himself on fire in protest of police confiscating his vegetable cart. An uprising would subsequently occur that saw the fall of the Tunisian government. Other Arabs, buoyed by a sense of enablement, protested and in some case achieved regime change in Egypt and Lybia. Unrest and calls for revolution were also heard in Yemen, Bahrain, Syria, United Arab Emirates, Saudi Arabia, Morocco, Lebanon, Iran and Algeria.</p>
<h2>7. Japanese Nuclear Fallout (March 11, 2011)</h2>
<p>After a devastating earthquake rocked Japan, concern began to spread to the Fukushima Nuclear reactor. Despite efforts to contain damage &#8211; and initial reports that the reactor was safe and not breached &#8211; it became clear that containment was not possible. Though ultimately contained, it did not happen until significant amounts of radiation escaped into the ground, water and atmosphere. Trace amounts of I-131 radiation (non-harmful doses) were detected as far away as California.</p>
<h2>6. Osama Bin Laden Killed (April 30, 2011)</h2>
<p><img class="alignright size-large wp-image-8510" title="Bin Laden's Hunter" src="http://technosailor.com/files/1031_OBAMA-WAR-ROOM-600x400.jpg" alt="" width="584" height="389" /></p>
<p>With a dramatic late-night address to the nation &#8211; called with only an hour warning &#8211; President Obama informed America and the world of the death of Osama Bin Laden. Osama was killed by Navy SEAL Team 6 in a raid on a Pakistani compound. Later, some would question the death because the Administration decided not to release pictures.</p>
<h2>5. Amy Winehouse Joins the 27 Club (July 23, 2011)</h2>
<p>British pop superstar, Amy Winehouse dies of an apparent drug overdose at Age 27. She joins the &#8220;Club of 27&#8243;, a group of musicians that include Jimmie Hendrix, Janis Joplin and Kurt Cobain, who also died at Age 27.</p>
<h2>4. Faster than Light (September 22, 2011)</h2>
<p>Battlestar Galactica fans would endorse the concept &#8220;Faster than Light&#8221;, but physicists at the CERN research center in Switzerland release a preliminary report showing that they had found a neutrino &#8211; a tiny sub-atomic particle &#8211; that traveled faster than light. Secondary test would reveal the same finding. Other scientific researchers question the results, however. If true, the discovery would undermine the core building block of modern science &#8211; that nothing is faster than light. Albert Einstein is turning over in his grave.</p>
<h2>3. Occupy Wall Street (September 17, 2011)</h2>
<p>The economic difficulties and political climate in the past few years finally force a boil over of sentiment toward the perceptions of class-entitlement. The mantra &#8220;We are the 99%&#8221; has become a rallying cry for anyone who feels slighted by entitlement. The Occupy Wall Street Movement, while protesting excesses on Wall Street, has been mirrored across the country. In some incidents, occupy movements have turned into political hot potatoes that shine the light on police corruption and brutality as was the case when a police officer casually pepper sprayed a series of kneeling protestors on the campus of UC-Berkeley.</p>
<h2>2. Moammar Ghaddafi Killed (October 20, 2011)</h2>
<p>After months of civil war, belligerent resistance to national and international calls to step down &#8211; generally in the form of hapless, wandering, rambling televised addresses &#8211; NATO military intervention and repeated rumors (but no proof) of his death, Moammar Ghaddafi is confirmed dead in Libya. After a NATO airstrike hit a convoy he was riding in, he took shelter in a drainage ditch where he was captured by National Transitional Council forces. He died en route to the hospital.</p>
<h2>1. Penn State Child Sex Scandal (November 5, 2011)</h2>
<p>We are rocked by the grand jury indictments handed down on former Penn State coach Jerry Sandusky. Sandusky is charged with multiple sex abuse charges as they relate to 4 alleged victims. In the wake of the scandal, fingers are pointed at various people and blame is passed. Ultimately, Penn State&#8217;s Board of Trustees remove the President, Athletic Directory, Head Coach Joe Paterno and others from their responsibilities.</p>
<p>So there we have it. 8 years of war. An entire different country. Have we learned from our mistakes? Probably not. We&#8217;ll see. Happy Christmas! War is Over! If You Want It!</p>
]]></content:encoded>
			<wfw:commentRss>http://technosailor.com/2011/12/15/the-top-50-stories-since-the-invasion-of-iraq/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>TUTORIAL: Adding an oEmbed Provider to WordPress</title>
		<link>http://technosailor.com/2011/12/14/tutorial-adding-an-oembed-provider-to-wordpress/</link>
		<comments>http://technosailor.com/2011/12/14/tutorial-adding-an-oembed-provider-to-wordpress/#comments</comments>
		<pubDate>Wed, 14 Dec 2011 19:53:12 +0000</pubDate>
		<dc:creator>Aaron</dc:creator>
				<category><![CDATA[Aaron Brazell]]></category>
		<category><![CDATA[oembed]]></category>
		<category><![CDATA[plugins]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://technosailor.com/?p=8507</guid>
		<description><![CDATA[I don&#8217;t often write tutorials. I probably should. But normally it&#8217;s only when someone asks me something and I think, &#8220;Hey, self&#8230; you should write up how to do this&#8221;. As if a book wasn&#8217;t enough. Last night I was at the Austin Web Holiday party, a gathering of some 15+ technical meetup groups cross-pollinating [...]]]></description>
			<content:encoded><![CDATA[<p>I don&#8217;t often write tutorials. I probably should. But normally it&#8217;s only when someone asks me something and I think, &#8220;Hey, self&#8230; you should write up how to do this&#8221;. As if <a href="http://amzn.to/wpbible2">a book</a> wasn&#8217;t enough.</p>
<p>Last night I was at the Austin Web Holiday party, a gathering of some 15+ technical meetup groups cross-pollinating over beer and socializing. I was introduced to one guy (can&#8217;t remember his name!) who had built a video site and enabled it for oEmbed. He couldn&#8217;t understand why WordPress wouldn&#8217;t just automatically let users use his videos, like it does for YouTube, Vimeo, etc. <a href="http://codex.wordpress.org/Embeds">The full list of default oEmbed providers are listed here</a>.</p>
<p>WordPress doesn&#8217;t allow automatic use of oEmbed for security reasons. Otherwise, someone could build a video service stuffed with malicious code that could potentially access your database or create a man in the middle attack or worse. WordPress.com certainly doesn&#8217;t allow arbitrary oEmbed sites and the dot-org open source software doesn&#8217;t allow arbitrary stuff automatically. But it can be done, on the dot-org side, with a plugin. All it is a hook.</p>
<p>Here&#8217;s an example. If you want to register an oEmbed video site that is, say, at (randomly) http:/mysuperawesomevideosite.com and your videos are of the format http://mysuperawesomevideosite.com/video/*, it&#8217;s as simple as adding a function in your plugin (or more properly from a PHP perspective, a method in a class &#8211; but that&#8217;s a personal preference. The method/function should call the <code class="codecolorer php default"><span class="php">&nbsp;wp_oembed_add_provider<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span></span></code> function.</p>
<p>In it&#8217;s simplest form, all you have to do is:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">class My_Plugin {<br />
<br />
&nbsp; var $oembed_endpoint;<br />
&nbsp; var $oembed_format;<br />
<br />
&nbsp; function __construct() <br />
&nbsp; {<br />
&nbsp; &nbsp; $this-&gt;oembed_endpoint = 'http://mysuperawesomevideosite.com';<br />
&nbsp; &nbsp; $this-&gt;oembed_format = 'http://mysuperawesomevideosite.com/video/*';<br />
<br />
&nbsp; &nbsp; $this-&gt;new_oembed();<br />
&nbsp; }<br />
<br />
&nbsp; function __destruct() {}<br />
<br />
&nbsp; function new_oembed()<br />
&nbsp; {<br />
&nbsp; &nbsp; wp_oembed_add_provider( $this-&gt;oembed_format, $this-&gt;oembed_endpoint );<br />
&nbsp; }<br />
<br />
}</div></td></tr></tbody></table></div>
<p>Then, to make this code work, just instantiate the class somewhere.</p>
<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000088;">$my_plugin</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> My_Plugin<span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>Voila!</p>
]]></content:encoded>
			<wfw:commentRss>http://technosailor.com/2011/12/14/tutorial-adding-an-oembed-provider-to-wordpress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>10 Things You Need to Know About WordPress 3.3</title>
		<link>http://technosailor.com/2011/11/17/10-things-you-need-to-know-about-wordpress-3-3/</link>
		<comments>http://technosailor.com/2011/11/17/10-things-you-need-to-know-about-wordpress-3-3/#comments</comments>
		<pubDate>Thu, 17 Nov 2011 20:22:17 +0000</pubDate>
		<dc:creator>Aaron</dc:creator>
				<category><![CDATA[Aaron Brazell]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[wordpress 3.3]]></category>
		<category><![CDATA[wordpress cheatsheets]]></category>

		<guid isPermaLink="false">http://technosailor.com/?p=8498</guid>
		<description><![CDATA[WordPress 3.2 has been downloaded a killer 12M+ times. WordPress as a whole continues to grow and is touted to be in the approximate 14% of the web zone. That&#8217;s ridiculously huge and it astounds me how big the projects footprint has become in the 7 years I&#8217;ve been around the community. Well done to [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://technosailor.com/files/Screen-Shot-2011-11-17-at-2.18.53-PM-600x397.png" alt="WordPress Downloaded over 12.5M times" title="WordPress Downloaded over 12.5M times" width="584" height="386" class="alignright size-large wp-image-8505" />WordPress 3.2 has been downloaded a killer 12M+ times. WordPress as a whole continues to grow and is touted to be in the approximate 14% of the web zone. That&#8217;s ridiculously huge and it astounds me how big the projects footprint has become in the 7 years I&#8217;ve been around the community. Well done to all involved!</p>
<p>With that said, WordPress 3.3 is just around the corner and, as usual, it&#8217;s chock full of goodies for everyone. I&#8217;d say that the notable changes for developers are the most significant. Improved metadata handling, improved SQL tools, improved cache API and deprecation of several venerable functions are all changes that developers should be aware of.</p>
<p>This article touches mostly on the user experience and features that are new in WordPress 3.3. Developers who want to dive in should reference <a href="http://codex.wordpress.org/Version_3.3">this running list of &#8220;things&#8221; that were addressed in WP 3.3</a>.</p>
<h2>Admin Bar Overhaul</h2>
<p>The Admin Bar that was introduced a few versions ago has become a main-stay of my WordPress experience. At first, I felt like it got in the way, but I soon got used to it. In WordPress 3.3, the Admin Bar gets tweaked and enhanced. For Multisite users, you now have access to the Network Admin from a new &#8220;My Sites&#8221; menu along with all sites that you have access to <a class="simple-footnote" title="You will only see sites that you have a Core Role on (Administrator, Editor, Author, Contributor, Subscriber). Super Admins that are not assigned to a blog, even though they have access to it as a Super Admin, will not have that blog listed" id="return-note-8498-1" href="#note-8498-1"><sup>1</sup></a>.</p>
<p>As usual, developers can modify the admin bar using the <code class="codecolorer text default"><span class="text">admin_bar_menu</span></code> action, and hooking a callback that modifies the <code class="codecolorer php default"><span class="php"><span style="color: #000088;">$wp_admin_bar</span></span></code> global. This object is created by the <code class="codecolorer php default"><span class="php">WP_Admin_Bar</span></code> class that provides an <code class="codecolorer php default"><span class="php">add_menu<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span></span></code> and <code class="codecolorer php default"><span class="php">remove_menu<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span></span></code> method for manipulation.</p>
<p>Sample Code:</p>
<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br /></div></td><td><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> ab_add_faq_link<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><br />
<span style="color: #009900;">&#123;</span><br />
&nbsp; <span style="color: #000000; font-weight: bold;">global</span> <span style="color: #000088;">$wp_admin_bar</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #000088;">$wp_admin_bar</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">add_menu</span><span style="color: #009900;">&#40;</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">'id'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'menu_faq'</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">'title'</span> <span style="color: #339933;">=&gt;</span> __<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'FAQs'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">'href'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'http://example.com/faqs'</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">'meta'</span> <span style="color: #339933;">=&gt;</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'class'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'custom_adminbar_menu'</span><span style="color: #009900;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#41;</span><br />
&nbsp; <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
add_action<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'wp_admin_bar'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'ab_add_faq_link'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<h2>HTML5 Admin/Responsive Layout</h2>
<p>More Admin-side improvements, like a conversion to HTML5 are a little more understated and less pronounced &#8211; unless you&#8217;re trying to access it from your iPhone or mobile phone. The conversion to HTML5, while meeting the trends of the day, also have the practical effect of providing an adaptive design which conforms to the device or viewport you are using. There&#8217;s nothing too crazy here, but with the web world going in the direction of HTML5, this move lays groundwork for new HTML5 features in the future.</p>
<h2>Drag and Drop Media Uploader</h2>
<p>One of the biggest new features in WordPress 3.3 (and a long time in coming!) is a new and improved media uploader. This is a feature that is discussed every single release cycle but because there&#8217;s only so much room in a major release cycle for major features (and this is a huge rewrite), it has continued to get bumped to a future release &#8211; until now.</p>
<p>While the new uploader is not the holy grail and I feel like there&#8217;s still a lot of room for improvement, it takes a giant leap forward in making the web interface feel more natural and more like a native application.</p>
<p>What am I talking about? Well, three words: Drag and Drop. With the new media uploaded, it&#8217;s as simple as dragging files to the &#8220;drop zone&#8221; in the native way that your OS allows: On Mac, from the Finder or by dragging the title bar icon in the app you&#8217;re using (Photoshop? Preview? Skitch?) into drop zone. On Windows, by pulling your file from Explorer into the Drop Zone.</p>
<p>Plus, related to the last feature, this media uploader prefers HTML5. For the geeky, the failover for HTML5 uploading is first Silverlight, then Flash then the old fashioned &#8220;Choose File&#8221; HTML dialog.</p>
<div id="attachment_8501" class="wp-caption aligncenter" style="width: 594px"><img class="size-large wp-image-8501" title="HTML5 Media Uploader" src="http://technosailor.com/files/Screen-Shot-2011-11-17-at-12.04.37-PM-600x375.png" alt="HTML5 Media Uploader" width="584" height="365" /><p class="wp-caption-text">HTML5 Media Uploader</p></div>
<h2>Welcome Screen and Pointers</h2>
<p><img class="alignright size-full wp-image-8502" title="Dashboard ‹ Technosailor.com — WordPress" src="http://technosailor.com/files/Dashboard-‹-Technosailor.com-—-WordPress.jpg" alt="" width="355" height="209" />If you already are using WordPress, you won&#8217;t see the welcome screen unless you setup a new WordPress install <a class="simple-footnote" title="You can manually turn the Welcome panel on in the Dashboard Screen Option" id="return-note-8498-2" href="#note-8498-2"><sup>2</sup></a>. The Welcome panel gives an overview of WordPress to new users.</p>
<p>More importantly, there is a new jQuery plugin that adds &#8220;Pointers&#8221; to WordPress whenever a new core, user facing feature is added. In WordPress 3.3, you&#8217;ll see one immediately pertaining to the new Admin Bar. However, Plugin and Theme developers who want to highlight new features can also do so. If you know jQuery, the following code is a good head start in the right direction:</p>
<p>Sample Code:</p>
<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">function ab_pointers()<br />
{<br />
&nbsp; if( !is_admin() )<br />
&nbsp; &nbsp; return false;<br />
<br />
&nbsp; // Get Proper CSS involved - probably already included, but we want to be safe.<br />
&nbsp; wp_enqueue_style( 'wp-pointer' );<br />
&nbsp; wp_print_styles();<br />
<br />
&nbsp; // Get Proper bundled jQuery plugin involved - probably already included, but just to be safe<br />
&nbsp; wp_enqueue_script( 'wp-pointer' );<br />
&nbsp; wp_print_scripts();<br />
<br />
&nbsp; // Define text for the Pointer. Make sure you escape stuff<br />
&nbsp; $widget_text = '&lt;h3&gt;' . esc_js( __( 'Important!') ) . '&lt;/h3&gt;';<br />
&nbsp; $widget_text .= '&lt;p&gt;' . esc_js( __( &quot;This is where you would put some text that'll help the user understand WTF is up with your new stuff. Use it wisely and make sure it's short (Users won't read it if it's too long and once they dismiss it, it won't be shown again)&quot; ) ). '&lt;/p&gt;';<br />
&nbsp; ?&gt;<br />
&nbsp; &lt;script type=&quot;text/javascript&quot;&gt;<br />
&nbsp; jQuery(document).ready(function(){<br />
&nbsp; &nbsp; jQuery('#your_dom_element').pointer({<br />
&nbsp; &nbsp; &nbsp; content &nbsp; &nbsp;: '<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$widget_text</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>',<br />
&nbsp; &nbsp; &nbsp; position&nbsp; &nbsp;: 'left',<br />
&nbsp; &nbsp; &nbsp; close &nbsp;: function() {}<br />
&nbsp; &nbsp; }).pointer('open');<br />
&nbsp; });<br />
&nbsp; &lt;/script&gt;<br />
&nbsp; <span style="color: #000000; font-weight: bold;">&lt;?php</span><br />
<span style="color: #009900;">&#125;</span><br />
add_action<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'admin_head'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'ab_pointers'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>I imagine this will get easier to implement in the future.</p>
<h2>Improvements to Distraction Free Writing</h2>
<p>Distraction Free Writing, <a href="http://technosailor.com/2011/06/20/10-things-you-need-to-know-about-wordpress-3-2/">which made its debut in WordPress 3.2</a>, offered bloggers vast improvements to how they wrote content by removing the silly things that, well, distract from the job of writing.</p>
<p>In WordPress 3.3, DFW now integrates the content width and other CSS stylings of post content into the editor. This is all based on the active theme CSS and it attempts to aid the blogger in formatting properly for the theme the content will be displayed in.</p>
<h2>Admin Menu Flyouts</h2>
<p>A minor enhancement, yet important from a UI perspective &#8211; especially for those of you who, like me, constantly have wp-admin menus expanded &#8211; are menu flyouts. Very simple little thing, but when a user mouses over a menu, the submenu items under it appear in a &#8220;flyout&#8221; to the right and disappear when the mouse is no longer over the top level menu. Of course, for touch devices and clicky people, the collapse/expand functionality still exists.</p>
<p><img class="alignright size-large wp-image-8503" title="Screen Shot 2011-11-17 at 1.19.54 PM" src="http://technosailor.com/files/Screen-Shot-2011-11-17-at-1.19.54-PM-600x394.png" alt="" width="584" height="383" /></p>
<h2>Tumblr Importer</h2>
<p>Technically, importers are <a href="http://technosailor.com/2009/11/11/10-things-you-need-to-know-about-wordpress-2-9/">no longer bundled with WordPress core</a>. They are plugins. However, the removed importers are still listed on the Tools > Import console and can be installed from within WordPress.</p>
<p>An importer that has been in demand for some time, due to the popularity of <a href="http://tumblr.com">Tumblr</a> but the more popular nature of WordPress, is a Tumblr importer. Now that is available &#8211; also as a one-click plugin &#8211; to assist Tumblrs in moving to WordPress.<br />
<div id="attachment_8504" class="wp-caption alignright" style="width: 594px"><img src="http://technosailor.com/files/Screen-Shot-2011-11-17-at-1.35.13-PM-600x394.png" alt="Tumblr Importer" title="Tumblr Importer" width="584" height="383" class="size-large wp-image-8504" /><p class="wp-caption-text">Tumblr Importer</p></div></p>
<p>Go forth and enjoy a better blogging experience. And hey, use <a href="http://codex.wordpress.org/Press_This">Press This</a> if you like the Tumble style.</p>
<h2>Multisite &#8211; Internationalized Domain Name Support</h2>
<p>For non-english Multisite installs, it is now possible to designate an international domain name <a class="simple-footnote" title="IDNs are domain names that contains non-ASCII characters such as are provided by languages like Arabic, Kanji or Hiragana or language styles like Cyrillic" id="return-note-8498-3" href="#note-8498-3"><sup>3</sup></a> as the site install domain. In Multisite, this means that base installs of WordPress can use IDNs now, which will serve to increase the adoption of these domains in non-English speaking parts of the world.</p>
<p>ワードプレスのイェーイ.jp, FTW!</p>
<h2>Multisite &#8211; Network Enabled Themes and Theme Updates</h2>
<p>Since we&#8217;re on the topic of Multisite, WordPress 3.3 brings the Network Activate option that has been available for plugins to themes. The plugin flow and the theme flow is different in WordPress, so this option makes things significantly easier. The plugin workflow only allows Super Admins to <em>install</em> WordPress and gives the Super Admin the ability to turn off the plugin menu for Blog Admins, but if left turned on, any Admin can activate any available plugin for their particular blog. For plugins, Super Admins can designate a plugin as a global plugin by Network activating in the Network Admin.</p>
<p>For Themes, it was an arduous task of making themes available to sub-sites in the past. Now, after installing a theme from the Network Admin, all it takes is a single click on Network Activate to make that theme available to sites in the network.</p>
<h2>Deprecating Feeds</h2>
<p>Finally, for those of you who rely on your feeds and are stuck in the stone age still, WordPress no longer supports old RSS 0.92 feeds and RDF feeds. For what it&#8217;s worth though, the default RSS feed is the still supported RSS 2.0 feed (add <code class="codecolorer text default"><span class="text">/feed</span></code> to the end of just about any URL in WordPress and that is your RSS 2.0 feed.</p>
<p>Still, I know some of you don&#8217;t like to change and may be using the old feeds. There are two things to note:</p>
<ol>
<li>These now-deprecated feeds will redirect to the proper feed, with 301,</li>
<li>If you use <a href="http://feedburner.com">FeedBurner</a>, or similar feed repurposing and syndication service, please make sure you are using the RSS 2.0 feed, not the RSS 0.92 feed. Like I said, a 301 will occur but that is actually additional load on the web server because it generates additional HTTP requests</li>
</ol>
<h2>Wrap Up</h2>
<p>Sadly, this was the first WordPress release in some time where I have not contributed any code. There are a lot of reasons for that, none of which are all that important. But the core development team has really done a great job with this release and they should be commended. </p>
<p>If you really like WordPress, <a href="http://wordpressfoundation.org/donate/">thank the team with a donation to the WordPress Foundation</a>. All of the work that has gone into this release has come on the backs of volunteers or dedicated, full time paid employees of other companies who have been &#8220;donated&#8221; to the project.</p>
<div class="simple-footnotes"><p class="notes">Notes:</p><ol><li id="note-8498-1">You will only see sites that you have a Core Role on (Administrator, Editor, Author, Contributor, Subscriber). Super Admins that are not assigned to a blog, even though they have access to it as a Super Admin, will not have that blog listed <a href="#return-note-8498-1">&#8617;</a></li><li id="note-8498-2">You can manually turn the Welcome panel on in the Dashboard Screen Option <a href="#return-note-8498-2">&#8617;</a></li><li id="note-8498-3">IDNs are domain names that contains non-ASCII characters such as are provided by languages like Arabic, Kanji or Hiragana or language styles like Cyrillic <a href="#return-note-8498-3">&#8617;</a></li></ol></div>]]></content:encoded>
			<wfw:commentRss>http://technosailor.com/2011/11/17/10-things-you-need-to-know-about-wordpress-3-3/feed/</wfw:commentRss>
		<slash:comments>25</slash:comments>
		</item>
		<item>
		<title>TUTORIAL: Using Sass and Compass for managing CSS in WordPress</title>
		<link>http://technosailor.com/2011/11/02/tutorial-using-sass-and-compass-for-managing-css-in-wordpress/</link>
		<comments>http://technosailor.com/2011/11/02/tutorial-using-sass-and-compass-for-managing-css-in-wordpress/#comments</comments>
		<pubDate>Wed, 02 Nov 2011 19:35:36 +0000</pubDate>
		<dc:creator>Aaron</dc:creator>
				<category><![CDATA[Aaron Brazell]]></category>
		<category><![CDATA[compass]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[ruby on rails]]></category>
		<category><![CDATA[sass]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[ux design]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://technosailor.com/?p=8494</guid>
		<description><![CDATA[I don&#8217;t often write tutorials but since the rebuild of the WP Engine website some months ago, I have been turned on to the use of a brilliant combination of tools made for development in a Ruby on Rails environment. That doesn&#8217;t mean we can&#8217;t make it work for WordPress too. The tools are Compass [...]]]></description>
			<content:encoded><![CDATA[<p>I don&#8217;t often write tutorials but since the rebuild of the <a href="http://wpengine.com">WP Engine</a> website some months ago, I have been turned on to the use of a brilliant combination of tools made for development in a Ruby on Rails environment. That doesn&#8217;t mean we can&#8217;t make it work for WordPress too.</p>
<p><img class="aligncenter size-full wp-image-8496" title="wp-compass" src="http://technosailor.com/files/wp-compass.png" alt="" width="600" height="250" /></p>
<p>The tools are <a href="http://compass-style.org/">Compass</a> combined with <a href="http://sass-lang.com/">Sass</a> (which means Sytactically Awesome Stylesheets or some random crap like that).</p>
<p>Sass is cool because it lets you do a whole bunch of stuff with CSS that you couldn&#8217;t normally. It&#8217;s a kind of abstraction layer above CSS which means you can write normal CSS if you want, but then why wouldn&#8217;t you just write normal CSS instead of using Sass?</p>
<p>I&#8217;m getting slightly ahead of myself, but With Sass you can do awesome things like variable/placeholders which is awesome for things like defining core elements of a stylesheet such as a palette of colors.</p>
<div class="codecolorer-container css default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br /></div></td><td><div class="css codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$cloud-<span style="color: #000000; font-weight: bold;">blue</span><span style="color: #00AA00;">:</span> <span style="color: #cc00cc;">#d9e7f3</span><span style="color: #00AA00;">;</span><br />
$light-<span style="color: #000000; font-weight: bold;">blue</span><span style="color: #00AA00;">:</span> <span style="color: #cc00cc;">#f0f7fc</span><span style="color: #00AA00;">;</span><br />
$dark-<span style="color: #000000; font-weight: bold;">blue</span><span style="color: #00AA00;">:</span> <span style="color: #cc00cc;">#036</span><span style="color: #00AA00;">;</span><br />
$green<span style="color: #00AA00;">:</span> <span style="color: #cc00cc;">#7ca60a</span><span style="color: #00AA00;">;</span></div></td></tr></tbody></table></div>
<p>Then using those variables, you can just use these placeholders in your SCSS (Sassy CSS) file:</p>
<div class="codecolorer-container css default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br /></div></td><td><div class="css codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">a <span style="color: #00AA00;">&#123;</span> <span style="color: #000000; font-weight: bold;">color</span><span style="color: #00AA00;">:</span> $dark-<span style="color: #000000; font-weight: bold;">blue</span><span style="color: #00AA00;">;</span> <span style="color: #00AA00;">&#125;</span><br />
a<span style="color: #3333ff;">:hover </span><span style="color: #00AA00;">&#123;</span> <span style="color: #000000; font-weight: bold;">color</span><span style="color: #00AA00;">:</span> $light-<span style="color: #000000; font-weight: bold;">blue</span><span style="color: #00AA00;">;</span> <span style="color: #00AA00;">&#125;</span></div></td></tr></tbody></table></div>
<p>You can also write Mixins. Mixins are essentially reusable blocks of CSS that look a lot like functions you would see in languages like JavaScript, PHP or Ruby:</p>
<div class="codecolorer-container css default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br /></div></td><td><div class="css codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$radius<span style="color: #00AA00;">:</span><span style="color: #933;">5px</span><span style="color: #00AA00;">;</span><br />
<br />
<span style="color: #a1a100;">@mixin border-radius($radius)</span><br />
<span style="color: #00AA00;">&#123;</span><br />
border-radius<span style="color: #00AA00;">:</span>$radius<span style="color: #00AA00;">;</span><br />
-moz-border-radius<span style="color: #00AA00;">:</span> $radius<span style="color: #00AA00;">;</span><br />
-webkit-border-radius<span style="color: #00AA00;">:</span> $radius<span style="color: #00AA00;">;</span><br />
<span style="color: #00AA00;">&#125;</span></div></td></tr></tbody></table></div>
<p>You can use that in your SCSS file as such:</p>
<div class="codecolorer-container css default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="css codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">form input <span style="color: #00AA00;">&#123;</span> <span style="color: #a1a100;">@include border-radius(5px); }</span></div></td></tr></tbody></table></div>
<p>But again, I&#8217;m getting ahead of myself.</p>
<p>When I talked about using Sass and Compass on Twitter, other WordPress devs made comments that made me want to write this tutorial. One person said that they were tired of Rails developers having all the toys &#8211; and it&#8217;s true. There are so many awesome things out there for Rails developers that we as PHP and WordPress developers don&#8217;t benefit from. This tutorial is non-exhaustive. There are tons of things that you can do with this that I won&#8217;t cover. But this should get you going with Mac OS X Lion, developing WordPress locally on your own machine and uploading to a theme file called &#8220;test&#8221; on a remote server.</p>
<h2>Prerequisites</h2>
<p>First of all, you need to have a local version of WordPress running. There are a variety of ways to do this, but I use the approach of installing XAMPP. <a href="http://www.endlesslycurious.com/2011/03/14/running-wordpress-on-mac-os-x-with-xampp/">Here&#8217;s a tutorial on that</a>. Follow the rabbit trail to configure Apache to look to your Sites directory, as I have, or make that translation in your head to what the default is. There&#8217;s plenty of instruction on how to do that on the internet.</p>
<p>For the specifics of this tutorial, it&#8217;s <strong>very important</strong> that you have the latest version of Ruby. The best way to do this is with a tool called rvm, or Ruby Version Manager. Install this with the following Terminal command:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">bash</span> <span style="color: #000000; font-weight: bold;">&lt;</span> <span style="color: #000000; font-weight: bold;">&lt;</span><span style="color: #7a0874; font-weight: bold;">&#40;</span>curl <span style="color: #660033;">-s</span> https:<span style="color: #000000; font-weight: bold;">//</span>raw.github.com<span style="color: #000000; font-weight: bold;">/</span>wayneeseguin<span style="color: #000000; font-weight: bold;">/</span>rvm<span style="color: #000000; font-weight: bold;">/</span>master<span style="color: #000000; font-weight: bold;">/</span>binscripts<span style="color: #000000; font-weight: bold;">/</span>rvm-installer<span style="color: #7a0874; font-weight: bold;">&#41;</span></div></td></tr></tbody></table></div>
<p>Once rvm is installed, use it to install 1.9.3-p0, the only current version compatible with OS X Lion, and refresh your Terminal profile settings. The last command sets 1.9.3-p0 (or whatever future version you choose to use) as your default.</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">rvm <span style="color: #c20cb9; font-weight: bold;">install</span> 1.9.3-p0<br />
rvm reload<br />
<span style="color: #7a0874; font-weight: bold;">source</span> ~<span style="color: #000000; font-weight: bold;">/</span>.bash_profile<br />
rvm <span style="color: #660033;">--default</span> use 1.9.3-p0</div></td></tr></tbody></table></div>
<p>If you wish to verify that you&#8217;ve got the proper version of Ruby active, verify it with the <code class="codecolorer bash default"><span class="bash">ruby <span style="color: #660033;">-v</span></span></code> command.</p>
<p>My system reported:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">ruby 1.9.3p0 (2011-10-30 revision 33570) [x86_64-darwin11.2.0]</div></td></tr></tbody></table></div>
<p>Now, there are some gems that need to be installed. For developers unfamiliar with Ruby &#8211; or Rails &#8211; gems, are essentially additional libraries that are installed into the Ruby framework, much like PHP PEAR or PECL modules.</p>
<p>The first is <a href="http://rubygems.org/gems/builder">Builder, which is used for building XML structures. The second one is <a href="http://compass-style.org">Compass</a> which will give us the ability to leverage Sass for CSS authoring.</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">gem <span style="color: #c20cb9; font-weight: bold;">install</span> builder<br />
gem <span style="color: #c20cb9; font-weight: bold;">install</span> compass</div></td></tr></tbody></table></div>
<h2>Creating a Sass Project</h2>
<p>Once we have everything installed properly, we can start a new project. I keep this out of my web directory (i.e. WordPress structure). Personally, I&#8217;ve created a sass directory under my user profile (/Users/aaron/sass) and run my projects out of it with a separate directory for each project.</p>
<p>Now we have to create our compass project. We do that with <code class="codecolorer bash default"><span class="bash">compass create</span></code> from our <code class="codecolorer text default"><span class="text">~/sass</span></code> directory and then moving into the newly created directory.</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">compass create <span style="color: #7a0874; font-weight: bold;">test</span><br />
<span style="color: #7a0874; font-weight: bold;">cd</span> <span style="color: #7a0874; font-weight: bold;">test</span></div></td></tr></tbody></table></div>
<p>Doing a directory listing should show something along these lines:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">NCC-1701:test aaron$ ls -la<br />
total 8<br />
drwxr-xr-x 6 aaron staff 204 Nov 2 11:36 .<br />
drwxr-xr-x 4 aaron staff 136 Nov 2 11:36 ..<br />
drwxr-xr-x 5 aaron staff 170 Nov 2 11:36 .sass-cache<br />
-rw-r--r-- 1 aaron staff 861 Nov 2 11:36 config.rb<br />
drwxr-xr-x 5 aaron staff 170 Nov 2 11:36 sass<br />
drwxr-xr-x 5 aaron staff 170 Nov 2 11:36 stylesheets</div></td></tr></tbody></table></div>
<p>Good. Our project is created but we need to make some changes to make this work with WordPress. To do this, we need to edit the <code class="codecolorer text default"><span class="text">config.rb</span></code> file which is the project configuration file. You can edit this file in Textmate, vi, or whatever you choose as your preferred text editor.</p>
<p>The default configuration is:</p>
<div class="codecolorer-container ruby default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br /></div></td><td><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">http_path = <span style="color:#996600;">&quot;/&quot;</span><br />
css_dir = <span style="color:#996600;">&quot;stylesheets&quot;</span><br />
sass_dir = <span style="color:#996600;">&quot;sass&quot;</span><br />
images_dir = <span style="color:#996600;">&quot;images&quot;</span><br />
javascripts_dir = <span style="color:#996600;">&quot;javascripts&quot;</span></div></td></tr></tbody></table></div>
<p>My config file looks like this:</p>
<div class="codecolorer-container ruby default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br /></div></td><td><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">http_path = <span style="color:#996600;">&quot;../../Sites&quot;</span><br />
css_dir = <span style="color:#996600;">&quot;../../Sites/wp-content/themes/test/css&quot;</span><br />
sass_dir = <span style="color:#996600;">&quot;sass&quot;</span><br />
images_dir = <span style="color:#996600;">&quot;images&quot;</span><br />
javascripts_dir = <span style="color:#996600;">&quot;js&quot;</span><br />
project_type = <span style="color:#ff3333; font-weight:bold;">:stand_alone</span><br />
output_style = <span style="color:#ff3333; font-weight:bold;">:nested</span><br />
line_comments = <span style="color:#0000FF; font-weight:bold;">false</span></div></td></tr></tbody></table></div>
<p>Important changes here:</p>
<ul>
<li>The <code class="codecolorer text default"><span class="text">http_path</span></code> is a <em>relative</em> path to my DOCROOT &#8211; for some reason, things got whacked when using an absolute path.</li>
<li>The <code class="codecolorer text default"><span class="text">css_dir</span></code> is a <em>relative</em> path to the <code class="codecolorer text default"><span class="text">css</span></code> directory in my WordPress theme directory. At this time, there is no configuration option to control the name of the CSS files being generated so we will have to use <code class="codecolorer css default"><span class="css"><span style="color: #a1a100;">@import</span></span></code> inside the required WordPress <code class="codecolorer text default"><span class="text">style.css</span></code> template file to incorporate Compass generated CSS files.</li>
<li>You can change the <code class="codecolorer text default"><span class="text">images_dir</span></code> and <code class="codecolorer text default"><span class="text">javascripts_dir</span></code> as needed to reflect your taste. Personally, I prefer shorter names, so that is reflected in the config file.</li>
<li>The <code class="codecolorer text default"><span class="text">project_type</span></code> flag is required because, if omitted, Compass assumes we are working in a Rails environment on a Rails project with Rails conventions&#8230; WordPress is none of that.</li>
<li>The <code class="codecolorer text default"><span class="text">output_style</span></code> flag has been set to <code class="codecolorer text default"><span class="text">:nested</span></code> but could be <code class="codecolorer text default"><span class="text">:expanded</span></code>, <code class="codecolorer text default"><span class="text">:compact</span></code> or <code class="codecolorer text default"><span class="text">:compressed</span></code> depending on your tastes.</li>
<li>The <code class="codecolorer text default"><span class="text">line_comments</span></code> flag has been set to false to remove debug information from the generated CSS</li>
</ul>
<p>All configuration options can be referenced in the <a href="http://compass-style.org/help/tutorials/configuration-reference/">Compass docs</a>.</p>
<p>Having modified the config file, we can take one of two approaches to generating the CSS in our WordPress theme. We can use the <code class="codecolorer bash default"><span class="bash">compass compile</span></code> which will generate the files one time. Everytime modifications are made, however, this command would have to be re-run. I prefer, instead, to use <code class="codecolorer bash default"><span class="bash">compass <span style="color: #c20cb9; font-weight: bold;">watch</span></span></code> which is a small process that remains running and watches your Sass project for changes and recompiles automatically when changes are made.</p>
<p>Simply run this command from inside the Sass project:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">compass <span style="color: #c20cb9; font-weight: bold;">watch</span><br />
<span style="color: #000000; font-weight: bold;">&gt;&gt;&gt;</span> Change detected to: ie.scss<br />
create ..<span style="color: #000000; font-weight: bold;">/</span>..<span style="color: #000000; font-weight: bold;">/</span>Sites<span style="color: #000000; font-weight: bold;">/</span>wp-content<span style="color: #000000; font-weight: bold;">/</span>themes<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>ie.css<br />
create ..<span style="color: #000000; font-weight: bold;">/</span>..<span style="color: #000000; font-weight: bold;">/</span>Sites<span style="color: #000000; font-weight: bold;">/</span>wp-content<span style="color: #000000; font-weight: bold;">/</span>themes<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>print.css<br />
create ..<span style="color: #000000; font-weight: bold;">/</span>..<span style="color: #000000; font-weight: bold;">/</span>Sites<span style="color: #000000; font-weight: bold;">/</span>wp-content<span style="color: #000000; font-weight: bold;">/</span>themes<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>screen.css<br />
<span style="color: #000000; font-weight: bold;">/</span>Users<span style="color: #000000; font-weight: bold;">/</span>aaron<span style="color: #000000; font-weight: bold;">/</span>.rvm<span style="color: #000000; font-weight: bold;">/</span>gems<span style="color: #000000; font-weight: bold;">/</span>ruby-1.9.3-p0<span style="color: #000000; font-weight: bold;">/</span>gems<span style="color: #000000; font-weight: bold;">/</span>fssm-0.2.7<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>fssm<span style="color: #000000; font-weight: bold;">/</span>support.rb:<span style="color: #000000;">40</span>: Use RbConfig instead of obsolete and deprecated Config.<br />
FSSM -<span style="color: #000000; font-weight: bold;">&gt;</span> An optimized backend is available <span style="color: #000000; font-weight: bold;">for</span> this platform<span style="color: #000000; font-weight: bold;">!</span><br />
FSSM -<span style="color: #000000; font-weight: bold;">&gt;</span> gem <span style="color: #c20cb9; font-weight: bold;">install</span> rb-fsevent<br />
<span style="color: #000000; font-weight: bold;">&gt;&gt;&gt;</span> Compass is polling <span style="color: #000000; font-weight: bold;">for</span> changes. Press Ctrl-C to Stop.</div></td></tr></tbody></table></div>
<p>At this point, if you want to develop locally, all you have to do is have your WordPress <code class="codecolorer text default"><span class="text">style.css</span></code> import these stylesheets.</p>
<div class="codecolorer-container css default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br /></div></td><td><div class="css codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #808080; font-style: italic;">/*<br />
Theme Name: Test Theme<br />
Author: Aaron Brazell<br />
Author URI: http://emmense.com<br />
Description: A test theme demonstrating Sass and Compass<br />
Version: 1.0<br />
*/</span><br />
<br />
<span style="color: #a1a100;">@import url('css/screen.css');</span><br />
<span style="color: #a1a100;">@import url('css/print.css');</span><br />
<span style="color: #a1a100;">@import url('css/ie.css');</span></div></td></tr></tbody></table></div>
<h2>Uploading to a Remote WordPress Install</h2>
<p>Fortunately, with a little Ruby magic and some built in Compass hooks, we can also upload these newly created CSS files to our WordPress theme. In order to do this, you have to make sure the remote server has the theme directory created <em>and</em> if you are uploading to a subdirectory of that theme (e.g. theme_dir/css), that that directory is created as well.</p>
<p>In our case, the theme directory is <code class="codecolorer text default"><span class="text">test/</span></code> and I want to upload to a subdirectory <code class="codecolorer text default"><span class="text">test/css/</span></code>.</p>
<p>Next we have to install two new gems &#8211; the Net::SSH and Net::SFTP gems. Installing these is as straightforward as the earlier gems:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">gem <span style="color: #c20cb9; font-weight: bold;">install</span> net-ssh<br />
gem <span style="color: #c20cb9; font-weight: bold;">install</span> net-sftp</div></td></tr></tbody></table></div>
<p>Once this has done, include these in your <code class="codecolorer text default"><span class="text">config.rb</span></code> file. I did this at the top which is best practice with Ruby.</p>
<div class="codecolorer-container ruby default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br /></div></td><td><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'net/ssh'</span><br />
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'net/sftp'</span></div></td></tr></tbody></table></div>
<p>Below all the previous configurations, add some configuration lines and replace values as needed for your own project:</p>
<div class="codecolorer-container ruby default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br /></div></td><td><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color:#008000; font-style:italic;"># note that this is the directory that CSS files will be written. It can be the theme dir</span><br />
<span style="color:#008000; font-style:italic;"># or a subdirectory (e.g. theme_dir/css). Whatever this path is MUST exist</span><br />
remote_theme_dir_absolute = <span style="color:#996600;">'/home/sites/emmense.com/httpdocs/wp-content/themes/test/css'</span><br />
<br />
<span style="color:#008000; font-style:italic;"># SFTP Connection Details - Does not support alternate ports os SSHKeys, but could with mods</span><br />
sftp_host = <span style="color:#996600;">'hostname.com'</span> <span style="color:#008000; font-style:italic;"># Can be an IP</span><br />
sftp_user = <span style="color:#996600;">'username'</span> <span style="color:#008000; font-style:italic;"># SFTP Username</span><br />
sftp_pass = <span style="color:#996600;">'password'</span> <span style="color:#008000; font-style:italic;"># SFTP Password</span></div></td></tr></tbody></table></div>
<p>Finally, we can leverage Compass&#8217; built-in <code class="codecolorer text default"><span class="text">on_stylesheet_saved</span></code> hook to upload to the remote server using your SFTP credentials:</p>
<div class="codecolorer-container ruby default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br /></div></td><td><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color:#008000; font-style:italic;"># Callback to be used when a file change is written. This will upload to a remote WP install</span><br />
on_stylesheet_saved <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>filename<span style="color:#006600; font-weight:bold;">|</span><br />
&nbsp; <span style="color:#ff6633; font-weight:bold;">$local_path_to_css_file</span> = css_dir <span style="color:#006600; font-weight:bold;">+</span> <span style="color:#996600;">'/'</span> <span style="color:#006600; font-weight:bold;">+</span> <span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#9900CC;">basename</span><span style="color:#006600; font-weight:bold;">&#40;</span>filename<span style="color:#006600; font-weight:bold;">&#41;</span><br />
<br />
&nbsp; <span style="color:#6666ff; font-weight:bold;">Net::SFTP</span>.<span style="color:#9900CC;">start</span><span style="color:#006600; font-weight:bold;">&#40;</span> sftp_host, sftp_user, <span style="color:#ff3333; font-weight:bold;">:password</span> =<span style="color:#006600; font-weight:bold;">&amp;</span>gt; sftp_pass <span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>sftp<span style="color:#006600; font-weight:bold;">|</span><br />
&nbsp; &nbsp; <span style="color:#CC0066; font-weight:bold;">puts</span> sftp.<span style="color:#9900CC;">upload</span>! <span style="color:#ff6633; font-weight:bold;">$local_path_to_css_file</span>, remote_theme_dir_absolute <span style="color:#006600; font-weight:bold;">+</span> <span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#9900CC;">basename</span><span style="color:#006600; font-weight:bold;">&#40;</span>filename<span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
&nbsp; <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;&gt;&gt;&gt; Compass is polling for changes. Press Ctrl-C to Stop&quot;</span><br />
<span style="color:#9966CC; font-weight:bold;">end</span></div></td></tr></tbody></table></div>
<p>Restart Compass, save one of your Sass .scss files with a change of some sort (from where CSS will be compiled), and watch your files be saved locally and remotely.</p>
<p>At this point, my full <code class="codecolorer text default"><span class="text">config.rb</span></code> file looks like this:</p>
<div class="codecolorer-container ruby default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br /></div></td><td><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color:#008000; font-style:italic;"># Require any additional compass plugins here.</span><br />
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'net/ssh'</span><br />
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'net/sftp'</span><br />
<br />
<span style="color:#008000; font-style:italic;"># Set this to the root of your project when deployed:</span><br />
http_path = <span style="color:#996600;">&quot;../../Sites&quot;</span><br />
css_dir = <span style="color:#996600;">&quot;../../Sites/wp-content/themes/test/css&quot;</span><br />
sass_dir = <span style="color:#996600;">&quot;sass&quot;</span><br />
images_dir = <span style="color:#996600;">&quot;images&quot;</span><br />
javascripts_dir = <span style="color:#996600;">&quot;javascripts&quot;</span><br />
<br />
project_type = <span style="color:#ff3333; font-weight:bold;">:stand_alone</span><br />
output_style = <span style="color:#ff3333; font-weight:bold;">:nested</span><br />
line_comments = <span style="color:#0000FF; font-weight:bold;">false</span><br />
<br />
<span style="color:#008000; font-style:italic;"># note that this is the directory that CSS files will be written. It can be the theme dir</span><br />
<span style="color:#008000; font-style:italic;"># or a subdirectory (e.g. theme_dir/css). Whatever this path is MUST exist</span><br />
remote_theme_dir_absolute = <span style="color:#996600;">'/home/sites/emmense.com/httpdocs/wp-content/themes/test/css'</span><br />
<br />
<span style="color:#008000; font-style:italic;"># SFTP Connection Details - Does not support alternate ports os SSHKeys, but could with mods</span><br />
sftp_host = <span style="color:#996600;">'hostname.com'</span> <span style="color:#008000; font-style:italic;"># Can be an IP</span><br />
sftp_user = <span style="color:#996600;">'username'</span> <span style="color:#008000; font-style:italic;"># SFTP Username</span><br />
sftp_pass = <span style="color:#996600;">'password'</span> <span style="color:#008000; font-style:italic;"># SFTP Password</span><br />
<br />
<span style="color:#008000; font-style:italic;"># Callback to be used when a file change is written. This will upload to a remote WP install</span><br />
on_stylesheet_saved <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>filename<span style="color:#006600; font-weight:bold;">|</span><br />
&nbsp; <span style="color:#ff6633; font-weight:bold;">$local_path_to_css_file</span> = css_dir <span style="color:#006600; font-weight:bold;">+</span> <span style="color:#996600;">'/'</span> <span style="color:#006600; font-weight:bold;">+</span> <span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#9900CC;">basename</span><span style="color:#006600; font-weight:bold;">&#40;</span>filename<span style="color:#006600; font-weight:bold;">&#41;</span><br />
<br />
&nbsp; <span style="color:#6666ff; font-weight:bold;">Net::SFTP</span>.<span style="color:#9900CC;">start</span><span style="color:#006600; font-weight:bold;">&#40;</span> sftp_host, sftp_user, <span style="color:#ff3333; font-weight:bold;">:password</span> =<span style="color:#006600; font-weight:bold;">&amp;</span>gt; sftp_pass <span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>sftp<span style="color:#006600; font-weight:bold;">|</span><br />
&nbsp; &nbsp; <span style="color:#CC0066; font-weight:bold;">puts</span> sftp.<span style="color:#9900CC;">upload</span>! <span style="color:#ff6633; font-weight:bold;">$local_path_to_css_file</span>, remote_theme_dir_absolute <span style="color:#006600; font-weight:bold;">+</span> <span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#9900CC;">basename</span><span style="color:#006600; font-weight:bold;">&#40;</span>filename<span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
&nbsp; <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;&gt;&gt;&gt;&gt; Compass is polling for changes. Press Ctrl-C to Stop&quot;</span><br />
<span style="color:#9966CC; font-weight:bold;">end</span></div></td></tr></tbody></table></div>
<h2>Conclusion</h2>
<p>Rails developers have all the fun. It&#8217;s true. But with Compass, Sass and a little bit of Ruby, PHP developers (including WordPress theme developers) have a great tool that will make workflows more efficient, CSS more readable and structured and central management more coherent.</p>
<p>Obviously, I did not get too far into the details of <em>using</em> Compass and Sass. That&#8217;s a whole tutorial to itself. For information on that, I&#8217;d recommend checking out these fine articles written on the topic:</p>
<ul>
<li><a href="http://net.tutsplus.com/tutorials/html-css-techniques/using-compass-and-sass-for-css-in-your-next-project/">Using Compass and Sass for CSS in Your Next Project</a> (NetTuts+)</li>
<li><a href="http://sass-lang.com/tutorial.html">Official Sass Tutorials</a> (sass-lang.org)</li>
</ul>
<p><em>(Protip: I love being able to nest CSS&#8230; try it)</em></p>
<p><em>Disclaimer: I am a PHP developer, not a Ruby developer. My Ruby code could probably be improved upon by someone who is more in tune with the Ruby language.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://technosailor.com/2011/11/02/tutorial-using-sass-and-compass-for-managing-css-in-wordpress/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Platforms vs. Products: Google Does Some Soul Searching</title>
		<link>http://technosailor.com/2011/10/13/platforms-vs-products-google-does-some-soul-searching/</link>
		<comments>http://technosailor.com/2011/10/13/platforms-vs-products-google-does-some-soul-searching/#comments</comments>
		<pubDate>Thu, 13 Oct 2011 16:17:39 +0000</pubDate>
		<dc:creator>Aaron</dc:creator>
				<category><![CDATA[Aaron Brazell]]></category>
		<category><![CDATA[amazon]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[developers]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[platforms]]></category>
		<category><![CDATA[products]]></category>
		<category><![CDATA[rant]]></category>

		<guid isPermaLink="false">http://technosailor.com/?p=8492</guid>
		<description><![CDATA[A rant from a Googler comparing Amazon&#8217;s focus on a platform vs Google&#8217;s focus on products. Fundamental.]]></description>
			<content:encoded><![CDATA[<p><a href="http://steverant.pen.io/">A rant</a> from a Googler comparing Amazon&#8217;s focus on a platform vs Google&#8217;s focus on products. Fundamental.</p>
]]></content:encoded>
			<wfw:commentRss>http://technosailor.com/2011/10/13/platforms-vs-products-google-does-some-soul-searching/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Changing Roles at WP Engine</title>
		<link>http://technosailor.com/2011/10/03/changing-roles-at-wp-engine/</link>
		<comments>http://technosailor.com/2011/10/03/changing-roles-at-wp-engine/#comments</comments>
		<pubDate>Mon, 03 Oct 2011 17:10:05 +0000</pubDate>
		<dc:creator>Aaron</dc:creator>
				<category><![CDATA[Aaron Brazell]]></category>
		<category><![CDATA[consulting]]></category>
		<category><![CDATA[employment]]></category>
		<category><![CDATA[jobs]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[wpengine]]></category>

		<guid isPermaLink="false">http://technosailor.com/?p=8491</guid>
		<description><![CDATA[For some time, I&#8217;ve felt there was a change coming and today, I&#8217;m ready to announce that my role within WP Engine is changing. Starting today, I have transitioned into an advisory and consulting role with the company. Effective immediately, I will be taking the portion of the business that focused on professional services and [...]]]></description>
			<content:encoded><![CDATA[<p>For some time, I&#8217;ve felt there was a change coming and today, I&#8217;m ready to announce that my role within <a href="http://wpengine.com">WP Engine</a> is changing. Starting today, I have transitioned into an advisory and consulting role with the company.</p>
<p>Effective immediately, I will be taking the portion of the business that focused on professional services and consulting to allow the company to focus on premiere WordPress hosting. It&#8217;s a good thing and I&#8217;m excited about the possibilities. Back in November, we decided to start taking on some professional services work to augment demands from many of our customers. It was awesome to have fast, secure, scaleable, managed hosting but they wanted more!</p>
<p>And we wanted more.</p>
<p>However, as the company has evolved, taken funding, hired more people, addressed growth challenges and built out our hosting option, it seemed clear that the professional services portion of the company was a separate kind of deal than what we wanted to focus on.</p>
<p>So today, I&#8217;ll be taking that portion of the company (and all related existing and current relationships, as agreed on), and working on that. Meanwhile, I&#8217;ll still be working with the company to guide direction and strategy. So it&#8217;s good for everyone.</p>
<p>Effective immediately, I am available for all WordPress consulting roles. However, I am also currently entertaining all possibilities involving full time employment as well, and welcome those conversations.</p>
<p>To contact me, please direct emails to <a href="mailto:aaron@technosailor.com">aaron@technosailor.com</a>. As transitions go, the immediate financial impact is something that I need to consider.</p>
]]></content:encoded>
			<wfw:commentRss>http://technosailor.com/2011/10/03/changing-roles-at-wp-engine/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>How is WordPress Subversion Organized</title>
		<link>http://technosailor.com/2011/09/30/how-is-wordpress-subversion-organized/</link>
		<comments>http://technosailor.com/2011/09/30/how-is-wordpress-subversion-organized/#comments</comments>
		<pubDate>Fri, 30 Sep 2011 17:14:26 +0000</pubDate>
		<dc:creator>Aaron</dc:creator>
				<category><![CDATA[Aaron Brazell]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[svn]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[wordpress development]]></category>

		<guid isPermaLink="false">http://technosailor.com/?p=8486</guid>
		<description><![CDATA[There&#8217;s some confusion about how WordPress organizes it&#8217;s Subversion (SVN) repository. Most SVN repositories are organized into three main directories, as is best practice &#8212; trunk, tags, branches. The repository can be found at http://core.svn.wordpress.org/ and a primer on how to use SVN for WordPress development can be found on Mark&#8217;s blog and, for Windows, [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://technosailor.com/files/svn-600x450.jpg" alt="" title="svn" width="584" height="438" class="aligncenter size-large wp-image-8487" /><br />
There&#8217;s some confusion about how WordPress organizes it&#8217;s Subversion (SVN) repository. Most SVN repositories are organized into three main directories, as is best practice &mdash; trunk, tags, branches. </p>
<p>The repository can be found at <a href="http://core.svn.wordpress.org/">http://core.svn.wordpress.org/</a> and a primer on how to use SVN for WordPress development can be found on <a href="http://markjaquith.wordpress.com/2005/11/02/my-wordpress-toolbox/">Mark&#8217;s blog</a> and, for Windows, on <a href="http://blog.ftwr.co.uk/archives/2005/11/03/windows-wordpress-toolbox/">Westi&#8217;s blog</a>.</p>
<p>Though there are varying schools of thought as to how branches and tags work, WordPress follows the following system:</p>
<p><strong>/trunk is where future release development occurs.</strong> Right now, WordPress development is focused on an upcoming 3.3 release. All development for this release is going into /trunk.</p>
<p><strong>/branches is where 3.3 will go once it is released (or where future &#8220;branches&#8221; of the software will be housed down the road.</strong> The directory contains a series of directories that are branches from the current release development &mdash; for example, /branches/3.0, /branches/3.1, /branches/3.2, etc. What you won&#8217;t find in branches are security (or dot) releases.</p>
<p>For instance, when a security vulnerability is discovered, it will be patched in /trunk for the current development branch and may be backported to the previous release branch (currently, 3.2). But until the next security release of WordPress comes out for that branch, it is still considered &#8220;development&#8221; and not &#8220;stable&#8221;.</p>
<p><strong>/tags is where stable releases are archived.</strong> No development goes into tagged releases. These are final releases. You will find every release here in the form of /tags/3.2.1, /tags/3.2, /tags/3.1.4, etc. If you&#8217;re looking for the latest current stable for production, this is the place to look.</p>
<p>When branches achieve the next milestone (i.e. a maintenance or security or &#8220;dot&#8221; release), this is the place where the code is kept.</p>
<p>Hopefully this makes the WordPress repository (and maybe other projects) clear as mud.</p>
]]></content:encoded>
			<wfw:commentRss>http://technosailor.com/2011/09/30/how-is-wordpress-subversion-organized/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Rules for Entrepreneurs: Release Early and Often</title>
		<link>http://technosailor.com/2011/09/28/rules-for-entrepreneurs-release-early-and-often/</link>
		<comments>http://technosailor.com/2011/09/28/rules-for-entrepreneurs-release-early-and-often/#comments</comments>
		<pubDate>Wed, 28 Sep 2011 17:29:49 +0000</pubDate>
		<dc:creator>Aaron</dc:creator>
				<category><![CDATA[Aaron Brazell]]></category>
		<category><![CDATA[Rules for Entrepreneurs]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[entrepreneurship]]></category>
		<category><![CDATA[scrum]]></category>
		<category><![CDATA[software-development]]></category>

		<guid isPermaLink="false">http://technosailor.com/?p=8479</guid>
		<description><![CDATA[Last week, I wrote two articles outlining some philosophical ideas around entrepreneurship. This series of articles is all about giving away lessons I&#8217;ve learned throughout my five years as an entrepreneur in four different ventures. When you&#8217;re in the product business, you have to continually improve on your product. As soon as you hit version [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://technosailor.com/files/hiwteboard-600x450.jpg" alt="" title="hiwteboard" width="584" height="438" class="aligncenter size-large wp-image-8485" />Last week, I wrote two articles outlining some philosophical ideas around entrepreneurship. This series of articles is all about giving away lessons I&#8217;ve learned throughout my five years as an entrepreneur in four different ventures.</p>
<p>When you&#8217;re in the product business, you have to continually improve on your product. As soon as you hit version 1, you&#8217;re heading for version 2. You create a roadmap and set milestones, which are just intermediary goals to help you get from inception to some point in the future.</p>
<p>The reality of roadmaps, however, are that they are susceptible to change based on market demands &#8211; or, as it&#8217;s sometimes called, &#8220;pivots&#8221;. You can have a great product idea that has a wonderful two year roadmap, but if customers don&#8217;t like it or demand other features that have never been thought of, then it would be wise to modify timelines and roadmaps.</p>
<p>Many successful products have been the product of a &#8220;release early and release often&#8221; mentality where the entrepreneur or product team did not wait to have a fully developed product, and instead, hurried to get <em>something</em> to market for the sake of collecting feedback and input and improving on the product.</p>
<p>Eric Ries in <em>Lean Startup</em> talks about principles of testing market validation by creating an iterative cycle of development where a product is released, tested in the market, feedback aggregated, assumptions tested against that feedback, and new innovation created as a result of those tests.</p>
<p>There are a number of rapid-cycle development philosophies including <a href="http://www.agilealliance.org/the-alliance/what-is-agile/">Agile</a>, <a href="http://www.scrumalliance.org/learn_about_scrum">Scrum</a> and others. These philosophies put a greater emphasis on involving customer feedback and direction over pre-determined plans where feedback is not collected until the development cycle is completed.</p>
<p>What happens if your assumptions were all wrong? Now you&#8217;ve got a product that no one wants to use!</p>
<p>The best way to avoid this problem is simply to release early, even before your product is near complete, and collect feedback along the way. Based on the feedback, you may need to modify your development trajectory but at least you&#8217;re able to do that before it&#8217;s too late and keep your product relevant to the consumer.</p>
<p>Next time, I&#8217;ll continue this series and talk a bit about business visualization to help you track your business and make effective decisions. If you&#8217;re not already subscribed to this blog, <a href="http://technosailor.com/feed">do so now</a>. Also, follow me on <a href="http://twitter.com/technosailor">Twitter</a> where I&#8217;ll be talking about entrepreneurship, WordPress and a healthy dose of sports on the weekend.</p>
]]></content:encoded>
			<wfw:commentRss>http://technosailor.com/2011/09/28/rules-for-entrepreneurs-release-early-and-often/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rules for Entrepreneurs: Compete and Collaborate</title>
		<link>http://technosailor.com/2011/09/23/rules-for-entrepreneurs-compete-and-collaborate/</link>
		<comments>http://technosailor.com/2011/09/23/rules-for-entrepreneurs-compete-and-collaborate/#comments</comments>
		<pubDate>Fri, 23 Sep 2011 16:19:16 +0000</pubDate>
		<dc:creator>Aaron</dc:creator>
				<category><![CDATA[Aaron Brazell]]></category>
		<category><![CDATA[Rules for Entrepreneurs]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[collaboration]]></category>
		<category><![CDATA[competition]]></category>
		<category><![CDATA[entrepreneurship]]></category>
		<category><![CDATA[Google]]></category>

		<guid isPermaLink="false">http://technosailor.com/?p=8478</guid>
		<description><![CDATA[Photo by Roger Barker on Flickr. Google and Apple are not only competitors&#8230; they are collaborators. Indeed, Apple and Google both offer top level smartphones &#8211; The iPhone from Apple and the assortment of Android devices by Google (Google not only has its own phones but is the main proprietor of the Android open source [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-large wp-image-8484" title="competition" src="http://technosailor.com/files/competition-600x450.jpg" alt="" width="584" height="438" /><cite>Photo by <a href="http://www.flickr.com/photos/rogerbarker/2349599270/">Roger Barker</a> on Flickr.</cite></p>
<p>Google and Apple are not only competitors&#8230; they are collaborators. Indeed, Apple and Google both offer top level smartphones &#8211; The iPhone from Apple and the assortment of Android devices by Google (Google not only has its own phones but is the main proprietor of the Android open source project).</p>
<p>In the same world, Samsung and Apple are rivals (and becoming even more rival-ous) with competing smartphones (Samsung runs Android) sparking ferocious lawsuits back and forth, but Samsung is also a major supplier of parts to Apple.</p>
<p>This segment of my continuing series on Rules of Entrepreneurship is all about knowing when and how to compete and when collaboration is a better option. They are not mutually exclusive. This is a natural segue from my last post where I suggest that <a href="http://technosailor.com/2011/09/20/rules-for-entrepreneurs-do-one-thing-well/">entrepreneurs focus on doing one thing well</a>.</p>
<h2>Principle: Don&#8217;t Reinvent the Wheel</h2>
<p>It frustrates me to watch startups (usually not very good ones) try to reinvent the wheel. A classic example of this was from back in 2007 when I was sitting in a Starbucks in Columbia, MD. We had a group of entrepreneurs who gathered there on a daily basis and cowork together.</p>
<p>One of the guys I was working with introduced me to a pair of African-American entrepreneurs and he wanted me to hear about what they were building. I sat down and listened to their pitch. They were building the &#8220;YouTube for the African-American community&#8221;.</p>
<p>Full stop.</p>
<p>What? Why? Why not use YouTube?</p>
<p>They were well into the process of building an entire video platform from the ground up, complete with their own video encoding technology, instead of leveraging what YouTube (and subsequently Google) already created.</p>
<p>The entrepreneurs real mission was creating a video-sharing <em>community</em> for African-Americans, not creating video technology for African-Americans to use. I told them that day that they should abandon attempts to build their own video service, and instead <em>leverage</em> YouTube (which is built and maintained by really smart people at Google) to build the community they really wanted to build.</p>
<p>Why re-invent the wheel? You distract yourself from your core goals.</p>
<p><em>Sidenote: I have never heard of or from those entrepreneurs since.</em></p>
<h2>Collaborate</h2>
<p>As an entrepreneur, part of the process is identifying your competition. We certainly have done that at <a href="http://wpengine.com">WP Engine</a>. Sometimes, it is to your benefit to team up with your competition to achieve a common goal. Remember, business is business and it&#8217;s not personal. Don&#8217;t let your desire to &#8220;win&#8221; get in the way of your ability to get ahead.</p>
<p>Also, remember the age-old saying, &#8220;A rising tide lifts all ships&#8221;. What is good for your competition is often good for the entire industry you&#8217;re in. Everyone wins.</p>
<p>Certainly that&#8217;s not always the case, but it certainly isn&#8217;t <em>not</em> always the case.</p>
<h2>Compete</h2>
<p>In my opinion, competition is a bottom-line issue and there are lots of ways to positively affect your bottom line. Usually, competition does not equate to a zero-sum game, an assumption that rookie entrepreneurs tend to make. (I did this a lot in 2006, 2007 while at b5media and trying to take pot shots at competing blog networks &#8211; years later, I find it all kind of silly).</p>
<p>When you do choose to take on direct competition, keep it narrow, precise and for a specific purpose. Don&#8217;t allow personal feelings to affect your business strategies and, in the process, keep the door open to cooperation with your competition in other areas.</p>
<p>Next week, I&#8217;ll continue this series and talk a bit about release cycles &#8211; which is <em>always</em> a fun debate. If you&#8217;re not already subscribed to this blog, <a href="http://technosailor.com/feed">do so now</a>. Also, follow me on <a href="http://twitter.com/technosailor">Twitter</a> where I&#8217;ll be talking about entrepreneurship, WordPress and a healthy dose of sports on the weekend.</p>
]]></content:encoded>
			<wfw:commentRss>http://technosailor.com/2011/09/23/rules-for-entrepreneurs-compete-and-collaborate/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rules for Entrepreneurs: Do One Thing Well</title>
		<link>http://technosailor.com/2011/09/20/rules-for-entrepreneurs-do-one-thing-well/</link>
		<comments>http://technosailor.com/2011/09/20/rules-for-entrepreneurs-do-one-thing-well/#comments</comments>
		<pubDate>Tue, 20 Sep 2011 15:34:22 +0000</pubDate>
		<dc:creator>Aaron</dc:creator>
				<category><![CDATA[Aaron Brazell]]></category>
		<category><![CDATA[Rules for Entrepreneurs]]></category>
		<category><![CDATA[entrepreneurship]]></category>
		<category><![CDATA[foursquare]]></category>
		<category><![CDATA[google plus]]></category>
		<category><![CDATA[social]]></category>

		<guid isPermaLink="false">http://technosailor.com/?p=8475</guid>
		<description><![CDATA[Photo by bartb_pt on Flickr I have been an entrepreneur for just shy of 5 years full-time. Before that, I was engaged in entrepreneurial &#8220;things&#8221; for the previous 6 years. 4 companies. I am not a perfect entrepreneur and some would argue I&#8217;m not even a successful entrepreneur since I haven&#8217;t had a successful exit [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-large wp-image-8482" src="http://technosailor.com/files/building-600x401.jpg" alt="" width="584" height="390" /><cite>Photo by <a href="http://www.flickr.com/photos/bartb_pt/3352533899/">bartb_pt</a> on Flickr</cite><br />
I have been an entrepreneur for just shy of 5 years full-time. Before that, I was engaged in entrepreneurial &#8220;things&#8221; for the previous 6 years. 4 companies. I am not a perfect entrepreneur and some would argue I&#8217;m not even a successful entrepreneur since I haven&#8217;t had a successful exit yet.</p>
<p>However, the odds on favorite number that people in the startup community like to throw around is that 9 out of every 10 startups fails. So, as I see it, I still have 5 more failures and a win to look forward to (although I think my current startup, <a href="http://wpengine.com">WP Engine</a>, is a pretty damn good company that probably is a win).</p>
<p>I can say that in all of my years in this world, I&#8217;ve learned a number of things. Many of these things are through trial and error, success and failure, and good old A/B testing.</p>
<p>Today I&#8217;m beginning a series (revisiting an old theme from years ago when Steve Fisher wrote the &#8220;<a href="http://technosailor.com/category/venture-files/">Venture Files</a>&#8221; track on this blog &#8211; before I simplified to a single channel site that is updated far less often than it was then) providing some &#8220;rules&#8221;, as I see them.</p>
<p>As of now, I have six rules to share from my experiences. That may increase over time, but they are slotted and ready to go.</p>
<h2>Focus Your Efforts</h2>
<p>As an entrepreneur, the carrot on the stick is to provide the best damn {product} that {your target audience} has ever seen. I&#8217;ll focus on web tech startups since that&#8217;s what I know best, but the principle can cross easily into other industries as well.</p>
<p>Inevitably, being the best damn {product} that your {target audience} has ever seen, involves taking an already existing idea and improving on it. It&#8217;s always nice when you can do something new and innovative, but most companies aren&#8217;t and maybe shouldn&#8217;t be. It&#8217;s hard to do something completely new. One quick peruse through <a href="http://angel.co/">Angellist</a> will show you scores of companies who are pitching their products as the {blank} for {blank}.</p>
<p>Examples:</p>
<ul>
<li>Netflix for Digital Children&#8217;s Books</li>
<li>Twitter for images</li>
<li>Meetup for Professional Events</li>
<li>eBay for College Tutoring</li>
</ul>
<p>While I go into manic twitching mode when I see pitches like this, I have to hand the entrepreneurs and startups credit in that they are able to clearly identify exactly what they are building and why it&#8217;s important. Sure, they have to leverage some other known entity to get their point across, but their idea is concise and communicable.</p>
<h2>Don&#8217;t be Google</h2>
<p>To leverage a known entity for the sake of this post, Google is a poster child for leveraging someone else idea in the entirely wrong way. Tell me what all of these products have in common:</p>
<ul>
<li>Google+</li>
<li>Google Buzz</li>
<li>OpenSocial</li>
<li>Orkut</li>
</ul>
<p>That&#8217;s right. Every single one of these products were attempts to be the entirety of something else &#8211; to take it to their biggest competition in the space. Google+ is a direct swipe at both Facebook and, to a lesser extent, Twitter. Google Buzz was a direct assault on Twitter. OpenSocial existed to provide a social networking framework and was a play to undermine Facebook. Orkut took a swipe at Friendster, both of which are essentially dead today.</p>
<p>In every one of these cases, Google decided to &#8220;go big or go home&#8221; and ended up going home. The most recent, Google+, is still trying to get some traction but everyone seems to be sitting back and saying, &#8220;I&#8217;ve got social network exhaustion&#8221; and don&#8217;t see the big value in Google+ over existing products that do the same thing.</p>
<p>The better approach, if you want to assault Facebook, is a limited, targeted, precision-strike on a single feature and knock it out of the park. Twitter already has the status update. Don&#8217;t go there. The concept of +1, is already being done by Facebook with the &#8220;Like&#8221;. In other ways, Tweetmeme has been doing the same thing by enabling users to share what they like (who&#8217;s really gonna share what they don&#8217;t like&#8230; even if they don&#8217;t literally &#8220;like&#8221; it because it may be controversial, it&#8217;s compelling enough for users to share&#8230; which is the essence of a &#8220;Like&#8221; or a &#8220;+1&#8243;?).</p>
<p>But perhaps Google could really target photo sharing and tagging. Picasa is already there. Make it challenge Facebook&#8217;s photo albums and tagging. No one has done social event planning very well. Even Twtvite and Eventbrite are just for event planning, but don&#8217;t do social very well.</p>
<h2>You Have Finite Resources</h2>
<p>As an entrepreneur, you have limited resources. The last thing you need to be doing is getting &#8220;squirrel eye&#8221; and being distracted by every cool feature you could make. Does it fit within your vision? Does it help extend the main reason for building the product? (A good example of this is <a href="http://blog.foursquare.com/2011/03/08/foursquare-3/">Foursquare building an Explore Tab</a>&#8230; it extends their business product vision).</p>
<p>Especially at the beginning, you don&#8217;t have a lot of resources. Don&#8217;t try to be everything to everyone. Stay targeted and laser-focused on doing one thing and one thing well. As your company grows, you can start exploring complementary features and products. You just can&#8217;t be everything all at once.</p>
<p>Next time, I&#8217;ll expound on this concept by talking about competition <em>and</em> collaboration. You&#8217;ll want to come back. If you&#8217;re not already subscribe to this blog, <a href="http://technosailor.com/feed">do so now</a>. Also, follow me on <a href="http://twitter.com/technosailor">Twitter</a> where I&#8217;ll be talking about entrepreneurship, WordPress and a healthy dose of sports on the weekend.</p>
]]></content:encoded>
			<wfw:commentRss>http://technosailor.com/2011/09/20/rules-for-entrepreneurs-do-one-thing-well/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Digital Music is Dead, Long Live Digital Music: The Case for Spotify</title>
		<link>http://technosailor.com/2011/07/22/digital-music-is-dead-long-live-digital-music-the-case-for-spotify/</link>
		<comments>http://technosailor.com/2011/07/22/digital-music-is-dead-long-live-digital-music-the-case-for-spotify/#comments</comments>
		<pubDate>Fri, 22 Jul 2011 16:45:57 +0000</pubDate>
		<dc:creator>Aaron</dc:creator>
				<category><![CDATA[Aaron Brazell]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[blackberry]]></category>
		<category><![CDATA[digital music]]></category>
		<category><![CDATA[drm]]></category>
		<category><![CDATA[ios]]></category>
		<category><![CDATA[ipad]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[mpaa]]></category>
		<category><![CDATA[napster]]></category>
		<category><![CDATA[record labels]]></category>
		<category><![CDATA[spotify]]></category>

		<guid isPermaLink="false">http://technosailor.com/?p=8472</guid>
		<description><![CDATA[Back in the 1990s, there was Napster. I mean, the original Napster not the shadow of a brand that is part of the Best Buy electronics offering. Napster effectively eliminated optical media by making people realize that the digital format was the only long-term, effective, space-saving way of having music that was portable. Sure there [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-large wp-image-8473" title="3497849677_9798b22910_b" src="http://technosailor.com/files/3497849677_9798b22910_b-600x400.jpg" alt="" width="584" height="389" />Back in the 1990s, there was <a href="http://napster.com">Napster</a>. I mean, the original Napster not the shadow of a brand that is part of the <a href="http://bestbuy.com">Best Buy</a> electronics offering.</p>
<p>Napster effectively eliminated optical media by making people realize that the digital format was the only long-term, effective, space-saving way of having music that was portable.</p>
<p>Sure there were MP3s before Napster, and yes, some people had decent libraries of music that they carried around on their portable MP3 players. But Napster made it mainstream by making it easy for anyone to find any music they wanted and download it.</p>
<p>It was illegal and rightly so. There was no way to monetize the music underground economy and intellectual property belongs to someone. So Napster got sued. A lot.</p>
<p>Someone along the way suggested that perhaps a more amenable for Napster to provide digital media to fans and give the record labels a reach around at the same time was the unlimited music for $9.99/mo. Napster balked saying no one would pay that kind of subscription fee.</p>
<p>The lawsuits became so much that the music service had to shut its doors. In an attempt to resurrect themselves just a year or two later, they finally adopted the music subscription model but it was too little too late.</p>
<p>Other music subscriptions came along such as <a href="http://www.rhapsody.com/">Rhapsody</a> but never gained any kind of real market share. Rhapsody is still open and charges a monthly fee but it just never gained the traction needed.</p>
<h2>Spotify Arrives!</h2>
<p>In 2008, a new music service, <a href="http://spotify.com">Spotify</a>, launched in Europe. The model was of the subscription type where consumers could pay a monthly fee for the ability to stream any music in their catalog.</p>
<p>The service gained huge popularity in Europe while consumers in the United States clamored for access. Month after month, year after year, the rumors surfaced that Spotify was preparing their U.S. launch and it never came&#8230; until last week.</p>
<p>In the meantime, consumers have been inundated with cloud-based web apps. They use Gmail from the web, Facebook for interactions with friends and family, Twitter for persistent real-time communication. Consumers have lost their desire to want to own their own data, and as such, the droning drumbeat of Spotify in Europe as a music subscription service is now arriving in the U.S. past the tipping point of data ownership needs.</p>
<p>That&#8217;s a long way of saying &#8211; people don&#8217;t care if they own their music anymore if they&#8217;ve got everything they need in a music service that doesn&#8217;t provide ownership.</p>
<h2>The Case for Physical and Owned Digital Media</h2>
<p>Through the years, I&#8217;ve always been a proponent of having my music in a digital format as opposed to a streaming service. I&#8217;d rather buy the album on iTunes or Amazon MP3 and know I have it than just stream it from somewhere.</p>
<p>I&#8217;ve wanted to play music on demand and not have to rely on a faux-radio service like <a href="http://pandora.com">Pandora</a> to get it done. I like Pandora. I pay for Pandora. But I can&#8217;t listen to the songs I want to on demand as part of their licensing agreement with the labels.</p>
<p>I like having dick-measuring competitions about how big my music library is. The bigger it is, the better I am. I must be a more serious music lover. Or so I&#8217;ve felt.</p>
<p>With the ownership model, I could take my music everywhere. Hell, even cars have iPod jacks in them so that 50GB library can be taken on the road. I could go for a run and listen to an assortment of playlists for just such an occasion or I could have my library with me for when I need to drum up an impromptu karaoke song and can&#8217;t remember how the song starts.</p>
<p>I thought.</p>
<p>In fact, I thought until last week when <a href="http://spotify.com">Spotify</a> <a href="http://arstechnica.com/media/news/2011/07/music-service-spotify-finally-to-launch-in-us-on-thursday-morning.ars">launched in the United States</a>. Now&#8230; I don&#8217;t care about my digital music library. Every argument for it has been shattered into a million small (yet suitably sharp and jagged and &#8220;hope you&#8217;re wearing sandals so you don&#8217;t cut your feet&#8221;) pieces.</p>
<h2>Spotify is the Music Messiah</h2>
<p>At one point, I thought it was important to take my music with me wherever I go. I still do. Spotify has apps for every major mobile device (and if you don&#8217;t have a mobile strategy in anything, you lose) and they all tightly integrate with the web service and related desktop apps for both Windows and Mac. Everything is synced. And you can listen to music offline!</p>
<p>At some point I was very concerned about how big my music library was. I feared a catastrophic data loss that would wipe out my years of music collection, purchasing and playlist assembly. Of course, there were backups but that took forever over a network or to an external hard drive.</p>
<p>Spotify solves this by integrating with all your DRM-free music on iTunes or other music player, importing them, making them available in the cloud or offline. It also eliminates the need to have music library. Who needs a music library when every major label is signed on to provide their catalog to the service. I have the entire music world as my music library. My dick, by definition, is therefore bigger.</p>
<p>But the real killer in Spotify is the ingenious social aspect. Sure, you can have a lot of music. Sure, you can have playlists. Sure, you can have subscription models. Sure, you can have mobile availability.</p>
<p>Spotify put the biggest teenage-era &#8220;I love you&#8221; method in digital format by allowing the mix tape to be replaced by playlists&#8230; that are sharable with someone, some service or the world.</p>
<p>Queue up your Bieber-esque bee-bop feel good technosailor dance-esque songlists&#8230; the mix tape has gone digital!</p>
<h2>It&#8217;s the End of the World as We Know It&#8230; And I Feel Fine</h2>
<p>Spotify will undoubtedly continue to evolve. Launching in the United States gives them a much larger audience to tap into for feedback and expectations. I would like to see the social integration tighter and more obvious, but all in good time.</p>
<p>Rarely does a game changer come along. A lot of people think they have the game changing app&#8230; but it never happens. This is, in fact, the revolution that we&#8217;ve been waiting for. I no longer even think about my iTunes library, Amazon MP3 purchasing or other digital media. Everything I need is right there in my dick-sized music library.</p>
<p><em>Photo by <a href="http://www.flickr.com/photos/gallery-art/3497849677/">Cerebro Humano</a></em></p>
]]></content:encoded>
			<wfw:commentRss>http://technosailor.com/2011/07/22/digital-music-is-dead-long-live-digital-music-the-case-for-spotify/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Make the Web, Cloud Do Your Work So You Don&#8217;t Have To</title>
		<link>http://technosailor.com/2011/06/28/make-the-web-cloud-do-your-work-so-you-dont-have-to/</link>
		<comments>http://technosailor.com/2011/06/28/make-the-web-cloud-do-your-work-so-you-dont-have-to/#comments</comments>
		<pubDate>Tue, 28 Jun 2011 16:34:14 +0000</pubDate>
		<dc:creator>Aaron</dc:creator>
				<category><![CDATA[Aaron Brazell]]></category>
		<category><![CDATA[cloud]]></category>
		<category><![CDATA[cloud computing]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[infrastructure]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[it]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[navy]]></category>
		<category><![CDATA[nmci]]></category>
		<category><![CDATA[software compatibility]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://technosailor.com/?p=8469</guid>
		<description><![CDATA[Photo by Balleyne While perusing around the web yesterday (after sifting through my email post-vacation), I came across this Ars Technica&#160;article discussing the new Firefox upgrade timeline. It actually follows a similar upgrade timeline that WordPress adopted after WordPress 2.0 was released. The new policy outlines a 3-4 month window for new major releases with [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-large wp-image-8470" title="2668834386_ef9cfbd4e0_z" src="http://technosailor.com/files/2668834386_ef9cfbd4e0_z-600x450.jpg" alt="" width="584" height="438" /><br />
<cite>Photo by <a href="http://www.flickr.com/photos/balleyne/2668834386/">Balleyne</a></cite></p>
<p>While perusing around the web yesterday (after sifting through my email post-vacation), I came across this <em>Ars Technica</em>&nbsp;article discussing the <a href="http://arstechnica.com/business/news/2011/06/firefox-update-policy-the-enterprise-is-wrong-not-mozilla.ars">new Firefox upgrade timeline</a>. It actually follows a similar upgrade timeline that WordPress adopted after WordPress 2.0 was released.</p>
<p>The new policy outlines a 3-4 month window for new major releases with limited security updates for releases outside of the current stable release.</p>
<p>The <em>Ars</em>&nbsp;article goes on to describe the angst that has come out of the corporate community as they have been lulled into a process of having to test new releases of software to ensure compatibility with their internal firewall&#8217;d webapps that have, in no small part, been created for a specific browser – usually Internet Explorer 6 or 7.</p>
<h2>Browser Stagnation Caused IT Stagnation</h2>
<p>A few years ago, the stagnation of browser support was broken as Firefox and Opera started a race to implement CSS3 features that were not necessarily status quo, as a result of Internet Explorer, and were not even blessed as part of an official spec. The browser makers just started doing it.</p>
<p>Notably, some of these browser-specific &#8220;add-ons&#8221; to CSS dealt with things that had been desired but only usable with browser hacks: rounded corners, opacity, etc.</p>
<p>Apple came on the scene, particularly with iOS (then iPhone OS), and put a&nbsp;tremendous&nbsp;amount of development efforts into <a href="http://www.webkit.org/">WebKit</a>. WebKit is a browser framework like Gecko, the framework that Firefox and the old Netscape are built on was. Apple&#8217;s take on WebKit was Safari. Google followed suit with Chrome awhile later, also built on WebKit.</p>
<p>What we end up with is a browser war with higher stakes than the famed Internet Explorer-Netscape war of the 1990s. We also see a lot more innovation and one-upmanship&#8230; something that can only be good for consumers.</p>
<p>The <em>Ars</em>&nbsp;article describes a tenuous balance for enterprise customers. That balance is the need to support internal firewalled applications while giving users access to the public web. The money quote from the article sums up the balance nicely:</p>
<blockquote><p>The Web is a shared medium. It&#8217;s used for both private and public sites, and the ability to access these sites is dependent on Web browsers understanding a common set of protocols and file formats (many corporate intranet sites may not in fact be accessible from the Internet itself, but the browsers used to access these sites generally have to live in both worlds).</p>
<p>[...]</p>
<p>If developers could be sure that only Internet Explorer 9, Firefox 5, and Chrome 13 were in use on the Internet, they would be able to make substantial savings in development and testing, and would have a wealth of additional features available to use.</p>
<p>But they can&#8217;t assume that, and so they have to avoid desirable features or waste time working around their absence. And a major reason—not the only reason, but a substantial one—is corporate users. Corporate users who can&#8217;t update their browsers because of some persnickety internal application they have to use, but who then go and use that same browser on the public Internet. By unleashing these obsolete browsers on the world at large, these corporate users make the Web worse for everyone. Web developers have to target the lowest common denominator, and the corporations are making that lowest common denominator that much lower.</p></blockquote>
<p>As someone who has worked on the web for more than 10 years and who has also worked in Enterprise, I agree.</p>
<p>I remember when I worked for the Navy and the <a href="http://en.wikipedia.org/wiki/Navy/Marine_Corps_Intranet">Navy-Marine Corps Intranet (NMCI)</a> was in deployment. It was a massive headache for everyone involved because the assumption with that contract was that systems could uniformly be tied together and standardized. By my understanding, they finally achieved that last year, but not until after being years late and hundreds of millions over budget.</p>
<p>I don&#8217;t know the final deployment as my contract with the Navy ended back in 2004. I know that proprietary systems were in place that were designed to a function and not to a standard. &nbsp;When standards were introduced as necessary requisites for any system in that eco-system, the implications were huge.</p>
<p>This is the world we live in today where, as the <em>Ars</em>&nbsp;article points out, browsers that must live in a world of compatibility and still access the public web drag the rest of us down.</p>
<h2>Outsource Your Shit and Focus on Your Core Business</h2>
<p>But <em>Ars</em>&nbsp;already makes that point. I&#8217;m not making it again except to highlight the validity of their thoughts. My point is more intrinsic to startups, small businesses and entrepreneurs and I make it delicately as it has, in some ways, countered <a href="http://technosailor.com/2008/07/22/cloud-computing-does-not-spell-the-end-for-common-sense-it-management/">some</a> of <a href="http://technosailor.com/2009/04/08/the-pros-and-cons-of-cloud-computing/">my thoughts</a> in the past.</p>
<p>Why should you worry about building applications to a function when you can build them to a standard? Or better yet, why should you build <em>from the ground up</em>&nbsp;to a function when you can <em>use external, cloud-based services</em>&nbsp;built to a standard.</p>
<p>Take Microsoft&#8217;s just-announced <a href="http://www.microsoft.com/Presspass/press/2011/jun11/06-28MSOffice365PR.mspx">Microsoft Office 365</a>. Now, I don&#8217;t know anything about this product so don&#8217;t take my commentary as an endorsement in any way. We use <a href="http://google.com/a">Google Apps</a> at <a href="http://wpengine.com">WP Engine</a> (another good example of exactly what I&#8217;m saying here).</p>
<p>In <em>Office 365</em>,&nbsp;you have a common piece of line-of-business software (Microsoft Office) available for a subscription and hosted in the cloud. This eliminates IT Administrators requirement for testing on the internal network. It&#8217;s on the web! Everyone has the web! And it doesn&#8217;t need (and in fact, cannot work) with non-standard browsers. And you don&#8217;t even need Microsoft&#8217;s browser to use it.</p>
<p>Suddenly, IT Administrators along with Microsoft have saved the Enterprise tens, if not hundreds, of thousands of dollars in man-hours testing and re-resting for OS compatibility. And suddenly, IT Administrators along with Microsoft have taken the chains off users to have freedom of choice in their browsers (which, by the way, is more than a pie in the sky idealistic thing&#8230; it&#8217;s also a cost-saving efficiency thing). And also suddenly, Microsoft has released the web to be able to thrive and not be retarded by corporate requirements.</p>
<p>This kind of thing makes perfect sense. Why re-invent the wheel? Why put resources into something you don&#8217;t have to? Why not let a third party, like Microsoft or Google, worry about the compatibility issues in line-of-business software.</p>
<p>After all, your company isn&#8217;t in the core business of building these applications. You are in the line of business of doing something else&#8230; building a product, a social network, a mobile app, a hosting company, etc. Your software should not define the cost of doing business. Your people and your product should.</p>
]]></content:encoded>
			<wfw:commentRss>http://technosailor.com/2011/06/28/make-the-web-cloud-do-your-work-so-you-dont-have-to/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>WordPress Release Word Clouds</title>
		<link>http://technosailor.com/2011/06/21/wordpress-release-word-clouds/</link>
		<comments>http://technosailor.com/2011/06/21/wordpress-release-word-clouds/#comments</comments>
		<pubDate>Tue, 21 Jun 2011 21:41:57 +0000</pubDate>
		<dc:creator>Aaron</dc:creator>
				<category><![CDATA[Aaron Brazell]]></category>
		<category><![CDATA[Fun]]></category>
		<category><![CDATA[word clouds]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://technosailor.com/?p=8456</guid>
		<description><![CDATA[Yesterday, I published the 12th in an ongoing series of blog posts since December 26, 2005, where I take my own look at major WordPress releases and write a hopefully helpful article about features. It&#8217;s the routine, and now expected, &#8220;10 Things You Need to Know&#8221; posts. Out of morbid curiosity, I decided to run [...]]]></description>
			<content:encoded><![CDATA[<p>Yesterday, <a title="10 Things You Need To Know About WordPress 3.2" href="http://technosailor.com/2011/06/20/10-things-you-need-to-know-about-wordpress-3-2/">I published the 12th in an ongoing series of blog posts</a> since December 26, 2005, where I take my own look at major WordPress releases and write a hopefully helpful article about features. It&#8217;s the routine, and now expected, &#8220;10 Things You Need to Know&#8221; posts.</p>
<p>Out of morbid curiosity, I decided to run all of those posts through a word cloud generator and see if there were any trends that could be seen. Of course, it&#8217;s my writing so there are obvious tendencies and biases, but it was fun to see anyway.</p>
<p>One thing I did to make the results better&#8230; I removed the words WordPress and WP. Also, several of the posts had my name in it so I figured it would be better not to include that either.</p>
<h2>WordPress 2.0</h2>
<p><img class="aligncenter size-large wp-image-8457" title="wordpress20" src="http://technosailor.com/files/wordpress20-600x301.jpg" alt="" width="584" height="292" /></p>
<h2>WordPress 2.1<img class="aligncenter size-large wp-image-8458" title="wordpress21" src="http://technosailor.com/files/wordpress21-600x286.jpg" alt="" width="584" height="278" /></h2>
<h2>WordPress 2.2<img class="aligncenter size-large wp-image-8459" title="wordpress22" src="http://technosailor.com/files/wordpress22-600x381.jpg" alt="" width="584" height="370" /></h2>
<h2>WordPress 2.3<img class="aligncenter size-large wp-image-8460" title="wordpress23" src="http://technosailor.com/files/wordpress23-600x335.jpg" alt="" width="584" height="326" /></h2>
<h2>WordPress 2.5</h2>
<p><img class="aligncenter size-large wp-image-8461" title="wordpress25" src="http://technosailor.com/files/wordpress25-600x301.jpg" alt="" width="584" height="292" /></p>
<h2>WordPress 2.6<img class="aligncenter size-large wp-image-8462" title="wordpress26" src="http://technosailor.com/files/wordpress26-600x339.jpg" alt="" width="584" height="329" />WordPress 2.7<img class="aligncenter size-large wp-image-8463" title="wordpress27" src="http://technosailor.com/files/wordpress27-600x365.jpg" alt="" width="584" height="355" /></h2>
<h2>WordPress 2.8<img class="aligncenter size-large wp-image-8464" title="wordpress28" src="http://technosailor.com/files/wordpress28-600x401.jpg" alt="" width="584" height="390" /></h2>
<h2>WordPress 2.9<img class="aligncenter size-large wp-image-8465" title="wordpress29" src="http://technosailor.com/files/wordpress29-600x302.jpg" alt="" width="584" height="293" />WordPress 3.0<img class="aligncenter size-large wp-image-8466" title="wordpress30" src="http://technosailor.com/files/wordpress30-600x294.jpg" alt="" width="584" height="286" />WordPress 3.1<img class="aligncenter size-large wp-image-8467" title="wordpress31" src="http://technosailor.com/files/wordpress31-600x305.jpg" alt="" width="584" height="296" />WordPress 3.2<img class="aligncenter size-large wp-image-8468" title="wordpress32" src="http://technosailor.com/files/wordpress32-600x278.jpg" alt="" width="584" height="270" /></h2>
]]></content:encoded>
			<wfw:commentRss>http://technosailor.com/2011/06/21/wordpress-release-word-clouds/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>10 Things You Need To Know About WordPress 3.2</title>
		<link>http://technosailor.com/2011/06/20/10-things-you-need-to-know-about-wordpress-3-2/</link>
		<comments>http://technosailor.com/2011/06/20/10-things-you-need-to-know-about-wordpress-3-2/#comments</comments>
		<pubDate>Tue, 21 Jun 2011 04:36:12 +0000</pubDate>
		<dc:creator>Aaron</dc:creator>
				<category><![CDATA[Aaron Brazell]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[wordpress 3.2]]></category>
		<category><![CDATA[wordpress cheatsheet]]></category>

		<guid isPermaLink="false">http://technosailor.com/?p=8439</guid>
		<description><![CDATA[Photo credit Randy Stewart. WordPress 3.2 will be released soon (at the time of this writing, it is in RC1 which essentially means it is done and being tested). This is an exciting release as it marks the first release that drops PHP 4 dependency. For years, WordPress has opted to play to the lowest [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-large wp-image-8443" title="wordpress-legs" src="http://technosailor.com/files/wordpress-legs-600x400.jpg" alt="" width="584" height="389" /></p>
<address><em>Photo credit Randy Stewart.</em></address>
<p>WordPress 3.2 will be released soon (at the time of this writing, it is in RC1 which essentially means it is done and being tested). This is an exciting release as it marks the first release that drops PHP 4 dependency. For years, WordPress has opted to play to the lowest common denominator while hosts have taken their sweet time arriving at PHP 5.</p>
<p>Of course, this may mean nothing to you, depending on your technical knowledge of the underlying language. However, it has limited the amount of innovation that could be possible using the more modern version of PHP 5.</p>
<p>The focus for this release was to slim down redundant code that had been added along the way to employ PHP 5 techniques in a PHP 4-compatible fashion. In addition, a focus was placed on slimming down code all along the way to provide a more efficient codebase. Eliminate, eliminate, eliminate! More Red than Green &#8211; a reference to the way changes are recorded visually where red is code elimination and green is code addition.</p>
<p>Regardless, the approach to PHP 5 adoption has had a positive effect. Approximately 12% of the web is powered today by WordPress, whether self-hosted &#8220;<a href="http://wordpress.org">.org</a>&#8221; sites or Automattic&#8217;s <a href="http://wordpress.com">WordPress.com</a> and other hosted WordPress sites.</p>
<p>As I have done eleven other times before, today I bring you the Ten Things that, in my opinion, you should know about WordPress 3.2.</p>
<h2>Twenty-Eleven</h2>
<p>One of the big things that was discussed internally around the time when WordPress 3.0 was released over a year ago was the need to keep the default theme fresh. To that end, for WordPress 3.0 did away with the old Kubrick theme and <a href="http://technosailor.com/2010/05/01/10-things-you-need-to-know-about-wordpress-3-0/">replaced it with the fresh and semantic Twenty-Ten theme</a>.</p>
<p>Yes, you can see how naming a theme Twenty-Ten in 2010 setup the opportunity for a Twenty-Eleven theme in 2011. And there is that opportunity for a new theme called Twenty-Twelve in 2012, but let&#8217;s not get too far ahead of ourselves.</p>
<p>Twenty-Eleven visually is not a huge departure from Twenty-Ten. It still uses much of the same visual layout that Twenty-Ten did. The new theme, however, is greatly different behind the scenes.</p>
<p><em>Note: This blog (along with all of my blogs) are running Twenty-Eleven <strong>right now.</strong></em></p>
<p><img class="aligncenter size-large wp-image-8444" title="twentyeleven-themoptions" src="http://technosailor.com/files/twentyeleven-themoptions-600x289.jpg" alt="" width="584" height="281" /></p>
<p>Users of Twenty-Eleven have the opportunity to select a one-column or two column layout for their blog from inside the WordPress Admin. The two column layouts can use a sidebar left or sidebar right variant.</p>
<p>My <a href="http://photos.aaronbrazell.com">photoblog</a> uses a one-column format, as an example.</p>
<p>Additionally, Twenty-Eleven also offers a dark and light color scheme. My photoblog, for instance, uses the dark format while this blog uses the light format.</p>
<p>Finally, as with Twenty-Ten, the theme allows for custom header images (or no header images) and backgrounds. Because of the professional nature of this blog, I&#8217;ve opted to use no header on this blog and my <a href="http://aaronbrazell.com">personal blog</a> utilizes a custom header image.</p>
<p>And of course, as with all things WordPress, no one says you have to settle for what Twenty-Eleven offers out of the box. In fact, it is encouraged that you use Twenty-Eleven as a parent theme that offers all of the benefits of the default theme while putting your own spin on it with a <a href="http://codex.wordpress.org/Child_Themes">child theme</a>.</p>
<h2>Distraction Free Writing</h2>
<p>While I write this post, I am using the successor to the Full-screen mode that has been in WordPress for some time. Full screen mode, in my opinion, never really was well adopted but it has been championed in the past by bloggers who focus on efficient workstyles, or Getting Things Done (&#8220;GTD&#8221;) approach to work.</p>
<p><img class="aligncenter size-large wp-image-8446" title="dfw" src="http://technosailor.com/files/dfw-600x416.jpg" alt="" width="584" height="404" /><img class="aligncenter size-large wp-image-8447" title="dfw2" src="http://technosailor.com/files/dfw2-600x429.jpg" alt="" width="584" height="417" /></p>
<p>The ability to shut out all distractions so as to focus on the task at hand is hugely important. WordPress core developer <a href="http://markjaquith.wordpress.com">Mark Jaquith</a> has said for years that his vision for WordPress was that it would become a tool that got out of the way of people and their writing. It&#8217;s not about WordPress. It&#8217;s about writing and the experience should be such that you should never have to think about what tool you are using to do that.</p>
<p>With Distraction Free Writing, you have just that. By clicking on the Full Screen (in HTML writing mode) or the new icon for DFW in the toolbar of the visual text editor, the blogger finds themself on a plain off-white canvas with minor tools along the top of the screen to assist in basic formatting. If you leave your hands off the mouse, even these fade away allowing you to just write in a pleasant, serene environment.</p>
<p>This feature is probably my favorite in WordPress 3.2 and usability/writer-facing features are rarely my favorite as a developer. I generally prefer new APIs and developer tools. However, this feature wins hands-down.</p>
<h2>Minor Overhaul to Administrative UI</h2>
<p>It&#8217;s been several years since WordPress has undergone a major Admin overhaul. There have been tweaks along the way, but by and large the administrative interface has stayed true to what it evolved into (with much research and usability testing) in <a href="http://technosailor.com/2008/11/18/10-things-you-need-to-know-about-wordpress-27/">WordPress 2.7</a>.</p>
<p><img class="aligncenter size-large wp-image-8448" title="newui" src="http://technosailor.com/files/newui-600x318.jpg" alt="" width="584" height="309" /></p>
<p>There is not a drastic overhaul in WordPress 3.2, but it is the larger than a few tweaks and color scheme modifications. In <a href="http://technosailor.com/2010/12/30/10-things-you-need-to-know-about-wordpress-3-1/">WordPress 3.1</a>, the Admin Bar (which I&#8217;ll talk about later) came into being and in 3.2, emphasis has been put on placing more commonly accessed functions into it as opposed to the main UI.</p>
<p>As a result, familiar things (which were often used for blogs in Multisite mode) such as the &#8220;Favorites Menu&#8221; have been removed to the Admin Bar. The Quick Access menu that allowed Multisite Super Admins quick access to the &#8220;Network Admin&#8221; has been relocated to a less-than-obvious dropdown  in the upper right. Hint: The dropdown menu can be accessed by clicking the &#8220;Howdy Aaron&#8221; link, where &#8220;Aaron&#8221; is your username.<img class="aligncenter size-full wp-image-8449" title="Quick-Menu" src="http://technosailor.com/files/Quick-Menu.jpg" alt="" width="269" height="151" /></p>
<p>Other aspects of the new interface are mainly aesthetic. Menus are where you&#8217;d expect them. Features are where they&#8217;ve always been. Plugin developers who have built UI for their plugins are still safe as long as, as usual, they are using the WordPress best-practices, i.e. using the same HTML formats and structures used in core.</p>
<h2>More Determined Move to the Admin Bar</h2>
<p>As mentioned before, the Admin Bar has become the focus of a &#8220;Command Center&#8221; approach. By default, quick actions like Adding a new post or editing a page or getting quick access to the dashboard of other Multisite sites are loaded into quick menus in the Admin Bar.</p>
<p>This is also where the philosophy of plugin development that provides quick access to features should be. A good example of this is the Purge Cache functionality in <a href="http://wordpress.org/extend/plugins/w3-total-cache/">W3 Total Cache</a>. Where this has been in the Favorites menu inside WordPress, it now will have to move to the Admin Bar. This seems like a more natural place to me anyway. Other plugin developers should look at their code to ensure that they are compliant with this approach.</p>
<p>John Brook has a <a href="http://johanbrook.com/development/wordpress/customizing-the-wordpress-admin-bar/">most excellent tutorial</a> on creating and adding menus to the Admin Bar.</p>
<h2>PHP 5.2.4 and MySQL 5.0</h2>
<p>I mentioned the new system requirements at the beginning of this article. This shift to PHP 5 has been a long time in coming and was done deliberately to time with WordPress hosting on PHP 4 dipping below 10%. <em>In other words, it is more than likely your host is already on PHP 5.2.4+</em>. However, you should verify this if you&#8217;re not sure.</p>
<p>With the adoption of PHP 5.2.4, there is also a bump in the requirements for MySQL. Now WordPress requires MySQL 5.0, another hurdle that is not very hard to overcome but should be verified if you&#8217;re not sure.</p>
<p>Ryan Duff has created a <a href="http://wordpress.org/extend/plugins/wordpress-requirements-check/">quick and easy plugin</a> that can be installed to ensure compatibility with WordPress 3.2.</p>
<h2>For Newbies, a Better Help Menu on Each Page<img class="aligncenter size-large wp-image-8450" title="help" src="http://technosailor.com/files/help-600x203.jpg" alt="" width="584" height="197" /><img class="aligncenter size-large wp-image-8451" title="morehelp" src="http://technosailor.com/files/morehelp-600x324.jpg" alt="" width="584" height="315" /></h2>
<p>For some time, WordPress has included a contextual &#8220;Help&#8221; menu in the upper right of many of the screens in the admin interface. However, with WordPress 3.2, every page has a help menu. Not only does every page have a help menu, newbies can get detailed contextual assistance for each page. Veteran users already know their way around, so this will be less than helpful, but for n00bs, the guidance lowers the barrier to entry.</p>
<h2>Upgrade Enhancement &#8211; Just the code you need!</h2>
<p>Think iOS5 but for WordPress. When Steve Jobs announced at WWDC recently that<a href="http://www.engadget.com/2011/06/06/apple-turns-ios-pc-free-with-ota-updates-and-wireless-sync/"> iOS updates would <em>in the future</em> come in smaller packages</a> applying just new code and differences over the air, WordPress was already working on this (errr, except the over the air part).</p>
<p>Up until WordPress 3.2, upgrades were performed by downloading the entire package and applying it over the existing install. While this was fine, it took a lot more time due to the larger package size. This new version <em>will enable</em> future upgrades of WordPress to be done incrementally making the process much faster and efficient.</p>
<h2>Code Efficiency enhancements</h2>
<p>A huge emphasis was placed on core efficiency in this release. Many of the updates that have gone into this release have been major refactoring of code as well as the removal of legacy (and now unneeded) PHP4 compatibility code.</p>
<p>When I write these articles, I like to look at a diff file of all code changes between the last major release and the current. I was blown away by the amount of PHP4 compatibility code that has been axed.</p>
<p>Additionally, a lot of effort has been placed on database optimization. Many queries have been made more efficient. These things are less notable for smaller sites, but for large sites and hosting companies (such as my company, <a href="http://wpengine.com">WP Engine</a>), these types of optimizations add up in orders of magnitude!</p>
<h2>File System API</h2>
<p>Another optimization that has been made (getting the clue that this release is all about streamlines?) has been in the code that handles upgrades and automatic installs of plugins. When the original code was written, it was written to find what methods were available to write to the filesystem. This was because WordPress does the best it can to be as compatible as possible with as many server configurations as possible.</p>
<p>Some of the more obsolete (and unnecessary) transports have been done away with in favor of <em>Streams. </em>Though streams existed in PHP 4.3 (WordPress&#8217; former system requirement), the upgraded requirement now allows us to do so much more with file transfer, handling and writing.</p>
<p>But I don&#8217;t want to get overly technical right now.</p>
<h2>No IE6 Support<img class="aligncenter size-large wp-image-8452" title="ie6wordpresscom" src="http://technosailor.com/files/ie6wordpresscom-600x337.jpg" alt="" width="584" height="328" /></h2>
<address>Screenshot courtesy of <a href="http://mashable.com/2011/05/19/wordpress-com-ie6/">Mashable</a>.</address>
<p>We all knew Internet Explorer was dead. Well, most of us. Believe it or not, there are still folks (mostly in government and enterprise organizations) where IE6 is still in use. While WordPress has always endeavored to be as compatible with as many configurations as possible, just like file handling replaced by Streams and PHP4 going the way of the Dodo Bird, <a href="http://www.theie6countdown.com/default.aspx">IE6 can die in a fucking fire too</a>. Oops. Sorry, kids. No more IE6 support.</p>
<h2>Automatically approve parent comments</h2>
<p>Finally, a longtime nuance has been comment approval. Comments have always been a one-to-one relationship with approval. You approve one comment at a time. And while that&#8217;s normally fine, what if you have nested comments and you approve a child comment but not a parent comment? Then you have a weird hierarchy that may not make a lot of sense.</p>
<p>In WordPress 3.2, now when you approve a comment that has an unapproved parent comment, the parent comment will also be approved. Many people have asked for that and now it&#8217;s here.</p>
<h2>BONUS: Credits Screen</h2>
<p>But wait&#8230; There&#8217;s one more thing. Every release, hundreds of people participate in the development process by writing code, contributing patches, discussing ideas in IRC and on <a href="http://trac.wordpress.org/">Trac</a>. That doesn&#8217;t even begin to acknowledge the testers, translators, and documentation writers who contribute their time free of charge.</p>
<p>Now, in the footer of the WordPress Admin, you&#8217;ll find a Credits link that shows everyone who has contributed to this release. Good job, guys! (I&#8217;m one of the contributors).</p>
<p><img class="aligncenter size-large wp-image-8453" title="credits" src="http://technosailor.com/files/credits-572x450.jpg" alt="" width="572" height="450" /></p>
]]></content:encoded>
			<wfw:commentRss>http://technosailor.com/2011/06/20/10-things-you-need-to-know-about-wordpress-3-2/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Fact Checking in the Internet World</title>
		<link>http://technosailor.com/2011/06/02/fact-checking-in-the-internet-world/</link>
		<comments>http://technosailor.com/2011/06/02/fact-checking-in-the-internet-world/#comments</comments>
		<pubDate>Thu, 02 Jun 2011 16:56:03 +0000</pubDate>
		<dc:creator>Aaron</dc:creator>
				<category><![CDATA[Aaron Brazell]]></category>
		<category><![CDATA[all things d]]></category>
		<category><![CDATA[Journalism]]></category>
		<category><![CDATA[Techcrunch]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://technosailor.com/?p=8436</guid>
		<description><![CDATA[Like many other industries, journalism has undergone a vast paradigm shift in the last decade. Like advertising, the music and film industries, marketing, public relations and virtually all other professional fields, journalism has had to adjust to a new "immediacy" brought about by the Internet.

Now, by all reports, most people get their news from online sources and, while "online sources" are often venerable traditional media sources like the New York Times and the Washington Post, more often than not, blogs have become major sources of breaking news, and exclusive reports.]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-8437" title="4894601660_01129d9cec_o" src="http://technosailor.com/files/4894601660_01129d9cec_o.jpg" alt="" width="550" height="300" /></p>
<p><em>Photo credit: <a href="http://www.flickr.com/photos/adamcrowe/4894601660/sizes/o/in/photostream/">Adam Crowe</a></em></p>
<p><em></em>Like many other industries, journalism has undergone a vast paradigm shift in the last decade. Like advertising, the music and film industries, marketing, public relations and virtually all other professional fields, journalism has had to adjust to a new &#8220;immediacy&#8221; brought about by the Internet.</p>
<p>Now, by all reports, most people get their news from online sources and, while &#8220;online sources&#8221; are often venerable traditional media sources like the <em>New York Times</em> and the <em>Washington Post</em>, more often than not, blogs have become major sources of breaking news, and exclusive reports.</p>
<p>In fact, it was Pakistani IT specialist Sohaib Athar, now more famously known by his Twitter handle <a href="https://twitter.com/#!/reallyvirtual">@reallyvirtual</a>, who unwittingly live-tweeted the Osama bin Laden raid while Libyan rebels send on the ground status updates where traditional journalists have limited or no access. (Andy Carvin of NPR, known as <a href="http://twitter.com/acarvin">@acarvin</a> on Twitter,  has become somewhat notorious for his months-long curation of such tweets out of Libya, Egypt, Yemen and other Middle East hotspots).</p>
<p>There is no denying that the social tools available today have changed the face of journalism. Yet, despite these boons, it troubles me that basic principles of journalism seem to be consistently ignored.</p>
<p>At the end of the day, the practice of journalism (as with any industry) will evolve (and always have) with the tools and technology of the day. However, though practices may change, principles should never change.</p>
<p>One such principle is fact-checking. No matter who you are, or what era you&#8217;re in, fact-checking is rule number one in journalism. Don&#8217;t report until you have three independent sources is a good rule of thumb that is often ignored.</p>
<p>Case in point. The <em>Wall Street Journal</em>&#8216;s <a href="http://allthingsd.com">All things D</a>[igital] posted an article the other day titled, &#8220;<a href="http://allthingsd.com/20110530/confirmed-twitter-plans-to-announce-photo-sharing-service-this-week/?p=79886?mod=tweet">Confirmed: Twitter Plans to Announce Photo-sharing Service This Week</a>&#8220;. By all accounts, and history bearing witness, All Things D has been a reliable source of technology news since it&#8217;s inception. Founded by media moguls Walt Mossberg and Kara Swisher, it later became part of the <em>WSJ</em> family and has maintained a high level of journalistic integrity and excellence for years.</p>
<p>But something troubles me about this article. With a headline like this, it seems strange that this paragraph would then be included in the article:</p>
<blockquote><p>I am indeed aware that <strong>D9</strong> is the conference put on by this very site, but was not able to get sources to confirm the image-hosting announcement on the record. Twitter spokespeople did not reply for a request for comment on the matter.</p></blockquote>
<p>Of course, the news did in fact turn out to be a true story and Twitter did <a href="http://blog.twitter.com/2011/06/searchphotos.html">announce on their official blog</a> that they would be partnering with <a href="http://photobucket.com">Photobucket</a> to offer an image hosting service.</p>
<p>Notwithstanding, everyone seems to agree that this play has been a foregone conclusion for a long time. And <a href="http://techcrunch.com/2011/05/30/twitter-is-launching-its-own-photosharing-service/">TechCrunch</a> did write a story speculating on the service. But even in that news announcement, there was no real substance with Alexis Tsotsis concluding the article with:</p>
<blockquote><p>I’ve got no details on what exactly the photosharing URL shortener will be if any (Twitter has owned <a href="http://www.ip-adress.com/whois/twimg.com">Twimg.com</a> for a long time) or what the Twitter for Photos product will look like. Just that it’s coming, soon. And if they’re smart they’ll put ads on it.</p></blockquote>
<p>No sourcing. No fact checking. No confirmation.</p>
<p>While the need for speed is certainly required in today&#8217;s immediate, persistent news cycles, it bothers me that articles are being written claiming confirmation when no confirmation exists and that articles are being written from a speculative perspective (no issues there, just call it that!) and being held up as fact.</p>
<p>Though the Twitter news ended up being accurate, I plead with <em>All Things D</em> and all other internet publications to do yourselves and the public a service and stay the main tenets of journalism. Respect is at stake.</p>
]]></content:encoded>
			<wfw:commentRss>http://technosailor.com/2011/06/02/fact-checking-in-the-internet-world/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

