Links and Widgets: the Fabric of the Web

Xavier Badosa
Xavier BadosaWeb Manager at Idescat
Links and Widgets:
the Fabric of the Web

Xavier Badosa (@badosa)
Statistical Institute of Catalonia (Idescat)


Task force for the strategic project on the development and
use of common ESS tools and services for dissemination

Eurostat, Luxembourg, 20 September 2012
link-centered medium

             Web
link-centered medium

             Web



       value of a page
        incoming links
PageRank
Links
mechanism:   built-in
<a href="http://www.w3.org/People/Berners-Lee/">
         Tim Berners-Lee
</a>




Links
mechanism:                           built-in
<a href="http://www.w3.org/People/Berners-Lee/">
         Tim Berners-Lee
</a>




Links
mechanism:                           built-in
interface:                           built-in
<a href="http://www.w3.org/People/Berners-Lee/">
         Tim Berners-Lee
</a>


Tim Berners-Lee               (click and go)


Links
mechanism:                           built-in
interface:                           built-in
<a href="http://www.w3.org/People/Berners-Lee/">
         Tim Berners-Lee
</a>


Tim Berners-Lee

Links
mechanism:                           built-in
interface:                           built-in
content retrieval:                     none
<a href="http://www.w3.org/People/Berners-Lee/">
         Tim Berners-Lee
</a>


Tim Berners-Lee

Links
mechanism:                           built-in
interface:                           built-in
content retrieval:                     none
<a href="http://www.w3.org/People/Berners-Lee/">
         WWW inventor
</a>


WWW inventor

Links
mechanism:                           built-in
interface:                           built-in
content retrieval:                     none
<a href="http://www.w3.org/People/Berners-Lee/">
         TimBL
</a>


TimBL

Links
mechanism:                           built-in
interface:                           built-in
content retrieval:                     none
<a href="http://www.w3.org/People/Berners-Lee/">
         Tim Bruce Lee
</a>


Tim Bruce Lee

Links
mechanism:                           built-in
interface:                           built-in
content retrieval:                     none
SIMPLE ! = SUCCESS !

Links
mechanism:           built-in
interface:           built-in
content retrieval:     none
Links
mechanism:           built-in
interface:           built-in
content retrieval:     none
distance:             1 click !
Links and Widgets: the Fabric of the Web
<img src=
"http://graphics8.nytimes.com/
images/misc/nytlogo153x23.gif"
/>
Links and Widgets: the Fabric of the Web
Links and Widgets: the Fabric of the Web
Links and Widgets: the Fabric of the Web
Links and Widgets: the Fabric of the Web
static   dynamic

                   Content and service
                   dissemination




funct.   data
Content and service
dissemination
Widget       Content and service
             dissemination



embeddable
   content
Widget
                        dynamic content
                    +   static content
    embeddable          invisible “content”
                    −   (for example, web beacons)
(visible) content
Links
mechanism:           built-in
interface:           built-in
content retrieval:     none
distance:             1 click
For a map of Esterri de Cardós, visit      For statistics on Esterri de Cardós, visit
the Cartographic Institute of Catalonia.   the Statistical Institute of Catalonia.
Links and Widgets: the Fabric of the Web
spreading atoms in the digital space



                    Content Mobility
spreading atoms in the digital space
from a macro website




                                                     to micro services
                                  Content Mobility
spreading atoms in the digital space
from a macro website




                                                                    to micro services
                       Content dissemination with zero distortion


                       Increased visibility      Content Mobility
                       Increased customer base
                       brand strengthening


                       Better customer service
reversing the communication   initiative
Widgets
mechanism:
interface:
content retrieval:
distance:            0 clicks !!!
<img /> <audio /> <video />

<iframe />

<object /> <embed />

<script />



Widgets
mechanism:                     many
interface:
content retrieval:
distance:                     0 clicks
<div id="fb-root"></div><script>(function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return; js = d.createElement(s);
js.id = id; js.src = "//connect.facebook.net/en_US/all.js
#xfbml=1"; fjs.parentNode.insertBefore(js, fjs);}(document,
'script', 'facebook-jssdk'));</script>


<div class="fb-like" data-href="http://jsonstat.org"
data-send="true“ data-layout="button_count" data-width="450"
data-show-faces="true"></div>




Widgets
mechanism:                                                      many
interface:
content retrieval:
distance:                                                      0 clicks
<iframe src="http://www.slideshare.net/slideshow/
embed_code/8495428" width="427" height="356"
frameborder="0" marginwidth="0" marginheight="0"
scrolling="no" style="border:1px solid #CCC;border-width:
1px 1px 0;margin-bottom:5px" allowfullscreen> </iframe>
<div style="margin-bottom:5px"> <strong> <a
href="http://www.slideshare.net/badosa/
idescat-on-the-google-public-data-explorer" title="Idescat on
the Google Public Data Explorer" target="_blank">Idescat on the
Google Public Data Explorer</a> </strong> from <strong><a
href="http://www.slideshare.net/badosa" target="_blank">Xavier
Badosa</a></strong> </div>



Widgets
mechanism:                                                         many
interface:
content retrieval:
distance:                                                         0 clicks
<blockquote class="twitter-tweet"><p>Data Protocols:
community-based, light-weight <a
href="https://twitter.com/search/?q=%23data"><s>#</s>
<b>data</b></a> <a href="https://twitter.com/search/?
q=%23protocols"><s>#</s><b>protocols</b></a> for
collaborative, distributed work with data <a href="http://t.co/
KTzLtvo8" title="http://ow.ly/cjz0o">ow.ly/cjz0o</a> <a
href="https://twitter.com/search/?q=%23json"><s>#</s><b>json</b>
</a> <a href="https://twitter.com/search/?q=%23api"><s>#</s><b>api
</b></a></p>&mdash; JSON-stat.org (@jsonstat) <a
href="https://twitter.com/jsonstat/status/225589541841551360"
data-datetime="2012-07-18T13:55:12+00:00">July 18, 2012</a>
</blockquote><script src="//platform.twitter.com/widgets.js" charset="utf-
8"></script>




Widgets
mechanism:                                                                   many
interface:
content retrieval:
distance:                                                                0 clicks
<div style="width:300px; font-family:'Helvetica Neue', Helvetica, Arial,
sans-serif; line-height:20px"><div style="background-color:#333; padding:
0px 5px; font-weight:bold"><div style="color:#fff; font-size:12px; line-height:
20px;"><a href="http://data.worldbank.org/indicator/AG.LND.AGRI.ZS/
countries?display=graph" style="color:#fff;text-decoration:none;" class="active">
Agricultural land (% of land area)</a></div></div><script type="text/javascript">
widgetContext = { "url": "http://data.worldbank.org/widgets/indicator/0/
web_widgets_3/AG.LND.AGRI.ZS/countries/1W", "width": 300, "height": 225,
"widgetid": "web_widget_iframe_467ec58867ea6c51dd94ebcf9761e050" };</script>
<div id="web_widget_iframe_467ec58867ea6c51dd94ebcf9761e050"></div><script
src="http://data.worldbank.org/profiles/datafinder/modules/contrib/web_widgets/iframe/
web_widgets_iframe.js"></script><div style="font-size: 10px; color:#000">Data from <a
href="http://data.worldbank.org/indicator/AG.LND.AGRI.ZS/countries?display=graph"
style="color:#CCC;">World Bank</a></div></div>




Widgets
 mechanism:                                                                               many
 interface:
 content retrieval:
 distance:                                                                               0 clicks
wizard




Widgets
mechanism:            many
interface:
content retrieval:
distance:            0 clicks
explicit widget
     Builder
Links and Widgets: the Fabric of the Web
Seamless integration
Side content
Explicit embedding
Side content
Links and Widgets: the Fabric of the Web
side content
side content
main content
author

main content       webmaster




                           side content
differentusers        author   differentusecases



            main content       webmaster




                                       side content
differentusers   author   differentusecases




                                                 customization
     main content         webmaster
     simplicity




                                  side content
author
               implicit widgets
main content
simplicity

               auto-embedding

               widget linkification
author
               implicit widgets
main content
simplicity
Links and Widgets: the Fabric of the Web
Links and Widgets: the Fabric of the Web
Links and Widgets: the Fabric of the Web
Discovery
XML




JSON
       ...
XML
<iframe />




             JSON
                    ...
<img /> <audio /> <video />

<iframe />

<object /> <embed />

<script />



Widgets
mechanism:                     many
interface:
content retrieval:
distance:                     0 clicks
<img /> <audio /> <video />

<iframe />

<object /> <embed />

<script />



Widgets
mechanism:                     many
interface:
content retrieval:
distance:                     0 clicks
<iframe />



<script />



Widgets
mechanism:            many
interface:
content retrieval:
distance:            0 clicks
<iframe />
Code simplification
(Avoids iframe attributes)
<script />



Widgets
mechanism:                    many
interface:
content retrieval:
distance:                    0 clicks
<iframe />
Solution encapsulation
(independence from future changes)
<script />



Widgets
mechanism:                            many
interface:
content retrieval:
distance:                            0 clicks
<iframe />
Analytics
(same origin policy, HTTP_REFERER unreliable)
<script />



Widgets
mechanism:                                       many
interface:
content retrieval:
distance:                                       0 clicks
<iframe />
http://api.idescat.cat/emex.js?p=
id/080193;i/f321,f187,f122,f261&lang=en
<script />



Widgets
mechanism:                                 many
interface:
content retrieval:
distance:                                 0 clicks
var pW = "";
var nomWidget = encodeURIComponent("Emex-Tbl");
try{...}catch (exc){…}
var paginaWidget = encodeURIComponent(pW);
var wp = "&wp=" + encodeURIComponent("pw=" + paginaWidget +
"&nw=" + nomWidget);

document.write("<iframe style="height:102px;width:100%px;border-
width:0px;border-style:solid;border-
color:black;padding:0;margin:0;max-width:400px" height="102"
width="100%" frameborder="0" scrolling="no" border="0"
allowTransparency="true"
src="http://api.idescat.cat/emex.ifr?bc=719ee1&amp;lc=0000cc&amp;
c=000000&amp;t=0&amp;e=f&amp;enc=iso-8859-
1&amp;tc=ffffff&amp;id=080193&amp;i=f321,f187,f122,f261&amp;lang
=en" + wp + ""></iframe><img alt="" border="0"
style="vertical-
align:super;display:inline;width:1px;height:1px;margin:0;padding:0;bord
er:none" src="http://www.idescat.cat/images/1x1.html?v=emex&id="
+ paginaWidget +"" />");
<iframe />
http://api.idescat.cat/emex.ifr?p=
id/080193;i/f321,f187,f122,f261&lang=en
<script />



Widgets
mechanism:                                 many
interface:
content retrieval:
distance:                                 0 clicks
Widgets
mechanism:                  many
interface:           must be built
content retrieval:
distance:                  0 clicks
must be built
It’s a widget but it’s a link too.
(The widget promotes the widget.)




                                     must be built
It’s a widget but it’s a link too.
(The widget promotes the widget.)




Clicks / visit ……………………….… 0.6%
Clicks on content / clicks …….… 93%    must be built
Clicks on footer/ clicks ………….. 7%
Clicks on footer / visit ……….. 0.04%
Main content
     Maximize
     looks/usefulness




                        must be built
Main content
     Maximize
     looks/usefulness


     Resizability



                        must be built
Side content

               must be built
Integration
Layout customization




                       Side content

                                      must be built
Integration
Layout customization




                        Side content
Miniaturization
Content customization


                                       must be built
Widgets
mechanism:                  many
interface:           must be built
content retrieval:             yes
distance:                 0 clicks
provider




Widgets
mechanism:                  many
interface:           must be built
content retrieval:             yes
distance:                 0 clicks
provider




installer
provider




        installer



end    end    end    end
user   user   user   user
provider




installer     installer     installer



      end    end    end    end
      user   user   user   user
provider

       requests




end    end    end    end
user   user   user   user
provider

       requests

      # installs
          x
# end users per install

end    end    end    end
user   user   user   user
provider

          requests


∫(      widget success
 # end users per install    )
 end      end    end     end
 user     user   user    user
provider

           requests


∫(      widget success
     installers’ popularity   )
 end       end    end    end
 user      user   user   user
provider

       requests


 installers’ popularity

end    end    end    end
user   user   user   user



 external factor!
1
7
data


    data


    data


    data


    data


    data



7   data
shared interface
                 data


                 data


                 data


                 data


                 data


                 data



7                data
almost never   shared interface
                                      data


                                      data


                                      data

updated    frequently                 data


                                      data


                                      data


                                      data
provider




end    end    end    end
user   user   user   user
1. Protect the provider ’s website




     end     end     end    end
     user    user    user   user
1. Protect the provider ’s website



  A different content server for third parties
  www.idescat.cat             api.idescat.cat



     end     end     end     end
     user    user    user    user
provider



2. Separate content almost never   frequently




     end    end    end    end
     user   user   user   user
provider



2. Separate content almost never        frequently

  A different cache policy (interface / data)


     end     end     end     end
     user    user    user    user
provider




3. Distribute computing tasks

     end     end    end     end
     user    user   user    user
provider




3. Distribute computing tasks

     end     end    end     end
     user    user   user    user



                    scalability
<script type="text/javascript"
src="http://api.idescat.cat/emex.js?p=id/080193;
i/f321,f187,f122,f261&amp;lang=en"></script>


<noscript><a
href="http://www.idescat.cat/emex/?id=080193
&amp;lang=en">The municipality in
figures</a></noscript>
.js




 <script type="text/javascript"
 src="http://api.idescat.cat/emex.js?p=id/080193;
 i/f321,f187,f122,f261&amp;lang=en"></script>


 <noscript><a
 href="http://www.idescat.cat/emex/?id=080193
 &amp;lang=en">The municipality in
 figures</a></noscript>
.js




var pW = "";var nomWidget = encodeURIComponent("Emex-Tbl");try{pW =
window.top.location.href;if(typeof pW == "undefined") throw "nodefinits";}catch (exc){try{pW =
window.parent.location.href;if(typeof pW == "undefined") throw exc;}catch(excp){pW =
document.location.href;}}var paginaWidget = encodeURIComponent(pW);var wp = "&wp=" +
encodeURIComponent("pw=" + paginaWidget + "&nw=" + nomWidget);
document.write(“

<iframe src="http://api.idescat.cat/emex.ifr?bc=719ee1
&amp;lc=0000cc&amp;c=000000&amp;t=0&amp;e=f&amp;enc=iso-88591&amp;tc=ffffff
&amp;id=080193&amp;i=f321,f187,f122,f261&amp;lang=en" + wp + "" style="height:102px;
width:100%px;border-width:0px;border-style:solid;border-color:black;padding:0;margin:0;
max-width:400px" height="102" width="100%" frameborder="0" scrolling="no"
border="0" allowTransparency="true"
></iframe>
<img alt="" border="0" style="vertical-
align:super;display:inline;width:1px;height:1px;margin:0;padding:0;border:none"
src="http://www.idescat.cat/images/1x1.html?v=emex&id=" + paginaWidget +"" />
");
cache
.js                                                  very long                                   client




var pW = "";var nomWidget = encodeURIComponent("Emex-Tbl");try{pW =
window.top.location.href;if(typeof pW == "undefined") throw "nodefinits";}catch (exc){try{pW =
window.parent.location.href;if(typeof pW == "undefined") throw exc;}catch(excp){pW =
document.location.href;}}var paginaWidget = encodeURIComponent(pW);var wp = "&wp=" +
encodeURIComponent("pw=" + paginaWidget + "&nw=" + nomWidget);
document.write(“

<iframe src="http://api.idescat.cat/emex.ifr?bc=719ee1
&amp;lc=0000cc&amp;c=000000&amp;t=0&amp;e=f&amp;enc=iso-88591&amp;tc=ffffff
&amp;id=080193&amp;i=f321,f187,f122,f261&amp;lang=en" + wp + "" style="height:102px;
width:100%px;border-width:0px;border-style:solid;border-color:black;padding:0;margin:0;
max-width:400px" height="102" width="100%" frameborder="0" scrolling="no"
border="0" allowTransparency="true"
></iframe>
<img alt="" border="0" style="vertical-
align:super;display:inline;width:1px;height:1px;margin:0;padding:0;border:none"
src="http://www.idescat.cat/images/1x1.html?v=emex&id=" + paginaWidget +"" />
");
cache
.js                                                very long                               client
.ifr


<body>
 <div id="Giny">
   <div id="cantoul" class="cantonada"></div><div id="cantou" class="canto"></div>
   <div id="cantour" class="cantonada"></div><div id="titol"></div>
   <div id="cantol" class="canto"></div><div id="Contenidor" class="carrega"></div>
   <div id="cantor" class="canto"></div><div id="cantodl" class="cantonada"></div>
   <div id="cantod" class="canto"></div><div id="cantodr" class="cantonada"></div>
   <address>
    <span>Widget provided by</span>
    <a target="_top" href="http://www.idescat.cat/api/emex/giny/indicadors/?lang=en">
      <img alt="Idescat" title="add this widget to your web page"
            src="http://www.idescat.cat/images/idescat.png" />
    </a>
   </address>
 </div>
 <script type="text/javascript" src="
http://api.idescat.cat/emex/v1/dades.json?id=080193&amp;i=f3
21,f187,f122,f261&amp;lang=en&amp;enc=iso-8859-1&amp;callback=ini“></script>
</body>
cache
.js                                                very long                               client
.ifr


<body>
 <div id="Giny">
   <div id="cantoul" class="cantonada"></div><div id="cantou" class="canto"></div>
   <div id="cantour" class="cantonada"></div><div id="titol"></div>
   <div id="cantol" class="canto"></div><div id="Contenidor" class="carrega"></div>
   <div id="cantor" class="canto"></div><div id="cantodl" class="cantonada"></div>
   <div id="cantod" class="canto"></div><div id="cantodr" class="cantonada"></div>
   <address>
    <span>Widget provided by</span>
    <a target="_top" href="http://www.idescat.cat/api/emex/giny/indicadors/?lang=en">
      <img alt="Idescat" title="add this widget to your web page"
            src="http://www.idescat.cat/images/idescat.png" />
    </a>
   </address>
 </div>
 <script type="text/javascript" src="
http://api.idescat.cat/emex/v1/dades.json?id=080193&amp;i=f3
21,f187,f122,f261&amp;lang=en&amp;enc=iso-8859-1&amp;callback=ini"></script>
</body>
cache
.js                                                very long                               client
.ifr                                               long                                    client


<body>
 <div id="Giny">
   <div id="cantoul" class="cantonada"></div><div id="cantou" class="canto"></div>
   <div id="cantour" class="cantonada"></div><div id="titol"></div>
   <div id="cantol" class="canto"></div><div id="Contenidor" class="carrega"></div>
   <div id="cantor" class="canto"></div><div id="cantodl" class="cantonada"></div>
   <div id="cantod" class="canto"></div><div id="cantodr" class="cantonada"></div>
   <address>
    <span>Widget provided by</span>
    <a target="_top" href="http://www.idescat.cat/api/emex/giny/indicadors/?lang=en">
      <img alt="Idescat" title="add this widget to your web page"
            src="http://www.idescat.cat/images/idescat.png" />
    </a>
   </address>
 </div>
 <script type="text/javascript" src="
http://api.idescat.cat/emex/v1/dades.json?id=080193&amp;i=f3
21,f187,f122,f261&amp;lang=en&amp;enc=iso-8859-1&amp;callback=ini"></script>
</body>
cache
.js     very long      client
.ifr    long           client
.json
cache
.js     very long      client
.ifr    long           client
.json   short          client, server
Idescat
          JSON
World Bank
             JSON
Census Bureau
                JSON
JSON-stat
            JSON
SDMX-JSON
            JSON
shared interface
    ...ifr?p=i/21,7,22    data


    ...ifr?p=i/6,13,9     data


    ...ifr?p=i/36,39,15   data


    ...ifr?p=i/8,23,14    data


    ...ifr?p=i/16,10,40   data


    ...ifr?p=i/24,52,11   data



7   ...ifr?p=i/2,41,28    data
http://api.idescat.cat/{widget}.ifr?
geo=tv&class=sex&metric=pop&time=2002&…

 <body>
  <div id="Giny">
    <div id="cantoul" class="cantonada"></div><div id="cantou" class="canto"></div>
    <div id="cantour" class="cantonada"></div><div id="titol"></div>
    <div id="cantol" class="canto"></div><div id="Contenidor" class="carrega"></div>
    <div id="cantor" class="canto"></div><div id="cantodl" class="cantonada"></div>
    <div id="cantod" class="canto"></div><div id="cantodr" class="cantonada"></div>
    <address>
     <span>Widget provided by</span>
     <a target="_top" href="http://www.idescat.cat/api/emex/giny/indicadors/?lang=en">
       <img alt="Idescat" title="add this widget to your web page"
             src="http://www.idescat.cat/images/idescat.png" />
     </a>
    </address>
  </div>
  <script type="text/javascript" src="
 http://api.idescat.cat/{service}/v1/{resource}.json?geo=tv
 &amp;class=sex&amp;metric=pop&amp;time=2002&amp;lang=en&amp;callback=ini"></script>
 </body>
http://api.idescat.cat/{widget}.ifr#
geo=tv&class=sex&metric=pop&time=2002&…




                         Project
http://api.idescat.cat/{widget}.ifr#
geo=tv&class=sex&metric=pop&time=2002&…

 <body>

  <script type="text/javascript">




  </script>

 </body>
                                    Project
geo=tv&class=sex&metric=pop&time=2002&…

 <body>

  <script type="text/javascript">

    var setup=getURIParameters();




  </script>

 </body>
{
    content: {
       metric: ["pop"], geo: ["tv"], time: ["2001"], class: ["sex"],
       lang: "en"
    },
    layout: {
       borderColor: "#f0f0f0", textColor: "#ff0000", ...
    }
}

geo=tv&class=sex&metric=pop&time=2002&…

     <body>

      <script type="text/javascript">

        var setup=getURIParameters();




      </script>

     </body>
<body>

 <script type="text/javascript">

   var setup=getURIParameters();
   buildDOM(setup.layout);




 </script>

</body>
<table>
   <caption></caption>
   <thead>
      <tr><th></th><th scope="col"></th></tr>
   </thead>
   <tfoot>
      <tr><td colspan=""></td></tr>
   </tfoot>
   <tbody>
      <tr><th scope="row"></th><td></td></tr>
      <tr><th scope="row"></th><td></td></tr>
      <tr><th scope="row"></th><td></td></tr>
   </tbody>
</table>



<body>

 <script type="text/javascript">

   var setup=getURIParameters();
   buildDOM(setup.layout);




 </script>

</body>
<body>

 <script type="text/javascript">

   var setup=getURIParameters();
   buildDOM(setup.layout);
   var data=AjaxRetrieveData(setup.content);


 </script>

</body>
<body>
                                               Same origin policy
 <script type="text/javascript">

   var setup=getURIParameters();               http://api.idescat.cat/{widget}.ifr#...
   buildDOM(setup.layout);
   var data=AjaxRetrieveData(setup.content);
                                               http://api.idescat.cat/{...}.json?...

 </script>

</body>
{
    "dataset" : {
      "label" : "Tuvalu population by sex in the 2002 Census",
      "value" : [4729, 4832, 9561],
      "dimension" : {
        "id" : ["metric", "time", "geo", "sex"], "size" : [1, 1, 1, 3],
        "sex" : {
          "label" : "Sex",
          "category" : {
            "index" : { "M" : 0, "F" : 1, "T" : 2 },
            "label" : { "M" : "Men", "F" : "Women", "T" : "Total" }
          }
        }, …

      <body>
                                                                          Same origin policy
       <script type="text/javascript">

         var setup=getURIParameters();                                    http://api.idescat.cat/{widget}.ifr#...
         buildDOM(setup.layout);
         var data=AjaxRetrieveData(setup.content);
                                                                          http://api.idescat.cat/{...}.json?...

       </script>

      </body>
<body>

 <script type="text/javascript">

   var setup=getURIParameters();
   buildDOM(setup.layout);
   var data=AjaxRetrieveData(setup.content);
   insertDataOnDOM(data);

 </script>

</body>
<table>
   <caption>Tuvalu population by sex</caption>
   <thead>
      <tr><th></th><th scope="col">2002</th></tr>
   </thead>
   <tfoot>
      <tr><td colspan="2">Source: Central Statistics Division – Government of Tuvalu.</td></tr>
   </tfoot>
   <tbody>
      <tr><th scope="row">Men</th><td> 4,729 </td></tr>
      <tr><th scope="row">Women</th><td> 4,832 </td></tr>
      <tr><th scope="row">Total</th><td> 9,561 </td></tr>
   </tbody>
</table>



<body>

  <script type="text/javascript">

    var setup=getURIParameters();
    buildDOM(setup.layout);
    var data=AjaxRetrieveData(setup.content);
    insertDataOnDOM(data);

  </script>

</body>
shared interface
    ...ifr#p=i/21,7,22    data


    ...ifr#p=i/6,13,9     data


    ...ifr#p=i/36,39,15   data


    ...ifr#p=i/8,23,14    data


    ...ifr#p=i/16,10,40   data


    ...ifr#p=i/24,52,11   data



7   ...ifr#p=i/2,41,28    data
http://api.idescat.cat/{widget}.js?
geo=tv&class=sex&metric=pop&time=2002&…
http://api.idescat.cat/{widget}.js#
geo=tv&class=sex&metric=pop&time=2002&…
A script is unaware about itself

<script type="text/javascript" src="

http://api.idescat.cat/{widget}.js#
geo=tv&class=sex&metric=pop&time=2002&…

"></script>
A script is unaware about itself

<script type="text/javascript" src="

http://api.idescat.cat/{widget}.js#
geo=tv&class=sex&metric=pop&time=2002&…

"></script>

 hack
 var s=document.getElementsByTagName('script');
 var params=s[s.length-1].src.replace(/^[^#]+#?/,'');
<script type="text/javascript">
       widgetSetup = {
             "geo": "tv",
             "class": "sex",
             "metric": "pop",
             "time": "2002",
             ...
       };
</script>

<script type="text/javascript"
src="http://api.idescat.cat/{widget}.js">
</script>
<script type="text/javascript">
       widgetSetup = {
             "geo": "tv",                   Variable conflict
             "class": "sex",
             "metric": "pop",
             "time": "2002",
             ...
       };
</script>

<script type="text/javascript"
src="http://api.idescat.cat/{widget}.js">
</script>
<script type="text/javascript"
src="http://api.idescat.cat/{widget}.js">
</script>

<script type="text/javascript">
Idescat.widget(
       {
             "geo": "tv",
             "class": "sex",
             "metric": "pop",
             "time": "2002",
             ...
       }
);</script>
<script type="text/javascript"
src="http://api.idescat.cat/{widget}.js">
</script>

<script type="text/javascript">
new Idescat.Widget(
        {
              "geo": "tv",
              "class": "sex",
              "metric": "pop",
              "time": "2002",
              ...
        }
).start();</script>
<div class="IdescatWidget"
data-type="TimeSeriesWidget"
data-params="geo=tv;class=sex;
metric=pop;time=2002;..."></div>




<script type="text/javascript"
src="http://api.idescat.cat/widgets.js">
</script>
<div class="IdescatWidget"
data-type="TimeSeriesWidget"
data-params="geo=tv;class=sex;
metric=pop;time=2002;..."></div>

<script type="text/javascript">
(function() {
var js, id='IdescatJS', d=document,s='script',
e=d.getElementsByTagName(s)[0];
if (d.getElementById(id)) /*nonstandard*/ return;
js = d.createElement(s); js.id = id; /*nonstandard*/
js.src = "http://api.idescat.cat/widgets.js";
e.parentNode.insertBefore(js, e);
}());
</script>
Widgets
mechanism:                  many
interface:           must be built
content retrieval:             yes
distance:                 0 clicks
1. Use a dedicated server for third party services

2. Implement a different cache policy for interface/data

3. Run in the client as many computing tasks
   as possible

   content retrieval:                            yes
4. Main content widgets must be resizable

5. Side content widgets must be customizable
   (layout / content)

(If both resizable and customizable, better.)

   interface:                       must be built
6. Provide an <iframe /> façade

7. But also a <script /> façade

8. Allow auto-embedding


   mechanism:                     many
Thank you
Thank you
Slide #1ff. Web image by zzathras777 (CC BY-NC)
Slide #4 PageRank chart by 345Kai (Public domain)
Slide #10ff. Australian one way sign (GNU Free Documentation
License)
Slide #13 Bruce Lee image, author unknown
Slide #16ff. Chain links image by Eric M. Martin (CC BY-NC-ND)
Slide #32 Peacocks image by Michelle Kinsey Bruns (CC BY-SA)
Slide #39 Magic wand image by Sheeshoo (CC BY-NC-SA)
1 of 142

Recommended

Statistical dissemination 2.0 by
Statistical dissemination 2.0Statistical dissemination 2.0
Statistical dissemination 2.0Xavier Badosa
14.9K views106 slides
Standards for statistical data dissemination: a wish list by
Standards for statistical data dissemination: a wish listStandards for statistical data dissemination: a wish list
Standards for statistical data dissemination: a wish listXavier Badosa
17.7K views239 slides
Mobile semantic technology by
Mobile semantic technologyMobile semantic technology
Mobile semantic technologyThomas Kelly, PMP
892 views28 slides
Rectificaciones: una propuesta de estándar by
Rectificaciones: una propuesta de estándarRectificaciones: una propuesta de estándar
Rectificaciones: una propuesta de estándarXavier Badosa
15.9K views33 slides
La difusión estadística y la apertura de datos gubernamentales by
La difusión estadística y la apertura de datos gubernamentalesLa difusión estadística y la apertura de datos gubernamentales
La difusión estadística y la apertura de datos gubernamentalesXavier Badosa
14K views138 slides
Anatomía de las APIs del Idescat by
Anatomía de las APIs del IdescatAnatomía de las APIs del Idescat
Anatomía de las APIs del IdescatXavier Badosa
16K views202 slides

More Related Content

Viewers also liked

Los widgets del Idescat: una aplicación de las APIs by
Los widgets del Idescat: una aplicación de las APIsLos widgets del Idescat: una aplicación de las APIs
Los widgets del Idescat: una aplicación de las APIsXavier Badosa
15.6K views80 slides
WWW para editores (y más allá) (4) by
WWW para editores (y más allá) (4)WWW para editores (y más allá) (4)
WWW para editores (y más allá) (4)Xavier Badosa
14.3K views67 slides
Toplax by
ToplaxToplax
ToplaxXavier Badosa
14.1K views22 slides
WWW para editores (y más allá) (6) by
WWW para editores (y más allá) (6)WWW para editores (y más allá) (6)
WWW para editores (y más allá) (6)Xavier Badosa
14.1K views61 slides
WWW para editores (y más allá) (7) by
WWW para editores (y más allá) (7)WWW para editores (y más allá) (7)
WWW para editores (y más allá) (7)Xavier Badosa
14.1K views28 slides
WWW para editores (y más allá) (y 8) by
WWW para editores (y más allá) (y 8)WWW para editores (y más allá) (y 8)
WWW para editores (y más allá) (y 8)Xavier Badosa
13.8K views212 slides

Viewers also liked(20)

Los widgets del Idescat: una aplicación de las APIs by Xavier Badosa
Los widgets del Idescat: una aplicación de las APIsLos widgets del Idescat: una aplicación de las APIs
Los widgets del Idescat: una aplicación de las APIs
Xavier Badosa15.6K views
WWW para editores (y más allá) (4) by Xavier Badosa
WWW para editores (y más allá) (4)WWW para editores (y más allá) (4)
WWW para editores (y más allá) (4)
Xavier Badosa14.3K views
WWW para editores (y más allá) (6) by Xavier Badosa
WWW para editores (y más allá) (6)WWW para editores (y más allá) (6)
WWW para editores (y más allá) (6)
Xavier Badosa14.1K views
WWW para editores (y más allá) (7) by Xavier Badosa
WWW para editores (y más allá) (7)WWW para editores (y más allá) (7)
WWW para editores (y más allá) (7)
Xavier Badosa14.1K views
WWW para editores (y más allá) (y 8) by Xavier Badosa
WWW para editores (y más allá) (y 8)WWW para editores (y más allá) (y 8)
WWW para editores (y más allá) (y 8)
Xavier Badosa13.8K views
Periodisme de dades i oficines estadístiques by Xavier Badosa
Periodisme de dades i oficines estadístiquesPeriodisme de dades i oficines estadístiques
Periodisme de dades i oficines estadístiques
Xavier Badosa14.8K views
Difusió estadísTICa oficial by Xavier Badosa
Difusió estadísTICa oficialDifusió estadísTICa oficial
Difusió estadísTICa oficial
Xavier Badosa14.7K views
WWW para editores (y más allá) (2) by Xavier Badosa
WWW para editores (y más allá) (2)WWW para editores (y más allá) (2)
WWW para editores (y más allá) (2)
Xavier Badosa14.3K views
Consuming Nordic Statbank data with JSON-stat by Xavier Badosa
Consuming Nordic Statbank data with JSON-statConsuming Nordic Statbank data with JSON-stat
Consuming Nordic Statbank data with JSON-stat
Xavier Badosa10.5K views
JSON-stat & JS: the JSON-stat Javascript Toolkit by Xavier Badosa
JSON-stat & JS: the JSON-stat Javascript ToolkitJSON-stat & JS: the JSON-stat Javascript Toolkit
JSON-stat & JS: the JSON-stat Javascript Toolkit
Xavier Badosa24.7K views
La difusión estadística en el contexto de la web 2.0. JECAS08 by Xavier Badosa
La difusión estadística en el contexto de la web 2.0. JECAS08La difusión estadística en el contexto de la web 2.0. JECAS08
La difusión estadística en el contexto de la web 2.0. JECAS08
Xavier Badosa14.1K views
Reutilización de datos gracias a la visualización de datos by Xavier Badosa
Reutilización de datos gracias a la visualización de datosReutilización de datos gracias a la visualización de datos
Reutilización de datos gracias a la visualización de datos
Xavier Badosa14.3K views
WWW para editores (y más allá) (3) by Xavier Badosa
WWW para editores (y más allá) (3)WWW para editores (y más allá) (3)
WWW para editores (y más allá) (3)
Xavier Badosa14.1K views
WWW para editores (y más allá) (1) by Xavier Badosa
WWW para editores (y más allá) (1)WWW para editores (y más allá) (1)
WWW para editores (y más allá) (1)
Xavier Badosa14.4K views
WWW para editores (y más allá) (5) by Xavier Badosa
WWW para editores (y más allá) (5)WWW para editores (y más allá) (5)
WWW para editores (y más allá) (5)
Xavier Badosa14.1K views
Gov APIs: The Notorious Case of Official Statistics by Xavier Badosa
Gov APIs: The Notorious Case of Official StatisticsGov APIs: The Notorious Case of Official Statistics
Gov APIs: The Notorious Case of Official Statistics
Xavier Badosa14.5K views
What's our business? Statistics as platform by Xavier Badosa
What's our business? Statistics as platformWhat's our business? Statistics as platform
What's our business? Statistics as platform
Xavier Badosa37.4K views
Idescat on the Google Public Data Explorer by Xavier Badosa
Idescat on the Google Public Data ExplorerIdescat on the Google Public Data Explorer
Idescat on the Google Public Data Explorer
Xavier Badosa16K views
Data Dissemination through Data Visualization by Xavier Badosa
Data Dissemination through Data VisualizationData Dissemination through Data Visualization
Data Dissemination through Data Visualization
Xavier Badosa15K views

Similar to Links and Widgets: the Fabric of the Web

Web app and more by
Web app and moreWeb app and more
Web app and morefaming su
406 views79 slides
Web Apps and more by
Web Apps and moreWeb Apps and more
Web Apps and moreYan Shi
1K views79 slides
Mobile web development techniques (and Opera's developer tools) by
Mobile web development techniques (and Opera's developer tools)Mobile web development techniques (and Opera's developer tools)
Mobile web development techniques (and Opera's developer tools)Andreas Bovens
2K views58 slides
Html5 by
Html5Html5
Html5mikusuraj
1.2K views33 slides
final ppt.pptx by
final ppt.pptxfinal ppt.pptx
final ppt.pptxshwetachanchlani
16 views31 slides
final ppt.pptx by
final ppt.pptxfinal ppt.pptx
final ppt.pptxshwetachanchlani
16 views31 slides

Similar to Links and Widgets: the Fabric of the Web(20)

Web app and more by faming su
Web app and moreWeb app and more
Web app and more
faming su406 views
Web Apps and more by Yan Shi
Web Apps and moreWeb Apps and more
Web Apps and more
Yan Shi1K views
Mobile web development techniques (and Opera's developer tools) by Andreas Bovens
Mobile web development techniques (and Opera's developer tools)Mobile web development techniques (and Opera's developer tools)
Mobile web development techniques (and Opera's developer tools)
Andreas Bovens2K views
Html5 by mikusuraj
Html5Html5
Html5
mikusuraj1.2K views
Responsive Websites by Joe Seifi
Responsive WebsitesResponsive Websites
Responsive Websites
Joe Seifi19.4K views
[cssdevconf] Adaptive Images in Responsive Web Design by Christopher Schmitt
[cssdevconf] Adaptive Images in Responsive Web Design[cssdevconf] Adaptive Images in Responsive Web Design
[cssdevconf] Adaptive Images in Responsive Web Design
Christopher Schmitt3.1K views
Adobe & HTML5 by Terry Ryan
Adobe & HTML5Adobe & HTML5
Adobe & HTML5
Terry Ryan1.1K views
Starwest 2008 by Caleb Sima
Starwest 2008Starwest 2008
Starwest 2008
Caleb Sima798 views
Surviving the Zombie Apocalypse of Connected devices - Jfokus 2013 by Gustaf Nilsson Kotte
Surviving the Zombie Apocalypse of Connected devices - Jfokus 2013Surviving the Zombie Apocalypse of Connected devices - Jfokus 2013
Surviving the Zombie Apocalypse of Connected devices - Jfokus 2013
Handys und Tablets - Webentwicklung jenseits des Desktops - MobileTech Confer... by Patrick Lauke
Handys und Tablets - Webentwicklung jenseits des Desktops - MobileTech Confer...Handys und Tablets - Webentwicklung jenseits des Desktops - MobileTech Confer...
Handys und Tablets - Webentwicklung jenseits des Desktops - MobileTech Confer...
Patrick Lauke1K views
Discovery bookmarklet - Metro Science Librarians SIG by Valerie Forrestal
Discovery bookmarklet - Metro Science Librarians SIGDiscovery bookmarklet - Metro Science Librarians SIG
Discovery bookmarklet - Metro Science Librarians SIG
Valerie Forrestal748 views
Pinkoi Mobile Web by mikeleeme
Pinkoi Mobile WebPinkoi Mobile Web
Pinkoi Mobile Web
mikeleeme15K views
[peachpit] Adaptive Images in Responsive Web Design by Christopher Schmitt
[peachpit] Adaptive Images in Responsive Web Design[peachpit] Adaptive Images in Responsive Web Design
[peachpit] Adaptive Images in Responsive Web Design
CSS3 Media Queries: Mobile Elixir or CSS Snake Oil by jameswillweb
CSS3 Media Queries: Mobile Elixir or CSS Snake OilCSS3 Media Queries: Mobile Elixir or CSS Snake Oil
CSS3 Media Queries: Mobile Elixir or CSS Snake Oil
jameswillweb43.3K views
Multi screen HTML5 by Ron Reiter
Multi screen HTML5Multi screen HTML5
Multi screen HTML5
Ron Reiter12.1K views
[rwdsummit] Adaptive Images in Responsive Web Design by Christopher Schmitt
[rwdsummit] Adaptive Images in Responsive Web Design[rwdsummit] Adaptive Images in Responsive Web Design
[rwdsummit] Adaptive Images in Responsive Web Design
Christopher Schmitt27.3K views
Responsive content by honzie
Responsive contentResponsive content
Responsive content
honzie769 views
Web APIs & Apps - Mozilla by Robert Nyman
Web APIs & Apps - MozillaWeb APIs & Apps - Mozilla
Web APIs & Apps - Mozilla
Robert Nyman17.6K views

More from Xavier Badosa

Putting Data in Cells by
Putting Data in CellsPutting Data in Cells
Putting Data in CellsXavier Badosa
449 views105 slides
JSON-stat in the Sea of Standards by
JSON-stat in the Sea of StandardsJSON-stat in the Sea of Standards
JSON-stat in the Sea of StandardsXavier Badosa
6.8K views62 slides
The Trouble with Tables by
The Trouble with TablesThe Trouble with Tables
The Trouble with TablesXavier Badosa
9K views81 slides
StatisticalTable, a JSON-stat-based vocabulary by
StatisticalTable, a JSON-stat-based vocabularyStatisticalTable, a JSON-stat-based vocabulary
StatisticalTable, a JSON-stat-based vocabularyXavier Badosa
22.8K views23 slides
Decoupling Official Statistics by
Decoupling Official StatisticsDecoupling Official Statistics
Decoupling Official StatisticsXavier Badosa
12.4K views89 slides
JSON-stat in the session "The future of standards in statistics", United Nati... by
JSON-stat in the session "The future of standards in statistics", United Nati...JSON-stat in the session "The future of standards in statistics", United Nati...
JSON-stat in the session "The future of standards in statistics", United Nati...Xavier Badosa
13.7K views67 slides

More from Xavier Badosa(10)

JSON-stat in the Sea of Standards by Xavier Badosa
JSON-stat in the Sea of StandardsJSON-stat in the Sea of Standards
JSON-stat in the Sea of Standards
Xavier Badosa6.8K views
StatisticalTable, a JSON-stat-based vocabulary by Xavier Badosa
StatisticalTable, a JSON-stat-based vocabularyStatisticalTable, a JSON-stat-based vocabulary
StatisticalTable, a JSON-stat-based vocabulary
Xavier Badosa22.8K views
Decoupling Official Statistics by Xavier Badosa
Decoupling Official StatisticsDecoupling Official Statistics
Decoupling Official Statistics
Xavier Badosa12.4K views
JSON-stat in the session "The future of standards in statistics", United Nati... by Xavier Badosa
JSON-stat in the session "The future of standards in statistics", United Nati...JSON-stat in the session "The future of standards in statistics", United Nati...
JSON-stat in the session "The future of standards in statistics", United Nati...
Xavier Badosa13.7K views
Idescat Visual: Gràfics i mapes by Xavier Badosa
Idescat Visual: Gràfics i mapesIdescat Visual: Gràfics i mapes
Idescat Visual: Gràfics i mapes
Xavier Badosa14.6K views
JSON-stat, a simple light standard for all kinds of data disseminators by Xavier Badosa
JSON-stat, a simple light standard for all kinds of data disseminatorsJSON-stat, a simple light standard for all kinds of data disseminators
JSON-stat, a simple light standard for all kinds of data disseminators
Xavier Badosa121.7K views
E-books Are Not the Future of Books by Xavier Badosa
E-books Are Not the Future of BooksE-books Are Not the Future of Books
E-books Are Not the Future of Books
Xavier Badosa18.9K views
Proyecto E-book 2001 by Xavier Badosa
Proyecto E-book 2001Proyecto E-book 2001
Proyecto E-book 2001
Xavier Badosa13.6K views

Recently uploaded

The Power of Heat Decarbonisation Plans in the Built Environment by
The Power of Heat Decarbonisation Plans in the Built EnvironmentThe Power of Heat Decarbonisation Plans in the Built Environment
The Power of Heat Decarbonisation Plans in the Built EnvironmentIES VE
84 views20 slides
MVP and prioritization.pdf by
MVP and prioritization.pdfMVP and prioritization.pdf
MVP and prioritization.pdfrahuldharwal141
39 views8 slides
Qualifying SaaS, IaaS.pptx by
Qualifying SaaS, IaaS.pptxQualifying SaaS, IaaS.pptx
Qualifying SaaS, IaaS.pptxSachin Bhandari
1.1K views8 slides
Import Export Virtual Machine for KVM Hypervisor - Ayush Pandey - University ... by
Import Export Virtual Machine for KVM Hypervisor - Ayush Pandey - University ...Import Export Virtual Machine for KVM Hypervisor - Ayush Pandey - University ...
Import Export Virtual Machine for KVM Hypervisor - Ayush Pandey - University ...ShapeBlue
120 views17 slides
Elevating Privacy and Security in CloudStack - Boris Stoyanov - ShapeBlue by
Elevating Privacy and Security in CloudStack - Boris Stoyanov - ShapeBlueElevating Privacy and Security in CloudStack - Boris Stoyanov - ShapeBlue
Elevating Privacy and Security in CloudStack - Boris Stoyanov - ShapeBlueShapeBlue
224 views7 slides
Updates on the LINSTOR Driver for CloudStack - Rene Peinthor - LINBIT by
Updates on the LINSTOR Driver for CloudStack - Rene Peinthor - LINBITUpdates on the LINSTOR Driver for CloudStack - Rene Peinthor - LINBIT
Updates on the LINSTOR Driver for CloudStack - Rene Peinthor - LINBITShapeBlue
208 views8 slides

Recently uploaded(20)

The Power of Heat Decarbonisation Plans in the Built Environment by IES VE
The Power of Heat Decarbonisation Plans in the Built EnvironmentThe Power of Heat Decarbonisation Plans in the Built Environment
The Power of Heat Decarbonisation Plans in the Built Environment
IES VE84 views
Import Export Virtual Machine for KVM Hypervisor - Ayush Pandey - University ... by ShapeBlue
Import Export Virtual Machine for KVM Hypervisor - Ayush Pandey - University ...Import Export Virtual Machine for KVM Hypervisor - Ayush Pandey - University ...
Import Export Virtual Machine for KVM Hypervisor - Ayush Pandey - University ...
ShapeBlue120 views
Elevating Privacy and Security in CloudStack - Boris Stoyanov - ShapeBlue by ShapeBlue
Elevating Privacy and Security in CloudStack - Boris Stoyanov - ShapeBlueElevating Privacy and Security in CloudStack - Boris Stoyanov - ShapeBlue
Elevating Privacy and Security in CloudStack - Boris Stoyanov - ShapeBlue
ShapeBlue224 views
Updates on the LINSTOR Driver for CloudStack - Rene Peinthor - LINBIT by ShapeBlue
Updates on the LINSTOR Driver for CloudStack - Rene Peinthor - LINBITUpdates on the LINSTOR Driver for CloudStack - Rene Peinthor - LINBIT
Updates on the LINSTOR Driver for CloudStack - Rene Peinthor - LINBIT
ShapeBlue208 views
Transcript: Redefining the book supply chain: A glimpse into the future - Tec... by BookNet Canada
Transcript: Redefining the book supply chain: A glimpse into the future - Tec...Transcript: Redefining the book supply chain: A glimpse into the future - Tec...
Transcript: Redefining the book supply chain: A glimpse into the future - Tec...
BookNet Canada41 views
Transitioning from VMware vCloud to Apache CloudStack: A Path to Profitabilit... by ShapeBlue
Transitioning from VMware vCloud to Apache CloudStack: A Path to Profitabilit...Transitioning from VMware vCloud to Apache CloudStack: A Path to Profitabilit...
Transitioning from VMware vCloud to Apache CloudStack: A Path to Profitabilit...
ShapeBlue162 views
CloudStack Managed User Data and Demo - Harikrishna Patnala - ShapeBlue by ShapeBlue
CloudStack Managed User Data and Demo - Harikrishna Patnala - ShapeBlueCloudStack Managed User Data and Demo - Harikrishna Patnala - ShapeBlue
CloudStack Managed User Data and Demo - Harikrishna Patnala - ShapeBlue
ShapeBlue137 views
CloudStack Object Storage - An Introduction - Vladimir Petrov - ShapeBlue by ShapeBlue
CloudStack Object Storage - An Introduction - Vladimir Petrov - ShapeBlueCloudStack Object Storage - An Introduction - Vladimir Petrov - ShapeBlue
CloudStack Object Storage - An Introduction - Vladimir Petrov - ShapeBlue
ShapeBlue139 views
Future of AR - Facebook Presentation by Rob McCarty
Future of AR - Facebook PresentationFuture of AR - Facebook Presentation
Future of AR - Facebook Presentation
Rob McCarty65 views
The Power of Generative AI in Accelerating No Code Adoption.pdf by Saeed Al Dhaheri
The Power of Generative AI in Accelerating No Code Adoption.pdfThe Power of Generative AI in Accelerating No Code Adoption.pdf
The Power of Generative AI in Accelerating No Code Adoption.pdf
Saeed Al Dhaheri39 views
How to Re-use Old Hardware with CloudStack. Saving Money and the Environment ... by ShapeBlue
How to Re-use Old Hardware with CloudStack. Saving Money and the Environment ...How to Re-use Old Hardware with CloudStack. Saving Money and the Environment ...
How to Re-use Old Hardware with CloudStack. Saving Money and the Environment ...
ShapeBlue171 views
"Running students' code in isolation. The hard way", Yurii Holiuk by Fwdays
"Running students' code in isolation. The hard way", Yurii Holiuk "Running students' code in isolation. The hard way", Yurii Holiuk
"Running students' code in isolation. The hard way", Yurii Holiuk
Fwdays36 views
Zero to Cloud Hero: Crafting a Private Cloud from Scratch with XCP-ng, Xen Or... by ShapeBlue
Zero to Cloud Hero: Crafting a Private Cloud from Scratch with XCP-ng, Xen Or...Zero to Cloud Hero: Crafting a Private Cloud from Scratch with XCP-ng, Xen Or...
Zero to Cloud Hero: Crafting a Private Cloud from Scratch with XCP-ng, Xen Or...
ShapeBlue199 views
Webinar : Desperately Seeking Transformation - Part 2: Insights from leading... by The Digital Insurer
Webinar : Desperately Seeking Transformation - Part 2:  Insights from leading...Webinar : Desperately Seeking Transformation - Part 2:  Insights from leading...
Webinar : Desperately Seeking Transformation - Part 2: Insights from leading...
Redefining the book supply chain: A glimpse into the future - Tech Forum 2023 by BookNet Canada
Redefining the book supply chain: A glimpse into the future - Tech Forum 2023Redefining the book supply chain: A glimpse into the future - Tech Forum 2023
Redefining the book supply chain: A glimpse into the future - Tech Forum 2023
BookNet Canada44 views
Developments to CloudStack’s SDN ecosystem: Integration with VMWare NSX 4 - P... by ShapeBlue
Developments to CloudStack’s SDN ecosystem: Integration with VMWare NSX 4 - P...Developments to CloudStack’s SDN ecosystem: Integration with VMWare NSX 4 - P...
Developments to CloudStack’s SDN ecosystem: Integration with VMWare NSX 4 - P...
ShapeBlue196 views

Links and Widgets: the Fabric of the Web

  • 1. Links and Widgets: the Fabric of the Web Xavier Badosa (@badosa) Statistical Institute of Catalonia (Idescat) Task force for the strategic project on the development and use of common ESS tools and services for dissemination Eurostat, Luxembourg, 20 September 2012
  • 3. link-centered medium Web value of a page incoming links
  • 5. Links mechanism: built-in
  • 6. <a href="http://www.w3.org/People/Berners-Lee/"> Tim Berners-Lee </a> Links mechanism: built-in
  • 7. <a href="http://www.w3.org/People/Berners-Lee/"> Tim Berners-Lee </a> Links mechanism: built-in interface: built-in
  • 8. <a href="http://www.w3.org/People/Berners-Lee/"> Tim Berners-Lee </a> Tim Berners-Lee (click and go) Links mechanism: built-in interface: built-in
  • 9. <a href="http://www.w3.org/People/Berners-Lee/"> Tim Berners-Lee </a> Tim Berners-Lee Links mechanism: built-in interface: built-in content retrieval: none
  • 10. <a href="http://www.w3.org/People/Berners-Lee/"> Tim Berners-Lee </a> Tim Berners-Lee Links mechanism: built-in interface: built-in content retrieval: none
  • 11. <a href="http://www.w3.org/People/Berners-Lee/"> WWW inventor </a> WWW inventor Links mechanism: built-in interface: built-in content retrieval: none
  • 12. <a href="http://www.w3.org/People/Berners-Lee/"> TimBL </a> TimBL Links mechanism: built-in interface: built-in content retrieval: none
  • 13. <a href="http://www.w3.org/People/Berners-Lee/"> Tim Bruce Lee </a> Tim Bruce Lee Links mechanism: built-in interface: built-in content retrieval: none
  • 14. SIMPLE ! = SUCCESS ! Links mechanism: built-in interface: built-in content retrieval: none
  • 15. Links mechanism: built-in interface: built-in content retrieval: none distance: 1 click !
  • 22. static dynamic Content and service dissemination funct. data
  • 24. Widget Content and service dissemination embeddable content
  • 25. Widget dynamic content + static content embeddable invisible “content” − (for example, web beacons) (visible) content
  • 26. Links mechanism: built-in interface: built-in content retrieval: none distance: 1 click
  • 27. For a map of Esterri de Cardós, visit For statistics on Esterri de Cardós, visit the Cartographic Institute of Catalonia. the Statistical Institute of Catalonia.
  • 29. spreading atoms in the digital space Content Mobility
  • 30. spreading atoms in the digital space from a macro website to micro services Content Mobility
  • 31. spreading atoms in the digital space from a macro website to micro services Content dissemination with zero distortion Increased visibility Content Mobility Increased customer base brand strengthening Better customer service
  • 34. <img /> <audio /> <video /> <iframe /> <object /> <embed /> <script /> Widgets mechanism: many interface: content retrieval: distance: 0 clicks
  • 35. <div id="fb-root"></div><script>(function(d, s, id) { var js, fjs = d.getElementsByTagName(s)[0]; if (d.getElementById(id)) return; js = d.createElement(s); js.id = id; js.src = "//connect.facebook.net/en_US/all.js #xfbml=1"; fjs.parentNode.insertBefore(js, fjs);}(document, 'script', 'facebook-jssdk'));</script> <div class="fb-like" data-href="http://jsonstat.org" data-send="true“ data-layout="button_count" data-width="450" data-show-faces="true"></div> Widgets mechanism: many interface: content retrieval: distance: 0 clicks
  • 36. <iframe src="http://www.slideshare.net/slideshow/ embed_code/8495428" width="427" height="356" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC;border-width: 1px 1px 0;margin-bottom:5px" allowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="http://www.slideshare.net/badosa/ idescat-on-the-google-public-data-explorer" title="Idescat on the Google Public Data Explorer" target="_blank">Idescat on the Google Public Data Explorer</a> </strong> from <strong><a href="http://www.slideshare.net/badosa" target="_blank">Xavier Badosa</a></strong> </div> Widgets mechanism: many interface: content retrieval: distance: 0 clicks
  • 37. <blockquote class="twitter-tweet"><p>Data Protocols: community-based, light-weight <a href="https://twitter.com/search/?q=%23data"><s>#</s> <b>data</b></a> <a href="https://twitter.com/search/? q=%23protocols"><s>#</s><b>protocols</b></a> for collaborative, distributed work with data <a href="http://t.co/ KTzLtvo8" title="http://ow.ly/cjz0o">ow.ly/cjz0o</a> <a href="https://twitter.com/search/?q=%23json"><s>#</s><b>json</b> </a> <a href="https://twitter.com/search/?q=%23api"><s>#</s><b>api </b></a></p>&mdash; JSON-stat.org (@jsonstat) <a href="https://twitter.com/jsonstat/status/225589541841551360" data-datetime="2012-07-18T13:55:12+00:00">July 18, 2012</a> </blockquote><script src="//platform.twitter.com/widgets.js" charset="utf- 8"></script> Widgets mechanism: many interface: content retrieval: distance: 0 clicks
  • 38. <div style="width:300px; font-family:'Helvetica Neue', Helvetica, Arial, sans-serif; line-height:20px"><div style="background-color:#333; padding: 0px 5px; font-weight:bold"><div style="color:#fff; font-size:12px; line-height: 20px;"><a href="http://data.worldbank.org/indicator/AG.LND.AGRI.ZS/ countries?display=graph" style="color:#fff;text-decoration:none;" class="active"> Agricultural land (% of land area)</a></div></div><script type="text/javascript"> widgetContext = { "url": "http://data.worldbank.org/widgets/indicator/0/ web_widgets_3/AG.LND.AGRI.ZS/countries/1W", "width": 300, "height": 225, "widgetid": "web_widget_iframe_467ec58867ea6c51dd94ebcf9761e050" };</script> <div id="web_widget_iframe_467ec58867ea6c51dd94ebcf9761e050"></div><script src="http://data.worldbank.org/profiles/datafinder/modules/contrib/web_widgets/iframe/ web_widgets_iframe.js"></script><div style="font-size: 10px; color:#000">Data from <a href="http://data.worldbank.org/indicator/AG.LND.AGRI.ZS/countries?display=graph" style="color:#CCC;">World Bank</a></div></div> Widgets mechanism: many interface: content retrieval: distance: 0 clicks
  • 39. wizard Widgets mechanism: many interface: content retrieval: distance: 0 clicks
  • 40. explicit widget Builder
  • 48. author main content webmaster side content
  • 49. differentusers author differentusecases main content webmaster side content
  • 50. differentusers author differentusecases customization main content webmaster simplicity side content
  • 51. author implicit widgets main content simplicity auto-embedding widget linkification
  • 52. author implicit widgets main content simplicity
  • 57. XML JSON ...
  • 58. XML <iframe /> JSON ...
  • 59. <img /> <audio /> <video /> <iframe /> <object /> <embed /> <script /> Widgets mechanism: many interface: content retrieval: distance: 0 clicks
  • 60. <img /> <audio /> <video /> <iframe /> <object /> <embed /> <script /> Widgets mechanism: many interface: content retrieval: distance: 0 clicks
  • 61. <iframe /> <script /> Widgets mechanism: many interface: content retrieval: distance: 0 clicks
  • 62. <iframe /> Code simplification (Avoids iframe attributes) <script /> Widgets mechanism: many interface: content retrieval: distance: 0 clicks
  • 63. <iframe /> Solution encapsulation (independence from future changes) <script /> Widgets mechanism: many interface: content retrieval: distance: 0 clicks
  • 64. <iframe /> Analytics (same origin policy, HTTP_REFERER unreliable) <script /> Widgets mechanism: many interface: content retrieval: distance: 0 clicks
  • 66. var pW = ""; var nomWidget = encodeURIComponent("Emex-Tbl"); try{...}catch (exc){…} var paginaWidget = encodeURIComponent(pW); var wp = "&wp=" + encodeURIComponent("pw=" + paginaWidget + "&nw=" + nomWidget); document.write("<iframe style="height:102px;width:100%px;border- width:0px;border-style:solid;border- color:black;padding:0;margin:0;max-width:400px" height="102" width="100%" frameborder="0" scrolling="no" border="0" allowTransparency="true" src="http://api.idescat.cat/emex.ifr?bc=719ee1&amp;lc=0000cc&amp; c=000000&amp;t=0&amp;e=f&amp;enc=iso-8859- 1&amp;tc=ffffff&amp;id=080193&amp;i=f321,f187,f122,f261&amp;lang =en" + wp + ""></iframe><img alt="" border="0" style="vertical- align:super;display:inline;width:1px;height:1px;margin:0;padding:0;bord er:none" src="http://www.idescat.cat/images/1x1.html?v=emex&id=" + paginaWidget +"" />");
  • 68. Widgets mechanism: many interface: must be built content retrieval: distance: 0 clicks
  • 70. It’s a widget but it’s a link too. (The widget promotes the widget.) must be built
  • 71. It’s a widget but it’s a link too. (The widget promotes the widget.) Clicks / visit ……………………….… 0.6% Clicks on content / clicks …….… 93% must be built Clicks on footer/ clicks ………….. 7% Clicks on footer / visit ……….. 0.04%
  • 72. Main content Maximize looks/usefulness must be built
  • 73. Main content Maximize looks/usefulness Resizability must be built
  • 74. Side content must be built
  • 75. Integration Layout customization Side content must be built
  • 76. Integration Layout customization Side content Miniaturization Content customization must be built
  • 77. Widgets mechanism: many interface: must be built content retrieval: yes distance: 0 clicks
  • 78. provider Widgets mechanism: many interface: must be built content retrieval: yes distance: 0 clicks
  • 80. provider installer end end end end user user user user
  • 81. provider installer installer installer end end end end user user user user
  • 82. provider requests end end end end user user user user
  • 83. provider requests # installs x # end users per install end end end end user user user user
  • 84. provider requests ∫( widget success # end users per install ) end end end end user user user user
  • 85. provider requests ∫( widget success installers’ popularity ) end end end end user user user user
  • 86. provider requests installers’ popularity end end end end user user user user external factor!
  • 87. 1
  • 88. 7
  • 89. data data data data data data 7 data
  • 90. shared interface data data data data data data 7 data
  • 91. almost never shared interface data data data updated frequently data data data data
  • 92. provider end end end end user user user user
  • 93. 1. Protect the provider ’s website end end end end user user user user
  • 94. 1. Protect the provider ’s website A different content server for third parties www.idescat.cat api.idescat.cat end end end end user user user user
  • 95. provider 2. Separate content almost never frequently end end end end user user user user
  • 96. provider 2. Separate content almost never frequently A different cache policy (interface / data) end end end end user user user user
  • 97. provider 3. Distribute computing tasks end end end end user user user user
  • 98. provider 3. Distribute computing tasks end end end end user user user user scalability
  • 100. .js <script type="text/javascript" src="http://api.idescat.cat/emex.js?p=id/080193; i/f321,f187,f122,f261&amp;lang=en"></script> <noscript><a href="http://www.idescat.cat/emex/?id=080193 &amp;lang=en">The municipality in figures</a></noscript>
  • 101. .js var pW = "";var nomWidget = encodeURIComponent("Emex-Tbl");try{pW = window.top.location.href;if(typeof pW == "undefined") throw "nodefinits";}catch (exc){try{pW = window.parent.location.href;if(typeof pW == "undefined") throw exc;}catch(excp){pW = document.location.href;}}var paginaWidget = encodeURIComponent(pW);var wp = "&wp=" + encodeURIComponent("pw=" + paginaWidget + "&nw=" + nomWidget); document.write(“ <iframe src="http://api.idescat.cat/emex.ifr?bc=719ee1 &amp;lc=0000cc&amp;c=000000&amp;t=0&amp;e=f&amp;enc=iso-88591&amp;tc=ffffff &amp;id=080193&amp;i=f321,f187,f122,f261&amp;lang=en" + wp + "" style="height:102px; width:100%px;border-width:0px;border-style:solid;border-color:black;padding:0;margin:0; max-width:400px" height="102" width="100%" frameborder="0" scrolling="no" border="0" allowTransparency="true" ></iframe> <img alt="" border="0" style="vertical- align:super;display:inline;width:1px;height:1px;margin:0;padding:0;border:none" src="http://www.idescat.cat/images/1x1.html?v=emex&id=" + paginaWidget +"" /> ");
  • 102. cache .js very long client var pW = "";var nomWidget = encodeURIComponent("Emex-Tbl");try{pW = window.top.location.href;if(typeof pW == "undefined") throw "nodefinits";}catch (exc){try{pW = window.parent.location.href;if(typeof pW == "undefined") throw exc;}catch(excp){pW = document.location.href;}}var paginaWidget = encodeURIComponent(pW);var wp = "&wp=" + encodeURIComponent("pw=" + paginaWidget + "&nw=" + nomWidget); document.write(“ <iframe src="http://api.idescat.cat/emex.ifr?bc=719ee1 &amp;lc=0000cc&amp;c=000000&amp;t=0&amp;e=f&amp;enc=iso-88591&amp;tc=ffffff &amp;id=080193&amp;i=f321,f187,f122,f261&amp;lang=en" + wp + "" style="height:102px; width:100%px;border-width:0px;border-style:solid;border-color:black;padding:0;margin:0; max-width:400px" height="102" width="100%" frameborder="0" scrolling="no" border="0" allowTransparency="true" ></iframe> <img alt="" border="0" style="vertical- align:super;display:inline;width:1px;height:1px;margin:0;padding:0;border:none" src="http://www.idescat.cat/images/1x1.html?v=emex&id=" + paginaWidget +"" /> ");
  • 103. cache .js very long client .ifr <body> <div id="Giny"> <div id="cantoul" class="cantonada"></div><div id="cantou" class="canto"></div> <div id="cantour" class="cantonada"></div><div id="titol"></div> <div id="cantol" class="canto"></div><div id="Contenidor" class="carrega"></div> <div id="cantor" class="canto"></div><div id="cantodl" class="cantonada"></div> <div id="cantod" class="canto"></div><div id="cantodr" class="cantonada"></div> <address> <span>Widget provided by</span> <a target="_top" href="http://www.idescat.cat/api/emex/giny/indicadors/?lang=en"> <img alt="Idescat" title="add this widget to your web page" src="http://www.idescat.cat/images/idescat.png" /> </a> </address> </div> <script type="text/javascript" src=" http://api.idescat.cat/emex/v1/dades.json?id=080193&amp;i=f3 21,f187,f122,f261&amp;lang=en&amp;enc=iso-8859-1&amp;callback=ini“></script> </body>
  • 104. cache .js very long client .ifr <body> <div id="Giny"> <div id="cantoul" class="cantonada"></div><div id="cantou" class="canto"></div> <div id="cantour" class="cantonada"></div><div id="titol"></div> <div id="cantol" class="canto"></div><div id="Contenidor" class="carrega"></div> <div id="cantor" class="canto"></div><div id="cantodl" class="cantonada"></div> <div id="cantod" class="canto"></div><div id="cantodr" class="cantonada"></div> <address> <span>Widget provided by</span> <a target="_top" href="http://www.idescat.cat/api/emex/giny/indicadors/?lang=en"> <img alt="Idescat" title="add this widget to your web page" src="http://www.idescat.cat/images/idescat.png" /> </a> </address> </div> <script type="text/javascript" src=" http://api.idescat.cat/emex/v1/dades.json?id=080193&amp;i=f3 21,f187,f122,f261&amp;lang=en&amp;enc=iso-8859-1&amp;callback=ini"></script> </body>
  • 105. cache .js very long client .ifr long client <body> <div id="Giny"> <div id="cantoul" class="cantonada"></div><div id="cantou" class="canto"></div> <div id="cantour" class="cantonada"></div><div id="titol"></div> <div id="cantol" class="canto"></div><div id="Contenidor" class="carrega"></div> <div id="cantor" class="canto"></div><div id="cantodl" class="cantonada"></div> <div id="cantod" class="canto"></div><div id="cantodr" class="cantonada"></div> <address> <span>Widget provided by</span> <a target="_top" href="http://www.idescat.cat/api/emex/giny/indicadors/?lang=en"> <img alt="Idescat" title="add this widget to your web page" src="http://www.idescat.cat/images/idescat.png" /> </a> </address> </div> <script type="text/javascript" src=" http://api.idescat.cat/emex/v1/dades.json?id=080193&amp;i=f3 21,f187,f122,f261&amp;lang=en&amp;enc=iso-8859-1&amp;callback=ini"></script> </body>
  • 106. cache .js very long client .ifr long client .json
  • 107. cache .js very long client .ifr long client .json short client, server
  • 108. Idescat JSON
  • 109. World Bank JSON
  • 110. Census Bureau JSON
  • 111. JSON-stat JSON
  • 112. SDMX-JSON JSON
  • 113. shared interface ...ifr?p=i/21,7,22 data ...ifr?p=i/6,13,9 data ...ifr?p=i/36,39,15 data ...ifr?p=i/8,23,14 data ...ifr?p=i/16,10,40 data ...ifr?p=i/24,52,11 data 7 ...ifr?p=i/2,41,28 data
  • 114. http://api.idescat.cat/{widget}.ifr? geo=tv&class=sex&metric=pop&time=2002&… <body> <div id="Giny"> <div id="cantoul" class="cantonada"></div><div id="cantou" class="canto"></div> <div id="cantour" class="cantonada"></div><div id="titol"></div> <div id="cantol" class="canto"></div><div id="Contenidor" class="carrega"></div> <div id="cantor" class="canto"></div><div id="cantodl" class="cantonada"></div> <div id="cantod" class="canto"></div><div id="cantodr" class="cantonada"></div> <address> <span>Widget provided by</span> <a target="_top" href="http://www.idescat.cat/api/emex/giny/indicadors/?lang=en"> <img alt="Idescat" title="add this widget to your web page" src="http://www.idescat.cat/images/idescat.png" /> </a> </address> </div> <script type="text/javascript" src=" http://api.idescat.cat/{service}/v1/{resource}.json?geo=tv &amp;class=sex&amp;metric=pop&amp;time=2002&amp;lang=en&amp;callback=ini"></script> </body>
  • 116. http://api.idescat.cat/{widget}.ifr# geo=tv&class=sex&metric=pop&time=2002&… <body> <script type="text/javascript"> </script> </body> Project
  • 117. geo=tv&class=sex&metric=pop&time=2002&… <body> <script type="text/javascript"> var setup=getURIParameters(); </script> </body>
  • 118. { content: { metric: ["pop"], geo: ["tv"], time: ["2001"], class: ["sex"], lang: "en" }, layout: { borderColor: "#f0f0f0", textColor: "#ff0000", ... } } geo=tv&class=sex&metric=pop&time=2002&… <body> <script type="text/javascript"> var setup=getURIParameters(); </script> </body>
  • 119. <body> <script type="text/javascript"> var setup=getURIParameters(); buildDOM(setup.layout); </script> </body>
  • 120. <table> <caption></caption> <thead> <tr><th></th><th scope="col"></th></tr> </thead> <tfoot> <tr><td colspan=""></td></tr> </tfoot> <tbody> <tr><th scope="row"></th><td></td></tr> <tr><th scope="row"></th><td></td></tr> <tr><th scope="row"></th><td></td></tr> </tbody> </table> <body> <script type="text/javascript"> var setup=getURIParameters(); buildDOM(setup.layout); </script> </body>
  • 121. <body> <script type="text/javascript"> var setup=getURIParameters(); buildDOM(setup.layout); var data=AjaxRetrieveData(setup.content); </script> </body>
  • 122. <body> Same origin policy <script type="text/javascript"> var setup=getURIParameters(); http://api.idescat.cat/{widget}.ifr#... buildDOM(setup.layout); var data=AjaxRetrieveData(setup.content); http://api.idescat.cat/{...}.json?... </script> </body>
  • 123. { "dataset" : { "label" : "Tuvalu population by sex in the 2002 Census", "value" : [4729, 4832, 9561], "dimension" : { "id" : ["metric", "time", "geo", "sex"], "size" : [1, 1, 1, 3], "sex" : { "label" : "Sex", "category" : { "index" : { "M" : 0, "F" : 1, "T" : 2 }, "label" : { "M" : "Men", "F" : "Women", "T" : "Total" } } }, … <body> Same origin policy <script type="text/javascript"> var setup=getURIParameters(); http://api.idescat.cat/{widget}.ifr#... buildDOM(setup.layout); var data=AjaxRetrieveData(setup.content); http://api.idescat.cat/{...}.json?... </script> </body>
  • 124. <body> <script type="text/javascript"> var setup=getURIParameters(); buildDOM(setup.layout); var data=AjaxRetrieveData(setup.content); insertDataOnDOM(data); </script> </body>
  • 125. <table> <caption>Tuvalu population by sex</caption> <thead> <tr><th></th><th scope="col">2002</th></tr> </thead> <tfoot> <tr><td colspan="2">Source: Central Statistics Division – Government of Tuvalu.</td></tr> </tfoot> <tbody> <tr><th scope="row">Men</th><td> 4,729 </td></tr> <tr><th scope="row">Women</th><td> 4,832 </td></tr> <tr><th scope="row">Total</th><td> 9,561 </td></tr> </tbody> </table> <body> <script type="text/javascript"> var setup=getURIParameters(); buildDOM(setup.layout); var data=AjaxRetrieveData(setup.content); insertDataOnDOM(data); </script> </body>
  • 126. shared interface ...ifr#p=i/21,7,22 data ...ifr#p=i/6,13,9 data ...ifr#p=i/36,39,15 data ...ifr#p=i/8,23,14 data ...ifr#p=i/16,10,40 data ...ifr#p=i/24,52,11 data 7 ...ifr#p=i/2,41,28 data
  • 129. A script is unaware about itself <script type="text/javascript" src=" http://api.idescat.cat/{widget}.js# geo=tv&class=sex&metric=pop&time=2002&… "></script>
  • 130. A script is unaware about itself <script type="text/javascript" src=" http://api.idescat.cat/{widget}.js# geo=tv&class=sex&metric=pop&time=2002&… "></script> hack var s=document.getElementsByTagName('script'); var params=s[s.length-1].src.replace(/^[^#]+#?/,'');
  • 131. <script type="text/javascript"> widgetSetup = { "geo": "tv", "class": "sex", "metric": "pop", "time": "2002", ... }; </script> <script type="text/javascript" src="http://api.idescat.cat/{widget}.js"> </script>
  • 132. <script type="text/javascript"> widgetSetup = { "geo": "tv", Variable conflict "class": "sex", "metric": "pop", "time": "2002", ... }; </script> <script type="text/javascript" src="http://api.idescat.cat/{widget}.js"> </script>
  • 134. <script type="text/javascript" src="http://api.idescat.cat/{widget}.js"> </script> <script type="text/javascript"> new Idescat.Widget( { "geo": "tv", "class": "sex", "metric": "pop", "time": "2002", ... } ).start();</script>
  • 136. <div class="IdescatWidget" data-type="TimeSeriesWidget" data-params="geo=tv;class=sex; metric=pop;time=2002;..."></div> <script type="text/javascript"> (function() { var js, id='IdescatJS', d=document,s='script', e=d.getElementsByTagName(s)[0]; if (d.getElementById(id)) /*nonstandard*/ return; js = d.createElement(s); js.id = id; /*nonstandard*/ js.src = "http://api.idescat.cat/widgets.js"; e.parentNode.insertBefore(js, e); }()); </script>
  • 137. Widgets mechanism: many interface: must be built content retrieval: yes distance: 0 clicks
  • 138. 1. Use a dedicated server for third party services 2. Implement a different cache policy for interface/data 3. Run in the client as many computing tasks as possible content retrieval: yes
  • 139. 4. Main content widgets must be resizable 5. Side content widgets must be customizable (layout / content) (If both resizable and customizable, better.) interface: must be built
  • 140. 6. Provide an <iframe /> façade 7. But also a <script /> façade 8. Allow auto-embedding mechanism: many
  • 142. Thank you Slide #1ff. Web image by zzathras777 (CC BY-NC) Slide #4 PageRank chart by 345Kai (Public domain) Slide #10ff. Australian one way sign (GNU Free Documentation License) Slide #13 Bruce Lee image, author unknown Slide #16ff. Chain links image by Eric M. Martin (CC BY-NC-ND) Slide #32 Peacocks image by Michelle Kinsey Bruns (CC BY-SA) Slide #39 Magic wand image by Sheeshoo (CC BY-NC-SA)