<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" version="2.0">

<channel>
	<title>Michael V. O'Brien</title>
	
	<link>http://michaelobrien.info/blog</link>
	<description />
	<lastBuildDate>Wed, 27 Jan 2010 04:46:55 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/notbrien" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="notbrien" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Emacs.app on Mac OS X Snow Leopard 10.6</title>
		<link>http://michaelobrien.info/blog/2009/10/emacsapp-on-mac-os-x-snow-leopard-106/</link>
		<comments>http://michaelobrien.info/blog/2009/10/emacsapp-on-mac-os-x-snow-leopard-106/#comments</comments>
		<pubDate>Wed, 07 Oct 2009 18:29:22 +0000</pubDate>
		<dc:creator>michael</dc:creator>
				<category><![CDATA[Emacs]]></category>
		<category><![CDATA[osx]]></category>

		<guid isPermaLink="false">http://michaelobrien.info/blog/?p=93</guid>
		<description><![CDATA[Update: A 64-bit version of Emacs can now be compiled from source.
With the release of Snow Leopard, the included Emacs binary was not compiled with Carbon or Cocoa support.  So, if a native OS X GUI is desired, compiling your own Emacs.app may be worthwhile.  That&#8217;s the route I&#8217;ve taken.  The Emacs [...]]]></description>
			<content:encoded><![CDATA[<p><b>Update:</b> A 64-bit version of Emacs can now be compiled from source.</p>
<p>With the release of Snow Leopard, the included Emacs binary was not compiled with Carbon or Cocoa support.  So, if a native OS X GUI is desired, compiling your own Emacs.app may be worthwhile.  That&#8217;s the route I&#8217;ve taken.  The Emacs developers are making improvements to the Cocoa version while dropping support for Carbon, and a 64-bit version should be able to compile from source.  I&#8217;ll update this post as I tweak my Emacs.app on Snow Leopard.</p>
<h3>64-bit Version</h3>
<p>Download the the &#8220;latest&#8221; source from <a href="http://savannah.gnu.org/projects/emacs">http://savannah.gnu.org/projects/emacs</a> (I personally used git. Known checkouts to work: <a href="http://git.savannah.gnu.org/cgit/emacs.git/commit/?id=115da71cd94d24194e72cf23f00810de6bfcbd84">Oct 12, 2009</a>, <a href="http://git.savannah.gnu.org/cgit/emacs.git/commit/?id=41c156e6d0cb4c36259ab2d53611df4288ee534d">Oct 24, 2009</a>):</p>
<pre>
$ git clone git://git.savannah.gnu.org/emacs.git
</pre>
<p>Run &#8216;./configure&#8217;:</p>
<pre>
$ cd emacs
$ ./configure --with-ns
</pre>
<p>Compile and create Emacs.app:</p>
<pre>
$ make install
</pre>
<p>Move &#8216;./emacs/nextstep/Emacs.app&#8217; to &#8216;/Applications/&#8217;:</p>
<pre>
$ mv ./nextstep/Emacs.app /Applications/
</pre>
<h3>32-bit Version</h3>
<p>If the 64-bit version doesn&#8217;t compile, you can compile a 32-bit version by doing:</p>
<pre>
$ CC="gcc -arch i386" ./configure --with-ns
</pre>
<p><b>Note:</b> There is more information about compiling a 64-bit version of Emacs.app at this <a href="http://blog.fac9.com/index.php/2009/08/30/building-a-64-bit-emacs-on-snow-leopard/">blog post</a>, this <a href="http://lists.gnu.org/archive/html/emacs-devel/2009-09/msg00162.html">mailing list thread</a>, and this <a href="http://atomized.org/2009/08/cocoa-emacs-231-cvs-builds-and-the-nextstep-port/">blog post</a>.</p>
<img src="http://feeds.feedburner.com/~r/notbrien/~4/PY-eDikuH5I" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://michaelobrien.info/blog/2009/10/emacsapp-on-mac-os-x-snow-leopard-106/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>AuthorizationExecuteWithPrivileges: A Simple Example</title>
		<link>http://michaelobrien.info/blog/2009/07/authorizationexecutewithprivileges-a-simple-example/</link>
		<comments>http://michaelobrien.info/blog/2009/07/authorizationexecutewithprivileges-a-simple-example/#comments</comments>
		<pubDate>Mon, 20 Jul 2009 01:26:40 +0000</pubDate>
		<dc:creator>michael</dc:creator>
				<category><![CDATA[Cocoa]]></category>
		<category><![CDATA[osx]]></category>

		<guid isPermaLink="false">http://michaelobrien.info/blog/?p=51</guid>
		<description><![CDATA[Introduction
I didn&#8217;t find Apple&#8217;s documentation to be completely clear on how to grant an Mac OS X application authorization to run system-level commands.  The best solution and only solution I could find was to use the function AuthorizationExecuteWithPrivileges.  I wrote two simple Xcode projects, OSXSimpleAuth and OSXSlightlyBetterAuth, for OS X Leopard (10.5) to [...]]]></description>
			<content:encoded><![CDATA[<h3>Introduction</h3>
<p>I didn&#8217;t find Apple&#8217;s documentation to be completely clear on how to grant an Mac OS X application authorization to run system-level commands.  The best solution and only solution I could find was to use the function <code>AuthorizationExecuteWithPrivileges</code>.  I wrote two simple Xcode projects, <a href="http://github.com/notbrien/OSXSimpleAuth">OSXSimpleAuth</a> and <a href="http://github.com/notbrien/OSXSlightlyBetterAuth">OSXSlightlyBetterAuth</a>, for OS X Leopard (10.5) to demonstrate its use, and I hope it will help others get something working quickly and gain a basic understanding, so they can concentrate on adding more robust functionality.</p>
<h3>Simple Example</h3>
<p>A simple example of how to use <code>AuthorizationExecuteWithPrivileges</code> is as follows:</p>
<ol>
<li>Create a Authorization Reference (<code>AuthorizationCreate</code>)</li>
<li>Run your tool with the authorization reference (<code>AuthorizationExecuteWithPrivileges</code>)</li>
</ol>
<p>For this example, <a href="http://github.com/notbrien/OSXSimpleAuth">OSXSimpleAuth</a>, I created a Foundation Tool and added the Security framework to it.</p>
<pre class="code">
<span class="comment-delimiter">// </span><span class="comment">Create authorization reference</span>
<span class="type">AuthorizationRef</span> <span class="variable-name">authorizationRef</span>;
<span class="type">OSStatus</span> <span class="variable-name">status</span>;
status = AuthorizationCreate(NULL, kAuthorizationEmptyEnvironment,
                             kAuthorizationFlagDefaults, &amp;authorizationRef);

<span class="comment-delimiter">// </span><span class="comment">Run the tool using the authorization reference</span>
<span class="type">char</span> *<span class="variable-name">tool</span> = <span class="string">"/sbin/dmesg"</span>;
<span class="type">char</span> *<span class="variable-name">args</span>[] = {NULL};
<span class="type">FILE</span> *<span class="variable-name">pipe</span> = NULL;
status = AuthorizationExecuteWithPrivileges(authorizationRef, tool,
                                            kAuthorizationFlagDefaults, args, &amp;pipe);
</pre>
<h3>Slightly Better Example</h3>
<p>A slightly better example that uses more options to run <code>AuthorizationExecuteWithPrivileges</code> and has links to some explanations from Apple&#8217;s documentation can be found in <a href="http://github.com/notbrien/OSXSlightlyBetterAuth">OSXSlightlyBetterAuth</a>.</p>
<pre class="code">
<span class="comment-delimiter">// </span><span class="comment">Create authorization reference
</span><span class="type">OSStatus</span> <span class="variable-name">status</span>;
<span class="type">AuthorizationRef</span> <span class="variable-name">authorizationRef</span>;

<span class="comment-delimiter">// </span><span class="comment">AuthorizationCreate and pass NULL as the initial
</span><span class="comment-delimiter">// </span><span class="comment">AuthorizationRights set so that the AuthorizationRef gets created
</span><span class="comment-delimiter">// </span><span class="comment">successfully, and then later call AuthorizationCopyRights to
</span><span class="comment-delimiter">// </span><span class="comment">determine or extend the allowable rights.
</span><span class="comment-delimiter">// </span><span class="comment">http://developer.apple.com/qa/qa2001/qa1172.html
</span>status = AuthorizationCreate(NULL, kAuthorizationEmptyEnvironment,
                             kAuthorizationFlagDefaults, &amp;authorizationRef);
<span class="keyword">if</span> (status != errAuthorizationSuccess)
    NSLog(@<span class="string">"Error Creating Initial Authorization: %d"</span>, status);

<span class="comment-delimiter">// </span><span class="comment">kAuthorizationRightExecute == "system.privilege.admin"
</span><span class="type">AuthorizationItem</span> <span class="variable-name">right</span> = {kAuthorizationRightExecute, 0, NULL, 0};
<span class="type">AuthorizationRights</span> <span class="variable-name">rights</span> = {1, &amp;right};
<span class="type">AuthorizationFlags</span> <span class="variable-name">flags</span> = kAuthorizationFlagDefaults |
                           kAuthorizationFlagInteractionAllowed |
                           kAuthorizationFlagPreAuthorize |
                           kAuthorizationFlagExtendRights;

<span class="comment-delimiter">// </span><span class="comment">Call AuthorizationCopyRights to determine or extend the allowable rights.
</span>status = AuthorizationCopyRights(authorizationRef, &amp;rights, NULL, flags, NULL);
<span class="keyword">if</span> (status != errAuthorizationSuccess)
    NSLog(@<span class="string">"Copy Rights Unsuccessful: %d"</span>, status);

NSLog(@<span class="string">"\n\n** %@ **\n\n"</span>, @<span class="string">"This command should work."</span>);
<span class="type">char</span> *<span class="variable-name">tool</span> = <span class="string">"/sbin/dmesg"</span>;
<span class="type">char</span> *<span class="variable-name">args</span>[] = {NULL};
<span class="type">FILE</span> *<span class="variable-name">pipe</span> = NULL;

status = AuthorizationExecuteWithPrivileges(authorizationRef, tool,
                                            kAuthorizationFlagDefaults, args, &amp;pipe);
<span class="keyword">if</span> (status != errAuthorizationSuccess)
    NSLog(@<span class="string">"Error: %d"</span>, status);

<span class="comment-delimiter">// </span><span class="comment">The only way to guarantee that a credential acquired when you
</span><span class="comment-delimiter">// </span><span class="comment">request a right is not shared with other authorization instances is
</span><span class="comment-delimiter">// </span><span class="comment">to destroy the credential.  To do so, call the AuthorizationFree
</span><span class="comment-delimiter">// </span><span class="comment">function with the flag kAuthorizationFlagDestroyRights.
</span><span class="comment-delimiter">// </span><span class="comment">http://developer.apple.com/documentation/Security/Conceptual/authorization_concepts/02authconcepts/chapter_2_section_7.html
</span>status = AuthorizationFree(authorizationRef, kAuthorizationFlagDestroyRights);
</pre>
<p>Notice the &#8220;Right&#8221; label in the authorization dialog box screenshot.  The <code>AuthorizationItem</code> was set with &#8220;system.privilege.admin&#8221; via the <code>kAuthorizationRightExecute</code> constant.</p>
<p><img src="/static/images/blog/osx_auth_dialog.png"></p>
<h3>Conclusion</h3>
<p>Apple recommends only using <code>AuthorizationExecuteWithPrivileges</code> in two cases.  One is to create an installer.  The other is to repair your helper tool by setting the setuid bit.  The helper tool is supposed to encapsulate the root privileged portion of the code. Be aware that I didn&#8217;t do this in the examples.  Go to the <a href="http://github.com/notbrien/OSXSimpleAuth">OSXSimpleAuth project page</a> and the <a href="http://github.com/notbrien/OSXSlightlyBetterAuth">OSXSlightlyBetterAuth project page</a> to download the example Xcode projects.</p>
<img src="http://feeds.feedburner.com/~r/notbrien/~4/OQedK_zPzDU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://michaelobrien.info/blog/2009/07/authorizationexecutewithprivileges-a-simple-example/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Repta Project Released</title>
		<link>http://michaelobrien.info/blog/2009/07/repta-project-released/</link>
		<comments>http://michaelobrien.info/blog/2009/07/repta-project-released/#comments</comments>
		<pubDate>Sun, 12 Jul 2009 17:02:40 +0000</pubDate>
		<dc:creator>michael</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[deployment]]></category>
		<category><![CDATA[repta]]></category>

		<guid isPermaLink="false">http://michaelobrien.info/blog/?p=44</guid>
		<description><![CDATA[I have a website that has certain JavaScript code snippets, such as Google Analytics, that need to be present only in the production environment and not the development environment. I needed an easy way to keep this separation, regardless of framework or lack of one. I wrote the repta tool to perform a global search [...]]]></description>
			<content:encoded><![CDATA[<p>I have a website that has certain JavaScript code snippets, such as Google Analytics, that need to be present only in the production environment and not the development environment. I needed an easy way to keep this separation, regardless of framework or lack of one. I wrote the <a href="/projects/repta">repta</a> tool to perform a global search and replace of a &#8220;tag&#8221; across all the project files as one of the steps during the deployment of the website.  <a href="/projects/repta">Check out the project page</a>.</p>
<img src="http://feeds.feedburner.com/~r/notbrien/~4/w1ikqFq5Aes" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://michaelobrien.info/blog/2009/07/repta-project-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A ‘cd’ Command for Git Projects</title>
		<link>http://michaelobrien.info/blog/2009/01/a-cd-command-for-git-projects/</link>
		<comments>http://michaelobrien.info/blog/2009/01/a-cd-command-for-git-projects/#comments</comments>
		<pubDate>Tue, 20 Jan 2009 20:26:28 +0000</pubDate>
		<dc:creator>michael</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[git]]></category>

		<guid isPermaLink="false">http://michaelobrien.info/blog/?p=28</guid>
		<description><![CDATA[I often find myself in a project directory and one of two things usually happens.  The first is that I would like to go directly to the top level directory of the project.  The second is that I would like to go outside of the project directory and get back very quickly.  [...]]]></description>
			<content:encoded><![CDATA[<p>I often find myself in a project directory and one of two things usually happens.  The first is that I would like to go directly to the top level directory of the project.  The second is that I would like to go outside of the project directory and get back very quickly.  Though not sophisticated, I came up with this simple shell script called <b>cd-to-project-root</b>.</p>
<pre class="code">
<span class="comment-delimiter">#</span><span class="comment">!/bin/</span><span class="keyword">sh</span><span class="comment">
</span>
pushd . &gt; /dev/null

<span class="keyword">until</span> [ -d .git ] || [ <span class="sh-quoted-exec">`pwd`</span> = <span class="string">'/'</span> ]; <span class="keyword">do</span>
    <span class="builtin">cd</span> ..;
<span class="keyword">done</span>

<span class="keyword">if</span> [ <span class="sh-quoted-exec">`pwd`</span> = <span class="string">'/'</span> ]; <span class="keyword">then</span>  <span class="comment-delimiter"># </span><span class="comment">try to go to a project directory
</span>    <span class="keyword">if</span> [ -z $<span class="variable-name">PREV_PROJECT_ROOT</span> ]; <span class="keyword">then</span>
        popd &gt; /dev/null
        <span class="builtin">echo</span> <span class="string">"Project directory not found."</span>;
    <span class="keyword">else</span>
        <span class="builtin">cd</span> $<span class="variable-name">PREV_PROJECT_ROOT</span>
    <span class="keyword">fi</span>
<span class="keyword">else</span>  <span class="comment-delimiter"># </span><span class="comment">at a project directory
</span>    <span class="builtin">export</span> <span class="variable-name">PREV_PROJECT_ROOT</span>=<span class="sh-quoted-exec">`pwd`</span>
<span class="keyword">fi</span>
</pre>
<p> <!-- End class="code" --></p>
<p>I saved this in my &#8220;~/bin&#8221; directory and made an alias to it called <b>cdp</b>.  It&#8217;s important to source the script, otherwise the shell variables will not retain their values when the script terminates.</p>
<pre>
alias cdp=". cd-to-project-root"
</pre>
<p>This allows me to type <b>cdp</b> to set the project directory, which is under git version control.  Anytime I want to get back to the project directory, I type <b>cdp</b>.</p>
<img src="http://feeds.feedburner.com/~r/notbrien/~4/V9Y9Rjo2wKI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://michaelobrien.info/blog/2009/01/a-cd-command-for-git-projects/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>RubyConf 2007</title>
		<link>http://michaelobrien.info/blog/2007/11/rubyconf-2007/</link>
		<comments>http://michaelobrien.info/blog/2007/11/rubyconf-2007/#comments</comments>
		<pubDate>Sat, 10 Nov 2007 20:01:43 +0000</pubDate>
		<dc:creator>michael</dc:creator>
				<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">12 at http://michaelobrien.info</guid>
		<description><![CDATA[I had a really good time at RubyConf 2007, and I&#8217;d have to say that it was the most enjoyable conference that I&#8217;ve been to.  The highlights of the conference for me were seeing other Ruby implementations, seeing the new Ruby features in Mac OS X Leopard, and meeting up with an Emacs group.
Phil [...]]]></description>
			<content:encoded><![CDATA[<p>I had a really good time at RubyConf 2007, and I&#8217;d have to say that it was the most enjoyable conference that I&#8217;ve been to.  The highlights of the conference for me were seeing other Ruby implementations, seeing the new Ruby features in Mac OS X Leopard, and meeting up with an Emacs group.</p>
<p><a href="http://technomancy.us">Phil Hagelberg</a> gave an interesting talk about getting more feedback from the tools you use while you&#8217;re writing code, especially from your editor.  After his talk, I chatted with him about Emacs, and we setup a time for an Emacs group meetup.  I told Matz about the meetup, and he was kind enough to stop by for a few minutes after his keynote.  He told us an interesting anecdote about how he added the keyword &#8216;end&#8217; to Ruby so that Emacs could properly auto indent the code.  This goes for any editor/tool.  Also, he said that he uses elisp to help him develop Ruby.</p>
<p>Ryan Davis&#8217; talk &#8220;Hurting Code for Fun and Profit&#8221; was entertaining.  It&#8217;s an interesting concept.  Basically, if you love the code, nurture it and enjoy it.  Otherwise, hate the code and hurt it, rip it out and rewrite it or fix it, be ruthless and mean, laugh at it, bend it to your will.  So, I guess if loving the code doesn&#8217;t work, become a code sadist.  Actually, in this case, a <a href="http://ruby.sadi.st">Ruby Sadist</a>.</p>
<p>Laurent Sansonetti&#8217;s talk &#8220;Mac OS X Loves Ruby&#8221; was awesome.  I liked the RubyCocoa demo.  He showed how to use Xcode to bind Ruby code to a form textbox and a form button by just dragging the file to each one and selecting the appropriate inputs and outputs.  He, also, showed a demo of using Ruby to manipulate an already running application, such as TextEdit.  His other demos were good, too.  The audience couldn&#8217;t help but break out into applause as they watched him manipulate Leopard by using Ruby, and he did this mostly at the command line.</p>
<img src="http://feeds.feedburner.com/~r/notbrien/~4/IL-qZS0T1Rw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://michaelobrien.info/blog/2007/11/rubyconf-2007/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Emacs.app on Mac OS X Leopard</title>
		<link>http://michaelobrien.info/blog/2007/10/emacsapp-on-mac-os-x-leopard/</link>
		<comments>http://michaelobrien.info/blog/2007/10/emacsapp-on-mac-os-x-leopard/#comments</comments>
		<pubDate>Sun, 28 Oct 2007 04:45:57 +0000</pubDate>
		<dc:creator>michael</dc:creator>
				<category><![CDATA[Emacs]]></category>

		<guid isPermaLink="false">10 at http://michaelobrien.info</guid>
		<description><![CDATA[Update: I have another blog post for Mac OS X Snow Leopard.
I&#8217;ve been using Mac OS X Leopard for about a day now.  The unfortunate thing that I discovered was that Leopard&#8217;s X11 support is not quite working yet.  There are issues with Inkscape and Gimp, and I couldn&#8217;t get Emacs to work [...]]]></description>
			<content:encoded><![CDATA[<p><b>Update:</b> I have another <a href="http://michaelobrien.info/blog/2009/10/emacsapp-on-mac-os-x-snow-leopard-106/">blog post for Mac OS X Snow Leopard</a>.</p>
<p>I&#8217;ve been using Mac OS X Leopard for about a day now.  The unfortunate thing that I discovered was that Leopard&#8217;s X11 support is not quite working yet.  There are issues with Inkscape and Gimp, and I couldn&#8217;t get Emacs to work in X11.  This encouraged me to find a better way to get Emacs into a windowed environment, and I ended up being able to create (uh, copy) an Emacs.app.</p>
<p>To create an Emacs.app, do the following:</p>
<p><a href="http://ftp.gnu.org/pub/gnu/emacs/">Download the Emacs source code</a>. Note: Leopard comes with emacs 22.1.1 (uses Carbon), so you want to download <strong>emacs-22.1.tar.gz</strong>.  However, instead of downloading the entire source code, you can download just the Emacs.app from me <a href="http://michaelobrien.info/files/emacs-22.1-mac-app.tar.gz">here</a> to save GNU 36MB of bandwidth.</p>
<p>Extract the files.</p>
<pre>$ tar zxvf emacs-22.1.tar.gz</pre>
<p>Go to the &#8216;emacs-22.1/mac&#8217; directory</p>
<pre>$ cd emacs-22.1/mac</pre>
<p>Copy &#8216;Emacs.app&#8217; to &#8216;/Applications/&#8217;</p>
<pre>$ sudo cp -r Emacs.app /Applications/</pre>
<p>Symlink /usr/bin/emacs to /Applications/Emacs.app/Contents/MacOS/emacs</p>
<pre>$ ln -s /usr/bin/emacs /Applications/Emacs.app/Contents/MacOS/emacs</pre>
<p>And, you may want to change the ownership on the Emacs.app</p>
<pre>$ sudo chown -R root:admin /Applications/Emacs.app</pre>
<p>That&#8217;s it.  You should now be able to launch Emacs.app as a regular Mac application.</p>
<img src="http://feeds.feedburner.com/~r/notbrien/~4/N7WpBuQHIzo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://michaelobrien.info/blog/2007/10/emacsapp-on-mac-os-x-leopard/feed/</wfw:commentRss>
		<slash:comments>31</slash:comments>
		</item>
	</channel>
</rss>
