<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>gnapse.com &#187; Internet</title>
	<atom:link href="http://gnapse.com/blog/category/internet/feed/" rel="self" type="application/rss+xml" />
	<link>http://gnapse.com/blog</link>
	<description>whatever comes to my mind</description>
	<lastBuildDate>Wed, 28 Jul 2010 18:50:37 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Five Chrome extensions that can make your life easier</title>
		<link>http://gnapse.com/blog/2010/07/16/five-chrome-extensions/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=five-chrome-extensions</link>
		<comments>http://gnapse.com/blog/2010/07/16/five-chrome-extensions/#comments</comments>
		<pubDate>Fri, 16 Jul 2010 14:36:56 +0000</pubDate>
		<dc:creator>ernesto</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[browser]]></category>
		<category><![CDATA[extensions]]></category>
		<category><![CDATA[google chrome]]></category>
		<category><![CDATA[safari]]></category>

		<guid isPermaLink="false">http://gnapse.com/blog/?p=140</guid>
		<description><![CDATA[Google Chrome is a great browser, and with extensions it gets even better. Here are five extensions I love, and that might be helpful for others too. Readability Redux This one takes an article or blog post page and presents it in a reading-friendly format, leaving out all the clutter (sidebars, navigation menus, etc.) and [...]]]></description>
			<content:encoded><![CDATA[<p>Google Chrome is a great browser, and with extensions it gets even better. Here are five extensions I love, and that might be helpful for others too.</p>
<h2>Readability Redux</h2>
<p>This one takes an article or blog post page and presents it in a reading-friendly format, leaving out all the clutter (sidebars, navigation menus, etc.) and also with a customized font and text styling that makes it more suitable for reading and printing.</p>
<div id="attachment_143" class="wp-caption aligncenter" style="width: 310px"><a href="http://gnapse.com/blog/wp-content/uploads/2010/07/chrome-readability-redux.png"><img class="size-medium wp-image-143" title="A blog post shown in readability mode" src="http://gnapse.com/blog/wp-content/uploads/2010/07/chrome-readability-redux-300x199.png" alt="" width="300" height="199" /></a><p class="wp-caption-text">A blog post shown in readability mode</p></div>
<p>I was envy when Safari 5 went out with this as a <a title="Safari Reader" href="http://www.apple.com/safari/whats-new.html#reader" target="_blank">core feature</a>, so much that I actually considered switching now that Safari has got extensions too. I detest to read articles and blog posts with all the clutter of the page. Particularly when you intend to print the article for further reading, not always web sites provide a good printed alternative, if they provide one at all.<span id="more-140"></span></p>
<p><a href="https://chrome.google.com/extensions/detail/jggheggpdocamneaacmfoipeehedigia" target="_blank">Get Readability Redux</a></p>
<h2>Proxy Switchy!</h2>
<p>This one I couldn’t live without. It’s pretty much the equivalent of FoxyProxy on Firefox, if you ever used that. It allows you to define several proxy configurations for you to switch to, and you can also create rules so that different specific web-sites that you define are automatically routed through certain proxies all the time, without you having to remember switching. For an active <a href="http://www.torproject.org/" target="_blank">Tor</a> user like me, this one is very handy.</p>
<p><a href="https://chrome.google.com/extensions/detail/caehdcpeofiiigpdhbabniblemipncjj" target="_blank">Get Proxy Switchy</a></p>
<h2>Twitter share this page</h2>
<p><a href="http://www.atebits.com/tweetie-mac/" target="_blank">Tweetie for Mac</a> is great. It helps you keep informed of tweets from those you follow, and you can tweet yourself as well. But when you’re on Chrome reading a web page that you feel you ought to share with the world, it’s simpler to use this extension instead. Otherwise you would need to manually copy and paste the URL and then type your message.</p>
<p>With ‘Twitter share this page’ you just press a twitter icon on the right side of the address bar and voilá! Chrome opens Twitter in another tab with your message ready to be sent, or to be customized first if you wish. It automatically uses the web page title as a message along with the URL already shortened if needed.</p>
<p><a href="https://chrome.google.com/extensions/detail/ppilhaolhbpfembaoedfdbkegfedfgip" target="_blank">Get Twitter share this page</a></p>
<h2>XML Tree</h2>
<p>Ever tried to load a XML document in Chrome? It simply shows the text without all the node tags and structure of the XML. This extension fixes this odd behavior, showing the XML tree structure. It says it allows you to collapse and expand nodes, but that doesn&#8217;t work for me, perhaps because I am using Chrome 6 from the Dev channel.</p>
<div id="attachment_144" class="wp-caption aligncenter" style="width: 310px"><a href="http://gnapse.com/blog/wp-content/uploads/2010/07/chrome-xml-tree.png"><img class="size-medium wp-image-144" title="An XML Document being shown as a structured tree of nodes" src="http://gnapse.com/blog/wp-content/uploads/2010/07/chrome-xml-tree-300x230.png" alt="" width="300" height="230" /></a><p class="wp-caption-text">An XML Document being shown as a structured tree of nodes</p></div>
<p>For a developer like myself this one is a must. I always wondered why this was not a core feature of the browser itself, like it is in Firefox. Even for uneducated users who know nothing about XML, the structured presentation will almost always be more friendly and comprehensible than the default soup of text.</p>
<p><a href="https://chrome.google.com/extensions/detail/gbammbheopgpmaagmckhpjbfgdfkpadb" target="_blank">Get XML Tree</a></p>
<h2>Docs PDF/PowerPoint Viewer</h2>
<p>I have a couple of other extensions from Google itself, but this one is the most useful. Every time you click a PDF, Word or PowerPoint document on the web, it’ll show a preview using Google Docs’ interface, from which you’ll be able to download the document if you wish.</p>
<div id="attachment_147" class="wp-caption aligncenter" style="width: 310px"><a href="http://gnapse.com/blog/wp-content/uploads/2010/07/chrome-pdf-viewer.png"><img class="size-medium wp-image-147" title="An online PDF file being shown in the Google Docs viewer" src="http://gnapse.com/blog/wp-content/uploads/2010/07/chrome-pdf-viewer-300x192.png" alt="" width="300" height="192" /></a><p class="wp-caption-text">An online PDF file being shown in the Google Docs viewer</p></div>
<p>Before this, my downloads folder was always full of lots of documents that I once opened just to take a short look and discard. Now I can have a glimpse of what I clicked on, before I decide if I want to keep it.</p>
<p><a href="https://chrome.google.com/extensions/detail/nnbmlagghjjcbdhgmkedmbmedengocbn" target="_blank">Get Docs PDF/PowerPoint Viewer</a></p>
<h1>Other extensions I use</h1>
<p>Besides this featured five extensions above, there are a few more I use occasionally.</p>
<div id="_mcePaste">
<ul>
<li><a href="https://chrome.google.com/extensions/detail/aeoigbhkilbllfomkmmilbfochhlgdmh" target="_blank">ChromeAccess</a> — Quick access to all (relevant) &#8216;about:&#8217; and &#8216;chrome://&#8217; pages.</li>
<li><a href="https://chrome.google.com/extensions/detail/kkmbodalobogbnejmcdghkfimhodifol" target="_blank">Gmail Notifier</a> — Get a desktop notification when you receive a new email.</li>
<li><a href="https://chrome.google.com/extensions/detail/mgijmajocgfcbeboacabfgobmjgjcoja" target="_blank">Google Dictionary</a> — View definitions easily as you browse the web.</li>
<li><a href="https://chrome.google.com/extensions/detail/galfofdpepkcahkfobimileafiobdplb" target="_blank">Tab Menu</a> — Select, close, rearrange, and search your tabs from a toolbar menu.</li>
<li><a href="https://chrome.google.com/extensions/detail/ckibcdccnfeookdmbahgiakhnjcddpki" target="_blank">Webpage Screenshot</a> — Captures a screenshot of a whole page beyond scroll.</li>
<li><a href="https://chrome.google.com/extensions/detail/aafciojnlamllgpkpdkbamkfgbofhgcj" target="_blank">User-Agent Switcher</a> — Spoofs navigator.userAgent and navigator.vendor strings for specific sites.</li>
<li><a href="https://chrome.google.com/extensions/detail/bbcnbpafconjjigibnhbfmmgdbbkcjfi" target="_blank">Session Manager</a> — Save sessions of your opened tabs and windows, and quickly re-open them whenever you like.</li>
</ul>
</div>
<p>Also, take a look at <a href="http://googleblog.blogspot.com/2010/07/use-chrome-like-pro.html" target="_blank">this list of recommended extensions</a>, from Google itself!</p>
<h1>But not everything is perfect&#8230;</h1>
<p class="p1"><span class="s1">I am yet to find a youtube downloader extension that actually works. I’ve tried a few with no success. Currently I have to resort to Safari 5 which just recently got extensions support and there’s <a href="http://code.google.com/p/safari-extensions/downloads/detail?name=YouTubeDownloader.safariextz&amp;can=2&amp;q=" target="_blank">a pretty good one for this purpose</a>. Besides that, there’s nothing left that I need and haven’t found.</span></p>
<p class="p1"><span class="s1"><strong>Have something to share about this? What extensions do you find useful? Is there some feature you need for which there’s no suitable extension yet?</strong></span></p>
]]></content:encoded>
			<wfw:commentRss>http://gnapse.com/blog/2010/07/16/five-chrome-extensions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>What I don&#8217;t like about Safari</title>
		<link>http://gnapse.com/blog/2010/02/01/what-i-dont-like-about-safari/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=what-i-dont-like-about-safari</link>
		<comments>http://gnapse.com/blog/2010/02/01/what-i-dont-like-about-safari/#comments</comments>
		<pubDate>Mon, 01 Feb 2010 15:49:14 +0000</pubDate>
		<dc:creator>ernesto</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[browser]]></category>
		<category><![CDATA[gmail offline]]></category>
		<category><![CDATA[google chrome]]></category>
		<category><![CDATA[google gears]]></category>
		<category><![CDATA[safari]]></category>
		<category><![CDATA[tabbed browsing]]></category>

		<guid isPermaLink="false">http://gnapse.com/blog/?p=113</guid>
		<description><![CDATA[I&#8217;ve tried. I swear that I tried. But I can&#8217;t make Safari my main browser. It&#8217;s the simple things that keep me from liking it. But most of the time simple things can (and do) make the difference. There&#8217;s no way to make it open links by default in new tabs in the background. And [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve tried. I swear that I tried. But I can&#8217;t make Safari my main browser. It&#8217;s the simple things that keep me from liking it. But most of the time simple things can (and do) make the difference.</p>
<p>There&#8217;s no way to make it open links by default in new tabs in the background. And no, I do not want to be doing ⌘-click to achieve this. And I do hate browsers opening new windows unless specifically told. Tabbed browsing was invented long ago and most browsers do it fine (read Opera, Firefox and Chrome). At the very least they give you enough options for you to control how you want it to behave. Safari gives some options, but they&#8217;re not enough. I know this is Apple&#8217;s way of doing things, and most of the time they get it right, but in this case their lack of options and their selection of defaults is not good for me.</p>
<p>And finally, to make things even worse, I cannot see the URL of a link when I hover it. I do not need Safari to have a permanent status bar. It could adopt Google Chrome&#8217;s way to do this, which is to show a small tooltip in the place where the status bar would be, but only for the time I am hovering the link.</p>
<p>Google Chrome would be the right choice, and I do use it a lot, but why on Earth does it lack Gears? How is it that Google supports its plugin on Firefox and Safari but not on their own browser??!! I cannot live without Gmail Offline, so that&#8217;s why I haven&#8217;t been able to dump Firefox completely.</p>
]]></content:encoded>
			<wfw:commentRss>http://gnapse.com/blog/2010/02/01/what-i-dont-like-about-safari/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Chrome for Mac and Linux</title>
		<link>http://gnapse.com/blog/2009/12/09/google-chrome-for-mac-and-linux/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=google-chrome-for-mac-and-linux</link>
		<comments>http://gnapse.com/blog/2009/12/09/google-chrome-for-mac-and-linux/#comments</comments>
		<pubDate>Wed, 09 Dec 2009 23:01:54 +0000</pubDate>
		<dc:creator>ernesto</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[browser]]></category>
		<category><![CDATA[gmail offline]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[google chrome]]></category>
		<category><![CDATA[google gears]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[mac]]></category>

		<guid isPermaLink="false">http://gnapse.com/blog/?p=98</guid>
		<description><![CDATA[I received with great joy today the news that Google&#8217;s web browser, Google Chrome, has been officially released for Mac (and Linux), even if it is still tagged as beta. Since its first appearance in the web browsers scene more than a year ago, Google Chrome has been a source of innovation the area, with [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_99" class="wp-caption alignright" style="width: 310px"><img class="size-medium wp-image-99" title="google-chrome-mac" src="http://gnapse.com/blog/wp-content/uploads/2009/12/google-chrome-mac-300x208.png" alt="Google Chrome running on Leopard" width="300" height="208" /><p class="wp-caption-text">Google Chrome running on Leopard</p></div>
<p>I received with great joy today the news that Google&#8217;s web browser, Google Chrome, <a href="http://chrome.blogspot.com/2009/12/google-chrome-for-holidays-mac-linux.html" target="_blank">has been officially released</a> for <a href="http://googlemac.blogspot.com/2009/12/google-chrome-for-mac-goes-beta.html" target="_blank">Mac</a> (and Linux), even if it is still tagged as beta.</p>
<p>Since <a href="http://googleblog.blogspot.com/2008/09/fresh-take-on-browser.html" target="_blank">its first appearance in the web browsers scene more than a year ago</a>, Google Chrome has been a source of innovation the area, with isolated processes per tabs, a revolutionary javascript engine, and the great news that its source code would be freely available as open source.</p>
<p>Sure that many were worried by its <a href="http://www.google.com/url?sa=t&amp;source=web&amp;ct=res&amp;cd=1&amp;ved=0CAkQFjAA&amp;url=http%3A%2F%2Fcoderrr.wordpress.com%2F2008%2F09%2F03%2Fgoogle-chrome-privacy-worse-than-you-think%2F&amp;ei=3CEgS-DPAo-QtgepnLSmCg&amp;usg=AFQjCNFvWsMCNXX23C9woQ-ci0_jdzeFjQ&amp;sig2=2z4VoH3SAti21jUbwUcExw" target="_blank">controversial privacy-violation practices</a>, but the openness of its source code will always allow anyone with the know-how to modify it to their own needs, and that of the worried ones (me included to some extent, I&#8217;ll give you that). Indeed there&#8217;s a project called <a href="http://www.srware.net/en/software_srware_iron.php" target="_blank">Iron</a> which offers precisely that: Google Chrome for the privacy fanatics.<span id="more-98"></span></p>
<p>But just as about anything that&#8217;s new, Chrome for the Mac and Linux has several shortcomings compared to its Windows version that most people are accustomed to. <a href="http://theappleblog.com/2009/12/08/chrome-for-mac-beta-available-now/" target="_blank">The Apple Blog notes a few of these issues</a>, at least those that affect Mac users, which are probably the same features not present yet in the Linux version as well. The most striking absence, at least for me, is <a title="Google Gears" href="http://gears.google.com/" target="_blank">Gears</a>, of which I have become extremely dependent since <a href="http://gmailblog.blogspot.com/2009/01/new-in-labs-offline-gmail.html" target="_blank">Gmail offline appeared</a>. This one even comes as a great negative surprise, since Chrome is the only browser that comes with Gears bundled, and being both (Gears and Chrome) from the same provider, I kind of assumed that they were inseparable <img src='http://gnapse.com/blog/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' /> </p>
<p>Not everything is bad news though. Google Chrome for both platforms integrates itself very well, or so they say. At least for the Mac I can confirm it. Google Chrome feels more like a Mac app than <a title="Opera Web Browser" href="http://www.opera.com/" target="_blank">Opera</a> does, which is kind of surprising if you take into account that Opera has been around for the Mac since, well, forever, I guess. And according to <a href="http://chrome.blogspot.com/2009/12/google-chrome-for-holidays-mac-linux.html" target="_blank">the official announcement</a> in Google Chrome&#8217;s blog post about this beta release, Chrome seems to blend just well with a variety of GTK themes.</p>
<p>I really hope that this browser and <a title="Chromium" href="http://www.chromium.org/" target="_blank">the open source project behind it</a> continue to improve. This news today is indeed a big step, and I&#8217;m sure those differences in feature sets will become smaller with time. I also hope that projects similar to <a href="http://www.srware.net/en/software_srware_iron.php" target="_blank">the Iron alternative</a> appear for other platforms too. Its open source nature makes it possible for this to come true.</p>
]]></content:encoded>
			<wfw:commentRss>http://gnapse.com/blog/2009/12/09/google-chrome-for-mac-and-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Resting on Rails considered harmful</title>
		<link>http://gnapse.com/blog/2009/08/06/resting-on-rails-considered-harmful/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=resting-on-rails-considered-harmful</link>
		<comments>http://gnapse.com/blog/2009/08/06/resting-on-rails-considered-harmful/#comments</comments>
		<pubDate>Thu, 06 Aug 2009 19:59:14 +0000</pubDate>
		<dc:creator>ernesto</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Web programming]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[best practices]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[rest]]></category>

		<guid isPermaLink="false">http://gnapse.com/blog/?p=57</guid>
		<description><![CDATA[Don&#8217;t worry, you can still take a nap on the train. This post is not about resting while traveling on rails, but about the use of the REST architecture in the Ruby on Rails web development framework. Rails has to be credited for introducing RESTful design to so many people, including me. I bet most [...]]]></description>
			<content:encoded><![CDATA[<p>Don&#8217;t worry, you can still take a nap on the train. This post is not about resting while traveling on rails, but about the use of the <a title="Representational State Transfer" href="http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm" target="_blank">REST</a> architecture in the Ruby on Rails web development framework.</p>
<p>Rails has to be credited for introducing RESTful design to so many people, including me. I bet most web developers out there first knew about it from Rails, particularly from its 2.x release series, that have adopted resource-oriented design more seriously. The main benefit of adopting a REST-like architecture is that there&#8217;s a relatively easy and straightforward way of adding an API to our applications without developing an extra backend.</p>
<p>But Rails didn&#8217;t get it completely right, perhaps intentionally, with the outcome that there are so many people out there thinking they are developing RESTful applications.</p>
<p>To understand why, let&#8217;s review the original concept of REST, something I never did when I took it for granted from the Rails implementation.<span id="more-57"></span></p>
<h3>Defining REST</h3>
<p>REST stands for <em>Representational State Transfer</em>, and it is <em>an architectural style for distributed hypermedia systems</em>. This is the concise and original definition of its intention, according to its creator Roy Fielding in <a title="Roy Fielding's PhD dissertation" href="http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm" target="_blank">the paper that started it all</a>.</p>
<p>But perhaps more digestible and to the point than this paper is <a href="http://www.theamazingrando.com/blog/?p=107" target="_blank">a blog post</a> recently published by Paul Sandauskas in his blog, where he warns developer about not being fully compliant with REST guidelines. The short story is that resources should be hyperlinked to express their relationships, and client applications of a really RESTful <abbr title="Application Programming Interface">API</abbr> should be able to &#8220;navigate&#8221; across the exposed resources without previous knowledge of the <abbr title="Uniform Resource Identifier">URI</abbr> structure, beyond an initial entry point, which could be the analogy of a home page for a regular web site.</p>
<p>I really recommend you reading Paul&#8217;s article, since I won&#8217;t go into the many interesting details. Overall, the advantages are many: clients need to have no knowledge about the structure of the resources in the server&#8217;s URI space beyond the starting point, so the application provider can make structural changes without &#8220;breaking&#8221; the clients.</p>
<p>There&#8217;s plenty of information about REST out there, independent from the Rails point of view. For a start I recommend <a href="http://rest.blueoxen.net/cgi-bin/wiki.pl?FrontPage" target="_blank">the REST wiki</a>, <a href="http://en.wikipedia.org/wiki/Representational_State_Transfer" target="_blank">Wikipedia&#8217;s article</a> about it, <a href="http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm" target="_blank">Roy Fielding&#8217;s dissertation</a> (in particular chapters <a href="http://http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm" target="_blank">5</a> and <a href="http://www.ics.uci.edu/~fielding/pubs/dissertation/evaluation.htm" target="_blank">6</a>) and <a href="http://www.google.com/search?q=Representational+State+Transfer" target="_blank">google</a> of course.</p>
<h3>RESTing on Rails</h3>
<p>Rails tries to comply with REST and it&#8217;s great at it. But not fully compliant. Not that this is a bad thing though, and it&#8217;s even perhaps intentional (I don&#8217;t know). At least the most important REST guidelines are supported, particularly the URI-to-Resource mapping, avoiding a <abbr title="Remote Procedure Call">RPC</abbr> kind of design.</p>
<p>So where does Rails fails? Mainly at not expressing relationships between resources by including hyperlinks in a resource&#8217;s representation (after all, that&#8217;s what <em>hypermedia</em> means). This, seen from an API point of view, where representations are often <abbr title="eXtensible Markup Language">XML</abbr> or <abbr title="JavaScript Object Notation">JSON</abbr> for the consumption of a client application, hinders the ability of the system to survive structural changes in its design and its URI space without rendering all independent clients useless.</p>
<p>For example, imagine a client application connecting to the API exposed by your own application, and requesting information about the products you offer. A reasonable response by a rails application conveys information about the product name, description, price, and the internal auto-generated id.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
</pre></td><td class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;products</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;array&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;product<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;category-id</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;integer&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>3<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/category-id<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;description<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Just a couch, as you would expect.<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/description<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;id</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;integer&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>1<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/id<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Couch<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;price</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;float&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>123.45<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/price<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/product<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;product<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;category-id</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;integer&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>6<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/category-id<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;description<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>For your kid to pretend he's a hero.<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/description<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;id</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;integer&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>2<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/id<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Spiderman T-Shirt<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;price</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;float&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>12.95<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/price<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/product<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/products<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></td></tr></table></div>

<p>The client application retrieves this XML representation of the resource but to request a single product resource from this list, it needs the URI identifying such resource. But what URI identifies each independent product resource? The client needs to know how the URI structure of our site works, and needs to construct URI&#8217;s based on this and the id of the desired product.</p>
<p>But what if we decide to restructure our web site in the future, and resources are no longer referenced the same way? All independent client applications are suddenly broken, or else we are stuck with our initial design choices so we don&#8217;t piss off our clients (who wants that after all?).</p>
<p>Why don&#8217;t we &#8220;navigate&#8221; through the resources exposed by our API instead? This implies conveying also hyper-textual information. After all, that&#8217;s what we do when we as human users enter an e-commerce web site (or any other web site). The <abbr title="HyperText Markup Language">HTML</abbr> web pages are the resources we consume, and the browser is the library we use to connect to the internet. We don&#8217;t know in advance, from a page with a list of products, what the URI&#8217;s are for each independent product. That information comes with the page. If the developers decide to change the URI structure of the web site in the future, we can still navigate across the site when we visit it again, provided the initial entry page (the home page) is the same.</p>
<p>So REST is nothing more than just applying foundational web principles to modern web-based programming interfaces.</p>
<h3>Does it really matter? Why bother?</h3>
<p>It doesn&#8217;t really matter, if you are just using your Rails application in a closed environment, that is, if not even you consume the API but just the regular HTML interface, or if you are the only consumer of the API of your own application.</p>
<p>But what if your application is cool and useful enough so that third party vendors start using it to integrate their systems with yours? Isn&#8217;t that good? And what if you decide to re-engineer your site in the future and all those non-human API-consumer clients start broking? You&#8217;ll either have to&#8230;</p>
<ul>
<li>&#8230;continue supporting the old and the new interfaces at the same time (more work for you),</li>
<li>&#8230;or convince your clients to re-program their interfaces with your application (more work for them),</li>
<li>&#8230;or just let them go for a better provider (you loose).</li>
</ul>
<p>Of course, you can always drop those pesky plans of re-engineering, but then you are stuck with your initial design choices, as far as they concern the external interface. Why condemn yourself with something that seems good today but might be holding you back in the future?</p>
<p>For Rails applications developers like me, there&#8217;s not much of a choice, but I wonder why Rails decided to auto-denominate themselves RESTful when they aren&#8217;t really, in the most strict sense of the word.</p>
<p>Pedantry? Perhaps.</p>
]]></content:encoded>
			<wfw:commentRss>http://gnapse.com/blog/2009/08/06/resting-on-rails-considered-harmful/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>The last question</title>
		<link>http://gnapse.com/blog/2009/07/03/the-last-question/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=the-last-question</link>
		<comments>http://gnapse.com/blog/2009/07/03/the-last-question/#comments</comments>
		<pubDate>Fri, 03 Jul 2009 21:26:26 +0000</pubDate>
		<dc:creator>ernesto</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[artificial intelligence]]></category>
		<category><![CDATA[search engine]]></category>
		<category><![CDATA[wolfram alpha]]></category>

		<guid isPermaLink="false">http://gnapse.com/blog/?p=38</guid>
		<description><![CDATA[Wolfram Research has released a few weeks ago what could be the first instance of a computational knowledge engine, Wolfram Alpha. By a computational knowledge engine I mean a computing system in which we provide questions in natural language and receive meaningful and correct answers derived from internal knowledge and immense data-banks. According to the [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_39" class="wp-caption alignright" style="width: 310px"><a><img class="size-medium wp-image-39" title="wolfram-alpha" src="http://gnapse.com/blog/wp-content/uploads/2009/07/wolfram-alpha-300x201.png" alt="Wolfram Alpha homepage" width="300" height="201" /></a><p class="wp-caption-text">Wolfram Alpha homepage</p></div>
<p><a href="http://www.wolfram.com/" target="_blank">Wolfram Research</a> has released a few weeks ago what could be the first instance of a computational knowledge engine, <a href="http://www.wolframalpha.com/" target="_blank">Wolfram Alpha</a>. By a computational knowledge engine I mean a computing system in which we provide questions in natural language and receive meaningful and correct answers derived from internal knowledge and immense data-banks.</p>
<p>According to the project&#8217;s <a href="http://www.wolframalpha.com/about.html" target="_blank">about page</a></p>
<blockquote><p>Wolfram|Alpha&#8217;s long-term goal is to make all systematic knowledge immediately computable and accessible to everyone. We aim to collect and curate all objective data; implement every known model, method, and algorithm; and make it possible to compute whatever can be computed about anything. Our goal is to build on the achievements of science and other systematizations of knowledge to provide a single source that can be relied on by everyone for <strong>definitive answers to factual queries</strong>.</p></blockquote>
<p>As you can see, this is a work in progress. The system still has shortcomings, but it can already interpret and answer correctly <a href="http://www.wolframalpha.com/gallery.html" target="_blank">many questions</a> from <a href="http://www.wolframalpha.com/examples/" target="_blank">a very diverse range of topics</a>, that are not only limited to exact sciences.<span id="more-38"></span></p>
<p>Here are some examples of funny or insightful questions that amused me for a while&#8230;</p>
<ul>
<li><a href="http://www.wolframalpha.com/input/?i=what+is+wolfram+alpha%3F" target="_blank">What is Wolfram Alpha?</a>, <a href="http://www.wolframalpha.com/input/?i=what+is+your+name%3F" target="_blank">What is your name?</a> or <a href="http://www.wolframalpha.com/input/?i=who+are+you%3F" target="_blank">Who are you?</a></li>
<li><a href="http://www.wolframalpha.com/input/?i=where+are+you%3F" target="_blank">Where are you?</a> and <a href="http://www.wolframalpha.com/input/?i=where+am+i%3F" target="_blank">Where am I?</a></li>
<li><a href="http://www.wolframalpha.com/input/?i=what+is+my+name%3F" target="_blank">What is my name?</a> and <a href="http://www.wolframalpha.com/input/?i=my+name+is+Ernesto" target="_blank">My name is Ernesto</a></li>
<li><a href="http://www.wolframalpha.com/input/?i=what%27s+the+second+largest+country+in+the+world%3F" target="_blank">What&#8217;s the second largest country in the world?</a></li>
<li><a href="http://www.wolframalpha.com/input/?i=milk+and+apple+juice" target="_blank">Milk and apple juice</a> or <a href="http://www.wolframalpha.com/input/?i=milk+vs+apple+juice" target="_blank">Milk vs apple juice</a></li>
</ul>
<p>And before I finish, just as a curiosity, I asked Wolfram Alpha <a href="http://en.wikipedia.org/wiki/The_Last_Question" target="_blank">the last question</a> a few minutes ago&#8230;</p>
<blockquote><p><a title="The last question" href="http://www.wolframalpha.com/input/?i=How+can+the+net+amount+of+entropy+of+the+universe+be+massively+decreased%3F" target="_blank">How can the net amount of entropy of the universe be massively decreased?</a></p></blockquote>
<p>Unfortunately, there&#8217;s still insufficient data for a meaningful answer. The people behind this project have still a lot of work to do.</p>
<p>Kudos for all your great work and for this fine product!</p>
]]></content:encoded>
			<wfw:commentRss>http://gnapse.com/blog/2009/07/03/the-last-question/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Opera Unite: more questions than answers</title>
		<link>http://gnapse.com/blog/2009/06/17/opera-unite-more-questions-than-answers/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=opera-unite-more-questions-than-answers</link>
		<comments>http://gnapse.com/blog/2009/06/17/opera-unite-more-questions-than-answers/#comments</comments>
		<pubDate>Wed, 17 Jun 2009 15:36:23 +0000</pubDate>
		<dc:creator>ernesto</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[browser]]></category>
		<category><![CDATA[opera]]></category>

		<guid isPermaLink="false">http://gnapse.com/blog/?p=10</guid>
		<description><![CDATA[After having started this blog just a few days ago, one of my favorite browsers has been released in a new beta version with a cool new feature called Opera Unite. They call it &#8220;reinventing the web&#8221;, or &#8220;the Internet&#8217;s unfulfilled promise&#8221;. It&#8217;s a platform for providing services to the web from your web browser, [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_12" class="wp-caption alignright" style="width: 310px"><img class="size-medium wp-image-12" title="opera-unite-homepage" src="http://gnapse.com/blog/wp-content/uploads/2009/06/opera-unite-homepage-300x217.png" alt="Opera Unite Homepage" width="300" height="217" /><p class="wp-caption-text">Opera Unite Homepage</p></div>
<p>After having started this blog just a few days ago, <a href="http://www.opera.com/browser/" target="_blank">one of my favorite browsers</a> has been released in a new beta version with a cool new feature called <a href="http://unite.opera.com/" target="_blank">Opera Unite</a>.</p>
<p>They call it <em>&#8220;reinventing the web&#8221;</em>, or <em>&#8220;the Internet&#8217;s unfulfilled promise&#8221;</em>. It&#8217;s a platform for providing services to the web from your web browser, rather than just being a mere user of web services. People can share files, pictures, streaming media and web pages, without the technical skills needed to setup a web server or having a domain to host their services.</p>
<p><span id="more-10"></span>The number of applications hosted on this new platform is potentially limitless. Third-party vendors can provide their own to take advantage of this technology, and give users new ways to interact between them directly. Currently there are only <a href="http://unite.opera.com/services/" target="_blank">a handful of services</a>, all created by Opera as the more trivial and straightforward examples of what can be done.</p>
<p>One important feature of this technology, is that users need to use the Opera browser only if they want to host or provide some service. Friends and relatives that you inform or invite to use your services can be using any modern web browser. They&#8217;re not bound to use Opera to access services hosted by other people. I have to say that I initially thought this to be a peer to peer platform a-la bittorrent, where both ends (server and client) had to be operating with applications aware of the sharing platform.</p>
<p>To be able to host services you need to have a user account at <a href="http://my.opera.com/" target="_blank">opera.com</a>. You can have your account active from several computers (home, office, notebook) at the same time, each of which should be given a unique name. So one of the primary uses could be for our own consumption: to have services hosted in the office computer (e.g. file sharing) and be able to download files from home at night.</p>
<div id="attachment_11" class="wp-caption alignright" style="width: 310px"><img class="size-medium wp-image-11" title="opera-unite" src="http://gnapse.com/blog/wp-content/uploads/2009/06/opera-unite-300x217.png" alt="Opera Unite hosting the fridge service" width="300" height="217" /><p class="wp-caption-text">Opera Unite hosting the fridge service</p></div>
<p>However, I have mixed feelings about all this. On the one hand, the idea of decentralizing the web, of allowing people to interact without having to depend on a third party, of allowing our own personal computers to be first-class citizens of the web, sounds like a good one. Centralization is almost always a bad thing, and the web today is fundamentally centralized.</p>
<p>But on the other hand I don&#8217;t like the Opera browser to be bloated with this or other applications. I like it to be a web browser, and a web browser only. The only other thing they baked into it until now is the email client, and I (and many other people) have always thought they should give the option of downloading the browser without it bundled. But now they&#8217;re including yet another application in the package, effectively bloating it even more.</p>
<p>I think Opera Unite should be a separate application, a separate product. Otherwise, I believe it will affect corporate adoption of the browser, in spite of being the most innovative one out there. And what Opera needs right now is to expand the user base of its browser. I doubt that Opera Unite can bring that.</p>
<p>And there are the understandable security and privacy concerns too&#8230;</p>
<p>In terms of security, we could ask how insecure my computer turns when I enable these services? How much depends on the platform, and how much depends on the developer of a particular service? What does the platform do to protect users who are not security gurus, but want to take advantage of what it offers in a secure way?</p>
<p>And from the privacy point of view, what role do Opera servers play in this peer-to-peer connections? Do files pass through Opera servers while being downloaded by me from my buddy&#8217;s file sharing service? These are questions I have not devoted yet the time to answer. Let&#8217;s remember that they claim that client users can browse other user&#8217;s unite-hosted services with any modern web browser. I do not know how could they achieve that without using their own servers as a bridge for content to pass on. If both ends of the <abbr title="Peer to Peer">P2P</abbr> connection are Unite-enabled Opera browsers, I understand, but otherwise, I don&#8217;t. Is this really <abbr title="Peer to Peer">P2P</abbr>?</p>
<p>Also, if this actually depends on a central server after all (as I suspect), then the following question comes to my mind: is this predestined to depend solely on Opera&#8217;s infrastructure, or can it become an open standard, so that other providers can host their own Unite services platforms? Can third-party browser vendors enable their browsers to host services too? It would nice to be able to host a Unite service provider on our own servers, or to create independent applications to provide services. But this conflicts with the supposed intention of using Unite as a hook to gain more users for the Opera browser.</p>
<p>I am sure these and many other questions, particularly security-related questions, are probably being made by many people out there. And I haven&#8217;t even mentioned concerns about file and media sharing and the consequences it has in relation to intellectual property rights violations.</p>
<p>Anyway, it is undoubtedly a very controversial and bold move. Only the future will tell if it was a good one.</p>
]]></content:encoded>
			<wfw:commentRss>http://gnapse.com/blog/2009/06/17/opera-unite-more-questions-than-answers/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
