<?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/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>DamnHandy</title>
	
	<link>http://www.damnhandy.com</link>
	<description>A blog about Java, REST, and other stuff.</description>
	<lastBuildDate>Mon, 06 Sep 2010 14:35:26 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</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/Damnhandy" /><feedburner:info uri="damnhandy" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><geo:lat>42.649758</geo:lat><geo:long>-71.333486</geo:long><feedburner:emailServiceId>Damnhandy</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item>
		<title>The AppleTV is an Anomaly</title>
		<link>http://feedproxy.google.com/~r/Damnhandy/~3/y0pO8UWXWb4/</link>
		<comments>http://www.damnhandy.com/2010/09/06/the-appletv-is-an-anomaly/#comments</comments>
		<pubDate>Mon, 06 Sep 2010 14:35:26 +0000</pubDate>
		<dc:creator><span property="dc:creator" resource="http://www.damnhandy.com/2010/09/06/the-appletv-is-an-anomaly/">Ryan</span></dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[T.V.]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.damnhandy.com/?p=336</guid>
		<description>I have to admit that the new $99 AppleTV caught my attention when it was announced a few days ago. Small, cheap, works with iTunes, Netflix built in, and all for $99. Sounds pretty cool, right? I don&amp;#8217;t think so anymore.
See, in my home everything is wireless and there are only laptops and soon a [...]</description>
			<content:encoded><![CDATA[<p>I have to admit that the new <a href="http://www.apple.com/appletv/" target="_blank">$99 AppleTV</a> caught my attention when it was announced a few days ago. Small, cheap, works with iTunes, Netflix built in, and all for $99. Sounds pretty cool, right? I don&#8217;t think so anymore.</p>
<p>See, in my home everything is wireless and there are only laptops and soon a NAS. I want to have access to all of our files and media assets in one spot and be able to access those files on multiple devices. Most decent NAS solutions provide the storage and retrieval functionalities I need. What&#8217;s missing is the devices to play it back on. Clearly, I can play back stuff on my Mac and PC laptops and other devices. Getting media on my TV is another story.</p>
<p>The new AppleTV  has no internal storage and only streams media files from another source. In order to do this, a Mac or PC has to be running with iTunes open in order to stream the media files. This is rather inefficient since one of my laptops would have to be running while I&#8217;m watching TV. Now one could use a NAS to stream media files. Most NAS devices can stream audio via some type of iTunes friendly media server. Video likely won&#8217;t work on such NAS devices since some content would be DRM&#8217;d with FairPlay.  Since Apple does not support <a href="http://en.wikipedia.org/wiki/Digital_Living_Network_Alliance" target="_blank">DLNA</a> and has gone the proprietary route, there isn&#8217;t really a good way to stream video from a centralized source other than a desktop running iTunes.</p>
<p>Apple appears to be hanging on to the &#8220;<a href="http://www.cultofmac.com/the-dawn-of-apples-dominance-digital-hub-strategy-revisited/27810" target="_blank">digital hub</a>&#8221; mentality whereby the Mac is still the center of &#8220;your digital life.&#8221; Actually, my  so called &#8220;digital life&#8221; resides in the data itself and not so much the mechanisms that I use to access it. At $99, the Apple TV isn&#8217;t a bargain once you start to realize the extras you&#8217;ll need in order to make it participate in a complete solution. For me, this complete solution doesn&#8217;t appear to exist yet. The closest thing that comes to it doesn&#8217;t bear an an Apple logo but rather a Windows one.</p>
<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.damnhandy.com%2F2010%2F09%2F06%2Fthe-appletv-is-an-anomaly%2F&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px;margin-top:5px;"></iframe><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Damnhandy?a=y0pO8UWXWb4:4XNBS3NBFaU:mIC1leqXSog"><img src="http://feeds.feedburner.com/~ff/Damnhandy?i=y0pO8UWXWb4:4XNBS3NBFaU:mIC1leqXSog" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Damnhandy?a=y0pO8UWXWb4:4XNBS3NBFaU:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Damnhandy?i=y0pO8UWXWb4:4XNBS3NBFaU:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Damnhandy?a=y0pO8UWXWb4:4XNBS3NBFaU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Damnhandy?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Damnhandy?a=y0pO8UWXWb4:4XNBS3NBFaU:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Damnhandy?i=y0pO8UWXWb4:4XNBS3NBFaU:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Damnhandy?a=y0pO8UWXWb4:4XNBS3NBFaU:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/Damnhandy?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Damnhandy?a=y0pO8UWXWb4:4XNBS3NBFaU:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Damnhandy?i=y0pO8UWXWb4:4XNBS3NBFaU:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Damnhandy?a=y0pO8UWXWb4:4XNBS3NBFaU:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Damnhandy?i=y0pO8UWXWb4:4XNBS3NBFaU:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Damnhandy?a=y0pO8UWXWb4:4XNBS3NBFaU:l6gmwiTKsz0"><img src="http://feeds.feedburner.com/~ff/Damnhandy?d=l6gmwiTKsz0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Damnhandy?a=y0pO8UWXWb4:4XNBS3NBFaU:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Damnhandy?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Damnhandy/~4/y0pO8UWXWb4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.damnhandy.com/2010/09/06/the-appletv-is-an-anomaly/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.damnhandy.com/2010/09/06/the-appletv-is-an-anomaly/</feedburner:origLink></item>
		<item>
		<title>Protocol Buffers are not very “RESTish”.</title>
		<link>http://feedproxy.google.com/~r/Damnhandy/~3/2yKcx38y2rQ/</link>
		<comments>http://www.damnhandy.com/2010/05/09/protocol-buffers-are-not-very-restish/#comments</comments>
		<pubDate>Sun, 09 May 2010 15:26:06 +0000</pubDate>
		<dc:creator><span property="dc:creator" resource="http://www.damnhandy.com/2010/05/09/protocol-buffers-are-not-very-restish/">Ryan</span></dc:creator>
				<category><![CDATA[REST]]></category>

		<guid isPermaLink="false">http://www.damnhandy.com/?p=309</guid>
		<description>There&amp;#8217;s been a lot of activity recently around highly optimized, binary serialization formats such as Google Protocol Buffers and Thrift. There have been some attempts to include formats such as Protocol Buffers into their &amp;#8220;REST API&amp;#8221; because of perceived performance benefits without consideration of the downside of an IDL format with respect to REST.
To illustrate why [...]</description>
			<content:encoded><![CDATA[<p>There&#8217;s been a lot of activity recently around highly optimized, binary serialization formats such as <a href="http://code.google.com/p/protobuf/" target="_blank">Google Protocol Buffers</a> and Thrift. There have been some attempts to include formats such as Protocol Buffers into their &#8220;REST API&#8221; because of perceived performance benefits without consideration of the downside of an IDL format with respect to REST.</p>
<p>To illustrate why Protocol Buffers inherently adulterate REST architectural style, I&#8217;ve compiled the following points:</p>
<p><strong>Imposes a Tight Coupling </strong></p>
<p>This tight coupling is considered a REST anti-pattern and should be avoided. Protobuf over HTTP is probably a form of<a href="http://www.nordsc.com/ext/classification_of_http_based_apis.html#uri-rpc" target="_blank"> RPC-URI tunneling</a>, it is not REST. In order to work with protobufs efficiently, both the client and server must have code generated by the .proto definition.</p>
<p><strong>Strongly Typed Resources</strong></p>
<p>A key point made my Roy T. Fielding in one of <a href="http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven" target="_blank">his more informative blog posts</a> is that:</p>
<blockquote><p><em>A REST API should never have “typed” resources that are significant to the client. Specification authors may use resource types for describing server implementation behind the interface, but those types must be irrelevant and invisible to the client. The only types that are significant to a client are the current representation’s media type and standardized relation names.</em></p></blockquote>
<p>I&#8217;m not totally sure I&#8217;ve got this one 100% correct, but it would appear that the use of protobufs is now also exposing typed resources to the client. Additionally, there is no means to specify which type to ask for. Which leads me to my next point:</p>
<p><strong>Ambiguous Media Type</strong></p>
<p><a href="http://www.subbu.org/" target="_blank">Subbu Allamaraju</a> has pointed out that the protobuf <a href="http://www.subbu.org/blog/2008/12/jax-rs-protobufs" target="_blank">media type doesn&#8217;t doesn&#8217;t convey enough information</a> as to indicate what message type is in the protobuf representation in a post about a <a href="http://www.javarants.com/2008/12/27/using-jax-rs-with-protocol-buffers-for-high-performance-rest-apis/" target="_blank">Protobuf provider for JAX-RS</a>. Protobuf doesn&#8217;t have an official media type, but folks generally use one of the following media types:</p>
<pre>     application/x-protobuf
     application/vnd.google.protobuf</pre>
<p>Protobufs are not generic and the representation contains data for a very specific message. Furthermore, the serialized form contains no information as to what type(s) it represents. So although you may have specified the media type in the request, there is no mechanism to specify which protobuf message we actually want. <a href="http://www.mail-archive.com/protobuf@googlegroups.com/msg02707.html" target="_blank">One suggestion</a> as to how this might be resolved is to specify the .proto package and message name by using a parameter:</p>
<pre>     application/vnd.google.protobuf;proto=mypkg.MyMessage</pre>
<p>The approach seems reasonable enough. But as Subbu also points out, this solution also requires that the .proto be shared between the client and server in order to establish the binding. Clearly there&#8217;s a number of options that could be applied share the .proto definition, but all of them involve some type of external configuration in order to resolve the .proto since the protobuf wire format is not self-describing.</p>
<p><strong>Self-Describing formats must be Self-Describing</strong></p>
<p>Protocol Buffers are not self-describing by design. The Google documentation even states that:</p>
<blockquote><p><em>&#8220;</em><span style="font-family: Helvetica, Arial, sans-serif; font-size: small; line-height: 16px;"><em>Protocol Buffers do not contain descriptions of their own types. Thus, given only a raw message without the corresponding </em><code style="font-family: monospace; color: #007000; font-size: 10pt;"><em>.proto</em></code><em> file defining its type, it is difficult to extract any useful data.&#8221;</em></span></p></blockquote>
<p>This isn&#8217;t necessary a bad thing in general, but it does violate a core tenet or RESTful architecture. <a href="http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm#sec_5_2_1_2" target="_blank">Section 5.2.1.2</a> of the Roy T. Fielding&#8217;s dissertation states that a proper representation consists of the following:</p>
<ul>
<li>The data</li>
<li>Metadata that describes the data</li>
<li>Optional metadata about the metadata, usually used to for integrity checking.</li>
</ul>
<p>Protocol Buffers only handle the data. Google has presented an option for <a href="http://code.google.com/apis/protocolbuffers/docs/techniques.html#self-description">making protobuf messages self-describing</a>. While this works, it still has three fundamental flaws:</p>
<ol>
<li>The SelfDescribingMessage itself is not self-describing <img src='http://www.damnhandy.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </li>
<li>There&#8217;s still a tight coupling between client and server for the SelfDescribingMessage as generated code is still required on both client and server.</li>
<li>It doesn&#8217;t address dependency resolution. That is, message you&#8217;re sending over might extend or depend on other .proto definitions. How you resolve those dependencies is a challenge.</li>
</ol>
<p>The dependency resolution is no small challenge and becomes a major headache if you&#8217;re extending messages from other parties.</p>
<p><strong>Application State is not Hypermedia driven</strong></p>
<p>Protocol Buffers do not have a means to describe links to external messages. Most applications I&#8217;ve encountered that use protobufs either send the entire message tree in a single call or there is some type of ID value that the client will have to dereference somehow. The latter ultimately results  in either forcing the client to infer and generate URLs, which is <a href="http://www.infoq.com/articles/rest-anti-patterns" target="_blank">yet another REST anti-pattern</a>.</p>
<p><strong>Wrapping Up</strong></p>
<p>This isn&#8217;t to say that Protocol Buffers are inherently bad. Google has proven that protobufs have value when used as intended. Outside of an RPC system, protocol buffers are really don&#8217;t seem appropriate for web applications who claim to be RESTful. Of course, I could be complete wrong here and I&#8217;m sure the internets will be certain to let me know.</p>
<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.damnhandy.com%2F2010%2F05%2F09%2Fprotocol-buffers-are-not-very-restish%2F&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px;margin-top:5px;"></iframe><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Damnhandy?a=2yKcx38y2rQ:9Uanb23KPVY:mIC1leqXSog"><img src="http://feeds.feedburner.com/~ff/Damnhandy?i=2yKcx38y2rQ:9Uanb23KPVY:mIC1leqXSog" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Damnhandy?a=2yKcx38y2rQ:9Uanb23KPVY:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Damnhandy?i=2yKcx38y2rQ:9Uanb23KPVY:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Damnhandy?a=2yKcx38y2rQ:9Uanb23KPVY:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Damnhandy?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Damnhandy?a=2yKcx38y2rQ:9Uanb23KPVY:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Damnhandy?i=2yKcx38y2rQ:9Uanb23KPVY:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Damnhandy?a=2yKcx38y2rQ:9Uanb23KPVY:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/Damnhandy?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Damnhandy?a=2yKcx38y2rQ:9Uanb23KPVY:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Damnhandy?i=2yKcx38y2rQ:9Uanb23KPVY:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Damnhandy?a=2yKcx38y2rQ:9Uanb23KPVY:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Damnhandy?i=2yKcx38y2rQ:9Uanb23KPVY:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Damnhandy?a=2yKcx38y2rQ:9Uanb23KPVY:l6gmwiTKsz0"><img src="http://feeds.feedburner.com/~ff/Damnhandy?d=l6gmwiTKsz0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Damnhandy?a=2yKcx38y2rQ:9Uanb23KPVY:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Damnhandy?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Damnhandy/~4/2yKcx38y2rQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.damnhandy.com/2010/05/09/protocol-buffers-are-not-very-restish/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.damnhandy.com/2010/05/09/protocol-buffers-are-not-very-restish/</feedburner:origLink></item>
		<item>
		<title>URL vs. URI vs. URN, in More Concise Terms</title>
		<link>http://feedproxy.google.com/~r/Damnhandy/~3/OQGe65-YUl0/</link>
		<comments>http://www.damnhandy.com/2009/08/26/url-vs-uri-vs-urn-in-more-concise-terms/#comments</comments>
		<pubDate>Wed, 26 Aug 2009 12:18:14 +0000</pubDate>
		<dc:creator><span property="dc:creator" resource="http://www.damnhandy.com/2009/08/26/url-vs-uri-vs-urn-in-more-concise-terms/">Ryan</span></dc:creator>
				<category><![CDATA[RDF]]></category>
		<category><![CDATA[REST]]></category>
		<category><![CDATA[Semantic Web]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[URI]]></category>
		<category><![CDATA[URL]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://www.damnhandy.com/?p=290</guid>
		<description>Without a doubt, the URL vs. URI post is by the most visited page on this blog. Even so, there&amp;#8217;s still a lot of confusion on the topic and so I thought I&amp;#8217;d break it down in less words. The original post was slightly misleading in that I attempted to compare URI to URL, when [...]</description>
			<content:encoded><![CDATA[<p>Without a doubt, <a href="http://www.damnhandy.com/2007/11/19/uri-vs-url-whats-the-difference/" target="_self">the URL vs. URI</a> post is by the most visited page on this blog. Even so, there&#8217;s still a lot of confusion on the topic and so I thought I&#8217;d break it down in less words. The original post was slightly misleading in that I attempted to compare URI to URL, when in fact it should have defined the relationship between URI, URL, and URN. In this post, I hope to clear that in more concise terms. But first, here&#8217;s a pretty picture:</p>
<p><img class="aligncenter size-full wp-image-289" title="uri_class_diagram" src="http://www.damnhandy.com/wp-content/uploads/2009/08/uri_class_diagram.png" alt="uri_class_diagram" width="241" height="150" /></p>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">Both URLs and URNs are specializations, or subclasses of URI. You can refer to both URLs and URNs as a URI. In applictaion terms: if your application only calls for a URI, you should be free to use either or.</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">Now, here&#8217;s where the big difference between URN and URL: a URL is location bound and dereferencable over the web. A URN is just a name and isn&#8217;t bound to a network location. However, BOTH are still valid URIs. Now, if the application requires a URI that is bound to a network location, you must use the specialization of URI called URL.</div>
<p>Remember that URI stands for Uniform Resource Identifier, which is used to identify some &#8220;thing&#8221;, or resource, on the web. Both URLs and URNs are specialization&#8217;s (or subclasses if you will), of URI. You&#8217;d be correct by referring to both a URL or URN as a URI. In applictaion terms: if your application only calls for an identifier, you should be free to use either a URL or a URN. For brevity, you can state that the application simply requires a URI and the use of a URL or URN would statisfy that requirement.</p>
<p>Now if your application needs a <a href="http://en.wikipedia.org/wiki/Dereferenceable_Uniform_Resource_Identifier" target="_blank">URI that dereferencable</a> over the web, you should be aware of the difference between URN and URL. A URL is location bound and defines the mechanism as to how to retrieve the resource over the web. A URN is just a name and isn&#8217;t bound to a network location. For example, you may have a URN for a books ISBN number in the form of urn:isbn:0451450523. The URN is still a valid URI, but you cannot dereference it, it&#8217;s just a name used to provide identity. So to put in simpler terms:</p>
<ul>
<li>A URI is used to define the identity of some thing on the on the web</li>
<li>Both URL and URN are URIs</li>
<li>A URN only defines a name, it provides no details about how to get the resource over a network.</li>
<li>A URL defines how to retrieve the resource over the web.</li>
<li>You can get a &#8220;thing&#8221; via a URL, you can&#8217;t get anything with a URN</li>
<li>Both URL and URN are URIs as the both identify a resource</li>
</ul>
<p>There some other items that need clarification based on some comments I&#8217;ve received from the original post:</p>
<ul>
<li>Elements of a URI such as query string, file extension, etc. have no bearing on whether or not a URL is a URI. If the URI is defines how to get a resource over the web, it&#8217;s a URL.</li>
<li>A URL is not limited to HTTP. There are many other protocol schemes that can be plugged into a URL.</li>
<li>If a URL defines a scheme other than HTTP, it does not magically become a URI. The URI defines how to get the resource, whether it be HTTP, FTP, SMB, etc., it&#8217;s still a URL. But because the URL identifies a resource, it&#8217;s a URI as well.</li>
</ul>
<p>Yeah, I&#8217;ve probably repeated myself a few times, but I wanted to stress a few points.</p>
<p>There&#8217;s also been some confusion about when to use the term URI. As I stated in the original post explained above, it depends on what you&#8217;re doing. If everything your application does involves accessing data over the web, you&#8217;re most likely using URL exclusively. In that case, it wouldn&#8217;t be a bad thing to use the term URL. Now, if the application can use either a network location, or a name, then URI is the proper term. For example, XML namespaces are usually declared using a URI. The namespace may just be a name, or a URL that references a DTD or XML Schema. So if you&#8217;re using a URL for identity and retrieval, it&#8217;s probably best to use URI.</p>
<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.damnhandy.com%2F2009%2F08%2F26%2Furl-vs-uri-vs-urn-in-more-concise-terms%2F&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px;margin-top:5px;"></iframe><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Damnhandy?a=OQGe65-YUl0:V99NHNAqP0M:mIC1leqXSog"><img src="http://feeds.feedburner.com/~ff/Damnhandy?i=OQGe65-YUl0:V99NHNAqP0M:mIC1leqXSog" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Damnhandy?a=OQGe65-YUl0:V99NHNAqP0M:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Damnhandy?i=OQGe65-YUl0:V99NHNAqP0M:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Damnhandy?a=OQGe65-YUl0:V99NHNAqP0M:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Damnhandy?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Damnhandy?a=OQGe65-YUl0:V99NHNAqP0M:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Damnhandy?i=OQGe65-YUl0:V99NHNAqP0M:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Damnhandy?a=OQGe65-YUl0:V99NHNAqP0M:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/Damnhandy?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Damnhandy?a=OQGe65-YUl0:V99NHNAqP0M:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Damnhandy?i=OQGe65-YUl0:V99NHNAqP0M:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Damnhandy?a=OQGe65-YUl0:V99NHNAqP0M:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Damnhandy?i=OQGe65-YUl0:V99NHNAqP0M:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Damnhandy?a=OQGe65-YUl0:V99NHNAqP0M:l6gmwiTKsz0"><img src="http://feeds.feedburner.com/~ff/Damnhandy?d=l6gmwiTKsz0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Damnhandy?a=OQGe65-YUl0:V99NHNAqP0M:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Damnhandy?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Damnhandy/~4/OQGe65-YUl0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.damnhandy.com/2009/08/26/url-vs-uri-vs-urn-in-more-concise-terms/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://www.damnhandy.com/2009/08/26/url-vs-uri-vs-urn-in-more-concise-terms/</feedburner:origLink></item>
		<item>
		<title>Adobe XMP Packet Extraction for the Aperture Framework</title>
		<link>http://feedproxy.google.com/~r/Damnhandy/~3/i7dofj4YceI/</link>
		<comments>http://www.damnhandy.com/2009/08/09/adobe-xmp-packet-extraction-for-the-aperture-framework/#comments</comments>
		<pubDate>Sun, 09 Aug 2009 15:51:29 +0000</pubDate>
		<dc:creator><span property="dc:creator" resource="http://www.damnhandy.com/2009/08/09/adobe-xmp-packet-extraction-for-the-aperture-framework/">Ryan</span></dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[RDF]]></category>
		<category><![CDATA[Semantic Web]]></category>
		<category><![CDATA[LinkedIn]]></category>
		<category><![CDATA[sesame]]></category>
		<category><![CDATA[sparql]]></category>
		<category><![CDATA[triple store]]></category>
		<category><![CDATA[xmp]]></category>

		<guid isPermaLink="false">http://www.damnhandy.com/?p=281</guid>
		<description>When it comes to manipulating photographs, I live in Photoshop. One feature of all Adobe products that I like is the ability to annotate images and other documents using their eXtensible Metadata Platform, or XMP. XMP is a collection of RDF statements that get embedded into a document that describe many facets of the document. [...]</description>
			<content:encoded><![CDATA[<p>When it comes to manipulating photographs, I live in <a href="http://www.adobe.com/products/photoshop/family/" target="_blank">Photoshop</a>. One feature of all Adobe products that I like is the ability to annotate images and other documents using their <a href="http://www.adobe.com/products/xmp/" target="_blank">eXtensible Metadata Platform, or XMP</a>. XMP is a collection of RDF statements that get embedded into a document that describe many facets of the document. I&#8217;ve always wanted to be able to somehow get that data out of these files and doing something with it for application purposes.</p>
<p>There are projects like <a href="http://jempbox.org/" target="_blank">Jempbox</a>, which work on manipulating the XMP data but offers no facilities to extract the XMP packet from image files. The <a href="http://xmlgraphics.apache.org/commons/" target="_blank">Apache XML Graphics Commons</a> is more the ticket I was looking for. The library includes and XMP parser that performs by scanning a files for the XMP header. The approach works quite well and supports pretty much every format supported by the XMP specification. The downside of XML Graphics Commons is that it doesn&#8217;t property read all of the RDF statements. Some of the data is skipped or missed completely. To top it off, neither framework allows you to get at the raw RDF data.</p>
<p>What I really wanted to do was to get the XMP packet in its entirety and load it into a triples store like <a href="http://www.openrdf.org/" target="_blank">Sesame</a> or <a href="http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/" target="_blank">Virtuoso</a>. This of course means that you want to have the data available as RDF. Rather than inventing my own framework to do all of this, I found the <a href="http://aperture.semanticdesktop.org/" target="_blank">Aperture Framework</a>. Aperture is simply amazing framework that can extract RDF statements from just about anything. Of course, the one thing that is missing is XMP support. So, I set out on implementing my own <a href="https://sourceforge.net/apps/trac/aperture/wiki/Extractors" target="_blank">Extractor</a> that can suck out the entire XMP packet as RDF. It&#8217;s based on the work started in the XML Graphics Commons project, but modified significantly so that it pulls out the RDF data. Once extracted, it&#8217;s very easy to store the statements into a triple store and execute <a href="http://www.w3.org/TR/rdf-sparql-query/" target="_blank">SPARQL</a> queries on it.</p>
<p>Right now the, this  XMPExtractor can read XMP from the following formats:</p>
<ul>
<li>JPEG Images (image/jpeg)</li>
<li>TIFF Images (image/tiff)</li>
<li>Adobe DNG (image/x-adobe-dng)</li>
<li>Portable Network Graphic (image/png)</li>
<li>PDF (application/pdf)</li>
<li>EPS, Postscipt, and Adobe Illustrator files (application/postscript)</li>
<li>Quicktime (video/quicktime)</li>
<li>AVI (video/x-msvideo)</li>
<li>MPEG-4 (video/mp4)</li>
<li>MPEG-2 (video/mpeg)</li>
<li>MP3 (audio/mpeg)</li>
<li>WAV Audio (audio/x-wav)</li>
</ul>
<p>On the downside, I&#8217;ve found that if you use the XMPExtractor with a <a href="https://sourceforge.net/apps/trac/aperture/wiki/Crawlers" target="_blank">Crawler</a>, you&#8217;ll run into some problems with <a href="http://tryit.adobe.com/us/cs4/illustrator/" target="_blank">Adobe Illustrator</a> files. The problem is that the <a href="http://aperture.sourceforge.net/doc/javadoc/org/semanticdesktop/aperture/extractor/pdf/PdfExtractor.html" target="_blank">PDFExtractor</a> mistakes these files for PDFs and then fails. But as long as you&#8217;re not using Illustrator files, you should be ok. There&#8217;s also a few nitpicks with JPEG files and the <a href="http://aperture.sourceforge.net/doc/javadoc/org/semanticdesktop/aperture/extractor/jpg/JpgExtractor.html" target="_blank">JpgExtractor</a> in that the sample files included in the XMP SDK are flagged as invalid JPEG files. However, every JPEG file I created from Photoshop and iPhoto seem to work fine. But after a little more testing, I&#8217;ll look at offering it up as a contribution to the project.</p>
<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.damnhandy.com%2F2009%2F08%2F09%2Fadobe-xmp-packet-extraction-for-the-aperture-framework%2F&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px;margin-top:5px;"></iframe><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Damnhandy?a=i7dofj4YceI:8GqZFjeRh5U:mIC1leqXSog"><img src="http://feeds.feedburner.com/~ff/Damnhandy?i=i7dofj4YceI:8GqZFjeRh5U:mIC1leqXSog" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Damnhandy?a=i7dofj4YceI:8GqZFjeRh5U:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Damnhandy?i=i7dofj4YceI:8GqZFjeRh5U:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Damnhandy?a=i7dofj4YceI:8GqZFjeRh5U:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Damnhandy?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Damnhandy?a=i7dofj4YceI:8GqZFjeRh5U:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Damnhandy?i=i7dofj4YceI:8GqZFjeRh5U:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Damnhandy?a=i7dofj4YceI:8GqZFjeRh5U:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/Damnhandy?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Damnhandy?a=i7dofj4YceI:8GqZFjeRh5U:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Damnhandy?i=i7dofj4YceI:8GqZFjeRh5U:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Damnhandy?a=i7dofj4YceI:8GqZFjeRh5U:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Damnhandy?i=i7dofj4YceI:8GqZFjeRh5U:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Damnhandy?a=i7dofj4YceI:8GqZFjeRh5U:l6gmwiTKsz0"><img src="http://feeds.feedburner.com/~ff/Damnhandy?d=l6gmwiTKsz0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Damnhandy?a=i7dofj4YceI:8GqZFjeRh5U:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Damnhandy?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Damnhandy/~4/i7dofj4YceI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.damnhandy.com/2009/08/09/adobe-xmp-packet-extraction-for-the-aperture-framework/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		<feedburner:origLink>http://www.damnhandy.com/2009/08/09/adobe-xmp-packet-extraction-for-the-aperture-framework/</feedburner:origLink></item>
		<item>
		<title>Semantic Web Icon and Logo Stencil for OmniGraffle</title>
		<link>http://feedproxy.google.com/~r/Damnhandy/~3/v36D8nxNWVM/</link>
		<comments>http://www.damnhandy.com/2009/07/21/semantic-web-icon-and-logo-stencil-for-omnigraffle/#comments</comments>
		<pubDate>Wed, 22 Jul 2009 02:16:00 +0000</pubDate>
		<dc:creator><span property="dc:creator" resource="http://www.damnhandy.com/2009/07/21/semantic-web-icon-and-logo-stencil-for-omnigraffle/">Ryan</span></dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.damnhandy.com/?p=270</guid>
		<description>I&amp;#8217;ve been doing a lot of diagrams related to some of the projects that I have doing with RDF and other Semantic Web technologies. Rather that cut and paste PNG icons into OmniGraffle, I decided to start putting together a stencil. Here&amp;#8217;s what it looks like so far:
It&amp;#8217;s not much right now, but I&amp;#8217;ll try [...]</description>
			<content:encoded><![CDATA[<p style="text-align: left; ">I&#8217;ve been doing a lot of diagrams related to some of the projects that I have doing with RDF and other Semantic Web technologies. Rather that cut and paste PNG icons into <a href="http://www.omnigroup.com/applications/OmniGraffle/" target="_blank">OmniGraffle</a>, I decided to start putting together a stencil. Here&#8217;s what it looks like so far:<img class="size-full wp-image-271 aligncenter" title="Semantic Web Icons" src="http://www.damnhandy.com/wp-content/uploads/2009/07/Semantic-Web-Icons.png" border="1" alt="Semantic Web Icons" width="400" height="270" /></p>
<p style="text-align: left; ">It&#8217;s not much right now, but I&#8217;ll try and keep it up to date as I add more icons from the <a href="http://www.w3.org/2007/10/sw-logos.html" target="_blank">W3C site</a> and other sources. It should be up on <a href="http://graffletopia.com/" target="_blank">GraffleTopia</a> soon.</p>
<p style="text-align: left; "><strong>Update: </strong>And here&#8217;s <a href="http://graffletopia.com/stencils/486" target="_blank">the direct link</a> to the stencil.</p>
<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.damnhandy.com%2F2009%2F07%2F21%2Fsemantic-web-icon-and-logo-stencil-for-omnigraffle%2F&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px;margin-top:5px;"></iframe><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Damnhandy?a=v36D8nxNWVM:DVp5K2kYujg:mIC1leqXSog"><img src="http://feeds.feedburner.com/~ff/Damnhandy?i=v36D8nxNWVM:DVp5K2kYujg:mIC1leqXSog" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Damnhandy?a=v36D8nxNWVM:DVp5K2kYujg:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Damnhandy?i=v36D8nxNWVM:DVp5K2kYujg:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Damnhandy?a=v36D8nxNWVM:DVp5K2kYujg:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Damnhandy?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Damnhandy?a=v36D8nxNWVM:DVp5K2kYujg:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Damnhandy?i=v36D8nxNWVM:DVp5K2kYujg:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Damnhandy?a=v36D8nxNWVM:DVp5K2kYujg:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/Damnhandy?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Damnhandy?a=v36D8nxNWVM:DVp5K2kYujg:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Damnhandy?i=v36D8nxNWVM:DVp5K2kYujg:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Damnhandy?a=v36D8nxNWVM:DVp5K2kYujg:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Damnhandy?i=v36D8nxNWVM:DVp5K2kYujg:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Damnhandy?a=v36D8nxNWVM:DVp5K2kYujg:l6gmwiTKsz0"><img src="http://feeds.feedburner.com/~ff/Damnhandy?d=l6gmwiTKsz0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Damnhandy?a=v36D8nxNWVM:DVp5K2kYujg:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Damnhandy?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Damnhandy/~4/v36D8nxNWVM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.damnhandy.com/2009/07/21/semantic-web-icon-and-logo-stencil-for-omnigraffle/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.damnhandy.com/2009/07/21/semantic-web-icon-and-logo-stencil-for-omnigraffle/</feedburner:origLink></item>
		<item>
		<title>You can’t do anything “over REST”</title>
		<link>http://feedproxy.google.com/~r/Damnhandy/~3/qAsP2m_Qw58/</link>
		<comments>http://www.damnhandy.com/2009/07/19/you-cant-do-anything-over-rest/#comments</comments>
		<pubDate>Sun, 19 Jul 2009 15:21:21 +0000</pubDate>
		<dc:creator><span property="dc:creator" resource="http://www.damnhandy.com/2009/07/19/you-cant-do-anything-over-rest/">Ryan</span></dc:creator>
				<category><![CDATA[REST]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.damnhandy.com/?p=259</guid>
		<description>Sometimes, you can let things slide, but there are other time when terms are just used so incorrectly that it has to be called out. One thing that always gets me is the gross misuse of the term REST. For those who know what REpresentation State Transfer (REST) means then you know that, although the [...]</description>
			<content:encoded><![CDATA[<p>Sometimes, you can let things slide, but there are other time when terms are just used so incorrectly that it has to be called out. One thing that always gets me is the gross misuse of the term <a href="http://en.wikipedia.org/wiki/Representational_State_Transfer" target="_blank">REST</a>. For those who know what <a href="http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm" target="_blank">REpresentation State Transfer </a>(REST) means then you know that, although the REST architectural style is commonly used with HTTP, it is not bound to any specific protocol.</p>
<p>One of the things that starts my head spinning is seeing how the term &#8220;REST&#8221; is so often used in place of thing they really mean in order to toss out buzzwords. When I&#8217;m involved in technical discussions or read articles on the web, I start to feel like <a href="http://www.imdb.com/title/tt0093779/quotes" target="_blank">Inigo Montoya</a> when I hear the term &#8220;REST&#8221;. More often than not, someone is probably referring about HTTP, or even HTTPS, but you can never be too sure. Here&#8217;s a few of my favorite statements:</p>
<blockquote><p><strong><em>We&#8217;ll send it over REST</em></strong></p></blockquote>
<p>Oh no you won&#8217;t! Given that REST is not a protocol, I find this kind of statement simply mind boggling. One can assume that someone would like to return data over HTTP. However, it is entirely possible to create a RESTful application over other protocols such as XMPP, RMI, or something else. It helps top be specific when you&#8217;re involved in a technical discussion.</p>
<blockquote><p><strong><em>We&#8217;ll make a REST request</em></strong></p></blockquote>
<p>Are you sure? What exactly does a REST request look like? If you can&#8217;t request data from a URI like rest://example.com/foo, then you&#8217;re not making a &#8220;REST request.&#8221; As stated above, be specific as to what protocol you&#8217;re using.</p>
<blockquote><p><strong><em>We&#8217;ll return it as a REST object</em></strong></p></blockquote>
<p>This one pains me more than the other two. Seriously, what kind of &#8220;objects&#8221; are RESTful? Is is XML, JSON, binary, what? Again, there is no such thing. There are only resources and representations, and it&#8217;s the representations of those resources you need to be specific about. What, exactly, are you sending over the wire?</p>
<blockquote><p><strong><em>We&#8217;ll just add some methods to our REST server</em></strong></p></blockquote>
<p>OMFG! For real, a REST server? Even though <a href="http://wiki.developers.facebook.com/index.php/API" target="_blank">the Facebook</a> claims to have <a href="http://api.facebook.com/restserver.php" target="_blank">one of those</a>, it doesn&#8217;t make improper use of term valid. You can&#8217;t serve &#8220;REST,&#8221; plain and simple.</p>
<p>Just so that I can continue beating the horse: you can&#8217;t send jack over REST. REST is not HTTP and HTTP is not REST. If you have a web API that you&#8217;re exposing over HTTP in a RESTful fashion, why can&#8217;t it just be called an HTTP Service or API server? Correct use of the term REST is just as important as implementing a RESTful application correctly. Sadly, the same folks who use the term REST incorrectly are also not creating applications can claim to be RESTful.</p>
<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.damnhandy.com%2F2009%2F07%2F19%2Fyou-cant-do-anything-over-rest%2F&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px;margin-top:5px;"></iframe><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Damnhandy?a=qAsP2m_Qw58:7i-y7mNjRd4:mIC1leqXSog"><img src="http://feeds.feedburner.com/~ff/Damnhandy?i=qAsP2m_Qw58:7i-y7mNjRd4:mIC1leqXSog" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Damnhandy?a=qAsP2m_Qw58:7i-y7mNjRd4:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Damnhandy?i=qAsP2m_Qw58:7i-y7mNjRd4:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Damnhandy?a=qAsP2m_Qw58:7i-y7mNjRd4:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Damnhandy?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Damnhandy?a=qAsP2m_Qw58:7i-y7mNjRd4:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Damnhandy?i=qAsP2m_Qw58:7i-y7mNjRd4:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Damnhandy?a=qAsP2m_Qw58:7i-y7mNjRd4:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/Damnhandy?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Damnhandy?a=qAsP2m_Qw58:7i-y7mNjRd4:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Damnhandy?i=qAsP2m_Qw58:7i-y7mNjRd4:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Damnhandy?a=qAsP2m_Qw58:7i-y7mNjRd4:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Damnhandy?i=qAsP2m_Qw58:7i-y7mNjRd4:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Damnhandy?a=qAsP2m_Qw58:7i-y7mNjRd4:l6gmwiTKsz0"><img src="http://feeds.feedburner.com/~ff/Damnhandy?d=l6gmwiTKsz0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Damnhandy?a=qAsP2m_Qw58:7i-y7mNjRd4:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Damnhandy?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Damnhandy/~4/qAsP2m_Qw58" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.damnhandy.com/2009/07/19/you-cant-do-anything-over-rest/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.damnhandy.com/2009/07/19/you-cant-do-anything-over-rest/</feedburner:origLink></item>
		<item>
		<title>Why free software shouldn’t depend on Richard M. Stallman’s advice</title>
		<link>http://feedproxy.google.com/~r/Damnhandy/~3/syi17NID5nE/</link>
		<comments>http://www.damnhandy.com/2009/06/28/why-free-software-shouldnt-depend-on-richard-m-stallmans-advice/#comments</comments>
		<pubDate>Sun, 28 Jun 2009 12:59:49 +0000</pubDate>
		<dc:creator><span property="dc:creator" resource="http://www.damnhandy.com/2009/06/28/why-free-software-shouldnt-depend-on-richard-m-stallmans-advice/">Ryan</span></dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mono]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.damnhandy.com/?p=250</guid>
		<description>There&amp;#8217;s been a long running rant about how using Mono is um, bad. But I just don&amp;#8217;t get it. Now we have Richard M. Stallman coming out against Mono and C# with an argument that sounds kinda like &amp;#8220;we shouldn&amp;#8217;t use it just because we shouldn&amp;#8217;t.&amp;#8221; Hmm, Ok. [ok, that is way too much of an [...]</description>
			<content:encoded><![CDATA[<p>There&#8217;s been a long running rant about how using <a href="mono-project.org/">Mono</a> is um, bad. But I just don&#8217;t get it. Now we have Richard M. Stallman coming out against <a href="http://www.fsf.org/news/dont-depend-on-mono">Mono and C#</a> with an argument that sounds kinda like <span style="text-decoration: line-through;">&#8220;we shouldn&#8217;t use it just because we shouldn&#8217;t.&#8221; Hmm, Ok</span>. [ok, that is way too much of an over simplification and taking some things out of context. However, I'm still not sure what's bad: C#, Mono, or both?]</p>
<p>The odd thing about the post if that it focuses on <a href="http://en.wikipedia.org/wiki/C_Sharp">C#</a>, but none of the other languages that the the <a href="http://www.mono-project.com/Languages" target="_blank">Mono CLR supports</a>. Second, he goes on to state that &#8220;If we lose the use of <a href="http://en.wikipedia.org/wiki/C_Sharp">C#</a>, we will lose them [the applications] too.&#8221; Given that C# <a href="http://www.ecma-international.org/publications/standards/Ecma-334.htm">is an ECMA standard</a> (as is the <a href="http://www.ecma-international.org/publications/standards/Ecma-335.htm">CLR itself</a>), I think the conerns about not being able use <a href="http://en.wikipedia.org/wiki/C_Sharp">C#</a> are unwarrented. If we have to worry that the ECMA would allow Microsoft to pull rank on <a href="http://en.wikipedia.org/wiki/C_Sharp">C#</a>, then web developers should be rethinking thier use of <a href="http://www.ecma-international.org/publications/standards/Ecma-262.htm">JavaScript</a>.</p>
<p>But the wierd thing is that Stallman doesn&#8217;t make the same point about any other langauage that the <a href="http://www.mono-project.com/Languages">Mono CLR supports</a>. For example, if <a href="http://projects.gnome.org/tomboy/">Tomboy</a> were written in the <a href="http://boo.codehaus.org/Home">Boo</a> programming language but remain on the Mono CLR, would evertyhing be ok? Why is there such a profound hatred of <a href="http://en.wikipedia.org/wiki/C_Sharp">C#</a> and not other lanagues supported by the CLR? Why not come out against the use <a href="http://en.wikipedia.org/wiki/Common_Intermediate_Language" target="_blank">CIL</a>? Or is Stallman just not making his point clear enough?</p>
<p>As somone who uses <a href="http://www.ubuntu.com/" target="_blank">Ubuntu 9.0.4</a> on a daily basis, I can apprciate what <a href="mono-project.org/">Mono</a> has to offer from an end user perspecitive. I&#8217;m a HUGE fan of <a href="http://do.davebsd.com/">GnomeDo</a>, which has turned out to be a better implementation of <a href="http://docs.blacktree.com/quicksilver/what_is_quicksilver">Quicksilver</a> than <a href="http://docs.blacktree.com/quicksilver/what_is_quicksilver">Quicksilver</a>. Then of course there&#8217;s <a href="http://banshee-project.org/">Banshee</a>, which is blosoming into an excellent media player. And also there <a href="http://f-spot.org/Get_Involved">F-Spot</a> for photo management. I could go on, but the point is here that there are a lot of really great applications for <a href="http://gnome.org/" target="_blank">GNOME</a> that happen to be built on <a href="mono-project.org/">Mono</a>.</p>
<p>Overall, I find that the post is weak on sound technical and legal arguments and high as a kite on FUD. Where&#8217;s the meat? Specifically, what can Microsoft go after that&#8217;s not <a href="http://gnome.org/" target="_blank">GNOME</a> if people start rewriting <a href="mono-project.org/">Mono</a> applications in C++? Jo Shields has a lengthy, but excellent, post called <a href="http://www2.apebox.org/wordpress/rants/124/">Why Mono Doesn&#8217;t Suck</a>. Jo&#8217;s post makes a lot of really good points about <a href="mono-project.org/">Mono</a> if you don&#8217;t have a short attention span.</p>
<p>In the end, i think that a <a href="mono-project.org/">Mono</a> is ultimately a good thing for Linux on the desktop. Anything that gives developers better productivity, and choice is a good. Part of being free is being able to make a choice: we should be <strong>free</strong> to choose whether or not we actually want to use applications developed with <a href="mono-project.org/">Mono</a>.</p>
<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.damnhandy.com%2F2009%2F06%2F28%2Fwhy-free-software-shouldnt-depend-on-richard-m-stallmans-advice%2F&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px;margin-top:5px;"></iframe><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Damnhandy?a=syi17NID5nE:p6B8q_gnyB0:mIC1leqXSog"><img src="http://feeds.feedburner.com/~ff/Damnhandy?i=syi17NID5nE:p6B8q_gnyB0:mIC1leqXSog" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Damnhandy?a=syi17NID5nE:p6B8q_gnyB0:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Damnhandy?i=syi17NID5nE:p6B8q_gnyB0:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Damnhandy?a=syi17NID5nE:p6B8q_gnyB0:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Damnhandy?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Damnhandy?a=syi17NID5nE:p6B8q_gnyB0:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Damnhandy?i=syi17NID5nE:p6B8q_gnyB0:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Damnhandy?a=syi17NID5nE:p6B8q_gnyB0:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/Damnhandy?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Damnhandy?a=syi17NID5nE:p6B8q_gnyB0:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Damnhandy?i=syi17NID5nE:p6B8q_gnyB0:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Damnhandy?a=syi17NID5nE:p6B8q_gnyB0:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Damnhandy?i=syi17NID5nE:p6B8q_gnyB0:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Damnhandy?a=syi17NID5nE:p6B8q_gnyB0:l6gmwiTKsz0"><img src="http://feeds.feedburner.com/~ff/Damnhandy?d=l6gmwiTKsz0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Damnhandy?a=syi17NID5nE:p6B8q_gnyB0:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Damnhandy?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Damnhandy/~4/syi17NID5nE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.damnhandy.com/2009/06/28/why-free-software-shouldnt-depend-on-richard-m-stallmans-advice/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		<feedburner:origLink>http://www.damnhandy.com/2009/06/28/why-free-software-shouldnt-depend-on-richard-m-stallmans-advice/</feedburner:origLink></item>
		<item>
		<title>MAPI Support in Evolution is Far From Stable</title>
		<link>http://feedproxy.google.com/~r/Damnhandy/~3/lvvZ5rA3AlA/</link>
		<comments>http://www.damnhandy.com/2009/06/14/mapi-support-in-evolution-is-far-from-stabl/#comments</comments>
		<pubDate>Sun, 14 Jun 2009 15:09:33 +0000</pubDate>
		<dc:creator><span property="dc:creator" resource="http://www.damnhandy.com/2009/06/14/mapi-support-in-evolution-is-far-from-stabl/">Ryan</span></dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.damnhandy.com/?p=242</guid>
		<description>For the past two weeks, I&amp;#8217;ve been enjoying 64-bit Ubuntu 9.04 on my HP 8530w. It&amp;#8217;s very fast, and ext4 is helps considerably with boot times. Overall, I find this release to be pretty good. But, there&amp;#8217;s one item that irks me to no end and that is the much touted &amp;#8220;MAPI&amp;#8221; support for Evolution.
For starters, [...]</description>
			<content:encoded><![CDATA[<p>For the past two weeks, I&#8217;ve been enjoying 64-bit <a href="http://www.ubuntu.com/" target="_blank">Ubuntu 9.04</a> on my <a href="http://h10010.www1.hp.com/wwpc/us/en/sm/WF05a/321957-321957-64295-3740645-3955549-3781677.html" target="_blank">HP 8530w</a>. It&#8217;s very fast, and <a href="http://en.wikipedia.org/wiki/Ext4" target="_blank">ext4</a> is helps considerably with boot times. Overall, I find this release to be pretty good. But, there&#8217;s one item that irks me to no end and that is the much touted &#8220;MAPI&#8221; support for <a href="http://projects.gnome.org/evolution/" target="_blank">Evolution</a>.</p>
<p>For starters, the <a href="http://msdn.microsoft.com/en-us/library/cc765775.aspx" target="_blank">MAPI support </a>is not installed by default, but it&#8217;s a post-install add-on. No big deal really, but it is misleading to say that it&#8217;s included in the release when it&#8217;s actually just in the repos. Next up is that fact that it simply doesn&#8217;t work. In fact, the <a href="http://www.go-evolution.org/MAPIProvider" target="_blank">Evolution-MAPI plugin</a> is <a href="http://www.3am.pair.com/beta.html" target="_blank">alpha quality</a> at best. For starters, just setting up an account is busted. Each time I&#8217;d go to authenticate, <a href="http://projects.gnome.org/evolution/" target="_blank">Evolution</a> would simply crash. Then <a href="http://ken.ipl31.net/?p=212" target="_blank">I found this post</a> which suggested using the IP address instead of the host name, which actaully worked.</p>
<p>When <a href="http://projects.gnome.org/evolution/" target="_blank">Evolution</a> connects to the Exchange server, the initial load is PAINFULLY slow. The other thing is that folder structure is weird as well. In my case, my inbox was buried under 4 other sub-folders. The good news is that I can see email, with caveats. For example, replies or forwards are not prefixed with &#8220;re:&#8221; or &#8220;fw:&#8221;, even if they were in Outlook. Second, any meeting request acceptance or decline doesn&#8217;t get prefixed with &#8220;accepted:&#8221; or &#8220;decline:&#8221;, you just see the subject of the original meeting request. Which brings me to calendar and contacts. While I can see my calendars, they don&#8217;t get translated into my local time zone. This is kind of a problem. Contacts kinda work. I can see some of them, but for the most part, <a href="http://projects.gnome.org/evolution/" target="_blank">Evolution</a> crashes before I can successfully select a contact.</p>
<p>Yeah, I know I should probably file some bugs. But be advised that if you&#8217;re upgrading to 9.04 to gain Exchange 2007 support, this isn&#8217;t the release you want. Here&#8217;s to hoping that things improve significantly in <a href="http://www.ubuntu.com/testing/karmic/alpha1" target="_blank">Karmic Koala</a>.</p>
<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.damnhandy.com%2F2009%2F06%2F14%2Fmapi-support-in-evolution-is-far-from-stabl%2F&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px;margin-top:5px;"></iframe><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Damnhandy?a=lvvZ5rA3AlA:PmnwiIZ1po4:mIC1leqXSog"><img src="http://feeds.feedburner.com/~ff/Damnhandy?i=lvvZ5rA3AlA:PmnwiIZ1po4:mIC1leqXSog" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Damnhandy?a=lvvZ5rA3AlA:PmnwiIZ1po4:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Damnhandy?i=lvvZ5rA3AlA:PmnwiIZ1po4:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Damnhandy?a=lvvZ5rA3AlA:PmnwiIZ1po4:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Damnhandy?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Damnhandy?a=lvvZ5rA3AlA:PmnwiIZ1po4:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Damnhandy?i=lvvZ5rA3AlA:PmnwiIZ1po4:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Damnhandy?a=lvvZ5rA3AlA:PmnwiIZ1po4:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/Damnhandy?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Damnhandy?a=lvvZ5rA3AlA:PmnwiIZ1po4:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Damnhandy?i=lvvZ5rA3AlA:PmnwiIZ1po4:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Damnhandy?a=lvvZ5rA3AlA:PmnwiIZ1po4:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Damnhandy?i=lvvZ5rA3AlA:PmnwiIZ1po4:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Damnhandy?a=lvvZ5rA3AlA:PmnwiIZ1po4:l6gmwiTKsz0"><img src="http://feeds.feedburner.com/~ff/Damnhandy?d=l6gmwiTKsz0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Damnhandy?a=lvvZ5rA3AlA:PmnwiIZ1po4:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Damnhandy?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Damnhandy/~4/lvvZ5rA3AlA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.damnhandy.com/2009/06/14/mapi-support-in-evolution-is-far-from-stabl/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.damnhandy.com/2009/06/14/mapi-support-in-evolution-is-far-from-stabl/</feedburner:origLink></item>
		<item>
		<title>Eclipse 3.5RC3 Gives New Life to SWT on OS X</title>
		<link>http://feedproxy.google.com/~r/Damnhandy/~3/QAlrdoDW_I0/</link>
		<comments>http://www.damnhandy.com/2009/06/12/eclipse-3-5rc3-gives-new-life-to-swt-on-os-x/#comments</comments>
		<pubDate>Fri, 12 Jun 2009 11:41:42 +0000</pubDate>
		<dc:creator><span property="dc:creator" resource="http://www.damnhandy.com/2009/06/12/eclipse-3-5rc3-gives-new-life-to-swt-on-os-x/">Ryan</span></dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[SWT]]></category>

		<guid isPermaLink="false">http://www.damnhandy.com/?p=240</guid>
		<description>I&amp;#8217;ve been a long time user of Eclipse, but also a critic of SWT &amp;#8211; the UI toolkit that Eclipse uses. While Eclipse has always been a very productive tool on OS X, SWT has always lagged a bit behind other platforms. But the great thing about Eclipse 3.5, and SWT in general, is that [...]</description>
			<content:encoded><![CDATA[<p>I&#8217;ve been a long time user of Eclipse, but also a <a href="http://www.damnhandy.com/2008/11/29/eclipse-on-mac-java-6-reveals-more-swt-shortcomings/" target="_self">critic of SWT</a> &#8211; the UI toolkit that Eclipse uses. While Eclipse has always been a very productive tool on OS X, SWT has always lagged a bit behind other platforms. But the great thing about Eclipse 3.5, and SWT in general, is that it is now using Cocoa instead of Carbon. Additionally, the SWT guys have paid attention to a lot of little details, such as sheets and Mac-looking drag and drop indicators to name a few. There&#8217;s a lot that&#8217;s gone into this SWT release that makes me rethink<a href="http://www.damnhandy.com/2006/02/12/why-bother-with-swt-over-swing/"> my position on Swing</a>.</p>
<p>One other thing to point out is that the <a href="http://www.eclipse.org/downloads/packages/eclipse-classic-350-rc3/galileorc3" target="_blank">Eclipse 3.5 release candidates </a>are friggin&#8217; snappy as hell. Startup times on all three platforms are very good and responsiveness is simply better overall. This is a release I&#8217;m really looking forward to.</p>
<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.damnhandy.com%2F2009%2F06%2F12%2Feclipse-3-5rc3-gives-new-life-to-swt-on-os-x%2F&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px;margin-top:5px;"></iframe><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Damnhandy?a=QAlrdoDW_I0:eESfkJVBIqA:mIC1leqXSog"><img src="http://feeds.feedburner.com/~ff/Damnhandy?i=QAlrdoDW_I0:eESfkJVBIqA:mIC1leqXSog" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Damnhandy?a=QAlrdoDW_I0:eESfkJVBIqA:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Damnhandy?i=QAlrdoDW_I0:eESfkJVBIqA:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Damnhandy?a=QAlrdoDW_I0:eESfkJVBIqA:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Damnhandy?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Damnhandy?a=QAlrdoDW_I0:eESfkJVBIqA:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Damnhandy?i=QAlrdoDW_I0:eESfkJVBIqA:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Damnhandy?a=QAlrdoDW_I0:eESfkJVBIqA:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/Damnhandy?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Damnhandy?a=QAlrdoDW_I0:eESfkJVBIqA:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Damnhandy?i=QAlrdoDW_I0:eESfkJVBIqA:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Damnhandy?a=QAlrdoDW_I0:eESfkJVBIqA:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Damnhandy?i=QAlrdoDW_I0:eESfkJVBIqA:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Damnhandy?a=QAlrdoDW_I0:eESfkJVBIqA:l6gmwiTKsz0"><img src="http://feeds.feedburner.com/~ff/Damnhandy?d=l6gmwiTKsz0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Damnhandy?a=QAlrdoDW_I0:eESfkJVBIqA:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Damnhandy?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Damnhandy/~4/QAlrdoDW_I0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.damnhandy.com/2009/06/12/eclipse-3-5rc3-gives-new-life-to-swt-on-os-x/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://www.damnhandy.com/2009/06/12/eclipse-3-5rc3-gives-new-life-to-swt-on-os-x/</feedburner:origLink></item>
		<item>
		<title>NBC Cancels Life, Shoots self in foot</title>
		<link>http://feedproxy.google.com/~r/Damnhandy/~3/dKhln4dlcqM/</link>
		<comments>http://www.damnhandy.com/2009/05/04/nbc-cancells-life-shoots-self-in-foot/#comments</comments>
		<pubDate>Tue, 05 May 2009 01:38:54 +0000</pubDate>
		<dc:creator><span property="dc:creator" resource="http://www.damnhandy.com/2009/05/04/nbc-cancells-life-shoots-self-in-foot/">Ryan</span></dc:creator>
				<category><![CDATA[T.V.]]></category>

		<guid isPermaLink="false">http://www.damnhandy.com/?p=232</guid>
		<description>Well, it&amp;#8217;s official: Life has been canceled. This was such a great show, but now gone. Considering that NBC put this great show on at a time when two ratings juggernauts (Lost and American Idol) are already dominating Wednesday night, it&amp;#8217;s no wonder Life did lousy ratings-wise. Yep, I watched Lost on Wednesdays, but religiously [...]</description>
			<content:encoded><![CDATA[<p>Well, it&#8217;s official: <a href="http://www.boston.com/ae/tv/blog/2009/05/39life39_is_ove.html" target="_blank">Life has been canceled</a>. This was such a great show, but now gone. Considering that NBC put <a href="http://www.nbc.com/Life/" target="_blank">this great show</a> on at a time when two ratings juggernauts (Lost and American Idol) are already dominating Wednesday night, it&#8217;s no wonder <a href="http://www.nbc.com/Life/" target="_blank">Life</a> did lousy ratings-wise. Yep, I watched Lost on Wednesdays, but religiously DVR&#8217;d <a href="http://www.nbc.com/Life/" target="_blank">Life</a>. But whatever.</p>
<p>Well, there&#8217;s not much else worth watching on NBC nowadays other than <a href="http://www.nbc.com/30_Rock/" target="_blank">30 Roc</a>k and <a href="http://www.nbc.com/southland/" target="_blank">Southland</a>. I&#8217;d throw <a href="http://www.nbc.com/Heroes/" target="_blank">Heroes</a> in there too, but <a href="http://www.nbc.com/Heroes/" target="_blank">Heroes</a> is a mere shadow of its former self. You&#8217;re dropping the ball NBC.</p>
<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.damnhandy.com%2F2009%2F05%2F04%2Fnbc-cancells-life-shoots-self-in-foot%2F&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px;margin-top:5px;"></iframe><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Damnhandy?a=dKhln4dlcqM:TFUfoXD5ya8:mIC1leqXSog"><img src="http://feeds.feedburner.com/~ff/Damnhandy?i=dKhln4dlcqM:TFUfoXD5ya8:mIC1leqXSog" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Damnhandy?a=dKhln4dlcqM:TFUfoXD5ya8:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Damnhandy?i=dKhln4dlcqM:TFUfoXD5ya8:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Damnhandy?a=dKhln4dlcqM:TFUfoXD5ya8:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Damnhandy?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Damnhandy?a=dKhln4dlcqM:TFUfoXD5ya8:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Damnhandy?i=dKhln4dlcqM:TFUfoXD5ya8:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Damnhandy?a=dKhln4dlcqM:TFUfoXD5ya8:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/Damnhandy?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Damnhandy?a=dKhln4dlcqM:TFUfoXD5ya8:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Damnhandy?i=dKhln4dlcqM:TFUfoXD5ya8:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Damnhandy?a=dKhln4dlcqM:TFUfoXD5ya8:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Damnhandy?i=dKhln4dlcqM:TFUfoXD5ya8:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Damnhandy?a=dKhln4dlcqM:TFUfoXD5ya8:l6gmwiTKsz0"><img src="http://feeds.feedburner.com/~ff/Damnhandy?d=l6gmwiTKsz0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Damnhandy?a=dKhln4dlcqM:TFUfoXD5ya8:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Damnhandy?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Damnhandy/~4/dKhln4dlcqM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.damnhandy.com/2009/05/04/nbc-cancells-life-shoots-self-in-foot/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.damnhandy.com/2009/05/04/nbc-cancells-life-shoots-self-in-foot/</feedburner:origLink></item>
	</channel>
</rss>
