<?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>alexking.org &#187; WordPress</title>
	<atom:link href="http://alexking.org/blog/topic/wordpress/feed" rel="self" type="application/rss+xml" />
	<link>http://alexking.org</link>
	<description>Alex King, Denver Web Developer</description>
	<lastBuildDate>Fri, 25 May 2012 00:40:02 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Social 2.5 Sketches</title>
		<link>http://alexking.org/blog/2012/05/23/social-2-5-sketches</link>
		<comments>http://alexking.org/blog/2012/05/23/social-2-5-sketches#comments</comments>
		<pubDate>Wed, 23 May 2012 21:15:21 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Case Studies]]></category>
		<category><![CDATA[Crowd Favorite]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://alexking.org/?p=13558</guid>
		<description><![CDATA[I&#8217;ve already professed my love for Paper1, and one of my primary usages is for wireframing UX models. I used it for a few of the improvments we added in Social 2.5, and thought it might be fun to share a couple of them here. One of the biggest changes we made was an overhaul&#8230;]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve already <a href="http://alexking.org/blog/2012/03/31/on-paper">professed my love for Paper</a><sup id="fnref:1"><a href="#fn:1" rel="footnote">1</a></sup>, and one of my primary usages is for wireframing UX models. I used it for a few of the improvments we added in <a href="http://alexking.org/blog/2012/05/22/social-2-5">Social 2.5</a>, and thought it might be fun to share a couple of them here.</p>
<p>One of the biggest changes we made was an overhaul of the Broadcasting screen. Here is the &#8220;before&#8221; version: <span id="more-13558"></span></p>
<p><img src="http://alexking.org/wp-content/uploads/2012/05/broadcast-before-510x436.png" alt="Broadcast Social 2.0" width="510" height="436" class="alignnone size-medium-img wp-image-13566" /></p>
<p>This worked OK, but you can see a few problems:</p>
<ul>
<li>You can&#8217;t send different messages to different accounts on the same service. This was something I wanted to be able to do, to have different voicing on @alexkingorg and @crowdfavorite.</li>
<li>Facebook pages aren&#8217;t visible by default.</li>
<li>The character counter limit indicator is too far away from the textarea it is reflecting.</li>
</ul>
<p>So we worked on some different approaches. These are pretty close to what we shipped in version 2.5:</p>
<p><img src="http://alexking.org/wp-content/uploads/2012/05/braodcast-01-510x382.jpg" alt="Broadcast sketch" width="510" height="382" class="alignnone size-medium-img wp-image-13563" /></p>
<p><img src="http://alexking.org/wp-content/uploads/2012/05/broadcast-02-510x382.jpg" alt="Broadcast sketch" width="510" height="382" class="alignnone size-medium-img wp-image-13564" /></p>
<p>And here is the version that shipped:</p>
<p><img src="http://alexking.org/wp-content/uploads/2012/05/broadcast-after-555x700.png" alt="Broadcast Social 2.5" width="510" height="643" class="alignnone size-large-img wp-image-13565" /></p>
<p>We also made some significant UI changes to the way accounts are managed on the admin side. Here is the &#8220;before&#8221; version.</p>
<p><img src="http://alexking.org/wp-content/uploads/2012/05/accounts-before-510x458.png" alt="Accounts Social 2.0" width="510" height="458" class="alignnone size-medium-img wp-image-13562" /></p>
<p>Again, functional but can be improved. In particular I wanted to consolidate this into a single list rather than having one place to add/remove accounts and a separate place to indicate the default accounts. Also, you can see the problem (again) of pages not being shown by default.</p>
<p>This concept allowed the two lists to be combined into one:</p>
<p><img src="http://alexking.org/wp-content/uploads/2012/05/accounts-01-510x382.jpg" alt="Accounts sketch" width="510" height="382" class="alignnone size-medium-img wp-image-13560" /></p>
<p>And what we shipped was pretty darn close to that:</p>
<p><img src="http://alexking.org/wp-content/uploads/2012/05/accounts-after-510x369.png" alt="" title="Accounts Social 2.5" width="510" height="369" class="alignnone size-medium-img wp-image-13561" /></p>
<p>In addition to making the admin screens more compact, this design also makes it easier to support more services in the future (Google+, etc.).</p>
<p>So there you have it, a little &#8220;behind the scenes&#8221; fun. I definitely recommend incorporating sketching and wireframing into your design process, it&#8217;s been a huge help for us as we brainstorm, discuss ideas, etc.</p>
<div class="footnotes">
<hr />
<ol>
<li id="fn:1">
Speaking of which, I hope we&#8217;re due for an update here soon.&#160;<a href="#fnref:1" rev="footnote">&#8617;</a>
</li>
</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://alexking.org/blog/2012/05/23/social-2-5-sketches/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Social 2.5</title>
		<link>http://alexking.org/blog/2012/05/22/social-2-5</link>
		<comments>http://alexking.org/blog/2012/05/22/social-2-5#comments</comments>
		<pubDate>Tue, 22 May 2012 17:27:50 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Crowd Favorite]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://alexking.org/?p=13494</guid>
		<description><![CDATA[I&#8217;m very pleased to share version 2.5 of Social with you. Brought to you by our good friends at MailChimp (see their blog post), Social is a WordPress plugin that connects your WordPress site to Twitter and Facebook in really interesting ways. Here are the high level bullet points: easily connect your Twitter and Facebook&#8230;]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m very pleased to share version 2.5 of <a href="http://wordpress.org/extend/plugins/social/">Social</a> with you. Brought to you by our good friends at <a href="http://mailchimp.com">MailChimp</a> (see their <a href="http://blog.mailchimp.com/social-plugin-wordpress-updated/">blog post</a>), Social is a WordPress plugin that connects your WordPress site to Twitter and Facebook in really interesting ways.</p>
<p>Here are the high level bullet points:</p>
<ul>
<li>easily connect your Twitter and Facebook accounts (no need to create apps through their developer sites and copy keys around &#8211; this feature enabled directly by MailChimp)</li>
<li>allow any other authors on your site to broadcast their own accounts, as well as to any global accounts for the site</li>
<li>broadcast your posts to Twitter and Facebook (with customized messages for each account)</li>
<li>pull social reactions on Twitter and Facebook back in to your site as comments (this could be liking or retweeting your broadcast, replying with a comment, or just tweeting a link to your post)</li>
<li>ability to reply to these social reactions from your WordPress site and send them back to the appropriate social network (keep the conversation going)</li>
<li>your site visitors can authenticate with their Twitter or Facebook accounts when commenting (and they can optionally post their comment back to their social networks)</li>
</ul>
<p>Pretty good feature list, right? Social also has a couple of great collateral features. When used in conjunction with the &#8220;users must be logged in to comment&#8221; feature of WordPress, you can choose to require your commentors to attach a more meaningful (and verified) identity with their comments. Removing anonymous noise from the mix always raises the level of debate.</p>
<p>Social also allows your site to be <em>the</em> place for your content. You can bring in conversations from both Facebook and Twitter back to your site, while still participating in the conversations on those social networks. Engage with people where they want to engage, but do so while providing a richer cross-network experience on your own site.</p>
<p>That&#8217;s Social in a nutshell. Which brings us to the &#8220;what&#8217;s new in this version&#8221; list. I did most of the coding on this release so I&#8217;m hardly unbiased, but I&#8217;m pretty darn pleased with the way this version has shaped up. I&#8217;ve been using development builds on this site for a bit now, and I really like the way the new features have removed that last little bit of friction from some of my more common interactions.</p>
<p>Before we launch into what&#8217;s new, I&#8217;d like to take a moment to point out that Social is built entirely in the open <a href="https://github.com/crowdfavorite/wp-social">on GitHub</a>. Developers, please send us awesome pull requests.</p>
<h2>Facebook Improvements</h2>
<p>I think some of the best changes in this version are in the improvements to interactions with Facebook. By default, when a post is broadcast it is sent as a link rather than a status post; regardless of if it has a featured image or not. The obvious exception here is for posts that have a status post format &#8211; those are still sent as status posts. To try to make this interaction clear, we show a nice preview of how the post will look on Facebook on the broadcast screen.</p>
<p><img src="http://alexking.org/wp-content/uploads/2012/05/facebook-link-510x186.gif" alt="" title="Facebook Broadcast a Link" width="510" height="186" class="alignnone size-medium-img wp-image-13529" /></p>
<p>When comments are broadcast to Facebook, we try to do the Right Thing with it. There are two options:</p>
<ol>
<li>The comment is replying to an existing comment thread and we should post it back to the same thread in Facebook. If this is the case, we try to do so. If for some reason (permissions, etc.) we aren&#8217;t able to do so, then we fall back on option 2&#8230;</li>
<li>Post the comment with a link to the post to the commentor&#8217;s timeline. It makes more sense. Their comment is on the link, and the link is posted right along with it. This should make the posts going back to Facebook more meaningful.</li>
</ol>
<p>We also take the step of auto-selecting the &#8220;Post to Facebook&#8221; checkbox under the following conditions:</p>
<ul>
<li>The (admin/author) user has a Facebook profile attached to their account.</li>
<li>The comment they have clicked &#8220;reply&#8221; was imported from (or was broadcast to) Facebook.</li>
</ul>
<p><img src="http://alexking.org/wp-content/uploads/2012/05/facebook-comment-reply-510x315.gif" alt="" title="Facebook Comment Reply" width="510" height="315" class="alignnone size-medium-img wp-image-13528" /></p>
<p>Social does this all for you &#8211; just hit reply, type your message and send. This feature is important to keep the conversation running easily on both Facebook and your WordPress site.</p>
<h2>Twitter Improvements</h2>
<p>Twitter integration got some nice improvements in this version as well. You were previously able to import tweets as comment directly by URL, but now you can do this from the front-end as well. Use the menu we add in the admin bar under the Comments item to bring in tweets directly (and look for social comments). This is really useful for bringing in replies to replies or other tweets that are part of the conversation, but not something that Social will pick up by default. Note that you have to be on a single post (permalink) view for this to be available.</p>
<p><img src="http://alexking.org/wp-content/uploads/2012/05/twitter-add-tweet-510x365.gif" alt="" title="Add Tweet" width="510" height="365" class="alignnone size-medium-img wp-image-13532" /></p>
<p>One of the use cases that I think makes Social really interesting is the way it allows your WordPress site to interact with real-time happenings on Twitter. Did someone tweet something that prompted you to write a blog post? You can send your broadcast tweet as a reply to that user.</p>
<p><img src="http://alexking.org/wp-content/uploads/2012/05/twitter-reply-510x125.gif" alt="" title="Send as Reply" width="510" height="125" class="alignnone size-medium-img wp-image-13531" /></p>
<p>Tip: Make sure to include their @username in the tweet so that they see it as you expect.</p>
<p>We also improved the Twitter comment detection to auto-select the account that a tweet was directed to when replying to an imported comment. Huh? Basically, if @someoneelse sends a tweet to @yourusername and Social brings that in as a comment, Social will also select your @yourusername and check the &#8220;post to Twitter&#8221; box when you hit the Reply link for that comment. It also inserts @someoneelse into the comment box so that you can start writing your reply.</p>
<p>The last significant change we made is to widen the net a little and catch specific types of Twitter replies, then import them as comments. The scenario is basically this:</p>
<ol>
<li>You broadcast a post.</li>
<li>Someone replies to your post, this is imported as a comment on your site.</li>
<li>You reply to that comment on your site, and broadcast it back to Twitter.</li>
<li>The other person (or multiple people) reply to that comment.</li>
</ol>
<p>Previously we would have missed automatically importing the replies in step 4 above. Now we catch them.</p>
<p><img src="http://alexking.org/wp-content/uploads/2012/05/twitter-auto-post-reply-618x700.png" alt="" title="Twitter Conversation" width="510" height="577" class="alignnone size-large-img wp-image-13530" /></p>
<p>We walk a fine line with the amount of content we try to find and import. In particular we want to make sure we don&#8217;t set up rules that allow Social to use up all of your API requests checking for comments on your broadcasts. However, we do want to bring in as many relevant reactions as we can. We were able to make this change without requiring an additional API hit. We are able to look for additional data in the API requests we were already making.</p>
<h2>General Improvements</h2>
<p>You can now send customized broadcasts to each account in a single action &#8211; each account has its own form that you can edit. By default, the first broadcast message for each service (Facebook, Twitter) is editable while any others are in &#8220;copycat&#8221; mode. They will all be updated along with the edits to the first message unless you click the <strong>Edit</strong> link for the ones you want to customize. We think this is a good compromise between convenience and control, and hope you like how it works.</p>
<p>The account management forms have been streamlined and cleaned up, on both the main Social settings screen and the user profile screen. For example, Facebook pages are always displayed so they can be selected, etc. We also consolidated the selection of &#8220;default&#8221; accounts into the main accounts list. We hope this makes these pages easier to understand and use.</p>
<p>Some of you have post broadcasts that get a <em>ton</em> of Likes and Retweets. These are cool to see in the (condensed view in the) comments list, but not as meaningful in the comments RSS/Atom feeds that WordPress generates. We&#8217;ve added some code to suppress these types of &#8220;meta&#8221; comments in the feeds.</p>
<p>When you have lots of comments, they come with a lot of in-page image requests. This can cause your site to load more slowly than you&#8217;d like, so we implemented support for the <a href="http://wordpress.org/extend/plugins/lazy-load/">Lazy Load plugin</a>. Install and enable this plugin, and the avatars for your Social comments only load when scrolled into view.</p>
<p>Social now functions as a platform for other social WordPress plugins. You can choose to disable any features that you don&#8217;t want on your site and just use the connections to social networks. Expect a new release of Twitter Tools, built on Social, very soon.</p>
<p>Of course we also fixed all of the bugs we were able to reproduce. This includes making Facebook comment importing more consistent, along with a number of other fixes and improvements.</p>
<hr />
<p>A quick word about Google+ integration (by far the most requested feature &#8211; <a href="https://github.com/crowdfavorite/wp-social/issues/9">tracked here</a>). It&#8217;s something we want to do and plan to do, but until Google+ has a write API we can&#8217;t attain feature parity with our Facebook and Twitter integrations. My guess? We&#8217;ll see a Google+ API featured next month at <a href="https://developers.google.com/events/io/">Google I/O</a>.</p>
<hr />
<p>Want to build cool WordPress integrations like this? <a href="http://crowdfavorite.com/jobs/">We&#8217;re hiring</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://alexking.org/blog/2012/05/22/social-2-5/feed</wfw:commentRss>
		<slash:comments>44</slash:comments>
		</item>
		<item>
		<title>Social 2.5 beta 2</title>
		<link>http://alexking.org/blog/2012/05/17/social-2-5-beta-2</link>
		<comments>http://alexking.org/blog/2012/05/17/social-2-5-beta-2#comments</comments>
		<pubDate>Thu, 17 May 2012 21:44:01 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Crowd Favorite]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://alexking.org/?p=13488</guid>
		<description><![CDATA[We&#8217;re just about ready to put a bow on version 2.5 of Social. If you&#8217;d like to test the second beta release, grab it from GitHub. Social is a plugin that allows you to maintain a centralized conversation on your site, while also participating in conversations on Facebook and Twitter.]]></description>
			<content:encoded><![CDATA[<p>We&#8217;re just about ready to put a bow on version 2.5 of Social. If you&#8217;d like to test the second beta release, <a href="https://github.com/crowdfavorite/wp-social/zipball/2.5b2">grab it from GitHub</a>.</p>
<p>Social is a plugin that allows you to maintain a centralized conversation on your site, while also participating in conversations on Facebook and Twitter.</p>
]]></content:encoded>
			<wfw:commentRss>http://alexking.org/blog/2012/05/17/social-2-5-beta-2/feed</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>WP App Store</title>
		<link>http://alexking.org/blog/2012/05/15/wp-app-store</link>
		<comments>http://alexking.org/blog/2012/05/15/wp-app-store#comments</comments>
		<pubDate>Tue, 15 May 2012 21:18:59 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Crowd Favorite]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://alexking.org/?p=13463</guid>
		<description><![CDATA[Congratulations to Brad on today&#8217;s launch of WP App Store. I&#8217;m very pleased to see this come to life. It&#8217;s an idea we toyed around with several years ago, but decided not to pull the trigger on &#8211; I hope it&#8217;s a huge success. We&#8217;ve put our FavePersonal and FaveBusiness themes along with our RAMP&#8230;]]></description>
			<content:encoded><![CDATA[<p><img src="http://alexking.org/wp-content/uploads/2012/05/wpappstore-510x386.jpg" alt="" title="WP App Store" width="510" height="386" class="alignnone size-medium-img wp-image-13468" /></p>
<p>Congratulations to <a href="http://bradt.ca/">Brad</a> on today&#8217;s launch of <a href="http://wpappstore.com">WP App Store</a>. I&#8217;m very pleased to see this come to life. It&#8217;s an idea we toyed around with several years ago, but decided not to pull the trigger on &#8211; I hope it&#8217;s a huge success.</p>
<p><img src="http://alexking.org/wp-content/uploads/2012/05/wpappstore-themes-510x315.jpg" alt="Crowd Favorite Themes" title="Crowd Favorite Themes" width="510" height="315" class="alignnone size-medium-img wp-image-13465" /></p>
<p>We&#8217;ve put our <a href="http://crowdfavorite.com/wordpress/themes/favepersonal/">FavePersonal</a> and <a href="http://crowdfavorite.com/wordpress/themes/favebusiness/">FaveBusiness</a> themes along with our <a href="http://crowdfavorite.com/wordpress/ramp/">RAMP</a> plugin into the app store. If you&#8217;d like to check it out, download the plugin and start browsing. There is a great group of companies represented already and I&#8217;m sure we&#8217;ll see more additions as the project grows.</p>
]]></content:encoded>
			<wfw:commentRss>http://alexking.org/blog/2012/05/15/wp-app-store/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>RAMP v1.0.4 Released</title>
		<link>http://alexking.org/blog/2012/04/30/ramp-v1-0-4-released</link>
		<comments>http://alexking.org/blog/2012/04/30/ramp-v1-0-4-released#comments</comments>
		<pubDate>Tue, 01 May 2012 00:19:08 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Crowd Favorite]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://alexking.org/?p=13366</guid>
		<description><![CDATA[We pushed out an update to RAMP today, our WordPress plugin that makes it easy for you to stage content for review in one environment, then push it to your production server once it&#8217;s ready to go. As the version number indicates, this release is primarily to deliver a few bug fixes. Here is a&#8230;]]></description>
			<content:encoded><![CDATA[<p>We pushed out an update to <a href="http://crowdfavorite.com/wordpress/ramp/">RAMP</a> today, our WordPress plugin that makes it easy for you to stage content for review in one environment, then push it to your production server once it&#8217;s ready to go.</p>
<p>As the version number indicates, this release is primarily to deliver a few bug fixes. Here is a quick overview of the significant changes:</p>
<ul>
<li>improved compatibility with changes introduced in WordPress 3.3</li>
<li>properly handle entirely numeric category and tags names</li>
<li>improved support for hierarchical taxonomies</li>
<li>misc. cleanup of PHP notices (when the WordPress DEBUG setting is enabled)</li>
<li>minimum required WordPress version is now 3.3</li>
</ul>
<p>For a little more detail about just what this product is all about, check out my <a href="http://alexking.org/blog/2011/07/20/ramp-content-deploy-wordpress">original post announcing RAMP</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://alexking.org/blog/2012/04/30/ramp-v1-0-4-released/feed</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Cart66 Vulnerability Follow-up</title>
		<link>http://alexking.org/blog/2012/04/17/cart66-vulnerability-follow-up</link>
		<comments>http://alexking.org/blog/2012/04/17/cart66-vulnerability-follow-up#comments</comments>
		<pubDate>Tue, 17 Apr 2012 17:33:01 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://alexking.org/?p=13227</guid>
		<description><![CDATA[Cart66 released a new version this morning, addressing the vulnerability I posted about yesterday. A one-day turn-around to address a security issue is excellent (even if the stink from 9 months of inattention hasn&#8217;t fully dissipated yet). I&#8217;m disappointed I had to resort to a public warning to get action but glad that action was&#8230;]]></description>
			<content:encoded><![CDATA[<p>Cart66 <a href="http://cart66.com/2012/cart66-vulnerability-fixed/">released a new version</a> this morning, addressing the <a href="http://alexking.org/blog/2012/04/16/warning-cart66-vulnerability">vulnerability I posted about yesterday</a>. A one-day turn-around to address a security issue is excellent (even if the stink from 9 months of inattention hasn&#8217;t fully dissipated yet). I&#8217;m disappointed I had to resort to a public warning to get action but glad that action was taken (and glad to see the Cart66 folks making the right general noises about the importance of security).</p>
<p>While I&#8217;m glad a new version is out to address the vulnerability, I think it was a mistake to release any information about the nature of the exploit today (the same day that the fix is available). I would have favored:</p>
<ol>
<li>Release the new version with the explanation that this fixes a security vulnerability and everyone should upgrade right away.</li>
<li>Wait for a week to allow your customers time to upgrade.</li>
<li><em>Then</em> release the details of the exploit.</li>
</ol>
<p>As a customer, I&#8217;m surprised I haven&#8217;t (as of this writing) received a notification warning me of the vulnerability and urging me to upgrade.<sup id="fnref:1"><a href="#fn:1" rel="footnote">1</a></sup> I believe it&#8217;s the responsibility of a software provider to reach out to their customers to warn them about security issues before disclosing the details of them publicly.</p>
<p>Cart66 has already generally disclosed what the vulnerability is, but they didn&#8217;t go into much detail about how it could be exploited. The &#8220;black hat&#8221; folks will likely figure it out anyway, but I&#8217;m going to hold off sharing any details of it until next week. I think it is appropriate to outline how this can be exploited to help provide some context to Cart66 customers, but I don&#8217;t want to be the one making it more likely that people will exploit the vulnerability on their sites.</p>
<hr />
<p>While I am generally willing to take the explanation of how this vulnerability was allowed to remain unaddressed for such a long time at face value, I also believe this shows a fundamental lack of emphasis on security throughout the Cart66 organization. Someone received my email, replied that this was already a known problem, then nothing happend. Who knows, perhaps the people involved with that response aren&#8217;t even with the company anymore, but I&#8217;m pretty darn sure that this wouldn&#8217;t happen in my shop. A security vulnerability is a &#8220;Drop everything, get it patched and get a new release out. NOW!&#8221; situation. I will take them at their word that they are working to address this internally, but I&#8217;m still not comfortable with what their response (or lack thereof) says about their culture.</p>
<p>If I were advising the Cart66 team, I would tell them they need to take additional steps to make it clear to their customers that they are taking security seriously. I would recommend hiring <a href="http://coveredwebservices.com/">Mark Jaquith</a> (or another reputable consultant or firm) to do a full security audit of their code and product architecture.</p>
<p>I would also create and publish a process by which developers can responsibly submit security concerns, patches, etc. This should be easy to find on the Cart66 website.</p>
<p>Lastly, I would establish the process by which security issues are communicated to customers (a mailing list, or similar). In the case of responsibly disclosed vulnerabilities, this should include giving customers reasonable time to upgrade before publishing any details of an exploit.</p>
<p>All software has bugs, and some of these bugs have security ramifications. How you deal with them (and how you work with your customers when they are found) is what builds or destroys your reputation.</p>
<div class="footnotes">
<hr />
<ol>
<li id="fn:1">
I did receive an email response to my ticket about the new release, but that didn&#8217;t go to all customers&#160;<a href="#fnref:1" rev="footnote">&#8617;</a>
</li>
</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://alexking.org/blog/2012/04/17/cart66-vulnerability-follow-up/feed</wfw:commentRss>
		<slash:comments>21</slash:comments>
		</item>
		<item>
		<title>Warning: Cart66 Vulnerability</title>
		<link>http://alexking.org/blog/2012/04/16/warning-cart66-vulnerability</link>
		<comments>http://alexking.org/blog/2012/04/16/warning-cart66-vulnerability#comments</comments>
		<pubDate>Mon, 16 Apr 2012 20:27:20 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://alexking.org/?p=13203</guid>
		<description><![CDATA[UPDATE: Please see this follow-up post. Last summer we were working on an e-commerce site that integrated Cart66 with WordPress. As part of the development effort there, my team at Crowd Favorite discovered a vulnerability in Cart66. We reported this to the Cart 66 team on July 11, 2011 and received the following response on&#8230;]]></description>
			<content:encoded><![CDATA[<p><strong>UPDATE</strong>: Please see this <a href="http://alexking.org/blog/2012/04/17/cart66-vulnerability-follow-up">follow-up post</a>.</p>
<p>Last summer we were working on an e-commerce site that integrated Cart66 with WordPress. As part of the development effort there, my team at <a href="http://crowdfavorite.com">Crowd Favorite</a> discovered a vulnerability in Cart66.</p>
<p>We reported this to the Cart 66 team on July 11, 2011 and received the following response on July 12, 2011:</p>
<blockquote><p>Alex,<br />
We are aware of this issue and are working on a solution. I dont have a date for the fix but we&#8217;ll keep you posted.</p></blockquote>
<p>Last week (on April 10, 2012) I received the following email:</p>
<blockquote><p>Hello Alex,</p>
<p>We haven&#8217;t heard from you in 3 or more weeks so we are going to go ahead and solve this ticket. Do not hesitate to reply if you have any further questions.</p></blockquote>
<p>My guess is that this is an automated email generated by their ticket system, but it reminded me I&#8217;d never properly followed up on the issue. We tested the current version of Cart66 (version 1.4.5) and the vulnerability is still present.</p>
<p>At WordCamp San Francisco last summer I posed a question during the Q&amp;A session to get input from others on the best way to handle this situation. The agreed on course of action was to:</p>
<ol>
<li>Responsibly disclose the issue privately to the developer.</li>
<li>Give the developer time to address the issue.</li>
<li>Go public with the information if the issue is not addressed (it&#8217;s more important to let the users of the software know about the issue than it is to extend any &#8220;security by obscurity&#8221;).</li>
</ol>
<p>As such, we plan to release the details of this vulnerability in two weeks (on April 30th).</p>
<p>We sincerely hope that the Cart66 team will address the vulnerability with a release that fixes the issue before this time (and responsibly notify their customers of the issue and the importance of upgrading). However, given the overall lack of response we&#8217;ve seen from the Cart66 team on this issue, my recommendation would be to evaluate other e-commerce solutions.</p>
]]></content:encoded>
			<wfw:commentRss>http://alexking.org/blog/2012/04/16/warning-cart66-vulnerability/feed</wfw:commentRss>
		<slash:comments>44</slash:comments>
		</item>
		<item>
		<title>Streamline FavePersonal with a Child Theme</title>
		<link>http://alexking.org/blog/2012/03/28/streamline-favepersonal-with-a-child-theme</link>
		<comments>http://alexking.org/blog/2012/03/28/streamline-favepersonal-with-a-child-theme#comments</comments>
		<pubDate>Wed, 28 Mar 2012 21:27:22 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Crowd Favorite]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://alexking.org/?p=13069</guid>
		<description><![CDATA[We&#8217;ve just released version 1.0.1 of FavePersonal, which has a few minor updates. There&#8217;s one in particular that I think will be particularly useful: we&#8217;ve added a link to download a the style.css file you need to create a child theme (with your currently selected colors) from the Theme Settings page in FavePersonal. While I&#8217;m&#8230;]]></description>
			<content:encoded><![CDATA[<p>We&#8217;ve just released version 1.0.1 of <a href="http://crowdfavorite.com/wordpress/themes/favepersonal/">FavePersonal</a>, which has a few minor updates. There&#8217;s one in particular that I think will be particularly useful: we&#8217;ve added a link to download a the style.css file you need to create a child theme (with your currently selected colors) from the Theme Settings page in FavePersonal.</p>
<p>While I&#8217;m mainly using the &#8220;out of the box&#8221; features of FavePersonal, I have applied a number of customizations to this site. A <a href="http://codex.wordpress.org/Child_Themes">child theme</a> is a great way to customize a theme and still be able to upgrade without losing your changes. For the customizations I&#8217;ll be sharing about FavePersonal, we need a very simple child theme &#8211; just a <code>style.css</code> file and a <code>functions.php</code> file.<sup id="fnref:1"><a href="#fn:1" rel="footnote">1</a></sup></p>
<p>One of the things I&#8217;m using my child theme for is to streamline the HTML I deliver for my pages. I haven&#8217;t changed the colors for this site in nearly 10 years, so it&#8217;s safe to say I&#8217;m not planning to tinker with them much going forward. Since I don&#8217;t need the flexibility of being able to swap out the <a href="http://alexking.org/blog/2012/03/23/favepersonal-colors">colors</a>, I moved the CSS rules for the colors out of the HTML and into my child theme.</p>
<p>The first thing you&#8217;ll want to do is download the <code>style.css</code> file from your Theme Settings page. (Don&#8217;t have FavePersonal yet? Check out the <a href="http://demo.crowdfavorite.com/favepersonal/">online demo</a>.) This gives us our colors, so now we just need to remove the CSS from the HTML.</p>
<p>In the <code>functions.php</code> file in your child theme, you&#8217;ll want to add the following code to remove the output of the CSS rules from being added to your HTML.</p>
<p><script src="https://gist.github.com/2210020.js"></script><noscript><p>View the code on <a href="https://gist.github.com/2210020">Gist</a>.</p></noscript></p>
<p>Now you can activate your child theme and your site should look just the same, but load a touch faster (and give you a nice place to make future customizations).</p>
<hr />
<p>Another little change I made in my child theme is to add actual underlines (gasp) to links. I don&#8217;t think I&#8217;ve met a designer in the last five years who still uses underlines in their designs, but I&#8217;m  <img src="http://alexking.org/wp-content/themes/alexking.org-v3/smilies/ak_scare1.gif" alt=":scare:" class="wp-smiley" />  old school  <img src="http://alexking.org/wp-content/themes/alexking.org-v3/smilies/ak_scare2.gif" alt=":/scare:" class="wp-smiley" /> , I like underlines on my links. I think it helps them stand out better. However I do agree that underlines clutter up areas where things are expected to be clickable (navigation menus, lists, etc.), so I&#8217;m just adding the underlines to links in the content area of the site.</p>
<p>Want to underline the links in your FavePersonal site as well? Grab this CSS snippet and paste it into the <code>style.css</code> for your child theme.</p>
<p><script src="https://gist.github.com/2208465.js"></script><noscript><p>View the code on <a href="https://gist.github.com/2208465">Gist</a>.</p></noscript></p>
<p>And there you go &#8211; a few simple customizations for your FavePersonal child theme.</p>
<div class="footnotes">
<hr />
<ol>
<li id="fn:1">
FavePersonal customers, see <a href="http://crowdfavorite.com/wordpress/themes/favepersonal/docs/customization/creating-a-child-theme/">Creating a Child Theme</a> &#8211; we&#8217;ll be continually expanding the customization section of our documentation.&#160;<a href="#fnref:1" rev="footnote">&#8617;</a>
</li>
</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://alexking.org/blog/2012/03/28/streamline-favepersonal-with-a-child-theme/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>FavePersonal: Colors</title>
		<link>http://alexking.org/blog/2012/03/23/favepersonal-colors</link>
		<comments>http://alexking.org/blog/2012/03/23/favepersonal-colors#comments</comments>
		<pubDate>Fri, 23 Mar 2012 13:58:36 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Crowd Favorite]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://alexking.org/?p=12962</guid>
		<description><![CDATA[One of the most fun features of FavePersonal is experimenting with different color palettes. We&#8217;ve made it easy to experiment with different colors and find a set that makes your site feel like it&#8217;s your own. No need to fiddle through dozens of color pickers, you can choose from full color palettes, preview them, and&#8230;]]></description>
			<content:encoded><![CDATA[<p>One of the most fun features of <a href="http://crowdfavorite.com/wordpress/themes/favepersonal/">FavePersonal</a> is experimenting with different color palettes.</p>
<p><iframe width="510" height="287" src="http://www.youtube.com/embed/gGRGfY-6jos?fs=1&#038;feature=oembed" frameborder="0" allowfullscreen></iframe></p>
<p>We&#8217;ve made it easy to experiment with different colors and find a set that makes your site feel like it&#8217;s your own. No need to fiddle through dozens of color pickers, you can choose from full color palettes, preview them, and instantly apply them to your site.</p>
<p>You can browse through existing color combinations to find some initial inspiration. Use the tabs at the top (and the pagination links at the bottom) to navigate through the most popular, highest rated and newest palettes, or just look at a random set. Not seeing anything that grabs you? Try a search. For example, &#8220;desert rose&#8221; will bring back just what you might expect.</p>
<p><img src="http://alexking.org/wp-content/uploads/2012/03/Screen-Shot-2012-03-23-at-7.04.51-AM-510x480.png" alt="FavePersonal Color Settings" title="FavePersonal Color Settings" width="510" height="480" class="aligncenter size-medium-img wp-image-13010" /></p>
<p>Whenever you see a palette you think looks interesting, just click the Preview button to see how it might look applied to FavePersonal. If you like what you see, you can Select it to move that palette to the selected colors area at the top of the screen. From there, just hit Save Changes, and the color palette will be applied to your site.</p>
<p>But maybe you&#8217;ve found a color palette that is <em>almost</em> right, but you want to tweak it a little bit. No problem. Once the palette is selected (shown at the top of the colors screen) you can customize it however you like.</p>
<p>The first thing you may want to experiment with is how the colors are applied to different areas of the FavePersonal theme. FavePersonal takes the color from each of the five positions and puts it into a specific areas in the site. This is done in a way that should provide an appropriate amount of contrast between different elements on the site (but you&#8217;ll see that some themes work better than others). By clicking and dragging on the colors to re-order them, you can have them applied to different areas of your site. Click the Preview button to see how things look after moving them around.</p>
<p>When you have the colors applied to the areas of the site in a way that you like, you might want to apply a few tweaks (or maybe you have an explicit color scheme you want to enter). No problem. Click on each of the colors to reveal a full color picker where you can make minor adjustments (I want a darker or lighter share of blue here) or just choose another color altogether. Then click Preview to get an idea how it might look, and Save Changes to apply it to your site.</p>
<p>Have you come up with an original color combination that you love? Add it to <a href="http://kuler.adobe.com/">Adobe Kuler</a> and you&#8217;ll be able to re-apply it to your site easily by using the search feature (you can search for your username or the name of your palette).</p>
<p>I think we&#8217;ve succeeded in providing a good way for folks to choose good looking color schemes without &#8220;needing to be a designer&#8221;, while also providing the fine grain control that other folks (like me) want for their site.</p>
<p>While we were creating FavePersonal it was fun to see our team experimenting with the Colors feature and really getting sucked in to it &#8211; it&#8217;s a great way to <del>lose</del> spend a few hours.</p>
<p>Don&#8217;t take my word for it though, go try it out for yourself with our <a href="http://demo.crowdfavorite.com/favepersonal/">online demo</a> (click the Theme Admin button to log in).</p>
<hr />
<p>I think it was two or three years ago that I first had the idea for using color palettes with a theme in this way. I was pretty sure it would work, but hadn&#8217;t really seen it done in the manner I was imagining. I started doing some prototyping and ran into a snag.</p>
<p>In order to apply a color palette to a design with (generally) positive results, you need to be able to reasonably predict the colors that will have contrast between them. When looking at color palettes from a number of sources, I found that they came through without any particular ordering of the colors.</p>
<p>Step one became coming up with an algorithm that would work to get the colors sorted in a reasonable fashion. This is not a trivial problem, but interestingly the more complex we attempted to make the solution, the worse things got. Eventually, after running a few different approaches against a test set of color palettes, the most simple and naive approach seemed to yield the best results.</p>
<p>Basically I took the numeric value of the first digit of the RGB values from the hex color, add them together to get a total numeric value for each color, then sort the colors by that value.</p>
<p><script src="https://gist.github.com/2158428.js"></script><noscript><p>View the code on <a href="https://gist.github.com/2158428">Gist</a>.</p></noscript></p>
<p>I think this could be refined a little further, perhaps adding a slight bias towards blue or green over red in order to better handle cases where you might prefer certain colors that are close in &#8220;brightness&#8221; to be considered &#8220;darker&#8221; than others.<sup id="fnref:1"><a href="#fn:1" rel="footnote">1</a></sup> For FavePersonal I decided that it was better to handle this by allowing people to drag and drop to re-arrange the colors in the palette instead.</p>
<p>We&#8217;ve released the <a href="https://github.com/crowdfavorite/wp-colors">colors feature we created for FavePersonal on Github</a>. It&#8217;s a designer/developer tool as it&#8217;s not something that works as a stand-alone plugin, but it works quite nicely when integrated as a feature of a theme.</p>
<div class="footnotes">
<hr />
<ol>
<li id="fn:1">
Enhancements welcome, fork away!&#160;<a href="#fnref:1" rev="footnote">&#8617;</a>
</li>
</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://alexking.org/blog/2012/03/23/favepersonal-colors/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Announcing FavePersonal</title>
		<link>http://alexking.org/blog/2012/03/21/announcing-favepersonal</link>
		<comments>http://alexking.org/blog/2012/03/21/announcing-favepersonal#comments</comments>
		<pubDate>Wed, 21 Mar 2012 16:29:02 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Crowd Favorite]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://alexking.org/?p=12916</guid>
		<description><![CDATA[I&#8217;m very proud to announce the launch of FavePersonal; a WordPress theme designed for personal websites. I have been using (and building and testing) FavePersonal on this site since August of last year and I am very pleased with what we&#8217;ve created. The features for FavePersonal were driven by my goals for version three of&#8230;]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m very proud to announce the launch of <a href="http://crowdfavorite.com/wordpress/themes/favepersonal/">FavePersonal</a>; a WordPress theme designed for personal websites. I have been using (and building and testing) FavePersonal on this site since August of last year and I am very pleased with what we&#8217;ve created.</p>
<p><iframe width="510" height="287" src="http://www.youtube.com/embed/NDA4UJgeWGo?fs=1&#038;feature=oembed" frameborder="0" allowfullscreen></iframe></p>
<p>The features for FavePersonal were driven by my goals for version three of this site. I wanted the site to be personal, be a great showcase for my content and to integrate with my other social interactions online.</p>
<h3>Personal</h3>
<p>One of the features I know people will enjoy playing with is the Colors feature. Instead of fiddling with lots of different color pickers, you can select from thousands of existing color palettes (via Adobe Kuler integration) and instantly preview and apply the scheme to your site.</p>
<p>The header options and bio widget features were created to help tell the &#8220;this is who I am, and what this site is&#8221; story. Most visitors arrive on an internal site page via search engine or direct link. These features serve to provide some context about both you, and your site.</p>
<h3>All Kinds of Post Content</h3>
<p>With FavePersonal we have integrated our <a href="http://alexking.org/blog/2011/10/25/wordpress-post-formats-admin-ui">post formats admin UI</a> functionality to make it easy to post photos, galleries, videos, etc. Each of these types of content is elegantly managed and delivered, from the back-end admin interface all the way through to customized layouts appropriate for each type of content, and formatted elegantly for mobile devices (even extending to your RSS feeds).</p>
<p>See some examples on this site:</p>
<ul>
<li><a href="http://alexking.org/blog/type/status">Status posts</a></li>
<li><a href="http://alexking.org/blog/type/link">Link posts</a></li>
<li><a href="http://alexking.org/blog/type/image">Photo posts</a></li>
<li><a href="http://alexking.org/blog/type/gallery">Gallery posts</a> (be sure to check out a gallery post)</li>
<li><a href="http://alexking.org/blog/type/video">Video posts</a></li>
</ul>
<h3>Social</h3>
<p>If my site is going to represent me on the web, it&#8217;s not telling a complete story if it ignores my participation on other social networks. FavePersonal tightly integrates with (and includes) the <a href="http://wordpress.org/extend/plugins/social">Social plugin</a> to create a two way integration between your website, Twitter and Facebook. You can post status updates on your site then pass them on to your Twitter and Facebook accounts. Social will bring retweets, likes and reactions from those sites back to your site as comments.</p>
<p>Additionally, your visitors can log in with their social profiles when they comment directly on your site.</p>
<h3>Mobile-Friendly</h3>
<p>FavePersonal was designed from the ground up to be <a href="http://en.wikipedia.org/wiki/Responsive_Web_Design">responsive</a>. Not only does it look great on your computer, but also on your phone and tablet device.</p>
<p>Are you on a mobile browser now? Check out the <a href="http://demo.crowdfavorite.com/favepersonal/">online demo</a> and see how it works. Be sure to rotate and see how it adapts to portait and landscape orientations.</p>
<p>Of course it is optimized for fast page loads and also features clean HTML5 markup that is both human and machine (SEO) friendly.</p>
<hr />
<p>This is just a very brief sampling of what we&#8217;ve put into FavePersonal. We&#8217;ve been working on this theme for over a year.<sup id="fnref:1"><a href="#fn:1" rel="footnote">1</a></sup> We&#8217;ve given every feature a ton of thought, debate, tweaking, building, throwing away, re-building and testing to get things the way we want them. I&#8217;ve been told I can be a bit  <img src="http://alexking.org/wp-content/themes/alexking.org-v3/smilies/ak_scare1.gif" alt=":scare:" class="wp-smiley" />  particular  <img src="http://alexking.org/wp-content/themes/alexking.org-v3/smilies/ak_scare2.gif" alt=":/scare:" class="wp-smiley" /> , which is a kind way of saying I&#8217;m a pain in the arse and we&#8217;ll re-design things as many times as it takes to get it right. My team has been very patient with me, coming up with great ideas and solutions and building them in elegant ways. We&#8217;ve built deep features on solid foundations that won&#8217;t break or surprise you as you lean on them and come to rely on them.</p>
<p>I&#8217;m going to be following up with a series of posts that go into more detail about the various features of FavePersonal, discussing some of the design decisions we made, and sharing customizations I&#8217;ve put into my own child theme. I&#8217;ll also point to some of the code we&#8217;ve released on our <a href="https://github.com/crowdfavorite">GitHub account</a> for anyone who would be interested. I&#8217;ve got a pretty good sized list. <img src='http://alexking.org/wp/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>When I started using FavePersonal in August of last year (2011) it became the third version of this site since it launched in 2002 (check out original version from <a href="http://web.archive.org/web/20021109044131/http://www.alexking.org/">2002</a> and the <a href="http://alexking.org/blog/2006/11/02/building-v2-part1">previous version</a> from <a href="http://web.archive.org/web/20061230095513/http://alexking.org/">2006</a>). With each iteration I always received a number of &#8220;is your theme available?&#8221; inquiries. In the past, my themes have always been built with too many content assumptions, etc. for me to effectively share it, but I made sure we didn&#8217;t do that with FavePersonal.</p>
<p>Check out the <a href="http://crowdfavorite.com/wordpress/themes/favepersonal/">FavePersonal page</a> on the <a href="http://crowdfavorite.com">Crowd Favorite</a> website to see our feature videos, try out online demo and purchase (our new store<sup id="fnref:2"><a href="#fn:2" rel="footnote">2</a></sup> supports PayPal as well as credit cards).</p>
<p>I hope you like it as much as I do!</p>
<div class="footnotes">
<hr />
<ol>
<li id="fn:1">
Creating a robust WordPress theme is <a href="https://wpdevel.wordpress.com/2012/03/20/as-twenty-twelve-is-punted-to-3-5-it/">not a small undertaking</a>.&#160;<a href="#fnref:1" rev="footnote">&#8617;</a>
</li>
<li id="fn:2">
Powered by <a href="http://www.woothemes.com/woocommerce/">WooCommerce</a>.&#160;<a href="#fnref:2" rev="footnote">&#8617;</a>
</li>
</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://alexking.org/blog/2012/03/21/announcing-favepersonal/feed</wfw:commentRss>
		<slash:comments>38</slash:comments>
		</item>
		<item>
		<title>Sparrow for iPhone: Simple Failure</title>
		<link>http://alexking.org/blog/2012/03/15/sparrow-for-iphone-simple-failure</link>
		<comments>http://alexking.org/blog/2012/03/15/sparrow-for-iphone-simple-failure#comments</comments>
		<pubDate>Thu, 15 Mar 2012 20:22:39 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Rants]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://alexking.org/?p=12845</guid>
		<description><![CDATA[I&#8217;ve been excited to try Sparrow on my iPhone since I saw it announced last year. I haven&#8217;t been a fan of the desktop app as I&#8217;m so hopelessly dependent on MsgFiler with Mail.app to support my email workflow, but I was hoping that Sparrow on the iPhone would be an improvement over the included&#8230;]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been excited to try <a href="http://sparrowapp.com/">Sparrow</a> on my iPhone since I saw it announced last year. I haven&#8217;t been a fan of the desktop app as I&#8217;m so hopelessly dependent on <a href="http://msgfiler.com">MsgFiler</a> with Mail.app to support my email workflow, but I was hoping that Sparrow on the iPhone would be an improvement over the included iOS Mail app (especially if it had some kind of type-to-file support).</p>
<p><a href="http://itunes.apple.com/us/app/sparrow/id492573565?mt=8"><img src="http://alexking.org/wp-content/uploads/2012/03/Sparrow-Features-510x246.png" alt="" title="Sparrow Features" width="510" height="246" class="aligncenter size-medium-img wp-image-12858" /></a></p>
<p>So when I saw chatter about it last night, I went ahead and purchased right away. I don&#8217;t use GMail, but that shouldn&#8217;t be a problem since it has:</p>
<blockquote><p>Full IMAP support:<br />
Use your Gmail, Google Apps, iCloud, Yahoo, AOL, Mobile Me and custom IMAP accounts.</p></blockquote>
<p>When I launched the app, this is what I saw:</p>
<p><img src="http://alexking.org/wp-content/uploads/2012/03/Sparrow-Launch-200x300.png" alt="" title="Sparrow Launch" width="200" height="300" class="aligncenter size-medium wp-image-12854" /></p>
<p>Ok, that&#8217;s not what I need. I need a way to enter in my IMAP server and account details. But this isn&#8217;t too uncommon with a mail app. I&#8217;ll just enter in my details and wait for it to fail, then it will show me an &#8220;advanced&#8221; button or something to let me enter the server settings directly.</p>
<p class="center"><img src="http://alexking.org/wp-content/uploads/2012/03/Sparrow-Creds-200x300.png" alt="" title="Sparrow Creds" width="200" height="300" class="size-medium wp-image-12852" /> <img src="http://alexking.org/wp-content/uploads/2012/03/Sparrow-Fail-200x300.png" alt="" title="Sparrow Fail" width="200" height="300" class="size-medium wp-image-12853" /></p>
<p>Hmm, that&#8217;s not helpful. I&#8217;m not even trying to connect to Gmail.</p>
<p>I tried adding a Gmail account and going into the settings to see if I could adjust the mail server addresses manually from the account settings screen &#8211; no can do.</p>
<p>It appears that Sparrow&#8217;s only set-up path is to be clever and try to guess at what I need. Like most software with this approach, it fails in real world situations. It may be a great mobile mail app, but if I can&#8217;t get it to connect to my account it&#8217;s completely useless to me.</p>
<hr />
<p>Sparrow isn&#8217;t the only app that fails like this. The WordPress for iOS app fails in the same way. I believe the WordPress app tries to load an HTML page and look for some specific information (the XMLRPC URL) that it needs for communication (perhaps with a few guesses as well).</p>
<p>If you have a WordPress site that requires a login, your results to add that site to the WordPress iOS app will likely look something like this:</p>
<p><img src="http://alexking.org/wp-content/uploads/2012/03/WordPress-200x300.png" alt="" title="WordPress" width="200" height="300" class="aligncenter size-medium wp-image-12855" /></p>
<p>&#8220;Need Help?&#8221;</p>
<p>No, I need a damn text field!</p>
<p>I&#8217;m quite capable of typing in the XMLRPC URL myself (like I&#8217;ve done for other apps that post to my WordPress site) and I have no problem with that being an extra, manual step since my WordPress site is a little non-standard. However, that&#8217;s not an option.</p>
<p>I grow weary of people holding up Apple as an ideal of simplicity, trying to follow that model, but failing to properly account for real world usage in their clever  <img src="http://alexking.org/wp-content/themes/alexking.org-v3/smilies/ak_scare1.gif" alt=":scare:" class="wp-smiley" />  user friendly  <img src="http://alexking.org/wp-content/themes/alexking.org-v3/smilies/ak_scare2.gif" alt=":/scare:" class="wp-smiley" />  designs. When you place &#8220;simple&#8221; ahead of &#8220;functional&#8221;, you&#8217;ve failed.</p>
]]></content:encoded>
			<wfw:commentRss>http://alexking.org/blog/2012/03/15/sparrow-for-iphone-simple-failure/feed</wfw:commentRss>
		<slash:comments>21</slash:comments>
		</item>
		<item>
		<title>Carrington Themes on GitHub</title>
		<link>http://alexking.org/blog/2012/03/06/carrington-themes-on-github</link>
		<comments>http://alexking.org/blog/2012/03/06/carrington-themes-on-github#comments</comments>
		<pubDate>Wed, 07 Mar 2012 01:56:50 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Crowd Favorite]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://alexking.org/?p=12784</guid>
		<description><![CDATA[As part of our move to Git, we now host our WordPress code on GitHub. Carrington Core was moved over a while ago and I finally finished migrating the rest of the themes from their old home on Google Code. The themes are being renamed: Carrington Blog is becoming FaveBlog Carrington Text is becoming FaveText&#8230;]]></description>
			<content:encoded><![CDATA[<p>As part of our <a href="http://alexking.org/blog/2012/02/14/svn-to-git-migration">move to Git</a>, we now host our WordPress code on GitHub. <a href="https://github.com/crowdfavorite/wp-carrington-core">Carrington Core</a> was moved over a while ago and I finally finished migrating the rest of the themes from their <a href="http://code.google.com/p/carrington">old home on Google Code</a>.</p>
<p>The themes are being renamed:</p>
<ul>
<li>Carrington Blog is becoming <a href="https://github.com/crowdfavorite/wp-faveblog">FaveBlog</a></li>
<li>Carrington Text is becoming <a href="https://github.com/crowdfavorite/wp-favetext">FaveText</a></li>
<li>Carrington Mobile is becoming, you guessed it, <a href="https://github.com/crowdfavorite/wp-favemobile">FaveMobile</a></li>
</ul>
<p>We caused a bunch of confusion around the name &#8220;Carrington&#8221; when we attached it to everything. I&#8217;m hoping that removing it from the themes and having the &#8220;Carrington&#8221; name reserved for our underlying theme features (<a href="http://crowdfavorite.com/wordpress/carrington/">Carrington Core</a> and <a href="http://crowdfavorite.com/wordpress/carrington-build/">Carrington Build</a>) will help make it more clear that Carrington refers to our collection of developer and designer tools that make it easier to create great websites with WordPress. We&#8217;ve also initiated an internal project to create better designer/developer documentation for Carrington Core.</p>
<p>Updating the themes to the latest and greatest WordPress features and best practices is on the list for our intern projects and should be getting some attention in the immediate future. I&#8217;m optimistic we&#8217;ll have updated versions of these themes to release soon. I&#8217;m proud of our dedication to releasing code to the community, but once you hit a certain volume it becomes a real challenge to keep everything up to date.</p>
]]></content:encoded>
			<wfw:commentRss>http://alexking.org/blog/2012/03/06/carrington-themes-on-github/feed</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Git Submodules are not SVN Externals</title>
		<link>http://alexking.org/blog/2012/03/05/git-submodules-vs-svn-externals</link>
		<comments>http://alexking.org/blog/2012/03/05/git-submodules-vs-svn-externals#comments</comments>
		<pubDate>Mon, 05 Mar 2012 17:36:52 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Crowd Favorite]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://alexking.org/?p=5672</guid>
		<description><![CDATA[One of the biggest hurdles I had to get past in order to use Git efficiently was getting my head around the differences between SVN&#8217;s externals and Git&#8217;s submodules. Since our migration from SVN to Git, I&#8217;ve seen other folks on our team working through the same hiccups I had initially. I thought the following&#8230;]]></description>
			<content:encoded><![CDATA[<p>One of the biggest hurdles I had to get past in order to use Git efficiently was getting my head around the differences between SVN&#8217;s externals and Git&#8217;s submodules. Since our <a href="http://alexking.org/blog/2012/02/14/svn-to-git-migration">migration from SVN to Git</a>, I&#8217;ve seen other folks on our team working through the same hiccups I had initially. I thought the following notes might be useful to other folks making the leap as well.</p>
<p>At <a href="http://crowdfavorite.com">Crowd Favorite</a> we write modular code (for example: lots of lean, targeted WordPress plugins instead of few complex plugins) for a number of reasons:</p>
<ul>
<li>it enables code reuse (DRY)</li>
<li>smaller bits of code are easier to maintain, update, debug, etc.</li>
<li>it&#8217;s easier to test smaller sets of features/functions</li>
</ul>
<p>To support this approach we previously made extensive use of SVN externals in our projects. Often times active development would be happening on a specific project and within one or more of the externals within the project (to support a new feature, etc.).</p>
<p>With SVN externals, the included externals are automatically updated to the latest version on every update (unless you &#8211;exclude-submodules). If you follow a good trunk/branches/tags model within your externals, you can get away with this without too much trouble; you primarily point the external to the latest stable tag, but switch the pointer to trunk when active development is needed.</p>
<p>Like I said, it&#8217;s something you can get away with. That doesn&#8217;t mean there aren&#8217;t some challenges there. Primarily you can run into multiple people updating or needing to work on an external at the same time (and SVN doesn&#8217;t well support a branch-driven development model). You might be pulling in changes on each &#8220;svn up&#8221; that you don&#8217;t want.</p>
<p>With Git&#8217;s submodules, you can still bring in another codebase into your project but the mechanics of it are a bit different.</p>
<h3>The submodule will be the entire Git repo</h3>
<p>With SVN you can make your external point to a subdirectory of a project (this is how you&#8217;d choose trunk vs tags/1.0.2, etc.), with Git the submodule will always be the entire project. This means you&#8217;ll want to keep your code repositories lean and mean &#8211; you don&#8217;t want deep URL paths or a bunch of historical design documents and other things in there that would be considered cruft when the repo is used as a library for another project.</p>
<p>Because of this, we&#8217;re often maintaining two Git repos for each project. One has just the code, README, CHANGELOG, etc. while the other includes design docs, mockups, etc.</p>
<h3>Submodules require extra steps when cloning</h3>
<p>With a standard SVN checkout, all of your externals get populated and are ready to go right away. With Git submodules, an additional step is required after a git clone. From inside the newly cloned repo (at the top level), you have to initialize and update the submodules:</p>
<p><code>git submodule update --init --recursive</code></p>
<p>This step will get all if your submodules setup, pointing to the proper refs, etc.</p>
<p>UPDATE: or clone with <code>--recursive</code>. (thanks <a href="http://alexking.org/blog/2012/03/05/git-submodules-vs-svn-externals#comment-185935">Shawn</a>)</p>
<h3>Submodules require extra steps when committing</h3>
<p>After initialization, your submodule will initially be in a &#8220;detached head&#8221; state. This means that even though the submodule is pointing to the correct ref/code revision, but it isn&#8217;t setup to update from or commit to a specific head (branch). If you&#8217;re not used to this (or are used to how SVN externals work), it&#8217;s easy to accidentally start editing code in the submodule code while you&#8217;re on a detached head. Recovering from this isn&#8217;t particularly hard (I&#8217;ll do a follow up post with details on this), it&#8217;s just another step in learning how Git wants you to work with submodules.</p>
<p>When I was doing active development on a project that had SVN externals, I&#8217;d often end up making changes to the externals as well as the current project. When I did this, I&#8217;d need to commit to the external separately from the parent project. Git submodules work in a somewhat similar fashion in that you need to commit the changes to the submodule first; but there are also some additional steps involved.</p>
<p>Like SVN externals, you need to <code>cd</code> into the submodule to commit any changes you&#8217;ve made. When you&#8217;ve committed your changes to the submodule and have it in the state you want for its inclusion in the parent project, you then need to <code>cd</code> back up to the parent project and commit the &#8220;change&#8221; of the state of the submodule. Make sense? Basically, you commit to the Git submodule separately just like you used to commit to your SVN external. The additional step is checking out a tag, branch or specific revision that you want the submodule to &#8220;stick&#8221; at; then committing that change to the parent repository.</p>
<h3>Submodules don&#8217;t update on their own</h3>
<p>Recapping the previous point: submodules are stuck to the revision/tag/branch they are set up on. You have to explicitly update them, then commit the &#8220;change&#8221; of having the submodule point to a different revision to the parent repository. This is useful for situations where multiple people are updating a project that is being used as a submodule by multiple parent projects. Changes to the submodule won&#8217;t automatically be pulled into a parent project that doesn&#8217;t expect it (they have to be explicitly pulled in, committed, etc.).</p>
<p>Once you&#8217;re out of active development, I consider it a best practice to make sure your submodules are pointed at a tag for the purposes of tagging the parent project. That way when bugs or issues are found  they are logged against the proper version of the package in question. When questions about a submodule version arise (does it include feature X?), you can answer them pretty easily by checking the CHANGELOG.</p>
<hr />
<p>Hopefully this helps you get your head around the differences between SVN externals and Git submodules. Overall I like the implementation of Git submodules better now that I understand what they are trying to do. We&#8217;ve found that this development approach compliments the core extensibility features of WordPress very nicely. In fact, many of our plugins interoperate by implementing hooks and filters in the same manner WordPress core does.</p>
<p>Does building modular code (WordPress or for other PHP projects) sound like something you&#8217;d like to be doing more of? <a href="http://crowdfavorite.com/jobs/">We&#8217;re hiring</a>. As previously noted here, our <a href="http://alexking.org/blog/2012/02/07/new-crowd-favorite-careers-page">careers page is a little different</a>, and we believe in a <a href="http://alexking.org/blog/2012/02/21/work-life-balance">healthy work-life balance</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://alexking.org/blog/2012/03/05/git-submodules-vs-svn-externals/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>SVN to Git Migration</title>
		<link>http://alexking.org/blog/2012/02/14/svn-to-git-migration</link>
		<comments>http://alexking.org/blog/2012/02/14/svn-to-git-migration#comments</comments>
		<pubDate>Tue, 14 Feb 2012 21:25:15 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Crowd Favorite]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://alexking.org/?p=12499</guid>
		<description><![CDATA[A couple of weeks ago we shut down the Crowd Favorite office for a day and a half to do a migration from SVN to Git. This was not a small undertaking. We had nearly five years of code in a single SVN repository that was then broken out into literally hundreds of Git repositories.&#8230;]]></description>
			<content:encoded><![CDATA[<p>A couple of weeks ago we shut down the <a href="http://crowdfavorite.com">Crowd Favorite</a> office for a day and a half to do a migration from SVN to Git. This was not a small undertaking. We had nearly five years of code in a single SVN repository that was then broken out into literally hundreds of Git repositories.</p>
<p>The main reason for the change is to be able to support a branch driven development workflow (using <a href="https://github.com/nvie/gitflow">Git Flow</a>). We were already using this for newer projects (including some of our Open Source WordPress plugins that <a href="https://github.com/crowdfavorite">we host on GitHub</a>), and we were seeing lots of areas where this approach would be a big improvement to our SVN workflows. We think it will especially pay dividends for our ongoing retainer clients.</p>
<p>With our ongoing clients we are commonly engaged in building new features and functionality while also needing to be able to make smaller changes (hotfixes) that are pushed up immediately. With Git it is easy for us to maintain development of more involved functionality in feature branches and still being able to push up quick changes as needed.</p>
<p>We&#8217;ve been following a modular development methodology for years, so we have a large number of libraries, plugins, etc. that are shared across various projects. Converting these from SVN externals to Git submodules was a good bit of busy work, but more importantly it required everyone to get comfortable with the difference between SVN externals and Git submodules. The biggest changes are that the submodules default to a detached head and don&#8217;t auto-update to the latest code in a branch. These are generally positives, but require changes to how you think about things. More on this in a future post.</p>
<p>We are using GitHub to host our Open Source projects, but we choose to host our own Git server for our private repositories. We are using <a href="https://github.com/sitaramc/gitolite">Gitolite</a> for repository management, <a href="http://www.xiphux.com/programming/gitphp/">GitPHP</a> to provide a hackable web interface and we&#8217;re planning to use <a href="http://code.google.com/p/gerrit/">Gerrit</a> for code reviews.</p>
<p>One of the other challenges was setting up a repository structure that we were happy with for our WordPress sites. We settled on the following:</p>
<p><code>/index.php</code><br />
<code>/local-config.php</code> (unversioned &#8211; has machine specific settings)<br />
<code>/wp-config.php</code> (define WP_CONTENT_DIR and WP_CONTENT_URL here)<br />
<code>/wp/</code> (WordPress core as a shallow Git submodule or SVN checkout)<br />
<code>/wp-content/</code> (plugins, themes, etc.)</p>
<p>This works quite nicely for simple and painless WordPress core upgrades, local development environments, and scriptable deployments. With a standardized structure, we&#8217;re also able to create scripts to automate the creation and data seeding of local development environments. We&#8217;re still working on the local dev set-up script, but I&#8217;m really excited about it. It should make it much easier for any developer on our team to quickly spin up a project and be able to contribute to it.</p>
<p>Does this sound like fun? <a href="http://crowdfavorite.com/jobs/">We&#8217;re hiring!</a> Come help us define and implement best practices that make developers effective; and work on interesting and challenging projects.</p>
]]></content:encoded>
			<wfw:commentRss>http://alexking.org/blog/2012/02/14/svn-to-git-migration/feed</wfw:commentRss>
		<slash:comments>31</slash:comments>
		</item>
		<item>
		<title>http_build_query() Separator Tip</title>
		<link>http://alexking.org/blog/2012/02/02/http_build_query-separator-tip</link>
		<comments>http://alexking.org/blog/2012/02/02/http_build_query-separator-tip#comments</comments>
		<pubDate>Thu, 02 Feb 2012 20:46:04 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://alexking.org/?p=12505</guid>
		<description><![CDATA[I ran into an interesting &#8220;bug&#8221; in Twitter Tools last night that I traced back to http_build_query(). I expected that the query strings generated by this function used &#38; as a separator for the key=value pairs, but on one of our test servers, the separator being used was &#38;amp;. This is a php.ini config setting,&#8230;]]></description>
			<content:encoded><![CDATA[<p>I ran into an interesting &#8220;bug&#8221; in Twitter Tools last night that I traced back to <a href="http://php.net/manual/en/function.http-build-query.php"><code>http_build_query()</code></a>. I expected that the query strings generated by this function used <code>&amp;</code> as a separator for the <code>key=value</code> pairs, but on one of our test servers, the separator being used was <code>&amp;amp;</code>. This is a <a href="http://www.php.net/manual/en/ini.core.php#ini.arg-separator.output">php.ini config setting</a>, so my expectation was clearly based on false assumptions. If you want to make sure that you get a <code>&amp;</code> separator, you can <a href="https://github.com/crowdfavorite/wp-twitter-tools/commit/b36a01a61fc50a61408808cfd96e4c8bbf8a5f95">pass it in as the 3rd parameter</a>.</p>
<p>You&#8217;ll find this is particularly important if you&#8217;re making requests for remote data from within WordPress via <code>wp_remote_get()</code> or similar technique. If you are working on something that is run within WordPress, you can look at using <code>add_query_arg()</code> as an alternative to this as well.</p>
]]></content:encoded>
			<wfw:commentRss>http://alexking.org/blog/2012/02/02/http_build_query-separator-tip/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic page generated in 0.757 seconds. -->
<!-- Cached page generated by WP-Super-Cache on 2012-05-24 18:42:21 -->
<!-- Compression = gzip -->
