<?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>erick t. hitter</title>
	<atom:link href="http://ethitter.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://ethitter.com</link>
	<description>web developer, former accountant, and occasional audio engineer</description>
	<lastBuildDate>Mon, 13 May 2013 16:00:11 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.6-beta3-24265</generator>
		<item>
		<title>Using shortlinks with Jetpack Sharing</title>
		<link>http://ethitter.com/2013/05/using-shortlinks-with-jetpack-sharing/</link>
		<comments>http://ethitter.com/2013/05/using-shortlinks-with-jetpack-sharing/#comments</comments>
		<pubDate>Mon, 13 May 2013 16:00:11 +0000</pubDate>
		<dc:creator>Erick</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Teaching]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Jetpack]]></category>
		<category><![CDATA[Publicize]]></category>
		<category><![CDATA[Sharing]]></category>

		<guid isPermaLink="false">http://ethitter-com.network.erick.me/?p=844</guid>
		<description><![CDATA[At present, Jetpack's Sharing module doesn't use shortlinks, but I've published a code snippet that changes that.]]></description>
				<content:encoded><![CDATA[<p>At present, Jetpack doesn&#8217;t use shortlinks when visitors share your content through the built-in <em>Sharing</em> module. With length-limited services like Twitter, this can be a problem. Take, for example, <a href="http://ethitter.com/2013/05/using-shortlinks-with-jetpack-sharing/">http://ethitter.com/2013/05/using-shortlinks-with-jetpack-sharing/</a> versus <a href="http://eth.pw/s">http://eth.pw/s</a>; the latter frees up many more precious characters.</p>
<p>Thankfully, the folks who built the <em>Sharing</em> module provided a filter to override the link used with the sharing buttons.</p>
<p>Add this snippet of code to your theme&#8217;s <code>functions.php</code> file, or a file in your site&#8217;s <code>wp-content/mu-plugins</code> directory, and your visitors will be sharing with shortlinks in no time.</p>
<pre class="brush: php; title: ; notranslate">/**
 * Force Jetpack's Sharing module to use a shortlink rather than full permalink
 *
 * From http://eth.pw/s
 *
 * @param string $url
 * @param int $post_id
 * @uses wp_get_shortlink
 * @filter sharing_permalink
 * @return string
 */
function eth_sharedaddy_shortlink( $url, $post_id ) {
	return wp_get_shortlink( $post_id );
}
add_filter( 'sharing_permalink', 'eth_sharedaddy_shortlink', 10, 2 );</pre>
<p>Note that the <em>Publicize</em> module, which handles automatically sharing your content to your own connected social media accounts, does use shortlinks already; therefore, the code snippet above won&#8217;t have any impact on <em>Publicize</em>.</p>
<p>Also, I opted not to make this a plugin in anticipation of Jetpack making the switch to shortlinks at some point.</p>
]]></content:encoded>
			<wfw:commentRss>http://ethitter.com/2013/05/using-shortlinks-with-jetpack-sharing/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Updating all the plugins!</title>
		<link>http://ethitter.com/2013/05/updating-all-the-plugins-wp-3-6/</link>
		<comments>http://ethitter.com/2013/05/updating-all-the-plugins-wp-3-6/#comments</comments>
		<pubDate>Sun, 12 May 2013 14:30:12 +0000</pubDate>
		<dc:creator>Erick</dc:creator>
				<category><![CDATA[Plugins]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[3.6]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Singleton]]></category>

		<guid isPermaLink="false">http://ethitter-com.network.erick.me/?p=819</guid>
		<description><![CDATA[As part of checking that that the plugins I maintain are ready for WordPress 3.6, I took the opportunity to fix a number of bugs, patch a few content disclosure vulnerabilities, and refactor some things I wasn't pleased with. Details follow.]]></description>
				<content:encoded><![CDATA[<p>As part of <a href="http://ethitter.com/2013/05/wordpress-3-6-is-coming-are-your-plugins-ready/">checking that that the plugins I maintain are ready for WordPress 3.6</a>, I took the opportunity to fix a number of bugs, patch a few content disclosure vulnerabilities, and refactor some things I wasn&#8217;t pleased with.</p>
<p>Below is a rundown of all that changed. It&#8217;s worth noting that all of the plugins I actively maintain are compatible with WordPress 3.6, which will be released in the coming weeks.<br />
<span id="more-819"></span></p>
<h4>WP Print Friendly (<a href="http://wordpress.org/extend/plugins/wp-print-friendly/">WP.org</a> | <a href="https://github.com/ethitter/WP-Print-Friendly">GitHub</a>)</h4>
<p>It recently came to my attention that the content of password-protected posts could be disclosed via the print templates added by <em>WP Print Friendly</em>. Version 0.6 corrects this deficiency.</p>
<p>Additionally, for privately-published posts, the plugin will no longer display a print template if the current viewer can&#8217;t read the content. Instead, the not found (404) template in the active, non-print theme will be displayed.</p>
<p>I also took the opportunity to convert the plugin to a proper singleton<sup class='footnote'><a href='#fn-819-1' id='fnref-819-1' onclick='return fdfootnote_show(819)'>1</a></sup>, improve the internal documentation, and ensure that all aspects of the plugin are ready for translation.</p>
<p>I owe a thanks to <a href="http://www.stevenword.com/">Steven Word</a>, a new contributor to the plugin, for adding a hotfix for the content disclosure problem until I had a chance to correct the underlying issues. <strong>Upgrading to version 0.6 is strongly recommended.</strong></p>
<h4>View All Post&#8217;s Pages (<a href="http://wordpress.org/extend/plugins/view-all-posts-pages/">WP.org</a> | <a href="https://github.com/ethitter/View-All-Posts-Pages">GitHub</a>)</h4>
<p><em>VAPP</em>, as I abbreviate it out of laziness, shares a small amount of code with <em>WP Print Friendly</em>. Thankfully, given the nature of the plugin, it wasn&#8217;t similarly vulnerable to content disclosure in the way <em>WP Print Friendly</em> was. In the process of confirming it wasn&#8217;t vulnerable, I made a few improvements.</p>
<p>Like I did with <em>WP Print Friendly</em>, I converted the plugin to follow a proper singleton pattern, enhanced the inline documentation, and updated a few strings that weren&#8217;t translation-ready.</p>
<h4>Date-based Taxonomy Archives (<a href="http://wordpress.org/extend/plugins/date-based-taxonomy-archives/">WP.org</a> | <a href="https://github.com/ethitter/Date-based-Taxonomy-Archives">GitHub</a>)</h4>
<p>This is one of my more-obscure plugins, one that&#8217;s meant for developers to leverage in their plugins and themes. It hadn&#8217;t gotten a lot of attention since I released it in June 2012, and the code reflected that.</p>
<p>Version 0.3 corrects a situation that resulted in PHP warnings because I&#8217;d improperly used the WordPress database class&#8217;s method for ensuring queries are safe (<code>$wpdb-&gt;prepare()</code>) where it wasn&#8217;t needed.</p>
<p>As I did with the two preceding plugins, I also updated the code to follow the singleton pattern and corrected much of its internal documentation.</p>
<h4>WP-Cron Control (<a href="http://wordpress.org/extend/plugins/wp-cron-control/">WP.org</a> | <a href="https://github.com/Automattic/WP-Cron-Control">GitHub</a>)</h4>
<p>I&#8217;ve recently begun maintaining the <em>WP-Cron Control</em> plugin, both because it was created by a former colleague at Automattic, and because I use it on this and several other sites on my network.</p>
<p>I&#8217;d noticed that <code>$wpdb-&gt;prepare()</code> was incorrectly used in this plugin much like I&#8217;d done in <em>Date-based Taxonomy Archives</em>, resulting in a pile of PHP warnings in my server&#8217;s error logs. Version 0.7 remedies this situation.</p>
<p>I also continued my quest to make everything translation-ready by ensuring all strings in the plugin options screen are properly tagged.</p>
<h4>The Rest</h4>
<p>The remainder of the plugins I created or contribute to were tested and their WordPress version compatibility updated to reflect that they work with 3.6. These are:</p>
<ul>
<li>Authy for WordPress (<a href="http://wordpress.org/extend/plugins/authy-for-wp/">WP.org</a> | <a href="https://github.com/ethitter/Authy-for-WP">GitHub</a>)</li>
<li>Automatically Paginate Posts (<a href="http://wordpress.org/extend/plugins/automatically-paginate-posts/">WP.org</a> | <a href="https://github.com/ethitter/Automatically-Paginate-Posts">GitHub</a>)</li>
<li>External Permalinks Redux (<a href="http://wordpress.org/extend/plugins/external-permalinks-redux/">WP.org</a> | <a href="https://github.com/ethitter/External-Permalinks-Redux">GitHub</a>)</li>
<li>Jetpack Photon for NextGEN Gallery (<a href="http://wordpress.org/extend/plugins/jetpack-photon-for-nextgen-gallery/">WP.org</a> | <a href="https://github.com/ethitter/jetpack-photon-for-nextgen">GitHub</a>)</li>
<li>Taxonomy Dropdown Widget (<a href="http://wordpress.org/extend/plugins/tag-dropdown-widget/">WP.org</a> | <a href="https://github.com/ethitter/Taxonomy-Dropdown-Widget">GitHub</a>)</li>
<li>Taxonomy List Widget (<a href="http://wordpress.org/extend/plugins/tag-list-widget/">WP.org</a> | <a href="https://github.com/ethitter/Taxonomy-List-Widget">GitHub</a>)</li>
</ul>
<h4>Asides</h4>
<p>An astute observer will notice that some of my plugins still don&#8217;t follow a proper singleton pattern, instead relying on a global variable as I was fond of doing at one point. I have every intention of converting the balance of my plugins to singletons, which will likely happen as other updates to them are needed. At that time, I&#8217;ll also ensure the internal documentation is up to par and that the plugin is able to be translated.</p>
<p>If anyone&#8217;s up for translating any of my plugins, <a href="http://ethitter.com/contact/">get in touch</a>!</p>
<div class='footnotes' id='footnotes-819'>
<div class='footnotedivider'></div>
<ol>
<li id='fn-819-1'>Eric Mann wrote a great post on the singleton in WordPress for those unfamiliar with it. Check it out at <a href="http://eth.pw/singleton-wp">http://eamann.com/tech/the-case-for-singletons/</a>. <span class='footnotereverse'><a href='#fnref-819-1'>&#8617;</a></span></li>
</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://ethitter.com/2013/05/updating-all-the-plugins-wp-3-6/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPress 3.6 is coming. Are your plugins ready?</title>
		<link>http://ethitter.com/2013/05/wordpress-3-6-is-coming-are-your-plugins-ready/</link>
		<comments>http://ethitter.com/2013/05/wordpress-3-6-is-coming-are-your-plugins-ready/#comments</comments>
		<pubDate>Sun, 12 May 2013 02:32:17 +0000</pubDate>
		<dc:creator>Erick</dc:creator>
				<category><![CDATA[Plugins]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://ethitter-com.network.erick.me/?p=815</guid>
		<description><![CDATA[WordPress 3.6 is coming. If you're a plugin author, are you ready?]]></description>
				<content:encoded><![CDATA[<p>I spent today checking all of the plugins I contribute to, ensuring that they are compatible with WordPress 3.6. Beta 3 was released last night, so we&#8217;re getting closer to a stable release.</p>
<p>If you&#8217;re a plugin author, have you done the same?</p>
]]></content:encoded>
			<wfw:commentRss>http://ethitter.com/2013/05/wordpress-3-6-is-coming-are-your-plugins-ready/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Surviving My Nomadic Lifestyle</title>
		<link>http://ethitter.com/2013/04/surviving-my-nomadic-lifestyle/</link>
		<comments>http://ethitter.com/2013/04/surviving-my-nomadic-lifestyle/#comments</comments>
		<pubDate>Tue, 30 Apr 2013 17:38:57 +0000</pubDate>
		<dc:creator>Erick</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Travel]]></category>
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://ethitter-com.network.erick.me/?p=794</guid>
		<description><![CDATA[I spend a lot of time on the road, and my nomadic lifestyle often comes up in the context of "where are you from" inquiries. Having lived like this since July 2012, I've refined my approach to travel such that I'm not bothered by constantly relocating.]]></description>
				<content:encoded><![CDATA[<p>I spend a lot of time on the road&#8211;ten trips covering 36,952 miles and 26 cities in 2013 so far&#8211;and my nomadic lifestyle often comes up in the context of &#8220;where are you from&#8221; inquiries. A frequent question is how I deal with being away for so long, always on the go, particularly given the unsettled nature that comes with living out of a suitcase. Having lived like this since July 2012, I&#8217;ve refined my approach to travel such that I&#8217;m not bothered by constantly relocating.</p>
<p><span id="more-794"></span><a href="https://www.tripit.com/" target="_blank">TripIt</a> helps me keep everything organized, and I love the service so much that I pay for the pro version. There are two distinct advantages to <a href="https://www.tripit.com/pro" target="_blank">TripIt Pro</a>: alerts and the &#8220;inner circle.&#8221; The former enables the service to monitor my travel plans (flights mostly, with an occassional train ride) and inform me when things change. Their monitoring goes beyond just flight delay notifications by checking for changes in itineraries, which is especially handy when an airline changes a connecting flight; on more than one occassion, these alerts provided an early-enough warning that I could contact the airlines about rebooking flight segments I wouldn&#8217;t otherwise have made the connections for. The &#8220;inner circle&#8221; feature lets me identify specific individuals who always have access to trips in my account; without it, I&#8217;d need to manually share each trip with those who frequently wonder where I am.</p>
<p>In addition to my laptop and mobile phone, I also travel with an Airport Express and Apple TV. The former is especially handy when lodging only provides wired internet or for-fee wifi on a per-device basis. In both situations, I can easily connect my many devices to the available connection. The Apple TV affords me big-screen access to Netflix, Hulu Plus, MLB.tv, and NHL GameCenter, in addition to the iTunes Store, so I can keep myself entertained and see a Red Sox or Bruins game regardless of where I am. The $99 each device cost me is easily justified by the savings on hotel internet and entertainment rental charges. I&#8217;ve also been careful to maintain tethering and an unlimited data plan on my mobile phone, ensuring almost universally that I can access the internet on the go.</p>
<p>Besides the electronics already mentioned, I&#8217;ve reduced the items I travel with to essential clothing and accoutrements. I&#8217;m not the type of person who needs much more than those things to be happy. Really, besides clothing and the electronics necessary to do my job, I require food and drink, neither of which it makes sense to travel with. Generally I can fit all that I need into a large duffle and my laptop bag, though my current journey (March 7 to June 3) takes me to places with widely-varying climates such that I&#8217;m carrying an additional bag of warm-weather things.</p>
<p>To minimize airport-induced frustration, I&#8217;m enrolled in <a href="http://www.cbp.gov/xp/cgov/travel/trusted_traveler/nexus_prog/" target="_blank">NEXUS</a> and <a href="http://www.globalentry.gov/" target="_blank">Global Entry</a>, which afford me simplified passage through US and Canadian Customs, as well as access to <a href="http://www.tsa.gov/expedited-screening" target="_blank">TSA Precheck</a>. Together, these programs have enabled me to clear Customs in under five minutes, and airport security in as little as two minutes. In the latter situation, I&#8217;m no longer required to remove my shoes, can keep electronics and allowed liquids in my carry-on, and rarely endure security queues of more than a few people. TSA Precheck isn&#8217;t available at all airports, but most major ones in the US are in the pilot program, and the TSA is regularly adding new locations. There is a cost involved with these programs, in addition to an involved application process, but their benefit&#8211;for me&#8211;fully justifies the expense. Another fee I&#8217;m growing comfortable incurring is that for day passes to airline lounges. Being overly paranoid, I often arrive at the airport far earlier than is required, and lounges provide a quiet, relaxed place to get work done, charge devices, call family and friends, and generally unwind and avoid the madness that airport terminals often become; some lounges even provide showers!</p>
<p>Lastly, I enroll in the frequent traveler program offered by whatever hotel, airline, or train service I utilize. I never thought the miles/benefits earned would amount to anything useful, but the opposite is proving to be true. I&#8217;m lucky enough that my employer lets me keep the benefits earned, so I&#8217;m reaching a point where I&#8217;ll receive free or discounted upgrades on my preferred airlines. Oh, how I wish I&#8217;d enrolled sooner!</p>
<p>Without a doubt, the steps I&#8217;ve taken to make travel enjoyable for me won&#8217;t work for everyone, but perhaps something I&#8217;ve detailed here will prove useful. The efforts I&#8217;ve undertaken have brought me to a point where I&#8217;m in no rush to settle down and foresee being a nomad for some time to come.</p>
<p>What steps do you take to survive short- and long-term travel?</p>
]]></content:encoded>
			<wfw:commentRss>http://ethitter.com/2013/04/surviving-my-nomadic-lifestyle/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>The Power of WordPress&#8217; Roles and Capabilities&#8211;Portland WordPress Meetup</title>
		<link>http://ethitter.com/2013/04/roles-and-capabilities-pdxwp/</link>
		<comments>http://ethitter.com/2013/04/roles-and-capabilities-pdxwp/#comments</comments>
		<pubDate>Tue, 16 Apr 2013 00:30:53 +0000</pubDate>
		<dc:creator>Erick</dc:creator>
				<category><![CDATA[Talks]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Capabilities]]></category>
		<category><![CDATA[map_meta_cap]]></category>
		<category><![CDATA[Portland]]></category>
		<category><![CDATA[Roles]]></category>

		<guid isPermaLink="false">http://ethitter-com.network.erick.me/?p=779</guid>
		<description><![CDATA[At tonight's Portland WordPress meetup, I'll present a combined version of my two talks on WordPress' Roles and Capabilities system, which explores adding and modifying roles, as well as using map_meta_cap to exercise a greater level of control over permissions.]]></description>
				<content:encoded><![CDATA[<p>At <a href="http://www.meetup.com/pdx-wp/events/109253772/" target="_blank">tonight&#8217;s Portland WordPress meetup</a>, I&#8217;ll present a combined version of my two talks on WordPress&#8217; Roles and Capabilities system. I&#8217;ve given these talks before, most recently at <a href="http://ethitter.com/2012/09/the-power-of-wordpress-roles-and-capabilities-wordcamp-toronto-2012/">WordCamp Toronto 2012</a> and <a href="http://ethitter.com/2012/11/roles-capabilities-map-meta-cap/">WordCamp Toronto Developers 2012</a>.</p>
<p>So those in attendance can follow along, below are the slides I&#8217;ll use as part of the discussion:</p>
<ul>
<li><a href="http://slides.ethitter.com/roles-and-capabilities/" target="_blank">The Power of WordPress&#8217; Roles and Capabilities</a></li>
<li><a href="http://slides.ethitter.com/roles-and-capabilities-map-meta-cap/" target="_blank">Understanding <code>map_meta_cap</code></a></li>
</ul>
<p>My appearance at PDXWP was described as follows:</p>
<blockquote><p>WordPress’ roles seem simple enough on the surface, but behind the Administrator, Editor, and the other default roles is a powerful system that can be customized extensively. For April&#8217;s PDXWP Developer&#8217;s meetup, Erick Hitter, Lead of Team Custom at Automattic, is joining us to talk about WordPress roles and capabilities.</p>
<p>While some have said that other CMS’ have an advantage when it comes to security and customizing capabilities, Erick will demonstrate that that isn’t true. Starting with a walkthrough of how to modify existing roles and create new ones, he will then cover how to leverage custom roles in WordPress code. Finally, he will wrap up with a discussion of some powerful filters that will prove WordPress has a roles and capabilities system that is as flexible as the popular competitors often touted as having superior implementations.</p></blockquote>
<p>Lastly, here&#8217;s the recording:<br />
<iframe src="http://player.vimeo.com/video/64430739" height="339" width="604" allowfullscreen="" frameborder="0"></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://ethitter.com/2013/04/roles-and-capabilities-pdxwp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Protecting the WordPress login in nginx</title>
		<link>http://ethitter.com/2013/04/protecting-wp-login-in-nginx/</link>
		<comments>http://ethitter.com/2013/04/protecting-wp-login-in-nginx/#comments</comments>
		<pubDate>Mon, 15 Apr 2013 01:51:16 +0000</pubDate>
		<dc:creator>Erick</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Authentication]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[wp-login]]></category>

		<guid isPermaLink="false">http://ethitter-com.network.erick.me/?p=760</guid>
		<description><![CDATA[In recent days, many tech blogs have written about a distributed attack targeting WordPress and other content management systems. To mitigate this attack, I opted to place a basic access authentication prompt in front of wp-login.php.]]></description>
				<content:encoded><![CDATA[<p>In recent days, many tech blogs have written about a distributed attack targeting WordPress and other content management systems. This brute-force attack focuses on compromising sites that use the <em>admin</em> user account. The attack is notable for its scale, as many hosts have seen reported degraded performance resulting from it.</p>
<p>There are plugin solutions, such as <a href="http://wordpress.org/extend/plugins/limit-login-attempts/" target="_blank">Limit Login Attempts</a>, that can mitigate the effectiveness of this attack, but I wanted a solution that didn&#8217;t  let the flood of attempts ever reach my server&#8217;s PHP processor. On this approach, there are numerous tutorials that recommend restricting access to <code>wp-login.php</code> and the entire <code>wp-admin</code> directory. This approach is problematic because WordPress&#8217; Ajax endpoint exists within the <code>wp-admin</code> directory, so it must be publicly accessible for many themes and plugins to function properly.</p>
<p>Since this latest attack targets <code>wp-login.php</code>, I opted to place that file behind basic access authentication by modifying my server&#8217;s nginx configuration. This is a single-user site, so I don&#8217;t need to worry about managing users at both the server and WP levels.</p>
<pre class="brush: php; title: ; notranslate">location ~* /wp-login.php {
	auth_basic &quot;erick t. hitter WordPress Network Login&quot;;
	auth_basic_user_file PATH_TO_AUTH_FILE;

	PHP_CONFIGURATION
}</pre>
<p>The <code>~*</code> tells nginx to match all requests for <code>wp-login.php</code> regardless of casing (<code>WP-LOGIN.php</code>, <code>WP-login.php</code>, etc.), and also without regard to the directory the request was made to. I took this approach because my access logs revealed many requests to <code>wp-login.php</code> in directories that didn&#8217;t exist, likely the bots&#8217; attempt to uncover all possible locations for the file.</p>
<p>In the above example, <code>PHP_CONFIGURATION</code> is replaced with whatever directives your configuration needs to pass PHP requests to the processor; in my case, I&#8217;m using PHP-FPM, and those settings appear there. It is necessary to redeclare these configuration settings within this new <code>location</code> block since the existing declarations won&#8217;t be applied to requests handled by this new <code>location</code> block.</p>
<p>Beyond ensuring that the Ajax endpoint is accessible, protecting only <code>wp-login.php</code> also restricts this extra security step to login requests alone. Once I&#8217;ve logged in, and for as long as I remain logged in, I&#8217;m not prompted to provide the HTTP authentication credentials again. In other words, additional security without too great an annoyance for me.</p>
<p>To be clear, this change constitutes just one element of the login protections employed on my multisite network. The <em>admin</em> user doesn&#8217;t exist, I use a very strong password, and I&#8217;ve enabled a two-factor authentication plugin.</p>
<p>What are you doing to ensure your WordPress setup isn&#8217;t compromised by this latest attack?</p>
<hr />
<p><small>Reference: <a href="http://arstechnica.com/security/2013/04/huge-attack-on-wordpress-sites-could-spawn-never-before-seen-super-botnet/">http://arstechnica.com/security/2013/04/huge-attack-on-wordpress-sites-could-spawn-never-before-seen-super-botnet/</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://ethitter.com/2013/04/protecting-wp-login-in-nginx/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>From URL to Query&#8211;WordCamp Miami 2013</title>
		<link>http://ethitter.com/2013/04/from-url-to-query-wcmia/</link>
		<comments>http://ethitter.com/2013/04/from-url-to-query-wcmia/#comments</comments>
		<pubDate>Sat, 06 Apr 2013 17:27:03 +0000</pubDate>
		<dc:creator>Erick</dc:creator>
				<category><![CDATA[Talks]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Miami]]></category>

		<guid isPermaLink="false">http://ethitter-com.network.erick.me/?p=740</guid>
		<description><![CDATA[Today at WordCamp Miami, I reprised my latest talk, From URL to Query, in which I walked through the WordPress loading process and explored how the various APIs work together to make WordPress function.]]></description>
				<content:encoded><![CDATA[<p>Today at WordCamp Miami, I reprised my latest talk, <em>From URL to Query</em>. I&#8217;ve now given this talk at WordCamps Phoenix, Atlanta, and Miami; the latter two presentations are an expanded version of the original talk delivered in Phoenix.</p>
<p>Briefly, this was the intent of my talk:</p>
<blockquote><p>Ever wonder what process WordPress undertakes when someone visits your site? Or how it translates that nice permalink to the database query that ultimately delivers the content your visitors requested? Or what it takes to load the appropriate template from your site’s theme?</p>
<p>In this talk, I’ll walk through WordPress’ loading process and shed some light on the various APIs used. I’ll also discuss how these APIs work together to make the software function.</p></blockquote>
<p>Slides are available at <a href="http://slides.ethitter.com/from-url-to-query/" target="_blank">http://slides.ethitter.com/from-url-to-query/</a>.</p>
<p>I&#8217;ll link to the video once it becomes available. The recording of the WordCamp Phoenix iteration <a href="http://ethitter.com/2013/01/from-url-to-query/">is available</a> in the meantime, but isn&#8217;t as in-depth as what I covered in Atlanta or Miami.</p>
]]></content:encoded>
			<wfw:commentRss>http://ethitter.com/2013/04/from-url-to-query-wcmia/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>From URL to Query&#8211;WordCamp Atlanta 2013</title>
		<link>http://ethitter.com/2013/03/from-url-to-query-wcatl/</link>
		<comments>http://ethitter.com/2013/03/from-url-to-query-wcatl/#comments</comments>
		<pubDate>Fri, 15 Mar 2013 19:29:00 +0000</pubDate>
		<dc:creator>Erick</dc:creator>
				<category><![CDATA[Talks]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Atlanta]]></category>

		<guid isPermaLink="false">http://ethitter-com.network.erick.me/?p=730</guid>
		<description><![CDATA[Ever wonder what process WordPress undertakes to deliver the right content and template to your site's visitors? In my newest talk, From URL to Query, I aim to demystify the process.]]></description>
				<content:encoded><![CDATA[<p>Today at WordCamp Atlanta, I reprised my latest talk, <em>From URL to Query</em>. This was an expanded version of the <a href="http://ethitter.com/2013/01/from-url-to-query/">content I delivered at WordCamp Phoenix in January</a>. Briefly, this was the intent of my talk:</p>
<blockquote><p>Ever wonder what process WordPress undertakes when someone visits your site? Or how it translates that nice permalink to the database query that ultimately delivers the content your visitors requested? Or what it takes to load the appropriate template from your site’s theme?</p>
<p>In this talk, I’ll walk through WordPress’ loading process and shed some light on the various APIs used. I’ll also discuss how these APIs work together to make the software function.</p></blockquote>
<p>Slides are available at <a href="http://slides.ethitter.com/from-url-to-query/" target="_blank">http://slides.ethitter.com/from-url-to-query/</a>.</p>
<p>I&#8217;ll link to the video once it becomes available. The recording of the WordCamp Phoenix iteration <a href="http://ethitter.com/2013/01/from-url-to-query/">is available</a> in the meantime, but isn&#8217;t as in-depth as what I covered in Atlanta.</p>
]]></content:encoded>
			<wfw:commentRss>http://ethitter.com/2013/03/from-url-to-query-wcatl/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>From URL to Query&#8211;WordCamp Phoenix 2013</title>
		<link>http://ethitter.com/2013/01/from-url-to-query/</link>
		<comments>http://ethitter.com/2013/01/from-url-to-query/#comments</comments>
		<pubDate>Sat, 19 Jan 2013 22:10:05 +0000</pubDate>
		<dc:creator>Erick</dc:creator>
				<category><![CDATA[Talks]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Phoenix]]></category>

		<guid isPermaLink="false">http://ethitter-com.network.erick.me/?p=707</guid>
		<description><![CDATA[Ever wonder what process WordPress undertakes to deliver the right content and template to your site's visitors? In my newest talk, From URL to Query, I aim to demystify the process.]]></description>
				<content:encoded><![CDATA[<p>Today at WordCamp Phoenix, I presented my newest talk, <em>From URL to Query</em>. Briefly, this was the intent of my talk:</p>
<blockquote><p>Ever wonder what process WordPress undertakes when someone visits your site? Or how it translates that nice permalink to the database query that ultimately delivers the content your visitors requested? Or what it takes to load the appropriate template from your site’s theme?</p>
<p>In this talk, I’ll walk through WordPress’ loading process and shed some light on the various APIs used. I’ll also discuss how these APIs work together to make the software function.</p></blockquote>
<p>Slides are available at <a href="http://slides.ethitter.com/wcphx-from-url-to-query/" target="_blank">http://slides.ethitter.com/wcphx-from-url-to-query/</a>.</p>
<div id="v-ztQPDLYS-1" class="video-player"><embed id="v-ztQPDLYS-1-video" src="http://s0.videopress.com/player.swf?v=1.03&amp;guid=ztQPDLYS&amp;isDynamicSeeking=true" type="application/x-shockwave-flash" width="604" height="338" title="Erick Hitter: From URL to Query" wmode="direct" seamlesstabbing="true" allowfullscreen="true" allowscriptaccess="always" overstretch="true"></embed></div>
]]></content:encoded>
			<wfw:commentRss>http://ethitter.com/2013/01/from-url-to-query/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordCamp Phoenix 2013: WP401</title>
		<link>http://ethitter.com/2013/01/wcphx-wp401/</link>
		<comments>http://ethitter.com/2013/01/wcphx-wp401/#comments</comments>
		<pubDate>Sat, 19 Jan 2013 15:58:09 +0000</pubDate>
		<dc:creator>Erick</dc:creator>
				<category><![CDATA[Talks]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Phoenix]]></category>

		<guid isPermaLink="false">http://ethitter-com.network.erick.me/?p=696</guid>
		<description><![CDATA[Yesterday, Paul Clark and I ran WordCamp Phoenix 2013's WP401 session. We covered everything from object-oriented plugin development to CSS preprocessors to WordPress' rewrite system.]]></description>
				<content:encoded><![CDATA[<p>Yesterday, Paul Clark (<a href="http://twitter.com/pdclark">@pdclark</a>, <a href="http://pdclark.com">pdclark.com</a>) and I ran WordCamp Phoenix 2013&#8242;s WP401 session. We covered everything from object-oriented plugin development to CSS preprocessors to WordPress&#8217; rewrite system.</p>
<p>The session was recorded, so video should eventually be available on <a href="http://wordpress.tv/">WordPress.tv</a>.</p>
<p>In the meantime, slides for those topics I prepared them for are available:</p>
<ul>
<li><a href="http://slides.ethitter.com/wcphx-wp401/oop-plugin-development.html" target="_blank">Obejct-oriented Plugin Development</a></li>
<li><a href="http://slides.ethitter.com/wcphx-wp401/new-apis-3.5.html" target="_blank">New APIs in WordPress 3.5: <code>WP_Post</code> and <code>WP_Image_Editor</code></a></li>
<li><a href="http://slides.ethitter.com/wcphx-wp401/playing-well-with-others.html" target="_blank">Playing Well with Others: Why You Should Include Actions and Filters in Your Code</a></li>
<li><a href="http://slides.ethitter.com/moving-beyond-codex/" target="_blank">Moving Beyond the Codex: Learning WordPress from Itself</a></li>
</ul>
<p>Thanks to all who attended! It was a great day, due in no small part to the great audience we had. It was a pleasure to work with Paul on this as well!</p>
]]></content:encoded>
			<wfw:commentRss>http://ethitter.com/2013/01/wcphx-wp401/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>