<?xml version="1.0" encoding="UTF-8"?>
<feed xml:lang="en-US" xmlns="http://www.w3.org/2005/Atom">
  <title>=victor.grey weblog - Home</title>
  <id>tag:tatwd.net,2008:mephisto/</id>
  <generator uri="http://mephistoblog.com" version="0.7.3">Mephisto Noh-Varr</generator>
  <link href="http://tatwd.net/feed/atom.xml" rel="self" type="application/atom+xml"/>
  <link href="http://tatwd.net/" rel="alternate" type="text/html"/>
  <updated>2008-07-20T20:11:42Z</updated>
  <entry xml:base="http://tatwd.net/">
    <author>
      <name>victor</name>
    </author>
    <id>tag:tatwd.net,2008-07-20:14</id>
    <published>2008-07-20T19:58:00Z</published>
    <updated>2008-07-20T20:11:42Z</updated>
    <category term="Identity Technology"/>
    <link href="http://tatwd.net/2008/7/20/single-sign-on-considered-harmful" rel="alternate" type="text/html"/>
    <title>Single Sign-On Considered Harmful</title>
<content type="html">
            &lt;p&gt;In the beginning, OpenID was created as a method for mitigating comment spam on blogs. It requires that you provide to the blog (the RP or Relying Party) a URL to which you can be redirected. At the node to which you are redirected is a process (an OP or OpenID Provider) which is capable of doing a little Diffie-Hellman dance with the RP, or an ordinary web page with an HTML tag delegating to another URL where such an OP resides.&lt;/p&gt;

&lt;p&gt;This is just fine for the purpose of mitigating comment spam, which only requires that some friction be thrown into the commenting process that makes it too slow or effortful enough to not be worth it for the spammers, but relatively easy to set up for the legitimate commentators.&lt;/p&gt;

&lt;p&gt;Where OpenID went off the rails imho, is when the OpenID community starting seeing OpenID as a form of single sign-on (SSO) authentication. First of all, it's not any kind of meaningful authentication. It's trivial to set up an OP that just verifies anyone or anything that applies, and there are a number of such &quot;services&quot; around, but in fact it would be just as trivial to set up an OP that verifies anything that is bounced off it without even any application process. (Since I first wrote these words, I'm informed that there already exists such a wide-open OpenID Provider.)&lt;/p&gt;

&lt;p&gt;Worse, SSO even as practiced by other communities such as I-Names and Liberty Alliance where something like real authentication may be accomplished, has several fatal flaws:&lt;/p&gt;

&lt;p&gt;&lt;ul&gt;&lt;li&gt;Phishing - the end user is allowing themselves to be redirected somewhere and asked to provide their authentication credentials there. This is only safe if the user is sure about where they have been redirected. That surety depends on the user noticing some subtle cues. Phishing mitigators have concentrated on making these cues less subtle. But phishing, like direct mail, is a game of small but predictable percentages, and counts on the fact that some people will be too tired, distracted and/or in a hurry to notice that the cues are wrong. If you are never tired, distracted and/or in a hurry, you're OK.&lt;br /&gt;&amp;nbsp;&lt;/li&gt;
	
	&lt;li&gt;Trust - in a system intended to be global or internet-scale, how do you know which OPs to trust? Current systems leave this as an exercise for the developer, who generally has no idea what to do. Since trusting no one is not that useful, most current implementations &quot;trust&quot; everyone.&lt;br /&gt;&amp;nbsp;&lt;/li&gt;
	
	&lt;li&gt;Logout - an end user has a reasonable expectation that if they log in somewhere, that when they log out again they are, you know, logged out. SSO routes around this assumption because the login takes place at a different site than the logout. Even if the RP is responsible enough to redirect the user back to the original OP after logout, it is an entirely un-scalable notion that the OP would then initiate some protocol to log the user out everywhere else they might have used SSO.&lt;br /&gt;&amp;nbsp;&lt;/li&gt;
	
	&lt;li&gt;Not as sexy as you think - engineers, coders and early-adopter types like the idea of SSO. &quot;You don't have to create accounts all over the internet, it's all handled in one place!&quot; But if you emerge from your den and go out and talk to &quot;real-user&quot; units, you'll find that they are for the most part indifferent. It's just not a killer app.&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;
	
&lt;p&gt;A small shift in thinking began to remove the scales from my eyes. Single sign-on is essentially third-party authentication, but it's *introductions* that we need from third parties, not authentication! Now, this is certainly not a new or original &lt;a href=&quot;http://www.waterken.com/dev/YURL/Definition/&quot;&gt;idea&lt;/a&gt; , but I want to share a bit of clarity that has descended on me.&lt;/p&gt;

&lt;p&gt;Introductions are a fundamental aspect of our socialization as human beings, perhaps even archetypal. &lt;img src=&quot;http://tatwd.net/assets/2008/6/29/granovetter.gif&quot;&gt;The &lt;a href=&quot;http://en.wikipedia.org/wiki/Mark_Granovetter&quot;&gt;Granovetter&lt;/a&gt; diagram is often used to represent them formally. In the diagram, Alice is connected to both Bob and Carol, and Alice introduces Carol to Bob. The fat arrow on the connection between Alice and Bob represents the introduction itself. It is the technical nature of that introduction that I am discussing here.&lt;/p&gt;

&lt;p&gt;The advent of the &lt;a href=&quot;http://en.wikipedia.org/wiki/XRDS&quot;&gt;XRDS standard&lt;/a&gt;, which ironically may turn out to be the most important (and not coincidentally the simplest) contribution of the OASIS XRI TC, makes possible a very simple introduction protocol using an &lt;a href=&quot;http://en.wikipedia.org/wiki/Simple_public_key_infrastructure&quot;&gt;SPKI&lt;/a&gt; system that might actually work. The rest of this discussion presupposes a familiarity with XRDS.&lt;/p&gt;

&lt;p&gt;Here's how it goes: first, the connection between Alice and Bob means that Bob has already been introduced to Alice, either at some time in the past via the protocol we are about to describe, or a priori via configuration. This means that Alice knows how to get Bob's XRDS from a source she trusts. To proceed with an introduction, Bob must have made himself available by publishing an allow-me-to-introduce SEP in his XRDS. A two step process follows.&lt;/p&gt;

&lt;p&gt;First, Alice POSTs to the URI in Bob's allow-me-to-introduce SEP with -her- name for Carol, Carol's CanonicalID, Alice's CanonicalID, and Alice's signature over both her and Carol's CanonicalIDs. Her name for Carol is a URI or an HXRI that dereferences to Carol's XRDS, something like &quot;https://xri.example.com/*carol&quot;. (This form of an HXRI is admittedly a bit avant-garde, since it doesn't yet exist in the XRI spec, and is only being discussed off-line at the moment. But I'm going to go out on a limb and use it. It's not essential to the protocol and can be modified to match a spec for URI-hostname-based community roots in HXRIs, when there is one.)&lt;/p&gt;

&lt;p&gt;Bob's allow-me-to-introduce URI is a &quot;factory&quot; resource - POSTing to it creates a new introduction if successful. Bob already has Alice's public key on record, and/or knows where to look up Alice's XRDS to get it. He should also look up Carol's XRDS to verify her CanonicalID and record her public key for future use. Bob then verifies Alice's signature, and creates the new introduction resource, initially in &quot;expecting&quot; state. He returns a 201 (created) HTTP status, along with a Location header for the new introduction.&lt;/p&gt;

&lt;p&gt;So far, all this has taken place server to server, in the background. It could probably be combined with the next step to make a &quot;one click&quot; experience for the user, but as a rule I think it will be better to keep the process as two steps, to facilitate asynchronicity and agent-on-both-sides possibilities, as well as to shield the user from high-latency processes.&lt;/p&gt;

&lt;p&gt;In step two, Alice makes the new &quot;expecting introduction&quot; resource available to Carol in the UI as a form button. In the best of all possible worlds, Alice would make the raw introduction URI available to Carol, and Carol would be able to sign and deliver her own response to it from desktop software. But until that happy day, I'm going to assume that Alice is acting as an introduction agent, and has the ability to sign stuff with Carol's private key on her behalf.

&lt;p&gt;Since clicking on the &quot;complete-introduction&quot; button is going to change the state of the introduction resource from &quot;expecting&quot; to &quot;consummated&quot;, it should trigger an HTTP PUT, but alas browsers don't do PUT in the early years of the 21st century, so we'll use an overloaded POST. The POST body contains Carol's CanonicalID and her signature over it, so that Bob knows this is really Carol. Bob can now begin his relationship with Carol, which will probably begin with returning a UI to establish a local account for her so that she can authenticate locally with Bob from then on. &lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;Both of the steps are idempotent, i.e. they only  work once and further attempts to access them don't change anything. So we don't have to worry about replay attacks, and nonces are not necessary.&lt;/p&gt;

&lt;p&gt;Since we are using URI-hostname-based community roots that are not privileging any particular registry, it will be useful to craft a CanonicalID that is globally unique. This can easily be done in a standard fashion by using a UUID. The XRDS will also contain a public key for its entity, in a &amp;lt;dsig:KeyInfo&amp;gt; block.&lt;/p&gt;

&lt;p&gt;Now the HXRI dereferences to a globally unique CanonicalID and a public key, as well as a list of service endpoints. The public key can be given a short TTL, thus solving the PKI revocation list problem by totally distributing it.&lt;/p&gt;

&lt;p&gt;As long as the HXRI dereferences to the same CanonicalID, it represents the same entity as the last time you saw it -- the fundamental meaning of identity.&lt;/p&gt;

&lt;p&gt;Having been introduced to you, we know each other's CanonicalIDs and we each have a way to look up the other's public key. I can then give you access, &lt;strong&gt;on my terms&lt;/strong&gt;, to any data that I control, by having my software agent craft a URI that contains an access key which becomes valid when signed with your private key. That access key thus gives you and you only, access to whatever it is programmed to enable, for some given duration. User-centric data sharing!&lt;/p&gt;

&lt;p&gt;Coming next, a more complete description of an implementation of the introduction protocol, and then, working code  :-)&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://tatwd.net/">
    <author>
      <name>victor</name>
    </author>
    <id>tag:tatwd.net,2007-05-14:13</id>
    <published>2007-05-14T18:42:00Z</published>
    <updated>2007-05-14T18:45:00Z</updated>
    <category term="Random Musings"/>
    <link href="http://tatwd.net/2007/5/14/open-source-and-non-profits" rel="alternate" type="text/html"/>
    <title>Open source and non-profits</title>
<content type="html">
            &lt;p&gt;Most leaders of non-profit organizations would intuitively understand why using say, recycled paper is a natural fit with their organization&#8217;s spirit, even if it has nothing to do with their mission directly. Here&#8217;s two representative comments on why non-profit organizations should support green technology and awareness:&lt;/p&gt;


	&lt;p&gt;&#8220;Nonprofit organizations are natural laboratories for learning, testing new ways to serve constituents, and modeling new approaches to existing problems. This is especially true of museums. As places of preservation and active learning, they are particularly well-suited to modeling &#8220;green&#8221; behavior and design for the public.&#8221; &#8211; &lt;a href=&quot;http://foundationcenter.org/pnd/tsn/tsn_print.jhtml?id=156500003&quot;&gt;Sarah S. Brophy&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;&#8220;Regardless of your non-profit&#8217;s purpose, your organization can probably afford to be a little greener. Being environmentally friendly is beneficial in several ways:&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;It helps your organization be a good steward in your community and in the world&lt;/li&gt;
		&lt;li&gt;It can make your organization more appealing to potential donors&lt;/li&gt;
		&lt;li&gt;It enables your organization to help ensure that future generations can enjoy a respectable quality of life.&lt;/li&gt;
		&lt;li&gt;While some green measures are costly, many are not &#8211; and some can even save or make money.&#8221; &#8211; &lt;a href=&quot;http://nonprofitmanagement.suite101.com/article.cfm/how_to_be_a_green_nonprofit&quot;&gt;Estela Kennen&lt;/a&gt;&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;The key points here are that a non-profit should be a natural laboratory for learning and it should be a good steward in its community and in the world. A non-profit lives via support from the community within which it exists, and it has a moral imperative not only to fulfill its specific mission but also to give back to the greater community in any way it can, but especially in ways that support mutual growth.&lt;/p&gt;


	&lt;p&gt;&lt;a href=&quot;http://www.opensource.org/&quot;&gt;Open source software&lt;/a&gt; is a perfect fit for non-profits in exactly the same way that green technology is. Some people associate open source with no-cost and therefore low quality, but nothing could be further from the truth. Open source software is community created software. It is a gift to the world from a (sometimes small, sometimes quite large) community of programmers, who believe that by sharing and cooperating they can produce a better working environment for everyone, themselves included. What could be more in alignment with the spirit of most non-profits?&lt;/p&gt;


	&lt;p&gt;To quote opensource.org, open source &#8220;is a development method for software that harnesses the power of distributed peer review and transparency of process. The promise of open source is better quality, higher reliability, more flexibility, lower cost, and an end to predatory vendor lock-in.&#8221;&lt;/p&gt;


	&lt;p&gt;Some non-profits resist moving to open source software because they are naturally conservative and want to stick with the tried and true. But open source has been around for a generation now, and even some of the big software companies such as &lt;span class=&quot;caps&quot;&gt;IBM&lt;/span&gt;, Apple, Novell and Sun have begun to find ways to support it.&lt;/p&gt;


	&lt;p&gt;What&#8217;s more, if the mission of your organization is in some way to change the world for the better, then what could make more sense than to align with and support the efforts of other communities who are also working to change the world for the better. After all, creating change may involve embracing change!&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://tatwd.net/">
    <author>
      <name>victor</name>
    </author>
    <id>tag:tatwd.net,2007-03-01:12</id>
    <published>2007-03-01T16:03:00Z</published>
    <updated>2007-03-01T16:09:27Z</updated>
    <category term="Identity Technology"/>
    <link href="http://tatwd.net/2007/3/1/json-forms" rel="alternate" type="text/html"/>
    <title>JSON forms</title>
<summary type="html">&lt;p&gt;I&#8217;ve been thinking about how to use &lt;span class=&quot;caps&quot;&gt;JSON&lt;/span&gt; as a data interchange format using &lt;a href=&quot;http://en.wikipedia.org/wiki/XRI&quot;&gt;&lt;span class=&quot;caps&quot;&gt;XRI&lt;/span&gt;&lt;/a&gt; identifiers and &lt;a href=&quot;http://www.windley.com/archives/2005/08/identity_rights.shtml&quot;&gt;IRAs&lt;/a&gt;. You have to love a protocol that can be &lt;a href=&quot;http://www.json.org/&quot;&gt;specified&lt;/a&gt; on one page, and there are some &lt;a href=&quot;http://www.json.org/xml.html&quot;&gt;compelling reasons&lt;/a&gt; to use &lt;span class=&quot;caps&quot;&gt;JSON&lt;/span&gt; as an alternative to &lt;span class=&quot;caps&quot;&gt;XML&lt;/span&gt; for this purpose. Since &lt;span class=&quot;caps&quot;&gt;XRI&lt;/span&gt; data interchange has been known as &lt;span class=&quot;caps&quot;&gt;XDI&lt;/span&gt;, I&#8217;ll call this &lt;span class=&quot;caps&quot;&gt;JXDI&lt;/span&gt;.&lt;/p&gt;


	&lt;p&gt;This will be a resource-oriented protocol (i.e. &lt;span class=&quot;caps&quot;&gt;REST&lt;/span&gt; for the &lt;a href=&quot;http://tatwd.net/2007/2/21/there-s-more-than-one-way-to-get-some-rest&quot;&gt;irreligious&lt;/a&gt;). Let&#8217;s assume that all interactions must be authenticated.&lt;/p&gt;</summary><content type="html">
            &lt;p&gt;I&#8217;ve been thinking about how to use &lt;span class=&quot;caps&quot;&gt;JSON&lt;/span&gt; as a data interchange format using &lt;a href=&quot;http://en.wikipedia.org/wiki/XRI&quot;&gt;&lt;span class=&quot;caps&quot;&gt;XRI&lt;/span&gt;&lt;/a&gt; identifiers and &lt;a href=&quot;http://www.windley.com/archives/2005/08/identity_rights.shtml&quot;&gt;IRAs&lt;/a&gt;. You have to love a protocol that can be &lt;a href=&quot;http://www.json.org/&quot;&gt;specified&lt;/a&gt; on one page, and there are some &lt;a href=&quot;http://www.json.org/xml.html&quot;&gt;compelling reasons&lt;/a&gt; to use &lt;span class=&quot;caps&quot;&gt;JSON&lt;/span&gt; as an alternative to &lt;span class=&quot;caps&quot;&gt;XML&lt;/span&gt; for this purpose. Since &lt;span class=&quot;caps&quot;&gt;XRI&lt;/span&gt; data interchange has been known as &lt;span class=&quot;caps&quot;&gt;XDI&lt;/span&gt;, I&#8217;ll call this &lt;span class=&quot;caps&quot;&gt;JXDI&lt;/span&gt;.&lt;/p&gt;


	&lt;p&gt;This will be a resource-oriented protocol (i.e. &lt;span class=&quot;caps&quot;&gt;REST&lt;/span&gt; for the &lt;a href=&quot;http://tatwd.net/2007/2/21/there-s-more-than-one-way-to-get-some-rest&quot;&gt;irreligious&lt;/a&gt;). Let&#8217;s assume that all interactions must be authenticated.&lt;/p&gt;
&lt;p&gt;When we authenticate an &lt;span class=&quot;caps&quot;&gt;HTML&lt;/span&gt; based interchange, we assume that the client has previously registered with the server, and possesses an identifier (user name) and password that will be recognized by the server. The client supplies these credentials, and if successful receives a header value (a cookie) that will be used to maintain authentication state on subsequent transactions.&lt;/p&gt;


	&lt;p&gt;&lt;span class=&quot;caps&quot;&gt;JXDI&lt;/span&gt; authentication is somewhat analogous. There must be a pre-existing registration process. &lt;span class=&quot;caps&quot;&gt;JXDI&lt;/span&gt; is a back-end process happening between two servers, generating an exchange of data that can then be processed for human consumption if desired. Since these are two servers talking to each other, the registration process will consist of the exchange and acceptance of public keys and corresponding &lt;span class=&quot;caps&quot;&gt;XRI&lt;/span&gt; identifiers. We&#8217;ll worry about how that exchange happens later&#8212;it could be some manual administrative process, or possibly &lt;span class=&quot;caps&quot;&gt;XRI&lt;/span&gt; trusted resolution or something like it but simpler. We&#8217;ll use OpenSSL &lt;span class=&quot;caps&quot;&gt;X509&lt;/span&gt; certs, since the means to generate those is well supported.&lt;/p&gt;


	&lt;p&gt;Authentication could then happen in several ways. The simplest is for the client to pass an &lt;span class=&quot;caps&quot;&gt;XRI&lt;/span&gt; identifying itself, a timestamp, and a PK signature over those two values concatenated. The server, upon verifying that the signature validates with the cert on record for that &lt;span class=&quot;caps&quot;&gt;XRI&lt;/span&gt;, issues an opaque session value which the client can use in the header of subsequent requests to authenticate itself for some limited period of time. This is analogous to logging in and receiving a session cookie, and should happen over &lt;span class=&quot;caps&quot;&gt;HTTPS&lt;/span&gt; to protect the transaction and also authenticate the server to the client.&lt;/p&gt;


	&lt;p&gt;A more complex scheme would require as part of client registration that the client certificate be returned signed by the server, so that two-way &lt;span class=&quot;caps&quot;&gt;SSL&lt;/span&gt; authentication could happen, passing off the session maintenance to the &lt;span class=&quot;caps&quot;&gt;SSL&lt;/span&gt; protocol itself.&lt;/p&gt;


	&lt;p&gt;So having established a session, let&#8217;s do a &lt;span class=&quot;caps&quot;&gt;GET&lt;/span&gt; request for the profile data of user with an i-number of &#8221;!1234&#8221; and it looks something like this:&lt;/p&gt;


&lt;pre&gt;GET /profile/!1234.json&lt;/pre&gt;

	&lt;p&gt;The &#8220;dot json&#8221; extension is a Rails-ism that can be understood in a Rails app to be a request for a response in &lt;span class=&quot;caps&quot;&gt;JSON&lt;/span&gt; format. The same thing could be accomplished (less elegantly) with an Accept header.&lt;/p&gt;


	&lt;p&gt;The response is a &lt;span class=&quot;caps&quot;&gt;JSON&lt;/span&gt; form, which unserializes to a data structure (hashes and arrays). It includes one or more fields for the IRAs under which all or various parts of the requested data are available&#8212;actually, the pointers (URIs) to those IRAs. The rest of the structure has leaf nodes which at this point are either empty strings (&#8221;&#8221;), zeros for numbers, false for boolean values or null for untyped values. These leaf nodes are the placeholders for the actual data values to be transferred.&lt;/p&gt;


	&lt;p&gt;This gives the requester two things, the &lt;acronym title=&quot;s&quot;&gt;IRA&lt;/acronym&gt; under which the requested data is available, and the data structure and data types in which the data will be delivered&#8212;the schema.&lt;/p&gt;


	&lt;p&gt;To agree to the &lt;acronym title=&quot;s&quot;&gt;IRA&lt;/acronym&gt; and receive the data, the requester simply POSTs back to the same &lt;span class=&quot;caps&quot;&gt;URL&lt;/span&gt; with the following in the body of the post&#8212;&lt;/p&gt;


&lt;pre&gt;data:JSON string
id:XRI
ts:timestamp
sig:&quot;signature over data+id+ts&quot;&lt;/pre&gt;

	&lt;p&gt;This request, including the signature, is retained by the server to prove that the client agreed to the &lt;span class=&quot;caps&quot;&gt;IRA&lt;/span&gt;.&lt;/p&gt;


	&lt;p&gt;The data is either the whole schema or whatever part of it is desired, but always includes the &lt;span class=&quot;caps&quot;&gt;IRA&lt;/span&gt; that covers that part of the schema. The server then returns another &lt;span class=&quot;caps&quot;&gt;JSON&lt;/span&gt; form which is the requested schema with the leaf nodes (the actual data) filled in and the IRAs that apply. This &lt;span class=&quot;caps&quot;&gt;JSON&lt;/span&gt; form is of course returned as a &lt;span class=&quot;caps&quot;&gt;JSON&lt;/span&gt; serialized string, and along with it is a timestamp and a signature with the server&#8217;s private key over the &lt;span class=&quot;caps&quot;&gt;JSON&lt;/span&gt; string and the timestamp, which the client can retain as proof that the server provided this data under the enclosed &lt;acronym title=&quot;s&quot;&gt;IRA&lt;/acronym&gt;.&lt;/p&gt;


	&lt;p&gt;This should provide all of the elements necessary for a socially enforced data-exchange/reputation network and be simple and comprehensible to boot. No &lt;span class=&quot;caps&quot;&gt;XML&lt;/span&gt; parsing (or &amp;lt;shudder&amp;gt;DSIG&amp;lt;/shudder&amp;gt;) required! &lt;span class=&quot;caps&quot;&gt;JSON&lt;/span&gt; is a very efficient serialization scheme, and unserializes directly into a data structure native to whatever programming language is being used on either end of the exchange.&lt;/p&gt;


	&lt;p&gt;Even more importantly, this is a highly &lt;a href=&quot;http://www.shirky.com/writings/evolve.html&quot;&gt;evolvable&lt;/a&gt; procedure.&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://tatwd.net/">
    <author>
      <name>victor</name>
    </author>
    <id>tag:tatwd.net,2007-02-21:11</id>
    <published>2007-02-21T15:13:00Z</published>
    <updated>2007-02-21T15:15:33Z</updated>
    <category term="Identity Technology"/>
    <link href="http://tatwd.net/2007/2/21/there-s-more-than-one-way-to-get-some-rest" rel="alternate" type="text/html"/>
    <title>There's more than one way to GET some REST</title>
<summary type="html">&lt;p&gt;There was a heated discussion a while back between some members of the &lt;span class=&quot;caps&quot;&gt;XDI TC&lt;/span&gt; about whether &lt;span class=&quot;caps&quot;&gt;REST&lt;/span&gt; was worth pursuing, or whether it even meant anything meaningful in the &lt;span class=&quot;caps&quot;&gt;XDI&lt;/span&gt; context. It&#8217;s clear that &lt;span class=&quot;caps&quot;&gt;REST&lt;/span&gt; has its religious zealots (RESTafarians). and that purity is not possible or even desirable for the rest of us. But as a thought process, &lt;span class=&quot;caps&quot;&gt;REST&lt;/span&gt; is seductively elegant&#8212;think of everything that your application exposes to the user as a &lt;em&gt;resource&lt;/em&gt; rather than a service. It&#8217;s a subtle but powerful difference.&lt;/p&gt;</summary><content type="html">
            &lt;p&gt;There was a heated discussion a while back between some members of the &lt;span class=&quot;caps&quot;&gt;XDI TC&lt;/span&gt; about whether &lt;span class=&quot;caps&quot;&gt;REST&lt;/span&gt; was worth pursuing, or whether it even meant anything meaningful in the &lt;span class=&quot;caps&quot;&gt;XDI&lt;/span&gt; context. It&#8217;s clear that &lt;span class=&quot;caps&quot;&gt;REST&lt;/span&gt; has its religious zealots (RESTafarians). and that purity is not possible or even desirable for the rest of us. But as a thought process, &lt;span class=&quot;caps&quot;&gt;REST&lt;/span&gt; is seductively elegant&#8212;think of everything that your application exposes to the user as a &lt;em&gt;resource&lt;/em&gt; rather than a service. It&#8217;s a subtle but powerful difference.&lt;/p&gt;
&lt;p&gt;When I first heard &lt;span class=&quot;caps&quot;&gt;DHH&lt;/span&gt; present the RESTful routing concept at the 2006 Ruby on Rails conference in Chicago, I have to admit I was skeptical. I thought the way that the &lt;span class=&quot;caps&quot;&gt;PUT&lt;/span&gt; and &lt;span class=&quot;caps&quot;&gt;DELETE&lt;/span&gt; verbs were faked into the process as automatically created parameters was ugly and problematical. Especially ugly was the insertion of verbs into a &lt;span class=&quot;caps&quot;&gt;GET&lt;/span&gt; string with semi-colons (i.e. &#8220;GET /resource;edit&#8221;). I mean, yes it&#8217;s legal syntax, but if you are creating an app that&#8217;s meant to expose resources for all kinds of user agents running on a wide variety of platforms, who knows what that surprising usage will do? Had &lt;span class=&quot;caps&quot;&gt;DHH&lt;/span&gt; finally gone off the rails?&lt;/p&gt;


	&lt;p&gt;Well no, of course it turns out to just be &lt;span class=&quot;caps&quot;&gt;DHH&lt;/span&gt; being his usual quirky opinionated brilliant self. I read a bit more about RESTful routing on several Rails tech blogs, but they were written in typical &lt;span class=&quot;caps&quot;&gt;HOWTO&lt;/span&gt; style, and weren&#8217;t very helpful. (HOWTO style is where the author goes into excruciating detail on the parts of the topic that any interested reader would already know, and then skips right over the essential details that would give the reader some context.) The light finally dawned when I read the section about RESTful routing in the new second edition of the excellent &lt;a href=&quot;http://www.amazon.com/exec/obidos/redirect?link_code=ur2&#38;camp=1789&#38;tag=openheart-20&#38;creative=9325&#38;path=external-search%3Fsearch-type=ss%26keyword=0977616630%26index=books&quot;&gt;Agile Web Development with Rails&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;RESTful routing in Rails is a way to get a whole set of predetermined routes from one simple routing statement. That&#8217;s it. If you agree with &lt;span class=&quot;caps&quot;&gt;DHH&lt;/span&gt;&#8217;s opinion about how to do &lt;span class=&quot;caps&quot;&gt;REST&lt;/span&gt;, you get a lot for a little. If you don&#8217;t, no problem. Just proceed to map your routes the (slightly) harder way. This exemplifies precisely what is meant when people say that Rails is &#8220;opinionated software&#8221;. For more on Rails RESTful routing, do read the &lt;a href=&quot;http://www.ruby-forum.com/topic/76016&quot;&gt;post (a short article really)&lt;/a&gt; on the Ruby on Rails mailing list by Russ McBride&#8217;s dog Lelu.&lt;/p&gt;


&lt;hr /&gt;


	&lt;p&gt;RESTful resources are acted upon by the four &lt;span class=&quot;caps&quot;&gt;HTTP&lt;/span&gt; verbs, &lt;span class=&quot;caps&quot;&gt;GET&lt;/span&gt;, POST, &lt;span class=&quot;caps&quot;&gt;PUT&lt;/span&gt; and &lt;span class=&quot;caps&quot;&gt;DELETE&lt;/span&gt;. Except of course that browsers don&#8217;t support &lt;span class=&quot;caps&quot;&gt;PUT&lt;/span&gt; and &lt;span class=&quot;caps&quot;&gt;DELETE&lt;/span&gt;, so really just &lt;span class=&quot;caps&quot;&gt;GET&lt;/span&gt; and &lt;span class=&quot;caps&quot;&gt;POST&lt;/span&gt;. You immediately have to start cheating, doing things like &#8220;GET /resource;edit&#8221;. The preceding produces a form suitable for posting edited data to the resource. Lelu defends this as getting a resource under the &#8220;aspect&#8221; of edit, not sneaking in a verb, though she worries about it. Personally, I don&#8217;t see how &#8221;/resource/edit&#8221; is any different, and much cleaner. When it comes to &lt;span class=&quot;caps&quot;&gt;REST&lt;/span&gt;, it&#8217;s the thought (process) that counts ;-)&lt;/p&gt;


	&lt;p&gt;If you&#8217;re thinking about what you expose to the user in terms of resources, then &lt;span class=&quot;caps&quot;&gt;GET&lt;/span&gt; &#8221;/resource/edit&#8221; gives you a resource for editing (i.e. a form), and &lt;span class=&quot;caps&quot;&gt;POST&lt;/span&gt; &#8221;/resource/edit&#8221; submits the edited resource to the server, which knows what to do with it depending on the context. Here&#8217;s where things get really interesting. RESTafarians don&#8217;t seem to like context&#8212;they want each &lt;span class=&quot;caps&quot;&gt;URL&lt;/span&gt;/verb combination to always produce the same result. That&#8217;s great if you&#8217;re a semantic webbie who just wants all data to be free and accessible. But what about access controls? What about users owning their own data, and being in control of who gets it and under what circumstances? When you&#8217;re talking about personal and/or sensitive data, flexible and robust access controls are the crucial thing.&lt;/p&gt;


	&lt;p&gt;This is about me not wanting you to be able to edit &lt;em&gt;my&lt;/em&gt; personal profile without my permission, &lt;a href=&quot;http://www.windley.com/archives/2005/08/identity_rights.shtml&quot;&gt;IRAs&lt;/a&gt; not DRMs. When you bring up access controls, RESTafarians tend to look away and mumble something about &#8220;if only the damn browsers&#8230;&#8221;&lt;/p&gt;


	&lt;p&gt;But back here in consensual reality, access controls are central to what I am trying to build. &#8220;User-centric&#8221; identity and reputation networks have a primary dependency on flexible and robust access controls, and things quickly get crazy if you can&#8217;t maintain state on a user session. Is it possible to do this and still think resources, not services? Of course.&lt;/p&gt;


	&lt;p&gt;First of all, let&#8217;s dispense with the hang-up about cookies. They&#8217;re just &lt;span class=&quot;caps&quot;&gt;HTTP&lt;/span&gt; header info, and are as well established and de-facto standardized as anything else about &lt;span class=&quot;caps&quot;&gt;HTTP&lt;/span&gt;. RESTafarians bless basic and digest auth but not cookies, on the academic distinction that &lt;span class=&quot;caps&quot;&gt;REST&lt;/span&gt; is supposed to be stateless, and cookies maintain state on the server, while &lt;span class=&quot;caps&quot;&gt;HTTP&lt;/span&gt; auth maintains state on the client, so from a protocol point of view it&#8217;s more pure. But if you use the more secure digest auth, the client and the server have to share a memory of a nonce and the distinction starts to get a little silly, imho.&lt;/p&gt;


	&lt;p&gt;A cookie should carry no information except state&#8212;an opaque string. It is much more flexible than &lt;span class=&quot;caps&quot;&gt;HTTP&lt;/span&gt; auth, allowing the developer to, among other things, use &lt;span class=&quot;caps&quot;&gt;SSL&lt;/span&gt; for transmitting credentials, but then drop out of &lt;span class=&quot;caps&quot;&gt;SSL&lt;/span&gt; to save overhead for subsequent requests. It allows the user to log out! It&#8217;s just not practical for the server to not maintain state/context on a complex series of authenticated and authorized transactions with a client, so let&#8217;s just get over it and move on. If it&#8217;s not pure &lt;span class=&quot;caps&quot;&gt;REST&lt;/span&gt;, well we can still derive benefits from the resources-not-services way of modeling our applications, and purity is highly overrated.&lt;/p&gt;


&lt;hr /&gt;


	&lt;p&gt;Context is part of what defines a resource in my universe. In an application that stores and displays personal profiles for example, &lt;em&gt;my profile&lt;/em&gt; has different properties than someone else&#8217;s profile. My profile may have a dependent resource called &#8220;my_profile/edit&#8221; whereas someone else&#8217;s profile, &#8220;profile/42&#8221;, has no such resource. On the other hand, if my authorization context includes say, &#8220;admin&#8221;, then in that context there may exist a resource called &#8220;profile/edit/42&#8221;.&lt;/p&gt;


	&lt;p&gt;This makes beautiful sense to me. I can organize my application into context dependent modules&#8212;under &#8220;app/controllers/my&#8221; is a controller class (My::InfoController) that has no instance methods, but does the authorization checking and model instantiation for those instances that apply to &lt;em&gt;me&lt;/em&gt;. Then I can use inheriting controller classes for the various aspects of the profile, i.e. &#8220;My::ProfileController &amp;lt; My::InfoController&#8221; and &#8220;My::BioController &amp;lt; My::InfoController&#8221;, secure in the knowledge that their methods are always exposed under the correct authorization for the context.&lt;/p&gt;


	&lt;p&gt;The applications I&#8217;m working on are &lt;em&gt;all about&lt;/em&gt; authentication and authorization, because those are the low-level building blocks of identity and reputation. There can be even finer grained distinctions within authorization realms, and trying to manage &lt;em&gt;those&lt;/em&gt; within one flat controller hierarchy would lead to madness&#8212;I speak from experience on this. So, controller hierarchies will be based on authorization realms in these applications. Within each realm (for example admin or regular-user) there will be various actions that are possible, depending on authorization modifiers.&lt;/p&gt;


	&lt;p&gt;Even though this scheme doesn&#8217;t use the full-blown Rails RESTful routing, which you can probably tell I&#8217;m not that thrilled about anyway, Rails 1.2 does provide a little discussed but very nice new parameter to route mapping which I am planning to make extensive use of:&lt;/p&gt;


&lt;pre&gt;:conditions =&amp;gt; {:method =&amp;gt; :get}
:conditions =&amp;gt; {:method =&amp;gt; :post}&lt;/pre&gt;

	&lt;p&gt;This allows a &lt;span class=&quot;caps&quot;&gt;GET&lt;/span&gt; request to be mapped to a particular controller and action, and a &lt;span class=&quot;caps&quot;&gt;POST&lt;/span&gt; request to the &lt;em&gt;same&lt;/em&gt; URL to be mapped to a different action. So for example &lt;span class=&quot;caps&quot;&gt;GET&lt;/span&gt; /my_profile/edit delivers a populated form, and &lt;span class=&quot;caps&quot;&gt;POST&lt;/span&gt; /my_profile/edit delivers the form data to the action which does the updating. The distinction between creating a new resource and updating an existing one is handled by the context&#8212;if we are not referring to an existing resource in context then we are creating a new one. Thus we can do away with the need for &lt;span class=&quot;caps&quot;&gt;PUT&lt;/span&gt;.&lt;/p&gt;


	&lt;p&gt;That leaves &lt;span class=&quot;caps&quot;&gt;DELETE&lt;/span&gt; to deal with, which turns out to be even more fun. &lt;span class=&quot;caps&quot;&gt;A GET&lt;/span&gt; request to /resource/delete accesses a &#8220;delete_confirm&#8221; action that produces an &#8220;are you sure&#8221; page, which contains a form with submit buttons that say &#8220;yes&#8221; and &#8220;no&#8221;. &lt;span class=&quot;caps&quot;&gt;A POST&lt;/span&gt; to /resource/delete accesses a &#8220;delete&#8221; action which does the deletion if the parameter value is &#8220;yes&#8221; or otherwise redirects somewhere without acting.&lt;/p&gt;


	&lt;p&gt;And there we have a completely flexible RESTfully organized application (at least imho) using only &lt;span class=&quot;caps&quot;&gt;GET&lt;/span&gt; and &lt;span class=&quot;caps&quot;&gt;POST&lt;/span&gt;.&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://tatwd.net/">
    <author>
      <name>victor</name>
    </author>
    <id>tag:tatwd.net,2007-01-24:10</id>
    <published>2007-01-24T16:10:00Z</published>
    <updated>2007-01-24T16:11:01Z</updated>
    <category term="Identity Technology"/>
    <link href="http://tatwd.net/2007/1/24/phish-stories" rel="alternate" type="text/html"/>
    <title>Phish Stories</title>
<summary type="html">&lt;p&gt;Many of the tech and crypto people working on phishing mitigation seem to think that the problem is &#8220;how can I connect with anyone in the world in a trustworthy way?&#8221; Personally I don&#8217;t think it&#8217;s all that compelling to be able to communicate with 6 billion strangers. It&#8217;s much more interesting to be able to communicate &lt;em&gt;from&lt;/em&gt; anywhere with people whose identity and reputation within my circle of communities can be ascertained in a trustworthy way.&lt;/p&gt;</summary><content type="html">
            &lt;p&gt;Many of the tech and crypto people working on phishing mitigation seem to think that the problem is &#8220;how can I connect with anyone in the world in a trustworthy way?&#8221; Personally I don&#8217;t think it&#8217;s all that compelling to be able to communicate with 6 billion strangers. It&#8217;s much more interesting to be able to communicate &lt;em&gt;from&lt;/em&gt; anywhere with people whose identity and reputation within my circle of communities can be ascertained in a trustworthy way.&lt;/p&gt;
&lt;p&gt;OpenID was originally created to mitigate comment spam on weblogs, and it remains excellent for that purpose. Having to prove that you are in control of some (any) website adds enough friction into the process to make robotic spamming less attractive.&lt;/p&gt;


	&lt;p&gt;The evolution of OpenID as a more general identifier, and the mutual adoption of support for i-names in OpenID and support for OpenID as the primary &lt;span class=&quot;caps&quot;&gt;SSO&lt;/span&gt; protocol by the i-names community, has underlined some issues long understood in certain rarefied circles, but only now being discussed in the larger world of OpenID developers. See &lt;a href=&quot;http://openid.net/wiki/index.php/OpenID_Phishing_Brainstorm&quot;&gt;OpenID Phishing Brainstorm&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;The reason that most of these suggestions amount to security theater is that phishing does not rely on snaring a large percentage of its potential victims. In fact a very tiny rate of success can be quite profitable for the attacker. If a small number of the potential victims are tired and/or in a hurry, and fail to notice or choose to ignore the discrepancies in the process, the attack will be successful from the attacker&#8217;s point of view. If there is anyone reading this who has never made a mistake on a computer because they were tired or impatient, feel free to exempt yourself from this analysis.&lt;/p&gt;


	&lt;p&gt;Perfect and unfailing vigilance is not a human trait. Instead we trust, meaning that we enter into a very familiar process with the expectation that it is in everyone&#8217;s self-interest to follow the rules and/or that if we encounter any actors who are not following the rules it will be immediately obvious. We drive down the street &#8220;trusting&#8221; every unknown driver passing in the opposite direction to stay on their side, mainly because there is no case where it is not in their self-interest to do so. (Many years ago, a co-worker of mine was driving home from work very late in the evening. His was the only vehicle on that stretch of the interstate. Imagine his shock, confusion, horror even, when he saw a big semi coming down the highway in the opposite direction on his side! He pulled way over to the right and let it go by, and we can only assume, since there were no reports of an accident in the news, that the truck driver realized his mistake and turned around or got off the next exit.)&lt;/p&gt;


	&lt;p&gt;The underlying vulnerability in the &lt;span class=&quot;caps&quot;&gt;SSO&lt;/span&gt; process is that the principal is being asked to trust an RP, and the RP is being asked to trust an OP. To justify that trust, the RP must properly identify itself to the principal, and its self-interest must be known. The OP in turn must identify itself to the RP. In other words, we must not cross trust boundaries. If we are envisioning an open distributed system that will work for the principal whether they are using their home computer, their iPhone at the airport, or an internet cafe in Budapest, then we can&#8217;t depend on any browser plugin or local software. Instead we need to find a way for the principal to put bounds on an otherwise unbounded process, to stay within trust boundaries. All of the permitted actors must share some kind of self-interest for there to be trust.&lt;/p&gt;


	&lt;p&gt;There are two ways to create trust boundaries. The actors can all be part of some circle of trust, all known to each other. Or, if we wish to create a system in which strangers can interact, then we must have some kind of reputation and/or introduction system. Either way, we must always &lt;em&gt;start&lt;/em&gt; at a known trusted location, and follow only trusted links from there. An OP must not accept requests for authentication from an unknown RP. Putting up a screen asking the user if she wants to accept an authentication request from an unknown RP does not work&#8212;Microsoft has spent years conditioning users to click &#8220;yes&#8221; to &lt;em&gt;anything&lt;/em&gt; in a desperate attempt to get the damn computer to allow them to get on with their day.&lt;/p&gt;


	&lt;p&gt;Phishing, remember, is based on hooking the tired, distracted and harassed. A secure system must make it impossible or at least very difficult for the user to do the wrong thing, and not depend on the user to be paying attention.&lt;/p&gt;


	&lt;p&gt;Online communities can act as trust boundaries for their users. Online communities can affiliate with one another, creating expanding reputation and search networks. They must vet their users in some understood way, and that method of vetting is part of the community&#8217;s reputation. The user must only be able to enter the system through their home community&#8217;s gateway.&lt;/p&gt;


	&lt;p&gt;Ordinary phishing is not solved by this scheme&#8212;users still need to be educated about email scams and developers need to guard against cross-site scripting. But the big new vulnerability opened up by OpenID and other &lt;span class=&quot;caps&quot;&gt;SSO&lt;/span&gt; schemes, caused by the promiscuous redirection of the user by potentially unknown RPs, can be prevented if it&#8217;s understood to be the result of violating trust boundaries.&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://tatwd.net/">
    <author>
      <name>victor</name>
    </author>
    <id>tag:tatwd.net,2007-01-07:8</id>
    <published>2007-01-07T15:40:00Z</published>
    <updated>2007-01-07T15:43:35Z</updated>
    <category term="Futurism"/>
    <link href="http://tatwd.net/2007/1/7/psychic-birds" rel="alternate" type="text/html"/>
    <title>Psychic birds</title>
<content type="html">
            &lt;p&gt;I saw a presentation a few years ago, at the Institute of Noetic Sciences, which included a video of an investigation that Rupert Sheldrake conducted into a fascinating phenomenon involving an African Gray parrot.&lt;/p&gt;


	&lt;p&gt;African Grays are very large parrots that are remarkable in a number of ways. They can live to be more than one hundred years old, and are fiercely loyal to their owners. If you own an African Gray, you have a moral responsibility to ensure that it will be inherited by a good owner when you die, since it will very likely outlive you, and to arrange for a long and gradual introductory period between your parrot and its prospective new owner.&lt;/p&gt;


	&lt;p&gt;African Grays are also noted for their intelligence. They can learn to &#8220;speak&#8221; with large repertoires, and can learn to associate sounds with properties such as shape, color and composition, so that for instance when asked for a &#8220;red triangle&#8221; or a &#8220;brass circle&#8221; they will accurately pick it out of a collection of objects, not confusing it with a blue triangle or a plastic circle.&lt;/p&gt;


	&lt;p&gt;However all that pales in comparison to what this particular African Gray in the presentation could do. The experiment took place in the owner&#8217;s home, which was a two story structure. The bird was upstairs by itself, with a video camera recording what it did. Downstairs, the owner and a researcher sat at a table, with another video camera recording them. The researcher was showing the owner a series of cards with pictures on them. As the owner looked at the pictures, the bird &#8211; upstairs in another part of the house mind you &#8211; would speak what was on the picture!&lt;/p&gt;


	&lt;p&gt;Later they interviewed the owner, who said that she first noticed her parrots psychic abilities when she would wake up in the morning remembering a dream, and the parrot would speak some fragment of the dream. So she started leaving a tape recorder running by her bedside, and discovered that the parrot talked off and on all night, narrating her dreams as she had them.&lt;/p&gt;


&lt;hr /&gt;


	&lt;p&gt;I was walking in the deep woods one day, at a retreat center in Sonoma county, when three ravens started following me. They were not so much flying as hopping from tree to tree, sometimes with a slow powerful flap of the wings for extra thrust. They were &#8220;following in front&#8221; of me the way a cat will, anticipating where I would go, and they were making the most interesting noises. A soft low caw, like a crow caw played back at very slow speed, and another sound so unlike anything you would expect from a bird that for a while I wasn&#8217;t sure it was coming from them&#8212;a sound like water flowing over rocks.&lt;/p&gt;


	&lt;p&gt;Have you ever sat quietly with a close friend, and felt that you have had a deep and meaningful conversation, even though neither of you said a word? That was the experience I had with those ravens that day&#8212;hard to pin down, and yet very vivid in my memory even many years later. I &lt;em&gt;learned&lt;/em&gt; something from those birds that day, something that I don&#8217;t have words for, that can&#8217;t be expressed in words. A &lt;em&gt;connection&lt;/em&gt;.&lt;/p&gt;


&lt;hr /&gt;


	&lt;p&gt;There are other kinds of intelligences beside the one we big-brained apes have evolved. Ravens and African Gray parrots are among the most evolutionary recent birds. These descendants of the dinosaurs are, I&#8217;m convinced, evolving an intelligence that we mammals may find quite alien, although we have the seeds of it in us as well. It doesn&#8217;t depend on a big central nervous system processing unit, being a more distributed kind of system with trillions of cell membranes for nodes. (Do read &lt;a href=&quot;http://www.amazon.com/Biology-Belief-Unleashing-Consciousness-Miracles/dp/0975991477/sr=1-1/qid=1168179345/ref=pd_bbs_sr_1/104-1685065-5607103?ie=UTF8&#38;s=books&quot;&gt;The Biology of Belief&lt;/a&gt; by Bruce Lipton.)&lt;/p&gt;


&lt;hr /&gt;


	&lt;p&gt;I&#8217;ve identified in myself at least three different frequencies of thought. While some people speak of &#8220;higher vibrations&#8221; as being better, for me it&#8217;s just the opposite. The fastest thoughts are the self-talk thoughts, the worrying or planning ahead thoughts, the judging and having myself being judged thoughts. The same thought comes back around every few minutes, sometimes every few moments if there is a lot of emotion behind it. Like a hamster running in a wheel in its cage.&lt;/p&gt;


	&lt;p&gt;Then there are the creative thoughts. They have a frequency of days to weeks. I will be working on something, and stumped or blocked, I will let it go. A few days (or weeks) later
I&#8217;ll stumble across something that is just the answer I was looking for. Or the answer will, unbidden, just spring into clarity for me at some random moment in my day.&lt;/p&gt;


	&lt;p&gt;The longest waves of all are the thoughts that happen over years to decades. These are the thoughts that shape my life. They have no words or images or emotion. They are raven thoughts, pure connection.&lt;/p&gt;


&lt;hr /&gt;


	&lt;p&gt;John Mack was a Harvard psychiatry professor who studied and tried to help people who believed that they had been abducted by UFOs. I met him once&#8212;he was a fascinating and gentle man. &#8220;I don&#8217;t know what happened to these people,&#8221; he told me, &#8220;but I know &lt;em&gt;something&lt;/em&gt; happened to them. I&#8217;ve worked with psychotics for much of my career. These people are not psychotic, not delusional.&#8221;&lt;/p&gt;


	&lt;p&gt;I have my own conjecture about it. If there are other civilizations out there in the universe, and it seems almost certain that there &lt;a href=&quot;http://www.seti.org/site/pp.asp?c=ktJ2J9MMIsE&#38;b=179073&quot;&gt;must be&lt;/a&gt;, and equally certain that some of these must be millions of years older than our own, where might evolution have taken them? I think that the evolutionary step after (or before or in parallel with) what we are pleased to call &#8220;intelligence&#8221; is psychic connection. Perhaps these &lt;span class=&quot;caps&quot;&gt;UFO&lt;/span&gt; beings are what we call &#8220;psychic&#8221; to an extent far beyond anything we have experienced, in the same way that &lt;em&gt;we&lt;/em&gt; are intelligent in a way far beyond anything a chimpanzee has experienced.&lt;/p&gt;


	&lt;p&gt;In the presence of that much psychic power it may be that our minds become disorganized, that we aren&#8217;t capable of processing what we are experiencing. That what those who have had this experience therefore remember about it is a kind of dream imagery, a representation of the experience in subconscious symbology.&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://tatwd.net/">
    <author>
      <name>victor</name>
    </author>
    <id>tag:tatwd.net,2007-01-03:4</id>
    <published>2007-01-03T16:47:00Z</published>
    <updated>2007-01-05T07:45:38Z</updated>
    <category term="Random Musings"/>
    <link href="http://tatwd.net/2007/1/3/tatwd-wtf" rel="alternate" type="text/html"/>
    <title>TATWD? WTF?</title>
<content type="html">
            &lt;p&gt;&#8220;The world rests on the back of a giant turtle.&#8221; What does the turtle stand on? &#8220;Another turtle.&#8221; What does &lt;em&gt;that&lt;/em&gt; turtle stand on? &#8220;It&#8217;s just turtles all the way down!&#8221;&lt;/p&gt;


	&lt;p&gt;If you Google the phrase, you get a lot of references to Stephen Hawking and Bertrand Russell. Great men these may be, but I find the setting up of a straw man by reasoning from a literal interpretation of a mystical concept a bit silly, and strangely akin to the claim some folks make to a belief in a &#8220;literal&#8221; interpretation of the (old English translation of the Latin translation  of the Greek/Hebrew/Aramaic) bible. But then, science as an intolerant religion, and what it means to be truly rational&#8230; that&#8217;s a whole &#8216;nother post.&lt;/p&gt;


	&lt;p&gt;Dig a bit deeper, and you&#8217;ll find references to John Grinder and Gregory Bateson. Now you&#8217;re getting closer to what I mean. There is something deeply moving in the contemplation of infinite recursion. It is one way to come face to face with a mystery, that everything is a construct of my consciousness except right here, right now. That I don&#8217;t know where my consciousness came from, that it seems to stand on the back of the previous moment&#8217;s consciousness, which stands on the back&#8230;&lt;/p&gt;


	&lt;p&gt;&#8220;This statement is false.&#8221; Suppose that the preceeding statement is true, then it can&#8217;t be true because it says that it is false. OK then, supposing it is false, then it must be true because it says that it is false. While you&#8217;re thinking about that, someone kicks you in the shins.&lt;/p&gt;


	&lt;p&gt;Here&#8217;s a couple of quotes&lt;sup&gt;&lt;a href=&quot;#fn1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; from the truly mystical mathematician G. Spencer Brown:&lt;/p&gt;


	&lt;p&gt;&#8220;A mystic, if there is such a person, is not a person to whom everything is mysterious. He is a person to whom everything is perfectly plain.&#8221;&lt;/p&gt;


	&lt;p&gt;&#8220;Those of us who have gone back and remembered our births, remembered what we knew, and remembered the covenant we then made with those standing around our cradle, the realization that we now have to forget everything and live a life&#8230;&#8221;&lt;/p&gt;


	&lt;p&gt;&lt;sup&gt;1&lt;/sup&gt; &lt;a href=&quot;http://www.lawsofform.org/aum/&quot;&gt;http://www.lawsofform.org/aum/&lt;/a&gt;&lt;/p&gt;
          </content>  </entry>
</feed>
