Tuesday, July 27, 2010
pay for your lag?
what does it mean for a virtual world to be open?
Monday, July 19, 2010
VWRAP essentials : capabilities
{
from: "Meadhbh Oh",
message: "I'm giving 50 L$ to anyone who IMs me in the next 5 minutes!"
}- service request come into http://service.example.org/s/foo/Meadhbh
- http://service.example.org/s/foo/ redirects with a 302 to http://foo.cthulhos.com/Meadhbh
- http://foo.cthulhos.com/Meadhbh responds with a 401 getting the client to resubmit the request with a WWW-Authenticate: header.
- the client resubmits to http://foo.cthulhos.com/Meadhbh with the proper WWW-Authenticate: header, but remember, these are example.org's customers, so
- http://foo.cthulhos.com/Meadhbh sends a message to a private interface on example.org, asking it to authenticate the user credentials.
- assuming the client is using valid credentials, example.org responds to cthulhos.com with the digital equivalent of a thumbs up, and finally...
- http://foo.cthulhos.com/Meadhbh responds to the request.
- a client logs in at http://service.example.org/s/authme and asks for a capability to use a particular service
- http://service.example.org/s/authme verifies the user's credentials and verifies the user can access that service
- http://service.example.org/s/authme sends a request to a private interface on cthulhos.com asking for the capability.
- cthulhos.com generates the unguessable capability http://foo.cthulhos.com/EE409B12-6E9B-4F5B-90BF-161AE5DE410C and returns it to http://service.example.org/s/authme
- http://service.example.org/s/authme returns the capability http://foo.cthulhos.com/EE409B12-6E9B-4F5B-90BF-161AE5DE410C to the client
- the client uses the capability http://foo.cthulhos.com/EE409B12-6E9B-4F5B-90BF-161AE5DE410C to access the sensitive resource.
{
agent_name: "Meadhbh Oh",
authenticator: {
type: "hash",
algorithm: "md5",
secret: "i1J8B0rOmekRn8ydeup6Dg=="
}
} {
condition: "success",
agent_seed_capability: "https://example.org/s/CF577955-3E0D-4299-8D13-F28345D843F3"
} {
capabilities : [
"profile/update",
"groups/search"
]
} {
capabilities : {
profile/update : "http://service.example.org/user/35A59C5D-315C-4D50-B78D-A38D41D2C90A",
groups/search : "http://cthulhos.com/8579CE1F-9C05-43E8-8677-A645859DCD64"
}
}Thursday, July 15, 2010
abstract resource definitions vs. LLIDL
&info = {
name : string,
status_uri : uri
enroll_uri : uri
login_uri : uri
}
%% site_info << &info- abstract type system
-
as mentioned above, the abstract type system defines a core set of types and type behavior. types are intended to be "concretized" in programming languages like C, Java, Python, whatever. we create an "abstract" type system so we're free to define the type behavior we want while not being tied to type behavior of a particular implementation language. individual implementers are responsible for ensuring that type semantics are consistent with the spec.
for example, imagine you were developing an application using an embedded 8 bit microprocessor and there was a protocol flow that involved incrementing an integer. a client might send you a 32 bit integer, assuming you would increment it. you would be responsible for modeling the behavior of a 32 bit integer despite the fact your micro-controller probably only natively knows about 16 bit ints.
- abstract resource definition
the abstract resource definition is sort of like the abstract type system for collections. we define a resource as being either an individual item (a boolean, integer, etc.) or we define it as being a map or an array. the abstract resource definition system allows protocol developers to define the "shape" of resources. but because they are dynamic, implementations must allow for the type of a resource to differ from it's definition and for elements in map to be added and removed.
for example, you may want to define the following resource to describe an user logged into a system:
RESOURCE agent {
name string,
identifier uri,
current_location uri
}the abstract resource definition is used to group named data elements together into a dynamic structure. these structures will later be used by the abstract interaction definition.
- transfer syntax (aka serialization scheme)
-
these are basically the three serialization schemes defined in the type-system draft: XML, JSON and Binary. they define how structured data is serialized into an octet string in preparation for transmission across a network. for example, the resource defined above might be serialized like this:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE map PUBLIC
"+//IDN meadhbh.org//xxdsd 0.1//EN"
"http://home.meadhbh.org/xml/xxdsd/0.1/xxdsd.dtd">
<map>
<key>name</key>
<string>Meadhbh Oh</string>
<key>identifier</key>
<uri>http://world.secondlife.com/resident/6e7477a7-2de5-4660-bc83-4a47096a18f0</uri>
<key>current_location</key>
<uri>http://world.secondlife.com/place/65f385f0-691c-5755-9ef0-15f3bb05c8b7</uri>
</map> - abstract interaction definition
-
LLIDL currently defines access verb sets that are tied to HTTP verbs. if we want to be able to access resources using multiple transports, this is wrong. i propose we define an abstract interaction description "language" that is later mapped to a particular transport.
i propose we have five "abstract" verbs: CREATE, READ, UPDATE, DELETE and EVENT. the first four should be pretty straight forward. They're used to create resources, read and write them and then maybe delete them. the last verb, EVENT, is used to define a resource an entity may receive without requesting it. things like object updates, incoming message session requests, etc.
- transport mapping
-
the transport mapping maps abstract verbs from the abstract interaction description language to concretized protocol flows in the transport. so, for instance, you may use this to say that CREATE abstract access methods map to a POST verb in HTTP or that an EVENT message is delivered via the HTTP event queue.
Monday, July 5, 2010
new VWRAP internet drafts published
Wednesday, June 30, 2010
second life : there can be only one?
the foreground lights dim as the camera closes in on philip linden (portrayed by christopher lambert.) viewable only in silhouette now, we see an exhausted fighter, his sword already falling from his hands. the decapitated heads of vivaty, metaplace and forterra are still rolling as the bodies that once supported them fall in slow motion to the ground. lightning dances around the industrial setting, lighting philip's face for a moment. queen's "princes of the metaverse" plays in the background as the words of mitch kapor (played by sean connery) echo in the ears of our protagonist... "there can be only one."