Hey Lini,

Um as far as i am aware we don't have any documentation for this yet, last time i used this i looked at the source code for it as a reference :)

Quickly glancing over the file:
http://svn.apache.org/viewvc/incubator/shindig/trunk/javascript/container/gadgets.js?view=markup

I see that gadgets.Container has:

setParentUrl   == http://mycontainer.url.com
setCountry     == viewer's country (US forinstance)
setNoCache     == disable caching?
setLanguage    == viewer's lanuage (EN)
setView == home, profile, canvas, previews... whichever view the viewer is on setMaxHeight == max height a gadget can be (set this pretty high normally, specialy on canvas view)

gadgets.IfrGadget
setServerBase  == where shindig lives

Hope that helps a bit :)


On May 21, 2008, at 2:33 PM, Lini H - Clarion, India wrote:

Hi Chris

Needed one clarification regarding the parameters passed for the iframe generation. You have shown two method for generating the iframe below. I have implemented the first using the container/ gadgets.js file using the code in the sample html files.

But in none of the sample files has been mentioned what parameters can be passed to the gadget creating function, as i need to pass the st and other details. Is there any sample html file with these parameters as well?

Regards,
     Lini Haridas
     Software Engineer

     [EMAIL PROTECTED]
     Clarion Technologies
     SEI CMMI Level 3 Company

     4th Floor, Great Eastern Plaza,
     Airport Road,
     Pune- 411 006,
     Maharashtra, India.
     Phone: +91 20 66020289
     Mobile: +91 9823435917
     www.clariontechnologies.co.in
----- Original Message -----
From: "Chris Chabot" <[EMAIL PROTECTED]>
To: <[email protected]>
Sent: Friday, May 02, 2008 4:29 PM
Subject: Re: Questions about implementing shindig


Hi Lini,

1.. first of all, who generates the security token containing the
information about the owner, viewer and token id.

The social network site (SNS in short) is the one that deals with the
user information of all kinds (profiles, authentication, etc). So this
site knows who the current user is (viewer), who the page belongs to
(owner), what gadget this is (app id), which instance of it (mod id),
and what preferences a user has (things like, country, language, but
also user preferences for gadgets) .... none of this is 'created' by
shindig, shindig consumes this information and uses it.

So how you should imagine this is that:
1) The SNS creates a <iframe> and in the iframe url it puts a lot of
info like the security token for instance, but also the app url, id,
mod id, user preferences, etc.
2) Shindig recieves this url, and renders the gadget based on the
input of step (1)

2.. This token is then passed to the gadget server along with the
application url.

Yes, plus some other info.

There are 2 methods of doing this, one is that you use the methods
provided by javascript/container/gadget.js to create gadget iframe's
from javascript (feeding it the url, st, and all other info), see the
example files in javascript/container to see how to do this.

Or you could create your own iframe's on page rendering in PHP, this
means you would include the basic files required for creating a token
in your site (Crypto.php, BlobCrypter.php, GadgetToken.php,
BasicBlobCrypter.php and BasicGadgetToken.php) and then do something
like (forgive me if i make a syntax error or 2, i just woke up and my
mail program doesn't make a good IDE) ps this assumes you fill in all
the variables it uses below with info from your database:

// these come from your DB, the user preferences of this user /
gadget / module id combo
$prefs = '';
foreach ($gadget_user_prefs as $name => $value) {
$prefs .= 'up_'.$name.'='.urlencode($value);
}

// create an encrypted security token using shindig's code and the
owner/viewer/app/mod data from the site
$securityToken = BasicGadgetToken::createFromValues(
$owner,
$viewer,
$gadget_id,
$_SERVER['HTTP_HOST'], // domain
urlencode($gadget_url),
$gadget_mod_id /* first gadget on the page would be '1', second 'has
mod id 2'.. or some other identifiable number that determines which
instance of the one gadget it is (you can have multiple of the same on
a page) */
);

// and create the iframe url using the above info
$iframe_url =
$gadget_server_url.'/gadgets/ifr?'.
"container=default".
"&mid=".$gadget_mod_id.
((isset($_GET['nocache']) && $_GET['nocache'] == '1') ||
isset($_GET['bpc']) && $_GET['bpc'] == '1' ? "&nocache=1" : '').
"&country=".(!empty($country) ? $country : 'ALL').
"&lang=".(!empty($lang) ? $lang : 'ALL').
"&view=".$view. // view of the page, like 'home', 'profile', 'canvas'
"&parent=".urlencode("http://".$_SERVER['HTTP_HOST']).
$prefs.
"&st=".$securityToken->toSerialForm().
"&url=".urlencode($gadget_url).
"#rpctoken=".rand(0,getrandmax());

// Then the html to create the gadget would be:
?>
<iframe width="<?=$my_prefered_site_width?>" scrolling="no" height="<?
=!empty($gadget_height)?$gadget_height : '200'?>" frameborder="no"
src="<?=$iframe_url?>" class="gadgets-gadget" name="remote_iframe_<?=
$gadget_mod_id?>" id="remote_iframe_<?=$gadget_mod_id?>"></iframe>
<?

In my experience creating your own iframe's in PHP means the page
loads a smoother (since there's no re-rendering when the page onLoad
creates all the iframe's in javascript). But that does mean your
responsible for updating the code as the spec changes or expands.

To make a SNS you also need meta data of gadgets (title, directory
title, author, etc). Shindig provides this metadata for you, see the
sample-metadata.html in javascript/container for an example how to use
this ... Your best bet is to use CURL to connect to this service from
your site, and cache this info for 'some time' (could be from an hour
to a day, but not much longer).

3.. Now what will the gadget server do with this token?

Both the social data server and the gadget server use this token to
know who the viewer and owner is, and what the app id, mod id etc are.

4.. If any site data is required, then the gadget server will call
the container for the data, the container will return the data as
json string to the gadget server. Is this correct?

Incorrect. Shindig has 2 servers (located under /gadgets and / social),
one of the renders gadgets and provides the meta data and proxy
services.

The other is the social data interface, which provides the
infrastructure and wire format to communicate this info to your gadgets.

To make this interface with your data source, you need to create a
class that plugs into shindig following its interface definition, see
php/src/socialdata/samplecontainer/*.php as a example of how to do this.

The provided samplecontainer files are pretty basic as far as the
amount of information they deal with, but they should give you the
right idea.

So create your own class(es), put them inside of the socialdata/
directory (so the auto include can find them), and edit the config.php
'handlers' bit to the class name(s) you created. (aka something like
'handlers' => 'MySocialDataHandler' if your class is called
MySocialDataHandler, and the file containing it is called
MySocialDataHandler.php)


5.. Now, out of this, what has been integrated in shindig?

See the bits above :) You need to create:
- the social network site (shindig isn't a SNS site, it just provides
open social functionality)
- the SNS needs to manage people, gadget info, gadget preferences etc
- load info of your gadgets in your SNS through the metadata interface - generate the the iframe's with all the right info and security token
- create a social data interface to your own data and plug this into
the social data server

Well then your mostly done, then you also need to create a
UserPrefStore javascript file and data backend to store preferences.
The javascript/container/cookiebaseduserpref.js has a basic
implementation using cookies, something that is nice for a demo but
not for a real site... so replace this with your own logic and your
good to go :)

Can someone please reply to these points as based on this I need to
start my work.


Currently the shindig list consists mostly out of shindig developers,
or people from social network sites who already contributed too, or
used shindig and know it quite well ... which is reflected in the lack
of documentation, our apologies for that. I'm sure in the future this
will improve. But for now i hope this gave you some idea on what to do
and how to get started.

-- Chris



--
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.
--
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.


Reply via email to