<?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>TATWD</title>
	<atom:link href="http://tatwd.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://tatwd.net</link>
	<description>=victor.grey weblog</description>
	<lastBuildDate>Fri, 10 Feb 2012 16:43:16 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Thinking about PAX</title>
		<link>http://tatwd.net/2012/02/thinking-about-pax/</link>
		<comments>http://tatwd.net/2012/02/thinking-about-pax/#comments</comments>
		<pubDate>Fri, 10 Feb 2012 01:56:50 +0000</pubDate>
		<dc:creator>victor</dc:creator>
				<category><![CDATA[Tech Notes]]></category>

		<guid isPermaLink="false">http://tatwd.net/?p=71</guid>
		<description><![CDATA[Departing from my format of once or twice a year postings on random musings and life-changing events, I&#8217;m going to start a series (i.e. possibly more than one) of posts on technical stuff I&#8217;ve been thinking about. I was at the Planetwork N2N meeting last month, and Mike Schwartz included in his presentation a recommendation [...]]]></description>
			<content:encoded><![CDATA[<p>Departing from my format of once or twice a year postings on random musings and life-changing events, I&#8217;m going to start a series (i.e. possibly more than one) of posts on technical stuff I&#8217;ve been thinking about.</p>
<p>I was at the Planetwork N2N meeting last month, and <a href="http://www.gluu.org/?p=40">Mike Schwartz</a> included in his presentation a recommendation that people have a look at the <a href="http://openid.net/connect/">OpenID Connect</a> standard. He thought it was a worthy simple replacement for the complexities of SAML in many cases. That evening when I got home, there was an email in my inbox to the IDCommons list from Mike Jones pointing to an article by Nat Sakimura called <a href="http://nat.sakimura.org/2012/01/20/openid-connect-nutshell/">OpenID Connect in a nutshell</a>. (This cast of characters will be familiar to current or former participants of the <a href="http://www.internetidentityworkshop.com/">Internet Identity Workshops</a> and/or the Oasis XRI/XDI technical committees.)</p>
<p>When something new (to me) gets mentioned twice in one day by independent sources, it&#8217;s the virtual equivalent of the proverbial book falling off the shelf and hitting me in the head &#8212; a &#8220;pay attention to this&#8221; message from the universe. So I read Nat&#8217;s article carefully.</p>
<p>As I said to Mike Schwartz when I saw him again two days later at a different meeting, I liked everything I&#8217;d read so far about OpenID Connect except the OpenID part. His response was that the only part of OpenID that remained in OpenID Connect was the name, which seems to be true. As Nat says in his post, &#8220;To turn an OAuth 2.0 request into an OpenID Connect request, simply include openid as one of the requested scopes.&#8221; The response then contains the standard OAuth access token, but also an &#8220;id token&#8221;. If I understand the point correctly, the server is basically saying that along with an access token to acquire data about this user, I&#8217;m certifying with the id token that this user was able to authenticate with me &#8212; thus facilitating SSO.</p>
<p>Evidently, the reason I needed to pay attention to OpenID Connect was to stimulate me to flesh out the affiliation feature of <a href="http://metaconnectors.com">MetaConnectors</a>. The point of this article is to propose what I think is an even simpler and imho better method for SSO and data exchange authorization than OpenID Connect &#8212; in the special case of peer affiliates. Until dissuaded I&#8217;m going to call it PAX, as in P(p2p and pki)A(affiliate)X(whatever). It&#8217;s also the Latin word for peace.  <img src='http://tatwd.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Peer-to-peer Public Key Infrastructure (PKI) is at the core of PAX. MetaConnectors publishes a public key (in the form of an X509 cert encapsulated in a JSON XRD) for each network and each user, for example <a href="https://admins.metaconnectors.com/victor/xrd">this</a>, or for human readability <a href="https://admins.metaconnectors.com/victor/xrd.html">this</a> (forgive the self-signed certs and resulting browser warnings &#8211; these will become CA-signed certs before we go into production). The corresponding private keys are held in our database. This is quite easy to do &#8212; all the popular programming languages support OpenSSL, and OpenSSL creates key pairs and reads and writes various types of certs. I chose X509 as the most venerable and familiar certificate format &#8211; it is after all just a standard container that includes the public key and some metadata about it. Ruby has good OpenSSL support, although the documentation for it is virtually nonexistent. I wrote and open-sourced a <a href="https://github.com/victorgrey/cert_lib">library</a> to wrap the parts I needed, just to make it easier to understand and use.</p>
<p>PAX also makes use of the <a href="http://tools.ietf.org/html/draft-jones-json-web-token-07">JSON Web Token</a> (JWT). One of the things I liked best about OpenID Connect was the use of the JWT, which is basically a string divided into three fields (by &#8220;.&#8221; dots), where (when used in signature format) the third field is a base64url encoded signature over the first and second fields. The second field is a base64url encoded version of the plaintext JSON data structure. The first field is a header field with algorithm info, also in base64url encoded JSON. So clean, so simple. (Compare with the horror of XML DSIG.)</p>
<p>Other relevant standards are the <a href="http://docs.oasis-open.org/xri/xrd/v1.0/xrd-1.0.html">Extensible Resource Descriptor</a> (XRD) in <a href="http://hueniverse.com/2010/05/jrd-the-other-resource-descriptor/">JSON format</a> (called a JRD), and <a href="http://self-issued.info/docs/draft-jones-simple-web-discovery.html">Simple Web Discovery</a> (SWD).</p>
<p> Affiliates in the PAX system have mutually agreed to affiliate beforehand by an out-of-band process (could be a phone call or email, or a more automated process involving web forms). As part of that process they have exchanged <a href="http://tools.ietf.org/html/draft-jones-simple-web-discovery-02">Simple Web Discovery</a> and possibly <a href="http://tools.ietf.org/html/draft-hammer-hostmeta-05">host-meta</a> URIs, which in turn supply various other service URIs used in the examples below. In a peer system each party can act as a client &#8212; the one who requires data, or a server &#8212; the one who offers data. I&#8217;ll describe several scenarios, and how PAX is used in each. In each case, a person who is participating in this process will be called a &#8220;user&#8221; and an organization or collection of users participating in the peer system as a collective entity will be called a &#8220;network&#8221;. For these examples we will imagine two affiliated networks, the Association of Affiliates (AOA) and the Network for a Better Planet (NBP). For the sake of clarity, the examples gloss over many details, some of which I&#8217;ll address in a later post.</p>
<p>Scenario 1. Client initiates single-sign on:</p>
<blockquote class="wide">
<p>In this scenario, a user registered at NBP starts at the website of affiliated network AOA, wishing to be authorized by AOA as an affiliated user. AOA offers an affilate login form that says something like &#8220;Login as a participant in&#8230;&#8221; followed by a selection list of affiliated networks. The user chooses NBP from this list, which causes the user&#8217;s browser to be redirected to the NBP authentication URI, constructed like this (line breaks added):</p>
<pre>https://nbp.org/authentication?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.
eyJpc3MiOiJhb2Eub3JnIiwiaWF0IjoxMzI4NzE2MjIzLCJleHAiOjEzMjg3MTY1MzMsImp
0aSI6IlZUT2FCdEY2enRmR3ZBIiwiYXVkIjoibmJwLm9yZyJ9.
n53mdKp7NRcIiAd_USwqE1PnUNK-R5eUYHXtAkopjsyAba1Oi_ji7Yc3xzAr0CQMZrQZ5je
vihIAeHinUiTnsr0ua-cIFXEu45vwMa5c7gmm281ugkGMMEmD5wf-v4xI8HYjjPTnAjmAYn
G_71Jk3xFLewqH8NQxoDtarYEPCayZFz7pS-MV52OjLJRI4hh3Z4AHGnDMXm1j3NlMjXfMZ
B_A-yk-QSxJmLcFlzUhr6IPwm6fk58ZfkIyEyppyPJ_UdgFM_NDZtCJXmIWabsBzrIQH0Tg
254qTZhWunE-u79P6qxm1p2kclzrHntKUiDtxYb7ktile2AHaJqZbGliCg</pre>
<p>Now, that&#8217;s one ugly URI to human eyes, but trust me it&#8217;s really a thing of beauty. It consists of NBP&#8217;s authentication URI template &#8220;https://nbp.org/authentication?jwt={jwt}&#8221; (discoverable via Simple Web Discovery and host-meta), with the {jwt} template variable replaced by an actual JSON Web Token. If you base64url decode the second field you get the JSON payload, aka the &#8220;JWT Claims Set&#8221; (here formatted for readability):</p>
<pre>{
  "iss":"aoa.org",
  "iat":1328716223,
  "exp":1328716533,
  "jti":"VTOaBtF6ztfGvA",
  "aud":"nbp.org"
}</pre>
<p>The keys in the above example are all JWT Reserved Claim Names. They translate as follows: &#8220;iss&#8221; denotes the issuer of the claims set, &#8220;iat&#8221; is the &#8220;issued at&#8221; timestamp, &#8220;exp&#8221; is the time beyond which the JWT is no longer valid, and &#8220;aud&#8221; is the audience the claim set is meant for. A random value unlikely to repeat, sometimes known as a nonce, is here called a JWT ID, or &#8220;jti&#8221;. Taken together and signed, these values provide resistance to replay attacks.</p>
<p>The JWT is validated by the server by first retrieving AOA&#8217;s public key, either from cache if it hasn&#8217;t exceeded its expiry time, or via AOA&#8217;s JRD, then verifying the signature in the request and ensuring that the timestamps are within range, and that the jti hasn&#8217;t been seen before. The jti nonces should be kept by the server for some small increment beyond the expiration timestamp, so that the same nonce and timestamp combination can never be used again. I&#8217;ll refer to this whole sequence as &#8220;verifying the JWT&#8221; in the following examples.</p>
<p>In the examples that follow, I will also be adding Private Claim Names to the claims sets, i.e. names that are defined by PAX. I won&#8217;t hurt your eyes with any more JWT&#8217;s, but just show the URI templates and the JSON claims sets.</p>
<p>To proceed with Scenario 1, when the NBP authentication server receives the above request, it verifies the JWT. Now NBP knows that this request came from AOA. There are some phishing mitigation possibilities inherent which I will discuss in a later post. NBP then authenticates the user via whatever means NBP uses for that (probably user name and password for now). NBP then redirects the user to AOA&#8217;s authorization URI (cached or looked up), constructed like this:</p>
<pre>https://aoa.org/authorization?jwt={jwt}</pre>
<p>with a JWT Claims Set like this:</p>
<pre>{
  "iss":"nbp.org",
  "iat":1328716253,
  "exp":1328716553,
  "jti":"wFnCyBMkqH33YQ",
  "aud":"aoa.org",
  "prn":"nbp.org/victor#1316743228"
}</pre>
<p>Here the &#8220;prn&#8221; key is a JWT Reserved Claim Name denoting the subject (principal) of the claim. It should be a persistant non-reassignable pseudonym for the user in question. More on the way I&#8217;m constructing a non-reassignable pseudonym later.</p>
<p>When the user arrives at AOA&#8217;s authorization URI with those parameters, AOA proceeds as follows: first retrieve NBP&#8217;s public key, then verify, decode and validate the JWT. The user can then be considered by AOA to have been authenticated by NBP.</p>
</blockquote>
<p>Scenario 2. Server initiates single-sign on:</p>
<blockquote class="wide">
<p>The first scenario, where the user is redirected by the client contains inevitable phishing vulnerabilities. They can be mitigated somewhat, but since all phishing mitigation schemes require an alert user, and all users are at times tired, distracted and/or in a hurry, the danger can never be entirely eliminated. Safer for the user (and more efficient all around) is to begin SSO at the server, as follows: the user logs into a network where they have established an account directly, in this case nbp.org. The NBP website has a page listing affiliated networks. To SSO into an affiliated network, the user simply clicks on one of these links. This causes the user to be redirected to the chosen affilate&#8217;s authorization URI, constructed exactly as in the second part of Scenario 1, and the affiliate authorizes them the same way.</p>
</blockquote>
<p>Scenario 3. Client requests data that is pre-authorized for affiliates:</p>
<blockquote class="wide">
<p>AOA wishes to access data that is under the control of an NBP user (profile data, posts, pages, or whatever). The user has previously set permissions on their NBP account that permit affiliate organizations to access some or all of the data that they&#8217;ve entered at NBP. In this scenario the user is not necessarily present although they may be, but via previous interaction, AOA knows the user&#8217;s identifier at NBP. AOA sends a request to NBP&#8217;s data access URI constructed like this:</p>
<pre>https://nbp.org/data_access?jwt={jwt}</pre>
<p>with a JWT Claims Set like this:</p>
<pre>{
  "iss":"aoa.org",
  "iat":1328818771,
  "exp":1328819071,
  "jti":"njbcHnRj7Nv4NA",
  "aud":"nbp.org",
  "prn":"nbp.org/victor#1316743228",
  "scope":"profile"
}</pre>
<p>Here we have added a &#8220;scope&#8221; parameter, and its semantics and syntax are exactly the same as in OAuth. When NBP receives this request, it validates the JWT, then checks to see if this user has pre-authorized the release of all or part of the requested data to affilate organizations. NBP then responds with a JWT, the claims set of which includes a &#8220;scope&#8221; array, and a &#8220;data&#8221; object containing the requested data if authorized. The scope value should be an array of objects, one for each scope requested. The possible values for each scope object are &#8220;allowed&#8221;, &#8220;denied&#8221;, or &#8220;partial&#8221;. If no data was allowed to be sent consistent with the user&#8217;s pre-authorized settings, the data object will be null.</p>
</blockquote>
<p>Scenario 4. Client requests data that requires user authorization:</p>
<blockquote class="wide">
<p>This scenario most closely resembles the primary use case for OAuth. We accomplish it using almost exactly the same procedure as outlined in Scenario 3, except that the user must be present at AOA, and instead of AOA sending a data access request directly to NBP, it redirects the user to NBP with a data access request constructed as in Scenario 3, with the addition of a &#8220;request&#8221; value in the claims set, a token with which AOA can identify an asynchronous response. NBP must then present a UI to the user that shows what is being requested and by whom, and affording the user a way to approve or deny part or all of the request. Once the user has made her choices, she is redirected back to AOA&#8217;s data-available URI with a new JTW containing a claims set like this:</p>
<pre>{
  "iss":"nbp.org",
  "iat":1328818771,
  "exp":1328819071,
  "jti":"njbcHnRj7Nv4NA",
  "aud":"aoa.org",
  "prn":"nbp.org/victor#1316743228",
  "scope":"profile",
  "request":"PpLfO0bi8CKBCA",
  "authorization":"allowed"
}</pre>
<p>The scope and request values repeat the corresponding values from the request, so that AOA can identify which request is being responded to. The possible values for the &#8220;authorization&#8221; parameter are &#8220;allowed&#8221;, &#8220;denied&#8221;, or &#8220;partial&#8221;, with the possible addition of a second space-separated value of &#8220;permanent&#8221;. The presence of the &#8220;permanent&#8221; value indicates that the user has chosen to permanently allow the selected access to the requesting client. The absence of the &#8220;permanent&#8221; value implies that a one-time only access has been made available. In that case, the server should have set temporary permissions for the selected data for the client organization only, which are then cancelled after one access.</p>
<p>The client may then make a new data request just as in Scenario 3.</p>
</blockquote>
<p>Scenario 5. Server pushes data to subscribed clients.</p>
<blockquote class="wide">
<p>This scenario makes use of the <a href="http://www.eventedapi.org/spec">Evented API</a> spec, which is an elaborated and constrained use of the <a href="http://wiki.webhooks.org/w/page/13385124/FrontPage">Webhooks</a> proposal.</p>
<p>One typical use case would be that AOA has acquired a copy of an NBP user&#8217;s profile data (using Scenario 3 or 4), and wishes to keep that profile copy current when the NBP user updates their authoritative profile at NBP.</p>
<p>AOA for example can subscribe to be notified of changes to the profile of the NBP user &#8220;nbp.org/victor#1316743228&#8243;, by sending an HTTP POST request to the NBP event-subscribe uri, with the POST body containing a JWT that might look like this:</p>
<pre>{
  "iss":"aoa.org",
  "iat":1328820639,
  "exp":1328820939,
  "jti":"CLQ5kLG5G7nG3g",
  "aud":"nbp.org",
  "prn":"nbp.org/victor#1316743228",
  "scope":"profile",
  "subscribe":true,
  "notify":"https://aoa.org/data-available"
}</pre>
<p>Whenever an NBP user that AOA subscribes to updates their profile, NBP sends a POST request to the &#8220;notify&#8221; URI with a claims set like this:</p>
<pre>{
  "iss":"nbp.org",
  "iat":1328820951,
  "exp":1328821251,
  "jti":"lCZTYcO1XIBstQ",
  "aud":"aoa.org",
  "prn":"nbp.org/victor#1316743228",
  "scope":"profile",
  "_domain":"nbp.org",
  "_name":"update",
  "_timestamp":1328820950,
  "urls":["https://nbp.org/data_access?jwt={jwt}]
}</pre>
<p>The last 4 keys in the above JWT are from the <a href="http://www.eventedapi.org/spec">Evented API</a> spec. AOA may then fetch the updated info using the same method as in Scenario 3.</p>
<p>Other use cases that could be serviced include users wishing to be notified when specific users from an affiliated network post new content, or when there is news from an affiliated network itself.</p>
</blockquote>
<p>Once again, this proposal relates to the special case of data exchange and SSO between affiliate organizations and their participants, and serves their need to identify and securely interact with one another. I&#8217;ll follow up soon with an elaboration on some of the details of this proposal. I&#8217;ve added a JSON Web Token module to the CertLib ruby gem at <a href="https://github.com/victorgrey/cert_lib">https://github.com/victorgrey/cert_lib</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://tatwd.net/2012/02/thinking-about-pax/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Still here&#8230;</title>
		<link>http://tatwd.net/2011/02/still-here/</link>
		<comments>http://tatwd.net/2011/02/still-here/#comments</comments>
		<pubDate>Sat, 26 Feb 2011 20:22:21 +0000</pubDate>
		<dc:creator>victor</dc:creator>
				<category><![CDATA[Random Musings]]></category>

		<guid isPermaLink="false">http://tatwd.net/?p=51</guid>
		<description><![CDATA[It&#8217;s not that often that I can come up with a triple-entendre. So first, it&#8217;s been quite a while since I&#8217;ve posted to this blog, but I&#8217;m still here. Secondly, I&#8217;ve just had an interesting experience. I woke up last Monday morning feeling fine. I worked for an hour or so on MetaConnectors, tracking down [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s not that often that I can come up with a triple-entendre. So first, it&#8217;s been quite a while since I&#8217;ve posted to this blog, but I&#8217;m still here.</p>
<p>Secondly, I&#8217;ve just had an interesting experience. I woke up last Monday morning feeling fine. I worked for an hour or so on MetaConnectors, tracking down the cause of a failing test and writing a few more.</p>
<p>Then Carol and I did our morning meditation, and I showered, did my morning exercises, and went downstairs to eat breakfast. With the first few bites of breakfast I started feeling intense stomach pain. I couldn&#8217;t eat any more. So I went back upstairs to lie down, thinking it would pass in a little while.</p>
<p>It didn&#8217;t pass. By afternoon it was only getting worse. Finally around 5pm I called our health plan advice nurse, and after asking a bunch of questions she sternly ordered me to report to the hospital emergency room to be evaluated.</p>
<p>Carol drove me to the ER, I walked in and stood in line to be seen, and was brought into an exam room for an EKG and blood tests. I was quite surprised when the doctor came in and informed me that I was having a heart attack. Mind you, I was not weak or dizzy, had no trouble breathing, no &#8220;elephant sitting on my chest&#8221; or any of the symptoms I&#8217;d read about. Just intense pain in my lower chest in the area of my stomach, radiating up my esophagus into my jaw and into my left arm.</p>
<p>But, I was told, there is a very specific enzyme that the heart releases when it is in trouble, that never comes from anything else, and I had a high level of it in my blood. And although my first EKG had looked pretty normal to them, they did another and were now seeing changes.</p>
<p>So it was off to the cardiac catheter laboratory with me. When you&#8217;re lying flat on your back on a wheeled bed being pushed through the halls of a hospital, all you can see is the ceiling passing by. I recognized the movie cliché right away &#8212; I&#8217;ve seen this view of the corridor ceiling lights passing by in more than one movie.</p>
<p>Entering the &#8220;cath lab&#8221; as they called it was a different movie &#8212; the one where you&#8217;ve been abducted by aliens or robots and you&#8217;re in a room with an array of techno-medieval devices hanging off the ceiling.</p>
<p>There were a lot of people around me being very busy &#8212; I don&#8217;t know how many since all I could see was the impressive ceiling. At the time all this was happening I didn&#8217;t feel the least bit scared, just alert (I thought) and rather detached. But then, who knows what kind of drugs they were pumping into me through the three iv&#8217;s they had started. There was an electronically amplified voice (perhaps someone in another room?) commenting on the proceedings. There was a doctor who began describing what he was doing in truly impenetrable jargon, and the voice would repeat what he said and sometimes ask a question. I couldn&#8217;t feel what they were doing to me at all. Every now and then someone would ask me how I was doing, and not knowing what else to say (I&#8217;m in an alien abduction movie and my stomach hurts like hell) I would say &#8220;OK.&#8221;</p>
<p>After what seemed like 10 or 15 minutes had passed (it was really more than an hour), someone asked me if my pain was any better. At that very moment it was worse, a lot worse. &#8220;It should be better&#8221; one of the doctors said rather querulously. Then there ensued a bunch more jargon, and then lo, it was getting better.</p>
<p>With the release of the pain I must have drifted off, because the next thing I remember is seeing Carol&#8217;s face looking down at me. And the next thing after that was a sweet-natured young ICU nurse introducing herself to me as my nurse for the rest of the evening. It was 1:30am.</p>
<p>I&#8217;m told that one of my coronary arteries had been 100% blocked, and another one 80% blocked. I am now the proud possessor of two PROMUS Everolimus Eluting Coronary Stents, and the paperwork to prove it should you doubt me.</p>
<p>What to say about all this? For the 3 days that I was in the hospital afterwards, I was in good spirits and cheerfully demanding that they let me out now &#8212; I&#8217;m fine! Once I got home, I started on a roller coaster of emotion. Something like this changes who you think you are. It&#8217;s a new phase of life, a new archetype. My previous method for dealing with any physical pain was to first try to push through it, and if that didn&#8217;t work go lie down until it went away. For the first time in my life that modus operandi didn&#8217;t work for me. I&#8217;m no longer invincible.</p>
<p>Ah, well. There&#8217;s still an anti-social network generator to launch, several books to write, a wife to be devoted to, a daughter to admire, grandchildren to adore, friends to have intellectual jousts with. A life that I&#8217;m very far from done with.</p>
<p>Which brings me to my third entendre. In the very first post to this blog, I quoted the mathematician G. Spencer Brown<sup>1</sup>:</p>
<blockquote><p>&#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;</p></blockquote>
<p>There&#8217;s an ellipsis at the end of that quote that carries a lot of meaning. The only way I know of to embrace it is to &#8230;be still, &#8230;be here.</p>
<p><sup>1</sup> <a href="http://www.lawsofform.org/aum/">http://www.lawsofform.org/aum/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://tatwd.net/2011/02/still-here/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Surrendering to WordPress</title>
		<link>http://tatwd.net/2010/07/surrendering-to-wordpress/</link>
		<comments>http://tatwd.net/2010/07/surrendering-to-wordpress/#comments</comments>
		<pubDate>Fri, 23 Jul 2010 14:21:28 +0000</pubDate>
		<dc:creator>victor</dc:creator>
				<category><![CDATA[Tech Notes]]></category>

		<guid isPermaLink="false">http://wp.tatwd.net/?p=33</guid>
		<description><![CDATA[The previous incarnation of this blog was, among other things, a software experiment. I wanted to learn about CouchDB, so I wrote a simple blog app in Ruby on Rails, using CouchDB as a back-end. Well, CouchDB turned out to be a disappointment in several ways. First of all when I did some simple benchmarking [...]]]></description>
			<content:encoded><![CDATA[<p>The previous incarnation of this blog was, among other things, a software experiment. I wanted to learn about <a href="http://couchdb.apache.org/">CouchDB</a>, so I wrote a simple blog app in <a href="http://rubyonrails.org/">Ruby on Rails</a>, using CouchDB as a back-end.</p>
<p>Well, CouchDB turned out to be a disappointment in several ways. First of all when I did some simple benchmarking against a real application, CouchDB was surprisingly slow. Considerably slower in fact that the default Rails ActiveRecord and MySQL. Secondly, the CouchDB paradigm of saving a javascript function for every desired query gets tiresome after not too long.</p>
<p>I&#8217;m still bullish on the <a href="http://en.wikipedia.org/wiki/NoSQL">NoSQL</a> notion though, so I&#8217;ve moved on to <a href="http://www.mongodb.org/">MongoDB</a>. I&#8217;ve been developing <a href="http://metaconnectors.com/info/difference">the next small thing in anti-social networks</a> using MongoDB with Rails 3 and the <a href="http://mongoid.org/">Mongoid</a> object mapper, and so far I&#8217;m very happy with it. It&#8217;s <strong>fast</strong>, it&#8217;s flexible, and it lends itself to modeling data in a way that feels just so. MongoDB is developed as open source by a small engineering-driven company called <a href="http://www.10gen.com/">10gen</a>, and there seems to be a vibrant community of developers springing up around it. There&#8217;s even a monthly <a href="http://www.meetup.com/San-Francisco-MongoDB-User-Group/">meetup</a> in SF.</p>
<p>Meanwhile, I had this blog backed by CouchDB and no longer any good reason to incur the overhead of running CouchDB. Having approximately no interest in writing yet another blog app, I&#8217;ve decided to follow the path of least resistance off the cliff and bring up TATWD in WordPress.</p>
<p>Importing the posts from the previous blog was not all that easy, it being an idiosyncratic home-made application, and most of those posts just traced my own process through the world of software and identity anyway. Not the kind of literature that improves with age. So I just copy-and-pasted the few posts that I though I might conceivably want to refer to some day, and am letting the rest die gracefully. I hope the readers of this blog (yes, both of you) don&#8217;t mind too much.</p>
]]></content:encoded>
			<wfw:commentRss>http://tatwd.net/2010/07/surrendering-to-wordpress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Anti-Social Networks: the next small thing</title>
		<link>http://tatwd.net/2009/10/anti-social-networks-the-next-small-thing/</link>
		<comments>http://tatwd.net/2009/10/anti-social-networks-the-next-small-thing/#comments</comments>
		<pubDate>Thu, 29 Oct 2009 22:44:29 +0000</pubDate>
		<dc:creator>victor</dc:creator>
				<category><![CDATA[Tech Notes]]></category>

		<guid isPermaLink="false">http://tatwd.net/?p=46</guid>
		<description><![CDATA[Recently a friend sent me a link to the FOAF+SSL site. This page and its linked articles were an entertaining journey into virtuoso hand-waving. A protocol that depends on having all of your users create FOAF files, um, somewhere, and then generate self-signed certificates and install them in their browsers? What user population did you have [...]]]></description>
			<content:encoded><![CDATA[<p>Recently a friend sent me a link to the <a href="http://esw.w3.org/topic/foaf+ssl">FOAF+SSL site</a>. This page and its linked articles were an entertaining journey into virtuoso hand-waving. A protocol that depends on having all of your users create FOAF files, um, somewhere, and then generate self-signed certificates and install them in their browsers? What user population did you have in mind exactly?</p>
<p>As serendipity would have it, right afterwards I came across an article entitled &#8220;<a href="http://www.pragprog.com/magazines/download/2.pdf">Anti-Social Networks</a>&#8221; by John Shade. It&#8217;s a PDF, so you have to download it and then turn to page 38. Shade is a funny guy, and his article skewers the kind of thinking that went into FOAF+SSL. Here&#8217;s my favorite paragraph:</p>
<blockquote><p>&#8220;It used to be enough to make the software work. But when software is all about human-human interaction, the goal becomes to make the human-human interaction work. And its worse than that, because social software is not about individual users. You have to understand groups, which, it turns out, can&#8217;t be done by understanding an individual user and iterating.&#8221;</p></blockquote>
<p>This of course got me thinking. Everyone wants to build the next big thing. No one seems to be asking whether we really need another big thing.</p>
<p>One capability of the internet that has been celebrated from its inception is that it makes it possible for anyone in the world to connect to anyone else. The first big thing that exploited this was email. The most recent big things are large social networks like MySpace and Facebook. They have their place, but they also create a big problem &#8212; when anyone in the world can connect to you, anyone does.</p>
<p>People often try to filter this problem by creating small ad hoc groups within the open space, and various social software systems facilitate this with varying degrees of transparency and privacy. Smaller networks like <a href="http://livingdirectory.net/">LivingDirectory</a>and <a href="http://www.ning.com/">Ning</a> formalize group creation within their respective networks.</p>
<p>My little epiphany was that this network within which groups are created is an unnecessary construct. Even if a single web service has created many different groups, each group has its own identity and does not need to partake of an artificially created enclosing identity. A group&#8217;s identity is formed by its stated purpose, its history and its participants and their contributions to the group. Since it is possible to move all of these things from one software host to another, the identity of the group does not of necessity have any relationship to its current host, any more than it does to the current hardware it is running on.</p>
<p>The whole notion of user-centric identity has been fraught from the start. The thing is, to be a &#8220;user&#8221; you have to be a user of something. The something of which you are a user is as much a part of the online identity created as you are. This is imho the misdirection facing efforts such as the <a href="http://www.dataportability.org/">Data Portability Project</a>.</p>
<p>Your identity in what we are pleased to call the &#8220;real world&#8221; is based on your physical body. It came into being when you were born, and it will cease when you die. You can have many identity documents, but they presumably all point to one human individual. You only get one body (at a time). Online identities however are disembodied, and you can have as many as you like, but you probably have to share them with the group they exist within.</p>
<p>Stand-alone groups only need a few rules and a protocol. Some rules needed are: who can join and how; authorizations required for different kinds of access; how content moderation happens. The protocol must define how groups can affiliate with each other to share data if they wish, and a serialization standard for the group data and rules so they can be moved from one host to another.</p>
<p>The ability to affiliate means that a group doesn&#8217;t have to choose between being a virgin or a slut, i.e. a walled garden or globally available.</p>
<p>Shade uses the phrase &#8220;anti-social network&#8221; ironically. I&#8217;m going to appropriate it to mean (slightly less ironically) networks that don&#8217;t want to connect to the whole world, just to their own and affiliated participants.</p>
]]></content:encoded>
			<wfw:commentRss>http://tatwd.net/2009/10/anti-social-networks-the-next-small-thing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Tyranny of Structurelessness</title>
		<link>http://tatwd.net/2008/09/the-tyranny-of-structurelessness/</link>
		<comments>http://tatwd.net/2008/09/the-tyranny-of-structurelessness/#comments</comments>
		<pubDate>Thu, 25 Sep 2008 05:57:32 +0000</pubDate>
		<dc:creator>victor</dc:creator>
				<category><![CDATA[Random Musings]]></category>

		<guid isPermaLink="false">http://wp.tatwd.net/?p=3</guid>
		<description><![CDATA[I stumbled across this article years ago, and then lost track of where I had found it. I just rediscovered the original on the author&#8217;s website It&#8217;s written about the Women&#8217;s Liberation Movement of the sixties (something about which I am not completely unaware, having been in a former life married to one of the [...]]]></description>
			<content:encoded><![CDATA[<p>I stumbled across <a href="http://www.jofreeman.com/joreen/tyranny.htm">this article</a> years ago, and then lost track of where I had found it. I just rediscovered the original on the author&#8217;s website</p>
<p>It&#8217;s written about the Women&#8217;s Liberation Movement of the sixties (something about which I am not completely unaware, having been in a former life married to one of the founders of the local Women&#8217;s Liberation Organization in New Haven, Connecticut, a role referenced in the article), but it is a generalizable and brilliant analysis.</p>
<p>Try reading it while mentally substituting IIW/Identity Commons/Data Portability/etc for the women&#8217;s groups the author discusses.</p>
]]></content:encoded>
			<wfw:commentRss>http://tatwd.net/2008/09/the-tyranny-of-structurelessness/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Psychic birds</title>
		<link>http://tatwd.net/2007/01/psychic-birds/</link>
		<comments>http://tatwd.net/2007/01/psychic-birds/#comments</comments>
		<pubDate>Sun, 07 Jan 2007 13:51:23 +0000</pubDate>
		<dc:creator>victor</dc:creator>
				<category><![CDATA[Futurism]]></category>

		<guid isPermaLink="false">http://wp.tatwd.net/?p=29</guid>
		<description><![CDATA[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. African Grays are very large parrots that are remarkable in a number of ways. They can live to be more than [...]]]></description>
			<content:encoded><![CDATA[<p>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.</p>
<p>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.</p>
<p>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.</p>
<p>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!</p>
<p>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.</p>
<hr />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 &#8211; a sound like water flowing over rocks.</p>
<p>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 &#8211; hard to pin down, and yet very vivid in my memory even many years later. I <em>learned</em> something from those birds that day, something that I don&#8217;t have words for, that can&#8217;t be expressed in words. A <em>connection</em>.</p>
<hr />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 <a href="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&amp;s=books">The Biology of Belief</a> by Bruce Lipton.)</p>
<hr />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.</p>
<p>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.</p>
<p>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.</p>
<hr />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 &#8211; 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 <em>something</em> happened to them. I&#8217;ve worked with psychotics for much of my career. These people are not psychotic, not delusional.&#8221;</p>
<p>I have my own conjecture about it. If there are other civilizations out there in the universe, and it seems almost certain that there <a href="http://www.seti.org/Page.aspx?pid=336">must be</a>, 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 UFO beings are what we call &#8220;psychic&#8221; to an extent far beyond anything we have experienced, in the same way that <em>we</em> are intelligent in a way far beyond anything a chimpanzee has experienced.</p>
<p>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.</p>
]]></content:encoded>
			<wfw:commentRss>http://tatwd.net/2007/01/psychic-birds/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>TATWD? WTF?</title>
		<link>http://tatwd.net/2007/01/tatwd-wtf/</link>
		<comments>http://tatwd.net/2007/01/tatwd-wtf/#comments</comments>
		<pubDate>Wed, 03 Jan 2007 08:16:23 +0000</pubDate>
		<dc:creator>victor</dc:creator>
				<category><![CDATA[Random Musings]]></category>

		<guid isPermaLink="false">http://wp.tatwd.net/?p=13</guid>
		<description><![CDATA[&#8220;The world rests on the back of a giant turtle.&#8221; What does the turtle stand on? &#8220;Another turtle.&#8221; What does that turtle stand on? &#8220;It&#8217;s just turtles all the way down!&#8221; If you Google the phrase, you get a lot of references to Stephen Hawking and Bertrand Russell. Great men these may be, but I [...]]]></description>
			<content:encoded><![CDATA[<p>&#8220;The world rests on the back of a giant turtle.&#8221; What does the turtle stand on? &#8220;Another turtle.&#8221; What does that turtle stand on? &#8220;It&#8217;s just turtles all the way down!&#8221;</p>
<p>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.</p>
<p>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;</p>
<p>&#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.</p>
<p>Here&#8217;s a couple of quotes<sup>1</sup> from the truly mystical mathematician G. Spencer Brown (image added by me):</p>
<blockquote><p>&#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;</p></blockquote>
<blockquote><p><img src="http://wp.tatwd.net/wp-content/uploads/2010/07/Snail.jpg" alt="" align="right" />&#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;</p></blockquote>
<p><sup>1</sup> <a href="http://www.lawsofform.org/aum/">http://www.lawsofform.org/aum/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://tatwd.net/2007/01/tatwd-wtf/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

