SlideShare una empresa de Scribd logo
1 de 67
Descargar para leer sin conexión
(Mobile) Device APIs
          James Pearce
         @jamespearce
     http://tripleodeon.com
What are Device APIs?
 “Client-side APIs that enable the
 development of Web Applications that
 interact with device hardware”


 ...and other capabilities outside of the
 browser’s traditional remit
Why are they important?
• They’re not...
    ...if you’re happy with a web of documents


• They are...
    ... if you want the the web to be
        competitive with native app platforms
History
Current Work
 Use Cases
WTAI Make Call
<a	
  href="wtai://wp/mc;16505551234">
	
  	
  Call	
  us
</a>

<a	
  href="call.wmls#makeCall()">
	
  	
  Call	
  us
</a>

//	
  call.wmls
extern	
  function	
  makeCall()	
  {
	
  	
  WTAPublic.makeCall("16505551234");
}
                       http://www.wapforum.org/what/technical/wtai-30-apr-98.pdf
WTAI Call Control
<a	
  href="calls.wmls#setupCall()">Call	
  us!</a>
<a	
  href="calls.wmls#acceptCall()">Brring!</a>

<a	
  href="wtai://cc/sd;1*2*3456">Enter	
  code</a>

//	
  calls.wmls
extern	
  function	
  setupCall()	
  {
	
  	
  WTACallCont.setup("16505551234",	
  1);
}
extern	
  function	
  acceptCall()	
  {
	
  	
  WTACallCont.accept("1",	
  1);
}
WTAI Messaging
//	
  sms.wmls
extern	
  function	
  sendMsg()	
  {
	
  	
  WTANetText.send("16505551234",	
  "WML	
  rocks");
}

extern	
  function	
  readMsg(i)	
  {
	
  	
  var	
  sms	
  =	
  WTANetText.read(i);
	
  	
  return	
  WTANetText.getFieldValue(
	
  	
  	
  	
  sms,	
  "body"
	
  	
  );
}
WTAI Contacts
//	
  contacts.wmls
extern	
  function	
  addFriend(i,	
  num,	
  name)	
  {
	
  	
  WTAPhoneBook.write(i,	
  num,	
  name);
}

//	
  return	
  structs	
  of	
  contact	
  details
extern	
  function	
  getFriendById(i)	
  {
	
  	
  return	
  WTAPhoneBook.read("i",	
  i);
}
extern	
  function	
  getFriendByName(name)	
  {
	
  	
  return	
  WTAPhoneBook.read("t",	
  name);
}
I may be laboring the point
 But that was 1998...


 ... and you still can’t do any of this with a
 contemporary mobile browser
BONDI
“enables web based content to access native
device capability, intermediated through a
robust, but flexible security framework”




                                http://www.omtp.org/1.11
Messaging
var	
  sms	
  =	
  bondi.messaging.createSMS({
	
  	
  to:	
  ["16505551234"],
	
  	
  body:	
  "Home	
  soon"
});

var	
  mms	
  =	
  bondi.messaging.createMMS({
	
  	
  to:	
  ["16505551234"],
	
  	
  subject:	
  "I	
  will	
  be...",
	
  	
  body:	
  "...home	
  soon"
});
Messaging
bondi.messaging.sendSMS(
	
  	
  function	
  ()	
  {},	
  //	
  success
	
  	
  function	
  ()	
  {},	
  //	
  error
	
  	
  sms,	
  true
);

bondi.messaging.sendMMS(
	
  	
  function	
  ()	
  {},	
  //	
  success
	
  	
  function	
  ()	
  {},	
  //	
  error
	
  	
  mms,	
  true
);
Messaging
bondi.messaging.subscribeToSMS(
	
  	
  function	
  ()	
  {},	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  //	
  success
	
  	
  function	
  ()	
  {},	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  //	
  error
	
  	
  function	
  ()	
  {	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  //	
  listener
	
  	
  	
  	
  alert("They	
  replied!");
	
  	
  },	
  {	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  from:	
  "16505551234"	
  	
  	
  	
  	
  //	
  filter
	
  	
  },
	
  	
  true	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  //	
  exclusive
);
Contacts
bondi.pim.contact.getAddressBooks(
	
  	
  function(books)	
  {	
  //	
  success
	
  	
  	
  	
  var	
  contact	
  =	
  books[0].createContact({
	
  	
  	
  	
  	
  	
  name:	
  'James	
  Pearce',
	
  	
  	
  	
  	
  	
  emails:	
  [{email:'j@tripleodeon.com'}],
	
  	
  	
  	
  	
  	
  phoneNumbers:	
  [{number:'16505551234'}]
	
  	
  	
  	
  });
	
  	
  },	
  
	
  	
  function	
  ()	
  {}	
  	
  	
  	
  //	
  error
);
Telephony
bondi.telephonyLog.findLogEntries(
	
  	
  function	
  ()	
  {},	
  //	
  success
	
  	
  function	
  ()	
  {},	
  //	
  error,
	
  	
  [
	
  	
  	
  	
  bondi.telephonyLog.MISSED_CALLS_FOLDER,
	
  	
  	
  	
  bondi.telephonyLog.RECEIVED_CALLS_FOLDER
	
  	
  ],
	
  	
  {
	
  	
  	
  	
  phoneNumber:	
  "16505551234"
	
  	
  }
);

                           * Yes, it’s true: you can’t actually make or receive calls
App Launcher
bondi.applauncher.launchApplication(
	
  	
  function	
  ()	
  {},	
  //	
  success
	
  	
  function	
  ()	
  {},	
  //	
  error
	
  	
  "tel:16505551234"
);

//	
  mailto:...
//	
  sms:...
//	
  file:...
On one hand...
• Security-conscious architecture
• Comprehensive API support
• Consistent API patterns
• Conformance specifications
• Reasonable test coverage

                               http://www.omtp.org/1.11/apis
On the other...
bondi.*

deviceapis.*
WAC 2.0
• Accelerometer        • File system
• Calendar             • Geolocation
• Camera               • Messaging
• Contacts             • Orientation
• Core                 • Tasks
• Device interaction   • Viewport
• Device status        • Webview
                                http://specs.wacapps.net/
Which is all awesome
 Except...
Device APIs Working Group
 “to create client-side APIs that enable the
 development of Web Applications and Web
 Widgets that interact with devices services
 such as Calendar, Contacts, Camera, etc”


 Joint efforts with WebRTC Working Group,
 WebApps Working Group

                                http://www.w3.org/2009/dap/
W3C Device APIs
• Media Capture(HTML)
                        • Vibration
• Media Capture(gUM)
                        • Calendar
• Contact               • Permissions
• Messaging             • Menu
• Battery Status        • Gallery
• Network Information   • System info
• Sensor                • Media Stream
Media Capture (HTML)
<input	
  type="file"	
  accept="image/*"	
  />

<!-­‐-­‐	
  

	
  	
  The	
  accept	
  attribute	
  is	
  'a	
  hint'.

	
  	
  Specification	
  suggests	
  that	
  it	
  can	
  be
	
  	
  used	
  to	
  offer	
  alternative	
  picker	
  UIs.

-­‐-­‐>



               Public working draft, http://www.w3.org/TR/2011/WD-html-media-capture-20110414
Brad Lassey, September 2008
Media Capture (HTML)
<input	
  type="file"	
  accept="image/*"
	
  	
  capture="camera"
/>

<!-­‐-­‐	
  

	
  	
  Again,	
  a	
  hint.	
  Valid	
  options	
  are:

	
  	
  	
  	
  camera,	
  camcorder,	
  microphone,	
  filesystem

-­‐-­‐>
Media Capture (HTML)
<input	
  type="file"	
  accept="image/*"
	
  	
  capture="camera"	
  id="photo"
/>

var	
  photo	
  =	
  document.getElementById('photo');
photo.files[0].getFormatData(
	
  	
  function	
  (data)	
  {},	
  //	
  success
	
  	
  function	
  ()	
  {}	
  	
  	
  	
  	
  	
  //	
  error
);

//	
  file	
  is	
  a	
  MediaFile,	
  extending	
  File
//	
  data	
  is	
  a	
  MediaFileData
MediaFileData
interface	
  MediaFileData	
  {
	
  	
  	
  	
  attribute	
  DOMString	
  	
  	
  	
  	
  codecs;
	
  	
  	
  	
  attribute	
  unsigned	
  long	
  bitrate;
	
  	
  	
  	
  attribute	
  unsigned	
  long	
  height;
	
  	
  	
  	
  attribute	
  unsigned	
  long	
  width;
	
  	
  	
  	
  attribute	
  float	
  	
  	
  	
  	
  	
  	
  	
  	
  duration;
};




                                                                    ...seems to be under discussion
Media capture (gUM)
navigator.getUserMedia(
	
  	
  {
	
  	
  	
  	
  audio:	
  true,
	
  	
  	
  	
  video:	
  false
	
  	
  },
	
  	
  function	
  (stream)	
  {},	
  //	
  success
	
  	
  function	
  ()	
  {}	
  	
  	
  	
  	
  	
  	
  	
  //	
  error
);

//	
  stream	
  is	
  a	
  LocalMediaStream



                               Editor's draft, http://dev.w3.org/2011/webrtc/editor/getusermedia.html
LocalMediaStream
var	
  recorder	
  =	
  stream.record();

//	
  recorder	
  is	
  a	
  MediaStreamRecorder

recorder.getRecordedData(
	
  	
  function	
  (file)	
  {}	
  	
  //	
  success
);

//	
  file	
  is	
  a	
  File

URL.createObjectURL(stream);

//	
  a	
  Blob	
  URI	
  for,	
  say	
  <video	
  src='...'	
  />	
  	
  
Messaging
navigator.sendMessage(
	
  	
  "sms:16505551234?"	
  +
	
  	
  	
  	
  "body=JavaScript%20says%20hi",	
  
	
  	
  [],	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  //	
  attachments	
  as	
  File	
  array
	
  	
  function	
  ()	
  {},	
  //	
  success
	
  	
  function	
  ()	
  {}	
  	
  //	
  error
);

//	
  also	
  mms:	
  and	
  mailto:

//	
  oh...	
  were	
  you	
  looking	
  for	
  receipt?

                                                  Editor's draft, http://dev.w3.org/2009/dap/messaging/
Sensors
navigator.findSensors().onsuccess	
  =	
  function()	
  {
	
  	
  this.result.forEach(function	
  (sensor)	
  {
	
  	
  	
  	
  //	
  ...
	
  	
  });
};

var	
  sensor	
  =	
  new	
  SensorConnection('Temperature');
sensor.addEventListener('sensordata',	
  function(e)	
  {
	
  	
  if(e.data	
  >	
  20.0)	
  {
	
  	
  	
  	
  window.console.log('Hawt');
	
  	
  }
});
sensor.startWatch({	
  interval:	
  2000	
  });
                    Editor's draft, http://dev.w3.org/2009/dap/system-info/Sensors.html
Sensors
• Temperature, ºC
• AmbientLight, Lux
• AmbientNoise, dbA
• MagneticField, uTesla
• Proximity, cm
• AtmPressure, kP
• RelHumidity, %
Contacts
navigator.contacts.find(
	
  	
  [	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  //	
  fields
	
  	
  	
  	
  'name',	
  
	
  	
  	
  	
  'emails'
	
  	
  ],	
  
	
  	
  function	
  (contacts)	
  {},	
  //	
  success
	
  	
  function	
  ()	
  {},	
  	
  	
  	
  	
  	
  	
  	
  	
  //	
  error
	
  	
  {	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  //	
  find	
  options
	
  	
  	
  	
  	
  filter:	
  'James',	
  
	
  	
  	
  	
  	
  multiple:	
  true
	
  	
  }
);
                                                                            Editor's draft, http://w3c-test.org/dap/contacts/
Contact
interface	
  Contact	
  {
	
  	
  	
  	
  readonly	
  attribute	
  DOMString	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  id;
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  attribute	
  DOMString?	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  displayName;
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  attribute	
  ContactName?	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  name;
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  attribute	
  DOMString?	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  nickname;
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  attribute	
  ContactField[]?	
  	
  	
  	
  	
  	
  	
  	
  	
  phoneNumbers;
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  attribute	
  ContactField[]?	
  	
  	
  	
  	
  	
  	
  	
  	
  emails;
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  attribute	
  ContactAddress[]?	
  	
  	
  	
  	
  	
  	
  addresses;
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  attribute	
  ContactField[]?	
  	
  	
  	
  	
  	
  	
  	
  	
  ims;
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  attribute	
  ContactOrganization[]?	
  	
  organizations;
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  attribute	
  Date?	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  birthday;
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  attribute	
  DOMString?	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  note;
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  attribute	
  ContactField[]?	
  	
  	
  	
  	
  	
  	
  	
  	
  photos;
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  attribute	
  DOMString[]?	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  categories;
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  attribute	
  ContactField[]?	
  	
  	
  	
  	
  	
  	
  	
  	
  urls;
};
Cool, but...
 “The ability to add and update contact
 information is not a function of the API
 provided in this specification.”
Holy Contacts Editing WTF
var	
  vcard	
  =	
  
	
  	
  'BEGIN:VCARDrn'	
  +
	
  	
  'VERSION:3.0rn'	
  +
	
  	
  'UID:'	
  +	
  contact.id	
  +	
  'rn'	
  +	
  	
  	
  
	
  	
  'N:Pearce;Jamesrn'	
  +
	
  	
  'FN:James	
  Pearcern'	
  +
	
  	
  'END:VCARD';

document.getElementById('vcard').href	
  =
	
  	
  'data:text/x-­‐vcard;charset=utf-­‐8,'	
  +
	
  	
  encodeURIComponent(vcard);	
  
WebAPI
 “We are aiming at providing all the necessary
 APIs to build a basic HTML5 phone
 experience within the next 3-6 months”




                               https://wiki.mozilla.org/WebAPI
WebAPI
• Telephony   • Embedded browser
• Messaging   • Battery
• Contacts    • Device Status
• Camera      • Settings
• Network     • Mouse Lock
• USB         • Vibrator
Hopefully W3C++
• “Our proposal might or might not look like
  it for the moment”
Telephony!
var	
  tcall	
  =
	
  	
  navigator.telephony.dial("16505551234");

tcall.readyState;
	
  	
  //	
  dialing,	
  ringing,	
  busy,	
  connecting,
	
  	
  //	
  connected,	
  disconnecting,	
  disconnected,	
  
	
  	
  //	
  incoming

tcall.onconnected	
  =	
  function	
  ()	
  {};
	
  	
  //	
  onbusy,	
  ondisconnected	
  etc

tcall2.answer();
                             http://www.youtube.com/watch?v=RuIQskGD3u0#t=19s
Contacts
 “We need read/write”
USB
var	
  usb	
  =	
  new	
  MozUSBManager();

usb.addEventListener("attachdevice",	
  
	
  	
  function	
  ()	
  {}
);
usb.addEventListener("detachdevice",	
  
	
  	
  function	
  ()	
  {}
);

usb.claimDevice({
	
  	
  deviceClass:	
  ...,
	
  	
  deviceSubClass:	
  ...
});
We deserve Device APIs...
• As forward-looking as WTAI
• As well-structured as BONDI
• As comprehensive as WAC
• As respectable as W3C DAP
• As agile as WebAPI
And we’ve got...
PhoneGap
• Accelerometer   • Events
• Camera          • File
• Capture         • Geolocation
• Compass         • Media
• Connection      • Notification
• Contacts        • Storage
• Device
Use Cases
Useless Demos




                https://github.com/jamesgpearce/compios5
Fixing layout bugs, FML
window.addEventListener("deviceorientation",
	
  	
  function	
  (e)	
  {
	
  	
  	
  	
  orientation	
  =	
  Math.abs(w.orientation);
	
  	
  	
  	
  rotation	
  =	
  Math.abs(e.gamma);
	
  	
  	
  	
  if	
  (rotation	
  >	
  8	
  &&	
  orientation	
  ===	
  0)	
  {
	
  	
  	
  	
  	
  	
  if	
  (enabled)	
  {
	
  	
  	
  	
  	
  	
  	
  	
  disableZoom();
	
  	
  	
  	
  	
  	
  }	
  else	
  {
	
  	
  	
  	
  	
  	
  	
  	
  restoreZoom();
	
  	
  	
  	
  	
  	
  }
	
  	
  	
  	
  }
	
  	
  },	
  false
);                                                         http://vimeo.com/adactio/iosbug
                                          https://github.com/scottjehl/iOS-Orientationchange-Fix
Camera
• Profile pictures
• Review sites
• Photo sharing
• Recognition
 • Bar-codes
 • Text
 • Faces
Filters!
$('img').vintage({
	
  	
  vignette:	
  {
	
  	
  	
  	
  black:	
  0.8,
	
  	
  	
  	
  white:	
  0.2
	
  	
  },
	
  	
  noise:	
  20,
	
  	
  screen:	
  {
	
  	
  	
  	
  red:	
  12,
	
  	
  	
  	
  ...
	
  	
  },
	
  	
  desaturate:	
  0.05
});
                                 https://github.com/rendro/vintageJS
Augmented reality?




                     http://fhtr.org/JSARToolKit/
Contacts & calendaring
• Add business details to address book
• Web-based messaging
• Facial recognition again...
• Presence
• Context-sensitivity of content
Messaging
• Sharing
• Notifications
• Offline transport fallback
• Frictionless web sign-on
Expect more
I still want...
 • Audio processing
 • Bluetooth
 • RFID & NFC
 • Both cameras
 • Memory & power
 • Native recognition
window.addEventListener(
	
  	
  'appointmentdue',
	
  	
  function(appt)	
  {
	
  	
  	
  	
  if	
  (device.near(WORK))	
  {
	
  	
  	
  	
  	
  	
  siri.remind(
	
  	
  	
  	
  	
  	
  	
  	
  contacts.get('Peter'),
	
  	
  	
  	
  	
  	
  	
  	
  calendar.getDetails(appt)
	
  	
  	
  	
  	
  	
  );
	
  	
  	
  	
  }
	
  	
  },
	
  	
  false
);
                                                            PS: does not work
James Pearce
    @jamespearce
http://tripleodeon.com

Más contenido relacionado

La actualidad más candente

Intoduction to Play Framework
Intoduction to Play FrameworkIntoduction to Play Framework
Intoduction to Play FrameworkKnoldus Inc.
 
Phing for power users - dpc_uncon13
Phing for power users - dpc_uncon13Phing for power users - dpc_uncon13
Phing for power users - dpc_uncon13Stephan Hochdörfer
 
Implementing Comet using PHP
Implementing Comet using PHPImplementing Comet using PHP
Implementing Comet using PHPKing Foo
 
Python Code Camp for Professionals 1/4
Python Code Camp for Professionals 1/4Python Code Camp for Professionals 1/4
Python Code Camp for Professionals 1/4DEVCON
 
Using Websockets with Play!
Using Websockets with Play!Using Websockets with Play!
Using Websockets with Play!Andrew Conner
 
Real World Dependency Injection - oscon13
Real World Dependency Injection - oscon13Real World Dependency Injection - oscon13
Real World Dependency Injection - oscon13Stephan Hochdörfer
 
APIdays Helsinki 2019 - Specification-Driven Development of REST APIs with Al...
APIdays Helsinki 2019 - Specification-Driven Development of REST APIs with Al...APIdays Helsinki 2019 - Specification-Driven Development of REST APIs with Al...
APIdays Helsinki 2019 - Specification-Driven Development of REST APIs with Al...apidays
 
Python: the coolest is yet to come
Python: the coolest is yet to comePython: the coolest is yet to come
Python: the coolest is yet to comePablo Enfedaque
 
Python Code Camp for Professionals 2/4
Python Code Camp for Professionals 2/4Python Code Camp for Professionals 2/4
Python Code Camp for Professionals 2/4DEVCON
 
APIdays Helsinki 2019 - API Versioning with REST, JSON and Swagger with Thoma...
APIdays Helsinki 2019 - API Versioning with REST, JSON and Swagger with Thoma...APIdays Helsinki 2019 - API Versioning with REST, JSON and Swagger with Thoma...
APIdays Helsinki 2019 - API Versioning with REST, JSON and Swagger with Thoma...apidays
 
Satellite Apps around the Cloud: Integrating your infrastructure with JIRA St...
Satellite Apps around the Cloud: Integrating your infrastructure with JIRA St...Satellite Apps around the Cloud: Integrating your infrastructure with JIRA St...
Satellite Apps around the Cloud: Integrating your infrastructure with JIRA St...Atlassian
 
Teaching Your WAF New Tricks
Teaching Your WAF New TricksTeaching Your WAF New Tricks
Teaching Your WAF New TricksRobert Rowley
 
Symfony tips and tricks
Symfony tips and tricksSymfony tips and tricks
Symfony tips and tricksJavier Eguiluz
 
Python Code Camp for Professionals 4/4
Python Code Camp for Professionals 4/4Python Code Camp for Professionals 4/4
Python Code Camp for Professionals 4/4DEVCON
 
Python Code Camp for Professionals 3/4
Python Code Camp for Professionals 3/4Python Code Camp for Professionals 3/4
Python Code Camp for Professionals 3/4DEVCON
 
DevOps and Chef
DevOps and ChefDevOps and Chef
DevOps and ChefPiXeL16
 
OSCON Google App Engine Codelab - July 2010
OSCON Google App Engine Codelab - July 2010OSCON Google App Engine Codelab - July 2010
OSCON Google App Engine Codelab - July 2010ikailan
 

La actualidad más candente (19)

Intoduction to Play Framework
Intoduction to Play FrameworkIntoduction to Play Framework
Intoduction to Play Framework
 
Phing for power users - dpc_uncon13
Phing for power users - dpc_uncon13Phing for power users - dpc_uncon13
Phing for power users - dpc_uncon13
 
Implementing Comet using PHP
Implementing Comet using PHPImplementing Comet using PHP
Implementing Comet using PHP
 
Python Code Camp for Professionals 1/4
Python Code Camp for Professionals 1/4Python Code Camp for Professionals 1/4
Python Code Camp for Professionals 1/4
 
Using Websockets with Play!
Using Websockets with Play!Using Websockets with Play!
Using Websockets with Play!
 
Real World Dependency Injection - oscon13
Real World Dependency Injection - oscon13Real World Dependency Injection - oscon13
Real World Dependency Injection - oscon13
 
APIdays Helsinki 2019 - Specification-Driven Development of REST APIs with Al...
APIdays Helsinki 2019 - Specification-Driven Development of REST APIs with Al...APIdays Helsinki 2019 - Specification-Driven Development of REST APIs with Al...
APIdays Helsinki 2019 - Specification-Driven Development of REST APIs with Al...
 
Python: the coolest is yet to come
Python: the coolest is yet to comePython: the coolest is yet to come
Python: the coolest is yet to come
 
Python Code Camp for Professionals 2/4
Python Code Camp for Professionals 2/4Python Code Camp for Professionals 2/4
Python Code Camp for Professionals 2/4
 
APIdays Helsinki 2019 - API Versioning with REST, JSON and Swagger with Thoma...
APIdays Helsinki 2019 - API Versioning with REST, JSON and Swagger with Thoma...APIdays Helsinki 2019 - API Versioning with REST, JSON and Swagger with Thoma...
APIdays Helsinki 2019 - API Versioning with REST, JSON and Swagger with Thoma...
 
Satellite Apps around the Cloud: Integrating your infrastructure with JIRA St...
Satellite Apps around the Cloud: Integrating your infrastructure with JIRA St...Satellite Apps around the Cloud: Integrating your infrastructure with JIRA St...
Satellite Apps around the Cloud: Integrating your infrastructure with JIRA St...
 
Teaching Your WAF New Tricks
Teaching Your WAF New TricksTeaching Your WAF New Tricks
Teaching Your WAF New Tricks
 
Vuejs testing
Vuejs testingVuejs testing
Vuejs testing
 
SocketStream
SocketStreamSocketStream
SocketStream
 
Symfony tips and tricks
Symfony tips and tricksSymfony tips and tricks
Symfony tips and tricks
 
Python Code Camp for Professionals 4/4
Python Code Camp for Professionals 4/4Python Code Camp for Professionals 4/4
Python Code Camp for Professionals 4/4
 
Python Code Camp for Professionals 3/4
Python Code Camp for Professionals 3/4Python Code Camp for Professionals 3/4
Python Code Camp for Professionals 3/4
 
DevOps and Chef
DevOps and ChefDevOps and Chef
DevOps and Chef
 
OSCON Google App Engine Codelab - July 2010
OSCON Google App Engine Codelab - July 2010OSCON Google App Engine Codelab - July 2010
OSCON Google App Engine Codelab - July 2010
 

Similar a Mobile Device APIs

Web versus Native: round 1!
Web versus Native: round 1!Web versus Native: round 1!
Web versus Native: round 1!Chris Mills
 
HTML5 on Mobile
HTML5 on MobileHTML5 on Mobile
HTML5 on MobileAdam Lu
 
Intro To webOS
Intro To webOSIntro To webOS
Intro To webOSfpatton
 
Bringing the open web and APIs to mobile devices with Firefox OS - Whisky W...
 	Bringing the open web and APIs to mobile devices with Firefox OS - Whisky W... 	Bringing the open web and APIs to mobile devices with Firefox OS - Whisky W...
Bringing the open web and APIs to mobile devices with Firefox OS - Whisky W...Robert Nyman
 
WebRTC & Firefox OS - presentation at Google
WebRTC & Firefox OS - presentation at GoogleWebRTC & Firefox OS - presentation at Google
WebRTC & Firefox OS - presentation at GoogleRobert Nyman
 
APIs, now and in the future
APIs, now and in the futureAPIs, now and in the future
APIs, now and in the futureChris Mills
 
Web APIs & Apps - Mozilla
Web APIs & Apps - MozillaWeb APIs & Apps - Mozilla
Web APIs & Apps - MozillaRobert Nyman
 
HTML5 for Rich User Experience
HTML5 for Rich User ExperienceHTML5 for Rich User Experience
HTML5 for Rich User ExperienceMahbubur Rahman
 
WebAPIs & Apps - Mozilla London
WebAPIs & Apps - Mozilla LondonWebAPIs & Apps - Mozilla London
WebAPIs & Apps - Mozilla LondonRobert Nyman
 
JavaScript APIs - The Web is the Platform
JavaScript APIs - The Web is the PlatformJavaScript APIs - The Web is the Platform
JavaScript APIs - The Web is the PlatformRobert Nyman
 
CTS Conference Web 2.0 Tutorial Part 2
CTS Conference Web 2.0 Tutorial Part 2CTS Conference Web 2.0 Tutorial Part 2
CTS Conference Web 2.0 Tutorial Part 2Geoffrey Fox
 
Fixing the mobile web - Internet World Romania
Fixing the mobile web - Internet World RomaniaFixing the mobile web - Internet World Romania
Fixing the mobile web - Internet World RomaniaChristian Heilmann
 
Mozilla, Firefox OS and the Open Web
Mozilla, Firefox OS and the Open WebMozilla, Firefox OS and the Open Web
Mozilla, Firefox OS and the Open WebRobert Nyman
 
Empowering the “Mobile Web” with Chris Mills
Empowering the “Mobile Web” with Chris MillsEmpowering the “Mobile Web” with Chris Mills
Empowering the “Mobile Web” with Chris MillsFITC
 
Empowering the Mobile Web - Mills
Empowering the Mobile Web - MillsEmpowering the Mobile Web - Mills
Empowering the Mobile Web - MillsCodemotion
 
Empowering the "mobile web"
Empowering the "mobile web"Empowering the "mobile web"
Empowering the "mobile web"Chris Mills
 
Firefox OS Introduction at Bontouch
Firefox OS Introduction at BontouchFirefox OS Introduction at Bontouch
Firefox OS Introduction at BontouchRobert Nyman
 

Similar a Mobile Device APIs (20)

Web versus Native: round 1!
Web versus Native: round 1!Web versus Native: round 1!
Web versus Native: round 1!
 
HTML5 on Mobile
HTML5 on MobileHTML5 on Mobile
HTML5 on Mobile
 
Intro To webOS
Intro To webOSIntro To webOS
Intro To webOS
 
Bringing the open web and APIs to mobile devices with Firefox OS - Whisky W...
 	Bringing the open web and APIs to mobile devices with Firefox OS - Whisky W... 	Bringing the open web and APIs to mobile devices with Firefox OS - Whisky W...
Bringing the open web and APIs to mobile devices with Firefox OS - Whisky W...
 
WebRTC & Firefox OS - presentation at Google
WebRTC & Firefox OS - presentation at GoogleWebRTC & Firefox OS - presentation at Google
WebRTC & Firefox OS - presentation at Google
 
HTML5 WebWorks
HTML5 WebWorksHTML5 WebWorks
HTML5 WebWorks
 
APIs, now and in the future
APIs, now and in the futureAPIs, now and in the future
APIs, now and in the future
 
Web APIs & Apps - Mozilla
Web APIs & Apps - MozillaWeb APIs & Apps - Mozilla
Web APIs & Apps - Mozilla
 
HTML5 for Rich User Experience
HTML5 for Rich User ExperienceHTML5 for Rich User Experience
HTML5 for Rich User Experience
 
WebAPIs & Apps - Mozilla London
WebAPIs & Apps - Mozilla LondonWebAPIs & Apps - Mozilla London
WebAPIs & Apps - Mozilla London
 
Always on! Or not?
Always on! Or not?Always on! Or not?
Always on! Or not?
 
JavaScript APIs - The Web is the Platform
JavaScript APIs - The Web is the PlatformJavaScript APIs - The Web is the Platform
JavaScript APIs - The Web is the Platform
 
CTS Conference Web 2.0 Tutorial Part 2
CTS Conference Web 2.0 Tutorial Part 2CTS Conference Web 2.0 Tutorial Part 2
CTS Conference Web 2.0 Tutorial Part 2
 
Fixing the mobile web - Internet World Romania
Fixing the mobile web - Internet World RomaniaFixing the mobile web - Internet World Romania
Fixing the mobile web - Internet World Romania
 
Mozilla, Firefox OS and the Open Web
Mozilla, Firefox OS and the Open WebMozilla, Firefox OS and the Open Web
Mozilla, Firefox OS and the Open Web
 
Empowering the “Mobile Web” with Chris Mills
Empowering the “Mobile Web” with Chris MillsEmpowering the “Mobile Web” with Chris Mills
Empowering the “Mobile Web” with Chris Mills
 
Empowering the Mobile Web - Mills
Empowering the Mobile Web - MillsEmpowering the Mobile Web - Mills
Empowering the Mobile Web - Mills
 
Empowering the "mobile web"
Empowering the "mobile web"Empowering the "mobile web"
Empowering the "mobile web"
 
Html5
Html5Html5
Html5
 
Firefox OS Introduction at Bontouch
Firefox OS Introduction at BontouchFirefox OS Introduction at Bontouch
Firefox OS Introduction at Bontouch
 

Más de James Pearce

The City Bars App with Sencha Touch 2
The City Bars App with Sencha Touch 2The City Bars App with Sencha Touch 2
The City Bars App with Sencha Touch 2James Pearce
 
An Intro to Mobile HTML5
An Intro to Mobile HTML5An Intro to Mobile HTML5
An Intro to Mobile HTML5James Pearce
 
A Snapshot of the Mobile HTML5 Revolution
A Snapshot of the Mobile HTML5 RevolutionA Snapshot of the Mobile HTML5 Revolution
A Snapshot of the Mobile HTML5 RevolutionJames Pearce
 
A mobile web app for Android in 75 minutes
A mobile web app for Android in 75 minutesA mobile web app for Android in 75 minutes
A mobile web app for Android in 75 minutesJames Pearce
 
HTML5 and the dawn of rich mobile web applications pt 1
HTML5 and the dawn of rich mobile web applications pt 1HTML5 and the dawn of rich mobile web applications pt 1
HTML5 and the dawn of rich mobile web applications pt 1James Pearce
 
HTML5 and the dawn of rich mobile web applications pt 2
HTML5 and the dawn of rich mobile web applications pt 2HTML5 and the dawn of rich mobile web applications pt 2
HTML5 and the dawn of rich mobile web applications pt 2James Pearce
 
Building a Mobile App with Sencha Touch
Building a Mobile App with Sencha TouchBuilding a Mobile App with Sencha Touch
Building a Mobile App with Sencha TouchJames Pearce
 
Create a mobile web app with Sencha Touch
Create a mobile web app with Sencha TouchCreate a mobile web app with Sencha Touch
Create a mobile web app with Sencha TouchJames Pearce
 
Cross platform mobile web apps
Cross platform mobile web appsCross platform mobile web apps
Cross platform mobile web appsJames Pearce
 
Bd conf sencha touch workshop
Bd conf sencha touch workshopBd conf sencha touch workshop
Bd conf sencha touch workshopJames Pearce
 
City bars workshop
City bars workshopCity bars workshop
City bars workshopJames Pearce
 
San Diego Hackathon
San Diego HackathonSan Diego Hackathon
San Diego HackathonJames Pearce
 
Building Cross Platform Mobile Web Apps
Building Cross Platform Mobile Web AppsBuilding Cross Platform Mobile Web Apps
Building Cross Platform Mobile Web AppsJames Pearce
 
Creating and Distributing Mobile Web Applications with PhoneGap
Creating and Distributing Mobile Web Applications with PhoneGapCreating and Distributing Mobile Web Applications with PhoneGap
Creating and Distributing Mobile Web Applications with PhoneGapJames Pearce
 
An Introduction to Sencha Touch
An Introduction to Sencha TouchAn Introduction to Sencha Touch
An Introduction to Sencha TouchJames Pearce
 
Source Dev Con Keynote
Source Dev Con KeynoteSource Dev Con Keynote
Source Dev Con KeynoteJames Pearce
 
Building Cloud-Based Cross-Platform Mobile Web Apps
Building Cloud-Based Cross-Platform Mobile Web AppsBuilding Cloud-Based Cross-Platform Mobile Web Apps
Building Cloud-Based Cross-Platform Mobile Web AppsJames Pearce
 
Building cross platform mobile web apps
Building cross platform mobile web appsBuilding cross platform mobile web apps
Building cross platform mobile web appsJames Pearce
 
Building tomorrow's web with today's tools
Building tomorrow's web with today's toolsBuilding tomorrow's web with today's tools
Building tomorrow's web with today's toolsJames Pearce
 

Más de James Pearce (20)

The City Bars App with Sencha Touch 2
The City Bars App with Sencha Touch 2The City Bars App with Sencha Touch 2
The City Bars App with Sencha Touch 2
 
An Intro to Mobile HTML5
An Intro to Mobile HTML5An Intro to Mobile HTML5
An Intro to Mobile HTML5
 
A Snapshot of the Mobile HTML5 Revolution
A Snapshot of the Mobile HTML5 RevolutionA Snapshot of the Mobile HTML5 Revolution
A Snapshot of the Mobile HTML5 Revolution
 
A mobile web app for Android in 75 minutes
A mobile web app for Android in 75 minutesA mobile web app for Android in 75 minutes
A mobile web app for Android in 75 minutes
 
HTML5 and the dawn of rich mobile web applications pt 1
HTML5 and the dawn of rich mobile web applications pt 1HTML5 and the dawn of rich mobile web applications pt 1
HTML5 and the dawn of rich mobile web applications pt 1
 
HTML5 and the dawn of rich mobile web applications pt 2
HTML5 and the dawn of rich mobile web applications pt 2HTML5 and the dawn of rich mobile web applications pt 2
HTML5 and the dawn of rich mobile web applications pt 2
 
Building a Mobile App with Sencha Touch
Building a Mobile App with Sencha TouchBuilding a Mobile App with Sencha Touch
Building a Mobile App with Sencha Touch
 
Create a mobile web app with Sencha Touch
Create a mobile web app with Sencha TouchCreate a mobile web app with Sencha Touch
Create a mobile web app with Sencha Touch
 
Cross platform mobile web apps
Cross platform mobile web appsCross platform mobile web apps
Cross platform mobile web apps
 
Bd conf sencha touch workshop
Bd conf sencha touch workshopBd conf sencha touch workshop
Bd conf sencha touch workshop
 
City bars workshop
City bars workshopCity bars workshop
City bars workshop
 
San Diego Hackathon
San Diego HackathonSan Diego Hackathon
San Diego Hackathon
 
Building Cross Platform Mobile Web Apps
Building Cross Platform Mobile Web AppsBuilding Cross Platform Mobile Web Apps
Building Cross Platform Mobile Web Apps
 
Creating and Distributing Mobile Web Applications with PhoneGap
Creating and Distributing Mobile Web Applications with PhoneGapCreating and Distributing Mobile Web Applications with PhoneGap
Creating and Distributing Mobile Web Applications with PhoneGap
 
Theming and Sass
Theming and SassTheming and Sass
Theming and Sass
 
An Introduction to Sencha Touch
An Introduction to Sencha TouchAn Introduction to Sencha Touch
An Introduction to Sencha Touch
 
Source Dev Con Keynote
Source Dev Con KeynoteSource Dev Con Keynote
Source Dev Con Keynote
 
Building Cloud-Based Cross-Platform Mobile Web Apps
Building Cloud-Based Cross-Platform Mobile Web AppsBuilding Cloud-Based Cross-Platform Mobile Web Apps
Building Cloud-Based Cross-Platform Mobile Web Apps
 
Building cross platform mobile web apps
Building cross platform mobile web appsBuilding cross platform mobile web apps
Building cross platform mobile web apps
 
Building tomorrow's web with today's tools
Building tomorrow's web with today's toolsBuilding tomorrow's web with today's tools
Building tomorrow's web with today's tools
 

Último

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
 
2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch TuesdayIvanti
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
Bridging Between CAD & GIS: 6 Ways to Automate Your Data Integration
Bridging Between CAD & GIS:  6 Ways to Automate Your Data IntegrationBridging Between CAD & GIS:  6 Ways to Automate Your Data Integration
Bridging Between CAD & GIS: 6 Ways to Automate Your Data Integrationmarketing932765
 
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Alkin Tezuysal
 
UiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPathCommunity
 
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...Nikki Chapple
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesThousandEyes
 
A Framework for Development in the AI Age
A Framework for Development in the AI AgeA Framework for Development in the AI Age
A Framework for Development in the AI AgeCprime
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxLoriGlavin3
 
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
 
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
 
Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfNeo4j
 
Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024TopCSSGallery
 
Varsha Sewlal- Cyber Attacks on Critical Critical Infrastructure
Varsha Sewlal- Cyber Attacks on Critical Critical InfrastructureVarsha Sewlal- Cyber Attacks on Critical Critical Infrastructure
Varsha Sewlal- Cyber Attacks on Critical Critical Infrastructureitnewsafrica
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityIES VE
 
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...itnewsafrica
 
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
 

Último (20)

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
 
2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch Tuesday
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
Bridging Between CAD & GIS: 6 Ways to Automate Your Data Integration
Bridging Between CAD & GIS:  6 Ways to Automate Your Data IntegrationBridging Between CAD & GIS:  6 Ways to Automate Your Data Integration
Bridging Between CAD & GIS: 6 Ways to Automate Your Data Integration
 
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
 
UiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to Hero
 
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
 
A Framework for Development in the AI Age
A Framework for Development in the AI AgeA Framework for Development in the AI Age
A Framework for Development in the AI Age
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
 
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
 
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
 
Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdf
 
Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024
 
Varsha Sewlal- Cyber Attacks on Critical Critical Infrastructure
Varsha Sewlal- Cyber Attacks on Critical Critical InfrastructureVarsha Sewlal- Cyber Attacks on Critical Critical Infrastructure
Varsha Sewlal- Cyber Attacks on Critical Critical Infrastructure
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a reality
 
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...
 
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
 

Mobile Device APIs

  • 1. (Mobile) Device APIs James Pearce @jamespearce http://tripleodeon.com
  • 2. What are Device APIs? “Client-side APIs that enable the development of Web Applications that interact with device hardware” ...and other capabilities outside of the browser’s traditional remit
  • 3. Why are they important? • They’re not... ...if you’re happy with a web of documents • They are... ... if you want the the web to be competitive with native app platforms
  • 5.
  • 6.
  • 7. WTAI Make Call <a  href="wtai://wp/mc;16505551234">    Call  us </a> <a  href="call.wmls#makeCall()">    Call  us </a> //  call.wmls extern  function  makeCall()  {    WTAPublic.makeCall("16505551234"); } http://www.wapforum.org/what/technical/wtai-30-apr-98.pdf
  • 8. WTAI Call Control <a  href="calls.wmls#setupCall()">Call  us!</a> <a  href="calls.wmls#acceptCall()">Brring!</a> <a  href="wtai://cc/sd;1*2*3456">Enter  code</a> //  calls.wmls extern  function  setupCall()  {    WTACallCont.setup("16505551234",  1); } extern  function  acceptCall()  {    WTACallCont.accept("1",  1); }
  • 9. WTAI Messaging //  sms.wmls extern  function  sendMsg()  {    WTANetText.send("16505551234",  "WML  rocks"); } extern  function  readMsg(i)  {    var  sms  =  WTANetText.read(i);    return  WTANetText.getFieldValue(        sms,  "body"    ); }
  • 10. WTAI Contacts //  contacts.wmls extern  function  addFriend(i,  num,  name)  {    WTAPhoneBook.write(i,  num,  name); } //  return  structs  of  contact  details extern  function  getFriendById(i)  {    return  WTAPhoneBook.read("i",  i); } extern  function  getFriendByName(name)  {    return  WTAPhoneBook.read("t",  name); }
  • 11. I may be laboring the point But that was 1998... ... and you still can’t do any of this with a contemporary mobile browser
  • 12.
  • 13. BONDI “enables web based content to access native device capability, intermediated through a robust, but flexible security framework” http://www.omtp.org/1.11
  • 14. Messaging var  sms  =  bondi.messaging.createSMS({    to:  ["16505551234"],    body:  "Home  soon" }); var  mms  =  bondi.messaging.createMMS({    to:  ["16505551234"],    subject:  "I  will  be...",    body:  "...home  soon" });
  • 15. Messaging bondi.messaging.sendSMS(    function  ()  {},  //  success    function  ()  {},  //  error    sms,  true ); bondi.messaging.sendMMS(    function  ()  {},  //  success    function  ()  {},  //  error    mms,  true );
  • 16. Messaging bondi.messaging.subscribeToSMS(    function  ()  {},                      //  success    function  ()  {},                      //  error    function  ()  {                          //  listener        alert("They  replied!");    },  {                                      from:  "16505551234"          //  filter    },    true                                            //  exclusive );
  • 17. Contacts bondi.pim.contact.getAddressBooks(    function(books)  {  //  success        var  contact  =  books[0].createContact({            name:  'James  Pearce',            emails:  [{email:'j@tripleodeon.com'}],            phoneNumbers:  [{number:'16505551234'}]        });    },      function  ()  {}        //  error );
  • 18. Telephony bondi.telephonyLog.findLogEntries(    function  ()  {},  //  success    function  ()  {},  //  error,    [        bondi.telephonyLog.MISSED_CALLS_FOLDER,        bondi.telephonyLog.RECEIVED_CALLS_FOLDER    ],    {        phoneNumber:  "16505551234"    } ); * Yes, it’s true: you can’t actually make or receive calls
  • 19. App Launcher bondi.applauncher.launchApplication(    function  ()  {},  //  success    function  ()  {},  //  error    "tel:16505551234" ); //  mailto:... //  sms:... //  file:...
  • 20. On one hand... • Security-conscious architecture • Comprehensive API support • Consistent API patterns • Conformance specifications • Reasonable test coverage http://www.omtp.org/1.11/apis
  • 23. WAC 2.0 • Accelerometer • File system • Calendar • Geolocation • Camera • Messaging • Contacts • Orientation • Core • Tasks • Device interaction • Viewport • Device status • Webview http://specs.wacapps.net/
  • 24. Which is all awesome Except...
  • 25.
  • 26.
  • 27. Device APIs Working Group “to create client-side APIs that enable the development of Web Applications and Web Widgets that interact with devices services such as Calendar, Contacts, Camera, etc” Joint efforts with WebRTC Working Group, WebApps Working Group http://www.w3.org/2009/dap/
  • 28. W3C Device APIs • Media Capture(HTML) • Vibration • Media Capture(gUM) • Calendar • Contact • Permissions • Messaging • Menu • Battery Status • Gallery • Network Information • System info • Sensor • Media Stream
  • 29. Media Capture (HTML) <input  type="file"  accept="image/*"  /> <!-­‐-­‐      The  accept  attribute  is  'a  hint'.    Specification  suggests  that  it  can  be    used  to  offer  alternative  picker  UIs. -­‐-­‐> Public working draft, http://www.w3.org/TR/2011/WD-html-media-capture-20110414
  • 31. Media Capture (HTML) <input  type="file"  accept="image/*"    capture="camera" /> <!-­‐-­‐      Again,  a  hint.  Valid  options  are:        camera,  camcorder,  microphone,  filesystem -­‐-­‐>
  • 32.
  • 33. Media Capture (HTML) <input  type="file"  accept="image/*"    capture="camera"  id="photo" /> var  photo  =  document.getElementById('photo'); photo.files[0].getFormatData(    function  (data)  {},  //  success    function  ()  {}            //  error ); //  file  is  a  MediaFile,  extending  File //  data  is  a  MediaFileData
  • 34. MediaFileData interface  MediaFileData  {        attribute  DOMString          codecs;        attribute  unsigned  long  bitrate;        attribute  unsigned  long  height;        attribute  unsigned  long  width;        attribute  float                  duration; }; ...seems to be under discussion
  • 35. Media capture (gUM) navigator.getUserMedia(    {        audio:  true,        video:  false    },    function  (stream)  {},  //  success    function  ()  {}                //  error ); //  stream  is  a  LocalMediaStream Editor's draft, http://dev.w3.org/2011/webrtc/editor/getusermedia.html
  • 36. LocalMediaStream var  recorder  =  stream.record(); //  recorder  is  a  MediaStreamRecorder recorder.getRecordedData(    function  (file)  {}    //  success ); //  file  is  a  File URL.createObjectURL(stream); //  a  Blob  URI  for,  say  <video  src='...'  />    
  • 37. Messaging navigator.sendMessage(    "sms:16505551234?"  +        "body=JavaScript%20says%20hi",      [],                          //  attachments  as  File  array    function  ()  {},  //  success    function  ()  {}    //  error ); //  also  mms:  and  mailto: //  oh...  were  you  looking  for  receipt? Editor's draft, http://dev.w3.org/2009/dap/messaging/
  • 38. Sensors navigator.findSensors().onsuccess  =  function()  {    this.result.forEach(function  (sensor)  {        //  ...    }); }; var  sensor  =  new  SensorConnection('Temperature'); sensor.addEventListener('sensordata',  function(e)  {    if(e.data  >  20.0)  {        window.console.log('Hawt');    } }); sensor.startWatch({  interval:  2000  }); Editor's draft, http://dev.w3.org/2009/dap/system-info/Sensors.html
  • 39. Sensors • Temperature, ºC • AmbientLight, Lux • AmbientNoise, dbA • MagneticField, uTesla • Proximity, cm • AtmPressure, kP • RelHumidity, %
  • 40. Contacts navigator.contacts.find(    [                                              //  fields        'name',          'emails'    ],      function  (contacts)  {},  //  success    function  ()  {},                  //  error    {                                              //  find  options          filter:  'James',            multiple:  true    } ); Editor's draft, http://w3c-test.org/dap/contacts/
  • 41. Contact interface  Contact  {        readonly  attribute  DOMString                              id;                          attribute  DOMString?                            displayName;                          attribute  ContactName?                        name;                          attribute  DOMString?                            nickname;                          attribute  ContactField[]?                  phoneNumbers;                          attribute  ContactField[]?                  emails;                          attribute  ContactAddress[]?              addresses;                          attribute  ContactField[]?                  ims;                          attribute  ContactOrganization[]?    organizations;                          attribute  Date?                                      birthday;                          attribute  DOMString?                            note;                          attribute  ContactField[]?                  photos;                          attribute  DOMString[]?                        categories;                          attribute  ContactField[]?                  urls; };
  • 42. Cool, but... “The ability to add and update contact information is not a function of the API provided in this specification.”
  • 43. Holy Contacts Editing WTF var  vcard  =      'BEGIN:VCARDrn'  +    'VERSION:3.0rn'  +    'UID:'  +  contact.id  +  'rn'  +          'N:Pearce;Jamesrn'  +    'FN:James  Pearcern'  +    'END:VCARD'; document.getElementById('vcard').href  =    'data:text/x-­‐vcard;charset=utf-­‐8,'  +    encodeURIComponent(vcard);  
  • 44.
  • 45.
  • 46. WebAPI “We are aiming at providing all the necessary APIs to build a basic HTML5 phone experience within the next 3-6 months” https://wiki.mozilla.org/WebAPI
  • 47. WebAPI • Telephony • Embedded browser • Messaging • Battery • Contacts • Device Status • Camera • Settings • Network • Mouse Lock • USB • Vibrator
  • 48. Hopefully W3C++ • “Our proposal might or might not look like it for the moment”
  • 49. Telephony! var  tcall  =    navigator.telephony.dial("16505551234"); tcall.readyState;    //  dialing,  ringing,  busy,  connecting,    //  connected,  disconnecting,  disconnected,      //  incoming tcall.onconnected  =  function  ()  {};    //  onbusy,  ondisconnected  etc tcall2.answer(); http://www.youtube.com/watch?v=RuIQskGD3u0#t=19s
  • 50. Contacts “We need read/write”
  • 51. USB var  usb  =  new  MozUSBManager(); usb.addEventListener("attachdevice",      function  ()  {} ); usb.addEventListener("detachdevice",      function  ()  {} ); usb.claimDevice({    deviceClass:  ...,    deviceSubClass:  ... });
  • 52.
  • 53. We deserve Device APIs... • As forward-looking as WTAI • As well-structured as BONDI • As comprehensive as WAC • As respectable as W3C DAP • As agile as WebAPI
  • 55. PhoneGap • Accelerometer • Events • Camera • File • Capture • Geolocation • Compass • Media • Connection • Notification • Contacts • Storage • Device
  • 57. Useless Demos https://github.com/jamesgpearce/compios5
  • 58. Fixing layout bugs, FML window.addEventListener("deviceorientation",    function  (e)  {        orientation  =  Math.abs(w.orientation);        rotation  =  Math.abs(e.gamma);        if  (rotation  >  8  &&  orientation  ===  0)  {            if  (enabled)  {                disableZoom();            }  else  {                restoreZoom();            }        }    },  false ); http://vimeo.com/adactio/iosbug https://github.com/scottjehl/iOS-Orientationchange-Fix
  • 59. Camera • Profile pictures • Review sites • Photo sharing • Recognition • Bar-codes • Text • Faces
  • 60. Filters! $('img').vintage({    vignette:  {        black:  0.8,        white:  0.2    },    noise:  20,    screen:  {        red:  12,        ...    },    desaturate:  0.05 }); https://github.com/rendro/vintageJS
  • 61. Augmented reality? http://fhtr.org/JSARToolKit/
  • 62. Contacts & calendaring • Add business details to address book • Web-based messaging • Facial recognition again... • Presence • Context-sensitivity of content
  • 63. Messaging • Sharing • Notifications • Offline transport fallback • Frictionless web sign-on
  • 65. I still want... • Audio processing • Bluetooth • RFID & NFC • Both cameras • Memory & power • Native recognition
  • 66. window.addEventListener(    'appointmentdue',    function(appt)  {        if  (device.near(WORK))  {            siri.remind(                contacts.get('Peter'),                calendar.getDetails(appt)            );        }    },    false ); PS: does not work
  • 67. James Pearce @jamespearce http://tripleodeon.com