SlideShare une entreprise Scribd logo
1  sur  53
Exploring the Sweet Spot Geolocation, Health, and Gov-data Lance Roggendorff | @lroggendorff | lroggendorff@gmail.com
aggregators “Pipe Dream” by RishiMenon - http://www.flickr.com/photos/rxmflickr/4102530508/
Widget builders Frank Scherschel - http://images.google.com/hosted/life/l?imgurl=a00c346a37821dc5
The Problem
aggregators Data aggregation “Pipe Dream” by RishiMenon - http://www.flickr.com/photos/rxmflickr/4102530508/
http://cdcnpin.org/hivTestLocatorFeed/feed.aspx?zip=37206&radius=5
<?xml version="1.0" encoding="utf-8"?> <feed xmlns="http://www.w3.org/2005/Atom" xmlns:georss="http://www.georss.org/georss">   <title>Search Results from CDC - Locate HIV/AIDS Testing Sites</title>   <link href="http://cdcnpin.org/hivTestLocatorFeed.aspx?zip=37206&amp;radius=5" rel="self" />   <link href="http://hivtest.org" rel="alternate" />   <author>     <name>CDC NPIN</name>   </author>   <id>tag:cdcnpin.org,2009-09-15:/npinwebservices/NPINDataWebservices</id>   <updated>2009-09-15T00:00:00-05:00</updated>   <entry>     <title>Cayce Family Health Center</title>     <link href="http://www.hivtest.org/search/OrgResult.cfm?OrgNbr=21952" />     <id>tag:hivtest.org,2000-03-20:/search/OrgResult.cfm?OrgNbr=21952</id>     <summary type="xhtml">       <div xmlns="http://www.w3.org/1999/xhtml">         <div class="vcard">           <div class="fn org">Cayce Family Health Center</div>           <div class="adr">             <div class="street-address">617 S 8th St</div>             <span class="locality">Nashville</span>, <span class="region">TN</span>, <span class="postal-code">37206</span></div>           <div class="tel">615-226-1695</div>         </div>       		 </div>     </summary>     <georss:point>36.168533 -86.755339</georss:point>     <updated>2010-10-14T18:17:31.0000000-04:00</updated>   </entry> </feed>
<?xml version="1.0" encoding="utf-8"?> <feed xmlns="http://www.w3.org/2005/Atom" xmlns:georss="http://www.georss.org/georss">   <title>Search Results from CDC - Locate HIV/AIDS Testing Sites</title>   <link href="http://cdcnpin.org/hivTestLocatorFeed.aspx?zip=37206&amp;radius=5" rel="self" />   <link href="http://hivtest.org" rel="alternate" />   <author>     <name>CDC NPIN</name>   </author>   <id>tag:cdcnpin.org,2009-09-15:/npinwebservices/NPINDataWebservices</id>   <updated>2009-09-15T00:00:00-05:00</updated>   <entry>     <title>Cayce Family Health Center</title>     <link href="http://www.hivtest.org/search/OrgResult.cfm?OrgNbr=21952" />     <id>tag:hivtest.org,2000-03-20:/search/OrgResult.cfm?OrgNbr=21952</id>     <summary type="xhtml">       <div xmlns="http://www.w3.org/1999/xhtml">         <div class="vcard">           <div class="fn org">Cayce Family Health Center</div>           <div class="adr">             <div class="street-address">617 S 8th St</div>             <span class="locality">Nashville</span>, <span class="region">TN</span>, <span class="postal-code">37206</span></div>           <div class="tel">615-226-1695</div>         </div>       		 </div>     </summary> <georss:point>36.168533 -86.755339</georss:point> <updated>2010-10-14T18:17:31.0000000-04:00</updated>   </entry> </feed>
Widget builders Search decentralization Frank Scherschel - http://images.google.com/hosted/life/l?imgurl=a00c346a37821dc5
<noscript><div style="height:115px;position:relative;width:314px;background:url(http://locator.aids.gov/images/bg_widget-8bit.png) no-repeat;padding-left:19px;"><strong style="padding-top:6px;color:#fff;display:block;font-family:Trebuchet MS;font-size:14px;line-height:16px;">Find HIV/AIDS Prevention & Service Providers</strong><p style="font-size:9px;margin: 3px 0 4px;color:#fff;">Enter your address, city and state, or ZIP Code:</p><form action="http://locator.aids.gov/index.php" style="margin:0;"><label style="margin-left:22px;"><input type="text" name="location" style="border:0;font-size:11px;width:230px;"/></label><button type="submit" style="background:none;border:none;cursor:pointer;height:40px;margin-top:5px;padding:0;text-indent:-999em;overflow:hidden;vertical-align:middle;width:40px;">GO</button><input type="hidden" name="text_only" value="true" /></form><p style="font-size:9px;margin: 10px 0 0;color:#fff;">For more information on this widget, please visit <a href="http://aids.gov/locator" style="color:#fff;">AIDS.gov</a>.</p></div></noscript><script type="text/javascript" src="http://locator.aids.gov/widget.js"></script>
var objects = $.d.getElementsByTagName('object'); if ( objects.length > 0 ) { 	for (vari = 0, ol = objects.length; i < ol; i++) { varobj = objects[i].cloneNode(true); varobj_parent = objects[i].parentNode; var placeholder = $.f.createNode('div', {id:trueName+'obj'+i+'savedspot'}); obj_parent.insertBefore(placeholder, objects[i].nextSibling); obj_parent.removeChild(objects[i]); varparam = $.f.createNode('param', {name:'wmode',value:'transparent'}); obj.appendChild(param); obj_parent.insertBefore(obj, placeholder.nextSibling); obj_parent.removeChild(placeholder); 	} } // repeat for <embed> elements for IE
Shareable
Analytics
1,600,000 loads (meaningless)
~2000 actual searches
Widget on ~70 websites
Widget Techniques Get on your coding shoes
Case-hardened JS http://kentbrewster.com/badges/
(function() { vartrueName = '';  for (vari = 0; i < 16; i++) { trueName += String.fromCharCode(Math.floor(Math.random() * 26) + 97);  } window[trueName] = {}; var $ = window[trueName];  $.f = function() {   return {    init : function(target) { vartheScripts = document.getElementsByTagName('SCRIPT');     for (vari = 0; i < theScripts.length; i++) {      if (theScripts[i].src.match(target)) {       $.w = document.createElement('DIV');       $.w.innerHTML = 'Hello, world.  My name is ' + trueName + '.'; theScripts[i].parentNode.insertBefore($.w, theScripts[i]); theScripts[i].parentNode.removeChild(theScripts[i]);       break;      }     }    }   };  }(); varthisScript = /behavior.js/;  if (typeofwindow.addEventListener !== 'undefined') { window.addEventListener('load', function() { $.f.init(thisScript); }, false);  } else if (typeofwindow.attachEvent !== 'undefined') { window.attachEvent('onload', function() { $.f.init(thisScript); });  } })();
(function() { vartrueName = '';  for (vari = 0; i < 16; i++) { trueName += String.fromCharCode(Math.floor(Math.random() * 26) + 97);  } window[trueName] = {}; var $ = window[trueName];  $.f = function() {   return {    init : function(target) { vartheScripts = document.getElementsByTagName('SCRIPT');     for (vari = 0; i < theScripts.length; i++) {      if (theScripts[i].src.match(target)) {       $.w = document.createElement('DIV');       $.w.innerHTML = 'Hello, world.  My name is ' + trueName + '.'; theScripts[i].parentNode.insertBefore($.w, theScripts[i]); theScripts[i].parentNode.removeChild(theScripts[i]);       break;      }     }    }   };  }(); varthisScript = /behavior.js/;  if (typeofwindow.addEventListener !== 'undefined') { window.addEventListener('load', function() { $.f.init(thisScript); }, false);  } else if (typeofwindow.attachEvent !== 'undefined') { window.attachEvent('onload', function() { $.f.init(thisScript); });  } })();
(function() { vartrueName = '';  for (vari = 0; i < 16; i++) { trueName += String.fromCharCode(Math.floor(Math.random() * 26) + 97);  } window[trueName] = {}; var $ = window[trueName];  $.f = function() {   return {    init : function(target) { vartheScripts = document.getElementsByTagName('SCRIPT');     for (vari = 0; i < theScripts.length; i++) {      if (theScripts[i].src.match(target)) {       $.w = document.createElement('DIV');       $.w.innerHTML = 'Hello, world.  My name is ' + trueName + '.'; theScripts[i].parentNode.insertBefore($.w, theScripts[i]); theScripts[i].parentNode.removeChild(theScripts[i]);       break;      }     }    }   };  }(); varthisScript = /behavior.js/;  if (typeofwindow.addEventListener !== 'undefined') { window.addEventListener('load', function() { $.f.init(thisScript); }, false);  } else if (typeofwindow.attachEvent !== 'undefined') { window.attachEvent('onload', function() { $.f.init(thisScript); });  } })();
(function() { vartrueName = '';  for (vari = 0; i < 16; i++) { trueName += String.fromCharCode(Math.floor(Math.random() * 26) + 97);  } window[trueName] = {}; var $ = window[trueName];  $.f = function() {   return {    init : function(target) { vartheScripts = document.getElementsByTagName('SCRIPT');     for (vari = 0; i < theScripts.length; i++) {      if (theScripts[i].src.match(target)) {       $.w = document.createElement('DIV');       $.w.innerHTML = 'Hello, world.  My name is ' + trueName + '.'; theScripts[i].parentNode.insertBefore($.w, theScripts[i]); theScripts[i].parentNode.removeChild(theScripts[i]);       break;      }     }    }   };  }(); varthisScript = /behavior.js/;  if (typeofwindow.addEventListener !== 'undefined') { window.addEventListener('load', function() { $.f.init(thisScript); }, false);  } else if (typeofwindow.attachEvent !== 'undefined') { window.attachEvent('onload', function() { $.f.init(thisScript); });  } })();
Meebo Bar http://en.oreilly.com/velocity2010/public/schedule/detail/13070
http://en.oreilly.com/velocity2010/public/schedule/detail/13070
Issues
JavaScript Blocks Solution: Meebo Bar technique
CSS Sandbox http://github.com/premasagar/cleanslate
JavaScript Prohibited MySpace, Wordpress.com, FB, others, disallow JS
Performance
<script> 	$LAB 	.script("http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js") 	.script("/scripts/config.1284731050.js") 	.wait() 	.script("/scripts/locator.1284731052.js") 	.script("http://www.google.com/jsapi") 	.wait(function () { google.load("maps", "3", {"callback": "Locator.initialize", "other_params": "sensor=false" }); 	}); </script> @getify http://labjs.com
Client cache http://developer.yahoo.com/performance/rules.html#expires #Far Future Expires Header <FilesMatch "(gif|png|jpg|js|css|swf)$"> ExpiresActive On ExpiresDefault "access plus 10 years" </FilesMatch>
File versioning http://particletree.com/notebook/automatically-version-your-css-and-javascript-files/ #Rules for Versioned Static Files #filename.123456789.js -> filename.js RewriteRule^(scripts|css|images)/(.+)(.+)(js|css|jpg|gif|png)$ $1/$2.$4 [L]
One last tip… Build Iterate
Thanks! Please rate me: http://spkr8.com/t/4825 Or, give feedback: @lroggendorff lroggendorff@gmail.com

Contenu connexe

Tendances

Squashing the Heisenbugs
Squashing the HeisenbugsSquashing the Heisenbugs
Squashing the HeisenbugsTrotter Cashion
 
Directv-choctawok-best-deals
Directv-choctawok-best-dealsDirectv-choctawok-best-deals
Directv-choctawok-best-dealsJeaniceEdsall
 
Quiros patricia ignite slides - Pet Parents Unite!
Quiros patricia ignite slides - Pet Parents Unite!Quiros patricia ignite slides - Pet Parents Unite!
Quiros patricia ignite slides - Pet Parents Unite!Patty Quiros
 
SmartData Webinar Slides JSON-LD
SmartData Webinar Slides JSON-LD SmartData Webinar Slides JSON-LD
SmartData Webinar Slides JSON-LD DATAVERSITY
 

Tendances (7)

Squashing the Heisenbugs
Squashing the HeisenbugsSquashing the Heisenbugs
Squashing the Heisenbugs
 
Directv-choctawok-best-deals
Directv-choctawok-best-dealsDirectv-choctawok-best-deals
Directv-choctawok-best-deals
 
Quiros patricia ignite slides - Pet Parents Unite!
Quiros patricia ignite slides - Pet Parents Unite!Quiros patricia ignite slides - Pet Parents Unite!
Quiros patricia ignite slides - Pet Parents Unite!
 
SmartData Webinar Slides JSON-LD
SmartData Webinar Slides JSON-LD SmartData Webinar Slides JSON-LD
SmartData Webinar Slides JSON-LD
 
Vhdl ppt
Vhdl pptVhdl ppt
Vhdl ppt
 
CloudKit
CloudKitCloudKit
CloudKit
 
3. javascript bangla tutorials
3. javascript bangla tutorials3. javascript bangla tutorials
3. javascript bangla tutorials
 

Similaire à Exploring the Sweet Spot: Geolocation, Health, and Gov-data

Finding things on the web with BOSS
Finding things on the web with BOSSFinding things on the web with BOSS
Finding things on the web with BOSSChristian Heilmann
 
Beautiful Java EE - PrettyFaces
Beautiful Java EE - PrettyFacesBeautiful Java EE - PrettyFaces
Beautiful Java EE - PrettyFacesLincoln III
 
Scti 2011 minicurso jquery
Scti 2011 minicurso jqueryScti 2011 minicurso jquery
Scti 2011 minicurso jqueryciberglo
 
Intro Open Social and Dashboards
Intro Open Social and DashboardsIntro Open Social and Dashboards
Intro Open Social and DashboardsAtlassian
 
Testing persistence in PHP with DbUnit
Testing persistence in PHP with DbUnitTesting persistence in PHP with DbUnit
Testing persistence in PHP with DbUnitPeter Wilcsinszky
 
Awash in a sea of connections
Awash in a sea of connectionsAwash in a sea of connections
Awash in a sea of connectionsGalen Charlton
 
FVCP - Facebook , Twitter and Meetup API / Widgets
FVCP - Facebook , Twitter and Meetup API / WidgetsFVCP - Facebook , Twitter and Meetup API / Widgets
FVCP - Facebook , Twitter and Meetup API / WidgetsPete DuMelle
 
Spyware/Malware FVCP
Spyware/Malware  FVCPSpyware/Malware  FVCP
Spyware/Malware FVCPPete DuMelle
 
August 10th, 2009 Pete De Mulle Twitter
August 10th, 2009 Pete De Mulle TwitterAugust 10th, 2009 Pete De Mulle Twitter
August 10th, 2009 Pete De Mulle TwitterStraight North
 
Html and i_phone_mobile-2
Html and i_phone_mobile-2Html and i_phone_mobile-2
Html and i_phone_mobile-2tonvanbart
 
Rugalytics | Ruby Manor Nov 2008
Rugalytics | Ruby Manor Nov 2008Rugalytics | Ruby Manor Nov 2008
Rugalytics | Ruby Manor Nov 2008Rob
 
The Basics Of Page Creation
The Basics Of Page CreationThe Basics Of Page Creation
The Basics Of Page CreationWildan Maulana
 
Generic Setup De-Mystified
Generic Setup De-MystifiedGeneric Setup De-Mystified
Generic Setup De-MystifiedClayton Parker
 
FrontInBahia 2014: 10 dicas de desempenho para apps mobile híbridas
FrontInBahia 2014: 10 dicas de desempenho para apps mobile híbridasFrontInBahia 2014: 10 dicas de desempenho para apps mobile híbridas
FrontInBahia 2014: 10 dicas de desempenho para apps mobile híbridasLoiane Groner
 
Plone Interactivity
Plone InteractivityPlone Interactivity
Plone InteractivityEric Steele
 
Mobile Patrons: Better Services on the Go (For Techie)
Mobile Patrons: Better Services on the Go (For Techie)Mobile Patrons: Better Services on the Go (For Techie)
Mobile Patrons: Better Services on the Go (For Techie)Vincci Kwong
 
jQuery - Doing it right
jQuery - Doing it rightjQuery - Doing it right
jQuery - Doing it rightgirish82
 

Similaire à Exploring the Sweet Spot: Geolocation, Health, and Gov-data (20)

สปริงเฟรมเวิร์ค4.1
สปริงเฟรมเวิร์ค4.1สปริงเฟรมเวิร์ค4.1
สปริงเฟรมเวิร์ค4.1
 
Web Scraping with PHP
Web Scraping with PHPWeb Scraping with PHP
Web Scraping with PHP
 
Finding things on the web with BOSS
Finding things on the web with BOSSFinding things on the web with BOSS
Finding things on the web with BOSS
 
Beautiful Java EE - PrettyFaces
Beautiful Java EE - PrettyFacesBeautiful Java EE - PrettyFaces
Beautiful Java EE - PrettyFaces
 
Scti 2011 minicurso jquery
Scti 2011 minicurso jqueryScti 2011 minicurso jquery
Scti 2011 minicurso jquery
 
Intro Open Social and Dashboards
Intro Open Social and DashboardsIntro Open Social and Dashboards
Intro Open Social and Dashboards
 
Testing persistence in PHP with DbUnit
Testing persistence in PHP with DbUnitTesting persistence in PHP with DbUnit
Testing persistence in PHP with DbUnit
 
Awash in a sea of connections
Awash in a sea of connectionsAwash in a sea of connections
Awash in a sea of connections
 
FVCP - Facebook , Twitter and Meetup API / Widgets
FVCP - Facebook , Twitter and Meetup API / WidgetsFVCP - Facebook , Twitter and Meetup API / Widgets
FVCP - Facebook , Twitter and Meetup API / Widgets
 
Spyware/Malware FVCP
Spyware/Malware  FVCPSpyware/Malware  FVCP
Spyware/Malware FVCP
 
August 10th, 2009 Pete De Mulle Twitter
August 10th, 2009 Pete De Mulle TwitterAugust 10th, 2009 Pete De Mulle Twitter
August 10th, 2009 Pete De Mulle Twitter
 
Html and i_phone_mobile-2
Html and i_phone_mobile-2Html and i_phone_mobile-2
Html and i_phone_mobile-2
 
Rugalytics | Ruby Manor Nov 2008
Rugalytics | Ruby Manor Nov 2008Rugalytics | Ruby Manor Nov 2008
Rugalytics | Ruby Manor Nov 2008
 
The Basics Of Page Creation
The Basics Of Page CreationThe Basics Of Page Creation
The Basics Of Page Creation
 
Playing With The Web
Playing With The WebPlaying With The Web
Playing With The Web
 
Generic Setup De-Mystified
Generic Setup De-MystifiedGeneric Setup De-Mystified
Generic Setup De-Mystified
 
FrontInBahia 2014: 10 dicas de desempenho para apps mobile híbridas
FrontInBahia 2014: 10 dicas de desempenho para apps mobile híbridasFrontInBahia 2014: 10 dicas de desempenho para apps mobile híbridas
FrontInBahia 2014: 10 dicas de desempenho para apps mobile híbridas
 
Plone Interactivity
Plone InteractivityPlone Interactivity
Plone Interactivity
 
Mobile Patrons: Better Services on the Go (For Techie)
Mobile Patrons: Better Services on the Go (For Techie)Mobile Patrons: Better Services on the Go (For Techie)
Mobile Patrons: Better Services on the Go (For Techie)
 
jQuery - Doing it right
jQuery - Doing it rightjQuery - Doing it right
jQuery - Doing it right
 

Dernier

Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embeddingZilliz
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rick Flair
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxLoriGlavin3
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfLoriGlavin3
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsNathaniel Shimoni
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESmohitsingh558521
 

Dernier (20)

Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embedding
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdf
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directions
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
 

Exploring the Sweet Spot: Geolocation, Health, and Gov-data

  • 1. Exploring the Sweet Spot Geolocation, Health, and Gov-data Lance Roggendorff | @lroggendorff | lroggendorff@gmail.com
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8. aggregators “Pipe Dream” by RishiMenon - http://www.flickr.com/photos/rxmflickr/4102530508/
  • 9. Widget builders Frank Scherschel - http://images.google.com/hosted/life/l?imgurl=a00c346a37821dc5
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16. aggregators Data aggregation “Pipe Dream” by RishiMenon - http://www.flickr.com/photos/rxmflickr/4102530508/
  • 18. <?xml version="1.0" encoding="utf-8"?> <feed xmlns="http://www.w3.org/2005/Atom" xmlns:georss="http://www.georss.org/georss"> <title>Search Results from CDC - Locate HIV/AIDS Testing Sites</title> <link href="http://cdcnpin.org/hivTestLocatorFeed.aspx?zip=37206&amp;radius=5" rel="self" /> <link href="http://hivtest.org" rel="alternate" /> <author> <name>CDC NPIN</name> </author> <id>tag:cdcnpin.org,2009-09-15:/npinwebservices/NPINDataWebservices</id> <updated>2009-09-15T00:00:00-05:00</updated> <entry> <title>Cayce Family Health Center</title> <link href="http://www.hivtest.org/search/OrgResult.cfm?OrgNbr=21952" /> <id>tag:hivtest.org,2000-03-20:/search/OrgResult.cfm?OrgNbr=21952</id> <summary type="xhtml"> <div xmlns="http://www.w3.org/1999/xhtml"> <div class="vcard"> <div class="fn org">Cayce Family Health Center</div> <div class="adr"> <div class="street-address">617 S 8th St</div> <span class="locality">Nashville</span>, <span class="region">TN</span>, <span class="postal-code">37206</span></div> <div class="tel">615-226-1695</div> </div> </div> </summary> <georss:point>36.168533 -86.755339</georss:point> <updated>2010-10-14T18:17:31.0000000-04:00</updated> </entry> </feed>
  • 19. <?xml version="1.0" encoding="utf-8"?> <feed xmlns="http://www.w3.org/2005/Atom" xmlns:georss="http://www.georss.org/georss"> <title>Search Results from CDC - Locate HIV/AIDS Testing Sites</title> <link href="http://cdcnpin.org/hivTestLocatorFeed.aspx?zip=37206&amp;radius=5" rel="self" /> <link href="http://hivtest.org" rel="alternate" /> <author> <name>CDC NPIN</name> </author> <id>tag:cdcnpin.org,2009-09-15:/npinwebservices/NPINDataWebservices</id> <updated>2009-09-15T00:00:00-05:00</updated> <entry> <title>Cayce Family Health Center</title> <link href="http://www.hivtest.org/search/OrgResult.cfm?OrgNbr=21952" /> <id>tag:hivtest.org,2000-03-20:/search/OrgResult.cfm?OrgNbr=21952</id> <summary type="xhtml"> <div xmlns="http://www.w3.org/1999/xhtml"> <div class="vcard"> <div class="fn org">Cayce Family Health Center</div> <div class="adr"> <div class="street-address">617 S 8th St</div> <span class="locality">Nashville</span>, <span class="region">TN</span>, <span class="postal-code">37206</span></div> <div class="tel">615-226-1695</div> </div> </div> </summary> <georss:point>36.168533 -86.755339</georss:point> <updated>2010-10-14T18:17:31.0000000-04:00</updated> </entry> </feed>
  • 20.
  • 21. Widget builders Search decentralization Frank Scherschel - http://images.google.com/hosted/life/l?imgurl=a00c346a37821dc5
  • 22.
  • 23. <noscript><div style="height:115px;position:relative;width:314px;background:url(http://locator.aids.gov/images/bg_widget-8bit.png) no-repeat;padding-left:19px;"><strong style="padding-top:6px;color:#fff;display:block;font-family:Trebuchet MS;font-size:14px;line-height:16px;">Find HIV/AIDS Prevention & Service Providers</strong><p style="font-size:9px;margin: 3px 0 4px;color:#fff;">Enter your address, city and state, or ZIP Code:</p><form action="http://locator.aids.gov/index.php" style="margin:0;"><label style="margin-left:22px;"><input type="text" name="location" style="border:0;font-size:11px;width:230px;"/></label><button type="submit" style="background:none;border:none;cursor:pointer;height:40px;margin-top:5px;padding:0;text-indent:-999em;overflow:hidden;vertical-align:middle;width:40px;">GO</button><input type="hidden" name="text_only" value="true" /></form><p style="font-size:9px;margin: 10px 0 0;color:#fff;">For more information on this widget, please visit <a href="http://aids.gov/locator" style="color:#fff;">AIDS.gov</a>.</p></div></noscript><script type="text/javascript" src="http://locator.aids.gov/widget.js"></script>
  • 24.
  • 25.
  • 26.
  • 27.
  • 28. var objects = $.d.getElementsByTagName('object'); if ( objects.length > 0 ) { for (vari = 0, ol = objects.length; i < ol; i++) { varobj = objects[i].cloneNode(true); varobj_parent = objects[i].parentNode; var placeholder = $.f.createNode('div', {id:trueName+'obj'+i+'savedspot'}); obj_parent.insertBefore(placeholder, objects[i].nextSibling); obj_parent.removeChild(objects[i]); varparam = $.f.createNode('param', {name:'wmode',value:'transparent'}); obj.appendChild(param); obj_parent.insertBefore(obj, placeholder.nextSibling); obj_parent.removeChild(placeholder); } } // repeat for <embed> elements for IE
  • 31.
  • 32.
  • 35. Widget on ~70 websites
  • 36. Widget Techniques Get on your coding shoes
  • 38. (function() { vartrueName = ''; for (vari = 0; i < 16; i++) { trueName += String.fromCharCode(Math.floor(Math.random() * 26) + 97); } window[trueName] = {}; var $ = window[trueName]; $.f = function() { return { init : function(target) { vartheScripts = document.getElementsByTagName('SCRIPT'); for (vari = 0; i < theScripts.length; i++) { if (theScripts[i].src.match(target)) { $.w = document.createElement('DIV'); $.w.innerHTML = 'Hello, world. My name is ' + trueName + '.'; theScripts[i].parentNode.insertBefore($.w, theScripts[i]); theScripts[i].parentNode.removeChild(theScripts[i]); break; } } } }; }(); varthisScript = /behavior.js/; if (typeofwindow.addEventListener !== 'undefined') { window.addEventListener('load', function() { $.f.init(thisScript); }, false); } else if (typeofwindow.attachEvent !== 'undefined') { window.attachEvent('onload', function() { $.f.init(thisScript); }); } })();
  • 39. (function() { vartrueName = ''; for (vari = 0; i < 16; i++) { trueName += String.fromCharCode(Math.floor(Math.random() * 26) + 97); } window[trueName] = {}; var $ = window[trueName]; $.f = function() { return { init : function(target) { vartheScripts = document.getElementsByTagName('SCRIPT'); for (vari = 0; i < theScripts.length; i++) { if (theScripts[i].src.match(target)) { $.w = document.createElement('DIV'); $.w.innerHTML = 'Hello, world. My name is ' + trueName + '.'; theScripts[i].parentNode.insertBefore($.w, theScripts[i]); theScripts[i].parentNode.removeChild(theScripts[i]); break; } } } }; }(); varthisScript = /behavior.js/; if (typeofwindow.addEventListener !== 'undefined') { window.addEventListener('load', function() { $.f.init(thisScript); }, false); } else if (typeofwindow.attachEvent !== 'undefined') { window.attachEvent('onload', function() { $.f.init(thisScript); }); } })();
  • 40. (function() { vartrueName = ''; for (vari = 0; i < 16; i++) { trueName += String.fromCharCode(Math.floor(Math.random() * 26) + 97); } window[trueName] = {}; var $ = window[trueName]; $.f = function() { return { init : function(target) { vartheScripts = document.getElementsByTagName('SCRIPT'); for (vari = 0; i < theScripts.length; i++) { if (theScripts[i].src.match(target)) { $.w = document.createElement('DIV'); $.w.innerHTML = 'Hello, world. My name is ' + trueName + '.'; theScripts[i].parentNode.insertBefore($.w, theScripts[i]); theScripts[i].parentNode.removeChild(theScripts[i]); break; } } } }; }(); varthisScript = /behavior.js/; if (typeofwindow.addEventListener !== 'undefined') { window.addEventListener('load', function() { $.f.init(thisScript); }, false); } else if (typeofwindow.attachEvent !== 'undefined') { window.attachEvent('onload', function() { $.f.init(thisScript); }); } })();
  • 41. (function() { vartrueName = ''; for (vari = 0; i < 16; i++) { trueName += String.fromCharCode(Math.floor(Math.random() * 26) + 97); } window[trueName] = {}; var $ = window[trueName]; $.f = function() { return { init : function(target) { vartheScripts = document.getElementsByTagName('SCRIPT'); for (vari = 0; i < theScripts.length; i++) { if (theScripts[i].src.match(target)) { $.w = document.createElement('DIV'); $.w.innerHTML = 'Hello, world. My name is ' + trueName + '.'; theScripts[i].parentNode.insertBefore($.w, theScripts[i]); theScripts[i].parentNode.removeChild(theScripts[i]); break; } } } }; }(); varthisScript = /behavior.js/; if (typeofwindow.addEventListener !== 'undefined') { window.addEventListener('load', function() { $.f.init(thisScript); }, false); } else if (typeofwindow.attachEvent !== 'undefined') { window.attachEvent('onload', function() { $.f.init(thisScript); }); } })();
  • 45. JavaScript Blocks Solution: Meebo Bar technique
  • 47. JavaScript Prohibited MySpace, Wordpress.com, FB, others, disallow JS
  • 49. <script> $LAB .script("http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js") .script("/scripts/config.1284731050.js") .wait() .script("/scripts/locator.1284731052.js") .script("http://www.google.com/jsapi") .wait(function () { google.load("maps", "3", {"callback": "Locator.initialize", "other_params": "sensor=false" }); }); </script> @getify http://labjs.com
  • 50. Client cache http://developer.yahoo.com/performance/rules.html#expires #Far Future Expires Header <FilesMatch "(gif|png|jpg|js|css|swf)$"> ExpiresActive On ExpiresDefault "access plus 10 years" </FilesMatch>
  • 51. File versioning http://particletree.com/notebook/automatically-version-your-css-and-javascript-files/ #Rules for Versioned Static Files #filename.123456789.js -> filename.js RewriteRule^(scripts|css|images)/(.+)(.+)(js|css|jpg|gif|png)$ $1/$2.$4 [L]
  • 52. One last tip… Build Iterate
  • 53. Thanks! Please rate me: http://spkr8.com/t/4825 Or, give feedback: @lroggendorff lroggendorff@gmail.com

Notes de l'éditeur

  1. IntroConfessions (SXSW, no mobile, didn’t follow any advice from SpeakerUp)
  2. So, a wee bit about me. I used to live here,
  3. And work over here.
  4. Now I live here,
  5. And still work over there. Well, virtually, anyway.
  6. One of the projects I work on is the AIDS.gov web site
  7. As part of that project, we created a location based search tool to help people living with HIV/AIDS or their caretakers to find service providers near them.Been a tripMight have something useful to share
  8. Whether you’re pulling data from many different sources, or…
  9. Building widgets people can use on any website.Specific anecdotes throughoutLet’s get started
  10. So, first, let’s look at the problem we wanted to solve.
  11. Gov agencies offer tools to find service providers
  12. These are extremely useful
  13. but are difficult to find (the Goog is not with them)
  14. Some are many layers deep in the agency’s hierarchy
  15. -all only one type of service provider-wanted to help people find all different types of service providers using one search.-wanted to leave the data where it was-people who were already collecting and maintaining it could continue taking care of that, and we wouldn’t have to.
  16. Instead of bringing all the data together into one central database, we wanted to aggregate it dynamically.asked each agency to provide a REST APIreturn a GeoRSS feedAccept two parameters, ZIP Code and distance. We settled on those after looking at the existing search engines, but In hindsight, latitude and longitude would be nice, and we’ve started working with some of the data providers to accomplish that as well.
  17. Here is an example URL for the CDC HIV Testing data feed API. It takes a ZIP Code and a distance in miles, and returns…
  18. An RSS (Atom, actually) feed with all of the locations within that distance of that ZIP Code.
  19. The crucial bit that makes this GeoRSS is each &lt;entry&gt; element brings along a latitude and longitude with it.
  20. So they can be plopped on the map like so. The Google Maps API actually offers a GeoRSS parser, but I found it rather finicky so ended up rolling my own.[anecdote]-issues while implementing-wrote our initial how-to on GeoRSS-made point data, the latitude and longitude, optional. -Bad idea.We were afraid making it mandatory would be a barrier to entry for some agenciesWe thought it would be simple enough to geocode the addresses on our end.Most of agencies already had geocoded data, or were pretty quick to do so, even though we’d made it optional.one data provider called our bluffDelays between us trying to dynamically geocode and giving up and them adding lat and long on their end.
  21. Not only did we want to give people one place to search, we wanted to make that tool available anywhere.
  22. This is a pure JavaScript widget, which can be placed in a page with a single line of HTML.
  23. There’s the one liner, we include a &lt;noscript&gt; tag for times when JavaScript might be turned off for some reason. It makes for more for people to copy and paste, but I think it’s the right thing to do in the long run.
  24. This widget is styleable and somewhat modular. We’ve created a few different versions, one for the CDC,
  25. A vertical version,
  26. We’re also working on a version that can be attached to an already existing form field.
  27. search without leaving the page their on. This overlay is actually an iframe, which is loading http://locator.aids.gov/. Amazingly, we were able to get it to look decent in most browsers. In IE6, it simply opens a new window.[anecdote]After implementing the overlay, we realized that if any Flash elements were on the page, they appeared above the overlay. After some serious debugging, we came up with a way to keep this from happening.
  28. -Flash toobey z-index rules-‘wmode’ param set to ‘transparent’.-attribute must be present before the &lt;object&gt; element is loaded in the DOM.-So… what we’re doing here is manually removing every &lt;object&gt; element, setting it’s wmode parameter, and then sticking it back where it was-not the cleanest code, and I’m sure there are probably a lot of edge cases where this would blow up.-I’ve run across at least one, where if a movie is set to autoplay (please never do that), it will restart when this code runs.
  29. One of the fun things about the widget is that you can grab the embed snippet directly from it to place on your own site.
  30. Analytics are a great way to make sure what you’re working on is actually reaching the people it should. Analytics are a bit more complicated with a widget, since you’re tracking loads of something on someone else’s page.
  31. We tried using Clearspring for awhile until they canned the bit of their API we were using earlier this year. You might be able to find another use for them, though.
  32. We now are using Omniture through an arrangement with CDC in order to get metrics on the widget. This is more or less out of convenience, it wouldn’t be my preference, also it takes major bank. Also, we’re using Google Analytics on locator.aids.gov itself.
  33. National HIV Testing Daywe created a special look for the locator widgetsAsked partners to place the widget on their web sites.loaded ~1.6 million timesMeaninglessDoesn’t even mean eyeballs (below the fold)
  34. of those 1.6 million loads2000 real searches.Measured by interactions on the widget and GA on locator.aids.gov
  35. Embedded on 70 different websitesmany of those including the widget on several, or all, pages.
  36. General case
  37. Unique name, and a local alias
  38. Replace the &lt;script&gt; element which loaded this script with new DOM elements
  39. Add the init function to the window.onload event
  40. This is a technique we hope to implement in the future, pioneered by the guys who work on the Meebo Bar. Check the video of their Velocity conf presentation.
  41. The Meebo guys do a much better job of explaining this, but effectively they’ve come up with a way to achieve truly non-blocking JavaScript by tacking their code onto an iframe.
  42. Some of the issues we’ve had with the widget: it does block, CSS isn’t totally sandboxed, and it’s not able to be inserted on a MySpace or Facebook page because JS isn’t allowed there.
  43. Currently, if our servers are unavailable for whatever reason, a page will stop rendering at the point the widget is loaded. Fortunately, this hasn’t been a big issue yet because our servers have been doing fine, but obviously that’s not something we should bank on. We need to protect any site which lets our widget loose on their pages.deferasync
  44. Kent Brewster actually provides a technique that we use to add style to our widget. However, it’s problematic to ensure that any given styles from the parent page aren’t overriding our CSS. So, it’d be nice if our widget’s DOM was totally sandboxed from the parent page’s CSS. Cleanslate is part of Sqwidget, a JS widget toolkit that I’m hoping to use in future versions of the locator widget.
  45. Many social networking sites and free blog sites disallow pasting JavaScript onto your pages, as a preventative measure against misbehaving scripts. We need to come up with a way to allow people using those services to use our widget.
  46. -page load time contributes to Google algorithm-better user experience-some tools to help you on your way
  47. LABjs, a JavaScript library by Kyle SimpsonHelps pages load more quickly by loading the scripts in parallel, but still giving you control over execution order
  48. Yahoo! has an excellent resource on how to speed up page load time.far-future expires on static contentDownside: changes don’t get loaded if url doesn’t change
  49. Auto version static files based on modification dateApache directivesPHP – read this article to get the full story
  50. Atomic release easy rollback, scripts