<?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</title>
	<atom:link href="http://technosailor.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://technosailor.com</link>
	<description>Business and Technology with Common Sense</description>
	<lastBuildDate>Mon, 20 May 2013 18:48:54 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.6-beta3-24300</generator>
		<item>
		<title>9 Years of Blogging: Lessons from the Trenches</title>
		<link>http://technosailor.com/2013/05/20/9-years-of-blogging-lessons-from-the-trenches/</link>
		<comments>http://technosailor.com/2013/05/20/9-years-of-blogging-lessons-from-the-trenches/#comments</comments>
		<pubDate>Mon, 20 May 2013 18:46:46 +0000</pubDate>
		<dc:creator>Aaron</dc:creator>
				<category><![CDATA[Aaron Brazell]]></category>
		<category><![CDATA[blogging]]></category>
		<category><![CDATA[data-portability]]></category>
		<category><![CDATA[ethics]]></category>
		<category><![CDATA[Journalism]]></category>

		<guid isPermaLink="false">http://technosailor.com/?p=8702</guid>
		<description><![CDATA[It is May 20 today and that means two things. First, it&#8217;s the 5 year birthday of this handsome boy. Without a doubt, his day will be filled with belly rubs and snacks&#8230; as it should be. But secondly, this is my 9th anniversary of blogging. It&#8217;s also the 9th anniversary of me installing WordPress [&#8230;]]]></description>
				<content:encoded><![CDATA[<p><img class="alignright size-medium wp-image-8703" alt="193868_10150175056631293_442534_o" src="http://technosailor.com/files/193868_10150175056631293_442534_o-300x400.jpg" width="300" height="400" />It is May 20 today and that means two things. First, it&#8217;s the 5 year birthday of this handsome boy. Without a doubt, his day will be filled with belly rubs and snacks&#8230; as it should be.</p>
<p>But secondly, this is my 9th anniversary of blogging. It&#8217;s also the 9th anniversary of me installing WordPress for the first time and embarking on, what would become, a career change and my livelihood. This month, <a href="http://wordpress.org/news/2013/04/save-the-date-may-27/">WordPress celebrates it&#8217;s 10th birthday</a> which makes me a WordPresser for almost all of the time it has been around.</p>
<p>In that time, I have dabbled in everything from traditional blogging (evolving from political blogging to personal blogging to blogging about blogging to social media blogging to business blogging&#8230;. and on and on), to writing code for bloggers use to writing a book for developers to consulting on WordPress projects, etc.</p>
<p>I may have learned something or other along the way. From my 9 years, let me share some of my thoughts:</p>
<h3>Blogging Never Killed Journalism</h3>
<p>In the hey day, everyone suspected that &#8220;old media&#8221; was a dying breed and that blogs would overtake old media and replace it. While it is certainly true that old media had to adjust to the digital age, I think it&#8217;s more relevant (and healthy!) that blogging <a href="http://technosailor.com/2009/04/24/the-death-of-newspapers-or-not/">began to complement</a> traditional media, <a href="http://technosailor.com/2010/07/02/journalism-the-old-is-new-and-the-new-is-old/">as I noted in 2010</a>. Today, most of the major news organizations maintain blogs and journalists wear the hat of traditional reporters and maintain more loosely structured blogs as well.</p>
<p>The same can be said about other forms of digital media &#8211; Twitter, primarily, but Reddit and other Social Media destinations as well. While it&#8217;s certainly true that breaking news travels much faster on digital platforms (including blogs) than traditional, the fact is that traditional publications <em>still</em> have a relevancy and can get a job done in a better way that digital sometimes.</p>
<p>This is particularly true for long form content. On the internet, there is an inherent ADD that causes many readers (including myself) to get distracted easily and not be able to consume long-form content as easily. If I had to back-of-napkin guess, I&#8217;m guessing the sweet-spot for online articles is between 300-700 words. This article will, of course, blow that number out of the water. It is rare that you see great long-form content from publications other than <a href="http://theatlantic.com">The Atlantic</a>, <a href="http://arstechnica.com">Ars Technica</a>, the <a href="http://www.newyorker.com/">New Yorker</a>, etc.</p>
<p>Notably, it was Sports Illustrated&#8217;s print edition that carried the story, <a href="http://sportsillustrated.cnn.com/magazine/news/20130429/jason-collins-gay-nba-player/">that has since been published online</a>, about NBA Center Jason Collins coming out as gay. That was an important piece of journalism with far-reaching political and cultural fallout. And it wasn&#8217;t printed online first. It was printed in traditional media.</p>
<h3>Get Rich Quick with Blogging? Fugghedabotit!</h3>
<p>Oh boy, do I remember the days when everyone fashioned themselves a pro-blogger. Throws some ads up, write content and PROFIT!</p>
<p>While there&#8217;s a part of me that wished that model worked (Damn, that would be so easy&#8230; I&#8217;d never have to work again!!!), life is never that easy. First of all, the advertising bubble was just that&#8230; a bubble. The fact that usable metrics (that advertisers with real money wanted) around long-tail sites could boost income was (and still is) a farce. You need to be able to show some level of guarantee of traffic (<a href="http://en.wikipedia.org/wiki/Cost_per_impression">CPM</a>) or relevancy with a user propensity for buying (<a href="http://en.wikipedia.org/wiki/Cost_per_action">CPA</a>). Otherwise, why buy the ad spots at more than &#8220;remnant&#8221; (i.e. cheap) rates. Remnants aren&#8217;t going to pay your salary, much less your coffee bill for the month. I abandoned advertising on this site a long time ago.</p>
<p>Protip: Affiliate advertising still can convert very well and, if handled properly, could potentially earn someone a living.</p>
<h3>Data Portability <em>is</em> actually important</h3>
<p>Data portability &#8211; the ability to take all your content and pick up and go somewhere else &#8211; used to be the domain of radical, technarchists like <a href="http://scripting.com/">Dave Winer</a>. However, with recent acquisitions of companies like <a href="http://www.forbes.com/sites/tomiogeron/2012/09/06/facebook-officially-closes-instagram-deal/">Instagram by Facebook</a> or the very recent <a href="http://yahoo.tumblr.com/post/50902111638/tumblr-yahoo">Tumblr acquisition by Yahoo!</a>, where reportedly <a href="http://allthingsd.com/20130520/wordpress-mullenweg-claims-72000-blogs-imported-from-tumblr-in-just-one-hour-on-sunday/">72,000 Tumblr blogs were moved into the WordPress.com silo in a single day</a>, the ability for users to take their content somewhere else is actually a primary concern these days. It didn&#8217;t use to be like this, but notably enough of these events have scared users into wondering what happens when their platform of choice goes out of business or is bought.</p>
<p>Personally, for these reasons as well as things like SEO and domain canonicalization, I&#8217;d always recommend people have their own site and use open source self-hosted solutions like <a href="http://wordpress.org">WordPress.org</a> or even one of the (in my opinion) inferior open source content management systems out there. Control your own destiny.</p>
<h3>Journalistic Integrity</h3>
<p>Many bloggers fancy themselves as journalists. They&#8217;ve never gone to J school. Never got a degree. Never learned the art of sourcing. All they have is a laptop, a loud mouth and something to rant about.</p>
<p>To be fair, there have been hundreds of bloggers who have turned into amazing journalists in their own right, broke stories, developed sources, protected their integrity with confirmations, etc. Then there&#8217;s the rest of bloggers who hear something, run with it, write a story that is poorly sourced (&#8220;a source inside Congress told me&#8230;&#8221;) with little to no confirmable facts and want to be respected as journalists. There&#8217;s a reason why real journalists look down their noses at bloggers like this. And rightly so. Also, why everyone looks down their nose at CNN&#8230; <a href="http://www.mediaite.com/online/cnns-john-king-boston-reporting-errors-were-embarrassing-a-shot-to-my-credibility/">ahem</a> *<a href="http://insidetv.ew.com/2012/06/28/cnn-fox-news-supreme-court-obamacare-ruling/">cough cough</a>* )</p>
<p>Not to mention the <a href="http://abcnews.go.com/Business/mommy-bloggers-held-liable-product-reviews/story?id=8764885">spate of bloggers who have historically expected freebies for &#8220;review&#8221;</a> or otherwise. Another thing separating <a href="http://www.nytco.com/press/ethics.html#returning">real journalists</a> from bloggers.</p>
<hr />
<p>There are probably dozens of lessons learned from the past 9 years. Don&#8217;t hold yourself to a posting schedule&#8230; write when you have something to say. I do that here. Maybe a lesser known thing&#8230; write drunk, edit sober. Yeah, I have some of my most creative time when drinking. Dumping that stuff onto the proverbial canvas while in that state and hitting &#8220;Save Draft&#8221; instead of &#8220;Publish&#8221; means I can come back later and review what I wrote with a clear head.</p>
<p>What tips would you give?</p>
]]></content:encoded>
			<wfw:commentRss>http://technosailor.com/2013/05/20/9-years-of-blogging-lessons-from-the-trenches/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>I hate social networking</title>
		<link>http://technosailor.com/2013/05/01/i-hate-social-networking/</link>
		<comments>http://technosailor.com/2013/05/01/i-hate-social-networking/#comments</comments>
		<pubDate>Thu, 02 May 2013 00:21:41 +0000</pubDate>
		<dc:creator>Aaron</dc:creator>
				<category><![CDATA[social media]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[Social Networking]]></category>

		<guid isPermaLink="false">http://technosailor.com/?p=8694</guid>
		<description><![CDATA[I hate social networking. I despise it. All of it. For me it&#8217;s a tool (like me, some would say). &#8220;But, Aaron. You have 1500 friends on Facebook and nearly 10,000 on Twitter. You&#8217;re lying.&#8221; Oh but I&#8217;m not. I used to love social networking. I used to travel to conferences where other social media [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>I hate social networking. I despise it. All of it.</p>
<p>For me it&#8217;s a tool (like me, some would say).</p>
<p>&#8220;But, Aaron. You have 1500 friends on Facebook and nearly 10,000 on Twitter. You&#8217;re lying.&#8221;</p>
<p>Oh but I&#8217;m not. I used to love social networking. I used to travel to conferences where other social media people were just to, in hindsight, make myself look more like a stud. That&#8217;s why there are so many.</p>
<p>I&#8217;ve dated or slept with social media women just for access.</p>
<p>I&#8217;ve been that guy at SXSW that, as a former Austinite, I now mock. That one cutting to the front of the blocks-long line to a hot party just to utter those predictable, and douchey words, &#8220;Do you know who I am?&#8221;</p>
<p>I have the cred I so craved. Even years after I stopped the social whoredom. I get added to Social Media lists on Twitter every day? Why? Because someone thinks if you have 10k followers, you must be important, and therefore, you must be &#8220;social media&#8221;.</p>
<p>I <strong>am</strong> important. But not in that way. I am important to my 9 year old son who I don&#8217;t see nearly as often as I&#8217;d like. I&#8217;m important to my company because I can take their WordPress life farther than they dreamed.</p>
<p>I&#8217;m important to my friends&#8230; My real friends. The ones who drink beer with me or wish they were drinking beer with me like they used to.</p>
<p>I&#8217;m not important because I have friends or followers. And the quality of my life is not contingent on my social presence. I could give a shit less.</p>
<p>When you introduce me as technosailor, instead of Aaron, you do a disservice to me and you. You are the one caught up in the social insanity. Go drink a beer or watch Breaking Bad or, for god&#8217;s sake, go fuck your wife.</p>
<p>Come with me for a minute as I revisit a moment of my life.</p>
<p>It was 1998 and I was in my religious mode. I realize that most readers aren&#8217;t aware of this past and really prefer if I don&#8217;t get preachy. So I won&#8217;t.</p>
<p>But what was said from a pulpit 15 years ago lives on in me, as a life principle.</p>
<p>In the Old Testament book of Joshua, the story is told of the Children of Israel, after a generation of wandering in the Sinai desert after escaping Egyptian captivity, finally had the opportunity to cross the Jordan River into their promised land.</p>
<p>Joshua, their leader, was instructed to construct a monument in the middle of the river where they crossed on dry land. The monument was to be made of 12 stones (representing Abraham&#8217;s twelve sons an the tribes of Israel) and it was to be a celebration of gaining the Promised Land.</p>
<p>It would be really easy, after 40 years and finally attaining your goal, to stay there and live life there. Live in that glorious history and moment.</p>
<p>Except they had a job to do and a land to conquer. They couldn&#8217;t stay in that moment. They had to move on. That moment was glorious but they couldn&#8217;t stay. They had to do work.</p>
<p>And so we come back to social networking. I&#8217;ve been on Twitter since early 2007. I&#8217;ve been on Facebook since late 2006.</p>
<p>I could live in the glory of the Internet and social networking but I&#8217;ve got a life to live.</p>
<p>Some of you are still mindlessly operating with the idea you can make a living doing social media on the Internet. When you simply can&#8217;t. Only very few people can do it well.</p>
<p>As the Jordan River became a part of Israel&#8217;s every day life, social networking is a part of mine. I use it. I live it. I meet people there. It is <strong>not</strong> my life. And if its yours, you really need to re-examine your priorities.</p>
]]></content:encoded>
			<wfw:commentRss>http://technosailor.com/2013/05/01/i-hate-social-networking/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Two-Factor Authentication: What it is and Why You Should be Using it Now</title>
		<link>http://technosailor.com/2013/04/26/two-factor-authentication-what-it-is-and-why-you-should-be-using-it-now/</link>
		<comments>http://technosailor.com/2013/04/26/two-factor-authentication-what-it-is-and-why-you-should-be-using-it-now/#comments</comments>
		<pubDate>Fri, 26 Apr 2013 15:46:30 +0000</pubDate>
		<dc:creator>Aaron</dc:creator>
				<category><![CDATA[Security]]></category>
		<category><![CDATA[authentication]]></category>
		<category><![CDATA[identity theft]]></category>
		<category><![CDATA[two-factor]]></category>
		<category><![CDATA[two-factor authentication]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://technosailor.com/?p=8691</guid>
		<description><![CDATA[Not too long ago, WordPress sites around the world started getting attacked with automated botnet traffic trying to brute force admin passwords. The other day, the official Twitter account of the Associated Press was hacked. Last year, Wired reporter Mat Honan was hacked when his Amazon account was compromised. That compromise allowed an attacker to [&#8230;]]]></description>
				<content:encoded><![CDATA[<p><div id="attachment_8692" class="wp-caption aligncenter" style="width: 610px"><img src="http://technosailor.com/files/4595284293_990cc87346_b-600x400.jpg" alt="Photo by m thierry on Flickr." width="600" height="400" class="size-large wp-image-8692" /><p class="wp-caption-text">Photo by <a href="http://www.flickr.com/photos/mthierry/4595284293/">m thierry</a> on Flickr.</p></div>Not too long ago, WordPress sites around the world started getting attacked with automated <a href="http://en.wikipedia.org/wiki/Botnet">botnet</a> traffic trying to <a href="http://blog.sucuri.net/2013/04/the-wordpress-brute-force-attack-timeline.html">brute force admin passwords</a>. </p>
<p>The other day, <a href="http://techcrunch.com/2013/04/23/ap-twitter-hack-preceded-by-a-phishing-attempt-news-org-says/">the official<br />
Twitter account of the Associated Press was hacked</a>. </p>
<p>Last year, <em>Wired</em> reporter <a href="http://www.wired.com/gadgetlab/2012/08/apple-amazon-mat-honan-hacking/">Mat Honan</a> was hacked when his Amazon account was compromised. That compromise allowed an attacker to access his Apple ID which gave him access to Mat&#8217;s Google account which, in turn, let the attacker into Twitter.</p>
<p>Email, in my opinion, is the gateway to identity theft. It&#8217;s bad if your Twitter or website are hacked. You get things like the AP hack. It&#8217;s bad, if an attacker gains access to your website and defaces it, or does something else. But as terrible as these things can be (and <a href="http://www.wired.com/gadgetlab/2012/08/apple-amazon-mat-honan-hacking/">expensive</a>), identity theft is something that is quite a bit more dangerous.</p>
<p>Here&#8217;s a scenario. Somehow, someway I gain access to your Gmail account. It could be that you have a pretty easy password, or you use the same password everywhere, or it can be from some other nefarious means. But I get access to your Gmail.</p>
<p>You might say, &#8220;well it&#8217;s only email and there&#8217;s nothing all that important there.&#8221;</p>
<p>But you&#8217;d be wrong. If I have access to your email, I have access to everything else. Can&#8217;t remember your Amazon password? That&#8217;s fine. I can perform a password reset, and gain access by clicking on a password reset link. Then delete it so you never even know it was there. Once into Amazon, using your saved billing information, I can run up your credit card info.</p>
<p>I might even be able to get into your bank, although that&#8217;s become significantly more challenging in recent years because of two-factor authentication (which I will get into momentarily).</p>
<p>I could potentially access credit records. Or, depending on the state or locality you are in, your driving and criminal records. And if there is something incriminating in your inbox, I might be able to blackmail you.</p>
<p>Granted, all of this stuff is extremely illegal, but I could still do it if I have access to your email account.</p>
<p><em><strong>Side Point:</strong> Web services that use an email address as the login name are inadvertently dangerous. If I know your email address, I know your login. Then all I have to do is know your password. Whereas not having an email address as a login means I have to figure out BOTH your password AND your username.</em></p>
<p>Fortunately, Google has two-factor authentication. Amazon, Apple, Microsoft, and Facebook all have two-factor authentication as well. Banks, including Bank of America, all have two-factor authentication.</p>
<p>Two-factor authentication is your saving grace and you need to enable it on every account you have.</p>
<h3>What is two-factor authentication?</h3>
<p>The easiest way to explain what two-factor authentication is with the phrase, &#8220;Something you have, something you know&#8221;. You need BOTH things for authentication to happen.</p>
<p>You see this with some biometric systems. Enter a pin (something you know) and scan your thumbprint (something you have).</p>
<p>With banking sites, you enter a password (something you know) and you might identify a unique image (something you have).</p>
<p>You see this with SSH on Linux systems with ssh keys. You provide the server you are logging into with your public key (something you have) and in the &#8220;handshake&#8221; of authentication, it matches against your private key (something you know).</p>
<p>Google, Facebook and the other services providing two-factor authentication require you to enter your password (something you know) and then they&#8217;ll send a pin to your phone (something you have) that you have to also enter in.</p>
<p>It&#8217;s a pain in the ass, and certainly I hope technology reduces the friction that two-factor offers to the authentication process, but it&#8217;s incredibly important that you have two-factor authentication wherever you can.</p>
<p>Go re-read Mat&#8217;s nightmare and you will understand how vastly important that two-factor is. It&#8217;s a nightmare. It&#8217;s scary. It should be a come to Jesus moment for anyone that operates on the internet.</p>
<p><a href="http://lmgtfy.com/?q=how+to+enable+two-factor+authentication">I will let you use the power of the internet</a> to figure out how specifically to do this for various services, but this wouldn&#8217;t be my blog if I didn&#8217;t also suggest a plugin for WordPress (.org, not .com) to enable two-factor. I highly endorse the <a href="http://wordpress.org/extend/plugins/duo-wordpress/">Duo Two-Factor Authentication</a> plugin. I use it on several of my sites.</p>
<p>Hopefully, by enabling this stuff, we can not only stem off a vast amount of hacking attempts, but also become smarter about how we use the internet, protect our privacy and security and, even, in some cases&#8230; safety.</p>
<p>Be safe out there!</p>
<p><strong>Bonus:</strong> <a href="http://halfelf.org/2013/two-factor-authentication/">More on 2FA</a> from my friend Mika Epstein (<a href="http://twitter.com/ipstenu">@Ipstenu</a>).</p>
]]></content:encoded>
			<wfw:commentRss>http://technosailor.com/2013/04/26/two-factor-authentication-what-it-is-and-why-you-should-be-using-it-now/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>WordPress Hacking and Cleanup</title>
		<link>http://technosailor.com/2013/04/12/wordpress-hacking-and-cleanup/</link>
		<comments>http://technosailor.com/2013/04/12/wordpress-hacking-and-cleanup/#comments</comments>
		<pubDate>Fri, 12 Apr 2013 23:34:26 +0000</pubDate>
		<dc:creator>Aaron</dc:creator>
				<category><![CDATA[Aaron Brazell]]></category>
		<category><![CDATA[brute force]]></category>
		<category><![CDATA[hacking]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://technosailor.com/?p=8688</guid>
		<description><![CDATA[There&#8217;s a brute force attack underway on a global scale. Massive. The attack vector? Keep attempting user/pass combos in an automated way until a breakin happens. If your WordPress site gets hacked, I am available for cleanup and an audit. Aaron@technosailor.com It absolutely will cost you a minor fortune. That&#8217;s the way it goes. Don&#8217;t [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>There&#8217;s a brute force attack underway on a global scale. Massive. The attack vector? Keep attempting user/pass combos in an automated way until a breakin happens.</p>
<p>If your WordPress site gets hacked, I am available for cleanup and an audit.</p>
<p><a href="mailto:Aaron@technosailor.com">Aaron@technosailor.com</a></p>
<p>It absolutely will cost you a minor fortune. That&#8217;s the way it goes. Don&#8217;t complain or whine, just get your credit card out.</p>
<p>It would be cheaper to have a strong password and install a plugin that limits failed login attempts though.</p>
<p>But if you don&#8217;t, rest assured I can help you despite you having to postpone a vacation in St. Thomas.</p>
<p>Do the right thing.</p>
]]></content:encoded>
			<wfw:commentRss>http://technosailor.com/2013/04/12/wordpress-hacking-and-cleanup/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Abusing Twitter Direct Messages, Spam and Classlessness</title>
		<link>http://technosailor.com/2013/04/11/abusing-twitter-direct-messages-spam-and-classlessness/</link>
		<comments>http://technosailor.com/2013/04/11/abusing-twitter-direct-messages-spam-and-classlessness/#comments</comments>
		<pubDate>Thu, 11 Apr 2013 15:01:00 +0000</pubDate>
		<dc:creator>Aaron</dc:creator>
				<category><![CDATA[social media]]></category>
		<category><![CDATA[orioles]]></category>
		<category><![CDATA[red-sox]]></category>
		<category><![CDATA[spam]]></category>
		<category><![CDATA[Sports]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://technosailor.com/?p=8687</guid>
		<description><![CDATA[This morning I received a Twitter direct message from the official account for I hate JJ Reddick, one of the best Baltimore sports blogs I know of. I like these guys. I read the blog almost every day and follow many of the writers on Twitter. I live in Baltimore, or as we call it&#8230; [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>This morning I received a Twitter direct message from the official account for <a href="http://www.ihatejjr.com/">I hate JJ Reddick</a>, one of the best Baltimore sports blogs I know of. I like these guys. I read the blog almost every day and follow many of the writers on Twitter. I live in Baltimore, or as we call it&#8230; &#8220;Smalltimore&#8221;. It&#8217;s a small town. You get to know people. You run into them all the time.</p>
<p>(To be fair, I have yet to personally meet any of them, but it&#8217;s only a matter of time. Most of the writers are one degree of separation away.)</p>
<p>As a Ravens fan, I am on board with them. I&#8217;m a fan. But I&#8217;m also a Red Sox fan, which makes for some good-natured rivalry with Orioles coverage. I&#8217;m not above a good-natured rivalry and it&#8217;s all in fun anyway. Or it&#8217;s supposed to be.</p>
<p>The Direct Message was simply:</p>
<blockquote><p>Can you help me tweet out this link of Machado&#8217;s homer from last night? Appreciate it! <a href="http://ihatejjr.com/content/manny-machados-game-winning-homer-boston-last-night-was-glorious-gif">http://ihatejjr.com/content/manny-machados-game-winning-homer-boston-last-night-was-glorious-gif</a></p></blockquote>
<p>There are several things wrong with this DM.</p>
<p>For starters, on the superficial level, I&#8217;m a Red Sox fan. Machado&#8217;s homerun came against the Red Sox and it proved to be the game winner in the top of the 9th inning. My bio on Twitter is:</p>
<blockquote><p>Author / Former Austinite / WordPress Developer / Football Fan / Ravens, Red Sox, Longhorns, Terps / Equality and Justice for All</p></blockquote>
<p>Cut and dry. I label myself as a Sox fan. I tweet about the Sox. It&#8217;s obvious I&#8217;m a Sox fan. So when asked to spread a link that I don&#8217;t like, for fan reasons, I say no.</p>
<p>The second problem with this DM is the abuse angle. It&#8217;s a much more fundamental problem than simply a fan rivalry. Whoever sent this DM clearly didn&#8217;t know his audience, and it becomes painfully obvious that the account was simply sending a mass DM to all followers for the purpose of driving more traffic to the article. The article is written by a <a href="http://ihatejjr.com/users/bernaldo">Bernaldo</a>, who I don&#8217;t know and am not familiar with. For the sake of not making unnecessary accusations, I&#8217;m going to assume he was not the one behind the DM.</p>
<p>This tactic of mass DMming is frowned upon almost universally. The fact that it was to drive traffic, which is directly proportional to ad impressions, makes it spam. This is a much bigger issue than just a fan rivalry.</p>
<p>So I sent this response:</p>
<blockquote><p>No. I&#8217;m a Red Sox fan. Please don&#8217;t abuse DM like this… ;)</p></blockquote>
<p>Note the winky face, the international sign for&#8230; &#8220;Imma let you finish. I&#8217;m not mad, bro&#8221;</p>
<p>I also said, &#8216;Please&#8217;.</p>
<p>Within minutes, I receive another DM:</p>
<blockquote><p>You&#8217;re a fucking loser just like your baseball team. Blocked.</p></blockquote>
<p>And Orioles fans call Red Sox fans classless.</p>
<p><img src="http://26.media.tumblr.com/tumblr_lh56tb0Bwj1qcsrrxo1_500.gif" width="500" height="275" class="aligncenter" /></p>
<p>This is a small town. I&#8217;m surprised that any publication in this city would respond the way they have as, you know, word gets around. It&#8217;s just entirely inappropriate and unprofessional. No skin off my nose, really. However, when it&#8217;s pointed out that you made a mistake, complete with a &#8216;Please&#8217; and winky face, I&#8217;d hope that most people would follow up with something more along the lines of: &#8220;Whoops. Sorry about that. Didn&#8217;t mean to spam you. Hope Machado does it again to your boys tonight&#8221;.</p>
<p>But hey, don&#8217;t let a little good-natured fan rivalry get in the way of a good money-making traffic push to <a href="https://twitter.com/ihatejjredick">4500</a> of your closest friends?</p>
]]></content:encoded>
			<wfw:commentRss>http://technosailor.com/2013/04/11/abusing-twitter-direct-messages-spam-and-classlessness/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Sublime 2 Power Tools</title>
		<link>http://technosailor.com/2013/03/28/sublime2-power-tools/</link>
		<comments>http://technosailor.com/2013/03/28/sublime2-power-tools/#comments</comments>
		<pubDate>Thu, 28 Mar 2013 14:24:44 +0000</pubDate>
		<dc:creator>Aaron</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[sublime 2]]></category>
		<category><![CDATA[text editor]]></category>

		<guid isPermaLink="false">http://technosailor.com/?p=8684</guid>
		<description><![CDATA[This is a very advanced technical article. For years, as a developer, I used the fantastic Textmate software for writing code. I got used to it. It&#8217;s a power editor for Mac OS X and has bundle support (think of bundles as extensions or plugins) that enhance the functionality of the software) for just about [&#8230;]]]></description>
				<content:encoded><![CDATA[<p><em>This is a very advanced technical article.</em></p>
<p>For years, as a developer, I used the fantastic <a href="http://macromates.com/">Textmate</a> software for writing code. I got used to it. It&#8217;s a power editor for Mac OS X and has bundle support (think of bundles as extensions or plugins) that enhance the functionality of the software) for just about every technology, from <a href="http://subversion.tigris.org/">Subversion</a> to <a href="http://git-scm.com/">Git</a> to a bunch of things I don&#8217;t use in a PHP environment like C/C++ mallloc (memory allocation), Python, Ruby, etc. It&#8217;s even got a <a href="http://top-frog.com/projects/wordpress-textmate-bundle/">WordPress bundle</a>!</p>
<p>The problem with Textmate, however, is that active development is slow. Like, extremely slow. Like, molasses slow. After five years of using version 1.5x, an alpha version of 2.0 <em>finally</em> emerged last year. It&#8217;s still in alpha. Pace of development is still painfully slow, and what is in the 2.0 alpha version is not ground-breaking compared to what is in the current stable version.</p>
<p>Along came <a href="http://www.sublimetext.com/2">Sublime 2</a>. This is, by far, my favorite text editor ever. I&#8217;ve been using it for about six months. It emulates virtually everything Textmate does. Textmate does <a href="http://manual.macromates.com/en/snippets">snippets</a> (think of them as macros). Sublime 2 also does snippets and supports the Textmate style. (Hint: If you&#8217;re a WordPress developer, my favorite &#8211; and still most commonly used &#8211; snippet comes from Mark Jaquith who wrote<a href="http://markjaquith.wordpress.com/2009/08/31/textmate-wordpress-widget-snippet/"> this snippet</a> to create WordPress widgets on the fly. It works in both Textmate and Sublime 2).</p>
<p>The great thing about Sublime 2 is that it is truly a hacker&#8217;s paradise. All the config files are JSON objects, so if you can write JSON, you can configure Sublime 2. None of this namby pamby UI/click/select from dropdown bulldookie. Write your code and mean it. Related is that the master configuration file is extremely well documented and you can override everything in it, <em>not by editing this file, but by providing new values in the user configuration file</em>.</p>
<p>Ok, let&#8217;s back up and get y&#8217;all up to speed on what I do when configuring my Sublime 2 environment.</p>
<h3>Config Files</h3>
<p>First, I recommend you look at the entire Default configuration file. Read all the settings and comments and understand all the possibilities you have. Your most comfortable environment won&#8217;t be mine. For me, I see the following configuration settings that I&#8217;m going to want to override. Keep in mind, I never edit the default configuration file. It gets overwritten on upgrade.</p>
<p>To access this file, go to Preferences &gt;  Settings &#8211; Default <a class="simple-footnote" title="Sublime 2 works on Mac OS X, Windows and Linux. All options will be similar, if not identical, to what I&#8217;m providing here from an OS X perspective. If you can&#8217;t find what I&#8217;m referring to, think about where logically it might be in your menus." id="return-note-8684-1" href="#note-8684-1"><sup>1</sup></a>.</p>
<p>Note that I have included the related Sublime 2 default comments along with the settings I wish to override.</p>
<div class="codecolorer-container javascript 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 /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #006600; font-style: italic;">// While you can edit this file, it's best to put your changes in</span><br />
<span style="color: #006600; font-style: italic;">// &quot;User/Preferences.sublime-settings&quot;, which overrides the settings in here.</span><br />
<span style="color: #006600; font-style: italic;">//</span><br />
<span style="color: #006600; font-style: italic;">// Settings may also be placed in file type specific options files, for</span><br />
<span style="color: #006600; font-style: italic;">// example, in Packages/Python/Python.sublime-settings for python files.</span><br />
<span style="color: #009900;">&#123;</span><br />
<span style="color: #006600; font-style: italic;">// Note that the font_face and font_size are overriden in the platform</span><br />
<span style="color: #006600; font-style: italic;">// specific settings file, for example, &quot;Preferences (Linux).sublime-settings&quot;.</span><br />
<span style="color: #006600; font-style: italic;">// Because of this, setting them here will have no effect: you must set them</span><br />
<span style="color: #006600; font-style: italic;">// in your User File Preferences.</span><br />
<span style="color: #3366CC;">&quot;font_size&quot;</span><span style="color: #339933;">:</span> <span style="color: #CC0000;">10</span><span style="color: #339933;">,</span><br />
<br />
<span style="color: #006600; font-style: italic;">// OS X only: When files are opened from finder, or by dragging onto the</span><br />
<span style="color: #006600; font-style: italic;">// dock icon, this controls if a new window is created or not.</span><br />
<span style="color: #3366CC;">&quot;open_files_in_new_window&quot;</span><span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span><br />
<br />
<span style="color: #006600; font-style: italic;">// Characters that are considered to separate words</span><br />
<span style="color: #3366CC;">&quot;word_separators&quot;</span><span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;./<span style="color: #000099; font-weight: bold;">\\</span>()<span style="color: #000099; font-weight: bold;">\&quot;</span>':,.;-&amp;lt;&amp;gt;~!@#$%^&amp;amp;*|+=[]{}`~?&quot;</span><span style="color: #339933;">,</span><br />
<br />
<span style="color: #006600; font-style: italic;">// When drag_text is enabled, clicking on selected text will begin a</span><br />
<span style="color: #006600; font-style: italic;">// drag-drop operation</span><br />
<span style="color: #3366CC;">&quot;drag_text&quot;</span><span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>These settings and their related comments may seem self-explanatory, but in case they are not&#8230;</p>
<p><strong>font_size</strong>: This setting controls the font size in the editor. Derp.</p>
<p><strong>open_files_in_new_window</strong>: As a developer on an 11&#8243; MacBook Air, I hate this setting. As the name suggests, everytime you open a file, it&#8217;s going to be in a separate window. This may be okay if you have a ton of screen real estate, but if you don&#8217;t&#8230; well, I like to have windows open up in a new tab of my editor so I can access them quickly and easily without consuming precious real estate.</p>
<p><strong>word_separators</strong>: This is a list of characters that serve as word separators. I don&#8217;t mean <em>code</em> word separators. We&#8217;re talking about in the editor. I want to be able to click a CSS selector that often comes with a dash in the middle, and highlight/select the whole selector. By default, if there&#8217;s a hyphen, only the portion of the word clicked will be highlighted.</p>
<p>For instance, if a <code class="codecolorer html4strict default"><span class="html4strict"><span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/div.html"><span style="color: #000000; font-weight: bold;">div</span></a>&gt;</span></span></code> has a <code class="codecolorer html4strict default"><span class="html4strict">class=&quot;foo&quot;</span></code>, and I click on foo, foo will, by default, be selected. But if that div has a <code class="codecolorer html4strict default"><span class="html4strict">class=&quot;foo-bar&quot;</span></code>, then clicking on foo will only highlight/select foo (up to the hyphen) and not all of the, more contextually accurate, &#8216;foo-bar&#8217;. In my user configuration file, I&#8217;m going to remove the hyphen, and thus remove this annoyance from my life.</p>
<p><strong>drag_text</strong>: This is an edge case setting, but it has bitten me a few times. If you&#8217;re in a window in Sublime 2, and you have a block of code selected, when this default configuration is in play, you can drag that text into another window. I can see the use for this, but it&#8217;s also thrown me for a loop more times than it&#8217;s been useful. I override this to prevent that from happening. If I really want text in another window, I&#8217;ll jkust do the traditional copy and paste.</p>
<h3>Overriding Defaults</h3>
<p>Knowing I want to change these settings, I can write my own JSON object into my User configuration (Preferences &gt; Settings &#8211; User):</p>
<div class="codecolorer-container javascript 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 /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;">&#123;</span><br />
<span style="color: #3366CC;">&quot;drag_text&quot;</span><span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">,</span><br />
<span style="color: #3366CC;">&quot;font_size&quot;</span><span style="color: #339933;">:</span> <span style="color: #CC0000;">15.0</span><span style="color: #339933;">,</span><br />
<span style="color: #3366CC;">&quot;open_files_in_new_window&quot;</span><span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">,</span><br />
<span style="color: #3366CC;">&quot;word_separators&quot;</span><span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;./<span style="color: #000099; font-weight: bold;">\\</span>()<span style="color: #000099; font-weight: bold;">\&quot;</span>':,.;&lt;&gt;;~!@#$%^&amp;*|+=[]{}`~?&quot;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>Easy Peasey!</p>
<h3>Installing Packages</h3>
<p>Where Textmate had Bundles, Sublime 2 has Packages. Packages are extremely powerful.</p>
<p><strong>NOTE:</strong> <a href="http://wbond.net/sublime_packages/package_control">Install this first <a class="simple-footnote" title="Specific installation instructions can be found here." id="return-note-8684-2" href="#note-8684-2"><sup>2</sup></a>. Trust me. And get familiar with <a href="http://wbond.net/sublime_packages/package_control/usage">this</a>.</p>
<p>There are a million and one different packages out there, depending on what your needs are. Installing a package is as simple as going to Preferences &gt; Package Manager &gt; Install Package. Note that you can also add new external repositories of external packages that Sublime 2 can also search.</p>
<div id="attachment_8685" class="wp-caption alignright" style="width: 410px"><img class="size-medium wp-image-8685" alt="Sublime 2 - 4 Pane Grid View" src="http://technosailor.com/files/Screenshot_3_28_13_10_22_AM-400x367.png" width="400" height="367" /><p class="wp-caption-text">Sublime 2 &#8211; 4 Pane Grid View</p></div>
<h3>Summary</h3>
<p>Sublime 2, of course, has hundreds of different setups. It kinda just depends on your taste and not being afraid to try things. Because everything is based on text file configurations and settings, everything can be reversed. Don&#8217;t be afraid to break things. You can always back out. You can even set it up so that you have multiple files open in the same tab. Set it up the way you want it and go be more productive!</p>
<div class="simple-footnotes"><p class="notes">Notes:</p><ol><li id="note-8684-1">Sublime 2 works on Mac OS X, Windows and Linux. All options will be similar, if not identical, to what I&#8217;m providing here from an OS X perspective. If you can&#8217;t find what I&#8217;m referring to, think about where logically it might be in your menus. <a href="#return-note-8684-1">&#8617;</a></li><li id="note-8684-2">Specific installation instructions can be found </a><a href="http://wbond.net/sublime_packages/package_control/installation">here</a>. <a href="#return-note-8684-2">&#8617;</a></li></ol></div>]]></content:encoded>
			<wfw:commentRss>http://technosailor.com/2013/03/28/sublime2-power-tools/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>TUTORIAL: Developing Locally on WordPress with Remote Database Over SSH</title>
		<link>http://technosailor.com/2013/03/15/tutorial-developing-locally-on-wordpress-with-remote-database-over-ssh/</link>
		<comments>http://technosailor.com/2013/03/15/tutorial-developing-locally-on-wordpress-with-remote-database-over-ssh/#comments</comments>
		<pubDate>Fri, 15 Mar 2013 17:32:21 +0000</pubDate>
		<dc:creator>Aaron</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[networking]]></category>
		<category><![CDATA[port forwarding]]></category>
		<category><![CDATA[ssh]]></category>
		<category><![CDATA[ssh tunnelling]]></category>

		<guid isPermaLink="false">http://technosailor.com/?p=8682</guid>
		<description><![CDATA[Today, I went about setting up a local WordPress install for some development I am doing at work. The problem that existed is that I didn&#8217;t want to bring the database from the existing development server site into my local MySQL instance. It&#8217;s far too big. I figured this could be done via an SSH [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Today, I went about setting up a local WordPress install for some development I am doing at work. The problem that existed is that I didn&#8217;t want to bring the database from the existing development server site into my local MySQL instance. It&#8217;s far too big. I figured this could be done via an SSH tunnel and so, I set abut trying to figure it out. The situation worked flawlessly and so, for your sake (and for myself for the future), I give you the steps.</p>
<h3>Setting up the SSH Tunnel</h3>
<p>I run a local MySQL server and that runs on the standard MySQL port 3306. So as these things go, I can&#8217;t bind anything else to port 3306 locally. I have to use an alternate port number. I chose 5555, but you can use whatever you want.</p>
<p>The command to run in a Terminal window is:</p>
<p><code class="codecolorer text default"><span class="text">ssh -N -L 5555:127.0.0.1:3306 remoteuser@remotedomain.com -vv</span></code></p>
<p>A little bit about what this means.</p>
<p>the -N flag means that when connecting via SSH, we are not going to execute any commands. This is necessary for tunnelling as, we literally, will not execute any commands on the remote server. Therefore, we won&#8217;t get a command prompt.</p>
<p>the -L flag tells SSH that we are going to port forward. The following portion, 5555:127.0.0.1:3306 combined with the -L flag means, literally, <em>forward all traffic on localhost (127.0.0.1) connecting on port 5555 to the remote server&#8217;s port 3306 (standard MySQL listening port)</em>.</p>
<p>The remote server and ssh connection is handled by remoteuser@remotedomain.com. This seems obvious, but just in case. You may be prompted to enter your SSH password.</p>
<p>The final part can be omitted, but I like to keep it there so I know what&#8217;s happening. The -vv flag tells the SSH daemon to be extra verbose about what is happening with the connection. It&#8217;s sort of a good way to debug if you need to, and to know that the port forwarding is actually taking place.</p>
<h3>Configuring WordPress to use the Tunnel</h3>
<p>Now that we have a successful SSH tunnel, you have to configure WordPress to use it. In the <code class="codecolorer text default"><span class="text">wp-config.php</span></code> file, simply modify the DB_HOST constant to read:</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"><a href="http://www.php.net/define"><span style="color: #990000;">define</span></a><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'DB_HOST'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'127.0.0.1:5555'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>You need to add two more variables, though, to override WordPress&#8217; existing siteurl and home options to allow you to work with the localhost domain, instead of redirecting to the remotedomain.com that is configured in WordPress.</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"><a href="http://www.php.net/define"><span style="color: #990000;">define</span></a><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'WP_HOME'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'http://localhost'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<a href="http://www.php.net/define"><span style="color: #990000;">define</span></a><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'WP_SITEURL'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'http://localhost'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<h3>BOOM!</h3>
<p>With these configurations in place, loading up WordPress should now load in the database content from the remote host and you can get to work on local development. Word to the wise&#8230; don&#8217;t close the terminal window with the tunnel or the tunnel will be severed. If you have to minimize it so it&#8217;s not annoying you, go for it&#8230; just don&#8217;t close it.</p>
]]></content:encoded>
			<wfw:commentRss>http://technosailor.com/2013/03/15/tutorial-developing-locally-on-wordpress-with-remote-database-over-ssh/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>New York Wins Because It Has More Girls (and other tidbits of insanity from the tech community)</title>
		<link>http://technosailor.com/2013/02/11/new-york-wins-because-it-has-more-girls-and-other-tidbits-of-insanity-from-the-tech-community/</link>
		<comments>http://technosailor.com/2013/02/11/new-york-wins-because-it-has-more-girls-and-other-tidbits-of-insanity-from-the-tech-community/#comments</comments>
		<pubDate>Tue, 12 Feb 2013 01:00:04 +0000</pubDate>
		<dc:creator>Aaron</dc:creator>
				<category><![CDATA[Feminism]]></category>
		<category><![CDATA[feminism]]></category>
		<category><![CDATA[misogyny]]></category>
		<category><![CDATA[new york]]></category>
		<category><![CDATA[silicon valley]]></category>
		<category><![CDATA[tech]]></category>

		<guid isPermaLink="false">http://technosailor.com/?p=8674</guid>
		<description><![CDATA[Ladies and gentlemen, we don&#8217;t live in a fantasy world where we get to define truth and memorex. There are many areas of life that are grey areas. Then there&#8217;s right and wrong, correct and incorrect, proper and improper, truth and consequences. I had a conversation recently with a third party developer that was maintaining [&#8230;]]]></description>
				<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-8675" alt="tumblr_m585xyxrjm1r06u14" src="http://technosailor.com/files/tumblr_m585xyxrjm1r06u14.gif" width="500" height="221" />Ladies and gentlemen, we don&#8217;t live in a fantasy world where we get to define truth and memorex. There are many areas of life that are grey areas. Then there&#8217;s right and wrong, correct and incorrect, proper and improper, truth and consequences.</p>
<p>I had a conversation recently with a third party developer that was maintaining some code for a client. It went something like this.</p>
<blockquote><p><strong>Me:</strong> Hey, we&#8217;re having some problems and I noticed in the logs this error that occurs anytime we encounter the problem. I&#8217;m not sure what&#8217;s going on here, but it seems to have to do with this code. Can you look?</p>
<p><strong>Him:</strong> If you turn the error reporting down, then it won&#8217;t appear in the log.</p>
<p><strong>Me:</strong> I don&#8217;t think you understand. I&#8217;m not complaining about the error in the log. The error helped me pinpoint the problem area. All turning error reporting down does is prevent us from seeing the error. It doesn&#8217;t make it go away. Please tell me how you want to fix this. Thanks.</p></blockquote>
<p>This morning, I read <a href="http://online.wsj.com/article/SB10001424127887323807004578286092262586534.html?mod=wsj_share_tweet">an article in the Wall Street Journal</a>. The article did your now-common comparison between east coast tech &#8211; more specifically, New York Tech &#8211; and Silicon Valley tech. That conversation is exhausted. <a href="http://technosailor.com/2012/01/05/your-fiefdom-doesnt-matter-or-get-your-head-out-of-your-regional-startup-ass/">I&#8217;ve already addressed regional fiefdoms</a>. It doesn&#8217;t matter. Us? Them? Who&#8217;s got the biggest dick? It doesn&#8217;t matter. Let&#8217;s save that conversation for another time.</p>
<p>The article was mostly good, besides the cliché. Until the final three paragraphs.</p>
<blockquote><p>Andrew Rasiej, chairman of NY Tech Meetup, was debating the merits of New York versus Silicon Valley&#8217;s nearest metropolis, San Francisco, at a recent conference when a young programmer chipped in: &#8220;New York will always win out,&#8221; Mr. Rasiej recalled of the exchange, &#8220;because it has more girls.&#8221;</p>
<p>A table full of female models was recently enjoying a girls&#8217; night out at Abe &amp; Arthur&#8217;s, a steakhouse in the Meatpacking District, when a man sent one of the women a note on a cocktail napkin. It read: &#8220;iamrich@google.com.&#8221;</p>
<p>The women posted the napkin to Facebook and crowdsourced ways they might reject the overture. In a way, it brought together avatars of the new tech scene with icons of established fashion power. But it also marked, in Internet lingo, an epic fail.</p></blockquote>
<p>Let&#8217;s also ignore the money status cliche and address the sexism issue described in this article. <a href="http://technosailor.com/2012/04/26/tech-we-need-to-start-being-feminists-stat/">I&#8217;ve done it before</a> and I&#8217;ll continue to do it until we stop pretending that the problem doesn&#8217;t exist by simply changing the log reporting.</p>
<p>The tech community really likes to turn down the error reporting in a big way. <em>New York wins out because it has more girls</em>. Is that so?</p>
<p>We work, breathe, live, spend our weekends in and around, date inside of the tech world. As entrepreneurs and techies, I know more people with <em>zero</em> social life because their idea of fun is sitting at home at 1am on a Saturday coding a Ruby app. Maybe we are just socially unaware. Maybe we&#8217;re malicious. Maybe we&#8217;re really misogynist.</p>
<p>I don&#8217;t care what the excuse is. We must do better. All of us.</p>
<p>Having a balanced number of women to men on tech-oriented panels and at conferences is a good start, but we must fix the problem. We have to get our heads out of our asses and realize that women engineers can probably teach us something about our own world. We don&#8217;t know better. We know enough to hang ourselves.</p>
<p>The casual things we say to each other online or in person. The jokes we make that, to us, are jokes&#8230; <em>are not jokes</em>.</p>
<p>This is not a cry for political correctness. This is a call for sensitivity and thoughtful intent. This is a sobering call for respect and equality.</p>
<p>I&#8217;m talking to myself as much as am talking to you. Every time I make comments about a woman being hot, I am not simply being a man. I am disqualifying her from the intellectual marketplace that I live in. Every time I go to a meetup drinkup and I gravitate toward the woman at the bar at the same event, I marginalize her abilities as a woman in tech.</p>
<p>Are we supposed to just become asexual beings? No. Of course not. But there&#8217;s a time, place and <em>way</em> to do it and making comments like &#8220;New York wins because we have more girls,&#8221; is gross negligence. If New York wins, it&#8217;s because it has the best apps, companies, entrepreneurs and ideas&#8230; and women are partners in that.</p>
<p>Let&#8217;s wake up and get real and stop simply turning down the error reporting so we don&#8217;t have to address the issue.</p>
]]></content:encoded>
			<wfw:commentRss>http://technosailor.com/2013/02/11/new-york-wins-because-it-has-more-girls-and-other-tidbits-of-insanity-from-the-tech-community/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>I Fired Myself</title>
		<link>http://technosailor.com/2013/01/09/i-fired-myself/</link>
		<comments>http://technosailor.com/2013/01/09/i-fired-myself/#comments</comments>
		<pubDate>Wed, 09 Jan 2013 15:59:06 +0000</pubDate>
		<dc:creator>Aaron</dc:creator>
				<category><![CDATA[Aaron Brazell]]></category>
		<category><![CDATA[agora]]></category>
		<category><![CDATA[agora financial]]></category>
		<category><![CDATA[entrepreneurship]]></category>
		<category><![CDATA[happiness]]></category>
		<category><![CDATA[Job Search]]></category>
		<category><![CDATA[lifestyle]]></category>

		<guid isPermaLink="false">http://technosailor.com/?p=8671</guid>
		<description><![CDATA[If we&#8217;re friends on Facebook or Twitter, you know about my new job in Baltimore. Technically, it&#8217;s not a new job yet, as I don&#8217;t start until February 4. However, it&#8217;s a new job and a return, for the first time since 2006, to a more corporate (if laid back) working environment. I&#8217;ve only worked [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>If we&#8217;re friends on Facebook or Twitter, you know about my new job in Baltimore. Technically, it&#8217;s not a new job yet, as I don&#8217;t start until February 4. However, it&#8217;s a new job and a return, for the first time since 2006, to a more corporate (if laid back) working environment. I&#8217;ve only worked for one company in that period of time, and I was a founder. That, of course, is the hugely successful <a href="http://wpengine.com">WP Engine</a>. However, <a href="http://technosailor.com/2011/10/03/changing-roles-at-wp-engine/">I left that role in October of 2011</a>. I still didn&#8217;t have the motivation to <em>not</em> work for myself.</p>
<p>A little about this new role, however, since I brought it up. I feel it&#8217;s necessary in proving the point I want to make.</p>
<h3>Corporate Culture</h3>
<p><a href="http://agorafinancial.com">Agora Financial</a>, as a division of <a href="http://www.agora-inc.com/">Agora, Inc.</a> was named the <a href="http://www.baltimoresun.com/business/jobs/topworkplaces/bal-2011-top-employers-table,0,3025340.htmlpage">2nd best place to work in Baltimore in 2011</a> by the Baltimore Sun. As an adopted Austinite, that label carries a high standard. In Austin, &#8220;business casual&#8221; is cutoff jean shorts (&#8220;jorts&#8221;) and a tech swag tee shirt with sandals. In Austin, the chic commuter rides a scooter or bicycle. Maybe even walks. In Austin, drinking a beer is not something simply saved for off-hours. In fact, many companies keep a refrigerator stocked with beer because, hey, the workforce can be more relaxed, efficient and productive if given certain leeway. Thankfully, none of us are drunks&#8230; <a href="http://www.thedailybeast.com/galleries/2011/12/28/america-s-drunkest-cities-photos.html#slide_5">maybe</a>.</p>
<p>At Agora, I found a company that matched this sort of comfort level I&#8217;ve come to expect. When I flew up for an interview (and job interviews have been something I&#8217;ve not really had to do seriously since 2002), I emailed Mark, the Art Director and my point of contact, and very politely suggested I wouldn&#8217;t be arriving at their headquarters in a tie. Manage expectations, and such. Mark&#8217;s response was simply, &#8220;That&#8217;s fine. Business casual works&#8221;.</p>
<p>Business casual can mean many things. It&#8217;s sort of a catch all phrase that means different things to different people based on different companies policy ideas. So I wore some decent dress pants, a button up shirt and a vest with no tie. The team had sandals, jeans with holes, and hoodies and plaid-pattern button up shirts. <em>I felt like I was in Austin!</em></p>
<h3>Ideology</h3>
<p>But company culture was just one aspect. The work they do perfectly fits who I am practically and ideologically.</p>
<p>You see, Agora is a publishing company first and foremost. I&#8217;m a publisher. I&#8217;ve written a book and worked with traditional book publishers. My first startup was a publishing company with, at our peak, 350 blogs. Agora&#8217;s model is different than those models, but they&#8217;re publishing. They are creating content that, hopefully, long outlives us.</p>
<p>They are a policy research publishing company. Those who know me know that I love policy, I hate politics. When I engage in politics, it&#8217;s usually from the lens of policy. Agora provides research analysis and white papers based on their policy research in a subscription format. So there&#8217;s also a revenue model. And they&#8217;ve been highly successful at doing this, historically through newsletters, for years. It&#8217;s a proven model, and they are a proven company.</p>
<p>In addition, their policy analysis generally comes from a libertarian (small &#8220;l&#8221;) perspective. As a left-leaning small-l libertarian, I enjoy this aspect of what they do (even though I suspect most of my colleagues and most libertarians as a whole are right-leaning small-l libertarians, I suspect that we all agree on a framework of responsibility and limited government in individuals life, and diverge on other less-important minutiae).</p>
<p>I was hungry for this job. It was a dream job for me. Join a company doing things I loved, in areas I loved, with tools (WordPress) I loved, with a style of corporate culture that I loved. When they made me an offer, I didn&#8217;t hesitate to accept and fire myself from my own company.</p>
<p><i>I fired myself!</i></p>
<h3>Having the Balls to Fire Myself</h3>
<p>Most people aspire to stop working for the man, and start working for themselves. There are entire classes at universities and colleges about entrepreneurship, and to be sure, entrepreneurship is the mode of decade.</p>
<p>The other night, I had the opportunity to guest lecture for an capstone course on digital entrepreneurship for <a href="http://au.edu">American University</a>. It was online and <a href="https://american.adobeconnect.com/_a1093836719/p9lakdj7lsb/">you can hear my story and lecture here</a>. This course is a culmination of all the classwork done in this program and is largely a practicum of everything learned to that point. The lectures are a series of lectures from guests that give the students inspiration and motivation about their futures while they work on their individual projects.</p>
<p>During this talk, I spoke specifically about the time I left corporate America and went out on a limb. It was 2006. I had been working on a side-project basis for over a year building up a WordPress-powered content network and when we finally took funding, I was employee #1 or #2, depending on who you ask. I couldn&#8217;t wait to leave my computer-fixing job and go do something I really, really wanted to do instead and get paid for.</p>
<p>I&#8217;ve heard stories like that from hundreds of entrepreneurs. Most never look back with any regret, despite the struggles and sometime-economic instability.</p>
<p>I have a view that whatever I do, I do it because I want to. It&#8217;s very easy to look and say that running a startup, building a product, starting a company or, in general, working for yourself is, in fact, the holy grail.</p>
<h3>From Happiness to Happiness</h3>
<p>My view is that the holy grail should be happiness and motivation derived from what you do. Sometimes that means taking a more unorthodox step and saying, you know what&#8230; being an entrepreneur is awesome, but it&#8217;s a vehicle to happiness, not happiness itself.</p>
<p>So effective February 4, 2013, Aaron Brazell has been terminated by Aaron Brazell.</p>
<p>I don&#8217;t know if I would have fired myself to go be a developer in some developer-happy company that segregates the developer from the product line. In other words, a lot of developer-oriented companies have developers as a means to an end. Product managers go talk to customers, develop goals, milestones, wireframes or storyboards, make decisions on initiatives with corporate executives and the developers exist to make that shit happen.</p>
<p>Some people like that. Some people don&#8217;t want to be a part of the politics and roadmapping. They work better with a framework that defines what their role and deliverables are. For them, that&#8217;s happiness.</p>
<p>For me, happiness is seeing the vision, talking about what it means &#8211; the pros, cons, feedback &#8211; iterating, being a part of the process of both scoping and building and then allowing the idea to flourish. It means building something toward an end. In the idea of a startup, it means building a product and moving it toward acquisition, IPO or even failure.</p>
<p>As a consultant, there was no viable end. Unless I&#8217;m committed to building out a team (I&#8217;m not), increasing a production pipeline (without a team, I can&#8217;t), or other such motivations, a consultancy looks exactly the way it does in 10 years as it did on day 1 &#8211; find clients, build something for them, collect money, wash, rinse, repeat. There&#8217;s no glorious ending. To me, that makes for an unhappy Aaron.</p>
<p>Agora provides an exciting platform, an an innate sense of entrepreneurship internally, that makes me happy. If I have an idea, I can try it. If I think something could really work well, I&#8217;ve got a green light to work on it. All within a good developer situation where I also have deliverables, and things to look at and solve. The combination of such makes Aaron a very happy person.</p>
]]></content:encoded>
			<wfw:commentRss>http://technosailor.com/2013/01/09/i-fired-myself/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>For Photographers, Instagram Square Photos are Worse than a TOS Update</title>
		<link>http://technosailor.com/2012/12/18/for-photographers-instagram-square-photos-are-worse-than-a-tos-update/</link>
		<comments>http://technosailor.com/2012/12/18/for-photographers-instagram-square-photos-are-worse-than-a-tos-update/#comments</comments>
		<pubDate>Tue, 18 Dec 2012 17:11:14 +0000</pubDate>
		<dc:creator>Aaron</dc:creator>
				<category><![CDATA[Aaron Brazell]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[instagram]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[photography]]></category>

		<guid isPermaLink="false">http://technosailor.com/?p=8665</guid>
		<description><![CDATA[I&#8217;m a photographer and I use both my iPhone 4S and my Digital SLR to take photos. There&#8217;s a difference between taking pictures and taking photos, however, and the nuance is an important thing to understand. When you raise a camera and snap a photo, unless you&#8217;re paying attention to things like composition, lighting, depth [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>I&#8217;m a photographer and I use both my iPhone 4S and my Digital SLR to take photos.</p>
<p>There&#8217;s a difference between taking pictures and taking photos, however, and the nuance is an important thing to understand. When you raise a camera and snap a photo, unless you&#8217;re paying attention to things like composition, lighting, depth of field, aperture, shutter speed and ISO, you&#8217;re taking a picture. If you&#8217;re doing all of those things (or reasonably close to all those things), you are safely in the category of &#8220;doing photography&#8221;.</p>
<p>One is casual. The other is intentionally art (whether good art or not is a subjective matter that shouldn&#8217;t be handled in this post).</p>
<p>Art doesn&#8217;t have to be Pablo Picasso or Ansel Adams or John Lennon. It doesn&#8217;t have to have a philisophical meaning or intent. Art is the expression of the Artist on an outward medium. Or in the case of photography, it is more simply the interpretation of what the eyes sees into a likeness in film or in digital media. Photography as art cannot be done haphazardly. That&#8217;s how people <a href="http://technosailor.com/2008/09/25/buying-digital-slr-cameras/">get caught in the trap of buying a $2000 camera</a> and wondering why their photos suck. Because there is no context of movement, sound, smell or touch, the essence of a point in time must be captured entirely visually. If it&#8217;s done right, it&#8217;s art because care, intent and a degree of skill are needed to translate the moment into a snapshot.</p>
<p>Photographers work hard to get this right. It takes a perceptive eye, a knowledge of the equipment, lighting and composition to make a great piece of art in the form of a photograph.</p>
<h3>I thought this was about Instagram?</h3>
<p>This is about Instagram. Instagram&#8217;s app used to allow the user to upload a photo that did not fit a strict &#8220;square&#8221; format and pinch and squeeze to resize and get an entire photo in. While this was not as aesthetically pleasing as it could have been, it gave the photographer the ability to use the entirety of a photo and the composition nuances in it.</p>
<p>The new app does not allow for this zoom and strictly enforces a square model. The Next Web covers <a href="http://thenextweb.com/apps/2012/12/18/instagrams-latest-app-update-fixed-my-biggest-pet-peeve-and-people-hate-it/">some of the pushback</a> and takes the opposite side as me &#8211; that it&#8217;s high time Instagram enforce a square photo.</p>
<p>Take this photo as an example. I love this photo of Downtown Austin from across the S. Lamar St Bridge. The composition here is extremely important. The reflection of the bridge in the water, the trees and of course the kayaker under the bridge make this photo what it is. Here is my post-production piece.</p>
<p><img class="aligncenter size-large wp-image-8666" alt="Austin, Texas" src="http://technosailor.com/files/lamar-600x395.jpg" width="600" height="395" /></p>
<p>However, what happens with Instagram? I have to scroll to one side or the other or find a happy medium in the middle for this photo.</p>
<p><img class="aligncenter size-large wp-image-8667" alt="Austin, Tx - iPhone" src="http://technosailor.com/files/lamar-iphone-600x450.jpg" width="600" height="450" /></p>
<p>I realize, of course, that many users hate to see black bars across the top of the Instagram photo, as it was the day I posted my photo to Instagram!</p>
<p><a href="http://instagram.com/p/Q2T1pJC_7E/"><img class="aligncenter size-large wp-image-8668" alt="Austin, Tx - Old Instagram" src="http://technosailor.com/files/Screenshot-121812-1046-AM-448x450.png" width="448" height="450" /></a>However, this is the balancing act that Instagram has to consider. While creating a photography app for the masses, the need to keep photographers on board is essential. The new app <em>takes away</em> the artistic prerogative and choice from the artist and puts discretion in the hands of the masses. <strong>Last time I checked, the masses don&#8217;t shoot my photos, edit my photos, make artistic choices about my photos or have the same skills or style that I possess as an artist.</strong></p>
<p>I <strong>choose</strong> what my photos look like. I use Instagram to publish because it has two things: an audience and a distribution vehicle. When I post to Instagram, I push my photos to both Twitter and Facebook. I chose this even with the artistic limitations that it offered <em>before</em> this app update (namely the &#8220;letterbox&#8221; that goes with the photos that don&#8217;t fit into a square format).</p>
<p>One can argue that Instagram had to make a business decision, perhaps inline with the desires of their Facebook overlords. I guess that argument can be made. But removing artistic license abilities of artists who are using the platform is a terrible idea. Imagine if Twitter had said, back in 2007, that they had this platform that could only be used with 140 characters because it was built for use over text message and, since that was their original idea, and the colonial approach to the short message service was the only appropriate way of consumption, then text messages would be the only method of use allowed.</p>
<p>That is, in fact, exactly what Instagram has said indirectly, and what the Next Web article (linked above) advocates. Hey, photography used to be limited to a square format because it was the cheapest way to do it. Yeah&#8230; and then we got 35mm film which opened up a 4:3 ratio. And then we got digital that opened photographers to new technologies to create different formats, styles and use different concepts to create art.</p>
<p>Imagine if all our music sounded exactly the same way as the Beatles did in the 60s. Would there be any evolution to music? Of course not, because every artist would sound exactly the same way, use exactly the same cadence, write lyrics that epiphanize the exact same mindset that existed in the 60s and generally would be boring today &#8211; and I&#8217;m a big Beatles fan!</p>
<p>Returning to a square format is not a bad thing. There are vintage schools of thought in every format of art, fashion, music and culture. But that doesn&#8217;t mean that every artist should be forced to adopt such styles. That makes photography boring and conformist. That&#8217;s not why we do photography!</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://technosailor.com/2012/12/18/for-photographers-instagram-square-photos-are-worse-than-a-tos-update/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Contest: 3 free copies of the WordPress Bible [UPDATE]</title>
		<link>http://technosailor.com/2012/12/12/contest-free-copies-of-the-wordpress-bible/</link>
		<comments>http://technosailor.com/2012/12/12/contest-free-copies-of-the-wordpress-bible/#comments</comments>
		<pubDate>Wed, 12 Dec 2012 06:40:01 +0000</pubDate>
		<dc:creator>Aaron</dc:creator>
				<category><![CDATA[Aaron Brazell]]></category>
		<category><![CDATA[trivia]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[wordpress bible]]></category>
		<category><![CDATA[wpbible]]></category>

		<guid isPermaLink="false">http://technosailor.com/?p=8660</guid>
		<description><![CDATA[Today marked the drop of WordPress 3.5 and I want to celebrate. Tomorrow, I&#8217;m going to give away three autographed copies of the WordPress Bible. You have to be on Twitter. I apologize to those who have chosen to abandon Twitter, or have chosen not to participate, but it is the defacto communications medium of [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Today marked the <a href="http://wordpress.org/news/2012/12/elvin/">drop of WordPress 3.5</a> and I want to celebrate.</p>
<p>Tomorrow, I&#8217;m going to give away three autographed copies of the <a href="http://amzn.to/wpbible2">WordPress Bible</a>. You have to be on Twitter. I apologize to those who have chosen to abandon Twitter, or have chosen not to participate, but it is the defacto communications medium of the 21st century and how I operate.</p>
<p>The book is a mix of advanced and beginner content. Therefore, I will do trivia. Trivia will have a beginner round, an advanced round and an intermediate round. All WordPress oriented. The winner is in my sole discretion and you will be required to provide your mailing address if you are selected.</p>
<p>WordPress core contributors are not allowed to participate in the beginner or intermediate round. If your name is on &#8220;the list&#8221; of 3.5 contributors, you cannot win those rounds. You <em>can</em>, however, participate in the advanced round.</p>
<p>The beginner round will consist of questions surrounding theme and plugin management with possible questions around usability and interface.</p>
<p>The advanced round (the only round open to core contributors) will be based on WordPress APIs, hooks and advanced WordPress development.</p>
<p>The intermediate round will mix both but the developer-oriented questions will be more common and basic and user questions will be more difficult.</p>
<p>You <em>must</em> hashtag your answers with #wpbibletrivia. Failure to do so disqualifies you for an answer.</p>
<p>The first answer I see that is correct is a correct answer. My judgement solely.</p>
<p>There will be 10 questions per round so pay attention.</p>
<p>The beginner round begins at 11am Central Time.</p>
<p>Share this on Facebook, Twitter or whatever your social media channel of choice is. The questions will be asked on my Twitter feed: <a href="http://twitter.com/technosailor">@technosailor</a>.</p>
<p>Good luck!</p>
<p><strong>Update</strong></p>
<p>The winners of the trivia contest were <a href="http://twitter.com/findpurpose">David Peralty</a> for the beginner round, <a href="http://twitter.com/kimparsell">Kim Parsell</a> for the intermediate round and <a href="http://twitter.com/trepmal">Kailey Lampert</a> for the Advance round. Well done, everyone!</p>
]]></content:encoded>
			<wfw:commentRss>http://technosailor.com/2012/12/12/contest-free-copies-of-the-wordpress-bible/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Working With HTML5 Forms</title>
		<link>http://technosailor.com/2012/12/03/working-with-html5-forms/</link>
		<comments>http://technosailor.com/2012/12/03/working-with-html5-forms/#comments</comments>
		<pubDate>Mon, 03 Dec 2012 22:29:18 +0000</pubDate>
		<dc:creator>Aaron</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[form validation]]></category>
		<category><![CDATA[forms]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[web development]]></category>

		<guid isPermaLink="false">http://technosailor.com/?p=8647</guid>
		<description><![CDATA[I&#8217;m going to start a series of tutorials over the next weeks and months about HTML5. A lot of web developers are not leveraging HTML5 for a variety of reasons. We have been so trained over the past decade to embrace XHTML 1.0 that we&#8217;ve avoided the new DOCTYPE as something new that needs to [&#8230;]]]></description>
				<content:encoded><![CDATA[<p><a href="http://technosailor.com/files/html5.png"><img src="http://technosailor.com/files/html5-150x150.png" alt="html5" width="150" height="150" class="alignright size-thumbnail wp-image-8656" /></a>I&#8217;m going to start a series of tutorials over the next weeks and months about HTML5. A lot of web developers are not leveraging HTML5 for a variety of reasons. We have been so trained over the past decade to embrace XHTML 1.0 that we&#8217;ve avoided the new DOCTYPE as something new that needs to be learned.</p>
<p><strong>The good news is, XHTML is still valid in HTML5. The better news is now you have much more fun toys to play with.</strong></p>
<p>Admittedly, I was one of those people who delayed jumping on the HTML5 bandwagon. In the past few months, however, that has changed. This series of articles will hopefully help the web developer to rethink how they develop on the web. Much of the stuff I&#8217;m about to talk about does not require a lot of extra heavy lifting.</p>
<h4>Use the Correct DOCTYPE</h4>
<p>Just as a remedial exercise of laying out the premise, your HTML must have the correct DOCTYPE. In XHTML 1.0/1.1, the first line of the HTML page had to be something along these lines</p>
<p><code class="codecolorer html4strict default"><span class="html4strict"><span style="color: #00bbdd;">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;</span></span></code></p>
<p>That&#8217;s relatively confusing, huh? Makes you want to go drink spoiled milk with lumpy crud in it just because it&#8217;s tasty, right?</p>
<p>To declare a web page as HTML5, you do the same thing you did with the old 1990s era HTML4, before the web embarked on the XHTML idea of doing work. HTML5 is, essentially, a reset to HTML4 with all kinds of additional goodness. You simply start a web document with:</p>
<p><code class="codecolorer html4strict default"><span class="html4strict"><span style="color: #00bbdd;">&lt;!DOCTYPE html&gt;</span></span></code></p>
<p>A lot easier, right? Heck, you can type that in your sleep once you&#8217;ve typed it enough (I know you already do that with your drivers license and credit card numbers).</p>
<h4>Form Field Types</h4>
<p>With all that remedial knowledge in play, let&#8217;s take a look at HTML5 forms. The importance of this might be lost if the only thing you think about, when building HTML pages, are computer browsers. But if you recognize we live in a mobile world, you own an Android or iPhone and have tried to do any kind of form filling on those devices, then you might start to realize the importance of field types.</p>
<p>In XHTML, you might have a form that looks like this:</p>
<div class="codecolorer-container html4strict 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 />17<br /></div></td><td><div class="html4strict codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/form.html"><span style="color: #000000; font-weight: bold;">form</span></a> <span style="color: #000066;">action</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;&quot;</span> <span style="color: #000066;">method</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;post&quot;</span>&gt;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/label.html"><span style="color: #000000; font-weight: bold;">label</span></a> <span style="color: #000066;">for</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;name&quot;</span>&gt;</span>Full Name: <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/input.html"><span style="color: #000000; font-weight: bold;">input</span></a> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text&quot;</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;name&quot;</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;name&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/label.html"><span style="color: #000000; font-weight: bold;">label</span></a>&gt;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/label.html"><span style="color: #000000; font-weight: bold;">label</span></a> <span style="color: #000066;">for</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;phone&quot;</span>&gt;</span>Phone Number: <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/input.html"><span style="color: #000000; font-weight: bold;">input</span></a> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text&quot;</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;phone&quot;</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;phone&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/label.html"><span style="color: #000000; font-weight: bold;">label</span></a>&gt;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/label.html"><span style="color: #000000; font-weight: bold;">label</span></a> <span style="color: #000066;">for</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;email&quot;</span>&gt;</span>Email Address:<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/input.html"><span style="color: #000000; font-weight: bold;">input</span></a> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text&quot;</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;email&quot;</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;email&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/label.html"><span style="color: #000000; font-weight: bold;">label</span></a>&gt;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/label.html"><span style="color: #000000; font-weight: bold;">label</span></a> <span style="color: #000066;">for</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;website&quot;</span>&gt;</span>Web URL:<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/input.html"><span style="color: #000000; font-weight: bold;">input</span></a> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text&quot;</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;website&quot;</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;website&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/label.html"><span style="color: #000000; font-weight: bold;">label</span></a>&gt;</span><br />
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/form.html"><span style="color: #000000; font-weight: bold;">form</span></a>&gt;</span></div></td></tr></tbody></table></div>
<p>In XHTML, we didn&#8217;t have a lot of field types. We had text (which everything above is), hidden, password (*&#8217;s entered in the input), checkboxes and radio buttons. You could add other types of inputs (That don&#8217;t use the <code class="codecolorer html4strict default"><span class="html4strict"><span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/input.html"><span style="color: #000000; font-weight: bold;">input</span></a>&gt;</span></span></code> tag and include <code class="codecolorer html4strict default"><span class="html4strict"><span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/select.html"><span style="color: #000000; font-weight: bold;">select</span></a>&gt;</span></span></code> and <code class="codecolorer html4strict default"><span class="html4strict"><span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/textarea.html"><span style="color: #000000; font-weight: bold;">textarea</span></a>&gt;</span></span></code>.</p>
<p>This works in HTML5 too, but you&#8217;re limited by one default keyboard &#8211; which is fine, but fairly bland and not at all contextual.</p>
<p>What would happen if we changed that form to use different field types? HTML5 support a bunch. The four fields above can more sematically have the following types, in order: text, tel, email, url.</p>
<p>Watch what happens on the iPhone when the HTML looks like this (Android is similar):</p>
<div class="codecolorer-container html4strict 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 />17<br /></div></td><td><div class="html4strict codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/form.html"><span style="color: #000000; font-weight: bold;">form</span></a> <span style="color: #000066;">action</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;&quot;</span> <span style="color: #000066;">method</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;post&quot;</span>&gt;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/label.html"><span style="color: #000000; font-weight: bold;">label</span></a> <span style="color: #000066;">for</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;name&quot;</span>&gt;</span>Full Name: <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/input.html"><span style="color: #000000; font-weight: bold;">input</span></a> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text&quot;</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;name&quot;</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;name&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/label.html"><span style="color: #000000; font-weight: bold;">label</span></a>&gt;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/label.html"><span style="color: #000000; font-weight: bold;">label</span></a> <span style="color: #000066;">for</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;phone&quot;</span>&gt;</span>Phone Number: <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/input.html"><span style="color: #000000; font-weight: bold;">input</span></a> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;tel&quot;</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;phone&quot;</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;phone&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/label.html"><span style="color: #000000; font-weight: bold;">label</span></a>&gt;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/label.html"><span style="color: #000000; font-weight: bold;">label</span></a> <span style="color: #000066;">for</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;email&quot;</span>&gt;</span>Email Address:<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/input.html"><span style="color: #000000; font-weight: bold;">input</span></a> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;email&quot;</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;email&quot;</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;email&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/label.html"><span style="color: #000000; font-weight: bold;">label</span></a>&gt;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/label.html"><span style="color: #000000; font-weight: bold;">label</span></a> <span style="color: #000066;">for</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;website&quot;</span>&gt;</span>Web URL:<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/input.html"><span style="color: #000000; font-weight: bold;">input</span></a> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;url&quot;</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;website&quot;</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;website&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/label.html"><span style="color: #000000; font-weight: bold;">label</span></a>&gt;</span><br />
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/form.html"><span style="color: #000000; font-weight: bold;">form</span></a>&gt;</span></div></td></tr></tbody></table></div>
<p>For a standard text field, your keyboard will look like this:<br />
<div id="attachment_8648" class="wp-caption aligncenter" style="width: 276px"><a href="http://technosailor.com/files/2012-12-03-15.29.15.png"><img src="http://technosailor.com/files/2012-12-03-15.29.15-266x400.png" alt="iOS &quot;text&quot; field" width="266" height="400" class="size-medium wp-image-8648" /></a><p class="wp-caption-text">iOS &#8220;text&#8221; field</p></div><br />
For a phone number, using the <code class="codecolorer html4strict default"><span class="html4strict">tel</span></code> type:<br />
<div id="attachment_8649" class="wp-caption aligncenter" style="width: 276px"><a href="http://technosailor.com/files/2012-12-03-15.29.18.png"><img src="http://technosailor.com/files/2012-12-03-15.29.18-266x400.png" alt="iOS &quot;tel&quot; field" width="266" height="400" class="size-medium wp-image-8649" /></a><p class="wp-caption-text">iOS &#8220;tel&#8221; field</p></div><br />
For an email address, using the <code class="codecolorer html4strict default"><span class="html4strict">email</span></code> type:<br />
<div id="attachment_8650" class="wp-caption aligncenter" style="width: 276px"><a href="http://technosailor.com/files/2012-12-03-15.29.21.png"><img src="http://technosailor.com/files/2012-12-03-15.29.21-266x400.png" alt="iOS &quot;email&quot; field" width="266" height="400" class="size-medium wp-image-8650" /></a><p class="wp-caption-text">iOS &#8220;email&#8221; field</p></div><br />
And for a URL field using the <code class="codecolorer html4strict default"><span class="html4strict">url</span></code> type:<br />
<div id="attachment_8651" class="wp-caption aligncenter" style="width: 276px"><a href="http://technosailor.com/files/2012-12-03-15.29.23.png"><img src="http://technosailor.com/files/2012-12-03-15.29.23-266x400.png" alt="iOS &quot;url&quot; field" width="266" height="400" class="size-medium wp-image-8651" /></a><p class="wp-caption-text">iOS &#8220;url&#8221; field</p></div></p>
<p>There are, of course, other field types that I&#8217;m not going to go into too much here. But to whet your appetite, there is a <code class="codecolorer text default"><span class="text">color</span></code> type that attaches to a color picker. There&#8217;s a <code class="codecolorer text default"><span class="text">date</span></code> type that binds to a date picker. There&#8217;s even a <code class="codecolorer text default"><span class="text">range</span></code> type which binds to a slider picker.</p>
<p><em><strong>Important:</strong> Not all browsers support all types. In the event that a browser does not support a specific type, it falls back to standard <code class="codecolorer text default"><span class="text">text</span></code> type and you can bind other external Javascript to make the same functionality happen.</em></p>
<p><strong>Reference:</strong> <a href="http://www.w3schools.com/html/html5_form_input_types.asp">All HTML5 field types with browser support</a>.</p>
<h4>Form Field Placeholder</h4>
<p>Another useful feature is the placeholder. In XHTML, we might have a form that looks like this:</p>
<div class="codecolorer-container html4strict 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="html4strict codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/form.html"><span style="color: #000000; font-weight: bold;">form</span></a> <span style="color: #000066;">action</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;&quot;</span> <span style="color: #000066;">method</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;post&quot;</span>&gt;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/input.html"><span style="color: #000000; font-weight: bold;">input</span></a> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;search&quot;</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;search&quot;</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;search&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;Search for your term&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span><br />
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/form.html"><span style="color: #000000; font-weight: bold;">form</span></a>&gt;</span></div></td></tr></tbody></table></div>
<p>This would create a simple field that would be pre-populated with &#8220;Search for your term&#8221;. From a usability standpoint, when a user brings that field into focus, the text is supposed to disappear and allow the typing of a search term. If nothing is typed and the focus is switched to a different element, then that phrase should re-appear.</p>
<div id="attachment_8652" class="wp-caption aligncenter" style="width: 276px"><a href="http://technosailor.com/files/2012-12-03-15.45.45.png"><img src="http://technosailor.com/files/2012-12-03-15.45.45-266x400.png" alt="XHTML Placeholder Text" width="266" height="400" class="size-medium wp-image-8652" /></a><p class="wp-caption-text">XHTML Placeholder Text</p></div>
<p>You can&#8217;t do this without a little Javascript help (I like jQuery for this) &#8211; which is outside the scope of this article. But in HTML5, you only have to add <code class="codecolorer html4strict default"><span class="html4strict">placeholder=&quot;Search for your term&quot;</span></code>. Different browsers handle this slightly different, but they all insert some dummy text that can be replaced by the user&#8217;s own input.</p>
<div class="codecolorer-container html4strict 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="html4strict codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/form.html"><span style="color: #000000; font-weight: bold;">form</span></a> <span style="color: #000066;">action</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;&quot;</span> <span style="color: #000066;">method</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;post&quot;</span>&gt;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/input.html"><span style="color: #000000; font-weight: bold;">input</span></a> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text&quot;</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;search&quot;</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;search&quot;</span> placeholder<span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;Search for your term&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span><br />
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/form.html"><span style="color: #000000; font-weight: bold;">form</span></a>&gt;</span></div></td></tr></tbody></table></div>
<div id="attachment_8653" class="wp-caption aligncenter" style="width: 276px"><a href="http://technosailor.com/files/2012-12-03-15.58.39.png"><img src="http://technosailor.com/files/2012-12-03-15.58.39-266x400.png" alt="HTML5 Placeholder Attribute" width="266" height="400" class="size-medium wp-image-8653" /></a><p class="wp-caption-text">On iOS, the Placeholder attribute plays light grey text in the field that is replaced as the user types.</p></div>
<h4>Form Field Validation</h4>
<p>Validation is such a tedious thing for developers. You can do all kinds of ugly things to make sure fields that are required actually have a value or that a field meets a certain criteria (for instance, a zip code field having 5 numeric characters to match the U.S. format).</p>
<p>In terms of requiring a field, it&#8217;s as simple as adding <code class="codecolorer text default"><span class="text">required</span></code> to the input tag. In HTML5, you don&#8217;t have to have an explicit value for an attribute as you do in XHTML. You <em>can</em> if you want, type <code class="codecolorer html4strict default"><span class="html4strict"><span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/input.html"><span style="color: #000000; font-weight: bold;">input</span></a> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text&quot;</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;zip&quot;</span> required<span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;required&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span></span></code> but this is a habit that does not need muscle exercise. Just use:</p>
<div class="codecolorer-container html4strict 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="html4strict codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/form.html"><span style="color: #000000; font-weight: bold;">form</span></a> <span style="color: #000066;">action</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;&quot;</span> <span style="color: #000066;">method</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;post&quot;</span>&gt;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/input.html"><span style="color: #000000; font-weight: bold;">input</span></a> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text&quot;</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;zip&quot;</span> required <span style="color: #66cc66;">/</span>&gt;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/input.html"><span style="color: #000000; font-weight: bold;">input</span></a> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;submit&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span><br />
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/form.html"><span style="color: #000000; font-weight: bold;">form</span></a>&gt;</span></div></td></tr></tbody></table></div>
<p><div id="attachment_8654" class="wp-caption alignleft" style="width: 160px"><a href="http://technosailor.com/files/Screen-Shot-2012-12-03-at-4.16.59-PM.png"><img src="http://technosailor.com/files/Screen-Shot-2012-12-03-at-4.16.59-PM-150x88.png" alt="Firefox &quot;Required&quot; Error Bubble" width="150" height="88" class="size-thumbnail wp-image-8654" /></a><p class="wp-caption-text">Firefox &#8220;Required&#8221; Error Bubble</p></div><div id="attachment_8655" class="wp-caption alignleft" style="width: 238px"><a href="http://technosailor.com/files/Screen-Shot-2012-12-03-at-4.16.40-PM.png"><img src="http://technosailor.com/files/Screen-Shot-2012-12-03-at-4.16.40-PM.png" alt="Chrome &quot;Required&quot; Error Bubble" width="228" height="91" class="size-medium wp-image-8655" /></a><p class="wp-caption-text">Chrome &#8220;Required&#8221; Error Bubble</p></div>Browsers handle this differently but they all pop up a notice if the field isn&#8217;t populated on submission. On the right, you&#8217;ll see how Chrome and Firefox handle this respectively.</p>
<p>Let&#8217;s validate that zip code field, though, because this is where HTML5 really shines.</p>
<p>Using the <code class="codecolorer text default"><span class="text">pattern</span></code> attribute, you can designate a regular expression to match formatting needs. If we want to limit the zip field to 5 numbers (most simplistic example &#8211; it could also have a potential extra dash and 4 numbers too), you might use this HTML:</p>
<div class="codecolorer-container html4strict 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="html4strict codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/form.html"><span style="color: #000000; font-weight: bold;">form</span></a> <span style="color: #000066;">action</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;&quot;</span> <span style="color: #000066;">method</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;post&quot;</span>&gt;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/input.html"><span style="color: #000000; font-weight: bold;">input</span></a> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text&quot;</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;zip&quot;</span> required pattern<span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;\d{5}&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/input.html"><span style="color: #000000; font-weight: bold;">input</span></a> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;submit&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span><br />
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/form.html"><span style="color: #000000; font-weight: bold;">form</span></a>&gt;</span></div></td></tr></tbody></table></div>
<p>You can find a list of helpful regexes at <a href="http://html5pattern.com/">html5pattern.com</a>.</p>
<h4>Summary</h4>
<p>There&#8217;s a lot more we could get into here, but the point of this exercise is to prove that it doesn&#8217;t take much to start using HTML5 in development. Doing so will also push the boundaries of what has been more commonly possible and the barrier to entry is so low that I struggle to find a reason why HTML5 should <em>not</em> be used more commonly.</p>
<p>I&#8217;ll have more of these in the days and weeks to come so stay tuned, subscribe to the <a href="http://technosailor.com/feed">RSS feed</a> and, as always, if you&#8217;re interested in hiring me for a full time gig or contract basis, <a href="http://technosailor.com/work-with-me">please reach out to me</a>. I am actively looking.</p>
]]></content:encoded>
			<wfw:commentRss>http://technosailor.com/2012/12/03/working-with-html5-forms/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>10 Things You Need to Know About WordPress 3.5</title>
		<link>http://technosailor.com/2012/12/03/10-things-you-need-to-know-about-wordpress-3-5/</link>
		<comments>http://technosailor.com/2012/12/03/10-things-you-need-to-know-about-wordpress-3-5/#comments</comments>
		<pubDate>Mon, 03 Dec 2012 13:55:19 +0000</pubDate>
		<dc:creator>Aaron</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[wordpress 3.5]]></category>
		<category><![CDATA[wordpress cheatsheet]]></category>

		<guid isPermaLink="false">http://technosailor.com/?p=8630</guid>
		<description><![CDATA[For 7 years, I've been publishing these articles every time a new version of WordPress comes out. Since version 2.0. It's been a long run. It began as a need to fill people in about new features in WordPress (and there were a lot in <a href="http://wordpress.org/news/2005/12/wp2/">2.0</a>. There wasn't anybody doing these at the time, and certainly WordPress wasn't nearly as popular as it is now (<a href="http://techcrunch.com/2011/08/19/wordpress-now-powers-22-percent-of-new-active-websites-in-the-us/">22% of the internet is powered by WordPress</a>).

But many more people have stepped up in recent releases and have started updating readers with new features and expectations. My job here is done. I'm passing the baton but really the baton has already been passed and I'm happy about that. This will be my final 10 things article. Thank you for sticking around and following along all these years.

On Wednesday (likely), December 5th, WordPress 3.5 will drop with all it's gooey goodness. A <strong>BIG</strong> shoutout needs to go out to <a href="http://nacin.com/">Andrew Nacin</a>, the lead developer on 3.5, for project managing this release while also planning his wedding. And of course, all the other core contributors to this release (I, sadly, am not one this cycle).]]></description>
				<content:encoded><![CDATA[<p>For 7 years, I&#8217;ve been publishing these articles every time a new version of WordPress comes out. Since version 2.0. It&#8217;s been a long run. It began as a need to fill people in about new features in WordPress (and there were a lot in <a href="http://wordpress.org/news/2005/12/wp2/">2.0</a>). There wasn&#8217;t anybody doing these at the time, and certainly WordPress wasn&#8217;t nearly as popular as it is now (<a href="http://techcrunch.com/2011/08/19/wordpress-now-powers-22-percent-of-new-active-websites-in-the-us/">22% of the internet is powered by WordPress</a>).</p>
<p>But many more people have stepped up in recent releases and have started updating readers with new features and expectations. My job here is done. I&#8217;m passing the baton but really the baton has already been passed and I&#8217;m happy about that. This will be my final 10 things article. Thank you for sticking around and following along all these years.</p>
<p>On Wednesday (likely), December 5th, WordPress 3.5 will drop with all it&#8217;s gooey goodness. A <strong>BIG</strong> shoutout needs to go out to <a href="http://nacin.com/">Andrew Nacin</a>, the lead developer on 3.5, for project managing this release while also planning his wedding, and to his best man, core developer <a href="http://darylkoop.com/">Daryl Koopersmith</a> for leading the media efforts. And of course, all the other core contributors to this release (I, sadly, am not one this cycle).</p>
<p>So without further adieu, let&#8217;s get into the guts of 3.5.</p>
<h4>Media Manager</h4>
<p>One of the most anticipated revamps in WordPress history has finally arrived. Since the days of implementing the media upload integration, core developers, users and everyone in between has cried for a new way of managing media. It&#8217;s finally here and it is one of the biggest undertakings in WordPress core development history.</p>
<p>The new media manager in WordPress 3.5 simplifies the process of uploading various media formats (usually, but not limited to, images). Everything is right up front and easy to understand. Instead of having cryptic icons over top of the edit area on a post editing screen, you now have an obvious &#8220;Add Media&#8221; button.</p>
<p>Clicking Add Media brings up a dialog that has a very large, and obvious &#8220;drop zone&#8221; where you can drag and drop files into. This aspect has actually been around for a few versions, but now it&#8217;s a much smoother experience. Of course, you can also click the prominent &#8220;Select Files&#8221; button in the drop zone to pull up a more traditional dialog for selecting those media files and uploading.</p>
<div class="alignright">
<a href='http://technosailor.com/2012/12/03/10-things-you-need-to-know-about-wordpress-3-5/media-manager-1/' title='Upload Files Dialog for the WordPress 3.5 Media Manager'><img width="150" height="70" src="http://technosailor.com/files/Media-Manager-1-150x70.png" class="attachment-thumbnail" alt="Upload Files Dialog for the WordPress 3.5 Media Manager" /></a>
<a href='http://technosailor.com/2012/12/03/10-things-you-need-to-know-about-wordpress-3-5/media-manager-2/' title='Media Manager 2'><img width="150" height="69" src="http://technosailor.com/files/Media-Manager-2-150x69.png" class="attachment-thumbnail" alt="Media Library Dialog for the WordPress 3.5 Media Manager" /></a>
<a href='http://technosailor.com/2012/12/03/10-things-you-need-to-know-about-wordpress-3-5/media-manager-3/' title='Media Manager 3'><img width="150" height="70" src="http://technosailor.com/files/Media-Manager-3-150x70.png" class="attachment-thumbnail" alt="External URL Media Import Dialog for the WordPress 3.5 Media Manager" /></a>
</div>
<p>You can also get a much more intuitive view of your already uploaded media attachment, select any number of photos and insert them into a post or create a gallery. This was all supported before, but the logical workflow makes the process a million times easier.</p>
<p>Also, gone are the days of uploading an image, having to close the media dialog to then re-open it to create a gallery or futz around with details for each image. This was always kludgey before. You could assign an image as a featured image without having to close the dialog, but then inevitably you&#8217;d end up in a situation where the dialog had to be closed to get into another image mode.</p>
<p>I&#8217;m really curious what the reaction to this feature will be.</p>
<h4>Twenty Twelve</h4>
<p><div id="attachment_8637" class="wp-caption alignright" style="width: 521px"><a href="http://technosailor.com/files/Twenty-Twelve.png"><img src="http://technosailor.com/files/Twenty-Twelve-511x450.png" alt="WordPress Twenty Twelve default theme" width="511" height="450" class="size-large wp-image-8637" /></a><p class="wp-caption-text">The front page layout of the new WordPress 3.5 default theme &#8220;Twenty Twelve&#8221;</p></div>Twenty Twelve is the new theme that is coming with 3.5 A few cycles ago, the core team decided to retire the old default &#8220;Kubrick&#8221; theme and release a new standard theme once a year. Twenty Ten came in 2010. Twenty Eleven came in 2011 and, well, obviously, Twenty Twelve is dropping in at the tail end of 2012.</p>
<p>Twenty Twelve is a fun theme. It&#8217;s fully <a href="http://www.lullabot.com/articles/responsive-adaptive-web-design">responsive</a>, so it conforms to different viewport sizes &#8211; monitors, iPads, smart phones, etc. In WordPress 3.4, the Admin got responsive love, and now the default theme gets it as well.</p>
<p>You can actually <a href="http://wordpress.org/extend/themes/twentytwelve">download</a> and install it now, as it is also compatible with WordPress 3.4 and is on the theme repository.</p>
<p>This default theme has better typography, a home page template, various options for columns and widgeted areas and would serve well as a handy theme framework for child themes as well.</p>
<p>In addition, if you haven&#8217;t started leveraging post formats (available since WordPress 3.1), you can do that now with Twenty Twelve. The theme has built in styling defaults the match the sort of thing you&#8217;d expect from <a href="http://codex.wordpress.org/Post_Formats">Post Formats</a> (to me, still one of the most neglected things in WordPress)</p>
<h4>HiDPI &#8220;Retina&#8221; Admin</h4>
<p>For those of you on the retina display bandwagon, both Twenty Twelve and the entire administrative interface are all retina ready. No pixelation on those high-end Macs!</p>
<p>In WordPress 3.4, the first steps were made by providing quite a few retina (or hi-def, if you will &#8211; it will make more sense in a minute why I offer that clarification) icons in the admin. Now, the CSS (specifically for print) also supports this hi-def rendering. If you must print a tree, the print stylesheets will be printing in hi definition.</p>
<p>This also opens up opportunity as browsers and CSS3 continue to advance and provide developers with new tools.</p>
<p>Retina not only gives print versions additional clarity, and those high end Macs more beauty, but it also renders things better for you iPhone 5, iPad 3, Kindle HD and various new Android device users. Rejoice! (but I have an iPhone 4S, so meh!)</p>
<h4>Removing the Links Manager</h4>
<p><div id="attachment_8641" class="wp-caption alignright" style="width: 410px"><a href="http://technosailor.com/files/Links-Manager.png"><img src="http://technosailor.com/files/Links-Manager-400x329.png" alt="Links Manager Removed" width="400" height="329" class="size-medium wp-image-8641" /></a><p class="wp-caption-text">So long, Links Manager, and thanks for all the fish!</p></div>Oh my God. We finally got rid of this antiquated thing!</p>
<p>Remember back in the day when people actually kept blogrolls? And WordPress had this feature in the menu called &#8220;Blogroll&#8221;. And then people started realizing, as possibly one of the earliest turns toward WordPress not being only a blogging tool but also a full-blown Content Management System, that Blogroll just didn&#8217;t seem appropriate (or whatever the thinking was), so <a href="http://core.trac.wordpress.org/ticket/3695">it was renamed to Links</a>.</p>
<p>It&#8217;s now coming out entirely. Existing WordPress install retain the Links manager but <em>new</em> WordPress 3.5 installs no longer have this functionality.</p>
<p>If you still need it, you can install the <a href="http://wordpress.org/extend/plugins/link-manager/">Links Manager</a> as a plugin.</p>
<h4>Favorite Plugins</h4>
<p>As a developer, I am constantly setting up WordPress installs, setting up new WordPress installs, resetting WordPress installs, etc. so perhaps my favorite new feature in WordPress 3.5 is the &#8220;Favorite Plugins&#8221; doohickey. I always have a subset of plugins I use for development and functionality I consider a &#8220;must have&#8221; for a client project, etc.<br />
<div id="attachment_8642" class="wp-caption alignleft" style="width: 410px"><a href="http://technosailor.com/files/Favorite-Plugins.png"><img src="http://technosailor.com/files/Favorite-Plugins-400x161.png" alt="Favorite Plugins can be installed from right in your plugin manager." width="400" height="161" class="size-medium wp-image-8642" /></a><p class="wp-caption-text">Favorite Plugins can be installed from right in your plugin manager.</p></div><br />
If you go to the WordPress plugin repo (and are logged in with your WordPress.org username), you will see a new &#8220;Favorite&#8221; button on every plugin page.</p>
<p>This becomes incredibly useful in WordPress 3.5 where you can now pull down your favorite plugins with one-click install. When you visit the Plugins &gt; Add New admin page, you will see a new &#8220;Quick Link&#8221; along side the &#8220;Upload&#8221;, &#8220;Popular&#8221; and other links that have been there all along. Now you just have a new menu.</p>
<p>This brings up a page where you can enter your WordPress.org username and get a list of all the plugins you&#8217;ve favorited on the plugin repo and install as you need.</p>
<p><em><strong>Protip:</strong> Now you can stop emailing me and asking me what plugins I recommend. Enter <strong>MY</strong> username &#8211; technosailor &#8211; and find out which plugins I prefer.</em></p>
<h4>Tumblr Importer Support</h4>
<p>One of the most popular blog types and platforms in the past few years is Tumblr. Up until now, there hasn&#8217;t been a way to get Tumblr content imported into WordPress. That&#8217;s no longer the case.</p>
<p>On the Settings &gt; Import page, you can now activate Tumblr import support. <strong>Warning:</strong> The process of importing Tumblr is a little kludgey and that is due to Tumblr&#8217;s own systems. You will need to register an app with Tumblr, enter certain key information about your WordPress install into the Tumblr app registration page, and copy certain key information into WordPress.</p>
<p>The instructions are all on the Import admin screen. I suggest opening up the Tumblr app registration page in a separate tab as you&#8217;ll have to go back and forth between Tumblr and WordPress.</p>
<p>Once you do this, you can connect WordPress to your Tumblr blog and slurp in all the data you&#8217;ve had over there. I know y&#8217;all love Tumblr, but this is your opportunity to get off of it and onto a more widely used and customizable platform. Plus, you have <a href="http://codex.wordpress.org/Press_This">Press This</a> in WordPress to allow you to continue your Tumblings.</p>
<h4>Simplified Dashboard</h4>
<p><div id="attachment_8643" class="wp-caption alignright" style="width: 410px"><a href="http://technosailor.com/files/Dashboard.png"><img src="http://technosailor.com/files/Dashboard-400x141.png" alt="Simplified Dashboard" width="400" height="141" class="size-medium wp-image-8643" /></a><p class="wp-caption-text">Simplified Dashboard</p></div>The Dashboard has always been a bit of a sore spot for new users unfamiliar with WordPress. What is all this information? Unfortunately, that&#8217;s not going away quite yet. However, WordPress now makes it easier for users to get up to speed with common things like writing an about page, setting up a theme, etc.</p>
<p>In addition to Dashboard fixes, there have been a number of smaller UI changes in the admin, including the Privacy page being removed and merged into the Reading Settings pages. Lots of effort was put into a simpler user experience.</p>
<p>It&#8217;s the little things that help users get up to speed and using WordPress quickly and effectively and reduces the learning curve.</p>
<h4>Multisite: switch_to_blog() performance problems fixed</h4>
<p>There are a couple of Multisite improvements for developers. For the longest time, well before the merge of WPMU into WordPress, the way developers could switch &#8220;context&#8221; from one site to another would be through <code class="codecolorer php default"><span class="php">switch_to_blog<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span></span></code>. Even after the merge, that function still remained the way to do it. But it has always come at the price of performance and caching. It was an extremely expensive function to use, filled with unnecessary database queries and other fudge.</p>
<p>It left developers looking for ways to accomplish the same task in a different way &#8211; which is really not the WordPress way. We encourage developers to use the tools WordPress provides and not to try to get around them. This mentality is almost universal and prevents problems with backwards compatibility in the case of database schema changes, etc. However, this beast had never been tamed for this specific functionality.</p>
<p>As of WordPress 3.5, this function has now been refactored and performs significantly better than what it did, including massive caching changes. Developers should feel far more comfortable using it. Hooray!</p>
<h4>Multisite: Sub Directory</h4>
<p>Another Multisite improvement is the ability to install WordPress Multisite in a folder. Up until now, WordPress Multisite could not be installed in a subdirectory. <em>It had to be installed in the document root</em> which was&#8230; silly.<br />
In WordPress 3.5, a lot of work was put into making it possible to do just that. Specifically, this came out of Hack Day at WordCamp San Francisco in August. Nice work <a href="http://markjaquith.wordpress.com">Mark Jaquith</a> and company.</p>
<h4>WP_Query Enhancement</h4>
<p>One final developer tool that was added in WordPress 3.5 is a modification to the <code class="codecolorer text default"><span class="text">post__in</span></code> argument that can be passed to <code class="codecolorer text default"><span class="text">WP_Query</span></code> to affect what posts are pulled in a custom query/Loop. While <code class="codecolorer text default"><span class="text">post__in</span></code> has been around awhile, and takes a comma separated list of post IDs to be retrieved, now, if the <code class="codecolorer text default"><span class="text">orderby</span></code> parameter is set to <code class="codecolorer text default"><span class="text">post__in</span></code>, the <em>order</em> of the IDs matter. Specifically, the order of the IDs in <code class="codecolorer text default"><span class="text">post__in</span></code> is the order they are retrieved in the resulting dataset. Before they were simply ordered in numerical order (or whichever custom order parameter was supplied &#8211; post_name, post_title, etc) .</p>
<p>This is pretty effective for CMS-style usage of WordPress where a developer may want to have granular control of how specific content pages are listed, displayed, etc.</p>
<h4>Summary</h4>
<p>So that&#8217;s it! Nice big release. A lot of under the hood stuff for developers, but really this release is less of a developer&#8217;s release and more of a user experience release. When WordPress 3.5 drops on Wednesday (assuming that happens as expected), I&#8217;d love to hear feedback.</p>
<p>Thanks for reading all these years. I&#8217;m not disappearing. I&#8217;m just retiring from this column. Of course, I&#8217;m always looking for full-time or consulting work. Please feel free to <a href="http://technosailor.com/work-with-me/" title="Work with Me">contact me</a> if you think we might be able to work together.</p>
<p>Until then&#8230;<br />
<div id="attachment_8644" class="wp-caption aligncenter" style="width: 760px"><a href="http://technosailor.com/files/lolcatef3af570d1b493309a325652cca15cfef16123a9.jpg"><img src="http://technosailor.com/files/lolcatef3af570d1b493309a325652cca15cfef16123a9.jpg" alt="So long and thanks for all the fish" width="750" height="563" class="size-full wp-image-8644" /></a><p class="wp-caption-text">Original Photo by <a href="http://www.flickr.com/photos/starrarte/3236901581/">Starrarte</a> Used under Creative Commons.</p></div></p>
]]></content:encoded>
			<wfw:commentRss>http://technosailor.com/2012/12/03/10-things-you-need-to-know-about-wordpress-3-5/feed/</wfw:commentRss>
		<slash:comments>42</slash:comments>
		</item>
		<item>
		<title>HOLIDAY WORDPRESS DEAL: 30 Minute WordPress Consultation</title>
		<link>http://technosailor.com/2012/11/23/black-friday-deal-30-minute-wordpress-consultation/</link>
		<comments>http://technosailor.com/2012/11/23/black-friday-deal-30-minute-wordpress-consultation/#comments</comments>
		<pubDate>Fri, 23 Nov 2012 16:37:47 +0000</pubDate>
		<dc:creator>Aaron</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[black friday]]></category>
		<category><![CDATA[consulting]]></category>
		<category><![CDATA[holidays]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://technosailor.com/?p=8627</guid>
		<description><![CDATA[As the holidays kick into full gear, and people start looking at a short sprint to gift times with family, I am offering a 30 minute phone consultation related to WordPress for $100. This is a great thing for someone who needs to figure out how to do something that may be unfamiliar for them [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>As the holidays kick into full gear, and people start looking at a short sprint to gift times with family, I am offering a 30 minute phone consultation related to WordPress for $100. This is a great thing for someone who needs to figure out how to do something that may be unfamiliar for them or if they are just getting setup with WordPress and need plugin recommendations, or the like.</p>
<p>To setup your 30 minute appointment or to inquire about gifting that appointment, <a href="http://technosailor.com/work-with-me/">fill out this form</a>. For the description, just reference this deal.</p>
<p>For longer term commitments or consulting engagements, including custom plugin development, I am booking clients for Dec and Jan, so feel free to ask about those opportunities as well.</p>
<p><del datetime="2012-11-24T14:55:22+00:00">This offer is only good today, Friday Nov 23, 2012 until midnight Central Time.</del></p>
<p>This offer is good through Midnight, Monday, November 26, 2012 &#8211; Cyber Monday.</p>
]]></content:encoded>
			<wfw:commentRss>http://technosailor.com/2012/11/23/black-friday-deal-30-minute-wordpress-consultation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>What Makes a Community?</title>
		<link>http://technosailor.com/2012/11/16/what-makes-a-community/</link>
		<comments>http://technosailor.com/2012/11/16/what-makes-a-community/#comments</comments>
		<pubDate>Fri, 16 Nov 2012 17:18:57 +0000</pubDate>
		<dc:creator>Aaron</dc:creator>
				<category><![CDATA[Community]]></category>
		<category><![CDATA[angel funding]]></category>
		<category><![CDATA[atx startup crawl]]></category>
		<category><![CDATA[austin]]></category>
		<category><![CDATA[baltimore]]></category>
		<category><![CDATA[bootstrapping]]></category>
		<category><![CDATA[community]]></category>
		<category><![CDATA[entrepreneurship]]></category>
		<category><![CDATA[josh baer]]></category>
		<category><![CDATA[vc]]></category>

		<guid isPermaLink="false">http://technosailor.com/?p=8626</guid>
		<description><![CDATA[I normally write articles that carry a bit of authority. I usually write what I know about and have a high degree of confidence writing. I don&#8217;t write often because I want what I do write to carry authority and be hard-hitting. This is not really one of those articles. I haven&#8217;t done what people [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>I normally write articles that carry a bit of authority. I usually write what I know about and have a high degree of confidence writing. I don&#8217;t write often because I want what I <em>do</em> write to carry authority and be hard-hitting.</p>
<p>This is not really one of those articles.</p>
<p>I haven&#8217;t done what people like <a href="http://alexhillman.com/">Alex Hillman</a> has done in creating collaborative working environments for independent entrepreneurs at <a href="http://indyhall.org">Independent&#8217;s Hall</a> in Philadelphia.</p>
<p>I haven&#8217;t been an organizer and champion of city-wide entrepreneurship like <a href="http://joshuabaer.com/">Josh Baer</a> has in Austin.</p>
<p>I haven&#8217;t fostered a product community like they have over at <a href="http://studiopress.com">StudioPress</a> with the <a href="http://my.studiopress.com/themes/genesis/">Genesis Framework</a>.</p>
<p>What I have done is work within the context of a thriving WordPress community of developers, users, consultants and advocates.</p>
<p>I have lived in a city that has made it&#8217;s name on entrepreneurship and arts in Austin.</p>
<p>I have helped and supported entrepreneurs in their quest to build products in DC and find ways of succeeding both with and without investment money.</p>
<h3>Moving Back to Baltimore</h3>
<p>For some weeks now, I&#8217;ve made it clear that I&#8217;ve decided to move back from Austin to Baltimore. In 2008, I left Baltimore because I saw awesome things developing in technology in DC. At the time, there were guys like Peter Corbett who was just beginning to do technology advocacy work in the Nation&#8217;s Capital. By 2009, <a href="http://istrategylabs.com">iStrategyLabs</a> would launch the first Apps for Democracy contest that challenged contestants to create web and mobile applications with civic intent. That would morph into similar contest like Apps for America, etc.</p>
<p>You would also see some organizations that would flare out dramatically because of business model, ideas, weak leadership, lack of community involvement, etc.</p>
<p>I would then move to Austin where I would see a city immersed in technology. Lots of money flowing. Lots of incubator action, such as the products and entrepreneurs who would be graduated from the <a href="http://capitalfactory.com">Capital Factory</a> incubator. I would see <a href="https://twitter.com/atxstartupcrawl">ATX Startup Crawl</a> occur several times a year as guests would have the opportunity to move around town and visit some of the great startups like <a href="http://tabbedout.com">TabbedOut</a>, <a href="http://infochimps.org">InfoChimps</a>, <a href="http://uship.com">uShip</a> and more. Thousands of people would come through these offices and see the great technologies and ideas being built, all while enjoying local Texas beers and eats.</p>
<p>I would see awesome projects like <a href="http://weareaustintech.com">We Are Austin Tech</a> highlight influencers in that community (including <a href="http://www.weareaustintech.com/aaron-brazell">myself</a>) come up.</p>
<p>And I watched Baltimore grow as a technology community to the point where DC entrepreneurs started paying attention to their up and coming little brother 45 mins up I-95. I watched from afar as <a href="http://410labs.com">Dave Troy</a> would put his heart and soul into building Baltimore as a center of entrepreneurship and tech. I&#8217;d watch as Greg Cangialosi would build his <a href="http://blueskyfactory.com">Blue Sky Factory</a> marketing firm out and have a successful acquisition, all while continuing to personally invest more in the Baltimore scene.</p>
<p>I even watched great tragedies like the systematic destruction of Advertising.com by Aol.</p>
<p>I watched this all over the last 4 years and realized Baltimore was coming into it&#8217;s own. It had successes. It had failures. It had investors. It had bootstrap. It&#8217;s still not entirely cohesive, but from my seat, it looks promising.</p>
<p>So I&#8217;ve decided to move back to my home and put my money where my mouth is and see if I can take what I&#8217;ve gleaned from DC and Austin and apply it here in Baltimore. I may be one of those failures. Or I may not be, but I&#8217;ve got to try.</p>
<h3>What Makes a Successful Community?</h3>
<p>In the last few weeks, I&#8217;ve had several conversations with Baltimore business owners and entrepreneurs, and I&#8217;m finding a common question and point of discussion: What makes a successful community? The answers and opinions are intriguing. Again, I can&#8217;t say my opinion carries any authority. What I can say, however, is I&#8217;ve been in a bunch of communities and witnessed elements of success.</p>
<p>Some folks think a successful business community requires investors who are willing to commit their time and money. Anyone who has gone through the fundraising process knows that hands on investors are the best kind. If a VC or Angel investor can help a portfolio company supplement resources (human capital or otherwise) through their network, they bring quite a bit of upside to a startup. Investors who wire money and never pay attention to their portfolio companies, expecting the founders to execute according to plan, are in my opinion bad investors.</p>
<p>So in this light, some entrepreneurs here in Baltimore find the lack of investment money or engaged investors as detrimental to the community.</p>
<p>On the flip side of the coin, some entrepreneurs seem to be thinking that the mark of a good startup community is going to be in the number of entrepreneurs who are able to successfully bootstrap. There is some validity to this claim as well. The more you can do on your own, the less of your company you&#8217;re giving away (as I noted in the &#8220;Valleyboys&#8221; segment of <a href="http://technosailor.com/2012/08/21/five-articles-i-wish-i-could-take-back/">this article</a> a few weeks ago).</p>
<p>However, there is also value in bootstrapping <em>and</em> taking money, if the situation is right.</p>
<p>Other folks I&#8217;ve talked to feels the value is in the number of people attend professional meetups compounded by the sheer number of meetups. In Austin, we have a vibrant meetup community. From the <a href="http://www.meetup.com/austinwordpress/">Austin WordPress</a> meetup to <a href="http://austinonrails.org/">Austin on Rails</a> to <a href="http://www.meetup.com/Austin-Lean-Startup-Circle/">Austin Lean Startup</a> to <a href="http://www.refreshaustin.org/">Refresh Austin</a> and the list goes on.</p>
<p>My opinion is that a city startup community is built on all these things. It&#8217;s not money, really. Money will follow success. Perhaps Baltimore needs to have an IPO or high profile acquisition <em>that allows the company to continue to operate and hire in Baltimore</em> to put them on the map and in the conversation. I don&#8217;t really think it&#8217;s that, per se, but that certainly helps.</p>
<p>It would help if the State of Maryland was more business-friendly to small businesses, as Texas is. People come to Texas, and more specifically Austin, from California and New York because the environment is notably friendly to small business. More business would be created in Maryland with better business policy. It might even attract out of state growth.</p>
<p>Beyond that though, meetups are important but meetups don&#8217;t create value if the conversations end at the meetup. The idea of building something &#8211; a prototype &#8211; as you might get out of a Startup Weekend is good&#8230; if it continues afterwards from prototype to business product.</p>
<p>But I think the biggest thing that makes community grow is collaboration and the willing to share ideas without being defensive, sharing resources without being possessive, sharing physical space without being prohibitive. It takes more that an entrepreneurs flying solo behind his Macbook Pro in a coffee shop, but it takes less than structured office space with prohibitive managerial org charts.</p>
<p>It doesn&#8217;t take sacrificing lifestyle on the altar of work, but it does take entrepreneurs willing to gut out ideas by working with other entrepreneurs and customers and transparently sharing war stories of success and failure while helping to mentor others new to the space.</p>
<p>It does takes the karmaic &#8220;pay it forward&#8221; approach without fiefdoms and regional rivalries to ensure that a rising tide raises all ships. What you put in to other companies you have no direct stake in, but can help with informal advice (when solicited) makes for a circle of life that encourages a community to exceed expectations and move from one level to the next. Mentorship is not an ROI term, but it is critical to the ecosystem.</p>
<p>Am I off-base in my thinking here?</p>
]]></content:encoded>
			<wfw:commentRss>http://technosailor.com/2012/11/16/what-makes-a-community/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>The Science of Radio, Cal Ripken, Jr. and Pivots</title>
		<link>http://technosailor.com/2012/10/26/the-science-of-radio-cal-ripken-jr-and-pivots/</link>
		<comments>http://technosailor.com/2012/10/26/the-science-of-radio-cal-ripken-jr-and-pivots/#comments</comments>
		<pubDate>Fri, 26 Oct 2012 19:05:28 +0000</pubDate>
		<dc:creator>Aaron</dc:creator>
				<category><![CDATA[Rules for Entrepreneurs]]></category>
		<category><![CDATA[am radio]]></category>
		<category><![CDATA[cal ripken]]></category>
		<category><![CDATA[entrepreneurship]]></category>
		<category><![CDATA[eric ries]]></category>
		<category><![CDATA[fm radio]]></category>
		<category><![CDATA[jason cohen]]></category>
		<category><![CDATA[lean startup]]></category>
		<category><![CDATA[orioles]]></category>
		<category><![CDATA[pivot]]></category>
		<category><![CDATA[radio waves]]></category>
		<category><![CDATA[science]]></category>

		<guid isPermaLink="false">http://technosailor.com/?p=8621</guid>
		<description><![CDATA[Let&#8217;s talk science. We all occasionally listen to the radio. Maybe not as much as we once did, but we still do. Most of us listen to FM radio because the sound quality is better and, as a result, music is more often the stuff broadcast over FM stations. Probably fewer of us listen to [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Let&#8217;s talk science.</p>
<p>We all occasionally listen to the radio. Maybe not as much as we once did, but we still do. Most of us listen to FM radio because the sound quality is better and, as a result, music is more often the stuff broadcast over FM stations. Probably fewer of us listen to AM radio, short of talk news and sports talk stuff.</p>
<p>The difference between AM and FM is radical. FM radio waves, if you could visualize them are your typical sine wave. It modulates between a high and a low frequency and travels through the air like the waves of a sea. FM radio has better sound because this modulation can carry more aural information.</p>
<p>AM radio is far different. It&#8217;s much more a straight line wave that can&#8217;t carry as much aural data, so the sound quality is reduced. The tradeoff, however, is that AM radio can travel much farther. In fact, for AM radio, range is determined by amplitude, or strength, of the power generating the waves. </p>
<p>The side effect of this is that AM radio waves travel into the atmosphere and interacts with the ionosphere, the atmospheric layer that protects us from the most harmful radiation from the sun. During the daytime, the AM waves hit the ionosphere and largely fizzle out due to the layer&#8217;s interaction with the sun, but at night&#8230; the sun isn&#8217;t sending all it&#8217;s fiery goodness at that part of the earth and so a bounce effect happens. AM radio waves hit the ionosphere and bounces back toward the earth allowing radio stations to be heard hundreds of miles away from their source &#8211; often times well over the horizon.</p>
<p>As a result, the FCC has had a decades-old regulation that requires AM radio stations to reduce their signal or alter their night operations so as not to interfere with stations in other markets. Stations typically will do this by redirecting their antennas so that even if the signal is heard hundreds of miles away, it is heard in such a way to not interfere with other stations broadcasting on the same frequency.</p>
<p>Still with me? Whew. Good.</p>
<p><img src="http://technosailor.com/wp-content/uploads/cal-ripken.jpeg" alt="" title="cal-ripken" width="320" height="197" class="alignright size-full wp-image-8622" />Back in 1995, I was sitting in a dorm room of a religious college I was attending at the time. There were pretty rigid rules for freshman. In my case, we were required to do a nightly &#8220;study time&#8221; in our dorms. The idea was to train students to focus academically. In later classes, the rules were relaxed and study time was not mandatory.</p>
<p>Still, you know how I am with rules. I sullenly sat in my room night after night and probably didn&#8217;t do the best job academically. I digress.</p>
<p>September 6, 1995 was kind of a historic day. Besides being my 19th birthday, it was also a big baseball day. It would be this day that Cal Ripken, Jr. would break Lou Gehrig&#8217;s consecutive game streak setting a new record of 2,131 games played in a row and becoming the new Ironman. Back in those days, before <a href="http://www.washingtonpost.com/wp-srv/sports/orioles/longterm/memories/davey/articles/poorcomm.htm">the 1997 debacle</a>, I was an Orioles fan before changing allegiances to a <a href="http://redsox.com">much better team</a> (sans this past year). I&#8217;m looking at you, <a href="http://twitter.com/k8monstergib">Kate</a>.</p>
<p>I grew up with the Orioles and I was understandably upset that I had to be in my room instead of watching the game on TV. I discovered, however, that I could hear <a href="http://wbal.com">WBAL 1090 AM</a> in my dorm 17 miles south of Rochester, NY and some 300 miles away from Television Hill in Baltimore, where the station broadcast from. As a result, I was able to listen to that historic game on the radio thanks to science.</p>
<p>What&#8217;s the point of this already long-winded story, you may ask.</p>
<p>I&#8217;m glad you asked, since I actually <em>do</em> have a point.</p>
<p>I&#8217;ve talked about business a lot here. Startups, projects, whatever. I&#8217;ve been involved in a few in my career. I&#8217;ve advised several. I&#8217;ve been a Co-founder in one. I&#8217;ve been staff for others. There&#8217;s a concept in startups called the &#8220;pivot&#8221;. Pivots are when you change your business model or approach due to market demands or user feedback.</p>
<p>In some cases, pivots are major. <a href="http://seesmic.com">Seesmic</a> pivoted a ton from a video chat service to a video blog comment service to a social mass posting service. Every pivot was essentially a new company.</p>
<p>Other pivots are more minor. A move to focus more on user content aggregation from a company content aggregation. Or a move to a subscription model from an advertising model.</p>
<p>I&#8217;m a fan of the second form of pivot which basically suggests the premise of a company is sound, but based on the ability to listen to user demand and appropriately respond in the marketplace, a company can adjust and tweak and run with the concept that made them strong as a company to begin with. If I were to start investing myself, I&#8217;d want to be on board with a company that can stay true to itself, while demonstrating the ability to adjust.</p>
<p>Some people, like <a href="http://blog.asmartbear.com">Jason</a>, advocate <a href="http://mixergy.com/jason-cohen-centerfield-interview/">doing market research</a> to decide your premise. Ask questions. Conduct interviews. Find out, before putting time in, that the idea is something that someone will pay for. Others, like Eric Ries, also endorse <a href="http://www.amazon.com/gp/product/0307887898/ref=as_li_ss_tl?ie=UTF8&#038;camp=1789&#038;creative=390957&#038;creativeASIN=0307887898&#038;linkCode=as2&#038;tag=emmensetechno-20">The Lean Startup</a><img src="http://www.assoc-amazon.com/e/ir?t=emmensetechno-20&#038;l=as2&#038;o=1&#038;a=0307887898" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /> approach of building, collecting feedback, iterating and repeating to allow a company to evolve organically. These are all good ideas that help set the framework and paradigm for how your company operates and your product evolves.</p>
<p>Which brings us full circle to radio. I was able to listen to Cal&#8217;s historic day in 1995 because the company (or radio station in this case) was able to perform a pivot (literally) to redirect their signal without changing who they were. They knew FCC regulations when they decided to broadcast on AM. They knew the framework of science they had to live in. They built a radio station for reach and strength and adapted as they were required to and allowed to.</p>
<p>You may never start a company. You may never hire employees. But the universal concept is: Know what you&#8217;re doing, why you&#8217;re doing it, don&#8217;t change who you are or the strategic philosophy under which you operate, but be willing to make the tactical choices needed to succeed.</p>
]]></content:encoded>
			<wfw:commentRss>http://technosailor.com/2012/10/26/the-science-of-radio-cal-ripken-jr-and-pivots/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Most Commonly Used Git Commands</title>
		<link>http://technosailor.com/2012/10/02/most-commonly-used-git-commands/</link>
		<comments>http://technosailor.com/2012/10/02/most-commonly-used-git-commands/#comments</comments>
		<pubDate>Tue, 02 Oct 2012 16:57:12 +0000</pubDate>
		<dc:creator>Aaron</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[svn]]></category>
		<category><![CDATA[version control]]></category>

		<guid isPermaLink="false">http://technosailor.com/?p=8616</guid>
		<description><![CDATA[A lot of chatter about using Git and Subversion from the command line versus clients. Folks, take your time and learn the command lines. There&#8217;s a lot of stuff you can use the UI clients don&#8217;t always wrap into UI. Things like post-commit hooks, etc make the command line way more pure and powerful. Here&#8217;s [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>A lot of chatter about using Git and Subversion from the command line versus clients. Folks, take your time and learn the command lines. There&#8217;s a lot of stuff you can use the UI clients don&#8217;t always wrap into UI. Things like post-commit hooks, etc make the command line way more pure and powerful.</p>
<p>Here&#8217;s the same list for <a href="http://technosailor.com/2012/10/02/most-commonly-used-subversion-commands/">Subversion</a>.</p>
<p>But for Git/Github, you can get most of what you need out of <code class="codecolorer text default"><span class="text">git clone</span></code>, <code class="codecolorer text default"><span class="text">git commit</span></code>, <code class="codecolorer text default"><span class="text">git push</span></code>, <code class="codecolorer text default"><span class="text">git pull</span></code>, <code class="codecolorer text default"><span class="text">git status</span></code>, <code class="codecolorer text default"><span class="text">git diff</span></code> and <code class="codecolorer text default"><span class="text">git merge</span></code>.</p>
<p>Learn these and you won&#8217;t know everything about git, but you&#8217;ll be most of the way there.</p>
]]></content:encoded>
			<wfw:commentRss>http://technosailor.com/2012/10/02/most-commonly-used-git-commands/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Most Commonly Used Subversion Commands</title>
		<link>http://technosailor.com/2012/10/02/most-commonly-used-subversion-commands/</link>
		<comments>http://technosailor.com/2012/10/02/most-commonly-used-subversion-commands/#comments</comments>
		<pubDate>Tue, 02 Oct 2012 16:56:38 +0000</pubDate>
		<dc:creator>Aaron</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[svn]]></category>
		<category><![CDATA[version control]]></category>

		<guid isPermaLink="false">http://technosailor.com/?p=8617</guid>
		<description><![CDATA[A lot of chatter about using Git and Subversion from the command line versus clients. Folks, take your time and learn the command lines. There&#8217;s a lot of stuff you can use the UI clients don&#8217;t always wrap into UI. Things like post-commit hooks, etc make the command line way more pure and powerful. Here&#8217;s [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>A lot of chatter about using Git and Subversion from the command line versus clients. Folks, take your time and learn the command lines. There&#8217;s a lot of stuff you can use the UI clients don&#8217;t always wrap into UI. Things like post-commit hooks, etc make the command line way more pure and powerful.</p>
<p>Here&#8217;s the same list for <a href="http://technosailor.com/2012/10/02/most-commonly-used-git-commands/">Git/Github</a>.</p>
<p>But for Subversion, you can get most of what you need out of <code class="codecolorer text default"><span class="text">svn co</span></code>, <code class="codecolorer text default"><span class="text">svn ci</span></code>, <code class="codecolorer text default"><span class="text">svn commit</span></code>, <code class="codecolorer text default"><span class="text">svn diff</span></code>, and <code class="codecolorer text default"><span class="text">svn status</span></code>.</p>
<p>Learn these and you won&#8217;t know everything about svn, but you&#8217;ll be most of the way there.</p>
]]></content:encoded>
			<wfw:commentRss>http://technosailor.com/2012/10/02/most-commonly-used-subversion-commands/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>TUTORIAL: Building Custom Rewrite Endpoints in WordPress</title>
		<link>http://technosailor.com/2012/09/10/tutorial-building-custom-rewrite-endpoints-in-wordpress/</link>
		<comments>http://technosailor.com/2012/09/10/tutorial-building-custom-rewrite-endpoints-in-wordpress/#comments</comments>
		<pubDate>Mon, 10 Sep 2012 19:49:15 +0000</pubDate>
		<dc:creator>Aaron</dc:creator>
				<category><![CDATA[Aaron Brazell]]></category>
		<category><![CDATA[rewrites]]></category>
		<category><![CDATA[tutorials]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[wordpress api]]></category>
		<category><![CDATA[wordpress plugin development]]></category>

		<guid isPermaLink="false">http://technosailor.com/?p=8607</guid>
		<description><![CDATA[Recently I concluded a sizable project that involved deep integration with an external API. I was responsible for creating content pages based outside of WordPress. To be clear, the pages would use an internal WP template, but all the content was generated using this external API. In order to make this work within the WordPress Rewrite system [&#8230;]]]></description>
				<content:encoded><![CDATA[<p><img src="http://technosailor.com/files/rewrites.jpg" alt="" title="rewrites" width="717" height="562" class="aligncenter size-full wp-image-8608" />Recently I concluded a sizable project that involved deep integration with an external API. I was responsible for creating content pages based outside of WordPress. To be clear, the pages would use an internal WP template, but all the content was generated using this external API.</p>
<p>In order to make this work within the WordPress Rewrite system and serve pages that WordPress knew how to handle in a non-traditional way, I had to tackle this in a multi-prong way: using the <code class="codecolorer text default"><span class="text">template_redirect</span></code> as well as the built in <a href="http://codex.wordpress.org/Rewrite_API">Rewrite API</a>.</p>
<p><em>Note: I&#8217;m not giving away the full sauce here as the project is non-open source. As well, I&#8217;ll be abstracting some stuff a bit. If you&#8217;re smart, you can fill in all the blanks regarding how to fully implement this.</em></p>
<p>First we need a base 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 /></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 />
<br />
<span style="color: #000000; font-weight: bold;">class</span> Base_Class <span style="color: #009900;">&#123;</span><br />
<br />
&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> <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 />
&nbsp; <span style="color: #009900;">&#125;</span><br />
<br />
&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> <span style="color: #009900;">&#123;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #000000; font-weight: bold;">new</span> Base_Class<span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>This is the base of pretty much every class I write as part of a plugin in WordPress. If you don&#8217;t follow Object Oriented coding practices, start now.</p>
<p>The next step is to register some variables with WordPress. Because WordPress is using the <code class="codecolorer text default"><span class="text">template_redirect</span></code> hook to get the proper template files, you will often lose necessary query string variables, and you definitely can&#8217;t use them in an endpoint (i.e. <code class="codecolorer text default"><span class="text">/foo/bar</span></code>) without WordPress knowing about them. </p>
<p>So let&#8217;s register them using the <code class="codecolorer text default"><span class="text">query_vars</span></code> filter.</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 />17<br />18<br />19<br />20<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> Base_Class <span style="color: #009900;">&#123;</span><br />
<br />
&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> <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 />
&nbsp; <span style="color: #009900;">&#125;</span><br />
<br />
&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> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; add_filter<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'query_vars'</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;">'query_vars'</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><br />
<br />
&nbsp; <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> query_vars<span style="color: #009900;">&#40;</span> <span style="color: #000088;">$qv</span> <span style="color: #009900;">&#41;</span><br />
&nbsp; <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000088;">$qv</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'foo'</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #000088;">$qv</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'bar'</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">return</span> <span style="color: #000088;">$qv</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #000000; font-weight: bold;">new</span> Base_Class<span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>After this, we want to actually create some rewrite endpoints. In this example, I want to allow permalinks like <code class="codecolorer text default"><span class="text">/foo/content-slug/</span></code> and <code class="codecolorer text default"><span class="text">/bar/content-slug</span></code>. With the following code that adds a <code class="codecolorer text default"><span class="text">rewrites()</span></code> method to the class, and hooks on the <code class="codecolorer text default"><span class="text">generate_rewrite_rules</span></code> filter, we can create these two endpoints. In our imaginary template, we would use <code class="codecolorer php default"><span class="php">get_query_var<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span></span></code> function to handle logic for display purposes, but that&#8217;s outside of this article scope.</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 />31<br />32<br />33<br />34<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> Base_Class <span style="color: #009900;">&#123;</span><br />
<br />
&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> <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 />
&nbsp; <span style="color: #009900;">&#125;</span><br />
<br />
&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> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; add_filter<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'query_vars'</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;">'query_vars'</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; add_filter<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'generate_rewrite_rules'</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;">'rewrites'</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><br />
<br />
&nbsp; <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> query_vars<span style="color: #009900;">&#40;</span> <span style="color: #000088;">$qv</span> <span style="color: #009900;">&#41;</span><br />
&nbsp; <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000088;">$qv</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'foo'</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #000088;">$qv</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'bar'</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">return</span> <span style="color: #000088;">$qv</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><br />
<br />
&nbsp; <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> rewrites<span style="color: #009900;">&#40;</span> <span style="color: #000088;">$rules</span> <span style="color: #009900;">&#41;</span><br />
&nbsp; <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">global</span> <span style="color: #000088;">$wp_rewrite</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #000088;">$new_rules</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; &nbsp; &nbsp; <span style="color: #0000ff;">'foo/([a-z]+)/?$'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'index.php?pagename=wppage-holder&amp;foo='</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$wp_rewrite</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">preg_index</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">'bar/([a-z]+)/?$'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'index.php?pagename=wppage-holder&amp;bar='</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$wp_rewrite</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">preg_index</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #000088;">$wp_rewrite</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">rules</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$new_rules</span> <span style="color: #339933;">+</span> <span style="color: #000088;">$wp_rewrite</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">rules</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">return</span> <span style="color: #000088;">$wp_rewrite</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">rules</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #000000; font-weight: bold;">new</span> Base_Class<span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>Specifically, note the new rewrite rules and how they are structured. If those permalink structures identified above match these new rules, then we will pass the request on and use the template file designated for a page (that you do have to create in WordPress, by the way) with the slug &#8216;wppage-holder&#8217;. This can be done by designating a template file on the page edit screen or by naming the template as page-wppage-holder.php in your theme &#8211; again, outside the scope of this article.</p>
<p>If the permalink matches foo, we pass the foo variable on. If it matches bar, we pass the bar variable on. Logic on the other end left to you.</p>
<p>This is where I have to stop using this example, for client confidentiality purposes, but imagine what is possible now if you extend this and use the <code class="codecolorer text default"><span class="text">template_redirect</span></code> hook to handle some custom redirects leveraging <a href="http://codex.wordpress.org/Function_Reference/wp_redirect"><code class="codecolorer php default"><span class="php">wp_redirect<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span></span></code></a>?</p>
<p>Imagine. :)</p>
]]></content:encoded>
			<wfw:commentRss>http://technosailor.com/2012/09/10/tutorial-building-custom-rewrite-endpoints-in-wordpress/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Five Articles I Wish I could Take Back</title>
		<link>http://technosailor.com/2012/08/21/five-articles-i-wish-i-could-take-back/</link>
		<comments>http://technosailor.com/2012/08/21/five-articles-i-wish-i-could-take-back/#comments</comments>
		<pubDate>Tue, 21 Aug 2012 17:18:33 +0000</pubDate>
		<dc:creator>Aaron</dc:creator>
				<category><![CDATA[Historical]]></category>
		<category><![CDATA[beer]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[entrepreneurship]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[freshbooks]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[imperial stout]]></category>
		<category><![CDATA[innovation]]></category>
		<category><![CDATA[instagram]]></category>
		<category><![CDATA[jason cohen]]></category>
		<category><![CDATA[Journalism]]></category>
		<category><![CDATA[mike mcderment]]></category>
		<category><![CDATA[new york times]]></category>
		<category><![CDATA[path]]></category>
		<category><![CDATA[raising money]]></category>
		<category><![CDATA[responsive design]]></category>
		<category><![CDATA[russian imperial stout]]></category>
		<category><![CDATA[Tribune Company]]></category>
		<category><![CDATA[vc]]></category>
		<category><![CDATA[Washington Post]]></category>
		<category><![CDATA[wp engine]]></category>

		<guid isPermaLink="false">http://technosailor.com/?p=8602</guid>
		<description><![CDATA[Last night I was going through Google archives looking for a post (that I never found) from 2007-2008. I went through 30 some pages of search results and remembered some of the older content I wrote. Some of it is stuff I either wish I didn&#8217;t write or I don&#8217;t agree with anymore. So I [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Last night I was going through Google archives looking for a post (that I never found) from 2007-2008. I went through 30 some pages of search results and remembered some of the older content I wrote. Some of it is stuff I either wish I didn&#8217;t write or I don&#8217;t agree with anymore. So I figured I&#8217;d share some of these posts and explain why I feel differently today:</p>
<h3><a title="It's a Read/Write/Execute Web and We Just Live In It" href="http://technosailor.com/2009/04/22/its-a-readwriteexecute-web-and-we-just-live-in-it/">It&#8217;s a Read/Write/Execute Web and We Just Live in It.</a></h3>
<p>In this post from 2009, I posit that the first generation of the web was a read-only web. It was website that were not engaged with outside of simply reading. The second generation of the web was a &#8220;read/write&#8221; web marked by social interaction. The third I called a &#8220;read/write/execute&#8221; web where I railed on the future of the internet being API oriented and that government should</p>
<div id="attachment_8603" class="wp-caption alignright" style="width: 410px"><img class="size-medium wp-image-8603" title="internet-pope" src="http://technosailor.com/files/internet-pope-400x299.jpeg" alt="" width="400" height="299" /><p class="wp-caption-text">Drawing by <a href="http://www.flickr.com/photos/romancement/3259546862/lightbox/">Romancement</a> on Flickr. Used by Creative Commons.</p></div>
<p>get on board with open data initiatives at the time.</p>
<p>Where I have a modestly different view today and I did slightly alude to it back then, is that the next generation of the web would actually be mobile. That prediction would have been true, and while APIs have played a significant role in making that happen, the APIs were merely a means to an end.</p>
<p>There are hundreds of thousand apps on the Apple app store and Android Market, not to mention other available app stores out there. Games now are played largely on smartphones and tablets as the shift away from consoles, while mild, is undoubtable. Today, with HTML5 and CSS3, websites are being creative with &#8220;<a href="http://mobile.smashingmagazine.com/tag/responsive-design/">responsive</a>&#8221; design that allows for appropriate displays on appropriate devices.</p>
<p><em><strong>Fun Fact:</strong> In 2004, I mused about what a world look like if we were not dependent on keyboards and mouses. I think we see that world in front of us now.</em></p>
<h3><a title="Are People Talking About You?" href="http://technosailor.com/2008/07/06/are-people-talking-about-you/">Are People Talking About You?</a></h3>
<p>Originally published in 2007, I rode a train of personal brand for a long time. Not in that I had it. Everyone has something and some people have more than others. It&#8217;s actually not personal brand. It&#8217;s just reputation. I have a reputation. I have a reputation as a no-BS guy that doesn&#8217;t have a lot of respect for drama professionally or personally. I&#8217;m a confidant and advisor and I know WordPress really well. I get clients via word of mouth because I have a reputation for great work that speaks for itself with a fairly in depth intimacy with the WordPress core code. That&#8217;s reputation, but if you must, you can call it personal brand.</p>
<p>Regardless, I wrote this in that article:</p>
<blockquote><p>It&#8217;s important to create great &#8220;stuff&#8221; (define &#8220;stuff&#8221; for yourself). It&#8217;s really important to stand out above the crowd. It&#8217;s more important to get other people talking about you. You are a brand. You are a subject matter expert. Well, you have the potential to be a subject matter expert. But you&#8217;re not yet. Not if no one is talking about you when you&#8217;re not around.</p></blockquote>
<p>Aaron, you had me until, &#8220;It&#8217;s more important to get other people talking about you.&#8221;</p>
<p>This is why I was completely wrong. Nobody knows Mike McDerment. Well a lot of people do, but he isn&#8217;t a household name in tech or startups. However, he is the CEO of the largest cloud accounting company <em>in the world</em>. He built <a href="http://freshbooks.com">Freshbooks</a> from the ground up to solve a problem that he had in 2003 (I just read <a href="http://www.freshbooks.com/blog/2012/08/21/a-special-announcement-founder-freshbooks/">his back story today</a>).</p>
<p>Similarly, do you know <a href="http://blog.asmartbear.com">Jason Cohen</a>? You might know him because I&#8217;ve mentioned him or because you use <a href="http://www.shareasale.com/r.cfm?B=394686&amp;U=423316&amp;M=41388&amp;urllink=">WP Engine</a> but otherwise, Jason isn&#8217;t a flashy guy. When I got the call from Jason right before moving to Austin to come help start WP Engine, I was thinking he was another guy named Cohen. I had no idea how successful and amazing he was. He wasn&#8217;t worried about promoting himself. Product is everything and product speaks for itself.</p>
<p>So I entirely disagree with my 2007 theory of self-aggrandizement. The only reason you have to worry about personal brand is if you&#8217;ve got nothing going for you. Otherwise, shut up and do epic shit. The rest will follow.</p>
<h3><a title="Age of Exploration 500 Years Later" href="http://technosailor.com/2008/02/23/age-of-exploration-500-years-later/">Age of Exploration 500 Years Later</a></h3>
<p>First of all, this story is all fluff. I tell a nice story of explorers and all but it takes me to the last paragraph to even make a point, much less a thesis statement. And even then, I&#8217;m unsure of my point.</p>
<div id="attachment_8605" class="wp-caption alignleft" style="width: 310px"><img class="size-medium wp-image-8605" title="imperial-stout" src="http://technosailor.com/files/imperial-stout-300x400.jpeg" alt="Imperial Stout" width="300" height="400" /><p class="wp-caption-text">Photo by <a href="http://www.flickr.com/photos/brostad/5674709035/">Brostad</a>. Used by Creative Commons</p></div>
<p>What I think I was trying to say is that technology and, more specifically, embracing technology and change makes us better business people, better communicators, better humans.</p>
<p>If I had to rewrite the end of this post, I&#8217;d say this:</p>
<blockquote><p>All of these explorers that went before, discovered new lands, races, tribes, experiences and opportunity opened up the door to new innovations. They were able to lay the groundwork and stepping stones for new expansion of influence and find new technologies that would allow for growth into the Industrial age.</p></blockquote>
<p>I would then use the example of the Imperial Stout created in England for the Queen of Russia:</p>
<blockquote><p>Through the expansion of the Russian Empire, King Peter the Great of Russia discovered British Stouts. As they became popular among Russians, a problem emerged. There was no way to get these stouts in Russia because the trip was so long that the beer would spoil before arrival. In the 1800s, an English brewery, responding to demand, developed a way of &#8220;hopping&#8221; their stouts in such a way to allow the beer to be preserved and delivered to Queen Catherine of Russia. Thus, this more hoppy version of the typical stout became known as the Russian Imperial Stout, or just the Imperial Stout.</p></blockquote>
<p>I would use that segue to explain that even in our technology-centric world, it takes innovators developing technology in order for other, new technologies to emerge. A classic example of this from the programming world is that of Ajax, an extension of JavaScript which has been around for years. Ajax is a technology that allows background communication with servers without the page reloading. Without Ajax being developed a few years ago, the interactivity we have come to expect on sites everywhere would not be able to exist.</p>
<p>So it&#8217;s not that I disagree with myself so much as I didn&#8217;t explore the real premise of the article enough.</p>
<h3><a title="Roadmap to Victory at Washington Post" href="http://technosailor.com/2009/01/05/roadmap-to-victory-at-washington-post/">Roadmap to Victory at the Washington Post</a></h3>
<p>This article is still an interesting one. On one side, I saw the Washington Post, and traditionally print-based journalism, as a dying trade. On the other I made a naive assumption that newspapers exist for the sake of journalism.</p>
<p>Both of these premises are wrong. Let&#8217;s address both presuppositions.</p>
<p>Traditionally print-based journalism is alive and well, as it should be. It isn&#8217;t going anywhere, nor should it. Blogs and digital media are not in competition with newspapers. They complement newspapers. Both sides serve different roles. While it&#8217;s true that newspapers (print) can&#8217;t break news anymore, they should count their blessings.</p>
<p>There are no opportunities to destroy credibility with <em>Dewey Beats Truman</em> moments (or more recently, <em>Mandate Struck Down</em>, as famously misreported by CNN). There are plenty of opportunities for solid, in depth investigative reporting-style journalism. I know it costs money. So save money by not trying to break news and let the digital sources do that.</p>
<p>Secondly, my cynical take feeds right into that last sentence and is why the challenge lies in money. Journalism today is an art, and is a respectable skill, trade and profession. But news organizations aren&#8217;t run by journalists. They are run by business people. Many of them are not non-profits, so they are implicitly for-profit. That means the bottom-line, which is dictated by readership, circulation and sometimes the ratings of television sister networks, are what inform the decisions of the company.</p>
<p>Samuel Zell, owner of the Tribune Company, ran his media empire as an entertainment company and not a journalism company. Guess what? Tribune is <em>still</em> trying to emerge from bankruptcy protection.</p>
<p>Let&#8217;s get back to the Washington Post, though. When I wrote this story, WaPo was trailing in the digital race. Today, they did everything other than what I suggested in my piece and have become one of the foremost digital journalism centers around. Their blogs, including <a href="http://www.washingtonpost.com/blogs/capital-weather-gang">Capital Weather Gang</a> and <a href="http://www.washingtonpost.com/blogs/dc-sports-bog">DC Sports Blog</a> are stellar and I still read them regularly, even though neither pertain to me anymore.</p>
<p>Unlike when I wrote this post, WaPo&#8217;s digital and print operations are integrated, instead of separate. Online metrics are key and closely watched. Online traffic is the indicator of success at the <em>Post</em>. Circulation is not. Subscriptions are not. Traffic. Eyeballs on their apps, their blogs, their articles. That&#8217;s the important metric at the Post. No longer are digital operations a second class citizen. They are equal or greater than print.</p>
<p><a href="http://www.nytimes.com/2012/02/12/business/media/the-washington-post-recast-for-a-digital-future.html?pagewanted=all">Even the New York Times sees it</a>:</p>
<blockquote><p>They can look at where online visitors are when they read the site. And if their computers are registered with a government suffix — .gov, .mil, .senate or .house — editors know they are reaching the readers they want. “That’s our influential audience,” Mr. Narisetti said. “If a blog is over all not doing that great but has a higher percentage of those, we say don’t worry about it.”</p></blockquote>
<p>The Washington Post is smarter than I am, clearly, and I applaud them for it.</p>
<h3><a title="Valleyboys: It's All About the Money" href="http://technosailor.com/2007/11/16/silicon-valley-is-all-about-the-money/">Valleyboys: It&#8217;s All About the Money</a></h3>
<p>Wow. How far off the mark can I be? This article, which matter-of-factly states something that was anything-but-fact, is a clear example o my lack of experience in 2007. In 2007, I apparently thought I knew everything there was about running a startup and raising funding. That from a perspective of someone who was  just over a year out of the corporate world <em>working</em><em> for </em>my first startup. I wasn&#8217;t a founder nor had I raised money. I didn&#8217;t understand a thing about reputation (there&#8217;s that word again) of founders, the importance of co-founders, how to safely determine a valuation based on things like profit and loss, revenue, the value of burn, the value of users and more factors that go in to that process.</p>
<p>I don&#8217;t really know why I was so pissy at the Valley, but in 2012, let me go on record and say that it&#8217;s not all about money in the Valley and there are a lot of people working hard to create value. Many do raise money, but many bootstrap as well. There&#8217;s pros and cons to both, and that&#8217;s left to a different article.</p>
<p>In my defense, there is some absurd money flying around not just in the Valley, but everywhere. For instance, I still don&#8217;t see the reasoning behind a <a href="http://techcrunch.com/2012/04/16/path-announces-30m-round-of-funding/http://">$30M raise on an 8x valuation for Path</a>, a round that included Virgin empire mogul Sir Richard Branson. That company has pivoted so many times and still doesn&#8217;t seem to have a clue what it&#8217;s doing. Nor do I understand the <a href="http://www.huffingtonpost.com/2012/04/09/instagram-facebook-acquisition_n_1412623.html">$1 BILLION Instagram buyout by Facebook</a>.</p>
<p>Here&#8217;s the money line (see what I did there?). Whether there&#8217;s a lot of money flowing or not is not the question. It is <em>a</em> question, but not <em>the</em><em> </em>question. The question is whether there are good, innovative products being built that create value in the marketplace. If that can be done with no money, great. If it requires funding money on orders of magnitude, that&#8217;s a decision that the investors and entrepreneurs have to make. Money doesn&#8217;t come without strings. Big raises with low revenue and no profit generally mean the investors get more of the company and if the company sells, then the founders get less. But then big raises for profitable companies with low burn and high user numbers could also mean that the investors just want a piece of the action, even if they don&#8217;t get a big piece of the pie. But there&#8217;s always strings and the <em>amount</em> of money matters less than the <em>percentage</em> of ownership and the <em>length</em> of runway as it relates to a burn rate and overhead.</p>
<p>So if I believed in deleting articles entirely, this one would be a prime candidate. :)</p>
<p>In the spirit of making sure I&#8217;m not perceived as a douchebag, here are some good article I wrote many moons ago. Enjoy!</p>
<p><a title="Friends vs. Fans" href="http://technosailor.com/2008/04/28/friends-vs-fans/">Friends vs. Fans</a>, <a title="The Most Expensive Question" href="http://technosailor.com/2010/03/04/the-most-expensive-question/">The Most Expensive Question</a>, <a title="Social Media: How Much is Too Much?" href="http://technosailor.com/2008/03/18/social-media-how-much-is-too-much/">Social Media: How Much is Too Much?</a>,</p>
]]></content:encoded>
			<wfw:commentRss>http://technosailor.com/2012/08/21/five-articles-i-wish-i-could-take-back/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Turning the Resumé on its Face</title>
		<link>http://technosailor.com/2012/08/10/turning-the-resume-on-its-face/</link>
		<comments>http://technosailor.com/2012/08/10/turning-the-resume-on-its-face/#comments</comments>
		<pubDate>Fri, 10 Aug 2012 19:26:45 +0000</pubDate>
		<dc:creator>Aaron</dc:creator>
				<category><![CDATA[Job Search]]></category>
		<category><![CDATA[job_search]]></category>
		<category><![CDATA[linkedin]]></category>
		<category><![CDATA[resume]]></category>

		<guid isPermaLink="false">http://technosailor.com/?p=8599</guid>
		<description><![CDATA[Resumés suck. They suck bad. Somehow, you need to convince a prospective employer that you are, in fact, the right candidate for a job. Or you might be and they should take a second look at you and maybe give you the time of day to put up a phone interview. You have to convince [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Resumés suck. They suck bad. Somehow, you need to convince a prospective employer that you are, in fact, the right candidate for a job. Or you might be and they should take a second look at you and maybe give you the time of day to put up a phone interview.</p>
<p>You have to convince someone that you are entirely worth the time and effort without ever speaking to them. It&#8217;s all got to be conveyed on this little 1-2 page document that gives a snapshot of everything you are and can do professionally.</p>
<p>And you have to do it in a bad economy when people with Masters degrees are also looking for work. Maybe you too have a Master&#8217;s degree. That&#8217;s okay, you&#8217;re still competing against all the rest of them.</p>
<p>The traditional way of building a resumé is to provide a chronological context of every school and degree you&#8217;ve received along with every professional role over the last 7-10 years, give or take.</p>
<p>What do you do when you&#8217;re in the tech space and the requisite skills are constantly changing? What do you do when your role at the last 3 companies were essentially the same with little deviance in the job description?</p>
<p>Do as I do&#8230; flip your resumé on it&#8217;s face.</p>
<p>Let&#8217;s face it. If a company is going to hire you into a role, they want to know that you&#8217;re going to be innovative in your approach to the job and that you&#8217;re willing to think outside the box to do the best job you can. If they don&#8217;t, you probably don&#8217;t want to work for them anyway as they are plainly hiring you to just follow marching orders and that, let&#8217;s face it, sucks ass. There&#8217;s no place to achieve and rise to the top because you&#8217;re just doing things the way you&#8217;re told, by the book, all day every day. Sounds like a reason to drive off a cliff, if you ask me.</p>
<p>Let&#8217;s provide some context as to how this concept has worked for me for years.</p>
<p>In 1994, I graduated from a private high school in Annapolis, Md. I hated school but I went to a community college and decided not to do any general education coursework, as is typical. At the time, this school was piloting a program that shifted all the coursework from the police academy to the school with only firearms training being done at the academy. This was the county&#8217;s idea of slimming the budget. So I decided being a cop sounded like fun and I pursued a bunch of criminal justice work in my first year of college.</p>
<p>I dropped out after a year and pursued other interests.</p>
<p>Years later, I was given the opportunity with little experience to work in a federal data center for a government contracting company. I spent three years in that windowless data center watching my life slip away from me. It gave me a shot though.</p>
<p>As I started looking to move up inside the company, I realized that to do so meant punching some certification cards. I put a few small ones under my belt &#8211; enough to get a promotion to work desktop IT support as a contractor for the U.S. Navy. I did well in that role, consistently rating among the highest, knowledgeable techs on that contract.</p>
<p>When that contract expired and I was RIFfed (Reduction in Force), the company scooped me up into a similar role on the corporate side. Again, I was able to perform at a high level and by the time I left in 2006, I was single-handedly responsible for the IT support of 7 offices around the Baltimore/Washington area.</p>
<p>I still had no formal education, so during this time, I went back to another community college and worked toward getting coursework under my belt that would allow me a 4-year degree at some point in the future.</p>
<p>That was until I said, &#8220;Fuck it&#8221;, and went into the startup world. For the past 6 years, I have worked at or started 3 startups and ran my own consulting business in between (as I still do today). I did some advisory consulting with the Air Force, wrote a book, and even taught some classes <em>at the post-graduate level</em> at major universities including American University. Not bad for no degree.</p>
<p>Today, I still have no formal education. I&#8217;m a few credit away from a 2-year degree which wouldn&#8217;t be worth the paper it was printed on. When I went back to school, my experience was such that I was teaching the teachers.</p>
<p>I can go into a diatribe about how higher education is broke in this country, but I feel like I would be preaching to the choir. While some of my experience can be translated as college credit, most is ignored despite the fact that, in my field, I am 5-7 years ahead of what they are teaching in colleges today. And while a 4 year degree would be fairly useless to me as the industry is ahead of academia, a Master&#8217;s could be quite handy. Sadly I can&#8217;t get a Master&#8217;s without a 4-year, but I digress.</p>
<p>Coming back to the point about the resumé. I have tremendous chronological gaps if I were to formulate my resumé in traditional fashion. Am I ashamed of having no degree? No. Do I want to highlight that fact? Hell no. It&#8217;s unfortunate that America&#8217;s HR departments have been trained by buffoons who play to the checkboxes instead of actual skill, but those are the rules we play by.</p>
<p>Instead, I present to you an achievement/skills-based resumé. Instead of discussing formal education or companies that have been worked at <em>ad nauseum</em><span style="text-decoration: underline;">,</span> try laying it out to highlight the things you&#8217;ve accomplished along the way. I begin my resume with several one-sentence paragraphs that describe achievements I&#8217;ve made professionally &#8211; not for a company, for me.</p>
<p>I then mention companies I&#8217;ve worked at, purely for the sake of context. I also use LinkedIn recommendations I&#8217;ve received over the years to highlight what others say about me.</p>
<p>These three steps provide the context needed for employers to decide if they want to talk to me. If I can humblebrag, I usually get phone interviews for the companies I want to talk to and they usually go deep into multiple rounds. I&#8217;m still working for myself because timing, pay or perks are off in the end, but I rarely fail to get the attention of someone who I want to work for.</p>
<p>Try this concept. Maybe A/B test between a resumé of the format I&#8217;m describing and a more traditional one and see which one gets more traction. It can&#8217;t hurt, right?</p>
<p>Oh and here&#8217;s my <a href="http://aaronbrazell.com/wp-content/uploads/2012/04/abrazell-resume.pdf">resumé</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://technosailor.com/2012/08/10/turning-the-resume-on-its-face/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Competing Interests: WordCamp SF and the WordPress Foundation</title>
		<link>http://technosailor.com/2012/07/12/competing-interests-wordcamp-sf-and-the-wordpress-foundation/</link>
		<comments>http://technosailor.com/2012/07/12/competing-interests-wordcamp-sf-and-the-wordpress-foundation/#comments</comments>
		<pubDate>Thu, 12 Jul 2012 18:50:35 +0000</pubDate>
		<dc:creator>Aaron</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[automattic]]></category>
		<category><![CDATA[wcsf wordcamp sf]]></category>
		<category><![CDATA[wordpress foundation]]></category>

		<guid isPermaLink="false">http://technosailor.com/?p=8588</guid>
		<description><![CDATA[Six years ago, the first WordCamp ever was held in SF and it became the launching point for many local regions and cities to continue the conversation, learning and educating around WordPress. It was always meant to be a hyper-local thing. Actually, as a correction, it was never meant to be a thing at all. It was meant to be a get-together of SF WordPress people.]]></description>
				<content:encoded><![CDATA[<div id="attachment_8589" class="wp-caption aligncenter" style="width: 610px"><img class="size-large wp-image-8589" title="WordCamp SF" src="http://technosailor.com/files/wordcampsf-600x113.jpg" alt="WordCamp SF" width="600" height="113" /><p class="wp-caption-text">Photo used under Creative Commons and taken by <a href="http://www.flickr.com/photos/niallkennedy/2769119207/">Niall Kennedy</a>.</p></div>
<p>Six years ago, the first WordCamp ever was held in SF and it became the launching point for many local regions and cities to continue the conversation, learning and educating around WordPress. It was always meant to be a hyper-local thing. Actually, as a correction, it was never meant to be a thing at all. It was meant to be a get-together of SF WordPress people.</p>
<p>But surprise, it caught the attention of WP developers, users and designers worldwide (including myself), and we came in by storm!</p>
<p>The following year, the decision was made that, due to such high demand in SF, and to try to encourage WordPress user groups in other cities, WordCamps should be distributed and locally organized. That kicked off a slew of WordCamps that (seemingly) doubles every year. I organized WordCamp Mid-Atlantic (the roots for WordCamp Baltimore and WordCamp DC today) back in 2009 and 2010.</p>
<p>Personally, I&#8217;ve been at or spoken at dozens of WordCamps (Mark your calendars&#8230; if you&#8217;re in Las Vegas on October 6, I&#8217;ll be speaking there too). To name a few, I&#8217;ve been to WordCamps in SF, San Diego, Las Vegas, Raleigh, Baltimore, Miami, Atlanta, Dallas, Houston, and New York to name a few. I&#8217;ve been to San Francisco every year except one, and that was due to another travel conflict.</p>
<p>I&#8217;ve been an organizer, speaker, sponsor and attendee.</p>
<p><strong>In other words, I am no rookie and I am in good standing in the community!</strong></p>
<h2>The WordPress Foundation</h2>
<p>A few years ago, after some financial mis-management for a large WordCamp, the <a href="http://wordpressfoundation.org/">WordPress Foundation</a> was setup. The Foundation was designed to promote the use of WordPress, protect trademarks of WordPress and related WordPress trademarks, including WordCamp. As part of this responsibility, the Foundation has issued <a href="http://plan.wordcamp.org">rules</a> around WordCamps via <a href="http://central.wordcamp.org/">WordCamp Central</a>. Today, I could not run WordCamp Mid-Atlantic the way I did before as the rules are quite rigid. On the other hand, I would also not have taken a nearly $3k personal loss on Mid-Atlantic in 2010, so the rules, in my opinion, aren&#8217;t all bad.</p>
<p>A sampling of these rules include that any WordPress-based commercial sponsors who distribute code must distribute 100% GPLv2 compliant software and having organizers approved. Also, all sponsorship money goes through the Foundation at this point.</p>
<h2>WordCamp SF</h2>
<p>Which leads me to a problem I feel the need to weigh in on. WordCamp San Francisco is no WordCamp. It is a conference in every rightful way of the word, as it should be. And it should be renamed as the WordPress Conference or something <em>other</em> that WordCamp. WordCamp SF is commanding massive sponsorship levels, of which one sponsor is gladly paying a whopping <strong>$30,000</strong> for &#8220;<a href="http://2012.sf.wordcamp.org/sponsors/">California Street</a>&#8221; level sponsorship.</p>
<blockquote class="twitter-tweet" width="500"><p>We&#8217;re delighted to announce that @<a href="https://twitter.com/dreamhost">dreamhost</a> is the &#8220;California Street&#8221; level sponsor of WordCamp San Francisco! <a href="https://twitter.com/search/%23wcsf">#wcsf</a> <a href="http://t.co/bVSA2hR3" title="http://2012.sf.wordcamp.org/2012/07/11/dreamhost-to-sponsor-wordcamp-san-francisco/">2012.sf.wordcamp.org/2012/07/11/dre…</a></p>
<p>&mdash; WordCamp SF (@WordCampSF) <a href="https://twitter.com/WordCampSF/status/223122433190801409" data-datetime="2012-07-11T18:31:48+00:00">July 11, 2012</a></p></blockquote>
<p><script src="//platform.twitter.com/widgets.js" charset="utf-8"></script></p>
<p>Other sponsorship levels are at $10k, $7500, $5k and $2k.</p>
<p>This is against an unstated, yet enforced, Foundation policy surrounding limits for sponsorships. These rules were put in effect to encourage big companies, like Dreamhost who is in for $30k at WCSF, to spread the wealth among a variety of WordCamps instead of just one. The idea is that if, say Microsoft, was well-connected to an organizer of one WordCamp, the Foundation has mechanisms in place to move funds around to other less-connected, but still necessary, WordCamps. It also ensures that WordCamps don&#8217;t put their eggs in one basket and then have a major sponsor flake and leave them holding the bag. Fine, I can get behind that rule.</p>
<p>WordCamps also have rules about content. It used to be that every WordCamp had some session on using social media. While that is perhaps important to WordPress users, <em>it&#8217;s not WordPress!</em> So sessions need to be WordPress related. I totally get that and have no gripe with that provision. For the first WordCamp Mid-Atlantic, I invited <a href="http://dashes.com/anil/">Anil Dash</a> to keynote, knowing that at the time, Anil was an SVP and Founder of a WordPress competitor. But it was open source and I felt that the competition only made us as a WordPress community stronger. I expected push-back from inviting Anil, and if the rules were in place then&#8230; he may not have been able to Keynote.</p>
<p>We <a href="http://central.wordcamp.org/news/2011/01/24/wordcampsf-not-wordcon/">know</a> WordCamp SF is Matt&#8217;s baby and he chooses content, not based on whether if it&#8217;s WordPress-related, but whether it&#8217;s inspired him. At least that was true until last year when Jane Wells organized.</p>
<p>We also know food, photography and Jay Z inspire Matt, but I don&#8217;t think Rachael Ray would be a speaker at WordCamp SF&#8230; though perhaps I wouldn&#8217;t be surprised if she did end up speaking there. I digress.</p>
<p>Matt Mullenweg, who is both the President of <a href="http://automattic.com">Automattic</a>, the commercial arm of WordPress, and the President of the WordPress Foundation responded to my request for comment by admitting that some content in the past has drifted from WordPress but that he still stands by them. &#8220;None of those speakers normally speak at WordCamps, but we&#8217;re able to attract them and orient them to contributing something interesting to the WordPress community because of WCSF&#8217;s location and prominence.&#8221;</p>
<p>I suppose, again, Rachael Ray could speak and discuss the merits of using WordPress for a food blog.</p>
<p>Related, ticket prices are kept artificially low, but sponsorship levels are extremely high. It feels wrong.</p>
<p>The Foundation does suggest lower ticket prices (around $20 is typical), but one wonders why WordCamp San Francisco could not charge a reasonably low rate of $200 for an attendee ticket, given that people would still come from all over the world to attend. This would also lower sponsor levels and cause less controversy. DrupalCon is charging $400-$450. RailsConf is approximately $800. Why does the official WordPress conference have to sell at $20 when sponsorship levels <em>feel</em> inappropriate?</p>
<p> ;</p>
<h2>The Foundation Risks Major Implications from Non-Enforcement</h2>
<p>When the Foundation was established, it&#8217;s stated goals were inspired by the <a href="http://www.mozilla.org/">Mozilla Foundation</a>, as much of the philosophy of open-source development and products in the WordPress world are. It&#8217;s important to point out that, from a governance standpoint, the Mozilla Foundation and Mozilla Corporation, though closely tied, are governed by different people with similar but differently stated goals.</p>
<p>If Mozilla Corp goes outside the bounds of protected Mozilla.org auspices, you better believe that Mozilla.org is going to have something to say about it. The reason is simple&#8230; if you don&#8217;t enforce your own policies with your closest ally, friend and organization made from the same DNA, you leave yourself open to risk later on. Otherwise, you have a conflict of interest which is both legally and publicly difficult to reconcile.</p>
<p>Trey Roberts, a <a href="http://robertsatlaw.com/attorneys/marvin-kirby-roberts-iii/">well-decorated</a> Intellectual Property attorney of <a href="http://robertsatlaw.com/">Roberts &amp; Roberts</a> in Austin, TX, commented to me that, &#8220;Though there is no &#8216;discrimination&#8217; in a legal sense, since an organization has the right to choose what aspects of their licensing contract to enforce, if a pattern of suspended enforcement occurs, there is a risk of legal repercussions.&#8221;</p>
<p>Of course, some organizers see a level of subjectiveness in Foundation rules. Tony Perez, one of the organizers of <a href="http://2012.sandiego.wordcamp.org/">WordCamp San Diego</a>, lamented, &#8220;Often case when a request would be made, the response would be,&#8217;we would prefer not.&#8217; When the question was asked, &#8216;well why not?&#8217; the response was not very clear or decisive, so the decision felt as if it was in limbo. At the same time, you almost felt bad going against the recommendation, so it starts to become easier not to ask, than to ask.&#8221;</p>
<p>Opportunity exists though. &#8220;I can say though that it&#8217;s a necessary evil, but perhaps its time to think outside the box on the approach,&#8221; says Perez.</p>
<h2>I love WordPress</h2>
<p>I write this post not to bash WordCamp, the WordPress Foundation or any individual involved. In fact, I love WordPress. My professional career is <em>Proudly Powered by WordPress</em>. I want the Foundation to succeed as an organization charged with the governance of the software and events around it &#8211; and it is making strides to become a respected, independent governing organization. But conflicts of interest (or perceived COIs) do not provide a healthy community atmosphere and it causes bad blood among other WordCamp organizers. It, in fact, keeps potential organizers from wanting to jump in the mix. Or former organizers (like myself) from wanting to participate.</p>
<p>One former organizer, Amanda Blum, who has been a frequent critic of the Foundation tells me she won&#8217;t organize another WordCamp but she &#8220;still actively advises other camps [sic]&#8221; and &#8220;all I hear is complaints&#8221;. She goes on to express a concern about &#8220;the vast chasm  between what the Foundation thinks Camps [sic] purpose is, and what the attendee interprets.&#8221;</p>
<p>Policies of the WordCamp Foundation around WordCamps are heavy-handed, in my opinion. There should be education (and there is some) around how WordCamps should be organized. Perhaps the rules that require WC money to be funnelled through the Foundation are merited (I actually do agree with this for non-profit reasons). However, where possible, it strikes me as necessary (and in fact, opportune) for local organizers to be able to blaze their own path and put their own local stamp on their own local WordCamp in almost every case. When it comes to sponsorship level, a WordCamp in NYC is likely going to cost more on orders of magnitude than a WordCamp in Omaha. One size shouldn&#8217;t fit all and the discretion should be left, with guidance from the Foundation, at the local level.</p>
<p>Mullenweg states, &#8220;The guidelines on Central encourage lower per-company sponsorship levels to encourage more sponsors per WC, decrease reliance on a single sponsor (we&#8217;ve had them flake out before), and have a level where even smaller firms can participate. It also hasn&#8217;t appeared to be a hindrance to larger city WordCamps, with NYC and Boston both raising 20k and putting on great events.&#8221;</p>
<p>Jane Wells, who helped to draft the original rules, tells me that the Foundation does try to not take a one size fits all approach to WordCamp&#8217;s and that they try to assist local WordCamps with financial assistance for venues, etc when needed. It does seem there is a perception among many organizers like Perez that this is not the case. One area where better communication between the Foundation and organizers may occur is at a <a href="http://make.wordpress.org/events/">new community blog</a> that just went up.</p>
<p>With the spirit that this article is written with, I hope the Foundation, Automattic and the community take this as constructively confrontational. I do not wish to throw anyone under the bus, but change needs to happen for the integrity of the community. I cannot and will not be attending WordCamp SF this year or in the future, as long as these grievances continue year after year. I, however, will be at <a href="http://2012.vegas.wordcamp.org/">WordCamp Las Vegas</a> and possibly Baltimore in the months to come, and I hope to see you there.</p>
<p><strong>Corrections</strong>: Inserted a reference to WordCamp Central that serves as a central organization point for WordCamps. Also, updated the date for WordCamp Las Vegas to Oct 6, 2012. Corrected some content flow (paragraphs inserted in the wrong place) and noted that Matt did not choose content in 2011.</p>
]]></content:encoded>
			<wfw:commentRss>http://technosailor.com/2012/07/12/competing-interests-wordcamp-sf-and-the-wordpress-foundation/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>Struggle</title>
		<link>http://technosailor.com/2012/07/07/struggle/</link>
		<comments>http://technosailor.com/2012/07/07/struggle/#comments</comments>
		<pubDate>Sat, 07 Jul 2012 17:41:35 +0000</pubDate>
		<dc:creator>Aaron</dc:creator>
				<category><![CDATA[Feminism]]></category>
		<category><![CDATA[civil rights]]></category>
		<category><![CDATA[equality]]></category>
		<category><![CDATA[fair pay]]></category>
		<category><![CDATA[justice]]></category>
		<category><![CDATA[women in tech]]></category>

		<guid isPermaLink="false">http://technosailor.com/?p=8586</guid>
		<description><![CDATA[I have a tattoo. I have more than one, but I have one in particular. The tattoo depicts scales that are balanced between an olive tree and a foreboding cityscape. Leading up to the scales, and disappearing into a vanishing point, a road winds its way into the horizon. People commonly ask me if I&#8217;m [&#8230;]]]></description>
				<content:encoded><![CDATA[<p><a href="http://technosailor.com/files/387691_10150401291059396_788083402_n.jpeg"><img src="http://technosailor.com/files/387691_10150401291059396_788083402_n-300x400.jpeg" alt="" title="387691_10150401291059396_788083402_n" width="300" height="400" class="alignright size-medium wp-image-8587" /></a>I have a tattoo. I have more than one, but I have one in particular. The tattoo depicts scales that are balanced between an olive tree and a foreboding cityscape. Leading up to the scales, and disappearing into a <a href="http://en.wikipedia.org/wiki/Vanishing_point">vanishing point</a>, a road winds its way into the horizon.</p>
<p>People commonly ask me if I&#8217;m a Libra. When I tell them no, they inevitably then ask about the tattoo which (clearly) was the reason they asked. I tell them what it really means, what really inspired the tattoo. It&#8217;s a principle at the core of my being.</p>
<p>A never-ending struggle for justice.</p>
<p>Justice can be many things to many people. Justice is often considered a validation for what one holds dear. To achieve what a person holds dear is proclaimed, &#8220;Justice!&#8221; Rarely does anyone consider that justice may result in an outcome that is not comfortable or desired bu that, by definition, is justice.</p>
<blockquote><p>jus·tice noun \ˈjəs-təs\</p>
<p>the maintenance or administration of what is just especially by the impartial adjustment of conflicting claims or the assignment of merited rewards or punishments</p></blockquote>
<p>The tattoo to me represents an eternal and ongoing struggle for justice. Justice, to me, is both legal and social. Equality in marriage. Employment and hiring rights. Civil rights. </p>
<p>As I sit here in the cradle of American democracy &#8211; Boston &#8211; I&#8217;ve had time to think about the Founding Fathers. I walked the Freedom Trail, beginning at Paul Revere&#8217;s home, and leading to the Old North Church where a pair of lanterns were hoisted into the church steeple to alert rebels in Charlestown across the river of the British arrival by sea. We know the story of that historic ride to Concord.</p>
<p>As I sit here in Boston and ponder the struggle for freedom that the patriots of that day engaged in, I am aware of the potentially fatal nature of that struggle as epitomized in the closing lines of the Declaration of Independence.</p>
<blockquote><p>And for the support of this Declaration, with a firm reliance on the protection of divine Providence, we mutually pledge to each other our Lives, our Fortunes and our sacred Honor.</p></blockquote>
<p>This has already been a long-winded post, but there is a point &#8211; and it has nothing to do with the normal topic of this blog. Civil rights has not made any significant advances in decades. While one can argue that the Civil War was a distant memory &#8211; a blight on American history (and it was), there are still those in the south who call it the War of Northern Aggression.</p>
<p>Abraham Lincoln, though considerably heroic in his legacy, was only able to accomplish what he did through the Emancipation Proclamation by getting creative. He could say, &#8220;All slaves are free&#8221; and he would not have a mandate with authority in the Union, much less the Confederacy. The only way he managed to use that as a tool and a rallying cry with any success is that there were many in the Union who could care less about slaves and were only interested in the preservation of the Union while others were abolitionists who cared about freeing slaves.</p>
<p>In order to achieve the goals necessary to both sides, the timing and essence of the Emancipation had to serve to unite both factions. That was, in fact, the genius of Lincoln.</p>
<p>Besides Civil Rights, we still have work to do on the Women in the Workforce side of things. Sure, President Obama signed the <a href="http://en.wikipedia.org/wiki/Lilly_Ledbetter_Fair_Pay_Act_of_2009">Lily Ledbetter Fair Pay Act</a> which enhances the ability of women to file lawsuits challenging unfair compensation. But that&#8217;s only a fraction of what needs to happen. Certainly, in the tech space, we need to eliminate <a href="http://technosailor.com/2012/04/26/tech-we-need-to-start-being-feminists-stat/">Brogrammers</a> and all their evil spawn. And that&#8217;s just in tech. Fortunately, Twitter is spearheading <a href="http://blog.twitter.com/2012/06/working-with-girls-who-code.html">a project to get women into engineering</a>. We need more of that.</p>
<p>And of course, equality in marriage is another topic that needs to be addressed.</p>
<p>But the point is, the struggle will always be there. With every achievement, there&#8217;s more to fight for. We need to fight and we need to push the issues. Be the change you want to see.</p>
<p>&mdash; Aaron Brazell</p>
]]></content:encoded>
			<wfw:commentRss>http://technosailor.com/2012/07/07/struggle/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>My Three Tiered System to Job Searching</title>
		<link>http://technosailor.com/2012/06/28/my-three-tiered-system-to-job-searching/</link>
		<comments>http://technosailor.com/2012/06/28/my-three-tiered-system-to-job-searching/#comments</comments>
		<pubDate>Thu, 28 Jun 2012 20:13:14 +0000</pubDate>
		<dc:creator>Aaron</dc:creator>
				<category><![CDATA[Aaron Brazell]]></category>
		<category><![CDATA[employment]]></category>
		<category><![CDATA[environment]]></category>
		<category><![CDATA[Job Search]]></category>
		<category><![CDATA[recruiting]]></category>
		<category><![CDATA[social good]]></category>

		<guid isPermaLink="false">http://technosailor.com/?p=8583</guid>
		<description><![CDATA[Over the past months, since I parted with WP Engine, I have entertained many inquiries about my availability for other full-time roles. And I literally mean many. It&#8217;s been a great problem to have, frankly, and I consider myself blessed to have these inquiries while so many others continue to struggle to find work. I [&#8230;]]]></description>
				<content:encoded><![CDATA[<p><div id="attachment_8584" class="wp-caption aligncenter" style="width: 607px"><a href="http://www.flickr.com/photos/44313045@N08/6290270129/"><img src="http://technosailor.com/files/jobs-597x450.jpg" alt="" title="jobs" width="597" height="450" class="size-large wp-image-8584" /></a><p class="wp-caption-text">Photo used under Creative Commons and taken by <a href="http://www.flickr.com/photos/44313045@N08/6290270129/">photologue_np</a></p></div>Over the past months, since I parted with <a href="http://wpengine.com">WP Engine</a>, I have entertained many inquiries about my availability for other full-time roles. And I literally mean <em>many</em>. It&#8217;s been a great problem to have, frankly, and I consider myself blessed to have these inquiries while so many others continue to struggle to find work.</p>
<p>I also consider myself blessed to work in a specialty field. WordPress consulting, you would think, is something that is extremely saturated. To a degree you&#8217;d be right. As a consultant, I turn away a great number of projects because, frankly, they amount to building sites with WordPress. There is certainly nothing wrong with that kind of work, but I&#8217;ve found over years of consulting that it&#8217;s important to be a specialist. To not be a specialist means to compete with everyone else on the same level and that reduces the quality and quantity of projects I can work on.</p>
<p>Instead, I focus on high-end WordPress integrations and plugin development. Complex things. I make a reasonable living doing things that there are only a proverbial handful of people who have the ability to do.</p>
<p>At the same time, I continue to entertain full-time job offers. There are some great ones out there, but many just don&#8217;t interest me. I have a three-tier (God, as a beer advocate, I hate that term but in this case it fits) filtering process I go through when entertaining job offers. I think this three-tier system should apply to anyone and everyone looking to work in any field, and so I&#8217;ve decided to share it.</p>
<h2>Is the money right?</h2>
<p>We all need to live, and I&#8217;m not one who believes the starving artist mantra is necessary a healthy one. If you&#8217;re good at what you do, you should be compensated appropriately. Personally, I don&#8217;t think anyone would have an argument in this area. A seasoned DBA should not be making $50k, for instance.</p>
<p>As a consultant, I&#8217;ve come to have a lifestyle that I&#8217;ve worked very hard to achieve. I&#8217;m going to be 36 soon and I&#8217;ve been married, had a kid, worked on startups, lived in expensive areas of the country and cheaper areas of the country. I&#8217;ve built a lifestyle that no job should ever take away.</p>
<p>We all have our &#8220;number&#8221;. Know for yourself what that number is and stick to your guns when determining if you want to work for someone. Simply not enjoying your current job is not a valid reason to take less than what you&#8217;re worth.</p>
<h2>Does the job make you want to jump out of your chair and SQUEEEE?</h2>
<p>IF it doesn&#8217;t, walk away. You should love every minute of what you do and jump out of bed in the morning (after a reasonable period of off-time) eager to see what new innovations, products, ideas and relationships can be achieved.</p>
<p>To do less is selling yourself short. Never settle for anything less than awesome. Some inquiries, for me, have been awesome on the money side but I feel so dull and want to pull each fingernail out of it&#8217;s socket just thinking about it. <em>Read my lips! I will never work in a cubicle again! Ever! Don&#8217;t ask!</em></p>
<p>Recently, I spoke with a company who demoed some of their products (WordPress-based) they were working on. They showed me tools that they had built in that allowed their 300some entities they managed to do amazing things (things I tried at b5media years ago [and failed]) in easy, intuitive ways. All I wanted to do was scream &#8220;OMGYESPLEASE!&#8221; through the phone.</p>
<p>If you don&#8217;t have that reaction, think really hard about whether you want to commit.</p>
<h2>What&#8217;s the social impact?</h2>
<p>I&#8217;m not a tree-hugger, but one thing I can say is that consulting is both awesome and terrible. I get a lot of benefits by working for myself. But that&#8217;s kind of it. I get lots of benefits from working for myself. No one else does. Just me. My world isn&#8217;t a better place because of my work. My wallet is happier, but the world around me still sucks.</p>
<p>So when I talk to companies about working for them, I want to know that my work has a positive effect on the world around me. Whether it&#8217;s education or environmental; sustainability or fitness; empowering others or enabling positive social change &#8211; it&#8217;s an important facet in what I look for.</p>
<p>Does the company reward employees for not wasting energy and taking the bus or riding a bike to work? Does the company offer some sort of subsidy or reward for green energy consumption? How many women are employed as engineers?</p>
<p>How does working for Company X positively affect the world around me?</p>
<p>I think these three things are co-equally important for anyone, not just me. I hope so, anyway. We shouldn&#8217;t hate what we do, ever. We choose what we do. Choose wisely.</p>
]]></content:encoded>
			<wfw:commentRss>http://technosailor.com/2012/06/28/my-three-tiered-system-to-job-searching/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Science is King</title>
		<link>http://technosailor.com/2012/06/22/science-is-king/</link>
		<comments>http://technosailor.com/2012/06/22/science-is-king/#comments</comments>
		<pubDate>Sat, 23 Jun 2012 01:00:36 +0000</pubDate>
		<dc:creator>Aaron</dc:creator>
				<category><![CDATA[Aaron Brazell]]></category>
		<category><![CDATA[computer science]]></category>
		<category><![CDATA[science]]></category>

		<guid isPermaLink="false">http://technosailor.com/?p=8581</guid>
		<description><![CDATA[I&#8217;m a scientist. I don&#8217;t have a degree from Stanford or Carnegie Mellon&#8230; But I&#8217;m a scientist. I hypothesize, test and prove. If the result doesn&#8217;t meet my supposition, I accept that and move on. Science required known, provable facts. Or in computer science, constants. To prove, you need to test. To test, you need [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>I&#8217;m a scientist.</p>
<p>I don&#8217;t have a degree from Stanford or Carnegie Mellon&#8230; But I&#8217;m a scientist.</p>
<p>I hypothesize, test and prove.</p>
<p>If the result doesn&#8217;t meet my supposition, I accept that and move on.</p>
<p>Science required known, provable facts. Or in computer science, constants.</p>
<p>To prove, you need to test. To test, you need constants. You need to know with 100% certainty that the factors in your experiment are known and 100% objectively provable.</p>
<p>Obama isn&#8217;t an American, while a supposition, cannot be proven as fact. There are records showing otherwise.</p>
<p>That men are pigs, while an okay assumption, does not rely on provable facts. Any proof relies on subjective experience.</p>
<p>That WordPress is the best CMS on the planet? While it may control ~20% of the web, assumes that 20% thinks its the right choice and avoids supporting evidence toward other CMSes.</p>
<p>I can get more explicit about suppositions assumed as fact, but you get the idea.</p>
<p>Work with what you know. Make assumptions but allow yourself to be wrong. Data is the only thing that matters.</p>
]]></content:encoded>
			<wfw:commentRss>http://technosailor.com/2012/06/22/science-is-king/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPress Plugin: Easy Graphs</title>
		<link>http://technosailor.com/2012/06/21/wordpress-plugin-easy-graphs/</link>
		<comments>http://technosailor.com/2012/06/21/wordpress-plugin-easy-graphs/#comments</comments>
		<pubDate>Fri, 22 Jun 2012 00:06:34 +0000</pubDate>
		<dc:creator>Aaron</dc:creator>
				<category><![CDATA[Aaron Brazell]]></category>
		<category><![CDATA[charts]]></category>
		<category><![CDATA[data visualization]]></category>
		<category><![CDATA[plugins]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://technosailor.com/?p=8580</guid>
		<description><![CDATA[Everyone likes data visualizations so I wrote a plugin that will make the quick and secure creation of Pie Charts, Bar Charts and Line Charts easy. The answer is: Easy Graphs. Easy graphs is very simple to use. It&#8217;s a shortcode &#8211; &#160; Not just like that. The shortcode also requires one parameter &#8220;data&#8221;. This [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Everyone likes data visualizations so I wrote a plugin that will make the quick and secure creation of Pie Charts, Bar Charts and Line Charts easy. The answer is: <a href="http://wordpress.org/extend/plugins/easy-graphs/">Easy Graphs</a>.</p>
<p>Easy graphs is very simple to use. It&#8217;s a shortcode &#8211; <code class="codecolorer text default"><span class="text">[easy_graphs]</span></code></p>
<p>Not just like that. The shortcode also requires one parameter &#8220;data&#8221;. This parameter is a comma separated list of number values &#8220;1,2,3,4,5,6,7&#8243;.</p>
<p>You can also add a &#8220;type&#8221; parameter. The &#8220;type&#8221; can be &#8220;line&#8221;, &#8220;bar&#8221; or &#8220;pie&#8221;. &#8220;bar&#8221; is the default.</p>
<p>For a Bar graph, you can optionally pass additional parameters: width, height, and color.</p>
<p>Example: <code class="codecolorer text default"><span class="text">[easy_graphs height=&quot;200&quot; type=&quot;bar&quot; data=&quot;30,70,65&quot;]</span></code><br />
<span class="bar">30,70,65</span>		<script>
		jQuery(document).ready(function(){
			jQuery('span.bar').peity('bar', { width : 600, height : 200, colour : "#4d89f9" });
		});
		</script></p>
<p>By default, width and height are populated from your media embed sizes that are set in your Settings &gt; Media menu inside WordPress. Color should be a hex color code.</p>
<p>For a line graph, the options are similar: color1, color2, height and width.</p>
<p>If you will: <code class="codecolorer text default"><span class="text">[easy_graphs height=&quot;200&quot; type=&quot;line&quot; data=&quot;200,150,175,260&quot;]</span></code><br />
<span class="line">200,150,175,260</span>		<script>
		jQuery(document).ready(function(){
			jQuery('span.line').peity('line', { colour : "#fff4dd", strokeColour: "#ff9900", strokeWidth : 1, height : 200, width : 600 });
		});
		</script></p>
<p>In this case, color1 is the &#8220;fill&#8221; color and color2 is the line color. Both should be hex.</p>
<p>For Pie charts, there are some additional limitations but fewer parameters: color1, color2 and diameter.</p>
<p>Try this: <code class="codecolorer text default"><span class="text">[easy_graphs diameter=&quot;150&quot; data=&quot;40,60&quot; type=&quot;pie&quot;]</span></code><br />
<span class="pie">40/60</span>		<script>
		jQuery(document).ready(function(){
			jQuery('span.pie').peity('pie', { diameter : 350, colours : ["#fff4dd", "#ff9900"] });
		});
		</script></p>
<p>Diameter should be an integer represented in pixels. Color1 and color2 are the fill colors of the pie slices. The limitation is the pie chart, at this time, can only take 2 values. I&#8217;ll work on that.</p>
<p>On the roadmap are other things. Make the pie chart take more values than just 2. Maybe include other graph types. Labels so the data can be more easily understood.</p>
<p>What would you add to this?</p>
<h3><a href="http://wordpress.org/extend/plugins/easy-graphs/">Download Easy Graphs</a></h3>
]]></content:encoded>
			<wfw:commentRss>http://technosailor.com/2012/06/21/wordpress-plugin-easy-graphs/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Eliminate Unused WordPress Plugins</title>
		<link>http://technosailor.com/2012/06/19/eliminate-unused-wordpress-plugins/</link>
		<comments>http://technosailor.com/2012/06/19/eliminate-unused-wordpress-plugins/#comments</comments>
		<pubDate>Tue, 19 Jun 2012 19:01:57 +0000</pubDate>
		<dc:creator>Aaron</dc:creator>
				<category><![CDATA[Security]]></category>
		<category><![CDATA[botnet]]></category>
		<category><![CDATA[internet security]]></category>
		<category><![CDATA[timthumb]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://technosailor.com/?p=8574</guid>
		<description><![CDATA[Consider this post a public service announcement. It&#8217;s a common misconception that if a plugin is deactivated in WordPress, that you are immune from performance or security issues. On it&#8217;s face, this is not true, and you are risking the internet with this mentality! Take last year&#8217;s Timthumb debacle, for instance. Many themes include Timthumb [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Consider this post a public service announcement.</p>
<p>It&#8217;s a common misconception that if a plugin is <em>deactivated</em> in WordPress, that you are immune from performance or security issues.</p>
<p><strong>On it&#8217;s face, this is not true, and you are risking the internet with this mentality!</strong></p>
<p>Take <a href="http://blog.sucuri.net/2011/08/timthumb-php-security-vulnerability-just-the-tip-of-the-iceberg.html">last year&#8217;s Timthumb debacle</a>, for instance. Many themes include Timthumb for dynamic resizing of images. Sometimes plugins do. When those themes or plugins are not activated, you are correct in assuming WordPress is not loading them. What you are failing to see is that <em>their existence</em> on the filesystem provides a vector of attack for someone wanting to exploit a system-level exploit.</p>
<p>Not to say Timthumb is insecure. Old versions are. I still don&#8217;t like it for other reasons, like performance. Simply using it as an example.</p>
<p>But if you decide to not use a plugin or a theme, delete the damn thing so it&#8217;s presence doesn&#8217;t even exist. In the case of Timthumb, the security flaw wasn&#8217;t a WordPress exploit. It was a &#8220;PHP directly interacting with the system&#8221; exploit and it would be there anywhere else regardless of CMS. It could exist on a static site.</p>
<p>And it&#8217;s not just your site at risk. Fuck your site. What if that flaw in whatever flawed code existed woke up a <a href="http://en.wikipedia.org/wiki/Botnet">botnet</a>? Then everyone is at risk. I&#8217;m at risk. You and your silly site are at risk. Joe the plumber&#8217;s site is at risk. Thoretically.</p>
<p>So be responsible. Delete unused code from your site. Remove themes you don&#8217;t use. Delete plugins you don&#8217;t use. </p>
<p>And when I say delete, I mean, permanently delete. Don&#8217;t just deactivate.</p>
<p>The Internet thanks you.</p>
<p><strong>Update:</strong> This is not a verdict on any plugin or theme. To my knowledge, most are perfectly fine. Just clarifying that this is a &#8220;just in case&#8221; precaution.</p>
]]></content:encoded>
			<wfw:commentRss>http://technosailor.com/2012/06/19/eliminate-unused-wordpress-plugins/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<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 [&#8230;]]]></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="500"><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="500" height="281" 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 changes 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>24</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>

		<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. [&#8230;]]]></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 [&#8230;]]]></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>
	</channel>
</rss>
