SlideShare a Scribd company logo
(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

More Related Content

What's hot

Intoduction to Play Framework
Intoduction to Play FrameworkIntoduction to Play Framework
Intoduction to Play Framework
Knoldus Inc.
 
Phing for power users - dpc_uncon13
Phing for power users - dpc_uncon13Phing for power users - dpc_uncon13
Phing for power users - dpc_uncon13
Stephan Hochdörfer
 
Implementing Comet using PHP
Implementing Comet using PHPImplementing Comet using PHP
Implementing Comet using PHP
King 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/4
DEVCON
 
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 - oscon13
Stephan 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 come
Pablo 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/4
DEVCON
 
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 Tricks
Robert Rowley
 
Vuejs testing
Vuejs testingVuejs testing
Vuejs testing
Greg TAPPERO
 
SocketStream
SocketStreamSocketStream
SocketStream
Paul Jensen
 
Symfony tips and tricks
Symfony tips and tricksSymfony tips and tricks
Symfony tips and tricks
Javier 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/4
DEVCON
 
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
DEVCON
 
DevOps and Chef
DevOps and ChefDevOps and Chef
DevOps and Chef
PiXeL16
 
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
ikailan
 

What's hot (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 to 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 Mobile
Adam Lu
 
Intro To webOS
Intro To webOSIntro To webOS
Intro To webOS
fpatton
 
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 Google
Robert Nyman
 
HTML5 WebWorks
HTML5 WebWorksHTML5 WebWorks
HTML5 WebWorks
Raul Jimenez
 
APIs, now and in the future
APIs, now and in the futureAPIs, now and in the future
APIs, now and in the future
Chris Mills
 
Web APIs & Apps - Mozilla
Web APIs & Apps - MozillaWeb APIs & Apps - Mozilla
Web APIs & Apps - Mozilla
Robert Nyman
 
HTML5 for Rich User Experience
HTML5 for Rich User ExperienceHTML5 for Rich User Experience
HTML5 for Rich User Experience
Mahbubur Rahman
 
WebAPIs & Apps - Mozilla London
WebAPIs & Apps - Mozilla LondonWebAPIs & Apps - Mozilla London
WebAPIs & Apps - Mozilla London
Robert Nyman
 
Always on! Or not?
Always on! Or not?Always on! Or not?
Always on! Or not?
Carsten Sandtner
 
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
Robert 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 2
Geoffrey 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 Romania
Christian 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 Web
Robert 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 Mills
FITC
 
Empowering the Mobile Web - Mills
Empowering the Mobile Web - MillsEmpowering the Mobile Web - Mills
Empowering the Mobile Web - Mills
Codemotion
 
Empowering the "mobile web"
Empowering the "mobile web"Empowering the "mobile web"
Empowering the "mobile web"
Chris Mills
 
Html5
Html5Html5
Firefox OS Introduction at Bontouch
Firefox OS Introduction at BontouchFirefox OS Introduction at Bontouch
Firefox OS Introduction at Bontouch
Robert Nyman
 

Similar to 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
 

More from 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 2
James Pearce
 
An Intro to Mobile HTML5
An Intro to Mobile HTML5An Intro to Mobile HTML5
An Intro to Mobile HTML5
James 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 Revolution
James 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 minutes
James 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 1
James 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 2
James 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 Touch
James 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 Touch
James Pearce
 
Cross platform mobile web apps
Cross platform mobile web appsCross platform mobile web apps
Cross platform mobile web apps
James Pearce
 
Bd conf sencha touch workshop
Bd conf sencha touch workshopBd conf sencha touch workshop
Bd conf sencha touch workshop
James Pearce
 
City bars workshop
City bars workshopCity bars workshop
City bars workshop
James Pearce
 
San Diego Hackathon
San Diego HackathonSan Diego Hackathon
San Diego Hackathon
James Pearce
 
Building Cross Platform Mobile Web Apps
Building Cross Platform Mobile Web AppsBuilding Cross Platform Mobile Web Apps
Building Cross Platform Mobile Web Apps
James 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 PhoneGap
James Pearce
 
Theming and Sass
Theming and SassTheming and Sass
Theming and Sass
James Pearce
 
An Introduction to Sencha Touch
An Introduction to Sencha TouchAn Introduction to Sencha Touch
An Introduction to Sencha Touch
James Pearce
 
Source Dev Con Keynote
Source Dev Con KeynoteSource Dev Con Keynote
Source Dev Con Keynote
James 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 Apps
James Pearce
 
Building cross platform mobile web apps
Building cross platform mobile web appsBuilding cross platform mobile web apps
Building cross platform mobile web apps
James 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 tools
James Pearce
 

More from 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
 

Recently uploaded

UI5 Controls simplified - UI5con2024 presentation
UI5 Controls simplified - UI5con2024 presentationUI5 Controls simplified - UI5con2024 presentation
UI5 Controls simplified - UI5con2024 presentation
Wouter Lemaire
 
UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6
DianaGray10
 
Generating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and MilvusGenerating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and Milvus
Zilliz
 
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdfUnlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Malak Abu Hammad
 
20240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 202420240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 2024
Matthew Sinclair
 
Climate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing DaysClimate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing Days
Kari Kakkonen
 
Removing Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software FuzzingRemoving Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software Fuzzing
Aftab Hussain
 
Presentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of GermanyPresentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of Germany
innovationoecd
 
Fueling AI with Great Data with Airbyte Webinar
Fueling AI with Great Data with Airbyte WebinarFueling AI with Great Data with Airbyte Webinar
Fueling AI with Great Data with Airbyte Webinar
Zilliz
 
Columbus Data & Analytics Wednesdays - June 2024
Columbus Data & Analytics Wednesdays - June 2024Columbus Data & Analytics Wednesdays - June 2024
Columbus Data & Analytics Wednesdays - June 2024
Jason Packer
 
Video Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the FutureVideo Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the Future
Alpen-Adria-Universität
 
AI-Powered Food Delivery Transforming App Development in Saudi Arabia.pdf
AI-Powered Food Delivery Transforming App Development in Saudi Arabia.pdfAI-Powered Food Delivery Transforming App Development in Saudi Arabia.pdf
AI-Powered Food Delivery Transforming App Development in Saudi Arabia.pdf
Techgropse Pvt.Ltd.
 
How to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptxHow to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptx
danishmna97
 
20240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 202420240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 2024
Matthew Sinclair
 
OpenID AuthZEN Interop Read Out - Authorization
OpenID AuthZEN Interop Read Out - AuthorizationOpenID AuthZEN Interop Read Out - Authorization
OpenID AuthZEN Interop Read Out - Authorization
David Brossard
 
June Patch Tuesday
June Patch TuesdayJune Patch Tuesday
June Patch Tuesday
Ivanti
 
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
名前 です男
 
Ocean lotus Threat actors project by John Sitima 2024 (1).pptx
Ocean lotus Threat actors project by John Sitima 2024 (1).pptxOcean lotus Threat actors project by John Sitima 2024 (1).pptx
Ocean lotus Threat actors project by John Sitima 2024 (1).pptx
SitimaJohn
 
Mind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AIMind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AI
Kumud Singh
 
GraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracyGraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracy
Tomaz Bratanic
 

Recently uploaded (20)

UI5 Controls simplified - UI5con2024 presentation
UI5 Controls simplified - UI5con2024 presentationUI5 Controls simplified - UI5con2024 presentation
UI5 Controls simplified - UI5con2024 presentation
 
UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6
 
Generating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and MilvusGenerating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and Milvus
 
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdfUnlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
 
20240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 202420240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 2024
 
Climate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing DaysClimate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing Days
 
Removing Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software FuzzingRemoving Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software Fuzzing
 
Presentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of GermanyPresentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of Germany
 
Fueling AI with Great Data with Airbyte Webinar
Fueling AI with Great Data with Airbyte WebinarFueling AI with Great Data with Airbyte Webinar
Fueling AI with Great Data with Airbyte Webinar
 
Columbus Data & Analytics Wednesdays - June 2024
Columbus Data & Analytics Wednesdays - June 2024Columbus Data & Analytics Wednesdays - June 2024
Columbus Data & Analytics Wednesdays - June 2024
 
Video Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the FutureVideo Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the Future
 
AI-Powered Food Delivery Transforming App Development in Saudi Arabia.pdf
AI-Powered Food Delivery Transforming App Development in Saudi Arabia.pdfAI-Powered Food Delivery Transforming App Development in Saudi Arabia.pdf
AI-Powered Food Delivery Transforming App Development in Saudi Arabia.pdf
 
How to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptxHow to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptx
 
20240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 202420240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 2024
 
OpenID AuthZEN Interop Read Out - Authorization
OpenID AuthZEN Interop Read Out - AuthorizationOpenID AuthZEN Interop Read Out - Authorization
OpenID AuthZEN Interop Read Out - Authorization
 
June Patch Tuesday
June Patch TuesdayJune Patch Tuesday
June Patch Tuesday
 
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
 
Ocean lotus Threat actors project by John Sitima 2024 (1).pptx
Ocean lotus Threat actors project by John Sitima 2024 (1).pptxOcean lotus Threat actors project by John Sitima 2024 (1).pptx
Ocean lotus Threat actors project by John Sitima 2024 (1).pptx
 
Mind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AIMind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AI
 
GraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracyGraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracy
 

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