SlideShare ist ein Scribd-Unternehmen logo
1 von 61
Downloaden Sie, um offline zu lesen
Clouds and Web2.0
II: Case Study and Tutorial
                  CTS08 Tutorial
           Hyatt Regency Irvine California
                   May 19 2008

           Geoffrey Fox, Marlon Pierce
  Community Grids Laboratory, School of informatics
                Indiana University

          http://www.infomall.org/multicore
      gcf@indiana.edu, http://www.infomall.org        1
Polar Grid: A Web 2.0 Case
           Study
  Using Microformats, GeoRSS,
        REST, and KML
       Slides from Yu Ma
More Detailed Information
• See Marie’s blog:
  http://tethealla.blogspot.com/
• We use blogs in the lab extensively as lab
  books.
PolarGrid Datasets
• A typical processed dataset consists of:
  – One plain text header file describing the overall
    system and metadata of the particular chunk of
    measurements.
  – Multiple JPG images processed from the
    corresponding raw data.
  – Collection timestamp and fundamental
    properties such as waveform and transmitting
    (TX) /receiving (RX) antenna IDs are
    embedded in file names.
• Images are processed by Kansas
  University’s Matlab-based code, GOAP
Approaches
• Convert unstructured metadata description
  into microformats.
• Construct a relational database to enable
  fast and dynamic queries.
• Provide geographic annotation embedded
  into web feeds that can be plotted by
  Google Maps and Google Earth
• Technologies:
  – GeoRSS: RSS syndication with geo-location
  – Microformats: extensions to XHTML
Microformat Conversion
• Microformats capture “semantic” metadata
  information in XHTML format.
• Principals for converted microformats:
  – Simple: capture the most basic information unit.
  – Reusable: capture shared features among data.
  – Composable: when combined, can reflect more
    complex relationships among data.
• Most of our microformat classes are prefixed
  with “pg:” denoting the PolarGrid project
  namespace, except when existing generic ones
  such as the geo microformat are used.
How To Extend XHTML
• Use either <div> or <span> tags.
• Display of these tags can be controlled
  with style sheets
• You can also dynamically control these
  with JavaScript.
• Next generation of browsers will have
  built-in support for well-known
  microformats such as hCard.
Simple Example: Geo Format

<span class="geo"> <span
class="longitude">-2.193</span> <span
class="latitude">52.686</span> </span>
Polar Grid Microformat
             Examples
• Simple descriptions:
 <span class="pg:radar-type">MCRDS</span>
• Measurements with unit:
  <span class="pg:delay">
    <span class="pg:value">2.5</span>
    <span class="pg:unit">us</span>
  </span>
Microformat Examples
• Identification for cross-references:
  <span class="pg:waveform”>
    <span class="pg:id">1</span>
  </span>
• Commonly shared features: (e.g. both TX
  and RX antennas record same kind of
  information)
  <span class="pg:antenna"> <span
    class="pg:id">0</span> <span
    class="pg:type">TX/RX</span> <span
    class="pg:attenuation">0</span>
  </span>
Microformat Examples
• Structured collections/Arrays:
  <span class="pg:antenna-array"> <span class="pg:array-
    size">2</span> <span class="pg:antenna”>
      <span class="pg:id">0</span>
      <span class="pg:type">TX</span>
      <span class="pg:attenuation">0</span> </span> <span
    class="pg:antenna”>
      <span class="pg:id">1</span> <span
    class="pg:type">TX</span> <span
    class="pg:attenuation">0</span> </span>
  </span>
Microformat Examples
• Complex objects: (e.g. spatial and
  temporal information that uniquely defines
  a processed data chunk)
  <span class="pg:data-chunk"> <span
    class="pg:name">Start/Stop</span> <span class="pg:utc-
    timestamp">1202755351.892651</span> <span
    class="geo"> <span class="longitude">-2.193</span>
    <span class="latitude">52.686</span> </span>
  </span>
GeoRSS-Simple Embedded Atom
            Feed
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"
       xmlns:georss="http://www.georss.org/georss">
 <title>PolarGrid Expedition</title>
 <id>tag:pg3.ucs.indiana.edu,2008:polargrid-expedition-2008-
   05</id>
 <updated>2008-05-11T02:02:54Z</updated>
 <author>
  <name>Polar Grid</name>
 </author>
 <link type="application/atom+xml" rel="self"
   href="http://pg3.ucs.indiana.edu/cgi-bin/getPolarGridFeed"/>
GeoRSS-Simple Embedded Atom
            Feed
 <entry>
   <title>Data Chunk: 2008-03-11 11:55:41</title>
   <id>tag:pg3.ucs.indiana.edu,2008:polargrid expedition-2008-
   05-262</id>
   <updated>2008-03-11T11:55:41Z</updated>
   <content type="html">
    … (data chunk information described in microformats) …
   </content>
   <georss:point>77.585957 -52.448461</georss:point>
   <georss:point>77.580976 -52.435148</georss:point>
 </entry>
</feed>
Google RSS Feed Reader
Google Maps
Corresponding KML
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://earth.google.com/kml/2.2">
<Document>
 <name>PolarGrid Expedition</name>
 <Placemark id="tag:pg3.ucs.indiana.edu,2008:polargrid-expedition-
   2008-05-262”>
  <name>Data Chunk: 2008-03-11 11:55:41</name>
  <description><![CDATA[
     … (data chunk information described in microformats) …
  ]]></description>
  <Point><coordinates>-52.448461,77.585957</coordinates></Point>
  <Point><coordinates>-52.435148,77.580976</coordinates></Point>
</Placemark>
</Document></kml>
Google Earth and KML
Web 2.0 Lessons
• Web 2.0 approaches can be applied to
  management of scientific information.
• With the right choices, you get a lot for
  free.
• Microformats: simple ways to encode
  name-value pairs, build up semantic
  descriptions.
• GeoRSS: orders data by both time and
  space
  – Works in all standard RSS/Atom readers.
  – Google Maps supports natively
Web 2.0 Tutorial Map
User Layer

 Browser +         Browser +           Browser +
 JavaScript        JavaScript          JavaScript
  Libraries         Libraries           Libraries


              AJAX, JSON, REST,
                     RSS
                                       Gadgets,
Server-Side
                 Facebook Apps          Gadget
Gdata Apps
                                      Aggregators


              SOAP, REST, RSS

  Blogs,
                                     Social Gadget
Calendars,         Facebook
                                      Containers
Docs, etc

                                  System Cloud Layer
Map Key
• Red blocks represent browsers and things that run in them
  (JavaScript).
   – This is the “user” level.
   – Client side mashups
• Green blocks represent Web servers and their applications.
   – This is the “developer” level.
   – Server-side mashups.
   – These can run on any hosting environment: your web server,
     Amazon EC2, Google GAE, etc.
• Blue blocks represent third party services.
   – This is the “system cloud” layer.
• Arrows represent network communications.
   – Everything goes over HTTP
   – REST, AJAX: communication patterns.
   – RSS, ATOM, JSON, SOAP: message format.
Using Google’s GData API

 How to Write Server-Side Mash-
              Ups
GData: the API to Google
                    Services
• Google provides an extensive set of online services with well-
  known user interfaces.
   –   Docs
   –   Spreadsheet
   –   YouTube
   –   Blogger/Blogspot
   –   Calendar
   –   Picasso Photo Sharing
   –   GMail
• These have programming interfaces as well as user interfaces.
   – Server side: Java, .NET, PHP, Python
   – Client side: JavaScript
• Client interfaces include visual components suitable for mash-
  ups
• Server-side APIs don’t include visual components but do allow
  you to make server-side mash-ups.
Server-Side Mash-Up Use Case
• Imagine you have a Web service that runs a large parallel
  finite element code.
   – Output can include images, movies, output files, metadata, etc.
   – Your web service manages the interaction with the queuing
     system (another topic…)
• With a server-side mash-up, your Web Service can
   – Post status information about your jobs (“Step 521 Completed!”)
     on your blog.
   – Post URLs pointing to your output files on your blog.
   – Upload your visualizations to Picasso and YouTube (and post
     links).
   – Generate RSS/Atom feeds of the above.
   – Post results to Google Calendar
• We’ll look at some Java examples.
Getting Started with GData
•   Create a Blog, make sure you can login to YouTube, etc.
•   You will need a clientID and associated developer key.
    – Get these from http://code.google.com/apis/base/signup.html.
•   Get the Java code
    – http://code.google.com/p/gdata-java-client/downloads/list
•   See any number of Google examples
    – http://code.google.com/apis/base/javadevguide.html
•   One trick: You can get your blogger ID by examining the your Blog’s
    Atom feed.
    – It will be in the header and look something like this:
      <id>tag:blogger.com,1999:blog-19457310</id>
    – The blog ID to use in the code below would be 19457310 in this
      example.
•   The full working example is here
    – http://communitygrids.blogspot.com/2008/03/googles-gdata-java-
      api.html
    – We will simplify for pedagogical reasons.
Posting Results to Your Blogspot
               Blog
String userName="me@gmail.com";
String password= "qwerty";           Replace these with your values
String content=“…”;

GoogleService myService=                    Login in
   new GoogleService("blogger","");
myService.setUserCredentials(userName,password);
                                         Create the entry to insert
Entry myEntry = new Entry();
myEntry.setTitle(new PlainTextConstruct(title));
myEntry.setContent(new PlainTextConstruct(content));
                                                 Insert the new entry
                                                 using REST’s POST
URL postUrl = new URL("http://www.blogger.com/feeds/" + blogID +
"/posts/default");
myService.insert(postUrl, myEntry);
Getting a YouTube Feed
String feedUrl="http://gdata.youtube.com/feeds/api/videos/";
String
scarFace5sec="http://gdata.youtube.com/feeds/api/videos/egwB7hVIIE
c";

YouTubeService service = new YouTubeService(clientID,
developer_key);
service.setUserCredentials(userName,password);

VideoFeed videoFeed =
    youTubeService.getFeed(new URL(feedUrl),VideoFeed.class);

VideoEntry videoEntry = youTubeService.getEntry(new
URL(scarFace5sec),
                       VideoEntry.class);
//Loop over feed entries and display.
String feedContent=
     "Title: " + videoEntry.getTitle().getPlainText()+”";
feedContent+=videoEntry.getMediaGroup().
Posting To Google Calendar
CalendarService calService=new CalendarService(clientID);
calService.setUserCredentials(userName,password);
                                               Log in to the calendar service
URL postUrl =
new URL("http://www.google.com/calendar/feeds/"+userName+"/private/full");

CalendarEventEntry myEntry = new CalendarEventEntry();
myEntry.setTitle(new PlainTextConstruct(titleOfEvent));
                                                        Create a new Calendar entry
myEntry.setContent(new PlainTextConstruct(contentToPost));

DateTime startTime = new DateTime(new Date());
When eventTimes = new When();
eventTimes.setStartTime(startTime);               Create the event time and insert
myEntry.addTime(eventTimes);
CalendarEventEntry insertedEntry = calendarService.insert(postUrl, myEntry);

CalendarEventEntry myEntry2 = new CalendarEventEntry();
String now=(new Date()).toString();
myEntry2.setContent(new PlainTextConstruct("Test post at "+now));
myEntry2.setQuickAdd(true);
                                                 An alternative way to post the entry
// Send the request and receive the response:
CalendarEventEntry insertedEntry2 =calendarService.insert(postUrl, myEntry2);
Some Other Things You Can Do
     with GData Server Code
• YouTube
  – Search movies by keyword tag, “related”, categories
  – Upload and download movies.
  – Put movies into collections
• Calendar
  – Retrieve events as RSS feed
• Spreadsheet
  – Remotely retrieve and insert or change row and cell
    data.
  – Use structured queries to retrieve data ranges.
  – Remotely invoke batch operations
Making FaceBook
    Applications
Using Facebook as a backend
          service.
Full Examples and More Detailed
              Notes
• PHP and JavaScript notes
  – http://communitygrids.blogspot.com/2008/02/q
    uick-facebook-javascript-api-notes.html
• JavaScript example:
  – http://communitygrids.blogspot.com/2008/02/li
    ttle-more-jsfacebook-hacking.html
Why Use FaceBook as a
            Portal?
• Because it has 10’s of millions of users.
  – The largest Web 2.0-style Web portal
• Easy to create Social Networks: groups of
  friends and share applications,
  communicate, share information, etc.
  – And more importantly, tools for building and
    managing these networks
• Can leverage many third party applications
  – For example, photo albums
  – Of course many of them are trivial, silly
FaceBook APIs
• These come in two flavors
   – Embedded: make your application available through
     FaceBook.
      • PHP APIs
   – Embedding: use Facebook authentication and social
     network data in your application.
      • JavaScript API
• In both cases, you run your application on your
  Web server.
   – You application do anything you can implement.
   – And you can query FaceBook for social network
     information, user metadata.
Using The JavaScript API
• Getting Started:
   – You just need a Web server to host your application.
   – Register as a developer
   – Place Facebook’s xd_receiver.htm on your web server
       • Make sure the relative path used is correct.
• What will happen?
   – Your page will run outside of Facebook.
   – Anyone loading your application will be directed to Facebook to
     login.
   – User is then redirected back to your page.
• Your application can make calls back to Facebook.
• And you can do anything else you want.
   – So you could embed this application in a portlet, interact with a
     local database,
   – You can build your application with .NET or Java Server Faces,
     etc.
HTML Page Example
<textarea style="width:500px;height:300px;"
  id="_traceTextBox">
</textarea>
<script
  src="http://static.ak.facebook.com/js/api_lib/F
  acebookApi.debug.js" type="text/javascript">
  var api = new
  FB.ApiClient('<your_key_here>',
               '/xd_receiver.htm', null);
  …
</script>
Interact with FaceBook
api.requireLogin(function(exception) {
    api.friends_get(null,getResults);
    var myinfo= 'last_name,
            first_name,
            hometown_location,
            work_history,
            pic_small';
    api.users_getInfo(api.get_session().uid,
                    myinfo,
                    getInfo);
});
Notes on Previous Slides
• The requireLogin, friends_get, and
  users_getInfo are FaceBook API calls.
• The getResults and getInfo methods are
  callback methods that I defined.
  – Shown in next slide
• The myinfo data structure is taken from
  the Facebook XML user profile.
  – http://wiki.developers.facebook.com/index.php
    /Users.getInfo
Developer Defined Call-Back
            Functions
function getResults(result,exception) {
   Debug.dump(api.get_session().uid,’You');
   Debug.dump(result,’Your Friends’);
}

function getInfo(result,exception) {
   Debug.dump(result,’Your info');
}

These two methods receive the output returned from
Facebook by the API’s friends_get() and users_getInfo()
methods. The results are dumped to the text window but
you can do more interesting things.
Output Info Dumped to Text
                   Area
you: 627774031
Your friends: {Array}
[Deleted]
                           User’s Facebook ID and the ID numbers of his friends
Your Info: {Array}
[0]: {Object}
first_name: Marlon
hometown_location: {Object}
city:
state:
                         User’s profile metadata. Note some fields are strings, some are
country:
                         Arrays, and some are structured objects of strings.
zip:
last_name: Pierce
pic_small: http://profile.ak.facebook.com/profile6/1797/98/t627774031_2463.jpg
uid: 627774031
work_history: {Object}
Facebooks’ Query Language
• All of the FaceBook API is basically a set
  of wrappers around their SQL like FQL
  query language. So you can, if you prefer,
  make custom methods out of FQL query
  strings.
   var myQuery='SELECT name FROM user
  WHERE uid='+api.get_session().uid;

  api.fql_query(myQuery, getFQLResponse);

   getFQLResponse() is a developer-written callback function
Working with Facebook Groups
• To list information about groups you are a
  member of, use the following.
  – You can replace the value of uid with any UID
    you know.
  – 18629081888 is the Group ID for the Open Grid
    Forum’s uninteresting Facebook group

    api.groups_get(api.get_session().uid,null,getGroup
    s);

    api.groups_getMembers(18629081888,getGroupM
    embers);
More Information
• The JavaScript documentation is available
  from here
  – http://wiki.developers.facebook.com/index.php
    /JavaScript_Client_Library
• It is pretty minimal, but it is essentially the
  same as the better documented PHP API.
  – Replace PHP’s "." with a "_".
  – So PHP’s users.getInfo becomes
    users_getInfo(...) in JavaScript.
Open Social API and Gadgets
What Is a Gadget?




Simple gadgets for getting a Grid proxy credential and
running remote commands. Both run on my own Web
server.
Gadget Definition
<?xml version="1.0" encoding="UTF-8" ?>
 <Module>
  <ModulePrefs title="MyProxy Gadget Example" scrolling="true"
height="500"/>
  <Content type="url"
href="http://156.56.104.143:8080/GTLAB/examples/MyProxyExample.j
sf">
  </Content>
</Module>
• This XML page is web accessible via
  http://156.56.104.143:8080/GTLAB/MyProxyGadget.x
  ml
• This URL points to the actual application (written in
  JSF)
• Google uses an HTML IFrame to load the page.
• You can also use content type=“html” for more
  integrated applications.
   – For example, you can send messages between gadgets in
     the client.
Gadgets and Open Social
• Open Social is a consortium of Facebook’s major
  competitors.
  – Orkut, MySpace, Hi5, LinkedIn, Friendster, etc.
• The Open Social API has two parts
  – JavaScript libraries for building social gadgets.
     • Must run in a gadget container (server)
  – REST APIs for exchanging data between container
    servers.
• The ideas:
  – JS APIs let you make portable gadgets that will work
    in different containers (Hi5LinkedIn) but data will be
    different.
  – REST will let you export/import data.
Getting Started
• You need a Gadget container to host your
  gadgets.
  – LinkedIn is notably selective about the gadgets it will
    host.
• Orkut provides a sandbox, but you have to upload
  your gadgets.
• Apache Shindig is an extremely simple Java-
  based container.
  – De facto reference implementation of Open Social
  – Not suitable for production by a long ways.
  – But it will work on an air plane.
• Shindig is something of a moving target.
  – My February notes were obsolete…
Getting Started with Shindig
•   Visit the Web site for information
     – http://incubator.apache.org/shindig
•   Check out the code with SVN
     – mkdir $HOME/shindig; cd shindig
     – svn co http://svn.apache.org/repos/asf/incubator/shindig/trunk/
•   Build and run it with Apache Maven
     – Run “mvn” from $HOME/shindig/
     – Run “mvn -Prun” from $HOME/shindig/java/server
•   Point browser to
    http://localhost:8080/gadgets/files/container/sample1.html and look
    through other samples.
     – You can also load these HTML files using file:// if you don't want to run
       the Jetty server.
•   Periodically check for updates and rebuild
     – svn update
•   The READMEs have better/more up-to-date information than the
    website.
What Do You Get?
• Shindig actually has two major parts:
  – A container that can run social gadgets
     • This must have access to your user and social
       network database.
  – A gadget aggregator that displays gadgets
     • Runs the layout manager.
     • Think of this as your own iGoogle server.
• Access the gadget container
  – http://localhost:8080/gadgets/files/samplecont
    ainer/samplecontainer.html
The gadget is actually served
remotely. This is the module
definition.



  The gadget can be
  displayed in your
  http://localhost:8080
  display container.
Import JS Libraries into Container
                Page
<link rel="stylesheet" href="gadgets.css">
<script type="text/javascript"
src="../../js/rpc.js?c=1&debug=1"></script>
<script type="text/javascript" src="cookies.js"></script>
<script type="text/javascript" src="util.js"></script>
<script type="text/javascript" src="gadgets.js"></script>
<script type="text/javascript"
src="cookiebaseduserprefstore.js"></script>
Create Your Layout Manager
var my = {};
                                      Note gadgets are loaded from remote host
                                      containers.
my.gadgetSpecUrls = [
   'http://www.google.com/ig/modules/horoscope.xml',
   'http://www.google.com/ig/modules/aue07otr.xml',
   'http://www.labpixies.com/campaigns/todo/todo.xml'
];

my.LayoutManager = function() {
  gadgets.LayoutManager.call(this);
};

my.LayoutManager.inherits(gadgets.LayoutManager);

my.LayoutManager.prototype.getGadgetChrome = function(gadget) {
  var chromeId = 'gadget-chrome-' + gadget.id;
  return chromeId ? document.getElementById(chromeId) : null;
};
Initialize and Render
my.init = function() {
  gadgets.container.layoutManager = new
my.LayoutManager();
};
my.renderGadgets = function() {
  for (var i = 0; i < my.gadgetSpecUrls.length; ++i) {
    var gadget = gadgets.container.createGadget(
       {specUrl: my.gadgetSpecUrls[i]});
    gadgets.container.addGadget(gadget);
    gadgets.container.renderGadget(gadget);
  }
};
HTML Display
 <body onLoad="my.init();my.renderGadgets()">
  <h2>Sample: Dynamic Height</h2>
  <div id="gadget-chrome-0" class="gadgets-gadget-
 chrome"></div>
  <div id="gadget-chrome-1" class="gadgets-gadget-
 chrome"></div>
  <div id="gadget-chrome-2" class="gadgets-gadget-
 chrome"></div>
 </body>

Shows the 3 Gadgets. As we saw, this will use “flow” layout and
“chrome” styling.
Hosting Your Own Social
             Gadget
• Place your widget code here:
  – $HOME/shindig/javascript/samplecontainer/exam
    ples
• After compilation, these will be located here:
  – ./target/gadgets/files/samplecontainer/examples.
• These will be served up from
  – http://localhost:8080/gadgets/files/samplecontain
    er/examples/myapp.xml
• Myapp.xml is the gadget definition we saw
  earlier.
Hello World Gadget in Container


                                                Uses flat XML file.


                                          User and his network of
                                          friends provided by the
                                          local container. “Hello”
                                          chosen based friend’s
                                          preferred


http://localhost:8080/gadgets/files/samplecontainer/samplecontainer.html
Shindig social
network XML
“database”. Real
containers would
use a real
database.

OpenSocial API
essentially lets
you retrieve this
sort of data.
my.gadgetSpecUrls = [
 'http://www.google.com/ig/modules/horoscope.xml',
 'http://www.google.com/ig/modules/aue07otr.xml',

'http://localhost:8080/gadgets/files/samplecontainer/example
s/SocialHelloWorld.xml'
];
More Information
• See http://communitygrids.blogspot.com
  for more detailed information.
• Email: mpierce@cs.indiana.edu

Weitere ähnliche Inhalte

Was ist angesagt?

Java Web Programming on Google Cloud Platform [1/3] : Google App Engine
Java Web Programming on Google Cloud Platform [1/3] : Google App EngineJava Web Programming on Google Cloud Platform [1/3] : Google App Engine
Java Web Programming on Google Cloud Platform [1/3] : Google App EngineIMC Institute
 
Distributed Crawler Service architecture presentation
Distributed Crawler Service architecture presentationDistributed Crawler Service architecture presentation
Distributed Crawler Service architecture presentationGennady Baranov
 
Json to hive_schema_generator
Json to hive_schema_generatorJson to hive_schema_generator
Json to hive_schema_generatorPayal Jain
 
PLAT-13 Metadata Extraction and Transformation
PLAT-13 Metadata Extraction and TransformationPLAT-13 Metadata Extraction and Transformation
PLAT-13 Metadata Extraction and TransformationAlfresco Software
 
Content Management with MongoDB by Mark Helmstetter
 Content Management with MongoDB by Mark Helmstetter Content Management with MongoDB by Mark Helmstetter
Content Management with MongoDB by Mark HelmstetterMongoDB
 
Blazing Fast Analytics with MongoDB & Spark
Blazing Fast Analytics with MongoDB & SparkBlazing Fast Analytics with MongoDB & Spark
Blazing Fast Analytics with MongoDB & SparkMongoDB
 
Socialite, the Open Source Status Feed Part 1: Design Overview and Scaling fo...
Socialite, the Open Source Status Feed Part 1: Design Overview and Scaling fo...Socialite, the Open Source Status Feed Part 1: Design Overview and Scaling fo...
Socialite, the Open Source Status Feed Part 1: Design Overview and Scaling fo...MongoDB
 
quickguide-einnovator-5-springxd
quickguide-einnovator-5-springxdquickguide-einnovator-5-springxd
quickguide-einnovator-5-springxdjorgesimao71
 
Key note big data analytics ecosystem strategy
Key note   big data analytics ecosystem strategyKey note   big data analytics ecosystem strategy
Key note big data analytics ecosystem strategyIBM Sverige
 
Extensible RESTful Applications with Apache TinkerPop
Extensible RESTful Applications with Apache TinkerPopExtensible RESTful Applications with Apache TinkerPop
Extensible RESTful Applications with Apache TinkerPopVarun Ganesh
 
Scalable Architectures - Microsoft Finland DevDays 2014
Scalable Architectures - Microsoft Finland DevDays 2014Scalable Architectures - Microsoft Finland DevDays 2014
Scalable Architectures - Microsoft Finland DevDays 2014Kallex
 

Was ist angesagt? (12)

Java Web Programming on Google Cloud Platform [1/3] : Google App Engine
Java Web Programming on Google Cloud Platform [1/3] : Google App EngineJava Web Programming on Google Cloud Platform [1/3] : Google App Engine
Java Web Programming on Google Cloud Platform [1/3] : Google App Engine
 
Distributed Crawler Service architecture presentation
Distributed Crawler Service architecture presentationDistributed Crawler Service architecture presentation
Distributed Crawler Service architecture presentation
 
Json to hive_schema_generator
Json to hive_schema_generatorJson to hive_schema_generator
Json to hive_schema_generator
 
PLAT-13 Metadata Extraction and Transformation
PLAT-13 Metadata Extraction and TransformationPLAT-13 Metadata Extraction and Transformation
PLAT-13 Metadata Extraction and Transformation
 
Content Management with MongoDB by Mark Helmstetter
 Content Management with MongoDB by Mark Helmstetter Content Management with MongoDB by Mark Helmstetter
Content Management with MongoDB by Mark Helmstetter
 
Blazing Fast Analytics with MongoDB & Spark
Blazing Fast Analytics with MongoDB & SparkBlazing Fast Analytics with MongoDB & Spark
Blazing Fast Analytics with MongoDB & Spark
 
Lift Framework
Lift FrameworkLift Framework
Lift Framework
 
Socialite, the Open Source Status Feed Part 1: Design Overview and Scaling fo...
Socialite, the Open Source Status Feed Part 1: Design Overview and Scaling fo...Socialite, the Open Source Status Feed Part 1: Design Overview and Scaling fo...
Socialite, the Open Source Status Feed Part 1: Design Overview and Scaling fo...
 
quickguide-einnovator-5-springxd
quickguide-einnovator-5-springxdquickguide-einnovator-5-springxd
quickguide-einnovator-5-springxd
 
Key note big data analytics ecosystem strategy
Key note   big data analytics ecosystem strategyKey note   big data analytics ecosystem strategy
Key note big data analytics ecosystem strategy
 
Extensible RESTful Applications with Apache TinkerPop
Extensible RESTful Applications with Apache TinkerPopExtensible RESTful Applications with Apache TinkerPop
Extensible RESTful Applications with Apache TinkerPop
 
Scalable Architectures - Microsoft Finland DevDays 2014
Scalable Architectures - Microsoft Finland DevDays 2014Scalable Architectures - Microsoft Finland DevDays 2014
Scalable Architectures - Microsoft Finland DevDays 2014
 

Andere mochten auch

hw4_specifications
hw4_specificationshw4_specifications
hw4_specificationstutorialsruby
 
collapsible-panels-tutorial
collapsible-panels-tutorialcollapsible-panels-tutorial
collapsible-panels-tutorialtutorialsruby
 
wtst3_pettichord3
wtst3_pettichord3wtst3_pettichord3
wtst3_pettichord3tutorialsruby
 

Andere mochten auch (6)

hw4_specifications
hw4_specificationshw4_specifications
hw4_specifications
 
collapsible-panels-tutorial
collapsible-panels-tutorialcollapsible-panels-tutorial
collapsible-panels-tutorial
 
INFS730
INFS730INFS730
INFS730
 
Ad-journal
Ad-journalAd-journal
Ad-journal
 
wtst3_pettichord3
wtst3_pettichord3wtst3_pettichord3
wtst3_pettichord3
 
newsletter84
newsletter84newsletter84
newsletter84
 

Ähnlich wie tutorial2-notes2

The Big Picture and How to Get Started
The Big Picture and How to Get StartedThe Big Picture and How to Get Started
The Big Picture and How to Get Startedguest1af57e
 
Shindig in 2 hours
Shindig in 2 hoursShindig in 2 hours
Shindig in 2 hourshanhvi
 
Architectures, Frameworks and Infrastructure
Architectures, Frameworks and InfrastructureArchitectures, Frameworks and Infrastructure
Architectures, Frameworks and Infrastructureharendra_pathak
 
REST easy with API Platform
REST easy with API PlatformREST easy with API Platform
REST easy with API PlatformAntonio Peric-Mazar
 
File Repository on GAE
File Repository on GAEFile Repository on GAE
File Repository on GAElynneblue
 
CTS Conference Web 2.0 Tutorial Part 2
CTS Conference Web 2.0 Tutorial Part 2CTS Conference Web 2.0 Tutorial Part 2
CTS Conference Web 2.0 Tutorial Part 2Geoffrey Fox
 
Google Cloud Platform, Compute Engine, and App Engine
Google Cloud Platform, Compute Engine, and App EngineGoogle Cloud Platform, Compute Engine, and App Engine
Google Cloud Platform, Compute Engine, and App EngineCsaba Toth
 
OGCE Project Overview
OGCE Project OverviewOGCE Project Overview
OGCE Project Overviewmarpierc
 
Final Presentation
Final PresentationFinal Presentation
Final PresentationMihai Deaconu
 
Spring data presentation
Spring data presentationSpring data presentation
Spring data presentationOleksii Usyk
 
Droidcon Paris 2015
Droidcon Paris 2015Droidcon Paris 2015
Droidcon Paris 2015Renaud Boulard
 
Enterprise guide to building a Data Mesh
Enterprise guide to building a Data MeshEnterprise guide to building a Data Mesh
Enterprise guide to building a Data MeshSion Smith
 
Dojo - from web page to web apps
Dojo - from web page to web appsDojo - from web page to web apps
Dojo - from web page to web appsyoavrubin
 
Giga Spaces Data Grid / Data Caching Overview
Giga Spaces Data Grid / Data Caching OverviewGiga Spaces Data Grid / Data Caching Overview
Giga Spaces Data Grid / Data Caching Overviewjimliddle
 
Spark Saturday: Spark SQL & DataFrame Workshop with Apache Spark 2.3
Spark Saturday: Spark SQL & DataFrame Workshop with Apache Spark 2.3Spark Saturday: Spark SQL & DataFrame Workshop with Apache Spark 2.3
Spark Saturday: Spark SQL & DataFrame Workshop with Apache Spark 2.3Databricks
 
SQL to NoSQL: Top 6 Questions
SQL to NoSQL: Top 6 QuestionsSQL to NoSQL: Top 6 Questions
SQL to NoSQL: Top 6 QuestionsMike Broberg
 
JS Fest 2019/Autumn. Александр Товмач. JAMstack
JS Fest 2019/Autumn. Александр Товмач. JAMstackJS Fest 2019/Autumn. Александр Товмач. JAMstack
JS Fest 2019/Autumn. Александр Товмач. JAMstackJSFestUA
 
Internet Explorer 8
Internet Explorer 8Internet Explorer 8
Internet Explorer 8David Chou
 
AWS (Hadoop) Meetup 30.04.09
AWS (Hadoop) Meetup 30.04.09AWS (Hadoop) Meetup 30.04.09
AWS (Hadoop) Meetup 30.04.09Chris Purrington
 
MeteorJS Introduction
MeteorJS IntroductionMeteorJS Introduction
MeteorJS IntroductionNitya Narasimhan
 

Ähnlich wie tutorial2-notes2 (20)

The Big Picture and How to Get Started
The Big Picture and How to Get StartedThe Big Picture and How to Get Started
The Big Picture and How to Get Started
 
Shindig in 2 hours
Shindig in 2 hoursShindig in 2 hours
Shindig in 2 hours
 
Architectures, Frameworks and Infrastructure
Architectures, Frameworks and InfrastructureArchitectures, Frameworks and Infrastructure
Architectures, Frameworks and Infrastructure
 
REST easy with API Platform
REST easy with API PlatformREST easy with API Platform
REST easy with API Platform
 
File Repository on GAE
File Repository on GAEFile Repository on GAE
File Repository on GAE
 
CTS Conference Web 2.0 Tutorial Part 2
CTS Conference Web 2.0 Tutorial Part 2CTS Conference Web 2.0 Tutorial Part 2
CTS Conference Web 2.0 Tutorial Part 2
 
Google Cloud Platform, Compute Engine, and App Engine
Google Cloud Platform, Compute Engine, and App EngineGoogle Cloud Platform, Compute Engine, and App Engine
Google Cloud Platform, Compute Engine, and App Engine
 
OGCE Project Overview
OGCE Project OverviewOGCE Project Overview
OGCE Project Overview
 
Final Presentation
Final PresentationFinal Presentation
Final Presentation
 
Spring data presentation
Spring data presentationSpring data presentation
Spring data presentation
 
Droidcon Paris 2015
Droidcon Paris 2015Droidcon Paris 2015
Droidcon Paris 2015
 
Enterprise guide to building a Data Mesh
Enterprise guide to building a Data MeshEnterprise guide to building a Data Mesh
Enterprise guide to building a Data Mesh
 
Dojo - from web page to web apps
Dojo - from web page to web appsDojo - from web page to web apps
Dojo - from web page to web apps
 
Giga Spaces Data Grid / Data Caching Overview
Giga Spaces Data Grid / Data Caching OverviewGiga Spaces Data Grid / Data Caching Overview
Giga Spaces Data Grid / Data Caching Overview
 
Spark Saturday: Spark SQL & DataFrame Workshop with Apache Spark 2.3
Spark Saturday: Spark SQL & DataFrame Workshop with Apache Spark 2.3Spark Saturday: Spark SQL & DataFrame Workshop with Apache Spark 2.3
Spark Saturday: Spark SQL & DataFrame Workshop with Apache Spark 2.3
 
SQL to NoSQL: Top 6 Questions
SQL to NoSQL: Top 6 QuestionsSQL to NoSQL: Top 6 Questions
SQL to NoSQL: Top 6 Questions
 
JS Fest 2019/Autumn. Александр Товмач. JAMstack
JS Fest 2019/Autumn. Александр Товмач. JAMstackJS Fest 2019/Autumn. Александр Товмач. JAMstack
JS Fest 2019/Autumn. Александр Товмач. JAMstack
 
Internet Explorer 8
Internet Explorer 8Internet Explorer 8
Internet Explorer 8
 
AWS (Hadoop) Meetup 30.04.09
AWS (Hadoop) Meetup 30.04.09AWS (Hadoop) Meetup 30.04.09
AWS (Hadoop) Meetup 30.04.09
 
MeteorJS Introduction
MeteorJS IntroductionMeteorJS Introduction
MeteorJS Introduction
 

Mehr von tutorialsruby

&lt;img src="../i/r_14.png" />
&lt;img src="../i/r_14.png" />&lt;img src="../i/r_14.png" />
&lt;img src="../i/r_14.png" />tutorialsruby
 
TopStyle Help &amp; &lt;b>Tutorial&lt;/b>
TopStyle Help &amp; &lt;b>Tutorial&lt;/b>TopStyle Help &amp; &lt;b>Tutorial&lt;/b>
TopStyle Help &amp; &lt;b>Tutorial&lt;/b>tutorialsruby
 
The Art Institute of Atlanta IMD 210 Fundamentals of Scripting &lt;b>...&lt;/b>
The Art Institute of Atlanta IMD 210 Fundamentals of Scripting &lt;b>...&lt;/b>The Art Institute of Atlanta IMD 210 Fundamentals of Scripting &lt;b>...&lt;/b>
The Art Institute of Atlanta IMD 210 Fundamentals of Scripting &lt;b>...&lt;/b>tutorialsruby
 
&lt;img src="../i/r_14.png" />
&lt;img src="../i/r_14.png" />&lt;img src="../i/r_14.png" />
&lt;img src="../i/r_14.png" />tutorialsruby
 
&lt;img src="../i/r_14.png" />
&lt;img src="../i/r_14.png" />&lt;img src="../i/r_14.png" />
&lt;img src="../i/r_14.png" />tutorialsruby
 
Standardization and Knowledge Transfer – INS0
Standardization and Knowledge Transfer – INS0Standardization and Knowledge Transfer – INS0
Standardization and Knowledge Transfer – INS0tutorialsruby
 
xhtml-documentation
xhtml-documentationxhtml-documentation
xhtml-documentationtutorialsruby
 
xhtml-documentation
xhtml-documentationxhtml-documentation
xhtml-documentationtutorialsruby
 
0047ecaa6ea3e9ac0a13a2fe96f4de3bfd515c88f5d90c1fae79b956363d7f02c7fa060269
0047ecaa6ea3e9ac0a13a2fe96f4de3bfd515c88f5d90c1fae79b956363d7f02c7fa0602690047ecaa6ea3e9ac0a13a2fe96f4de3bfd515c88f5d90c1fae79b956363d7f02c7fa060269
0047ecaa6ea3e9ac0a13a2fe96f4de3bfd515c88f5d90c1fae79b956363d7f02c7fa060269tutorialsruby
 
0047ecaa6ea3e9ac0a13a2fe96f4de3bfd515c88f5d90c1fae79b956363d7f02c7fa060269
0047ecaa6ea3e9ac0a13a2fe96f4de3bfd515c88f5d90c1fae79b956363d7f02c7fa0602690047ecaa6ea3e9ac0a13a2fe96f4de3bfd515c88f5d90c1fae79b956363d7f02c7fa060269
0047ecaa6ea3e9ac0a13a2fe96f4de3bfd515c88f5d90c1fae79b956363d7f02c7fa060269tutorialsruby
 
BloggingWithStyle_2008
BloggingWithStyle_2008BloggingWithStyle_2008
BloggingWithStyle_2008tutorialsruby
 
BloggingWithStyle_2008
BloggingWithStyle_2008BloggingWithStyle_2008
BloggingWithStyle_2008tutorialsruby
 
cascadingstylesheets
cascadingstylesheetscascadingstylesheets
cascadingstylesheetstutorialsruby
 
cascadingstylesheets
cascadingstylesheetscascadingstylesheets
cascadingstylesheetstutorialsruby
 

Mehr von tutorialsruby (20)

&lt;img src="../i/r_14.png" />
&lt;img src="../i/r_14.png" />&lt;img src="../i/r_14.png" />
&lt;img src="../i/r_14.png" />
 
TopStyle Help &amp; &lt;b>Tutorial&lt;/b>
TopStyle Help &amp; &lt;b>Tutorial&lt;/b>TopStyle Help &amp; &lt;b>Tutorial&lt;/b>
TopStyle Help &amp; &lt;b>Tutorial&lt;/b>
 
The Art Institute of Atlanta IMD 210 Fundamentals of Scripting &lt;b>...&lt;/b>
The Art Institute of Atlanta IMD 210 Fundamentals of Scripting &lt;b>...&lt;/b>The Art Institute of Atlanta IMD 210 Fundamentals of Scripting &lt;b>...&lt;/b>
The Art Institute of Atlanta IMD 210 Fundamentals of Scripting &lt;b>...&lt;/b>
 
&lt;img src="../i/r_14.png" />
&lt;img src="../i/r_14.png" />&lt;img src="../i/r_14.png" />
&lt;img src="../i/r_14.png" />
 
&lt;img src="../i/r_14.png" />
&lt;img src="../i/r_14.png" />&lt;img src="../i/r_14.png" />
&lt;img src="../i/r_14.png" />
 
Standardization and Knowledge Transfer – INS0
Standardization and Knowledge Transfer – INS0Standardization and Knowledge Transfer – INS0
Standardization and Knowledge Transfer – INS0
 
xhtml_basics
xhtml_basicsxhtml_basics
xhtml_basics
 
xhtml_basics
xhtml_basicsxhtml_basics
xhtml_basics
 
xhtml-documentation
xhtml-documentationxhtml-documentation
xhtml-documentation
 
xhtml-documentation
xhtml-documentationxhtml-documentation
xhtml-documentation
 
CSS
CSSCSS
CSS
 
CSS
CSSCSS
CSS
 
0047ecaa6ea3e9ac0a13a2fe96f4de3bfd515c88f5d90c1fae79b956363d7f02c7fa060269
0047ecaa6ea3e9ac0a13a2fe96f4de3bfd515c88f5d90c1fae79b956363d7f02c7fa0602690047ecaa6ea3e9ac0a13a2fe96f4de3bfd515c88f5d90c1fae79b956363d7f02c7fa060269
0047ecaa6ea3e9ac0a13a2fe96f4de3bfd515c88f5d90c1fae79b956363d7f02c7fa060269
 
0047ecaa6ea3e9ac0a13a2fe96f4de3bfd515c88f5d90c1fae79b956363d7f02c7fa060269
0047ecaa6ea3e9ac0a13a2fe96f4de3bfd515c88f5d90c1fae79b956363d7f02c7fa0602690047ecaa6ea3e9ac0a13a2fe96f4de3bfd515c88f5d90c1fae79b956363d7f02c7fa060269
0047ecaa6ea3e9ac0a13a2fe96f4de3bfd515c88f5d90c1fae79b956363d7f02c7fa060269
 
HowTo_CSS
HowTo_CSSHowTo_CSS
HowTo_CSS
 
HowTo_CSS
HowTo_CSSHowTo_CSS
HowTo_CSS
 
BloggingWithStyle_2008
BloggingWithStyle_2008BloggingWithStyle_2008
BloggingWithStyle_2008
 
BloggingWithStyle_2008
BloggingWithStyle_2008BloggingWithStyle_2008
BloggingWithStyle_2008
 
cascadingstylesheets
cascadingstylesheetscascadingstylesheets
cascadingstylesheets
 
cascadingstylesheets
cascadingstylesheetscascadingstylesheets
cascadingstylesheets
 

KĂźrzlich hochgeladen

A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhisoniya singh
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxOnBoard
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 

KĂźrzlich hochgeladen (20)

A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptx
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 

tutorial2-notes2

  • 1. Clouds and Web2.0 II: Case Study and Tutorial CTS08 Tutorial Hyatt Regency Irvine California May 19 2008 Geoffrey Fox, Marlon Pierce Community Grids Laboratory, School of informatics Indiana University http://www.infomall.org/multicore gcf@indiana.edu, http://www.infomall.org 1
  • 2. Polar Grid: A Web 2.0 Case Study Using Microformats, GeoRSS, REST, and KML Slides from Yu Ma
  • 3. More Detailed Information • See Marie’s blog: http://tethealla.blogspot.com/ • We use blogs in the lab extensively as lab books.
  • 4.
  • 5. PolarGrid Datasets • A typical processed dataset consists of: – One plain text header file describing the overall system and metadata of the particular chunk of measurements. – Multiple JPG images processed from the corresponding raw data. – Collection timestamp and fundamental properties such as waveform and transmitting (TX) /receiving (RX) antenna IDs are embedded in file names. • Images are processed by Kansas University’s Matlab-based code, GOAP
  • 6. Approaches • Convert unstructured metadata description into microformats. • Construct a relational database to enable fast and dynamic queries. • Provide geographic annotation embedded into web feeds that can be plotted by Google Maps and Google Earth • Technologies: – GeoRSS: RSS syndication with geo-location – Microformats: extensions to XHTML
  • 7. Microformat Conversion • Microformats capture “semantic” metadata information in XHTML format. • Principals for converted microformats: – Simple: capture the most basic information unit. – Reusable: capture shared features among data. – Composable: when combined, can reflect more complex relationships among data. • Most of our microformat classes are prefixed with “pg:” denoting the PolarGrid project namespace, except when existing generic ones such as the geo microformat are used.
  • 8. How To Extend XHTML • Use either <div> or <span> tags. • Display of these tags can be controlled with style sheets • You can also dynamically control these with JavaScript. • Next generation of browsers will have built-in support for well-known microformats such as hCard.
  • 9. Simple Example: Geo Format <span class="geo"> <span class="longitude">-2.193</span> <span class="latitude">52.686</span> </span>
  • 10. Polar Grid Microformat Examples • Simple descriptions: <span class="pg:radar-type">MCRDS</span> • Measurements with unit: <span class="pg:delay"> <span class="pg:value">2.5</span> <span class="pg:unit">us</span> </span>
  • 11. Microformat Examples • Identification for cross-references: <span class="pg:waveform”> <span class="pg:id">1</span> </span> • Commonly shared features: (e.g. both TX and RX antennas record same kind of information) <span class="pg:antenna"> <span class="pg:id">0</span> <span class="pg:type">TX/RX</span> <span class="pg:attenuation">0</span> </span>
  • 12. Microformat Examples • Structured collections/Arrays: <span class="pg:antenna-array"> <span class="pg:array- size">2</span> <span class="pg:antenna”> <span class="pg:id">0</span> <span class="pg:type">TX</span> <span class="pg:attenuation">0</span> </span> <span class="pg:antenna”> <span class="pg:id">1</span> <span class="pg:type">TX</span> <span class="pg:attenuation">0</span> </span> </span>
  • 13. Microformat Examples • Complex objects: (e.g. spatial and temporal information that uniquely defines a processed data chunk) <span class="pg:data-chunk"> <span class="pg:name">Start/Stop</span> <span class="pg:utc- timestamp">1202755351.892651</span> <span class="geo"> <span class="longitude">-2.193</span> <span class="latitude">52.686</span> </span> </span>
  • 14. GeoRSS-Simple Embedded Atom Feed <?xml version="1.0" encoding="utf-8"?> <feed xmlns="http://www.w3.org/2005/Atom" xmlns:georss="http://www.georss.org/georss"> <title>PolarGrid Expedition</title> <id>tag:pg3.ucs.indiana.edu,2008:polargrid-expedition-2008- 05</id> <updated>2008-05-11T02:02:54Z</updated> <author> <name>Polar Grid</name> </author> <link type="application/atom+xml" rel="self" href="http://pg3.ucs.indiana.edu/cgi-bin/getPolarGridFeed"/>
  • 15. GeoRSS-Simple Embedded Atom Feed <entry> <title>Data Chunk: 2008-03-11 11:55:41</title> <id>tag:pg3.ucs.indiana.edu,2008:polargrid expedition-2008- 05-262</id> <updated>2008-03-11T11:55:41Z</updated> <content type="html"> … (data chunk information described in microformats) … </content> <georss:point>77.585957 -52.448461</georss:point> <georss:point>77.580976 -52.435148</georss:point> </entry> </feed>
  • 16. Google RSS Feed Reader
  • 18. Corresponding KML <?xml version="1.0" encoding="UTF-8"?> <kml xmlns="http://earth.google.com/kml/2.2"> <Document> <name>PolarGrid Expedition</name> <Placemark id="tag:pg3.ucs.indiana.edu,2008:polargrid-expedition- 2008-05-262”> <name>Data Chunk: 2008-03-11 11:55:41</name> <description><![CDATA[ … (data chunk information described in microformats) … ]]></description> <Point><coordinates>-52.448461,77.585957</coordinates></Point> <Point><coordinates>-52.435148,77.580976</coordinates></Point> </Placemark> </Document></kml>
  • 20. Web 2.0 Lessons • Web 2.0 approaches can be applied to management of scientific information. • With the right choices, you get a lot for free. • Microformats: simple ways to encode name-value pairs, build up semantic descriptions. • GeoRSS: orders data by both time and space – Works in all standard RSS/Atom readers. – Google Maps supports natively
  • 22. User Layer Browser + Browser + Browser + JavaScript JavaScript JavaScript Libraries Libraries Libraries AJAX, JSON, REST, RSS Gadgets, Server-Side Facebook Apps Gadget Gdata Apps Aggregators SOAP, REST, RSS Blogs, Social Gadget Calendars, Facebook Containers Docs, etc System Cloud Layer
  • 23. Map Key • Red blocks represent browsers and things that run in them (JavaScript). – This is the “user” level. – Client side mashups • Green blocks represent Web servers and their applications. – This is the “developer” level. – Server-side mashups. – These can run on any hosting environment: your web server, Amazon EC2, Google GAE, etc. • Blue blocks represent third party services. – This is the “system cloud” layer. • Arrows represent network communications. – Everything goes over HTTP – REST, AJAX: communication patterns. – RSS, ATOM, JSON, SOAP: message format.
  • 24. Using Google’s GData API How to Write Server-Side Mash- Ups
  • 25. GData: the API to Google Services • Google provides an extensive set of online services with well- known user interfaces. – Docs – Spreadsheet – YouTube – Blogger/Blogspot – Calendar – Picasso Photo Sharing – GMail • These have programming interfaces as well as user interfaces. – Server side: Java, .NET, PHP, Python – Client side: JavaScript • Client interfaces include visual components suitable for mash- ups • Server-side APIs don’t include visual components but do allow you to make server-side mash-ups.
  • 26. Server-Side Mash-Up Use Case • Imagine you have a Web service that runs a large parallel finite element code. – Output can include images, movies, output files, metadata, etc. – Your web service manages the interaction with the queuing system (another topic…) • With a server-side mash-up, your Web Service can – Post status information about your jobs (“Step 521 Completed!”) on your blog. – Post URLs pointing to your output files on your blog. – Upload your visualizations to Picasso and YouTube (and post links). – Generate RSS/Atom feeds of the above. – Post results to Google Calendar • We’ll look at some Java examples.
  • 27. Getting Started with GData • Create a Blog, make sure you can login to YouTube, etc. • You will need a clientID and associated developer key. – Get these from http://code.google.com/apis/base/signup.html. • Get the Java code – http://code.google.com/p/gdata-java-client/downloads/list • See any number of Google examples – http://code.google.com/apis/base/javadevguide.html • One trick: You can get your blogger ID by examining the your Blog’s Atom feed. – It will be in the header and look something like this: <id>tag:blogger.com,1999:blog-19457310</id> – The blog ID to use in the code below would be 19457310 in this example. • The full working example is here – http://communitygrids.blogspot.com/2008/03/googles-gdata-java- api.html – We will simplify for pedagogical reasons.
  • 28. Posting Results to Your Blogspot Blog String userName="me@gmail.com"; String password= "qwerty"; Replace these with your values String content=“…”; GoogleService myService= Login in new GoogleService("blogger",""); myService.setUserCredentials(userName,password); Create the entry to insert Entry myEntry = new Entry(); myEntry.setTitle(new PlainTextConstruct(title)); myEntry.setContent(new PlainTextConstruct(content)); Insert the new entry using REST’s POST URL postUrl = new URL("http://www.blogger.com/feeds/" + blogID + "/posts/default"); myService.insert(postUrl, myEntry);
  • 29. Getting a YouTube Feed String feedUrl="http://gdata.youtube.com/feeds/api/videos/"; String scarFace5sec="http://gdata.youtube.com/feeds/api/videos/egwB7hVIIE c"; YouTubeService service = new YouTubeService(clientID, developer_key); service.setUserCredentials(userName,password); VideoFeed videoFeed = youTubeService.getFeed(new URL(feedUrl),VideoFeed.class); VideoEntry videoEntry = youTubeService.getEntry(new URL(scarFace5sec), VideoEntry.class); //Loop over feed entries and display. String feedContent= "Title: " + videoEntry.getTitle().getPlainText()+”"; feedContent+=videoEntry.getMediaGroup().
  • 30. Posting To Google Calendar CalendarService calService=new CalendarService(clientID); calService.setUserCredentials(userName,password); Log in to the calendar service URL postUrl = new URL("http://www.google.com/calendar/feeds/"+userName+"/private/full"); CalendarEventEntry myEntry = new CalendarEventEntry(); myEntry.setTitle(new PlainTextConstruct(titleOfEvent)); Create a new Calendar entry myEntry.setContent(new PlainTextConstruct(contentToPost)); DateTime startTime = new DateTime(new Date()); When eventTimes = new When(); eventTimes.setStartTime(startTime); Create the event time and insert myEntry.addTime(eventTimes); CalendarEventEntry insertedEntry = calendarService.insert(postUrl, myEntry); CalendarEventEntry myEntry2 = new CalendarEventEntry(); String now=(new Date()).toString(); myEntry2.setContent(new PlainTextConstruct("Test post at "+now)); myEntry2.setQuickAdd(true); An alternative way to post the entry // Send the request and receive the response: CalendarEventEntry insertedEntry2 =calendarService.insert(postUrl, myEntry2);
  • 31. Some Other Things You Can Do with GData Server Code • YouTube – Search movies by keyword tag, “related”, categories – Upload and download movies. – Put movies into collections • Calendar – Retrieve events as RSS feed • Spreadsheet – Remotely retrieve and insert or change row and cell data. – Use structured queries to retrieve data ranges. – Remotely invoke batch operations
  • 32. Making FaceBook Applications Using Facebook as a backend service.
  • 33. Full Examples and More Detailed Notes • PHP and JavaScript notes – http://communitygrids.blogspot.com/2008/02/q uick-facebook-javascript-api-notes.html • JavaScript example: – http://communitygrids.blogspot.com/2008/02/li ttle-more-jsfacebook-hacking.html
  • 34. Why Use FaceBook as a Portal? • Because it has 10’s of millions of users. – The largest Web 2.0-style Web portal • Easy to create Social Networks: groups of friends and share applications, communicate, share information, etc. – And more importantly, tools for building and managing these networks • Can leverage many third party applications – For example, photo albums – Of course many of them are trivial, silly
  • 35. FaceBook APIs • These come in two flavors – Embedded: make your application available through FaceBook. • PHP APIs – Embedding: use Facebook authentication and social network data in your application. • JavaScript API • In both cases, you run your application on your Web server. – You application do anything you can implement. – And you can query FaceBook for social network information, user metadata.
  • 36. Using The JavaScript API • Getting Started: – You just need a Web server to host your application. – Register as a developer – Place Facebook’s xd_receiver.htm on your web server • Make sure the relative path used is correct. • What will happen? – Your page will run outside of Facebook. – Anyone loading your application will be directed to Facebook to login. – User is then redirected back to your page. • Your application can make calls back to Facebook. • And you can do anything else you want. – So you could embed this application in a portlet, interact with a local database, – You can build your application with .NET or Java Server Faces, etc.
  • 37. HTML Page Example <textarea style="width:500px;height:300px;" id="_traceTextBox"> </textarea> <script src="http://static.ak.facebook.com/js/api_lib/F acebookApi.debug.js" type="text/javascript"> var api = new FB.ApiClient('<your_key_here>', '/xd_receiver.htm', null); … </script>
  • 38. Interact with FaceBook api.requireLogin(function(exception) { api.friends_get(null,getResults); var myinfo= 'last_name, first_name, hometown_location, work_history, pic_small'; api.users_getInfo(api.get_session().uid, myinfo, getInfo); });
  • 39. Notes on Previous Slides • The requireLogin, friends_get, and users_getInfo are FaceBook API calls. • The getResults and getInfo methods are callback methods that I defined. – Shown in next slide • The myinfo data structure is taken from the Facebook XML user profile. – http://wiki.developers.facebook.com/index.php /Users.getInfo
  • 40. Developer Defined Call-Back Functions function getResults(result,exception) { Debug.dump(api.get_session().uid,’You'); Debug.dump(result,’Your Friends’); } function getInfo(result,exception) { Debug.dump(result,’Your info'); } These two methods receive the output returned from Facebook by the API’s friends_get() and users_getInfo() methods. The results are dumped to the text window but you can do more interesting things.
  • 41. Output Info Dumped to Text Area you: 627774031 Your friends: {Array} [Deleted] User’s Facebook ID and the ID numbers of his friends Your Info: {Array} [0]: {Object} first_name: Marlon hometown_location: {Object} city: state: User’s profile metadata. Note some fields are strings, some are country: Arrays, and some are structured objects of strings. zip: last_name: Pierce pic_small: http://profile.ak.facebook.com/profile6/1797/98/t627774031_2463.jpg uid: 627774031 work_history: {Object}
  • 42. Facebooks’ Query Language • All of the FaceBook API is basically a set of wrappers around their SQL like FQL query language. So you can, if you prefer, make custom methods out of FQL query strings. var myQuery='SELECT name FROM user WHERE uid='+api.get_session().uid; api.fql_query(myQuery, getFQLResponse); getFQLResponse() is a developer-written callback function
  • 43. Working with Facebook Groups • To list information about groups you are a member of, use the following. – You can replace the value of uid with any UID you know. – 18629081888 is the Group ID for the Open Grid Forum’s uninteresting Facebook group api.groups_get(api.get_session().uid,null,getGroup s); api.groups_getMembers(18629081888,getGroupM embers);
  • 44. More Information • The JavaScript documentation is available from here – http://wiki.developers.facebook.com/index.php /JavaScript_Client_Library • It is pretty minimal, but it is essentially the same as the better documented PHP API. – Replace PHP’s "." with a "_". – So PHP’s users.getInfo becomes users_getInfo(...) in JavaScript.
  • 45. Open Social API and Gadgets
  • 46. What Is a Gadget? Simple gadgets for getting a Grid proxy credential and running remote commands. Both run on my own Web server.
  • 47. Gadget Definition <?xml version="1.0" encoding="UTF-8" ?> <Module> <ModulePrefs title="MyProxy Gadget Example" scrolling="true" height="500"/> <Content type="url" href="http://156.56.104.143:8080/GTLAB/examples/MyProxyExample.j sf"> </Content> </Module> • This XML page is web accessible via http://156.56.104.143:8080/GTLAB/MyProxyGadget.x ml • This URL points to the actual application (written in JSF) • Google uses an HTML IFrame to load the page. • You can also use content type=“html” for more integrated applications. – For example, you can send messages between gadgets in the client.
  • 48. Gadgets and Open Social • Open Social is a consortium of Facebook’s major competitors. – Orkut, MySpace, Hi5, LinkedIn, Friendster, etc. • The Open Social API has two parts – JavaScript libraries for building social gadgets. • Must run in a gadget container (server) – REST APIs for exchanging data between container servers. • The ideas: – JS APIs let you make portable gadgets that will work in different containers (Hi5LinkedIn) but data will be different. – REST will let you export/import data.
  • 49. Getting Started • You need a Gadget container to host your gadgets. – LinkedIn is notably selective about the gadgets it will host. • Orkut provides a sandbox, but you have to upload your gadgets. • Apache Shindig is an extremely simple Java- based container. – De facto reference implementation of Open Social – Not suitable for production by a long ways. – But it will work on an air plane. • Shindig is something of a moving target. – My February notes were obsolete…
  • 50. Getting Started with Shindig • Visit the Web site for information – http://incubator.apache.org/shindig • Check out the code with SVN – mkdir $HOME/shindig; cd shindig – svn co http://svn.apache.org/repos/asf/incubator/shindig/trunk/ • Build and run it with Apache Maven – Run “mvn” from $HOME/shindig/ – Run “mvn -Prun” from $HOME/shindig/java/server • Point browser to http://localhost:8080/gadgets/files/container/sample1.html and look through other samples. – You can also load these HTML files using file:// if you don't want to run the Jetty server. • Periodically check for updates and rebuild – svn update • The READMEs have better/more up-to-date information than the website.
  • 51. What Do You Get? • Shindig actually has two major parts: – A container that can run social gadgets • This must have access to your user and social network database. – A gadget aggregator that displays gadgets • Runs the layout manager. • Think of this as your own iGoogle server. • Access the gadget container – http://localhost:8080/gadgets/files/samplecont ainer/samplecontainer.html
  • 52. The gadget is actually served remotely. This is the module definition. The gadget can be displayed in your http://localhost:8080 display container.
  • 53. Import JS Libraries into Container Page <link rel="stylesheet" href="gadgets.css"> <script type="text/javascript" src="../../js/rpc.js?c=1&debug=1"></script> <script type="text/javascript" src="cookies.js"></script> <script type="text/javascript" src="util.js"></script> <script type="text/javascript" src="gadgets.js"></script> <script type="text/javascript" src="cookiebaseduserprefstore.js"></script>
  • 54. Create Your Layout Manager var my = {}; Note gadgets are loaded from remote host containers. my.gadgetSpecUrls = [ 'http://www.google.com/ig/modules/horoscope.xml', 'http://www.google.com/ig/modules/aue07otr.xml', 'http://www.labpixies.com/campaigns/todo/todo.xml' ]; my.LayoutManager = function() { gadgets.LayoutManager.call(this); }; my.LayoutManager.inherits(gadgets.LayoutManager); my.LayoutManager.prototype.getGadgetChrome = function(gadget) { var chromeId = 'gadget-chrome-' + gadget.id; return chromeId ? document.getElementById(chromeId) : null; };
  • 55. Initialize and Render my.init = function() { gadgets.container.layoutManager = new my.LayoutManager(); }; my.renderGadgets = function() { for (var i = 0; i < my.gadgetSpecUrls.length; ++i) { var gadget = gadgets.container.createGadget( {specUrl: my.gadgetSpecUrls[i]}); gadgets.container.addGadget(gadget); gadgets.container.renderGadget(gadget); } };
  • 56. HTML Display <body onLoad="my.init();my.renderGadgets()"> <h2>Sample: Dynamic Height</h2> <div id="gadget-chrome-0" class="gadgets-gadget- chrome"></div> <div id="gadget-chrome-1" class="gadgets-gadget- chrome"></div> <div id="gadget-chrome-2" class="gadgets-gadget- chrome"></div> </body> Shows the 3 Gadgets. As we saw, this will use “flow” layout and “chrome” styling.
  • 57. Hosting Your Own Social Gadget • Place your widget code here: – $HOME/shindig/javascript/samplecontainer/exam ples • After compilation, these will be located here: – ./target/gadgets/files/samplecontainer/examples. • These will be served up from – http://localhost:8080/gadgets/files/samplecontain er/examples/myapp.xml • Myapp.xml is the gadget definition we saw earlier.
  • 58. Hello World Gadget in Container Uses flat XML file. User and his network of friends provided by the local container. “Hello” chosen based friend’s preferred http://localhost:8080/gadgets/files/samplecontainer/samplecontainer.html
  • 59. Shindig social network XML “database”. Real containers would use a real database. OpenSocial API essentially lets you retrieve this sort of data.
  • 60. my.gadgetSpecUrls = [ 'http://www.google.com/ig/modules/horoscope.xml', 'http://www.google.com/ig/modules/aue07otr.xml', 'http://localhost:8080/gadgets/files/samplecontainer/example s/SocialHelloWorld.xml' ];
  • 61. More Information • See http://communitygrids.blogspot.com for more detailed information. • Email: mpierce@cs.indiana.edu