The Future Is Here: It's Just Not Evenly Distributed

Post on 11-Jul-2015

1.012 views 5 download

Transcript of The Future Is Here: It's Just Not Evenly Distributed

The Future is Here:It’s Just Not Evenly Distributed

Martin Hamilton

http://martinh.net

@martin_hamilton

Photo by Sarath Sreekumar via Flickr

my.Lboro

• New site bringing together student info:

–Google Email, Calendar and Docs

–Learn (Moodle) VLE

–Library Services

–Newsfeeds and key links

• This talk: How it works :-)

App, or website?

But First…

Diagram credit: Andy Powell

About Me

Now Back to The Programme…

RSS/ATOM

• It’s all around you

<link href=“…” rel=“alternate”

type=“application/rss+xml” />

• But it might need a clean up

– Consider implications of embedded HTML

ATOM Sample with Namespaces

<item><title>Cake/Pie.</title><pubDate>Mon, 12 Dec 2011 00:37:46 +0000</pubDate><link>http://lsucs.org.uk/threads/cake-pie.5963/</link><guid>http://lsucs.org.uk/threads/cake-pie.5963/</guid><author>Lord_Infamy</author><dc:creator>Lord_Infamy</dc:creator><slash:comments>1</slash:comments></item>

Newsfeeds on my.Lboro

RSS aggregator written in Perl. Choses newsfeeds based on staff/student status

Google Docs:

DocumentsListAPI via Zend, with 2 Legged OAuth

Time for a REST

GET/feeds/documents/private/full?xoauth_requestor_id=f.j.bloggs-08%40student.lboro.ac.uk HTTP/1.1

Host: docs.google.com

Connection: close

User-Agent: Lboro.ac.uk-My-2.1 Zend_Framework_Gdata/1.11.1

Accept-encoding: identity

Authorization: Oauth realm=”X", oauth_consumer_key=”Y",

oauth_nonce=”Z", oauth_signature_method="HMAC-SHA1",

oauth_timestamp="1323821672", oauth_version="1.0",

oauth_signature="4hfRnByN%2F2DZya8t797CQqPmCTg%3D”

'requestScheme' => Zend_Oauth::REQUEST_SCHEME_HEADER,'version' => '1.0’, 'signatureMethod' => 'HMAC-SHA1','consumerKey' => ‘XXX’, 'consumerSecret' => ‘YYY’

);

$config = new Zend_Oauth_Consumer($options);$token = new Zend_Oauth_Token_Access();$httpClient = $token->getHttpClient($options);$client = new Zend_Gdata_Docs($httpClient);

$feed = $client->getDocumentListFeed('https://docs.google.com/feeds/documents/private/full?xoauth_requestor_id=' . urlencode($email_address));

foreach ($feed->entries as $entry) {$title = $entry->title; $href = $link->getHref();print "<li><a target='_gdocs' href='$href'>$title</a></li>\n";

}

<entry><id>https://docs.google.com/feeds/documents/private/full/spreadsheet%3A0AtfqxZt971TSdFFvQlRTZ3ZpRkVyYkZERnVxclZMMXc</id><published>2010-05-25T14:53:42.396Z</published><updated>2010-05-25T15:02:10.470Z</updated><category scheme='http://schemas.google.com/g/2005/labels'term='http://schemas.google.com/g/2005/labels#viewed'label='viewed'/><category scheme='http://schemas.google.com/g/2005#kind'term='http://schemas.google.com/docs/2007#spreadsheet'label='spreadsheet'/><title type='text'>Single Sign-On target services</title><content type='text/html’ src='https://docs.google.com/feeds/download/spreadsheets/Export?key=0AtfqxZt971TSdFFvQlRTZ3ZpRkVyYkZERnVxclZMMXc&amp;xoauth_requestor_id=f.j.bloggs-08@student.lboro.ac.uk'/><link rel='alternate' type='text/html'href='https://docs.google.com/a/student.lboro.ac.uk/spreadsheet/ccc?key=0AtfqxZt971TSdFFvQlRTZ3VpRkVyYkZERnVxclZMMXc&amp;hl=en_US'/><link rel='http://schemas.google.com/spreadsheets/2006#worksheetsfeed’ type='application/atom+xml’ href='https://spreadsheets.google.com/feeds/worksheets/0AtfqxZt971TSdFFvQlRTZ3ZpRkVyYkZERnVxclZMMXc/private/full'/>

<linkrel='edit-media' type='text/html'href='https://docs.google.com/feeds/media/private/full/spreadsheet%3A0AtfqxZt971TSdFFvQlRTZ3ZpRkVyYkZERnVxclZMMXc/gtg9ff6k?xoauth_requestor_id=f.j.bloggs-08@student.lboro.ac.uk'/><author><name>f.j.bloggs-08</name><email>f.j.bloggs-08@student.lboro.ac.uk</email>

</author><gd:resourceId>spreadsheet:0AtfqxZt971TSdFFvQlRTZ3VpRkVyYkZERnVxclZMMXc

</gd:resourceId><gd:lastModifiedBy><name>f.j.bloggs-08</name><email>f.j.bloggs-08@student.lboro.ac.uk</email>

</gd:lastModifiedBy><gd:lastViewed>2011-10-06T21:29:56.187Z</gd:lastViewed><gd:quotaBytesUsed>0</gd:quotaBytesUsed><docs:writersCanInvite value='true'/></entry>

Gmail:

Zend Librarywith2 Legged OAuth

Google Calendar:

ZendLibrary with2 Legged OAuth

Learn widget:

MySQL connectionto underlyingMoodle software

Exported view ofUnderlying StudentInformation System

Budget widget:• MS SQL (ODBC) connection• Card vendor Web Services API• Home grown Library API

Putting It Together

Putting It Together

Visiting http://my.lboro.ac.uk:

– Shibboleth prompts for SSO login if necessary

• SAML response includes LDAP attributes from Active Directory, e.g. student ID

– Populates skeleton HTML of page

• Starts AJAX callbacks going to render widgets

• Choice of staff/student content

– Appearance driven via CSS + jQuery

Traps for the Unwary

• Are you using UTF-8 everywhere?

• SimpleXMLElement barfs on malformed XML

• How much intermediate caching to do?

• Do you even have APIs??

• 2 Legged OAuth not well understood

• REST good, SOAP bad – but use JSON rather than XML if you can

• print_r() and Data::Dumper are your friends!

Closing Thoughts

CMIS / Google Calendar

Add mobileVersion here

The Future is Here:It’s Just Not Evenly Distributed

Martin Hamilton

http://martinh.net

@martin_hamilton

Photo by Sarath Sreekumar via Flickr