SlideShare una empresa de Scribd logo
1 de 142
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 !
<img src=
"http://graphics8.nytimes.com/
images/misc/nytlogo153x23.gif"
/>
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.
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
Seamless integration
Side content
Explicit embedding
Side content
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
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)

Más contenido relacionado

Destacado

Los widgets del Idescat: una aplicación de las APIs
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
 
WWW para editores (y más allá) (4)
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
 
WWW para editores (y más allá) (6)
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
 
WWW para editores (y más allá) (7)
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
 
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)
WWW para editores (y más allá) (y 8)Xavier Badosa
 
Periodisme de dades i oficines estadístiques
Periodisme de dades i oficines estadístiquesPeriodisme de dades i oficines estadístiques
Periodisme de dades i oficines estadístiquesXavier Badosa
 
Difusió estadísTICa oficial
Difusió estadísTICa oficialDifusió estadísTICa oficial
Difusió estadísTICa oficialXavier 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)
WWW para editores (y más allá) (2)Xavier Badosa
 
Consuming Nordic Statbank data with JSON-stat
Consuming Nordic Statbank data with JSON-statConsuming Nordic Statbank data with JSON-stat
Consuming Nordic Statbank data with JSON-statXavier Badosa
 
JSON-stat & JS: the JSON-stat Javascript Toolkit
JSON-stat & JS: the JSON-stat Javascript ToolkitJSON-stat & JS: the JSON-stat Javascript Toolkit
JSON-stat & JS: the JSON-stat Javascript ToolkitXavier Badosa
 
La 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. 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. JECAS08Xavier Badosa
 
Reutilización de datos gracias a la visualización de datos
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 datosXavier 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)
WWW para editores (y más allá) (3)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)
WWW para editores (y más allá) (1)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)
WWW para editores (y más allá) (5)Xavier Badosa
 
Gov APIs: The Notorious Case of Official Statistics
Gov APIs: The Notorious Case of Official StatisticsGov APIs: The Notorious Case of Official Statistics
Gov APIs: The Notorious Case of Official StatisticsXavier Badosa
 
What's our business? Statistics as platform
What's our business? Statistics as platformWhat's our business? Statistics as platform
What's our business? Statistics as platformXavier Badosa
 
Idescat on the Google Public Data Explorer
Idescat on the Google Public Data ExplorerIdescat on the Google Public Data Explorer
Idescat on the Google Public Data ExplorerXavier Badosa
 
Data Dissemination through Data Visualization
Data Dissemination through Data VisualizationData Dissemination through Data Visualization
Data Dissemination through Data VisualizationXavier Badosa
 

Destacado (20)

Los widgets del Idescat: una aplicación de las APIs
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
 
WWW para editores (y más allá) (4)
WWW para editores (y más allá) (4)WWW para editores (y más allá) (4)
WWW para editores (y más allá) (4)
 
Toplax
ToplaxToplax
Toplax
 
WWW para editores (y más allá) (6)
WWW para editores (y más allá) (6)WWW para editores (y más allá) (6)
WWW para editores (y más allá) (6)
 
WWW para editores (y más allá) (7)
WWW para editores (y más allá) (7)WWW para editores (y más allá) (7)
WWW para editores (y más allá) (7)
 
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)
WWW para editores (y más allá) (y 8)
 
Periodisme de dades i oficines estadístiques
Periodisme de dades i oficines estadístiquesPeriodisme de dades i oficines estadístiques
Periodisme de dades i oficines estadístiques
 
Difusió estadísTICa oficial
Difusió estadísTICa oficialDifusió estadísTICa oficial
Difusió estadísTICa oficial
 
WWW para editores (y más allá) (2)
WWW para editores (y más allá) (2)WWW para editores (y más allá) (2)
WWW para editores (y más allá) (2)
 
Consuming Nordic Statbank data with JSON-stat
Consuming Nordic Statbank data with JSON-statConsuming Nordic Statbank data with JSON-stat
Consuming Nordic Statbank data with JSON-stat
 
JSON-stat & JS: the JSON-stat Javascript Toolkit
JSON-stat & JS: the JSON-stat Javascript ToolkitJSON-stat & JS: the JSON-stat Javascript Toolkit
JSON-stat & JS: the JSON-stat Javascript Toolkit
 
La 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. 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
 
Reutilización de datos gracias a la visualización de datos
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
 
WWW para editores (y más allá) (3)
WWW para editores (y más allá) (3)WWW para editores (y más allá) (3)
WWW para editores (y más allá) (3)
 
WWW para editores (y más allá) (1)
WWW para editores (y más allá) (1)WWW para editores (y más allá) (1)
WWW para editores (y más allá) (1)
 
WWW para editores (y más allá) (5)
WWW para editores (y más allá) (5)WWW para editores (y más allá) (5)
WWW para editores (y más allá) (5)
 
Gov APIs: The Notorious Case of Official Statistics
Gov APIs: The Notorious Case of Official StatisticsGov APIs: The Notorious Case of Official Statistics
Gov APIs: The Notorious Case of Official Statistics
 
What's our business? Statistics as platform
What's our business? Statistics as platformWhat's our business? Statistics as platform
What's our business? Statistics as platform
 
Idescat on the Google Public Data Explorer
Idescat on the Google Public Data ExplorerIdescat on the Google Public Data Explorer
Idescat on the Google Public Data Explorer
 
Data Dissemination through Data Visualization
Data Dissemination through Data VisualizationData Dissemination through Data Visualization
Data Dissemination through Data Visualization
 

Similar a Links and Widgets: the Fabric of the Web

Web Apps and more
Web Apps and moreWeb Apps and more
Web Apps and moreYan Shi
 
Web app and more
Web app and moreWeb app and more
Web app and morefaming su
 
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)
Mobile web development techniques (and Opera's developer tools)Andreas Bovens
 
Responsive Websites
Responsive WebsitesResponsive Websites
Responsive WebsitesJoe Seifi
 
[cssdevconf] Adaptive Images in Responsive Web Design
[cssdevconf] Adaptive Images in Responsive Web Design[cssdevconf] Adaptive Images in Responsive Web Design
[cssdevconf] Adaptive Images in Responsive Web DesignChristopher Schmitt
 
Surviving the Zombie Apocalypse of Connected devices - Jfokus 2013
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 2013Gustaf Nilsson Kotte
 
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...
Handys und Tablets - Webentwicklung jenseits des Desktops - MobileTech Confer...Patrick Lauke
 
Discovery bookmarklet - Metro Science Librarians SIG
Discovery bookmarklet - Metro Science Librarians SIGDiscovery bookmarklet - Metro Science Librarians SIG
Discovery bookmarklet - Metro Science Librarians SIGValerie Forrestal
 
Pinkoi Mobile Web
Pinkoi Mobile WebPinkoi Mobile Web
Pinkoi Mobile Webmikeleeme
 
[peachpit] Adaptive Images in Responsive Web Design
[peachpit] Adaptive Images in Responsive Web Design[peachpit] Adaptive Images in Responsive Web Design
[peachpit] Adaptive Images in Responsive Web DesignChristopher Schmitt
 
CSS3 Media Queries: Mobile Elixir or CSS Snake Oil
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 Oiljameswillweb
 
Multi screen HTML5
Multi screen HTML5Multi screen HTML5
Multi screen HTML5Ron Reiter
 
[rwdsummit] Adaptive Images in Responsive Web Design
[rwdsummit] Adaptive Images in Responsive Web Design[rwdsummit] Adaptive Images in Responsive Web Design
[rwdsummit] Adaptive Images in Responsive Web DesignChristopher Schmitt
 
Responsive content
Responsive contentResponsive content
Responsive contenthonzie
 
Web APIs & Apps - Mozilla
Web APIs & Apps - MozillaWeb APIs & Apps - Mozilla
Web APIs & Apps - MozillaRobert Nyman
 

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

Web Apps and more
Web Apps and moreWeb Apps and more
Web Apps and more
 
Web app and more
Web app and moreWeb app and more
Web app and more
 
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)
Mobile web development techniques (and Opera's developer tools)
 
Html5
Html5Html5
Html5
 
final ppt.pptx
final ppt.pptxfinal ppt.pptx
final ppt.pptx
 
final ppt.pptx
final ppt.pptxfinal ppt.pptx
final ppt.pptx
 
Responsive Websites
Responsive WebsitesResponsive Websites
Responsive Websites
 
[cssdevconf] Adaptive Images in Responsive Web Design
[cssdevconf] Adaptive Images in Responsive Web Design[cssdevconf] Adaptive Images in Responsive Web Design
[cssdevconf] Adaptive Images in Responsive Web Design
 
Adobe & HTML5
Adobe & HTML5Adobe & HTML5
Adobe & HTML5
 
Starwest 2008
Starwest 2008Starwest 2008
Starwest 2008
 
Surviving the Zombie Apocalypse of Connected devices - Jfokus 2013
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...
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...
 
Discovery bookmarklet - Metro Science Librarians SIG
Discovery bookmarklet - Metro Science Librarians SIGDiscovery bookmarklet - Metro Science Librarians SIG
Discovery bookmarklet - Metro Science Librarians SIG
 
Pinkoi Mobile Web
Pinkoi Mobile WebPinkoi Mobile Web
Pinkoi Mobile Web
 
[peachpit] Adaptive Images in Responsive Web Design
[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
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
 
Multi screen HTML5
Multi screen HTML5Multi screen HTML5
Multi screen HTML5
 
[rwdsummit] Adaptive Images in Responsive Web Design
[rwdsummit] Adaptive Images in Responsive Web Design[rwdsummit] Adaptive Images in Responsive Web Design
[rwdsummit] Adaptive Images in Responsive Web Design
 
Responsive content
Responsive contentResponsive content
Responsive content
 
Web APIs & Apps - Mozilla
Web APIs & Apps - MozillaWeb APIs & Apps - Mozilla
Web APIs & Apps - Mozilla
 

Más de Xavier Badosa

Putting Data in Cells
Putting Data in CellsPutting Data in Cells
Putting Data in CellsXavier Badosa
 
JSON-stat in the Sea of Standards
JSON-stat in the Sea of StandardsJSON-stat in the Sea of Standards
JSON-stat in the Sea of StandardsXavier Badosa
 
The Trouble with Tables
The Trouble with TablesThe Trouble with Tables
The Trouble with TablesXavier Badosa
 
StatisticalTable, a JSON-stat-based vocabulary
StatisticalTable, a JSON-stat-based vocabularyStatisticalTable, a JSON-stat-based vocabulary
StatisticalTable, a JSON-stat-based vocabularyXavier Badosa
 
Decoupling Official Statistics
Decoupling Official StatisticsDecoupling Official Statistics
Decoupling Official StatisticsXavier 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...
JSON-stat in the session "The future of standards in statistics", United Nati...Xavier Badosa
 
Idescat Visual: Gràfics i mapes
Idescat Visual: Gràfics i mapesIdescat Visual: Gràfics i mapes
Idescat Visual: Gràfics i mapesXavier Badosa
 
JSON-stat, a simple light standard for all kinds of data disseminators
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 disseminatorsXavier Badosa
 
E-books Are Not the Future of Books
E-books Are Not the Future of BooksE-books Are Not the Future of Books
E-books Are Not the Future of BooksXavier Badosa
 
Proyecto E-book 2001
Proyecto E-book 2001Proyecto E-book 2001
Proyecto E-book 2001Xavier Badosa
 

Más de Xavier Badosa (10)

Putting Data in Cells
Putting Data in CellsPutting Data in Cells
Putting Data in Cells
 
JSON-stat in the Sea of Standards
JSON-stat in the Sea of StandardsJSON-stat in the Sea of Standards
JSON-stat in the Sea of Standards
 
The Trouble with Tables
The Trouble with TablesThe Trouble with Tables
The Trouble with Tables
 
StatisticalTable, a JSON-stat-based vocabulary
StatisticalTable, a JSON-stat-based vocabularyStatisticalTable, a JSON-stat-based vocabulary
StatisticalTable, a JSON-stat-based vocabulary
 
Decoupling Official Statistics
Decoupling Official StatisticsDecoupling Official Statistics
Decoupling Official Statistics
 
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...
JSON-stat in the session "The future of standards in statistics", United Nati...
 
Idescat Visual: Gràfics i mapes
Idescat Visual: Gràfics i mapesIdescat Visual: Gràfics i mapes
Idescat Visual: Gràfics i mapes
 
JSON-stat, a simple light standard for all kinds of data disseminators
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
 
E-books Are Not the Future of Books
E-books Are Not the Future of BooksE-books Are Not the Future of Books
E-books Are Not the Future of Books
 
Proyecto E-book 2001
Proyecto E-book 2001Proyecto E-book 2001
Proyecto E-book 2001
 

Último

Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUK Journal
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?Antenna Manufacturer Coco
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
Evaluating the top large language models.pdf
Evaluating the top large language models.pdfEvaluating the top large language models.pdf
Evaluating the top large language models.pdfChristopherTHyatt
 
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
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEarley Information Science
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
 
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
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
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
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdflior mazor
 

Último (20)

Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Evaluating the top large language models.pdf
Evaluating the top large language models.pdfEvaluating the top large language models.pdf
Evaluating the top large language models.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...
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
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
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
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
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 

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 !
  • 16.
  • 18.
  • 19.
  • 20.
  • 21.
  • 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.
  • 28.
  • 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
  • 41.
  • 45.
  • 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
  • 53.
  • 54.
  • 55.
  • 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)