var app = { dom: {}, userLocation: { lat: 0, lon: 0, heading: 0 }, sortedClosestObjects: {}, }, { }], init: function() { app.locateUser(); // Debug only app.dom = { lat: $('#l-lat'), lon: $('#l-lon'), heading: $('#c-heading') } }, locateUser: function() { if (navigator) { navigator.geolocation.getCurrentPosition(function(position) { app.userLocation.lat = position.coords.latitude; app.userLocation.lon = position.coords.longitude; app.dom.lat.text(app.userLocation.lat); app.dom.lon.text(app.userLocation.lon); }); } }, // Call webservice and populate app.objects }, handleOrientation: function(orientation) { // Check if any objects are in range }, handleCompass: function(heading) { }, findClosestObject: function(orientation) { var closest = []; var deg = radiansToDegrees(angularSeparation); closest[i] = {cO: i, deg: deg, volume: degreesToVolume(deg)}; } closest.sort(function(a,b) { return a.deg - b.deg; }); // closest index matches the celestialObjects index. for (var i = 0; i < closest.length; i++) { //if (i == 1) { console.log(angularSeparation); } if (closest[i].deg <= this.threshold) { celestialObject = app.celestialObjects[closest[i].cO]; break; this.sortedClosestObjects = closest; // Debug } else { return false; } }, * http://star-www.st-and.ac.uk/~fv/webnotes/chapter7.htm * returns Right Acension (degrees), declination (degrees) var sinD, cosH, HA, declination; // Convert to radians altitude = degreesToRadians(altitude); azimuth = degreesToRadians(azimuth); latitude = degreesToRadians(latitude); // Calculate declination sinD = (Math.sin(altitude) * Math.sin(latitude)) + (Math.cos(altitude) * Math.cos(latitude) * Math.cos(azimuth)); declination = Math.asin(sinD); // Calculate hour angle cosH = ((Math.sin(altitude) - (Math.sin(latitude) * Math.sin(declination))) / (Math.cos(latitude) * Math.cos(declination))); HA = radiansToDegrees(Math.acos(cosH)); if (Math.sin(azimuth) > 0) { HA = 360 - HA; } // Convert to degrees declination = radiansToDegrees(declination); }, /* * http://answers.yahoo.com/question/index?qid=20070830185150AAoNT4i * http://mysite.verizon.net/res148h4j/javascript/script_clock.html * Uses Meeus formula 11.4 */ lst3 : function(lon) { var time = new Date(); var year = time.getUTCFullYear() - 1, month = time.getMonth() + 1, day = time.getUTCDate(), hour = time.getUTCMinutes(), min = time.getUTCMinutes(), sec = time.getUTCSeconds(); if (month <= 2) { year--; month += 12; } var d = Math.floor(30.6001 * (month + 1)); var ut = (hour + min/60.0 + sec/3600.0); // days since J2000.0 var jd = Math.floor(365.25*(year+4716)) + d + day - 13 -1524.5 + ut/24.0; // var frac = function(X) { X = X - Math.floor(X); if (X<0) X = X + 1.0; return X; } var MJD = jd - 2400000.5; var MJD0 = Math.floor(MJD); var ut = (MJD - MJD0)*24.0; var t_eph = (MJD0-51544.5)/36525.0; var GMST = 6.697374558 + 1.0027379093*ut + (8640184.812866 + (0.093104 - 0.0000062*t_eph)*t_eph)*t_eph/3600.0; var LMST = 24.0 * frac((GMST + lon/15.0)/24.0); // return [GMST, LMST, jd]; }, getAngularSeparation: function(userCoords, celestialCoords) { }, /** * * */ var userCoordsEQ = this.convertHorizontalToEquatorial(app.userLocation.lat, app.userLocation.lon, userCoords[0], userCoords[1]), celestialCoordsEQ = this.convertHorizontalToEquatorial(app.userLocation.lat, app.userLocation.lon, celestialCoords[0], celestialCoords[1]); ra1 = parseFloat(userCoordsEQ[0]); ra2 = parseFloat(celestialCoordsEQ[0]); dec1 = parseFloat(userCoords[1]); dec2 = parseFloat(celestialCoords[1]); with (Math) { var ra1Rad = degreesToRadians(ra1); var dec1Rad = degreesToRadians(dec1); var ra2Rad = degreesToRadians(ra2); var dec2Rad = degreesToRadians(dec2); var dRA = ra1Rad - ra2Rad; var dDec = dec2Rad - dec1Rad; // a c a c B var cosC = (sin(dec2Rad) * sin(dec1Rad)) + (cos(dec2Rad) * cos(dec1Rad) * cos(ra2Rad-ra1Rad)); var x = (cos(dec1Rad) * sin(ra2Rad-ra1Rad)) / cosC; var y = ((cos(dec2Rad)*sin(dec1Rad)) - (sin(dec2Rad)*cos(dec1Rad)*cos(ra2Rad-ra1Rad)))/cosC; var r = Math.sqrt(x*x+y*y); } return r; }, //getDegrees: function(lat1, lon1, lat2, long2) { getDegrees: function(userLocation, celestialObject) { var al1 = userLocation[0], az1 = userLocation[1], al2 = celestialObject[0], az2 = celestialObject[1], R = 6371, // km dAzimuth = degreesToRadians(az2-az1), dAltitude = degreesToRadians(al2-al1); az1 = degreesToRadians(az1); az2 = degreesToRadians(az2); //3963.0 * arccos[sin(lat1) * sin(lat2) + cos(lat1) * cos(lat2) * cos(lon2 - lon1)] //3963.0 * arctan[sqrt(1-x^2)/x] var a = Math.sin(dAzimuth/2) * Math.sin(dAzimuth/2) + Math.sin(dAltitude/2) * Math.sin(dAltitude/2) * Math.cos(az1) * Math.cos(az2); var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); return R * c; } } /** * Convert degrees to volume - 0-100 */ function degreesToVolume(deg) { // if you're a degree away, maximum volume. return 100; } if (deg < 0 || deg > app.threshold) { return 0; } } function $(id) { return document.getElementById(id); } var bh = { position: [0,0], init: function() { var destinationPos = [51.512722,-0.117459], position = bh.geo.getPosition(); navigator.geolocation.watchPosition(bh.geo.updatePosition); }, } //var data = [{"ID":"127","locked":"false","longitude":"-0.09388536","installed":"false","name":"Wood Street, Guildhall","temporary":"false","latitude":"51.51700801","emptySlots":"8","bikesAvailable":"9"},{"ID":"32","locked":"false","longitude":"-0.084439283","installed":"false","name":"Leonard Circus , Shoreditch","temporary":"false","latitude":"51.52469624","emptySlots":"17","bikesAvailable":"4"},{"ID":"276","locked":"false","longitude":"-0.084985356","installed":"false","name":"Lower Thames Street, Monument","temporary":"false","latitude":"51.50930161","emptySlots":"5","bikesAvailable":"19"},{"ID":"90","locked":"false","longitude":"-0.139174593","installed":"false","name":"Harrington Square, Camden Town","temporary":"false","latitude":"51.53301907","emptySlots":"15","bikesAvailable":"12"},{"ID":"206","locked":"false","longitude":"-0.062697","installed":"false","name":"New Road 1 , Whitechapel","temporary":"false","latitude":"51.518154","emptySlots":"6","bikesAvailable":"31"},{"ID":"118","locked":"false","longitude":"-0.13547809","installed":"false","name":"Rochester Row, Westminster","temporary":"false","latitude":"51.49582705","emptySlots":"13","bikesAvailable":"0"},{"ID":"71","locked":"false","longitude":"-0.098850915","installed":"false","name":"Newgate Street , St. Paul's","temporary":"false","latitude":"51.5154186","emptySlots":"19","bikesAvailable":"15"},{"ID":"102","locked":"false","longitude":"-0.076793375","installed":"false","name":"Jewry Street, Aldgate","temporary":"false","latitude":"51.51340693","emptySlots":"17","bikesAvailable":"0"},{"ID":"331","locked":"false","longitude":"-0.089887855","installed":"false","name":"Bunhill Row, Moorgate","temporary":"false","latitude":"51.52085887","emptySlots":"11","bikesAvailable":"19"},{"ID":"16","locked":"false","longitude":"-0.125979294","installed":"false","name":"Cartwright Gardens , Bloomsbury","temporary":"false","latitude":"51.52635795","emptySlots":"3","bikesAvailable":"19"},{"ID":"55","locked":"false","longitude":"-0.086685542","installed":"false","name":"Finsbury Circus, Liverpool Street","temporary":"false","latitude":"51.51707521","emptySlots":"8","bikesAvailable":"24"},{"ID":"84","locked":"false","longitude":"-0.111778348","installed":"false","name":"Breams Buildings, Holborn","temporary":"false","latitude":"51.51593725","emptySlots":"20","bikesAvailable":"4"},{"ID":"233","locked":"false","longitude":"-0.130699733","installed":"false","name":"Pall Mall East, West End","temporary":"false","latitude":"51.50777049","emptySlots":"3","bikesAvailable":"19"},{"ID":"194","locked":"false","longitude":"-0.091773776","installed":"false","name":"Hop Exchange, The Borough","temporary":"false","latitude":"51.50462759","emptySlots":"3","bikesAvailable":"33"},{"ID":"57","locked":"false","longitude":"-0.120202614","installed":"false","name":"Guilford Street , Bloomsbury","temporary":"false","latitude":"51.52334672","emptySlots":"10","bikesAvailable":"13"},{"ID":"220","locked":"false","longitude":"-0.166485083","installed":"false","name":"Chelsea Green, Chelsea","temporary":"false","latitude":"51.49066456","emptySlots":"9","bikesAvailable":"18"},{"ID":"316","locked":"false","longitude":"-0.184400221","installed":"false","name":"Palace Gate, Kensington Gardens","temporary":"false","latitude":"51.50204238","emptySlots":"2","bikesAvailable":"14"},{"ID":"163","locked":"false","longitude":"-0.167894973","installed":"false","name":"Sloane Avenue, Knightsbridge","temporary":"false","latitude":"51.4931848","emptySlots":"16","bikesAvailable":"14"},{"ID":"89","locked":"false","longitude":"-0.123509611","installed":"false","name":"Tavistock Place, Bloomsbury","temporary":"false","latitude":"51.5262503","emptySlots":"13","bikesAvailable":"6"},{"ID":"175","locked":"false","longitude":"-0.0811189","installed":"false","name":"Appold Street, Liverpool Street","temporary":"false","latitude":"51.52174384","emptySlots":"22","bikesAvailable":"4"},{"ID":"31","locked":"false","longitude":"-0.083353323","installed":"false","name":"Fanshaw Street, Hoxton","temporary":"false","latitude":"51.52953709","emptySlots":"26","bikesAvailable":"8"},{"ID":"35","locked":"false","longitude":"-0.142783033","installed":"false","name":"St. George Street, Mayfair","temporary":"false","latitude":"51.51196","emptySlots":"3","bikesAvailable":"15"},{"ID":"11","locked":"false","longitude":"-0.122502346","installed":"false","name":"Brunswick Square, Bloomsbury","temporary":"false","latitude":"51.52395143","emptySlots":"16","bikesAvailable":"8"},{"ID":"208","locked":"false","longitude":"-0.166304359","installed":"false","name":"Mallory Street, Marylebone","temporary":"false","latitude":"51.52505151","emptySlots":"11","bikesAvavar poacherAudio = {audio: {mp3: 'http://thewireless.deepcobalt.com/sounds/numbers_station_01.mp3',ogg: 'http://thewireless.deepcobalt.com/sounds/numbers_station_01.ogg',original: 'http://speechificationaudio.s3.amazonaws.com/BBC_R4_Tracking_the_Lincolnshire_Poacher_24112006.mp3'},brand: 'Unknown',description: '"The Lincolnshire Poacher" was the nickname of a mysterious, powerful shortwave numbers station that used two bars from the English folk song "The Lincolnshire Poacher" as an interval signal.',duration: "27.42",durationSecs: 1680,epoch: 1284564180,genres: [],id: '1572815728',link: 'http://www.bbc.co.uk/radio4',network: 'BBC Radio 4',title: 'Tracking the Lincolnshire Poacher'};function updateProgrammeInfo(audioObj) {// Update programme info$('#progress').fadeIn();var currentlyPlayingId = audioObj.id;if (audioObj.link != '') {$('#programme-title').html('<a href="'+audioObj.link+'" target="_blank">'+audioObj.brand+' ยป</a>');} else {$('#programme-title').text(audioObj.brand);}$('#programme-brand').text(audioObj.network);$('#programme-genre').text(audioObj.genres[0]);if (audioObj.genres && audioObj.genres.length) {$('#programme-genre').attr('class', 'genre-'+audioObj.genres[0].toLowerCase());}var timeago = $.timeago(audioObj.pubDate.replace('+00:00','Z'));$('#programme-tx').text(timeago);$('#progress span').text('Duration: '+audioObj.duration);var progressDivWidth = $('#progress').width(),ratio = progressDivWidth/audioObj.durationSecs,leftPos = audioObj.audio.trim.start*ratio,width = (audioObj.audio.trim.end - audioObj.audio.trim.start) * ratio;$('#trim-location').css('display', 'block').animate({'left': leftPos,'width': width});//.css('left', leftPos).width(width);//alert(audioObj.audio.trim.start);var relatedLinks;if (related && related[currentlyPlayingId]) {$('#related').show();var relatedLinks = related[currentlyPlayingId].links;$('#programme-description ul').empty();$.each(relatedLinks, function(key, value) {value.title = value.title.replace('BBC -','');$('#programme-description ul').append('<li><a href="'+value.url+'">'+value.title+'</a></li>');});} else {relatedLinks = 'undefined';$('#related').hide();}} // end updateProgrammeInfo()/** Plays the full version of the Podcast when triggered by the space key**/var playFullAudio = function(currentlyPlayingObj) {/* if it's not playing - need to check if we were playing it - and load it in */if (!isPlayingFullVersion) {if (nowPlayingObject != currentlyPlayingObj) {fullAudioPlayer = new Audio(currentlyPlayingObj.audio.original);fullAudioPlayer.addEventListener('loadstart', function(e) {console.log('Loading Started');}, false);fullAudioPlayer.addEventListener('progress', function(e) {isPlayingFullVersion = true; console.log(e.target.currentTime);}, false);fullAudioPlayer.addEventListener('canplay', function(e) { fullAudioPlayer.play(); }, false);//audio.addEvent} else {fullAudioPlayer.play();}if (player)player.pause();isPlayingFullVersion = true;nowPlayingObject = currentlyPlayingObj;} else {if (fullAudioPlayer) {isPlayingFullVersion = false;fullAudioPlayer.pause();}}$('#trim-location').css('display', 'none');}; // end playFullAudio()var playPauseFn = function() {if (isPlayingFullVersion) {stopPlayingFullVersion();}// Stop other players$('#players audio').each(function() { this.pause(); });if (currentAudioObj && $('#player-'+currentAudioObj.id).length) {// Control existing player} else {// Create new player$('#players').append('<audio id="player-'+currentAudioObj.id+'" preload="auto" autobuffer>'+ '<source src="'+currentAudioObj.audio.ogg+'" type="audio/ogg" />'+ '<source src="'+currentAudioObj.audio.aac+'" type="audio/mpeg" />'+ '</audio>');}// preload next itempreloadAudio();player = $('#player-'+currentAudioObj.id)[0];player.addEventListener('canplay', function(e) {if ($('#p-'+currentlyPlaying)) {// update style of bar to show it's playing ??}}, false);player.play();updateProgrammeInfo(currentAudioObj);}; // end playPauseFn()function preloadAudio() {if (currentlyPlaying >= podcasts.length) {return false;}for (var i = -1; i < 2; i++) {if (currentlyPlaying+i < podcasts.length) {var nextAudio = podcasts[currentlyPlaying+i];if (!$('#player-'+nextAudio.id).length) {$('#players').append('<audio id="player-'+nextAudio.id+'" preload="auto" autobuffer>'+ '<source src="'+nextAudio.audio.ogg+'" type="audio/ogg" />'+ '<source src="'+nextAudio.audio.aac+'" type="audio/mpeg" />'+ '</audio>');}}}}function getRotation(node) {var transformStr = $(node).attr('data-transform');var match = /rotate\((.*)deg\)/i.exec(transformStr);if (match && match.length > 1) {return parseFloat(match[1]);} else {console.log('unable to detect rotation..', node);return 0;}}// Previousvar prevFn = function() {currentlyPlaying--;var rotate = true;if (currentlyPlaying > podcasts.length) {currentlyPlaying = podcasts.length;rotate = false;currentAudioObj = podcasts[podcasts.length];} else if (currentlyPlaying < -1) {rotate = false;currentlyPlaying = -1currentAudioObj /*** Module dependencies.*/var express = require('express'),parted = require('parted'),base60 = require('./base60'),fs = require('fs'),events = require('events'),ffmpeg = require('./lib/ffmpeg'),redis = require('redis-node'),path = require('path');var eventEmitter = new events.EventEmitter();var app = module.exports = express.createServer();var port = process.env.PORT || 8080;var playheadOffset = 4000; // 5000 milliseconds - 5 secondsvar io = require('socket.io').listen(app);// Redisvar redisClient = redis.createClient();var protestsFileDir = __dirname + '/public/protests';app.use(parted({// custom file pathpath: protestsFileDir,// memory usage limit per requestlimit: 30 * 1024,// disk usage limit per requestdiskLimit: 100 * 1024 * 1024,// allow multiple parts of the same name,// then available as an arraymultiple: true}));// Configurationapp.configure(function(){app.set('views', __dirname + '/views');app.set('view engine', 'jinjs');app.use(express.bodyParser());app.use(express.methodOverride());app.use(app.router);app.use(express.static(__dirname + '/public'));app.set("view options", { layout: true });app.use(express.cookieParser());app.use(express.session({ secret: "keyboard cat" }));});/* have to disable websocket because it causes problems with 3G connections */io.configure(function () {io.set('transports', ['xhr-polling']);});app.configure('development', function(){app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));});app.configure('production', function(){app.use(express.errorHandler());});/*** Routes*/// Homeapp.get('/', function(req, res){res.render('index.jinjs', {title: 'Home',layout: false});});// Eventapp.get('/event/:id', function(req, res){res.render('protest.jinjs', {title: 'Protest',layout: false});});// Timeapp.get('/time', function(req, res){res.render('time.jinjs', {title: 'Time',layout: false,time: new Date().getTime()});});/* this is to be removed */app.get('/play', function(req, res){var ts = new Date().getTime();io.sockets.emit('messagePlay', JSON.stringify({id: 'randomId',ts: ts,tsAt: ts+playheadOffset}));res.render('play.jinjs', {title: 'Play',layout: false});});// Play a specific messageapp.get('/play/:id', function(req, res){if (!req.params.id) {res.render('play.jinjs', {title: 'Play - error, no protest found',layout: false,error: 'Unable to find any protest by that name.'});}var filePath = path.join(protestsFileDir, req.params.id);var stat = fs.statSync(filePath);res.writeHead(200, {'Content-Type': 'audio/mpeg','Content-Length': stat.size});var readStream = fs.createReadStream(filePath);readStream.on('data', function(data) {res.write(data);});readStream.on('end', function() {res.end();});});// Play OGG messageapp.get('/play/ogg/:id', function(req, res){if (!req.params.id) {res.render('play.jinjs', {title: 'Play - error, no protest found',layout: false,error: 'Unable to find any protest by that name.'});}var filePath = path.join(protestsFileDir, 'ogg', req.params.id);var stat = fs.statSync(filePath);res.writeHead(200, {'Content-Type': 'audio/ogg','Content-Length': stat.size});var readStream = fs.createReadStream(filePath);readStream.on('data', function(data) {res.write(data);});readStream.on('end', function() {res.end();});});// Save messageapp.post('/save', function(req, res, next){/*extract filename - base60 encode it to get a nice ID.Also rename the filename on disk.*/var fn = req.body.filename.split('/');var filename = fn[fn.length-1];var num = parseInt((new Date().getTime()/1000));var newFilename = base60.numtosxg(num);fn[fn.length-1] = newFilename;var fnNew = fn.join('/');fs.rename(req.body.filename, fnNew);if (io.sockets) {/* added output to files as ffmpeg seems to have a problem outputting to the same file */var mp3File = fnNew + '.mp3';ffmpeg.exec(['-i', fnNew, '-ab', '32k', '-ar', '22050', '-ac', '1', '-acodec', 'libmp3lame', '-y', '-v', 4, mp3File], function(stderr, stdout, exitCode) {//if (!stderr) {try {fs.unlinkSync(fnNew);fs.renameSync(mp3File, fnNew);io.sockets.emit('messageChange', JSON.stringify({id: newFilename, ts: new Date().getTime()}));} catch (error) {return res.render('save.jinjs', {title: 'Save Form',layout: false,error: 'Failed to protest'});}console.log('FFMPEG ENCODE', stderr, stdout, exitCode);var ts = new Date().getTime();io.sockets.emit('messagePlay', JSON.stringify({id: newFilename,ts: ts,tsAt: ts+playheadOffset}));return res.render('save.jinjs', {title: 'Save Form',layout: false,id: newFilename});});} else {res.render('save.jinjs', {title: 'Save Form',layout: false,error: 'Failed to protest'});}});app.get('/upload', function(req, res){res.render('upload.jinjs', {title: 'Upload Form',layout: false});});app.get('/register', function(req, res) {return res.render('register_form.jinjs', {title: 'Register',layout: false});});app.post('/register', function(req, res) {if (!req.body.title) {return res.render('register.jinjs', {title: 'Failed',layout: false,error: 'No title'});}if (!req.body.email) {retur{ "1768-08-08": { "diary": "Monday, 8th. Fresh Breezes and Cloudy weather the most part of these 24 hours. At 10 a.m. weighed and came to sail; at Noon the South Foreland bore North-East 1/2 North, distant 6 or 7 Miles. Wind West by North, North-West.", "date": "1768-08-08", "weather": "", "wind": "w", "chapterBanner": "CHAPTER 1. ENGLAND TO RIO JANEIRO. " }, "1768-08-09": { "diary": "Tuesday, 9th. Gentle breezes and Cloudy weather. At 7 p.m. the Tide being against us, Anchored in 13 fathoms of Water; Dungeness South-West by West. At 11 a.m. Weighed and made Sail down Channel; at Noon, Beachy Head, North by East 1/2 East, distant 6 Leagues, Latitude observed 50 degrees 30 minutes North. Wind North-West to North.", "date": "1768-08-09", "weather": "", "wind": "nw", "chapterBanner": "CHAPTER 1. ENGLAND TO RIO JANEIRO. " }, "1768-08-10": { "diary": "Wednesday, 10th. Variable: light Airs and Clear weather. At 8 p.m. Beachy Head North-East by East, distant 4 Leagues, and at 8 a.m. it bore North-East by North, 9 Leagues. Found the Variation of the Compass to be 23 degrees West; at Noon the Isle of Wight North-West by North. Wind West by North, North-East by East.", "date": "1768-08-10", "weather": "", "wind": "w", "chapterBanner": "CHAPTER 1. ENGLAND TO RIO JANEIRO. " }, "1768-08-11": { "diary": "Thursday, 11th. Light Airs and Clear weather. At 8 p.m. Dunnose North by West 5 Leagues, and at 4 a.m. it bore North-North-East 1/2 East, distant 5 Leagues. Wind Variable.", "date": "1768-08-11", "weather": "", "wind": "", "chapterBanner": "CHAPTER 1. ENGLAND TO RIO JANEIRO. " }, "1768-08-12": { "diary": "Wednesday, 12th. Light Airs and Calms all these 24 Hours. At Noon the Bill of Portland bore North-West 1/2 West, distant 3 Leagues. Latitude Observed 50 degrees 24 minutes North. Wind Easterly.", "date": "1768-08-12", "weather": "", "wind": "e", "chapterBanner": "CHAPTER 1. ENGLAND TO RIO JANEIRO. " }, "1768-08-13": { "diary": "Thursday, 13th. Ditto weather. At Noon the Start Point West 7 or 8 miles. Latitude Observed 50 degrees 12 minutes North, which must be the Latitude of the Start, as it bore West.<em> This is correct.</em> Wind Variable.", "date": "1768-08-13", "weather": "", "wind": "", "chapterBanner": "CHAPTER 1. ENGLAND TO RIO JANEIRO. " }, "1768-08-14": { "diary": "Sunday, 14th. Fine breezes and Clear weather. At 1/2 past 8 p.m. Anchored in the Entrance of Plymouth Sound in 9 fathoms water. At 4 a.m. weighed and worked into proper Anchoring ground, and Anchored in 6 fathoms, the Mewstone South-East, Mount Batten North-North-East 1/2 East, and Drake's Island North by West. Dispatched an Express to London for Mr. Banks and Dr. Solander to join the Ship, their Servants and Baggage being already on board. Wind North-Easterly.", "date": "1768-08-14", "weather": "", "wind": "ne", "chapterBanner": "CHAPTER 1. ENGLAND TO RIO JANEIRO. " }, "1768-08-15": { "diary": "Monday, 15th. First and latter parts Moderate breezes and fair; Middle squally, with heavy showers of rain. I this day received an order to Augment the Ship's Company to 85 Men, which before was but 70. Received on board fresh Beef for the Ship's Company. Wind South-West to South-East.", "date": "1768-08-15", "weather": "heavy-rain", "wind": "sw", "chapterBanner": "CHAPTER 1. ENGLAND TO RIO JANEIRO. " }, "1768-08-16": { "diary": "Tuesday, 16th. First part moderate and Hazey; Middle hard Squalls with rain; the Latter moderate and fair. Received on board a supply of Bread, Beer, and Water. A Sergeant, Corporal, Drummer, and 9 Private Marines as part of the Complement. Wind South-South-East to North-East.", "date": "1768-08-16", "weather": "heavy-rain", "wind": "s", "chapterBanner": "CHAPTER 1. ENGLAND TO RIO JANEIRO. " }, "1768-08-17": { "diary": "Wednesday, 17th. Little wind and Hazey weather. Sent some Cordage to the Yard in order to be Exchanged for Smaller. Several Shipwrights and Joiners from the Yard Employed on board refitting the Gentlemen's Cabins, and making a Platform over the Tiller, etc. Wind South-East to East by South.", "date": "1768-08-17", "weather": "", "wind": "s", "chapterBanner": "CHAPTER 1. ENGLAND TO RIO JANEIRO. " }, "1768-08-18": { "diary": "Thursday, 18th. Little wind and Cloudy. Struck down 4 guns into the Hold. Received on board 4 More, with 12 Barrels of Powder and several other Stores. Shipwrights and Joiners Employed on board. Wind Easterly.", "date": "1768-08-18", "weather": "", "wind": "e", "chapterBanner": "CHAPTER 1. ENGLAND TO RIO JANEIRO. " }, "1768-08-19": { "diary": "Friday, 19th. Former part little wind with rain; remainder fair weather; a.m. Read to the Ship's Company the Articles of War and the Act of Parliament, they likewise were paid two Months' Wages in advance. I also told them that they were to Expect no additional pay for the performance of our intended Voyage; they were well satisfied, and Expressed great Cheerfulness and readiness to prosecute the Voyage. Received on board anoth




                Happy Birthday TL!