I've tried to use extra information in URLs before by slash-delimiting them and all seemed to work well until I ran into situations such as missing data for one of the terms and some URL parsers did not accept the double slash which resulted from the missing field. Another problem exists when extending the definition at a later date, then all parsers that have to deal with the URL have to be modified. After banging my head over these kind if issues I went back and redesigned it to use the &name=value format and I''ve never regretted it since. Parsing it is quite simple in C# with String.Split()<div>
<br></div><div>Given the open source nature of OpenSimulator, I would think diverging definitions would be unavoidable and would likely hinder interoperability unless some means for allowing flexibility was designed in from the start, and I think name-value pairs are a usable means of providing that flexibility.<div>
<br><br><div class="gmail_quote">On Tue, Aug 31, 2010 at 7:53 AM,  <span dir="ltr"><<a href="mailto:diva@metaverseink.com">diva@metaverseink.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div class="im">Hurliman, John wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
It sounds like the decision has been made (or was already made before this discussion started), so on to the next step. Can you (Melanie or Diva) do these two things?<br>
</blockquote>
<br></div>
As I said, the issue was *really* narrow :) Even though the interfaces already account for this, I got scared when I faced the situation of actually creating persistent references to external data. (or, in the case of Simian, creating persistent data structures representing external data, which is similar)<div class="im">
<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
1) Define exactly how the URL is supposed to be parsed. ABNF notation would be preferred, or something equivalent that makes it clear what identifiers are valid or invalid. Or perhaps define any URL as valid like diva suggested, but only parse display names out of specifically crafted URLs. With the suggested format of <a href="http://authority/user/user_id/First+Last" target="_blank">http://authority/user/user_id/First+Last</a> it seems like you would either assume any URL that includes a space in the last section of the path is parsed as a first+last name tuple. (I'm assuming you remove any attached query string before parsing the name.) Or will it look for "user_id" as the second to last segment of the path followed by a path segment containing a space? Obviously it can't expect /user/user_id/First+Last to be anchored at the root of the domain since it won't be possible to generate those URLs on some setups.<br>

</blockquote>
<br></div>
Yes, and that's the crux of the narrow issue in discussion. So let's finish those little details on the IRC, maybe.<div class="im"><br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
2) Standardize the handling of external identities in OpenSim. Go through and clean out the approaches that are no longer being used, such as OpenSim.Framework.Communications.Osp. I can help with this part as I'm always a fan of removing dead code.<br>

</blockquote>
<br></div>
That's the only broad consequence of this issue, and one that I also feel it's very important. I know these global names have been used before -- or maybe never used, but the code is there -- and, even though I didn't remember the syntax, I remembered that it looked nothing like an URI. Thanks, Justin, for explaining. If everyone is ok with the URI syntax, then let's make it consistent across the board.<div>
<div></div><div class="h5"><br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
John<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
-----Original Message-----<br>
From: <a href="mailto:opensim-dev-bounces@lists.berlios.de" target="_blank">opensim-dev-bounces@lists.berlios.de</a> [mailto:<a href="mailto:opensim-dev-" target="_blank">opensim-dev-</a><br>
<a href="mailto:bounces@lists.berlios.de" target="_blank">bounces@lists.berlios.de</a>] On Behalf Of <a href="mailto:diva@metaverseink.com" target="_blank">diva@metaverseink.com</a><br>
Sent: Monday, August 30, 2010 3:39 PM<br>
To: <a href="mailto:opensim-dev@lists.berlios.de" target="_blank">opensim-dev@lists.berlios.de</a><br>
Subject: Re: [Opensim-dev] Global identifiers<br>
<br>
OK, so here's the form of the URI that will start showing up in the<br>
[non-Simian] DBs soon, specifically in the GridUser table:<br>
<a href="http://authority/user/user_id/First+Last" target="_blank">http://authority/user/user_id/First+Last</a><br>
<br>
Yes?<br>
<br>
I suspect that SimianGrid will take things like<br>
LoggedIn(string userID) and<br>
StoreGridUserInfo(GridUserInfo info)<br>
<br>
and create user accounts for these if they don't exist, because I think<br>
SimanGrid collapses the 2 concepts. Just keep in mind that you'll soon<br>
be receiving URLs of the form above as arguments.<br>
<br>
I agree with Melanie that not adding the display name is a missed<br>
opportunity for caching, but I'm willing to write up code that accounts<br>
for it being optional for all the grid operators who would rather have<br>
the extra lookups coming their way.<br>
<br>
Hurliman, John wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
If we are still on the same page, there should never be a case where<br>
</blockquote>
something could be either a local identifier (UUID) or a global<br>
identifier (URL). The context is always clear, where cross-grid<br>
communication and exported content uses only global identifiers and all<br>
intra-grid communication uses only local identifiers. If a sim wants to<br>
resolve the creator of a prim it uses a single path, the UUID->Profile<br>
(aka display name) API call which takes advantage of all the caching<br>
and optimizations we've built into OpenSim. There is no ambiguity there<br>
or potential for the code to take a slower or less tested path. The<br>
discussion is about communication outside of the local grid context,<br>
when you are exporting content or moving people or content between<br>
grids. In every use case there I think it makes sense to always use<br>
global identifiers, or at least a clear path to build a global<br>
identifier.<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
John<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
-----Original Message-----<br>
From: <a href="mailto:opensim-dev-bounces@lists.berlios.de" target="_blank">opensim-dev-bounces@lists.berlios.de</a> [mailto:<a href="mailto:opensim-dev-" target="_blank">opensim-dev-</a><br>
<a href="mailto:bounces@lists.berlios.de" target="_blank">bounces@lists.berlios.de</a>] On Behalf Of Melanie<br>
Sent: Monday, August 30, 2010 2:30 PM<br>
To: <a href="mailto:opensim-dev@lists.berlios.de" target="_blank">opensim-dev@lists.berlios.de</a><br>
Subject: Re: [Opensim-dev] Global identifiers<br>
<br>
I think we already have a perfectly good field, which is a UUID for<br>
local users and a URL for remote ones.<br>
<br>
Melanie<br>
<br>
Serendipity Seraph wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
 On 8/30/10 2:09 PM, <a href="mailto:diva@metaverseink.com" target="_blank">diva@metaverseink.com</a> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hurliman, John wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
My interpretation (please correct me if I'm wrong) is that there<br>
</blockquote></blockquote></blockquote></blockquote></blockquote>
is<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
rough consensus on the overall strategy, but an open question of<br>
</blockquote></blockquote></blockquote>
how<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

to encode global identities when cross-grid communication (or<br>
out-of-grid archiving) happens.<br>
</blockquote>
That's what's going on.<br>
Up to now, all global identifiers (that already exist) have been<br>
volatile; nothing has persisted. As I found myself writing code<br>
</blockquote></blockquote></blockquote></blockquote>
that<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
would inject global identifiers into a DB table, I thought we<br>
</blockquote></blockquote></blockquote></blockquote>
should<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
all talk about the form of such identifiers.<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
There is probably also a hidden question of how to mark a local<br>
account as linked to a foreign identity, which may solve the<br>
friending issue. If I am friends with your avatar and we are both<br>
</blockquote></blockquote></blockquote>
on<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

grid B but your avatar actually originated from grid A, that link<br>
</blockquote></blockquote></blockquote>
in<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

the profile is what can tip off the presence service to try a<br>
</blockquote></blockquote></blockquote>
remote<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

presence check (assuming the user is not online in the local<br>
</blockquote></blockquote></blockquote></blockquote></blockquote>
grid).<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
My only interest in these low level questions like how the global<br>
identifiers and profile links look is what the final decision is<br>
</blockquote></blockquote></blockquote></blockquote></blockquote>
so<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
I<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

can implement it in the OpenSim SimianGrid connectors.<br>
</blockquote>
Well, we distinguish "user accounts" from "grid users" -- these<br>
</blockquote></blockquote></blockquote></blockquote>
are<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
2<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
different interfaces, although implementers may decide to collapse<br>
them. But they are different concepts. User accounts are the<br>
locally-registered users; in some cases, like for example, the UCI<br>
grid, there's only some people who can get accounts there, namely<br>
people associated with the university. Grid users are users that<br>
</blockquote></blockquote></blockquote></blockquote>
are<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
referenced by things that happen in the grid. So we already have<br>
</blockquote></blockquote></blockquote></blockquote>
an<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
interface for that, although now I'm thinking that perhaps we need<br>
</blockquote></blockquote>
to<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
separate its UserID field into 2 things: a local UUID and a<br>
</blockquote></blockquote>
reference<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
to the external name. And I guess that's my main issue at this<br>
</blockquote></blockquote>
point.<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
It seems more reasonable in a distributed system to say that an X<br>
</blockquote></blockquote></blockquote>
is<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
an<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
X - a User is a User, whether they originally were instantiated on<br>
</blockquote></blockquote></blockquote>
a<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

local or a remote system.   So I would go for collapsing the two as<br>
</blockquote>
much<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
as possible as a matter of policy.  Otherwise freedom to move<br>
</blockquote></blockquote></blockquote>
between<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

nodes in the system is more limited and there is more special case<br>
</blockquote>
logic<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
to deal with.    But that is speaking from a general distributed<br>
computing perspective.  There may be many Opensim details that make<br>
</blockquote>
that<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
seemingly ideal position in practice rather naive.<br>
<br>
- s<br>
<br>
_______________________________________________<br>
Opensim-dev mailing list<br>
<a href="mailto:Opensim-dev@lists.berlios.de" target="_blank">Opensim-dev@lists.berlios.de</a><br>
<a href="https://lists.berlios.de/mailman/listinfo/opensim-dev" target="_blank">https://lists.berlios.de/mailman/listinfo/opensim-dev</a><br>
<br>
<br>
</blockquote>
_______________________________________________<br>
Opensim-dev mailing list<br>
<a href="mailto:Opensim-dev@lists.berlios.de" target="_blank">Opensim-dev@lists.berlios.de</a><br>
<a href="https://lists.berlios.de/mailman/listinfo/opensim-dev" target="_blank">https://lists.berlios.de/mailman/listinfo/opensim-dev</a><br>
</blockquote>
_______________________________________________<br>
Opensim-dev mailing list<br>
<a href="mailto:Opensim-dev@lists.berlios.de" target="_blank">Opensim-dev@lists.berlios.de</a><br>
<a href="https://lists.berlios.de/mailman/listinfo/opensim-dev" target="_blank">https://lists.berlios.de/mailman/listinfo/opensim-dev</a><br>
<br>
</blockquote>
_______________________________________________<br>
Opensim-dev mailing list<br>
<a href="mailto:Opensim-dev@lists.berlios.de" target="_blank">Opensim-dev@lists.berlios.de</a><br>
<a href="https://lists.berlios.de/mailman/listinfo/opensim-dev" target="_blank">https://lists.berlios.de/mailman/listinfo/opensim-dev</a><br>
</blockquote>
_______________________________________________<br>
Opensim-dev mailing list<br>
<a href="mailto:Opensim-dev@lists.berlios.de" target="_blank">Opensim-dev@lists.berlios.de</a><br>
<a href="https://lists.berlios.de/mailman/listinfo/opensim-dev" target="_blank">https://lists.berlios.de/mailman/listinfo/opensim-dev</a><br>
<br>
</blockquote>
_______________________________________________<br>
Opensim-dev mailing list<br>
<a href="mailto:Opensim-dev@lists.berlios.de" target="_blank">Opensim-dev@lists.berlios.de</a><br>
<a href="https://lists.berlios.de/mailman/listinfo/opensim-dev" target="_blank">https://lists.berlios.de/mailman/listinfo/opensim-dev</a><br>
</div></div></blockquote></div><br></div></div>