<?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; Development</title>
	<atom:link href="http://alexking.org/blog/topic/development/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>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>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>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>TechStars Boulder Early Application Deadline: Feb 26th</title>
		<link>http://alexking.org/blog/2012/02/11/techstars-boulder-early-application-deadline-feb-26th</link>
		<comments>http://alexking.org/blog/2012/02/11/techstars-boulder-early-application-deadline-feb-26th#comments</comments>
		<pubDate>Sun, 12 Feb 2012 01:40:17 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://alexking.org/?p=12589</guid>
		<description><![CDATA[If you&#8217;re planning to apply for TechStars Boulder for this summer (2012), make sure you&#8217;ve got your application ready to go for the early application deadline in 2 weeks. It&#8217;s been amazing to see TechStars grow and thrive as it has. The experience offered to the teams and the quality of the mentors is remarkable;&#8230;]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;re planning to apply for TechStars Boulder for this summer (2012), make sure you&#8217;ve got your application ready to go for the <a href="http://www.techstars.com/program/schedule/">early application deadline in 2 weeks</a>. It&#8217;s been amazing to see TechStars grow and thrive as it has. The experience offered to the teams and the quality of the mentors is remarkable; I highly recommend it.</p>
]]></content:encoded>
			<wfw:commentRss>http://alexking.org/blog/2012/02/11/techstars-boulder-early-application-deadline-feb-26th/feed</wfw:commentRss>
		<slash:comments>0</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>
		<item>
		<title>Twitter Tools 3.0 beta 2</title>
		<link>http://alexking.org/blog/2012/01/22/twitter-tools-3-0-beta-2</link>
		<comments>http://alexking.org/blog/2012/01/22/twitter-tools-3-0-beta-2#comments</comments>
		<pubDate>Sun, 22 Jan 2012 23:27:50 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://alexking.org/?p=8550</guid>
		<description><![CDATA[I&#8217;ve packaged beta 2 of the next generation version of Twitter Tools. Version 3.0 is a ground-up rewrite on top of the Social platform, with a few features included for backward compatibility. If you&#8217;d like to test the beta, grab it from GitHub. This version fixes several bugs that were found in our QA process,&#8230;]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve packaged beta 2 of the next generation version of Twitter Tools. Version 3.0 is a ground-up rewrite on top of the Social platform, with a few features included for backward compatibility. If you&#8217;d like to test the beta, <a href="https://github.com/crowdfavorite/wp-twitter-tools/tags">grab it from GitHub</a>.</p>
<p>This version fixes several bugs that were found in our QA process, as well as a few enhancements and initial integration points. The changes since <a href="http://alexking.org/blog/2011/12/14/twitter-tools-3-0-beta-1">beta 1</a>:</p>
<ul>
<li>fix several taxonomy reference bugs that were causing shortcodes and widgets to fail to show tweets</li>
<li>fix logical flaws that were causing the &#8220;include RTs/replies&#8221; settings in widgets to behave inconsistently</li>
<li>disconnect Twitter accounts when they are deleted from Social only when they are shared accounts</li>
<li>manual tweet download is now an AJAX call instead of a full page refresh</li>
<li>cleaner failures if Social plugin is not active</li>
<li>add integration points so that other plugins can extend Twitter Tools</li>
</ul>
<p>Due to some of these taxonomy issues, you may need to delete your existing Tweets and allow them to be recreated so that tweets appear in the widget and shortcodes as expected (any newly imported tweets should be fine with this version).</p>
<p>Still no README file (contributions from testers are welcome), but I expect to get started on that along with final tweaks and packaging for a full release in the near future.</p>
<p>Developers, please feel free to open issues and submit pull requests in <a href="https://github.com/crowdfavorite/wp-twitter-tools">GitHub</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://alexking.org/blog/2012/01/22/twitter-tools-3-0-beta-2/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>WP_Query by &#8220;Standard&#8221; Post Format</title>
		<link>http://alexking.org/blog/2012/01/05/wp_query-by-standard-post-format</link>
		<comments>http://alexking.org/blog/2012/01/05/wp_query-by-standard-post-format#comments</comments>
		<pubDate>Fri, 06 Jan 2012 06:56:28 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://alexking.org/?p=8324</guid>
		<description><![CDATA[When using WordPress post formats, you&#8217;ll quickly start looking for a way to query WordPress content by the &#8220;standard&#8221; post format. This Trac ticket seeks to work on solving this. The implementation there handles URL-based requests: http://example.com/type/standard/ quite nicely. However the code in that patch doesn&#8217;t (yet) handle direct WP_Query calls. I was hacking on&#8230;]]></description>
			<content:encoded><![CDATA[<p>When using WordPress post formats, you&#8217;ll quickly start looking for a way to query WordPress content by the &#8220;standard&#8221; post format. <a href="http://core.trac.wordpress.org/ticket/16149">This Trac ticket</a> seeks to work on solving this. The implementation there handles URL-based requests:</p>
<p><code>http://example.com/type/standard/</code></p>
<p>quite nicely. However the code in that patch doesn&#8217;t (yet) handle direct WP_Query calls.</p>
<p>I was hacking on this a bit on my own before finding the (much more elegant and complete) code that <a href="http://nacin.com">Nacin</a> contributed. I came up with some working code that does work with WP_Query calls, which I posted in this Gist:</p>
<p><script src="https://gist.github.com/1549613.js"></script><noscript><p>View the code on <a href="https://gist.github.com/1549613">Gist</a>.</p></noscript></p>
<p>Note that this doesn&#8217;t create the taxonomy term and do some of the other nice set-up that Nacin&#8217;s code does. It could use a bit of cleanup &#8211; improvements are very welcome. This isn&#8217;t going to be at the top of my list for a while, so I wanted to make sure I published the code so anyone else who is interested can take a stab at merging the two approaches.</p>
<hr />
<p>For my own usage, I wanted to have the list of recent &#8220;standard&#8221; posts that you see in my sidebar. To create this, I enabled the code in the Gist above, then made a <a href="https://gist.github.com/1569336">slight mod to the Recent Posts widget that is included in core</a>. If you&#8217;ve wanted the same, please grab the code and enjoy.</p>
<p>Note for future visitors: this code is working as desired with WordPress 3.3.x, but will hopefully not be needed in some future version.</p>
]]></content:encoded>
			<wfw:commentRss>http://alexking.org/blog/2012/01/05/wp_query-by-standard-post-format/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Popularity Contest is Dead (and on GitHub)</title>
		<link>http://alexking.org/blog/2011/12/28/popularity-contest-is-dead-and-on-github</link>
		<comments>http://alexking.org/blog/2011/12/28/popularity-contest-is-dead-and-on-github#comments</comments>
		<pubDate>Wed, 28 Dec 2011 18:43:51 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://alexking.org/?p=8264</guid>
		<description><![CDATA[I wrote the Popularity Contest plugin for WordPress back in May of 2005. It had a good run, but that run is over. We are no longer developing or supporting Popularity Contest, and I recommend letting it rest peacefully. Why? It does too much, and too little at the same time. It does too much.&#8230;]]></description>
			<content:encoded><![CDATA[<p>I wrote the Popularity Contest plugin for WordPress back in <a href="http://alexking.org/blog/2005/05/23/popularity-contest">May of 2005</a>. It had a good run, but that run is over. We are no longer developing or supporting Popularity Contest, and I recommend letting it rest peacefully.</p>
<p>Why? It does too much, and too little at the same time.</p>
<p><strong>It does too much.</strong> Popularity Contest tracks each page load. In order to make this compatible with caching plugins, this functionality was abstracted to be done via a second AJAX call (or tracker image in feeds) that bypasses your site&#8217;s caching system.</p>
<p>In other words, with Popularity Contest enabled and a caching plugin installed, each visit to one of your pages still generates an additional dynamic page load request to your server. This is how it has to work, but it&#8217;s too much for most commodity hosting environments.</p>
<p><strong>It does too little.</strong> While Popularity Contest is tracking each page load and updating aggregate numbers relating to your site&#8217;s activity, there is a significant diminishing of returns as you use the plugin over time.</p>
<p>There is no granular data tracked, meaning you cannot plot trends or view popularity in specific time slices. In fact, what I saw on this site was that the most popular posts became simply a list of what ranks highest for popular searches in Google.</p>
<hr />
<p>With all of the free and low-cost analytics solutions out there, you&#8217;re better off using a service to get this sort of information rather than doing it yourself. I&#8217;d recommend <a href="http://google.com/analytics">Google Analytics</a>, <a href="http://wordpress.org/extend/plugins/stats/">WP.com stats</a> or more advanced solutions like <a href="http://www.kissmetrics.com/">KISSmetrics</a>, <a href="https://www.reinvigorate.net/">Reinvigorate</a>, etc.</p>
<p>While I don&#8217;t recommend reviving Popularity Contest for the reasons listed above, but if you&#8217;re interested in forking or looking at the code you are welcome to do so. I pulled a copy of the code from the WP.og SVN repository and put it up on <a href="https://github.com/crowdfavorite/wp-popularity-contest">GitHub</a>. The wp30 branch probably works with the latest version of WordPress with few needed revisions.</p>
]]></content:encoded>
			<wfw:commentRss>http://alexking.org/blog/2011/12/28/popularity-contest-is-dead-and-on-github/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>WordPress Plugins and Symlinks</title>
		<link>http://alexking.org/blog/2011/12/15/wordpress-plugins-and-symlinks</link>
		<comments>http://alexking.org/blog/2011/12/15/wordpress-plugins-and-symlinks#comments</comments>
		<pubDate>Thu, 15 Dec 2011 19:45:15 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://alexking.org/?p=8196</guid>
		<description><![CDATA[If you&#8217;re doing serious development for WordPress you will quickly find yourself in a situation where you need to test a plugin in multiple installations. Using symlinks is a great way to make sure that you don&#8217;t end up editing in multiple locations, perhaps forgetting to commit a change, etc. However, there are some headaches&#8230;]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;re doing serious development for WordPress you will quickly find yourself in a situation where you need to test a plugin in multiple installations. Using symlinks is a great way to make sure that you don&#8217;t end up editing in multiple locations, perhaps forgetting to commit a change, etc.</p>
<p>However, there are some headaches with symlinks &#8211; particularly with common methods of including files:</p>
<p><code>include(dirname(__FILE__).'/my-include-file.php');</code></p>
<p>and related permissions issues if the files live outside the web root, etc.</p>
<p>Trying to figure out the symlink path to the file from within PHP is decidedly non-trivial, so a different approach may work best:</p>
<p><script src="https://gist.github.com/1482350.js"></script><noscript><p>View the code on <a href="https://gist.github.com/1482350">Gist</a>.</p></noscript></p>
<p>Here you can see we are maintaining the location of the file and path that WordPress used to include the file. This has worked well in my experience, perhaps it will be a good solution for you as well.</p>
<p>As always, improvements or suggestions are welcome.</p>
]]></content:encoded>
			<wfw:commentRss>http://alexking.org/blog/2011/12/15/wordpress-plugins-and-symlinks/feed</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Not Getting GitHub Notifications?</title>
		<link>http://alexking.org/blog/2011/11/28/not-getting-github-notifications</link>
		<comments>http://alexking.org/blog/2011/11/28/not-getting-github-notifications#comments</comments>
		<pubDate>Mon, 28 Nov 2011 15:54:57 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Crowd Favorite]]></category>
		<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://alexking.org/?p=8065</guid>
		<description><![CDATA[I have been moving Crowd Favorite&#8216;s Open Source projects to GitHub (as well as my personal projects). GitHub has great tools for this. We created an organization, added the team members to that organization, and created repositories for our projects. As a few of our projects have enjoyed exactly the sort of developer community engagement&#8230;]]></description>
			<content:encoded><![CDATA[<p>I have been moving <a href="http://crowdfavorite.com">Crowd Favorite</a>&#8216;s Open Source projects to GitHub (as well as my personal projects). GitHub has great tools for this. We created an <a href="http://github.com/crowdfavorite">organization</a>, added the team members to that organization, and created <a href="https://github.com/crowdfavorite/repositories">repositories</a> for our projects.</p>
<p>As a few of our projects have enjoyed exactly the sort of developer community engagement I was hoping for (pull requests, issues, discussion), I discovered that my team was getting email notifications for these events but I was not. Instead, I would hear a comment from a colleague or get an email from someone every few weeks asking why I hadn&#8217;t responded to their issue.</p>
<p>Once you get past a few repositories, it&#8217;s not realistic to click through them all and see if there are new issues that need attention &#8211; the notifications are quite necessary.</p>
<p>After confirming that all notifications were enabled in my account settings, I eventually sent a note into GitHub support. I quickly got a response with the solution:</p>
<blockquote><p>Users in the Owners group don&#8217;t receive notifications.  You need to create a normal team and add yourself to it to get notifications for that team&#8217;s repos.</p></blockquote>
<p>This was indeed the case. If you aren&#8217;t getting notifications for your organizations GitHub repositories and you are in the Owners group, add yourself to another group that has access to the repositories &#8211; that should do the trick.</p>
]]></content:encoded>
			<wfw:commentRss>http://alexking.org/blog/2011/11/28/not-getting-github-notifications/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Setting Custom Taxonomies as part of wp_insert_post()</title>
		<link>http://core.trac.wordpress.org/ticket/19373</link>
		<comments>http://alexking.org/blog/2011/11/27/setting-custom-taxonomies-as-part-of-wp_insert_post#comments</comments>
		<pubDate>Sun, 27 Nov 2011 23:00:59 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Links]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://alexking.org/?p=8052</guid>
		<description><![CDATA[If you&#8217;re trying to figure out why your custom taxonomies aren&#8217;t being set when you pass them to wp_insert_post() in your custom code, you might be running into the same issue I did. Luckily, it&#8217;s easy to work around once you understand why it is happening.<p style="clear: both;"><a href="http://alexking.org/blog/2011/11/27/setting-custom-taxonomies-as-part-of-wp_insert_post">#</a></p>]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;re trying to figure out why your custom taxonomies aren&#8217;t being set when you pass them to <code>wp_insert_post()</code> in your custom code, you might be running into the same issue I did. Luckily, it&#8217;s easy to work around once you understand why it is happening.</p>
<p style="clear: both;"><a href="http://alexking.org/blog/2011/11/27/setting-custom-taxonomies-as-part-of-wp_insert_post">#</a></p>]]></content:encoded>
			<wfw:commentRss>http://alexking.org/blog/2011/11/27/setting-custom-taxonomies-as-part-of-wp_insert_post/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

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