<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/rss2full.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/itemcontent.css" type="text/css" media="screen"?><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" version="2.0">

<channel>
	<title>BASH Cures Cancer</title>
	
	<link>http://bashcurescancer.com</link>
	<description>Learn the UNIX/Linux command line</description>
	<pubDate>Tue, 24 Jun 2008 16:42:46 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5</generator>
	<language>en</language>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/BashCuresCancer" type="application/rss+xml" /><feedburner:emailServiceId xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">687998</feedburner:emailServiceId><feedburner:feedburnerHostname xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://www.feedburner.com</feedburner:feedburnerHostname><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.feedburner.com%2FBashCuresCancer" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2FBashCuresCancer" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://feeds.my.aol.com/add.jsp?url=http%3A%2F%2Ffeeds.feedburner.com%2FBashCuresCancer" src="http://o.aolcdn.com/favorites.my.aol.com/webmaster/ffclient/webroot/locale/en-US/images/myAOLButtonSmall.gif">Subscribe with My AOL</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.rojo.com/add-subscription?resource=http%3A%2F%2Ffeeds.feedburner.com%2FBashCuresCancer" src="http://blog.rojo.com/RojoWideRed.gif">Subscribe with Rojo</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.bloglines.com/sub/http://feeds.feedburner.com/BashCuresCancer" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2FBashCuresCancer" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2FBashCuresCancer" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2FBashCuresCancer" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.live.com/?add=http%3A%2F%2Ffeeds.feedburner.com%2FBashCuresCancer" src="http://tkfiles.storage.msn.com/x1piYkpqHC_35nIp1gLE68-wvzLZO8iXl_JMledmJQXP-XTBOLfmQv4zhj4MhcWEJh_GtoBIiAl1Mjh-ndp9k47If7hTaFno0mxW9_i3p_5qQw">Subscribe with Live.com</feedburner:feedFlare><item>
		<title>The best in command line xml: XMLStarlet</title>
		<link>http://bashcurescancer.com/the-best-in-command-line-xml-xmlstarlet.html</link>
		<comments>http://bashcurescancer.com/the-best-in-command-line-xml-xmlstarlet.html#comments</comments>
		<pubDate>Tue, 24 Jun 2008 04:32:48 +0000</pubDate>
		<dc:creator>Brock Noland</dc:creator>
		
		<category><![CDATA[Links]]></category>

		<category><![CDATA[Shell]]></category>

		<category><![CDATA[tools]]></category>

		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://bashcurescancer.com/?p=151</guid>
		<description><![CDATA[Quite some time ago I wrote about using xsltproc to process xml on the command line. Thank fully someone pointed out XMLStarlet.  I now use XMLStarlet almost every day.  I work with a variety of REST based API&#8217;s gather information. XMLStartlet along with a simple for loop or xargs gives you an exceedingly powerful set [...]]]></description>
			<content:encoded><![CDATA[<p>Quite some time ago I wrote about using xsltproc to process xml on the command line. Thank fully someone pointed out <a href="http://xmlstar.sourceforge.net/">XMLStarlet</a>.  I now use XMLStarlet almost every day.  I work with a variety of REST based API&#8217;s gather information. XMLStartlet along with a simple for loop or xargs gives you an exceedingly powerful set of tools.</p>
<p>Here is a quick introduction into the power of XMLStarlet. This is just a teaser as I cannot share the data I work with. However, you should be able to see the power of this tool.</p>
<p>All the links from my RSS feed:</p>
<pre>$ curl -s 'http://bashcurescancer.com/rss/' | xml sel -t -m '//link' -v '.' -n
http://bashcurescancer.com</pre>
<pre>http://bashcurescancer.com/processing-xml-on-the-command-line.html
http://bashcurescancer.com/do-not-close-stderr.html</pre>
<pre>http://bashcurescancer.com/prepend-to-a-file-with-sponge-from-moreutils.html</pre>
<pre>http://bashcurescancer.com/bug-in-curl-is-fixed.html</pre>
<pre>http://bashcurescancer.com/using-kill-to-see-if-a-process-is-alive.html</pre>
<pre>http://bashcurescancer.com/performance-testing-with-curl.html</pre>
<pre>http://bashcurescancer.com/new-command-prepend.html</pre>
<pre>http://bashcurescancer.com/shell-function-which-webserver-does-that-site-run.html</pre>
<pre>http://bashcurescancer.com/exposing-command-line-programs-as-web-services.html
http://bashcurescancer.com/wrapping-dynamic-languages-in-shell-without-an-extra-script.html</pre>
<p>Or how about &#8220;Title: link&#8221;</p>
<pre>$ curl -s 'http://bashcurescancer.com/rss/' | xml sel -t -m '//item' -v 'title' -o ': ' -v 'link' -n</pre>
<pre>Processing XML on the Command Line: http://bashcurescancer.com/processing-xml-on-the-command-line.html</pre>
<pre>Do not close stderr: http://bashcurescancer.com/do-not-close-stderr.html</pre>
<pre>prepend to a file with sponge from moreutils: http://bashcurescancer.com/prepend-to-a-file-with-sponge-from-moreutils.html</pre>
<pre>Bug in Curl is fixed: http://bashcurescancer.com/bug-in-curl-is-fixed.html</pre>
<pre>using kill to see if a process is alive: http://bashcurescancer.com/using-kill-to-see-if-a-process-is-alive.html</pre>
<pre>Performance testing - with curl: http://bashcurescancer.com/performance-testing-with-curl.html</pre>
<pre>New command: prepend: http://bashcurescancer.com/new-command-prepend.html</pre>
<pre>Shell Function - Which Webserver Does That Site Run?: http://bashcurescancer.com/shell-function-which-webserver-does-that-site-run.html</pre>
<pre>Exposing command line programs as web services: http://bashcurescancer.com/exposing-command-line-programs-as-web-services.html</pre>
<pre>Wrapping dynamic languages in shell without an extra script: http://bashcurescancer.com/wrapping-dynamic-languages-in-shell-without-an-extra-script.html</pre>
<p>You may need to do some reading on xpaths and xsl stylesheets to use the full power of the tool.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/BashCuresCancer?a=7yOtAi"><img src="http://feeds.feedburner.com/~f/BashCuresCancer?i=7yOtAi" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/BashCuresCancer/~4/318603872" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://bashcurescancer.com/the-best-in-command-line-xml-xmlstarlet.html/feed</wfw:commentRss>
		<feedburner:awareness xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://api.feedburner.com/awareness/1.0/GetItemData?uri=BashCuresCancer&amp;itemurl=http%3A%2F%2Fbashcurescancer.com%2Fthe-best-in-command-line-xml-xmlstarlet.html</feedburner:awareness></item>
		<item>
		<title>Processing XML on the Command Line</title>
		<link>http://bashcurescancer.com/processing-xml-on-the-command-line.html</link>
		<comments>http://bashcurescancer.com/processing-xml-on-the-command-line.html#comments</comments>
		<pubDate>Fri, 25 Apr 2008 04:08:44 +0000</pubDate>
		<dc:creator>Brock Noland</dc:creator>
		
		<category><![CDATA[script]]></category>

		<category><![CDATA[xml]]></category>

		<category><![CDATA[xsl]]></category>

		<category><![CDATA[xsltproc]]></category>

		<guid isPermaLink="false">http://bashcurescancer.com/?p=149</guid>
		<description><![CDATA[The other day on the cURL email list, someone asked:
Could someone please tell me (preferably with an example) of how I could parse and xml like the following:
&#60;?xml version=&#8221;1.0&#8243; encoding=&#8221;ISO-8859-1&#8243; ?&#62;
&#60;FileRetriever&#62;
&#60;FileList&#62;
&#60;File name=&#8221;AMERI08.D4860.ZIP&#8221; /&#62;
&#60;File name=&#8221;DTCCRSF.D4861.ZIP&#8221; /&#62;
&#60;File name=&#8221;DTGSS01.D4862.ZIP&#8221; /&#62;
&#60;File name=&#8221;DTGSS02.D4863.ZIP&#8221; /&#62;
&#60;File name=&#8221;DTGSS03.D4864.ZIP&#8221; /
&#60;/FileList&#62;
&#60;/FileRetriever&#62;
This is not appropriate for the cURL list, but I thought a fair question.  You [...]]]></description>
			<content:encoded><![CDATA[<p>The other day on the cURL email list, someone asked:</p>
<blockquote><p>Could someone please tell me (preferably with an example) of how I could parse and xml like the following:</p>
<p>&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;ISO-8859-1&#8243; ?&gt;<br />
&lt;FileRetriever&gt;<br />
&lt;FileList&gt;<br />
&lt;File name=&#8221;AMERI08.D4860.ZIP&#8221; /&gt;<br />
&lt;File name=&#8221;DTCCRSF.D4861.ZIP&#8221; /&gt;<br />
&lt;File name=&#8221;DTGSS01.D4862.ZIP&#8221; /&gt;<br />
&lt;File name=&#8221;DTGSS02.D4863.ZIP&#8221; /&gt;<br />
&lt;File name=&#8221;DTGSS03.D4864.ZIP&#8221; /<br />
&lt;/FileList&gt;<br />
&lt;/FileRetriever&gt;</p></blockquote>
<p>This is not appropriate for the cURL list, but I thought a fair question.  You could do this:</p>
<pre>$ grep '&lt;File ' config.xml  | awk -F'"' '{print $2}' | xargs -l -I {} echo curl -I "http://bashcurescancer.com/{}"
curl -I http://bashcurescancer.com/AMERI08.D4860.ZIP
curl -I http://bashcurescancer.com/DTCCRSF.D4861.ZIP
curl -I http://bashcurescancer.com/DTGSS01.D4862.ZIP
curl -I http://bashcurescancer.com/DTGSS02.D4863.ZIP
curl -I http://bashcurescancer.com/DTGSS03.D4864.ZIP</pre>
<p>Or, you could use the xsltproc command with an associated style sheet. This is really the correct method and much more effective when your processing complex XML or XML that is not easily grep&#8217;able:</p>
<pre>$ xsltproc --nonet config.xsl config.xml | xargs -l -I {} echo curl -I "http://bashcurescancer.com/{}"
curl -I http://bashcurescancer.com/AMERI08.D4860.ZIP
curl -I http://bashcurescancer.com/DTCCRSF.D4861.ZIP
curl -I http://bashcurescancer.com/DTGSS01.D4862.ZIP
curl -I http://bashcurescancer.com/DTGSS02.D4863.ZIP
curl -I http://bashcurescancer.com/DTGSS03.D4864.ZIP</pre>
<p>Links to <a href="http://bashcurescancer.com/media/using-xsl-on-the-command-line/config.xml">config.xml</a> and <a href="http://bashcurescancer.com/media/using-xsl-on-the-command-line/config.xsl">config.xsl</a>.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/BashCuresCancer?a=sYGuwi"><img src="http://feeds.feedburner.com/~f/BashCuresCancer?i=sYGuwi" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/BashCuresCancer/~4/277369194" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://bashcurescancer.com/processing-xml-on-the-command-line.html/feed</wfw:commentRss>
		<feedburner:awareness xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://api.feedburner.com/awareness/1.0/GetItemData?uri=BashCuresCancer&amp;itemurl=http%3A%2F%2Fbashcurescancer.com%2Fprocessing-xml-on-the-command-line.html</feedburner:awareness></item>
		<item>
		<title>Do not close stderr</title>
		<link>http://bashcurescancer.com/do-not-close-stderr.html</link>
		<comments>http://bashcurescancer.com/do-not-close-stderr.html#comments</comments>
		<pubDate>Wed, 23 Apr 2008 04:25:26 +0000</pubDate>
		<dc:creator>Brock Noland</dc:creator>
		
		<category><![CDATA[Shell]]></category>

		<category><![CDATA[examples]]></category>

		<category><![CDATA[good practices]]></category>

		<category><![CDATA[stderr]]></category>

		<category><![CDATA[thanks]]></category>

		<category><![CDATA[things not todo]]></category>

		<guid isPermaLink="false">http://bashcurescancer.com/?p=148</guid>
		<description><![CDATA[A few years ago, I wrote a post commenting on how ugly this was:
$ someprog 2&#62;/dev/null
I was nearly imploring the reader to close stderr:
$ someprog 2&#62;&#38;-
Some very knowledgeable anonymous commenter explained why that was a bad idea. At the time, I didn&#8217;t understand exactly what they were saying. As such, I deleted the post. Yesterday, [...]]]></description>
			<content:encoded><![CDATA[<p>A few years ago, I wrote a post commenting on how ugly this was:</p>
<pre>$ someprog 2&gt;/dev/null</pre>
<p>I was nearly imploring the reader to close stderr:</p>
<pre>$ someprog 2&gt;&amp;-</pre>
<p>Some very knowledgeable anonymous commenter explained why that was a bad idea. At the time, I didn&#8217;t understand exactly what they were saying. As such, I deleted the post. Yesterday, for no particular reason, the implications of closing stderr popped into my head. In the shower no less.</p>
<p>I wrote a simple little C program named <a href="http://bashcurescancer.com/media/misc/do-not-close-stderr.c">do-not-close-stderr.c</a>. It takes two parameters, a string you want written to a file and the file you want said string written to. After opening the file, it prints &#8220;some kind of warning message&#8221; to stderr. Here we are:</p>
<pre>$ gcc -Wall do-not-close-stderr.c -o do-not-close-stderr
$ ./do-not-close-stderr "Brock was here." output
Some kind of warning message.
$ cat output
Brock was here.</pre>
<p>Now lets close standard error when executing:</p>
<pre>$ ./do-not-close-stderr "Brock was here." output 2&gt;&amp;-
$ cat output
Some kind of warning message.
Brock was here.</pre>
<p>Thanks to whoever that commenter was.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/BashCuresCancer?a=kfHHei"><img src="http://feeds.feedburner.com/~f/BashCuresCancer?i=kfHHei" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/BashCuresCancer/~4/275889922" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://bashcurescancer.com/do-not-close-stderr.html/feed</wfw:commentRss>
		<feedburner:awareness xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://api.feedburner.com/awareness/1.0/GetItemData?uri=BashCuresCancer&amp;itemurl=http%3A%2F%2Fbashcurescancer.com%2Fdo-not-close-stderr.html</feedburner:awareness></item>
		<item>
		<title>prepend to a file with sponge from moreutils</title>
		<link>http://bashcurescancer.com/prepend-to-a-file-with-sponge-from-moreutils.html</link>
		<comments>http://bashcurescancer.com/prepend-to-a-file-with-sponge-from-moreutils.html#comments</comments>
		<pubDate>Thu, 17 Apr 2008 19:37:37 +0000</pubDate>
		<dc:creator>Brock Noland</dc:creator>
		
		<category><![CDATA[Contributions]]></category>

		<category><![CDATA[Shell]]></category>

		<category><![CDATA[tools]]></category>

		<category><![CDATA[moreutils]]></category>

		<category><![CDATA[patches]]></category>

		<category><![CDATA[prepend]]></category>

		<guid isPermaLink="false">http://bashcurescancer.com/?p=147</guid>
		<description><![CDATA[A few weeks I wrote about a tool, which helps you easily prepend to a file. I submitted prepend to moreutils and Joey was kind enough to point out this could be done with `sponge&#8217;.  sponge reads standard input and when done, writes it to a file:
Probably the most general purpose tool in moreutils so [...]]]></description>
			<content:encoded><![CDATA[<p>A few weeks I wrote about a tool, which helps you <a href="http://bashcurescancer.com/new-command-prepend.html">easily prepend to a file</a>. I submitted prepend to <a href="http://kitenet.net/~joey/code/moreutils/">moreutils</a> and Joey was kind enough to point out this could be done with `sponge&#8217;.  sponge reads standard input and when done, writes it to a file:</p>
<blockquote><p>Probably the most general purpose tool in <a href="http://kitenet.net/~joey/code/moreutils/">moreutils </a>so far is <code>sponge</code>(1), which lets you do things like this:</p>
<p><code>% sed "s/root/toor/" /etc/passwd | grep -v joey | sponge /etc/passwd</code></p></blockquote>
<p>Two days ago Joey released version 0.29 of <a href="http://kitenet.net/~joey/code/moreutils/">moreutils </a>including a patch by yours truly (with much help from Joey).</p>
<blockquote><p>sponge: Handle large data sizes by using a temp file rather than by  consuming arbitrary amounts of memory. Patch by Brock Noland. <a href="http://kitenet.net/~joey/code/moreutils/news/version_0.29/">version 0.29 changelog</a></p></blockquote>
<p>Also, on a non-command line note, I found a video on Joey&#8217;s site which I thought was pretty cool, <a href="http://kitenet.net/~joey/learnstofly/">Joey Learns to Fly</a>.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/BashCuresCancer?a=JtvoWi"><img src="http://feeds.feedburner.com/~f/BashCuresCancer?i=JtvoWi" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/BashCuresCancer/~4/272383079" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://bashcurescancer.com/prepend-to-a-file-with-sponge-from-moreutils.html/feed</wfw:commentRss>
		<feedburner:awareness xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://api.feedburner.com/awareness/1.0/GetItemData?uri=BashCuresCancer&amp;itemurl=http%3A%2F%2Fbashcurescancer.com%2Fprepend-to-a-file-with-sponge-from-moreutils.html</feedburner:awareness></item>
		<item>
		<title>Bug in Curl is fixed</title>
		<link>http://bashcurescancer.com/bug-in-curl-is-fixed.html</link>
		<comments>http://bashcurescancer.com/bug-in-curl-is-fixed.html#comments</comments>
		<pubDate>Mon, 14 Apr 2008 17:11:38 +0000</pubDate>
		<dc:creator>Brock Noland</dc:creator>
		
		<category><![CDATA[Debugging]]></category>

		<category><![CDATA[bug report]]></category>

		<category><![CDATA[curl]]></category>

		<guid isPermaLink="false">http://bashcurescancer.com/?p=145</guid>
		<description><![CDATA[I love curl. I use it quite often to perform HTTP HEAD requests:
$ curl -I http://bashcurescancer.com
HTTP/1.1 200 OK
Date: Mon, 14 Apr 2008 03:11:35 GMT
Server: Apache/2.2.6 (Unix)
X-Pingback: http://bashcurescancer.com/wordpress/xmlrpc.php
Last-Modified: Mon, 14 Apr 2008 02:38:11 GMT
Connection: close
Content-Type: text/html; charset=UTF-8
However, I sometimes forget if a HEAD request is -I or -i, as such I usually specify them both. Lowercase [...]]]></description>
			<content:encoded><![CDATA[<p>I love curl. I use it quite often to perform HTTP HEAD requests:</p>
<pre>$ curl -I http://bashcurescancer.com
HTTP/1.1 200 OK
Date: Mon, 14 Apr 2008 03:11:35 GMT
Server: Apache/2.2.6 (Unix)
X-Pingback: http://bashcurescancer.com/wordpress/xmlrpc.php
Last-Modified: Mon, 14 Apr 2008 02:38:11 GMT
Connection: close
Content-Type: text/html; charset=UTF-8</pre>
<p>However, I sometimes forget if a HEAD request is -I or -i, as such I usually specify them both. Lowercase i is &#8220;include headers in output&#8221; and uppercase I tells curl to use HEAD instead of GET.  When you use -I, -i is implied.</p>
<p>Given all this, there should be no problems specifying both options. However, if you place -I before -i, curl doesn&#8217;t actually display the response. Here is the output from my <a href="http://curl.haxx.se/mail/archive-2008-04/0044.html">bug report to curl-users</a>:</p>
<pre>$ curl -I -i <a href="http://bashcurescancer.com/">http://bashcurescancer.com</a>
$ curl -i -I <a href="http://bashcurescancer.com/">http://bashcurescancer.com</a>
HTTP/1.1 200 OK
Date: Mon, 14 Apr 2008 03:11:35 GMT
Server: Apache/2.2.6 (Unix)
X-Pingback: <a href="http://bashcurescancer.com/wordpress/xmlrpc.php">http://bashcurescancer.com/wordpress/xmlrpc.php</a>
Last-Modified: Mon, 14 Apr 2008 02:38:11 GMT
Connection: close
Content-Type: text/html; charset=UTF-8</pre>
<p>Curl uses a long integer for configuration flags via bit masking. The problem arises in that the -I option sets two bits bit and the -i option XOR&#8217;s one of those same bits:</p>
<pre>src/main.c
case 'i':
<strong>config-&gt;conf ^= CONF_HEADER;</strong> /* include the HTTP header as well */
break;
&#8230;
case &#8216;I&#8217;:
/*
* This is a bit tricky. We either SET both bits, or we clear both
* bits. Let&#8217;s not make any other outcomes from this.
*/
if((CONF_HEADER|CONF_NOBODY) !=
(config-&gt;conf&amp;(CONF_HEADER|CONF_NOBODY)) ) {
/* one of them weren&#8217;t set, set both */
<strong>config-&gt;conf |= (CONF_HEADER|CONF_NOBODY);</strong>
if(SetHTTPrequest(config, HTTPREQ_HEAD, &amp;config-&gt;httpreq))
return PARAM_BAD_USE;
}
else {
/* both were set, clear both */
config-&gt;conf &amp;= ~(CONF_HEADER|CONF_NOBODY);
if(SetHTTPrequest(config, HTTPREQ_GET, &amp;config-&gt;httpreq))
return PARAM_BAD_USE;
}</pre>
<p>Thanks to Daniel <span id="from">Stenberg, the fix &#8220;</span><a href="http://curl.haxx.se/mail/archive-2008-04/0048.html">is now committed!</a>&#8220;</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/BashCuresCancer?a=aX1Fyi"><img src="http://feeds.feedburner.com/~f/BashCuresCancer?i=aX1Fyi" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/BashCuresCancer/~4/270123700" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://bashcurescancer.com/bug-in-curl-is-fixed.html/feed</wfw:commentRss>
		<feedburner:awareness xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://api.feedburner.com/awareness/1.0/GetItemData?uri=BashCuresCancer&amp;itemurl=http%3A%2F%2Fbashcurescancer.com%2Fbug-in-curl-is-fixed.html</feedburner:awareness></item>
		<item>
		<title>using kill to see if a process is alive</title>
		<link>http://bashcurescancer.com/using-kill-to-see-if-a-process-is-alive.html</link>
		<comments>http://bashcurescancer.com/using-kill-to-see-if-a-process-is-alive.html#comments</comments>
		<pubDate>Thu, 10 Apr 2008 04:43:55 +0000</pubDate>
		<dc:creator>Brock Noland</dc:creator>
		
		<category><![CDATA[Brock's Tools]]></category>

		<category><![CDATA[Good Practice]]></category>

		<category><![CDATA[Links]]></category>

		<category><![CDATA[Shell]]></category>

		<category><![CDATA[script]]></category>

		<category><![CDATA[tools]]></category>

		<category><![CDATA[kill]]></category>

		<category><![CDATA[process]]></category>

		<category><![CDATA[ps]]></category>

		<category><![CDATA[ps -ef]]></category>

		<category><![CDATA[ps faux]]></category>

		<category><![CDATA[ps grep]]></category>

		<guid isPermaLink="false">http://bashcurescancer.com/?p=141</guid>
		<description><![CDATA[I am making some changes to the moreutils sponge command.  Sponge provides a method of prepending which is less specialized than my prepend util. However, it has trouble with large amounts of input.
Regardless, while testing my changes, I want to watch it operate. Normally, you would just do so from a second terminal. That [...]]]></description>
			<content:encoded><![CDATA[<p>I am making some changes to the <a href="http://kitenet.net/~joey/code/moreutils/">moreutils</a> sponge command.  Sponge provides a method of prepending which is less specialized than my <a href="http://bashcurescancer.com/new-command-prepend.html">prepend</a> util. However, it has trouble with large amounts of input.</p>
<p>Regardless, while testing my changes, I want to watch it operate. Normally, you would just do so from a second terminal. That is a pain. kill -0 can be very useful for this. After backgrounding the command, I assign the pid (via the variable $!) to $pid using eval. eval is needed to stop BASH from expanding $! until after the background operation.</p>
<p>After that, I enter a while loop on kill -0 $pid, which will not kill $pid, but will return successfully until $pid has died:</p>
<pre># cat large-file-GB | ./sponge large-file-GB-copy &amp; eval 'pid=$!'; while kill -0 $pid; do sleep 10; ls -lh large-file* /tmp/sponge.*; echo;done
[1] 7937
-rw-r--r-- 1 root root 977M 2008-04-09 16:18 large-file-GB
-rw------- 1 root root 128M 2008-04-09 17:23 /tmp/sponge.JMsBWG

-rw-r--r-- 1 root root 977M 2008-04-09 16:18 large-file-GB
-rw------- 1 root root 384M 2008-04-09 17:23 /tmp/sponge.JMsBWG

-rw-r--r-- 1 root root 977M 2008-04-09 16:18 large-file-GB
-rw------- 1 root root 877M 2008-04-09 17:24 /tmp/sponge.JMsBWG

-rw-r--r-- 1 root root 977M 2008-04-09 16:18 large-file-GB
-rw-r--r-- 1 root root  20M 2008-04-09 17:24 large-file-GB-copy
-rw------- 1 root root 896M 2008-04-09 17:24 /tmp/sponge.JMsBWG

-rw-r--r-- 1 root root 977M 2008-04-09 16:18 large-file-GB
-rw-r--r-- 1 root root 413M 2008-04-09 17:25 large-file-GB-copy
-rw------- 1 root root 896M 2008-04-09 17:24 /tmp/sponge.JMsBWG

-rw-r--r-- 1 root root 977M 2008-04-09 16:18 large-file-GB
-rw-r--r-- 1 root root 836M 2008-04-09 17:25 large-file-GB-copy
-rw------- 1 root root 896M 2008-04-09 17:24 /tmp/sponge.JMsBWG

-rw-r--r-- 1 root root 977M 2008-04-09 16:18 large-file-GB
-rw-r--r-- 1 root root 920M 2008-04-09 17:25 large-file-GB-copy
[1]+  Done                    cat large-file-GB | ./sponge large-file-GB-copy
ls: cannot access /tmp/sponge.*: No such file or directory

-rw-r--r-- 1 root root 977M 2008-04-09 16:18 large-file-GB
-rw-r--r-- 1 root root 977M 2008-04-09 17:25 large-file-GB-copy
-bash: kill: (7937) - No such process
# md5sum large-file-GB*
b5c667a723a10a3485a33263c4c2b978  large-file-GB
b5c667a723a10a3485a33263c4c2b978  large-file-GB-copy</pre>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/BashCuresCancer?a=Szquni"><img src="http://feeds.feedburner.com/~f/BashCuresCancer?i=Szquni" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/BashCuresCancer/~4/267461343" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://bashcurescancer.com/using-kill-to-see-if-a-process-is-alive.html/feed</wfw:commentRss>
		<feedburner:awareness xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://api.feedburner.com/awareness/1.0/GetItemData?uri=BashCuresCancer&amp;itemurl=http%3A%2F%2Fbashcurescancer.com%2Fusing-kill-to-see-if-a-process-is-alive.html</feedburner:awareness></item>
		<item>
		<title>Performance testing - with curl</title>
		<link>http://bashcurescancer.com/performance-testing-with-curl.html</link>
		<comments>http://bashcurescancer.com/performance-testing-with-curl.html#comments</comments>
		<pubDate>Tue, 08 Apr 2008 05:21:46 +0000</pubDate>
		<dc:creator>Brock Noland</dc:creator>
		
		<category><![CDATA[Good Practice]]></category>

		<category><![CDATA[Shell]]></category>

		<category><![CDATA[curl]]></category>

		<category><![CDATA[http]]></category>

		<category><![CDATA[software development]]></category>

		<category><![CDATA[speed]]></category>

		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://bashcurescancer.com/?p=139</guid>
		<description><![CDATA[Often I need or want to do some type of performance testing. Given my ideas on software development, I can usually do this by making simple HTTP requests. I use curl for this. While you may be tempted to do this in a for loop (or worse, actually write something!):
$ time for i in {1..1000}; [...]]]></description>
			<content:encoded><![CDATA[<p>Often I need or want to do some type of performance testing. Given <a href="http://bashcurescancer.com/3-principles-of-web-application-design-for-the-command-line.html">my ideas on software development</a>, I can usually do this by making simple HTTP requests. I use curl for this. While you may be tempted to do this in a for loop (or worse, actually write something!):</p>
<pre>$ time for i in {1..1000}; do curl -s "http://bashcurescancer.com/blank.html";done</pre>
<pre>real    0m23.436s
user    0m6.416s
sys     0m7.351s</pre>
<p>Curl provides the same functionality:</p>
<pre>$ time curl -s "http://bashcurescancer.com/blank.html?[1-1000]"</pre>
<pre>real    0m6.561s
user    0m0.294s
sys     0m0.494s</pre>
<p>Here are the details from the curl manual:</p>
<blockquote><p>The URL syntax is protocol dependent. You’ll find a detailed description in RFC 3986.</p>
<p>You can specify multiple URLs or parts of URLs by writing part sets within braces as in:</p>
<p>http://site.{one,two,three}.com</p>
<p>or you can get sequences of alphanumeric series by using [ ] as in:</p>
<p>ftp://ftp.numericals.com/file[1-100].txt<br />
ftp://ftp.numericals.com/file[001-100].txt    (with leading zeros)<br />
ftp://ftp.letters.com/file[a-z].txt</p>
<p>No nesting of the sequences is supported at the moment, but you can use several ones next to each other:</p>
<p>http://any.org/archive[1996-1999]/vol[1-4]/part{a,b,c}.html</p>
<p>You can specify any amount of URLs on the command line. They will be fetched in a sequential manner in the specified order.</p>
<p>Since curl 7.15.1 you can also specify step counter for the ranges, so that you can get every Nth number or letter:</p>
<p>http://www.numericals.com/file[1-100:10].txt<br />
http://www.letters.com/file[a-z:2].txt</p>
<p>If you specify URL without protocol:// prefix, curl will attempt to guess what protocol you might want. It will then default to HTTP but try other protocols based on often-used host name prefixes. For example, for host names starting with &#8220;ftp.&#8221; curl will assume you want to  speak FTP.</p>
<p>Curl  will  attempt  to re-use connections for multiple file transfers, so that getting many files from the same server will not do multiple connects / handshakes. This improves speed. Of course this is only done on files specified on a single  command  line  and  cannot  be  used<br />
between separate curl invokes.</p></blockquote>
<p>This is important as it helps measure the actual change being tested. A for loop, by creating a new process every loop, will fill up your test with &#8220;local&#8221; time. Using a single curl process eliminates this - which should allow you to see the results of your test in a more transparent manner.</p>
<p>For example, lets say you have a change that reduces page production time. Your not sure how long, so you decide to run 1000 tests. Eliminating a second from a 23 second tests is not 5 percent. While removing a second from a 6 second test, is almost 20%.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/BashCuresCancer?a=nNypTi"><img src="http://feeds.feedburner.com/~f/BashCuresCancer?i=nNypTi" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/BashCuresCancer/~4/266124342" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://bashcurescancer.com/performance-testing-with-curl.html/feed</wfw:commentRss>
		<feedburner:awareness xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://api.feedburner.com/awareness/1.0/GetItemData?uri=BashCuresCancer&amp;itemurl=http%3A%2F%2Fbashcurescancer.com%2Fperformance-testing-with-curl.html</feedburner:awareness></item>
		<item>
		<title>New command: prepend</title>
		<link>http://bashcurescancer.com/new-command-prepend.html</link>
		<comments>http://bashcurescancer.com/new-command-prepend.html#comments</comments>
		<pubDate>Mon, 07 Apr 2008 02:44:37 +0000</pubDate>
		<dc:creator>Brock Noland</dc:creator>
		
		<category><![CDATA[Brock's Tools]]></category>

		<category><![CDATA[Shell]]></category>

		<category><![CDATA[python]]></category>

		<category><![CDATA[script]]></category>

		<guid isPermaLink="false">http://bashcurescancer.com/new-command-prepend.html</guid>
		<description><![CDATA[I am utilizing Google&#8217;s project hosting to host software which I create and feel is useful or want to keep track of. I called the project Brock&#8217;s Tools. The code that led me to create this project was a command I am calling prepend 1.1. (UPDATE: See this post on sponge as its a better [...]]]></description>
			<content:encoded><![CDATA[<p>I am utilizing Google&#8217;s project hosting to host software which I create and feel is useful or want to keep track of. I called the project <a href="http://code.google.com/p/brockstools/">Brock&#8217;s Tools</a>. The code that led me to create this project was a command I am calling <a href="http://brockstools.googlecode.com/files/prepend-1.1.tar.gz">prepend 1.1</a>. (UPDATE: See <a href="http://bashcurescancer.com/prepend-to-a-file-with-sponge-from-moreutils.html">this post on sponge</a> as its a better general case tool.)</p>
<p>prepend, prepend&#8217;s files or standard input to a file. For example,  you have three files:</p>
<pre>$ echo BROCK &gt; a
$ echo DAVID &gt; b
$ echo NOLAND &gt; c</pre>
<p>And you want to combine them into one file:</p>
<pre>$ echo "My name is:" | prepend - a b c
$ cat c
My name is:
BROCK
DAVID
NOLAND</pre>
<p>Or lets say you just want to append a file to itself:</p>
<pre>$ cat a
BROCK
$ cat a &gt;&gt; a
cat: a: input file is output file</pre>
<p>prepend does this:</p>
<pre>$ prepend a
$ cat a
BROCK
BROCK</pre>
<p>I come across the a situation where this would be useful quite often. Of course prepend&#8217;ing can be done in the shell:</p>
<pre>$ { echo "My name is:"; cat a b c; } &gt; tmp &amp;&amp; mv -f tmp c
$ cat c
My name is:
BROCK
DAVID
NOLAND</pre>
<p>However, that is unsafe and I have lost data that way. I perform this operation most often when dealing with XML. In this example, its trivial to open the file in an editor, but with a large file, its quite nasty to do so:</p>
<pre>$ cat something.xml
&lt;entry&gt;&lt;blah/&gt;&lt;more&gt;stuff 1&lt;/more&gt;&lt;/entry&gt;
&lt;entry&gt;&lt;blah/&gt;&lt;more&gt;stuff 2&lt;/more&gt;&lt;/entry&gt;
&lt;entry&gt;&lt;blah/&gt;&lt;more&gt;stuff 3 &lt;/more&gt;&lt;/entry&gt;
&lt;entry&gt;&lt;blah/&gt;&lt;more&gt;stuff 4&lt;/more&gt;&lt;/entry&gt;
$ echo "&lt;/entries&gt;" &gt;&gt; something.xml
$ cat something.xml
&lt;entry&gt;&lt;blah/&gt;&lt;more&gt;stuff 1&lt;/more&gt;&lt;/entry&gt;
&lt;entry&gt;&lt;blah/&gt;&lt;more&gt;stuff 2&lt;/more&gt;&lt;/entry&gt;
&lt;entry&gt;&lt;blah/&gt;&lt;more&gt;stuff 3 &lt;/more&gt;&lt;/entry&gt;
&lt;entry&gt;&lt;blah/&gt;&lt;more&gt;stuff 4&lt;/more&gt;&lt;/entry&gt;
&lt;/entries&gt;
$ echo "&lt;entries&gt;" | prepend - something.xml
$ cat something.xml
&lt;entries&gt;
&lt;entry&gt;&lt;blah/&gt;&lt;more&gt;stuff 1&lt;/more&gt;&lt;/entry&gt;
&lt;entry&gt;&lt;blah/&gt;&lt;more&gt;stuff 2&lt;/more&gt;&lt;/entry&gt;
&lt;entry&gt;&lt;blah/&gt;&lt;more&gt;stuff 3 &lt;/more&gt;&lt;/entry&gt;
&lt;entry&gt;&lt;blah/&gt;&lt;more&gt;stuff 4&lt;/more&gt;&lt;/entry&gt;
&lt;/entries&gt;</pre>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/BashCuresCancer?a=EO7xdi"><img src="http://feeds.feedburner.com/~f/BashCuresCancer?i=EO7xdi" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/BashCuresCancer/~4/265379220" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://bashcurescancer.com/new-command-prepend.html/feed</wfw:commentRss>
		<feedburner:awareness xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://api.feedburner.com/awareness/1.0/GetItemData?uri=BashCuresCancer&amp;itemurl=http%3A%2F%2Fbashcurescancer.com%2Fnew-command-prepend.html</feedburner:awareness></item>
		<item>
		<title>Shell Function - Which Webserver Does That Site Run?</title>
		<link>http://bashcurescancer.com/shell-function-which-webserver-does-that-site-run.html</link>
		<comments>http://bashcurescancer.com/shell-function-which-webserver-does-that-site-run.html#comments</comments>
		<pubDate>Sat, 05 Apr 2008 01:03:43 +0000</pubDate>
		<dc:creator>Brock Noland</dc:creator>
		
		<category><![CDATA[Shell]]></category>

		<category><![CDATA[curl]]></category>

		<category><![CDATA[http]]></category>

		<category><![CDATA[python]]></category>

		<category><![CDATA[shell function]]></category>

		<category><![CDATA[wget]]></category>

		<guid isPermaLink="false">http://bashcurescancer.com/shell-function-which-webserver-does-that-site-run.html</guid>
		<description><![CDATA[I just read the following post Python - Script - Which Webserver Does That Site Run? by blogger Corey Goldberg.
I prefer the shell version:
$ what-http-server() { curl -s -I "http://$1" &#124; awk -F': ' '/^Server:/ {print $2}'; }
$ what-http-server www.pylot.org
Apache/2.0.52
$ what-http-server() { curl -s -I "$@" &#124; awk -F': ' '/^Server:/ {print $2}'; }
$ what-http-server [...]]]></description>
			<content:encoded><![CDATA[<p>I just read the following post <a class="TitleLinkStyle" rel="bookmark" href="http://www.goldb.org/goldblog/2008/04/03/PythonScriptWhichWebserverDoesThatSiteRun.aspx" target="_blank">Python - Script - Which Webserver Does That Site Run?</a> by blogger Corey Goldberg.</p>
<p>I prefer the shell version:</p>
<pre>$ what-http-server() { curl -s -I "http://$1" | awk -F': ' '/^Server:/ {print $2}'; }
$ what-http-server www.pylot.org
Apache/2.0.52
$ what-http-server() { curl -s -I "$@" | awk -F': ' '/^Server:/ {print $2}'; }
$ what-http-server www.pylot.org google.com bashcurescancer.com
Apache/2.0.52
gws
Apache/2.2.6 (Unix)</pre>
<p>That works but this version is more correct:</p>
<pre>what-http-server() { curl -s -I $(for h in "$@"; do printf "http://%s " "$h"; done) | awk -F': ' '/^Server:/ {print $2}'; }</pre>
<p>In the version which works for multiple hosts, we are letting curl assume the protocol is HTTP. This works fine most of the time. However, there are exceptions:</p>
<p><em>If you specify URL without protocol:// prefix, curl will attempt to guess what protocol you might want. It will then default to HTTP but try other protocols based on often-used host name prefixes. For example, for host names starting with &#8220;ftp.&#8221; curl will assume you want to  speak FTP. - man curl<br />
</em></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/BashCuresCancer?a=1XfGki"><img src="http://feeds.feedburner.com/~f/BashCuresCancer?i=1XfGki" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/BashCuresCancer/~4/264303473" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://bashcurescancer.com/shell-function-which-webserver-does-that-site-run.html/feed</wfw:commentRss>
		<feedburner:awareness xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://api.feedburner.com/awareness/1.0/GetItemData?uri=BashCuresCancer&amp;itemurl=http%3A%2F%2Fbashcurescancer.com%2Fshell-function-which-webserver-does-that-site-run.html</feedburner:awareness></item>
		<item>
		<title>Exposing command line programs as web services</title>
		<link>http://bashcurescancer.com/exposing-command-line-programs-as-web-services.html</link>
		<comments>http://bashcurescancer.com/exposing-command-line-programs-as-web-services.html#comments</comments>
		<pubDate>Thu, 27 Mar 2008 23:01:30 +0000</pubDate>
		<dc:creator>Brock Noland</dc:creator>
		
		<category><![CDATA[Ideas]]></category>

		<category><![CDATA[Shell]]></category>

		<category><![CDATA[guest post]]></category>

		<category><![CDATA[script]]></category>

		<category><![CDATA[tools]]></category>

		<category><![CDATA[command line]]></category>

		<category><![CDATA[python]]></category>

		<category><![CDATA[webservice]]></category>

		<guid isPermaLink="false">http://bashcurescancer.com/exposing-command-line-programs-as-web-services.html</guid>
		<description><![CDATA[The web services paradigm of development is based on the Unix philosophy of &#8220;small is good&#8221;.  Web services should do one job, and do it well, allowing users to develop complex solutions by combining small, reliable and proven services.
Why not then, expose the power of familiar Unix commands like sort, grep, gzip&#8230; to the web?
Here [...]]]></description>
			<content:encoded><![CDATA[<p>The web services paradigm of development is based on the Unix philosophy of &#8220;small is good&#8221;.  Web services should do one job, and do it well, allowing users to develop complex solutions by combining small, reliable and proven services.<br />
Why not then, expose the power of familiar Unix commands like sort, grep, gzip&#8230; to the web?</p>
<p>Here is a <a href="http://bashcurescancer.com/media/scripts/to_web.py.txt">proof of concept python script</a> (<a href="http://bashcurescancer.com/media/scripts/to_web2_3.py.txt">Python 2.3 version</a>) to demonstrate.</p>
<p><span style="font-family: arial,helvetica,sans-serif;">Start services:</span></p>
<pre><span style="font-family: courier new,monospace;">$ ./to_web.py -p8008 sort &amp;
Thu Mar 27 13:45:54 2008 sort server started - 8008</span><span style="font-family: courier new,monospace;">
$ ./to_web.py -p8009 gzip &amp;
Thu Mar 27 13:46:29 2008 gzip server started - 8009</span></pre>
<p><span style="font-family: courier new,monospace;"><span style="font-family: arial,helvetica,sans-serif;">Use the services:</span><br />
</span></p>
<pre><span style="font-family: courier new,monospace;">$ for i in {1..10}; do echo ${RANDOM:0:2}; done | \
&gt; curl &#8211;data-binary @- &#8220;<a href="http://swat:8008/sort+-nr" target="_blank">http://swat:8008/sort+-nr</a>&#8221; | \
&gt; curl &#8211;data-binary @- &#8220;<a href="http://swat:8009/gzip" target="_blank">http://swat:8009/gzip</a>&#8221; | \
&gt; gunzip
97
37
23
23
21
18
11
11
10
10</span></pre>
<p>In my position, we have a database with host information - which has a command line interface. This tool has dependencies which are a painful to resolve. With <a href="http://bashcurescancer.com/media/scripts/to_web.py.txt">to_web.py</a>, we can turn the command line tool into a web service and access the data without having to satisfy those additional dependencies.</p>
<p><em>This is guest post by my esteemed colleague <strong>Adam Fokken</strong>. He can be reached here: <img src="http://spamdefeator.com/u/1ea" alt="" />Sadly, he does not have a blog. </em></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/BashCuresCancer?a=2kNmki"><img src="http://feeds.feedburner.com/~f/BashCuresCancer?i=2kNmki" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/BashCuresCancer/~4/259280636" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://bashcurescancer.com/exposing-command-line-programs-as-web-services.html/feed</wfw:commentRss>
		<feedburner:awareness xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://api.feedburner.com/awareness/1.0/GetItemData?uri=BashCuresCancer&amp;itemurl=http%3A%2F%2Fbashcurescancer.com%2Fexposing-command-line-programs-as-web-services.html</feedburner:awareness></item>
	<feedburner:awareness xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://api.feedburner.com/awareness/1.0/GetFeedData?uri=BashCuresCancer</feedburner:awareness></channel>
</rss><!-- Dynamic Page Served (once) in 0.340 seconds -->
