<?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>Evan Solomon &#187; Notes</title>
	<atom:link href="http://evansolomon.me/notes/feed/" rel="self" type="application/rss+xml" />
	<link>http://evansolomon.me</link>
	<description>Notes on life</description>
	<lastBuildDate>Mon, 30 Apr 2012 23:33:42 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.4-beta3</generator>
		<item>
		<title>More Supercommits</title>
		<link>http://evansolomon.me/notes/more-supercommits/</link>
		<comments>http://evansolomon.me/notes/more-supercommits/#comments</comments>
		<pubDate>Mon, 30 Apr 2012 23:25:23 +0000</pubDate>
		<dc:creator>evan</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://evansolomon.me/?p=1131</guid>
		<description><![CDATA[There have been two more Supercommits in WordPress core since mine and Nacin&#8217;s, which was the first. Changesets 20086 and 20217 both did the same. Here&#8217;s supercommits.php, a quick and slightly hack-ish script to find them. It can be run &#8230; <a href="http://evansolomon.me/notes/more-supercommits/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>There have been two more <a href="http://evansolomon.me/notes/supercommit/">Supercommits</a> in WordPress core since mine and Nacin&#8217;s, which was the first. Changesets <a href="http://core.trac.wordpress.org/changeset/20086">20086</a> and <a href="http://core.trac.wordpress.org/changeset/20217">20217</a> both did the same.</p>
<p>Here&#8217;s <a href="https://gist.github.com/2563530">supercommits.php</a>, a quick and slightly hack-ish script to find them.  It can be run from any SVN working copy directory.</p>
<p><script src="https://gist.github.com/2563530.js"> </script></p>
]]></content:encoded>
			<wfw:commentRss>http://evansolomon.me/notes/more-supercommits/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Please Build My Ideal Golf Course</title>
		<link>http://evansolomon.me/notes/please-build-my-ideal-golf-course/</link>
		<comments>http://evansolomon.me/notes/please-build-my-ideal-golf-course/#comments</comments>
		<pubDate>Mon, 30 Apr 2012 07:30:43 +0000</pubDate>
		<dc:creator>evan</dc:creator>
				<category><![CDATA[Fun]]></category>

		<guid isPermaLink="false">http://evansolomon.me/?p=1125</guid>
		<description><![CDATA[There should be a complete absence of the annoyance and irritation caused by the necessity of searching for lost balls. Allister MacKenzie, The Spirit of St. Andrews I&#8217;ve been playing lots of golf lately and it&#8217;s reinforced my long-held opinion &#8230; <a href="http://evansolomon.me/notes/please-build-my-ideal-golf-course/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<blockquote><p>
  There should be a complete absence of the annoyance and irritation caused by the necessity of searching for lost balls.
</p></blockquote>
<p><cite>Allister MacKenzie, The Spirit of St. Andrews</cite></p>
<p>I&#8217;ve been playing lots of golf lately and it&#8217;s reinforced my long-held opinion that the design of most golf courses is just awful. That got me to thinking: what would go into my ideal golf course?</p>
<h3>Easy first hole</h3>
<p>The first tee is no time to ask a player to hit a great tee shot.  No one is really warmed up at that point and the point of golf is to be fun &#8212; the way to make a round fun is not to require a 270 bomb with the first swing.  That hole has its place, but it&#8217;s later in the round once you&#8217;re in a rhythm. Making a hole difficult because it&#8217;s first is like making it difficult by shouting during someone&#8217;s backswing; it&#8217;s certain to add strokes, but mostly unrelated to skill or quality of execution.</p>
<p>The first hole should be playable with a fairway wood or long iron from the tee and it shouldn&#8217;t have any water hazards. It should also be a par 4. Par 3&#8242;s will slow down play too much at the beginning of the round and should also require more accurate distance control than can be expected on the first hole.  Par 5&#8242;s easy enough to qualify for a good first hole are just a waste of a potentially fun birdie hole later in the round.</p>
<h3>No fescue (or other pseudo-hazards)</h3>
<p>Three foot tall fescue looks great in the photo gallery on a golf course&#8217;s website, but is absolutely useless almost every time it&#8217;s planted on a golf course. Fescue is the worst kind of pseudo-hazard because you&#8217;re very likely to lose your ball in it and the rules of golf afford you only one solution: re-hit.  Fescue tends to come into play in two places: not-so-great shots and really awful shots.  Both are bad uses.</p>
<p>The &#8220;not-so-great shot&#8221; fescue is usually 5-10 yards off the fairway, after a relatively narrow line of normal rough.  In this case you&#8217;ve hit a bad drive, but not one that would give you any trouble in approaching the green or at least laying up on most other holes. But the architect decided to drop some knee-high grass here, so now you&#8217;re searching for a lost ball after being 10 yards from a perfect approach.  The &#8220;really awful shot&#8221; fescue is usually on parts of the coure that don&#8217;t even seem like they should be in play, those spots where it&#8217;s just filling the gap between the border of the property and the designed hole.  In this case you&#8217;re usually in pretty bad shape and don&#8217;t have any shot to the green, so I&#8217;m not sure what the point is of punishing you with fescue here.</p>
<p>The result is that fescue usually feels like random punishment &#8212; maybe you&#8217;ll find it, maybe you won&#8217;t.  that&#8217;s bad, lazy design.</p>
<h3>Creative punishments</h3>
<p>My first two points shouldn&#8217;t imply that I want to put bumpers on any hazardous part of a golf course.  I am all for punishing bad shots, but yet-another-hazard is not the only way to do it.  Instead of filling courses with ponds and fairway bunkers (and fescue) to combat any wayward shot, architects should use more interesting tactics.  One of my favorites is slopes and blocked views.  Give me a side hill lie to a hidden green when I hit a bad shot.  It makes the course just as difficult if you&#8217;d plopped down another fairway bunker, but much more interesting.</p>
<h3>Fewer tee boxes</h3>
<p>When I started playing golf every course I knew of had the same three options for tees: blue, white, and red.  Then came gold tees.  Now choosing a tee box to play from can feel like shopping for laundry detergent.  Fix or six tee boxes on a course is no longer uncommon, and it results in far too much artificial development.  Building that many tee boxes means often half a hole is unnaturally-manufactured, and the rest of the hole is dulled down to accomodate shots from every conceivable distance.  Three tee boxes means minimal disruption of the hole, and if a couple people play from tees that are slightly longer or shorter than they&#8217;re used to the game will be that much more interesting.</p>
<h3>Mark every sprinkler head</h3>
<p>There are few things more frustrating than walking in circles trying to find a marker when your ball is right in the middle of the fairway.  Doubly so when you come across many unmarked sprinklers on the way.  It baffles me when this happens because markings on the course are so useful and so easy to produce that the only thing that makes sense is marking everything out there.</p>
<p>This extends to sprinklers that are over 200 yards, by the way. I once saw a sprinkler marked &#8220;Don&#8217;t even think about it&#8221;.  While this was cute and did make me laugh, it was still annoying because even distances I can&#8217;t reach are useful to measure.  No one&#8217;s going for the green from 300 yards away, but knowing that it&#8217;s 300 and not 350 means I will hit a different club to layup.  Measuring the distance costs almost nothing, so just do it and make it easy to find for the people playing your course.</p>
<h3>&#8220;Good&#8221; places to miss</h3>
<p>A sufficiently-hard golf hole should often give you very difficult shots.  That&#8217;s great as long as you give me an option to hit an easier shot in exchange for lost (portions of) strokes.  Your green tucked behind a row of bunkers is just lazy if you don&#8217;t give me a bailout area to aim for when I can&#8217;t make the approach, maybe because I&#8217;m in the rough.</p>
<p>Usually when this is done it&#8217;s right in front of the green, where the fairway extends right up to the fringe.  That&#8217;s boring and often pointless, as architects try to squeeze that area as much as possible between the green-side hazards.  A great bailout area can still require a carry over hazards, but give me a more forgiving place to land to the side of the green.  A very underused design feature is bailout areas behind greens, which I wish I saw more of.  These make the player commit to going long and not missing short to be safe.  Whatever you decide, just give the player more than one way to play the hole.</p>
<h3>Obvious targets</h3>
<p>Every time I stand on a tee and wonder where I&#8217;m supposed to hit it, a golf course architect has failed miserably.  There are so many ways to give players a visual clue about where to play, that not doing it is unforgivable.  The boring way to do it is the classic barber pole in the fairway on your target line.  More creative architects use natural features of the land &#8212; a large tree in the distance, a boulder, a bunker you have to carry, etc.  On any tee shot you should be able to tell me in a few words what to aim at so that I don&#8217;t have to wonder.  I can&#8217;t count the number of times I&#8217;ve stood on a tee, unsure, hit it exactly where I was aiming and though, &#8220;I hope that&#8217;s good&#8221;.  If you can&#8217;t give me an indication of where to hit it, you&#8217;re not allowed to make tee shots with obstructed views.</p>
]]></content:encoded>
			<wfw:commentRss>http://evansolomon.me/notes/please-build-my-ideal-golf-course/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Perception is random</title>
		<link>http://evansolomon.me/notes/perception-is-random/</link>
		<comments>http://evansolomon.me/notes/perception-is-random/#comments</comments>
		<pubDate>Mon, 23 Apr 2012 06:08:41 +0000</pubDate>
		<dc:creator>evan</dc:creator>
				<category><![CDATA[Fun]]></category>

		<guid isPermaLink="false">http://evansolomon.me/?p=1097</guid>
		<description><![CDATA[We’re making it less random to make it feel more random. Steve Jobs, on the iPod &#8220;shuffle&#8221; feature iPod customers complained that the shuffle feature wasn&#8217;t random. Noticing repeats in artists, albums, or genres, users concluded that the shuffle wasn&#8217;t &#8230; <a href="http://evansolomon.me/notes/perception-is-random/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<blockquote><p>We’re making it less random to make it feel more random.</p></blockquote>
<p><cite><a href="http://www.dailymail.co.uk/home/moslive/article-1334712/Humans-concept-randomness-hard-understand.html">Steve Jobs, on the iPod &#8220;shuffle&#8221; feature</a></cite></p>
<p>iPod customers complained that the shuffle feature wasn&#8217;t random.  Noticing repeats in artists, albums, or genres, users concluded that the shuffle wasn&#8217;t properly shuffling.  In response, Apple made the shuffle non-random by preventing repeats of similar songs in close proximity.</p>
]]></content:encoded>
			<wfw:commentRss>http://evansolomon.me/notes/perception-is-random/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Making your own tools</title>
		<link>http://evansolomon.me/notes/making-your-own-tools/</link>
		<comments>http://evansolomon.me/notes/making-your-own-tools/#comments</comments>
		<pubDate>Sat, 21 Apr 2012 09:07:25 +0000</pubDate>
		<dc:creator>evan</dc:creator>
				<category><![CDATA[Ideas]]></category>

		<guid isPermaLink="false">http://evansolomon.me/?p=1062</guid>
		<description><![CDATA[I had to invent integral and differential calculus to figure it out. Issac Newtown, on explaining elliptical orbits Technology companies go through constant analysis of build versus buy. Almost every part of a technology company&#8217;s product and tools can be &#8230; <a href="http://evansolomon.me/notes/making-your-own-tools/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<blockquote><p>I had to invent integral and differential calculus to figure it out.</p></blockquote>
<p><cite>Issac Newtown, on explaining elliptical orbits<cite></p>
<p>Technology companies go through constant analysis of build versus buy.  Almost every part of a technology company&#8217;s product and tools can be built or bought; it&#8217;s something I think about pretty often.</p>
<p>I just came across this incredible interview with Neil deGrasse Tyson where he tells a &#8220;build versus buy&#8221; story about Issac Newton, of all people.  Tyson is asked by a young kid, &#8220;How do you figure all of this out?&#8221;  Meaning, I guess, how do you become one of the most influential physicists in the world.  A great question, though probably one the kid wasn&#8217;t really expecting an answer to.  Tyson, as usual, delivers.  He talks about applying tools to problems, and how the very smartest people can make their own tools to solve their own problems.</p>
<p>Issac Newtown wanted to explain why planets orbit the sun in ellipses rather than circles.  To do it, first he invented calculus.</p>
<p><iframe width="640" height="480" src="http://www.youtube.com/embed/YXh9RQCvxmg?rel=0&#038;start=4226&#038;showinfo=0" frameborder="0" allowfullscreen></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://evansolomon.me/notes/making-your-own-tools/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Developers, users, and WordCamp tracks</title>
		<link>http://evansolomon.me/notes/developers-users-and-wordcamp-tracks/</link>
		<comments>http://evansolomon.me/notes/developers-users-and-wordcamp-tracks/#comments</comments>
		<pubDate>Tue, 10 Apr 2012 00:51:31 +0000</pubDate>
		<dc:creator>evan</dc:creator>
				<category><![CDATA[Ideas]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://evansolomon.me/?p=998</guid>
		<description><![CDATA[Event organizers shouldn&#8217;t try to categorize and separate attendees. It might even be impossible &#8212; at the very least it&#8217;s really hard. It&#8217;s pretty common for WordCamps to have multiple tracks, and when it happens it&#8217;s almost always split by &#8230; <a href="http://evansolomon.me/notes/developers-users-and-wordcamp-tracks/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Event organizers shouldn&#8217;t try to categorize and separate attendees. It might even be impossible &#8212; at the very least it&#8217;s really hard.</p>
<p>It&#8217;s pretty common for WordCamps to have multiple tracks, and when it happens it&#8217;s almost always split by types of people &#8212; developers and users, and sometimes designers. I won&#8217;t go through the many, many examples, but there are more than enough just recently to make the point, like: <a href="http://2012.birmingham.wordcamp.org/schedule/">this</a>, <a href="http://2012.miami.wordcamp.org/schedule-saturday/">this</a>, <a href="http://2011.vegas.wordcamp.org/schedule/">this</a>, and <a href="http://2012.sandiego.wordcamp.org/schedule/">this</a>. To a lesser extent, the same thing is common at WordPress meetups. I think this strategy is misguided. Conferences&#8217; and meetups&#8217; greatest values to me are the chances to learn something. Describing tracks by who you are (a proxy for what you already know) instead of what you want to learn misses those values.</p>
<p>I&#8217;ve recently started co-organizing the <a href="http://www.meetup.com/wordpress-sf/">San Francisco WordPress meetup</a>, which is a pretty big and diverse group. Big and diverse is great, but part of the territory is that no matter what you do, someone will tell you that you should have done something else. Try a technical-focused presentation and you&#8217;ll hear, &#8220;It was too hard to follow for non-programmers&#8221;. Try a publisher-focused presentation and you&#8217;ll hear, &#8220;This doesn&#8217;t relate to my freelance web development business&#8221;. That&#8217;s not meant to be a knock on attendees, because those are both completely reasonable responses.  As an interested WordCamp attendee and new meetup organizer, these things have been on my mind a lot.</p>
<p>Even if segmenting an audience by its characteristics made sense, it probably doesn&#8217;t work. Audiences cannot be so clearly compartmentalized. Does a &#8220;Developer&#8221; and a &#8220;User&#8221; track imply that developers aren&#8217;t users? I hope not. Developer is a vague term; at what point does a power user that opens up <code>functions.php</code> or starts a child theme become a developer? How many blog posts does a developer have to write before they qualify as a user? Neither developer nor designer nor user is a mutually exclusive characteristic; what&#8217;s the point in segmenting people by population when they often won&#8217;t fit into your segments?</p>
<p>An event organizer is an entertainer. They put together a program that they think will give their audience the greatest value, which probably means a combination of education, networking, and fun. The whole concept of an event is about the audience, and its of little benefit to the audience to divide itself based on who they are. I don&#8217;t think anyone goes to events to meet people who are just like them. I hope people go to learn something and meet people who are interesting and informative &#8212; even moreso, I hope WordCamps and meetups aim to inform and interest attendees by introducing them to new people and ideas. The tracks should be organized in a way that makes finding interesting, informative content as easy as possible. For me, that means organizing sessions by what the content will be, not who the audience <em>should</em> be. If I&#8217;m a blogger that wants to learn how to write plugins, should I go to the developer track? For that matter, am I even allowed to go to the developer track? It&#8217;s not entirely clear from the name, and while I know anyone who wants to attend any session is welcome, we shouldn&#8217;t assume everyone does. Nor should we assume everyone will want to attend sessions just because other people like them are there.</p>
<p>The more granular you make the audience distinctions, the less useful they become. If there are five tracks and I fit into four of them, my choice of what to attend is really a choice of which part of myself I&#8230;I don&#8217;t even know. Is it which part I like the most? Which part I want to improve the most? Which part I feel the most confident in? There is very little context when asked to self-categorize like this. On the other hand, if the choice is which type of content I&#8217;m most interested in, there&#8217;s a lot more context for prioritizing my options and less opportunity to fear expected or allowed.</p>
<p>The naive reaction to this is to try to reduce the complaints by (dis)satisfying everyone equally &#8212; one common approach is alternating the focus of each meetup between however many groups you&#8217;re trying to cater to. The more-likely-to-succeed approach is to optimize happiness by communicating your goals to your audience. Maybe that&#8217;s to be focused on raising the technical bar, or developing a crop of great writers, or making everyone a multi-talented WordPress user (see, &#8220;user&#8221; is a vague term, too). Any of those are fine goals as long as everyone has the same expectations. What won&#8217;t work, especially in a city as big as San Francisco, is to be everything to everyone by making enough granularly-focused tracks to hit all the requirements.</p>
<p>My ideal event would focus on being as valuable as possible to its audience by doing two things.</p>
<ol>
<li>Communicate your goals clearly. Let me decide if your goals match mine, but don&#8217;t try to force it.</li>
<li>Give me the information I need to get the most out of your event. Start with what I can learn and where. Let me figure out who I want to spend the time with, whether it&#8217;s people like me or not.</li>
</ol>
<p>I met with one of the other organizers of the San Francisco WordPress meetup last week and we talked about this challenge.  We both agreed that it was nigh on impossible to give everybody what they want, but the solutions are a bit scary.  We certainly don&#8217;t want to alienate a large portion of our audience to focus on something that turns out not to work.  But we agreed that straddling the fence wasn&#8217;t a viable solution.  We have some things we&#8217;re going to experiment with, but nothing certain.  </p>
<p>In the meantime I&#8217;m going to keep thinking about how to make events more useful for audiences.  You have a bunch of people who share a common interest and came to the same place (physical or not) to talk about the same topics &#8212; I just can&#8217;t believe that separating them on specs is the best first step.</p>
]]></content:encoded>
			<wfw:commentRss>http://evansolomon.me/notes/developers-users-and-wordcamp-tracks/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Golftec: Hip turn</title>
		<link>http://evansolomon.me/notes/golftec-hip-turn/</link>
		<comments>http://evansolomon.me/notes/golftec-hip-turn/#comments</comments>
		<pubDate>Wed, 04 Apr 2012 08:20:51 +0000</pubDate>
		<dc:creator>evan</dc:creator>
				<category><![CDATA[Fun]]></category>
		<category><![CDATA[golftec]]></category>

		<guid isPermaLink="false">http://evansolomon.me/?p=982</guid>
		<description><![CDATA[I&#8217;ve been taking Golftec lessons again and trying to play a bit more. Recently we&#8217;ve focused on getting the club less steep (more around my body) on my backswing. It&#8217;s been a struggle and I haven&#8217;t felt like I&#8217;ve been &#8230; <a href="http://evansolomon.me/notes/golftec-hip-turn/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been taking Golftec lessons again and trying to play a bit more.  Recently we&#8217;ve focused on getting the club less steep (more around my body) on my backswing.  It&#8217;s been a struggle and I haven&#8217;t felt like I&#8217;ve been able to hit it very well with the new move.  Today made a lot more sense of it when we worked on my hip and shoulder turn.</p>
<p>I have a big shoulder turn &#8212; actually quite a bit too big according to the Golftec target data &#8212; and part of that is because I also have a big hip turn.  Combined, that makes for a long swing which makes it harder to get back to impact well.  Here&#8217;s a quick before swing.</p>
<p><center><div id="v-6ZdUG1Qe-1" class="video-player"><embed id="v-6ZdUG1Qe-1-video" src="http://s0.videopress.com/player.swf?v=1.03&amp;guid=6ZdUG1Qe&amp;isDynamicSeeking=true" type="application/x-shockwave-flash" width="584" height="350" title="Before" wmode="direct" seamlesstabbing="true" allowfullscreen="true" allowscriptaccess="always" overstretch="true"></embed></div></center></p>
<p>My hips get very closed and with a bit turn on top of that my shoulders are actually past 110 degrees closed at the top of my backswing.  What actually creates most of the power in a golf swing is the <em>difference</em> between your hip and shoulder turn.  We worked on maintaining that difference but getting both numbers lower.  The goal was to make my swing shorter overall but keep the big coil in my backswing and keep the club in a good place without getting too far across the line at the top.</p>
<p>After a few drills to keep my lower body quieter the results were pretty obvious.  My swing is clearly much shorter, and I hit almost every ball dead center which was clear feedback to me that as my swing gets longer I have a really hard time keeping everything in line through impact.  You can actually see one of the drills in the &#8220;after&#8221; swing in this video.  My instructor held a club between my knees so that I couldn&#8217;t rotate (much) against it.  This felt awkward, but again, the feedback was pretty clear that I hit it great with the more compact move.</p>
<p><center><div id="v-tctqGzXo-1" class="video-player"><embed id="v-tctqGzXo-1-video" src="http://s0.videopress.com/player.swf?v=1.03&amp;guid=tctqGzXo&amp;isDynamicSeeking=true" type="application/x-shockwave-flash" width="584" height="350" wmode="direct" seamlesstabbing="true" allowfullscreen="true" allowscriptaccess="always" overstretch="true"></embed></div></center></p>
]]></content:encoded>
			<wfw:commentRss>http://evansolomon.me/notes/golftec-hip-turn/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Faster WordPress: Multisite, nginx, and Batcache</title>
		<link>http://evansolomon.me/notes/faster-wordpress-multisite-nginx-batcache/</link>
		<comments>http://evansolomon.me/notes/faster-wordpress-multisite-nginx-batcache/#comments</comments>
		<pubDate>Sun, 01 Apr 2012 21:35:28 +0000</pubDate>
		<dc:creator>evan</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://evansolomon.me/?p=911</guid>
		<description><![CDATA[A couple weeks ago I decided to move this site to a new server. With the help of Pete Mall and Mark Jaquith I settled on the following setup: Linode 512 MB Debian 6 32-bit PHP-FPM APC (for opcode and &#8230; <a href="http://evansolomon.me/notes/faster-wordpress-multisite-nginx-batcache/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>A couple weeks ago I decided to move this site to a new server. With the help of <a href="http://developersmind.com/">Pete Mall</a> and <a href="http://markjaquith.com/">Mark Jaquith</a> I settled on the following setup:</p>
<ul>
<li>Linode 512 MB</li>
<li>Debian 6 32-bit</li>
<li>PHP-FPM</li>
<li>APC (for opcode and object cache)</li>
<li>nginx</li>
<li>WordPress Multisite</li>
<li>Batcache</li>
</ul>
<p>I documented my setup and after testing it with another friend (it worked!) and mentioning it to a couple others, decided to post it here.  I&#8217;m going to assume you&#8217;re familiar with the basics of administering a VPS, especially SSH.</p>
<h3>Linode</h3>
<p>I did this on Linode, but it will probably work fine on pretty much any VPS (or dedicated server).  It won&#8217;t work on a shared host because it depends on installing specific software that requires root access.  My server needs are not very extravagant so I chose Linode&#8217;s cheapest plan, a 512 MB VPS.  You&#8217;ll need to choose a location for your server, and since I have no idea what the practical differences are, I went with Dallas based on a recommendation.  For the purposes of this tutorial, it doesn&#8217;t matter which one you choose.</p>
<p>Go through the Linode setup, choose the Debian 6 32-bit distribution, get your ssh information, and login to your new server.  If you use a larger VPS you might want the 64-bit distribution, but on a 512 MB server that&#8217;s going to cause problems.</p>
<h3>Linux</h3>
<p>Linode has a very good tutorial on the first few things you&#8217;ll want to setup with your new Linux install.  Once you&#8217;re logged in you can skip to the security section in <a href="http://library.linode.com/getting-started#sph_install-security-updates">Linode&#8217;s &#8220;Getting Started&#8221; tutorial</a>.  That will walk you through: </p>
<ul>
<li>Updating your package installer</li>
<li>Setting your server&#8217;s hostname</li>
<li>Setting the timezone</li>
</ul>
<p>Your settings here can be unique to you.  In my case I like to name computing devices after Yankees players (see my external hard drive named Mattingly) so I called my Linode server <code>dimaggio</code>.  I like to use my local time, which is <code>America/Los_Angeles</code> in the Linux world.  Some people like to use UTC, which we do at Automattic.  Pick your poison.</p>
<p>Before you go any further, you should install <code>sudo</code> because you&#8217;ll need it soon and your server won&#8217;t have it by default.  You can do it with this one liner: </p>
<pre>apt-get install sudo</pre>
<p>Now that you have the basics setup, it&#8217;s time to move onto the real stuff &#8212; users, permissions, firewalls, and software.  Slicehost has two great tutorials on this: <a href="http://articles.slicehost.com/2009/3/31/debian-lenny-setup-page-1">Debian part 1</a>, and <a href="http://articles.slicehost.com/2009/3/31/debian-lenny-setup-page-2">Debian part 2</a>.  We&#8217;ll go through these now.</p>
<p>You don&#8217;t want to be logged in as <code>root</code> any longer than you absolutely have to.  The first thing Slicehost will walk you through doing is creating a new user account.  They use the username <code>demo</code> but you&#8217;ll probably want to use your first name.  In my case I skipped the additional group management steps; I don&#8217;t plan on managing a large number of users and it&#8217;s easier to have fewer moving parts.  If you don&#8217;t assign your user to a group, it will be automatically put in a group with its own name &#8212; my user is in a group called <code>evan</code>.  Slicehost will walk you through the details, but I&#8217;ll add one suggestion: do not log out of your root SSH session until you&#8217;ve successfully logged into your user account and confirmed that your <code>sudo</code> access works.  Otherwise you&#8217;ll need to reset your whole server and start from the beginning.  Once you&#8217;re setup, move onto <a href="http://articles.slicehost.com/2009/3/31/debian-lenny-setup-page-2">part 2</a>.</p>
<p>Part 2 mainly covers Bash and the Aptitude package installer.  I am pretty particular about my bash prompt.  You can grab the key parts of mine <a href="https://gist.github.com/2273494">here</a>.  This does a few things:</p>
<ul>
<li>Shorten long directory names by replacing the middle with an ellipse</li>
<li>Add the git branch name to the prompt (if you&#8217;re in a git repo)</li>
<li>Use up and down arrows to search your bash history using whatever you&#8217;ve already entered as a search prefix</li>
<li>Make tab cycle through available commands instead of listing them</li>
<li>Add tab-completion for git commands</li>
</ul>
<p>The git pieces rely on <a href="https://gist.github.com/2273507">this git auto-complete</a> script.</p>
<p>Once you&#8217;ve got your <code>.bashrc</code> setup and your package repositories updated, it&#8217;s time to move onto the the next step: nginx.</p>
<h3>The stack: PHP-FPM</h3>
<p>Debian&#8217;s default package repository has an outdated version of PHP-FPM, so first we&#8217;re going to add a new repository to our list.  Aptitude&#8217;s repository list is kept in <code>/etc/apt/sources.list</code> and we want to add a new line with this repo: <code>deb http://packages.dotdeb.org stable all</code>.  You&#8217;ll need to use <code>sudo</code> to edit this file and save it.  When you&#8217;re finished, it should look something like <a href="https://gist.github.com/2278825">this</a>. Now go back to your home directory and setup your new repository.</p>
<pre>cd ~
wget http://www.dotdeb.org/dotdeb.gpg
cat dotdeb.gpg | sudo apt-key add -
rm dotdeb.gpg
sudo apt-get update
sudo apt-get upgrade
</pre>
<p>Now we can install PHP and its siblings: </p>
<pre>sudo apt-get install php5 php5-fpm php-pear php5-common php5-mcrypt php5-mysql php5-cli php5-gd php5-apc</pre>
<p>We&#8217;ll be using PHP-FPM to handle all of the PHP requests that come in through nginx.  To do that, we&#8217;ll need to update the PHP-FPM config at <code>/etc/php5/fpm/pool.d/www.conf</code>.  We will set PHP-FPM to decide how many processes it will run and how it will listen for requests from nginx.  My config file is <a href="https://gist.github.com/2273968">here</a>.  It will set PHP-FPM to spawn a reasonable number of children and servers for 512 MB VPS and configure it to listen over a Unix socket instead of a TCP port.  These settings may not be perfect for you, but they should get you started.</p>
<p>Restart PHP to make sure your new settings are in effect.</p>
<pre>sudo /etc/init.d/php5-fpm restart</pre>
<h3>The stack: nginx</h3>
<p>We&#8217;re going to use nginx as our web server, so first we&#8217;ll install it.</p>
<pre>sudo apt-get install nginx</pre>
<p>Now we&#8217;ll setup our nginx config at <code>/etc/nginx/nginx.conf</code> to tell nginx how to server our data.  This file is pretty straightforward, but it does assume you&#8217;re using the 512 Linode server (or another one like it).  You can grab mine <a href="https://gist.github.com/2274081">here</a>.</p>
<p>Once you have your config in place, restart nginx to use the new settings.</p>
<pre>sudo /etc/init.d/nginx restart</pre>
<h3>The stack: MySQL</h3>
<p>The last part of your stack is MySQL, which we will install now: </p>
<pre>sudo apt-get install mysql-server php5-mysql</pre>
<p>Once you complete the MySQL installer you can head over to <a href="http://library.linode.com/troubleshooting/memory-networking#sph_mysql-low-memory-settings">Linode&#8217;s low memory settings tutorial</a> to configure some settings for MySQL geared toward low memory servers (which a 512 MB VPS is).  I followed their guidelines in my config, so I won&#8217;t copy it here. The last two items won&#8217;t be in your default my.cnf file, so you can add them at the bottom.</p>
<h3>Email</h3>
<p>One last thing you&#8217;ll want to install here, even though it&#8217;s not a part of the traditional L(A|E)MP stack, is an email server.  Again, Linode has a great <a href="http://library.linode.com/email/exim/send-only-mta-debian-6-squeeze">send-only mail server tutorial</a>.  If you want to configure a mail server to actually receive email, that&#8217;s outside the scope of this post.  In my case my server&#8217;s only interaction with mail is to send it &#8212; for example, when you need to reset your WordPress password.</p>
<h3>WordPress</h3>
<p>There are lots of ways to get WordPress installed.  In my case, I had a few requirements that guided my choices:</p>
<ul>
<li>I&#8217;m using WordPress multisite</li>
<li>I&#8217;m using the multisite domain mapping plugin</li>
<li>WordPress will manage my whole site</li>
<li>My site will be version controlled with git</li>
</ul>
<p>After experimenting with lots of different options, I decided on this setup:</p>
<ul>
<li>My public directory will just be a copy of my git repository</li>
<li>WordPress will be installed in my git repository as an <code>svn export</code></li>
<li>Local development will use <a href="http://markjaquith.wordpress.com/2011/06/24/wordpress-local-dev-tips/">Mark Jaquith&#8217;s local config setup</a></li>
</ul>
<p>At this point, you&#8217;ll want to install git on your server so that you can pull in your repository.  Again, a one-liner will do it for you:</p>
<pre>sudo apt-get install git-core</pre>
<p>I setup my git repository and exported <a href="http://core.svn.wordpress.org/trunk/">WordPress trunk</a>, then setup my <code>local-config.php</code> per Mark&#8217;s instructions.  Next I setup my <code>.gitignore</code> file to make sure I didn&#8217;t accidentally commit any of the local-specific data.</p>
<pre>.DS_Store
/local-config.php
/.htaccess
/wp-content/uploads/
/wp-content/blogs.dir/
/wp-content/plugins/hello.php
</pre>
<p>I won&#8217;t walk through the WordPress multisite installation.  If you need help with that, there&#8217;s a great <a href="http://codex.wordpress.org/Create_A_Network">Codex article</a> that covers it.  The only part specific to this tutorial is that you won&#8217;t want to use the <code>.htaccess</code> file (notice how I <code>.gitignore</code>&#8216;d it?) because we aren&#8217;t using Apache.  Instead, you&#8217;ll use a nginx config file to handle this.  In my case, I put a file called <code>.nginx-config</code> into the root of my git repo and symlink it to nginx&#8217;s <code>sites-enabled</code> directory.  You can grab my config file <a href="https://gist.github.com/2274120">here</a> &#8212; obviously you&#8217;ll want to replace domain.com with your actual domain.  I have a couple other rewrite rules specific to my site, but this should cover the basics.</p>
<p>Again, that config goes into your git repo, which means nginx has no idea it exists yet.  Once you&#8217;ve pulled your git repo onto your server, you can symlink it to the place nginx will look (<code>/etc/nginx/sites-enabled</code>).  In my case my web sites are being served from <code>/srv/www/domain.com/public</code>, so that&#8217;s where my git repo will be pulled.  This directory won&#8217;t exist by default, so you&#8217;ll need to create it as well as <code>/srv/www/domain.com/log</code>, which is where nginx will store your access and error logs.  You can put your website content in another directory if you want, but you&#8217;ll need to change the nginx config file to make it work.  Now you can symlink your config by running: </p>
<pre>sudo ln -s /srv/www/domain.com/public/.nginx-conf /etc/nginx/sites-enabled/domain.com</pre>
<p>This will take care of copying your rules to nginx, and it will also block nginx from serving that file publicly because it starts with a dot.</p>
<p>Restart nginx to make sure it uses your new virtual host.</p>
<pre>sudo /etc/init.d/nginx restart</pre>
<h3>Batcache</h3>
<p>Last, you&#8217;ll want to setup caching for WordPress.  I&#8217;m using Batcache, which uses the WordPress object cache for all of its page caching.  We use it on WordPress.com and it&#8217;s super-configurable, but I&#8217;m using it with the out-of-the-box settings for now.  <a href="http://wordpress.org/extend/plugins/batcache/">Batcache</a> requires a persistent object cache backend, which Mark Jaquith&#8217;s <a href="http://wordpress.org/extend/plugins/apc/">APC plugin</a> is perfect for on a one-server setup.  If you&#8217;re running multiple servers you should use Ryan&#8217;s <a href="http://wordpress.org/extend/plugins/memcached/">Memcached plugin</a> (and you should also have stopped reading this a while ago).  We already installed php5-apc (along with the rest of PHP) so there&#8217;s no server config needed here.</p>
<p>The Batcache installation is pretty straightforward.  You will put Batcache&#8217;s <code>batcache.php</code> into <code>/wp-content/mu-plugins</code> (which you&#8217;ll probably need to create).  Then you&#8217;ll put Batcache&#8217;s <code>advanced-cache.php</code> into <code>/wp-content</code>.  Finally, you&#8217;ll put APC&#8217;s <code>object-cache.php</code> into <code>/wp-content</code> (the same place as <code>advanced-cache.php</code>).  You&#8217;re almost there, you just need one line in your <code>wp-config.php</code> to tell WordPress to use the cache: </p>
<pre>define( 'WP_CACHE', true );</pre>
<h3>Finale</h3>
<p>That&#8217;s it.  You should be good to go with a very fast and easy (relatively speaking) WordPress setup.  There is some other house keeping you might want to do, like <a href="http://codex.wordpress.org/Hardening_WordPress">hardening WordPress</a>, but I&#8217;ll skip that for now because there is plenty of good information about it on the Codex.  You&#8217;ll also need to setup your DNS, both within Linode and in your domain registrar.  This is no different than any other setup so I&#8217;ll skip that as well.  Finally, you may want to configure other server-specific settings, like rotating logs.  You should check out <a href="http://library.linode.com/">Linode&#8217;s tutorials</a> on those.</p>
<p>For a bit of fun, you can run Apache&#8217;s benchmark test to see how many requests your server can (in theory) serve per second.  First you&#8217;ll want to install Apache&#8217;s dev tools.  Once you do that, from your server, we can throw a bunch of traffic at WordPress: </p>
<pre>sudo apt-get install apache2-dev
ab -n 10000 -c 1000 -H 'Host: domain.com' http://127.0.0.1/
</pre>
<p>The output will include a &#8220;Requests per second&#8221; line, and in my experience you should be able to hit the mid-6000&#8242;s.</p>
<p><em>Edit: I really do want to clarify this is mostly for fun, and not a useful metric of how much traffic you&#8217;ll be able to handle.  The one place this is actually useful is comparing your new server to an old server, purely on a relative basis.  For example, my old site running Apache with <code>mod_php</code> came in around 200-300 requests per second.  So I can get a sense of how much faster the new server is, but it does not mean I&#8217;ll be able to serve 500m page views per day from one VPS.</em></p>
<p>Again, I owe many thanks to <a href="http://developersmind.com/">Pete Mall</a> and <a href="http://markjaquith.com/">Mark Jaquith</a> for helping me figure this out.</p>
]]></content:encoded>
			<wfw:commentRss>http://evansolomon.me/notes/faster-wordpress-multisite-nginx-batcache/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>The other thing always looks easy</title>
		<link>http://evansolomon.me/notes/the-other-thing-always-looks-easy/</link>
		<comments>http://evansolomon.me/notes/the-other-thing-always-looks-easy/#comments</comments>
		<pubDate>Fri, 02 Mar 2012 23:11:03 +0000</pubDate>
		<dc:creator>evan</dc:creator>
				<category><![CDATA[Ideas]]></category>

		<guid isPermaLink="false">http://evansolomon.me/notes/?p=861</guid>
		<description><![CDATA[The most popular ideas in web design (and maybe just design) today is to make things easier. I can&#8217;t go 2 hours without someone remarking out how simple Twitter, Tumblr, Square or another product is. I think in general this &#8230; <a href="http://evansolomon.me/notes/the-other-thing-always-looks-easy/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>The most popular ideas in web design (and maybe just design) today is to make things easier.  I can&#8217;t go 2 hours without someone remarking out how simple Twitter, Tumblr, Square or another product is.  I think in general this idea is a fallacy caused by &#8220;the other thing&#8221; always appearing to be easier than it actually is.</p>
<p>&#8220;Twitter&#8217;s simplicity is brilliant, they stuck to the 140 character rule and that made it so easy,&#8221; they&#8217;ll say.  Then you go to twitter.com and, if you&#8217;re me, end up clicking almost blindly at an endless array of mouseovers, pop-outs and hover-state jumbled calamities.</p>
<p><img src="http://evansolomon.me/wp-content/uploads/2012/03/simple-twitter.png" alt="" width="572" height="390" class="size-full wp-image-862" /></p>
<p>&#8220;Square Card Case is amazing, just give them your name and get a receipt emailed to you,&#8221; someone tells me.  Then I download and install Card Case and am taken through the most confusing setup process I&#8217;ve ever seen where my goal is only go give someone my credit card number &#8212; in fact, that&#8217;s not just my goal but the <em>only</em> thing I can do to make the app usable.</p>

<a href='http://evansolomon.me/notes/the-other-thing-always-looks-easy/simple-cardcase-1/' title='Square Card Case -- Intro'><img width="200" height="300" src="http://evansolomon.me/wp-content/uploads/2012/03/simple-cardcase-1-200x300.png" class="attachment-medium" alt="First I have to click my name." title="Square Card Case -- Intro" /></a>
<a href='http://evansolomon.me/notes/the-other-thing-always-looks-easy/simple-cardcase-2/' title='Square Card Case -- Modal'><img width="200" height="300" src="http://evansolomon.me/wp-content/uploads/2012/03/simple-cardcase-2-200x300.png" class="attachment-medium" alt="Then I have to tap &quot;Account&quot;." title="Square Card Case -- Modal" /></a>
<a href='http://evansolomon.me/notes/the-other-thing-always-looks-easy/simple-cardcase-3/' title='Square Card Case -- Account'><img width="200" height="300" src="http://evansolomon.me/wp-content/uploads/2012/03/simple-cardcase-3-200x300.png" class="attachment-medium" alt="Then I have to tap &quot;Enable Tabs&quot;...wtf?" title="Square Card Case -- Account" /></a>
<a href='http://evansolomon.me/notes/the-other-thing-always-looks-easy/simple-cardcase-4/' title='Square Card Case -- Credit card'><img width="200" height="300" src="http://evansolomon.me/wp-content/uploads/2012/03/simple-cardcase-4-200x300.png" class="attachment-medium" alt="Finally a credit card input...where I can&#039;t paste anything." title="Square Card Case -- Credit card" /></a>

<p>I was reminded of this misconception about what&#8217;s easy last week when my parents were visiting.  They were trying to find the way to walk back to their hotel when I pointed out that it&#8217;s only about a mile away and my dad was carrying a shiny iPhone 4, complete with GPS and directions.  &#8220;I don&#8217;t know how to use that,&#8221; he said.  Assuming he meant he just didn&#8217;t know the hotel&#8217;s address or how to search for it, I took his phone, opened Google Maps, typed in the hotel name and asked for walking directions.  Shockingly, iOS alerted me that the Maps application wanted to use my (his) location.  &#8220;Hmm, what&#8217;s odd,&#8221; I thought to myself.  That thought lingered for a moment until I realized what it meant.  He was joking, he really didn&#8217;t know how to use the maps or GPS on his phone, a remarkable fact evidenced by the even more stunning realization that he&#8217;d actually never used the app</strong>.  Accordingly, he had never granted it permission to use his location.  &#8220;I searched for &#8216;GPS&#8217; once, but nothing came up, so I assumed it wasn&#8217;t there,&#8221; he told me upon further questioning.</p>
<p>I confirmed the prompt, got their directions, and sent them on their way.  But it was an enlightening reminder to me that even the iPhone, which I think most people agree is simple and easy and fun and so amazing it will shoot rainbows out of the unicorns it embeds in your eyeballs&#8230;can fail so miserably at helping someone find the thing they want, even when it&#8217;s right there on the home screen, staring them on the face. </p>
<div id="attachment_879" class="wp-caption aligncenter" style="width: 190px"><img src="http://evansolomon.me/wp-content/uploads/2012/03/simple-iphone-e1330728782372.jpg" alt="" width="180" height="177" class="size-full wp-image-879" /><p class="wp-caption-text">This icon is covert.</p></div>
<p>The point is not that Twitter or Square is confusing, or that the iPhone is poorly-designed, or that my dad shouldn&#8217;t have been able to figure out where the damned Maps app was &#8212; I mean, it&#8217;s right there on the home screen and it has a picture of a map!  The point is that it&#8217;s easy to say Something Else&trade; is easy.  You don&#8217;t see the support requests for Something Else&trade;, you don&#8217;t get alerts about the tickets for the bugs you haven&#8217;t fixed in Something Else&trade;, and if the media likes Something Else&trade; it&#8217;s convenient to agree and move on.  Worse, it&#8217;s convenient to copy the parts that seem like good ideas.  There are products that are genuinely brilliant, and even the ones that aren&#8217;t probably have at least one thing you can learn from, but I&#8217;m frustrated by how commonly it seems people are not learning, but rather spectating and assuming.  </p>
<p>The emperor probably isn&#8217;t wearing any clothes here, and the guy making Something Else&trade; may well be looking at the parts of your product that you know are broken and remarking, &#8220;Look how easy it is&#8230;&#8221;</p>
]]></content:encoded>
			<wfw:commentRss>http://evansolomon.me/notes/the-other-thing-always-looks-easy/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Mitt Romney&#8217;s Abortion Conversion</title>
		<link>http://evansolomon.me/notes/mitt-romneys-abortion-conversion/</link>
		<comments>http://evansolomon.me/notes/mitt-romneys-abortion-conversion/#comments</comments>
		<pubDate>Fri, 02 Mar 2012 06:36:17 +0000</pubDate>
		<dc:creator>evan</dc:creator>
				<category><![CDATA[Ideas]]></category>

		<guid isPermaLink="false">http://evansolomon.me/notes/?p=854</guid>
		<description><![CDATA[His word means everything to him, even when his words mean nothing. William Saletan, The Conversion William Saletan writes an extraordinarily well-researched article for Slate on the history of Mitt Romney&#8217;s public stance(s) on abortion. Regardless of politics, I wish &#8230; <a href="http://evansolomon.me/notes/mitt-romneys-abortion-conversion/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<blockquote><p>His word means everything to him, even when his words mean nothing.</p></blockquote>
<p><cite><a href="http://www.slate.com/articles/news_and_politics/the_conversion/2012/02/mitt_romney_s_abortion_record_flip_flop_or_conversion_.single.html">William Saletan, The Conversion</a></cite></p>
<p>William Saletan writes an extraordinarily well-researched article for Slate on the history of Mitt Romney&#8217;s public stance(s) on abortion.  Regardless of politics, I wish this level of detail in journalism was more common &#8212; or for that matter, common at all.  Slate deserves a lot of credit for publishing this, rather than 25 articles at a fraction of the cost that probably would have generated many times more pageviews.</p>
]]></content:encoded>
			<wfw:commentRss>http://evansolomon.me/notes/mitt-romneys-abortion-conversion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SighCrunch</title>
		<link>http://evansolomon.me/notes/sighcrunch/</link>
		<comments>http://evansolomon.me/notes/sighcrunch/#comments</comments>
		<pubDate>Fri, 10 Feb 2012 03:04:27 +0000</pubDate>
		<dc:creator>evan</dc:creator>
				<category><![CDATA[Fun]]></category>

		<guid isPermaLink="false">http://evansolomon.me/notes/?p=841</guid>
		<description><![CDATA[TechCrunch is slipping quickly down the slope of technical embarrassment. After she learned Python, Trigger then had to complete a Django tutorial in order to bring the Python online — she used Heroku to push stuff to a webserver. Alexia &#8230; <a href="http://evansolomon.me/notes/sighcrunch/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>TechCrunch is slipping quickly down the slope of technical embarrassment.</p>
<blockquote><p>After she learned Python, Trigger then had to complete a Django tutorial in order to bring the Python online — she used Heroku to push stuff to a webserver.</p></blockquote>
<p><cite><a href="http://techcrunch.com/2012/02/09/awwwwwwwwwwwwwwwwww/">Alexia Tsotsis</cite></p>
]]></content:encoded>
			<wfw:commentRss>http://evansolomon.me/notes/sighcrunch/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
