<?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>michael-mccracken.net &#187; programming</title>
	<atom:link href="http://michael-mccracken.net/category/programming/feed/" rel="self" type="application/rss+xml" />
	<link>http://michael-mccracken.net</link>
	<description>This is a weblog</description>
	<lastBuildDate>Fri, 13 Apr 2012 20:24:31 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>Link: The Axis of Eval: What&#8217;s a condition system and why do you want one?</title>
		<link>http://michael-mccracken.net/2011/06/link-the-axis-of-eval-whats-a-condition-system-and-why-do-you-want-one/</link>
		<comments>http://michael-mccracken.net/2011/06/link-the-axis-of-eval-whats-a-condition-system-and-why-do-you-want-one/#comments</comments>
		<pubDate>Tue, 28 Jun 2011 22:08:01 +0000</pubDate>
		<dc:creator>mike</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[conditions]]></category>
		<category><![CDATA[exceptions]]></category>
		<category><![CDATA[lisp]]></category>

		<guid isPermaLink="false">http://michael-mccracken.net/?p=428</guid>
		<description><![CDATA[A nice explanation of conditions in Common Lisp from Manuel Simoni, with example code. This looks like a major improvement on the exception handling in any language I&#8217;ve used for anything big. The Axis of Eval: What&#8217;s a condition system and why do you want one?.]]></description>
			<content:encoded><![CDATA[<p>A nice explanation of conditions in Common Lisp from Manuel Simoni, with example code. This looks like a major improvement on the exception handling in any language I&#8217;ve used for anything big.</p>

<p><a href='http://axisofeval.blogspot.com/2011/04/whats-condition-system-and-why-do-you.html'>The Axis of Eval: What&#8217;s a condition system and why do you want one?</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://michael-mccracken.net/2011/06/link-the-axis-of-eval-whats-a-condition-system-and-why-do-you-want-one/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cram &amp; Simple testing for shell programs</title>
		<link>http://michael-mccracken.net/2011/04/cram-simple-testing-for-shell-programs/</link>
		<comments>http://michael-mccracken.net/2011/04/cram-simple-testing-for-shell-programs/#comments</comments>
		<pubDate>Tue, 05 Apr 2011 19:36:25 +0000</pubDate>
		<dc:creator>mike</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://michael-mccracken.net/?p=365</guid>
		<description><![CDATA[Cram is a test framework for command line programs, originally written for mercurial&#8217;s test suite. I like the approach &#8211; it just reads a shell transcript and runs the commands it finds. If the output doesn&#8217;t match, it shows you a diff. It&#8217;s kind of like doctest. It looks refreshingly simple to get started with, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://bitheap.org/cram/">Cram</a> is a test framework for command line programs, originally written for mercurial&#8217;s test suite.</p>

<p>I like the approach &#8211; it just reads a shell transcript and runs the commands it finds. If the output doesn&#8217;t match, it shows you a diff. It&#8217;s kind of like doctest.</p>

<p>It looks refreshingly simple to get started with, something that so many other test frameworks fail horribly at.</p>

<p>A while ago, I wrote something similar for work. After trying and failing to find a testing framework that wasn&#8217;t over-engineered, I wrote a script that looks in <code>./test/</code>, and runs every file named <code>whatever.test</code>, and compares output to files  <code>whatever.test.stdout</code> and  <code>whatever.test.stderr</code>, if they exist. 
If not, it just uses the return value to determine success.</p>

<p>I loved how easy it was to add a test. Just write a script! There is no step two.</p>

<p>(<code>cram</code> found via <a href="http://ivory.idyll.org/blog/mar-11/trying-out-cram">Titus Brown</a> )</p>
]]></content:encoded>
			<wfw:commentRss>http://michael-mccracken.net/2011/04/cram-simple-testing-for-shell-programs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Early Days of Java in Sun Labs &#8211; Chuck McManis on HN, via Manuel Simoni</title>
		<link>http://michael-mccracken.net/2011/03/early-days-of-java-in-sun-labs-chuck-mcmanis-on-hn-via-manuel-simoni/</link>
		<comments>http://michael-mccracken.net/2011/03/early-days-of-java-in-sun-labs-chuck-mcmanis-on-hn-via-manuel-simoni/#comments</comments>
		<pubDate>Wed, 30 Mar 2011 15:26:40 +0000</pubDate>
		<dc:creator>mike</dc:creator>
				<category><![CDATA[computers]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://michael-mccracken.net/?p=308</guid>
		<description><![CDATA[From The Axis of Eval: &#8220;Truth IS stranger than fiction&#8221;: Chuck McManis explains the cancellation and subsequent fame of Java. It&#8217;s fascinating to me how often you hear about these overnight successes that took years to develop and were canceled, given up for dead, etc. many times. I remember hearing similar stories about Self and [...]]]></description>
			<content:encoded><![CDATA[<p>From <a href="http://axisofeval.blogspot.com/2011/03/truth-is-stranger-than-fiction.html">The Axis of Eval: &#8220;Truth IS stranger than fiction&#8221;</a>: Chuck McManis explains the cancellation and subsequent fame of Java.</p>

<p>It&#8217;s fascinating to me how often you hear about these overnight successes that took years to develop and were canceled, given up for dead, etc. many times.</p>

<p>I remember hearing similar stories about Self and Erlang at HOPL-3, the History of Programming Languages conference. Maybe you shouldn&#8217;t bet on the success of a new language unless it&#8217;s been cancelled or abandoned at least once?</p>
]]></content:encoded>
			<wfw:commentRss>http://michael-mccracken.net/2011/03/early-days-of-java-in-sun-labs-chuck-mcmanis-on-hn-via-manuel-simoni/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Subversion Client Issues</title>
		<link>http://michael-mccracken.net/2009/07/subversion-clients/</link>
		<comments>http://michael-mccracken.net/2009/07/subversion-clients/#comments</comments>
		<pubDate>Mon, 13 Jul 2009 14:17:14 +0000</pubDate>
		<dc:creator>mike</dc:creator>
				<category><![CDATA[mac]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[gui]]></category>
		<category><![CDATA[svn]]></category>

		<guid isPermaLink="false">http://michael-mccracken.net/wp/?p=134</guid>
		<description><![CDATA[I do a quick one-bullet review of Mac SVN clients.]]></description>
			<content:encoded><![CDATA[<p>I use subversion, and won&#8217;t switch to something newer for a while, so it&#8217;s worth looking at how to polish that old hammer. I&#8217;m used to using the command line svn, or emacs. But recently I decided to try out a few of the nice GUI clients that are around, including <a href="http://versionsapp.com/">Versions</a>, <a href="http://zigzig.com/">ZigVersion</a> and <a href="http://www.zennaware.com/cornerstone/">Cornerstone</a>.</p>

<p>Of these, the only one that&#8217;s polished enough to lure me away from emacs and seems to support my favorite mode of working is Cornerstone, and it still gets it a little wrong.</p>

<p>I like to write log comments while looking at (and scrolling through) the diffs for the files I&#8217;m committing. This means I want a text field for writing log comments on the same screen as the diffs, that isn&#8217;t modal, and doesn&#8217;t stop me from moving around between multiple diffs.</p>

<p>As far as I could tell, I couldn&#8217;t get the comment field and the diff display shown together in Versions, and while I could in ZigVersion, that app had a subpar diff display and lacked polish overall, missing key shortcuts where I&#8217;d expect them, for instance. Cornerstone almost lets me do what I want, but it displays the comment field in a modal sheet, so I have to cancel to change which diff I&#8217;m looking at.</p>

<p>This is easy in emacs, but I like a nicer diff GUI. Am I just missing something? This feels like a natural workflow, so it seems strange that no clients support it well.</p>
]]></content:encoded>
			<wfw:commentRss>http://michael-mccracken.net/2009/07/subversion-clients/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>iCal&#039;s Text Field Jumble</title>
		<link>http://michael-mccracken.net/2008/11/text-field-jumble/</link>
		<comments>http://michael-mccracken.net/2008/11/text-field-jumble/#comments</comments>
		<pubDate>Sun, 02 Nov 2008 21:38:46 +0000</pubDate>
		<dc:creator>mike</dc:creator>
				<category><![CDATA[mac]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[cocoa]]></category>
		<category><![CDATA[ui]]></category>

		<guid isPermaLink="false">http://michael-mccracken.net/wp/?p=121</guid>
		<description><![CDATA[Discussing some quirks of dialog design in iCal's event edit window.]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve written here before about text fields, particularly the problem of having a good-looking &#8216;display&#8217; mode and a separate &#8216;edit&#8217; mode for data you don&#8217;t edit so often, like in AddressBook.</p>

<p>The most recent version of iCal decided that events are write-once-read-many as well. You now have to use cmd-E to get into edit mode, while cmd-I just gives you a small display mode.</p>

<p>I&#8217;m mostly OK with that, although I find I edit events about as often as I look at their info windows &#8211; after editing I usually just deal with alarms, not the events themselves. The casual glance at the time and title is always enough &#8211; I think either you&#8217;re looking at the time and title or you&#8217;re editing. I don&#8217;t see the appeal in the new &#8216;info-only&#8217; mode (if it&#8217;s actually new &#8211; it seems new.)</p>

<p>However, the change does highlight the jumble of editable text fields and text-like fields in the edit window:
<a href="http://michael-mccracken.net/wp2/wp-content/uploads/2008/11/pastedgraphic-1.tiff"><img src="http://michael-mccracken.net/wp2/wp-content/uploads/2008/11/pastedgraphic-1.tiff" alt="" title="Info window in iCal, 2008" class="alignnone size-full wp-image-125" /></a></p>

<p><a href="http://michael-mccracken.net/wp2/wp-content/uploads/2008/11/pastedgraphic.tiff"><img src="http://michael-mccracken.net/wp2/wp-content/uploads/2008/11/pastedgraphic.tiff" alt="" title="iCal info window, 2008" class="alignnone size-full wp-image-126" /></a></p>

<p>The &#8220;Add Attendees&#8221; link and the &#8220;None&#8221; placeholder for url act the same &#8211; you click on them, and enter text.
One&#8217;s a link and one&#8217;s mute gray text. Why?
For my part, I think the gray text is too understated, and the link is too garish.</p>

<p>There are other differences: you can tab to the &#8220;url&#8221; field, but you can&#8217;t tab to &#8220;attendees&#8221;&#8230; until you add one, then you can. Once you click on either of them, the url field pops up a plain white raised NSTextField, but the attendees field is sunken and translucent, apparently an NSTokenField?</p>

<p>Both of the blue links could also be buttons. I&#8217;m still not completely sold on replacing buttons with links, but I can understand the trend. I think a small plus-sign button would be fine for &#8220;Add File&#8221;, though, and &#8220;Attendees&#8221; ought to be a text field. Why force the user to use the mouse when adding data to an event?</p>

<p>All in all, I think the &#8220;Add Attendees&#8221; link/field is pretty strange. I&#8217;m curious if I missing a precedent somewhere.</p>
]]></content:encoded>
			<wfw:commentRss>http://michael-mccracken.net/2008/11/text-field-jumble/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PyObjC notes</title>
		<link>http://michael-mccracken.net/2008/02/pyobjc-notes/</link>
		<comments>http://michael-mccracken.net/2008/02/pyobjc-notes/#comments</comments>
		<pubDate>Fri, 01 Feb 2008 18:07:28 +0000</pubDate>
		<dc:creator>mike</dc:creator>
				<category><![CDATA[computers]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://michael-mccracken.net/wp/2008/02/01/pyobjc-notes/</guid>
		<description><![CDATA[Some things I've picked up from working with PyObjC recently.]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been hacking around with <a href="http://pyobjc.sf.net">PyObjC</a>, the Python-ObjC/Cocoa bridge recently, and it&#8217;s quickly becoming my favorite way to write Cocoa apps. It&#8217;s really natural to mix Python idioms with Cocoa objects.</p>

<p>The latest version of PyObjC is 2.0, it&#8217;s installed by default on OS X 10.5, and XCode now includes templates for starting a PyObjC project. There&#8217;s even code autocomplete in XCode for PyObjC and IB integration, so aside from some smart-indenting issues, writing PyObjC in XCode is almost as natural as writing in ObjC.</p>

<p>I thought I&#8217;d post a few nice shortcuts and tips here.</p>

<p><br />
You can use tuples for NSRect/Range/Point, for instance, this -</p>

<pre><code>r = NSInsetRect(((0, 0) ,
                 (100, 100)),
                10, 10)
</code></pre>

<p>creates this NSRect -</p>

<pre><code>NSRect origin=&lt;nspoint x=10.0
                       y=10.0&gt;
       size=&lt;nssize width=80.0
                   height=80.0&gt;&gt;
</code></pre>

<p><br />
Passing python arrays as NSArray instances (and dictionaries as NSDictionaries) works great, but sometimes you need to pass a C array. The Python &#8216;array&#8217; module handles that nicely:</p>

<pre><code>import array
g = NSGradient.alloc().
   initWithColors_locations_colorSpace_(
    [NSColor.whiteColor(),
     NSColor.blackColor()], &lt;br/&gt;
    array.array('f', [0.0, 1.0]),
    NSColorSpace.deviceRGBColorSpace())
</code></pre>

<p><br />
ObjC selectors are just python strings in PyObjC.</p>

<pre><code>defNC.addObserver_selector_name_object_(self,
  'windowDidResize:',
  NSWindowDidResizeNotification,
  self)
# or
self.performSelectorOnMainThread_withObject_waitUntilDone_('doIt:', None, False)
# or
if o.respondsToSelector_("fun:"): return o.fun_(a)
</code></pre>

<p><br />
Finally, something that comes in handy when working with KVC, the  &#8216;_&#8217; method now defined on NSObjects in PyObjC:</p>

<pre><code>o = &lt;some ObjC object&gt;
print o._.myKey
o._.myKey = 44
# is equivalent to:
print o.valueForKey_('myKey')
o.setValue_forKey_(44, 'myKey')
</code></pre>

<p><br />
That last example is straight from the <a href="http://pyobjc.sourceforge.net/NEWS-2.0.html">NEWS page</a>, where lots of other useful info can be found.</p>
]]></content:encoded>
			<wfw:commentRss>http://michael-mccracken.net/2008/02/pyobjc-notes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The editing pass</title>
		<link>http://michael-mccracken.net/2007/10/the-editing-pass/</link>
		<comments>http://michael-mccracken.net/2007/10/the-editing-pass/#comments</comments>
		<pubDate>Tue, 09 Oct 2007 07:41:16 +0000</pubDate>
		<dc:creator>mike</dc:creator>
				<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://michael-mccracken.net/wp/2007/10/09/the-editing-pass/</guid>
		<description><![CDATA[Some thoughts about making an explicit editing pass on working code:

Once you get a piece of code to the point where you believe it works - it’s passing its tests - go back over it and edit it. That is, go back and edit it for clarity, flow, and style. Just as if it were an essay.]]></description>
			<content:encoded><![CDATA[<p>Anything worth writing is worth re-writing. This applies to code as well as prose.</p>

<p>I give paper sections and important emails a while to sit after I write them, and they always benefit from another look with fresh eyes. I think that doing this with code is worth thinking about.</p>

<p>Once you get a piece of code to the point where you believe it works &#8211; it&#8217;s passing its tests &#8211; go back over it and <em>edit it</em>. That is, go back and edit it for clarity, flow, and style. Just as if it were an essay.</p>

<p>This is particularly important for tests. If a test fails, it should tell a clear story that explains exactly what failed, and what it was expecting.</p>

<p>Things to consider editing out are vague variable or function names, and non-idiomatic shortcuts. Control flow can get tangled when working out a solution. Make it obvious. One-liners often don&#8217;t tell the full story. When you come back to a piece of code, you know the chase. It&#8217;s the first loose thread of a bug, a failed test, or an occurrence of a symbol you need to refactor. What you need is the story around it, and solid code will fill that in.</p>

<p>You can learn this by sharing your code or by waiting a while and reading it over again. It&#8217;s easier said than done &#8211; I don&#8217;t always do it, but I do know: an editing pass can do you good.</p>

<p>Something to think about: would a professional code editor help or hurt in the long run?</p>
]]></content:encoded>
			<wfw:commentRss>http://michael-mccracken.net/2007/10/the-editing-pass/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>NSLocalizedString can set errno</title>
		<link>http://michael-mccracken.net/2007/07/nslocalizedstring-can-set-errno/</link>
		<comments>http://michael-mccracken.net/2007/07/nslocalizedstring-can-set-errno/#comments</comments>
		<pubDate>Tue, 10 Jul 2007 17:27:34 +0000</pubDate>
		<dc:creator>mike</dc:creator>
				<category><![CDATA[mac]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://michael-mccracken.net/wp/2007/07/10/nslocalizedstring-can-set-errno/</guid>
		<description><![CDATA[This is a short one, but it might help someone with debugging someday. A while back, we had some code that was checking errno, then using the NSLocalizedString macro to get a localized error message, but it checked errno again later. Only the app isn&#8217;t localized yet. There&#8217;s no Localizable.strings file, so when NSBundle -localizedStringForKey [...]]]></description>
			<content:encoded><![CDATA[<p>This is a short one, but it might help someone with debugging someday.</p>

<p>A while back, we had some code that was checking errno, then using the NSLocalizedString macro to get a localized error message, but it checked errno again later. Only the app isn&#8217;t localized yet. There&#8217;s no Localizable.strings file, so when NSBundle -localizedStringForKey gets called, even though it fails gracefully, it still ends up setting errno to &#8220;ENOENT&#8221;, or &#8220;file not found&#8221;.</p>

<p>So the lesson is &#8211; in case you&#8217;re seeing weird behavior where errno is changing after you check it, make sure you&#8217;re not using any system calls that might set it.</p>
]]></content:encoded>
			<wfw:commentRss>http://michael-mccracken.net/2007/07/nslocalizedstring-can-set-errno/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Mac programming collaborative bookmarks?</title>
		<link>http://michael-mccracken.net/2007/02/mac-programming-collaborative-bookmarks/</link>
		<comments>http://michael-mccracken.net/2007/02/mac-programming-collaborative-bookmarks/#comments</comments>
		<pubDate>Wed, 07 Feb 2007 19:54:37 +0000</pubDate>
		<dc:creator>mike</dc:creator>
				<category><![CDATA[mac]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://michael-mccracken.net/wp/?p=87</guid>
		<description><![CDATA[I usually like the link selection I get from the Joel Reddit, which usually has good software-related essays at the top. It seems to avoid links to uninformed rants about consumer electronics or industry politics, for which I have no use. I&#8217;d like a social links site for software professionals on the Mac &#8211; does [...]]]></description>
			<content:encoded><![CDATA[<p>I usually like the link selection I get from the <a href="http://joel.reddit.com/">Joel Reddit</a>, which usually has good software-related essays at the top. It seems to avoid links to uninformed rants about consumer electronics or industry politics, for which I have no use.</p>

<p>I&#8217;d like a social links site for software professionals on the Mac &#8211; does one exist?</p>

<p>Or am I missing the point of these sites, and there&#8217;s a feature in each of them to get only the links I want?</p>

<p>I&#8217;m curious &#8211; how do you get your mac-related links?</p>

<p><strong>Update:</strong> From the comments and some emails, I heard three main ways. A few people just rely on the feeds they check regularly, trusting that if something&#8217;s interesting enough, eventually someone they read will post about it. This was basically my strategy.</p>

<p>A few other people plugged Scott Stevenson&#8217;s <a href="http://cocoablogs.com">Cocoablogs.com</a>, which I remember seeing a while back but overlooked when I wrote this post. He&#8217;s doing a good job of collecting interesting links and highlighting blogs you might want to check out &#8211; keep an eye on that site. To paraphrase Scott, he wants cocoablogs to be the &#8216;anti-digg&#8217;, a site where you can guarantee someone actually read the article before they recommend it to you. I&#8217;d say that&#8217;s a good idea &#8211; I don&#8217;t have patience for mob voting.</p>

<p>Finally, another suggestion was to follow the <a href="http://del.icio.us/tag/cocoa">&#8216;cocoa&#8217; tag on del.icio.us</a>, something else I should have thought of &#8211; this is nice and social like digg and reddit, but it seems less likely that someone will tag an article they haven&#8217;t read, so I think it&#8217;s a stronger vote.</p>

<p>Thanks, everyone, for the suggestions!</p>
]]></content:encoded>
			<wfw:commentRss>http://michael-mccracken.net/2007/02/mac-programming-collaborative-bookmarks/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Leopard Tech Talk, Jan 19: LA</title>
		<link>http://michael-mccracken.net/2007/01/leopard-tech-talk-jan-19-la/</link>
		<comments>http://michael-mccracken.net/2007/01/leopard-tech-talk-jan-19-la/#comments</comments>
		<pubDate>Tue, 09 Jan 2007 20:10:52 +0000</pubDate>
		<dc:creator>mike</dc:creator>
				<category><![CDATA[mac]]></category>
		<category><![CDATA[me]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://michael-mccracken.net/wp/?p=81</guid>
		<description><![CDATA[I couldn&#8217;t make it to WWDC last year, I&#8217;m not at Macworld this week, but I will be making it up to LA on the 19th for the Leopard Tech Talk, to catch up. I&#8217;ll probably be there the day before, owing to traffic and an inability to wake up early. If any area mac [...]]]></description>
			<content:encoded><![CDATA[<p>I couldn&#8217;t make it to WWDC last year, I&#8217;m not at Macworld this week, but I will be making it up to LA on the 19th for the <a href="http://developer.apple.com/events/techtalks/northamerica.html">Leopard Tech Talk</a>, to catch up. I&#8217;ll probably be there the day before, owing to traffic and an inability to wake up early.</p>

<p>If any area mac devs are meeting up around then, drop me a note.</p>

<p>I wonder if we&#8217;ll know anything by then about developing for the iPhone.</p>
]]></content:encoded>
			<wfw:commentRss>http://michael-mccracken.net/2007/01/leopard-tech-talk-jan-19-la/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

