
In 1837, Samuel F. B. Morse conducted the first successful experiment with an electrical telegraph.
Alexander Graham Bell was the first to be awarded a patent for the electric telephone in March 1876.
In 1921, Harold W. Arlin announced a game between the Pittsburgh Pirates and the Philadelphia Phillies.
Web technology is evolving.
Free software geek working at Adobe on the mobile web.
ok you win this round marketing. html5 now means 'new shiny'.@brianleroux
Web Application Technology Working Group
<section>, <article>, etc<time>, <code>, etc<progress>, <keygen>, etc<canvas>, <audio>, <video>, etc<input type=...>navigator.offLineTypically headless/chromess/without a visual manifestation, truly crossplatform.
var win = function(position) { console.log(position.coords) }
, fail = console.log
navigator.geolocation.getCurrentPostion(win, fail)
Avail in all modern browser environments.
navigator.vibrate(1000)
navigator.vibrate([1000])
navigator.vibrate([1000, 500, 2000])
Avail in PhoneGap, B2G. Support landing in WebKit.

window.ondevicemotion = function(event) {
event.accelerationIncludingGravity.x
event.accelerationIncludingGravity.y
event.accelerationIncludingGravity.z
}
window.ondeviceorientation = function(event) {
event.alpha
event.beta
event.gamma
}
PhoneGap began, considering the camera; since the Media Capture API has evolved cameras, microphone and concerning the capture of images still or streaming and audio
<input type=file accept=image/* capture=camera>
Valid types inc camcorder, microphone, filesystem.
var getMedia = navigator.webkitGetUserMedia
|| navigator.mozGetUserMedia
|| navigator.msGetUserMedia
See more here..
Frankly tho, we're hot on WebRTC
Evolved tos the System Info API. Essentially steriods for:
navigator.onLine // wtf
Allowing introspection of connection property such as wifi, 3g, etc. In PhoneGap:
var networkState = navigator.network.connection.type;
var states = {};
states[Connection.UNKNOWN] = 'Unknown connection';
states[Connection.ETHERNET] = 'Ethernet connection';
states[Connection.WIFI] = 'WiFi connection';
states[Connection.CELL_2G] = 'Cell 2G connection';
states[Connection.CELL_3G] = 'Cell 3G connection';
states[Connection.CELL_4G] = 'Cell 4G connection';
states[Connection.NONE] = 'No network connection';
alert('Connection type: ' + states[networkState]);
navigator.battery.addEventListener('dischargingtimechange', function () {
if (navigator.battery.dischargingTime < 60 * 10 || navigator.battery.level < 0.05)
console.log('oh shiii, battery level below 5%!')
}
}, false)
Currently understandardized. BEWARE! But clearly a need; exists today in Chrome and PhoneGap in some forms.
document.addEventListener('deviceready', readyFreddy, false)
document.addEventListener('pause', justChillin, false)
document.addEventListener('resume', woahDude, false)
var readyFreddy = function() {
alert('app initd')
}
var justChillin = function() {
alert('paused')
}
var woahDude = function() {
alert('alright alright getting up!')
}
Yup. Read the device contacts. The people you call on the phone. Arguably, the real social graph.
function win(contacts) {
alert('Found ' + contacts.length + ' contacts.')
}
function fail(contactError) {
alert('onError!')
}
var optns = new ContactFindOptions()
opts.filter = 'Brian'
var fields = ['displayName', 'name']
navigator.contacts.find(fields, win, fail, opts);
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, fail);
function gotFS(fileSystem) {
var opts = {create: true, exclusive: false}
fileSystem.root.getFile('readme.txt', opts, gotFileEntry, fail);
}
function gotFileEntry(fileEntry) { fileEntry.createWriter(gotFileWriter, fail) }
function gotFileWriter(writer) {
writer.onwriteend = function(evt) {
console.log("contents of file now 'some sample text'");
writer.truncate(11);
writer.onwriteend = function(evt) {
console.log("contents of file now 'some sample'");
writer.seek(4);
writer.write(" different text");
writer.onwriteend = function(evt){
console.log("contents of file now 'some different text'");
}
};
};
writer.write("some sample text");
}
function fail(error) { console.log(error.code) }