tag:blogger.com,1999:blog-723868550132256662024-02-18T23:00:42.228-05:00Simon Mac DonaldSoftware Developer, Voracious Reader and Caffeine AddictSimon MacDonaldhttp://www.blogger.com/profile/14749383583517044214noreply@blogger.comBlogger693125tag:blogger.com,1999:blog-72386855013225666.post-85147767475193218942016-11-30T16:56:00.001-05:002016-11-30T16:56:43.814-05:00Upcoming Conference Appearances<div>
Next week I'll be in two European capitals.<br />
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpzagWBBMHWrOThlqMviiJfULyD2PVQz0dzGOBSQGE9WWTotBYeU2k9AH1pmvMKSEVVGql4SEqWU2CZVweyOR0I9wWrOfNi0227jxrPkHC6u8wx50wGd7oCTN_HCaBQvFMxatwrTzSIQ28/s1600/paris.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="201" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpzagWBBMHWrOThlqMviiJfULyD2PVQz0dzGOBSQGE9WWTotBYeU2k9AH1pmvMKSEVVGql4SEqWU2CZVweyOR0I9wWrOfNi0227jxrPkHC6u8wx50wGd7oCTN_HCaBQvFMxatwrTzSIQ28/s400/paris.jpg" width="400" /></a></div>
<br />
I'll be at the following events:<br />
<br />
<ul>
<li><a href="https://www.dotjs.io/">dotJS</a> - Paris - Dec 5th</li>
<li><a href="https://www.meetup.com/PhoneGap-Paris/events/234750680/?eventId=234750680&chapter_analytics_code=UA-30725770-1">PhoneGap Paris Meetup</a> - Dec 6th</li>
<li><a href="http://london-2016.devrel.net/">DevRelCon</a> - London - Dec 7th</li>
<li><a href="https://www.meetup.com/Ionic-UK/events/235497011/">Ionic UK Meetup</a> - London - Dec 7th</li>
<li><a href="https://www.meetup.com/Women-Who-Code-London/events/234317715/">Women Who Code</a> - London - Dec 8th</li>
</ul>
<div>
If you are going to be at any of those events please introduce yourself to me so we can chat. Other than that I'll have limited time available in those two cities but I do love coffee so hit me up on twitter.</div>
Simon MacDonaldhttp://www.blogger.com/profile/14749383583517044214noreply@blogger.com0tag:blogger.com,1999:blog-72386855013225666.post-88017950686083639612016-07-10T17:10:00.000-04:002016-07-10T17:11:20.388-04:00PluginPub - Publish your PhoneGap plugins to NPM<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmAerZty0lTA_i_5FBwCQS_2eIbf6xujgQys_TR1yHaY18RBJ6m2r1allplGP3uyKIQChskx9eFlsYxoQg2R-9aRe5g_xhfWZKeo9K7w-RHBX91xZrcBsiek-z5lfsCioH96LMWcaTZfzo/s1600/Phonegap-Logo-Simple.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmAerZty0lTA_i_5FBwCQS_2eIbf6xujgQys_TR1yHaY18RBJ6m2r1allplGP3uyKIQChskx9eFlsYxoQg2R-9aRe5g_xhfWZKeo9K7w-RHBX91xZrcBsiek-z5lfsCioH96LMWcaTZfzo/s200/Phonegap-Logo-Simple.png" width="200" /></a></div>
<span style="font-family: "times" , "times new roman" , serif;">I was inspired by <a href="https://twitter.com/sindresorhus">Sindre Sorhus</a> package <a href="https://github.com/sindresorhus/np">np</a> which makes publishing a package to <a href="https://npmjs.com/">npm</a> easy by running the following tasks automatically for you:</span><br />
<span style="font-family: "times" , "times new roman" , serif;"><br /></span>
<br />
<ul style="box-sizing: border-box; font-size: 16px; line-height: 25.6px; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;">
<li style="box-sizing: border-box;"><span style="font-family: "times" , "times new roman" , serif;">Ensures you are publishing from the <code style="background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px; box-sizing: border-box; font-size: 13.6px; margin: 0px; padding: 0.2em 0px;">master</code> branch</span></li>
<li style="box-sizing: border-box;"><span style="font-family: "times" , "times new roman" , serif;">Ensures the working directory is clean and that there are no unpulled changes</span></li>
<li style="box-sizing: border-box;"><span style="font-family: "times" , "times new roman" , serif;">Reinstalls dependencies to ensure your project works with the latest dependency tree</span></li>
<li style="box-sizing: border-box;"><span style="font-family: "times" , "times new roman" , serif;">Runs the tests</span></li>
<li style="box-sizing: border-box;"><span style="font-family: "times" , "times new roman" , serif;">Bumps the version in package.json and npm-shrinkwrap.json (if present) and creates a git tag</span></li>
<li style="box-sizing: border-box;"><span style="font-family: "times" , "times new roman" , serif;">Publishes the new version to npm, optionally under a <a href="https://docs.npmjs.com/cli/dist-tag" style="box-sizing: border-box; text-decoration: none;">dist-tag</a></span></li>
<li style="box-sizing: border-box;"><span style="font-family: "times" , "times new roman" , serif;">Pushes commits and tags to GitHub</span></li>
</ul>
<div>
<span style="font-family: "times" , "times new roman" , serif;"><span style="line-height: 25.6px;">Now I'm in favour of anything that makes my life easier so I decided to take <i>np</i> and enhance it with some tasks I routinely do when publishing new plugins. My first pass at it is a new package called <a href="https://github.com/macdonst/pluginpub">pluginpub</a> which is a copy of <i>np</i> that I eventually hope to change to depend on <i>np</i> instead. </span></span></div>
<div>
<span style="font-family: "times" , "times new roman" , serif;"><span style="line-height: 25.6px;"><br /></span></span></div>
<div>
<span style="font-family: "times" , "times new roman" , serif;"><span style="line-height: 25.6px;">The main difference is that it:</span></span></div>
<div>
<span style="font-family: "times" , "times new roman" , serif;"><span style="line-height: 25.6px;"><br /></span></span></div>
<div>
<ul style="box-sizing: border-box; font-size: 16px; line-height: 25.6px; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;">
<li style="box-sizing: border-box;"><span style="font-family: "times" , "times new roman" , serif;">Bumps the version in <b>plugin.xml</b>, package.json and npm-shrinkwrap.json (if present) and creates a git tag</span></li>
</ul>
</div>
<div>
<span style="font-family: "times" , "times new roman" , serif;"><span style="line-height: 25.6px;">It now automates a lot of stuff I used to do manually into a single command. Installation is simple, you run:</span></span></div>
<div>
<span style="font-family: "times" , "times new roman" , serif;"><span style="line-height: 25.6px;"><br /></span></span></div>
<div>
<pre style="background-color: #f7f7f7; border-radius: 3px; box-sizing: border-box; color: #333333; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 11.9px; font-stretch: normal; line-height: 1.45; margin-bottom: 16px; overflow: auto; padding: 16px; word-wrap: normal;"><code style="background: transparent; border-radius: 3px; border: 0px; box-sizing: border-box; display: inline; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 11.9px; line-height: inherit; margin: 0px; overflow: visible; padding: 0px; word-break: normal; word-wrap: normal;">npm install pluginpub --save-dev</code></pre>
</div>
In the root of your plugin repo. Then to release a new version of the plugin you would execute the command from the root of your plugin repo:<br />
<br />
<pre style="background-color: #f7f7f7; border-radius: 3px; box-sizing: border-box; color: #333333; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 11.9px; font-stretch: normal; line-height: 1.45; margin-bottom: 16px; overflow: auto; padding: 16px; word-wrap: normal;"><code style="background: transparent; border-radius: 3px; border: 0px; box-sizing: border-box; display: inline; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 11.9px; line-height: inherit; margin: 0px; overflow: visible; padding: 0px; word-break: normal; word-wrap: normal;">pluginpub 1.5.8</code></pre>
The command takes only one argument and that is the version of the plugin. If you don't pass in a valid <a href="http://semver.org/">semver</a> then the command will fail.<br />
<br />
Anyway, it make or may not be of use to you. Feel free to try it out and report any issues on the github page. Next steps are publishing a proper README and adding the auto-generation of a CHANGELOG file which is another manual step I hate doing when releasing a plugin.Simon MacDonaldhttp://www.blogger.com/profile/14749383583517044214noreply@blogger.com0tag:blogger.com,1999:blog-72386855013225666.post-1057280213867471362016-06-27T13:44:00.002-04:002016-06-27T18:01:56.962-04:00Using ES2015 Code in Your PhoneGap Plugins<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmAerZty0lTA_i_5FBwCQS_2eIbf6xujgQys_TR1yHaY18RBJ6m2r1allplGP3uyKIQChskx9eFlsYxoQg2R-9aRe5g_xhfWZKeo9K7w-RHBX91xZrcBsiek-z5lfsCioH96LMWcaTZfzo/s1600/Phonegap-Logo-Simple.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmAerZty0lTA_i_5FBwCQS_2eIbf6xujgQys_TR1yHaY18RBJ6m2r1allplGP3uyKIQChskx9eFlsYxoQg2R-9aRe5g_xhfWZKeo9K7w-RHBX91xZrcBsiek-z5lfsCioH96LMWcaTZfzo/s200/Phonegap-Logo-Simple.png" width="200" /></a></div>
Everyone loves the new hotness of <a href="http://www.ecma-international.org/ecma-262/6.0/">ES2015</a> features but sadly not all of the devices your app is going to run on are able to take advantage of all the features of ES2015. Luckily we can use <a href="https://babeljs.io/">Babel</a> to transpile our ES2015 code into ES5 code that will run everywhere. This way we can write our plugin's JS using the new hotness but still run everywhere.<br />
<br />
I've started working on a version of the PhoneGap Push Plugin in the <a href="https://github.com/phonegap/phonegap-plugin-push/tree/es6">es6 branch</a> that uses ES2015 and what follows is a description of how I set it up.<br />
<br />
<b>Step 1: Add the necessary packages to package.json</b><br />
<br />
We need to add Babel to our <i>package.json</i> so open the file and add the following lines.<br />
<br />
<pre style="background-color: #f7f7f7; border-radius: 3px; box-sizing: border-box; color: #333333; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 11.9px; font-stretch: normal; line-height: 1.45; margin-bottom: 16px; overflow: auto; padding: 16px; word-wrap: normal;"><code style="background: transparent; border-radius: 3px; border: 0px; box-sizing: border-box; display: inline; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 11.9px; line-height: inherit; margin: 0px; overflow: visible; padding: 0px; word-break: normal; word-wrap: normal;"> "devDependencies": {
"babel-cli": "^6.10.1",
"babel-core": "^6.10.4",
"babel-preset-es2015": "^6.9.0"
}</code></pre>
Then run the command:<br />
<br />
<pre style="background-color: #f7f7f7; border-radius: 3px; box-sizing: border-box; color: #333333; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 11.9px; font-stretch: normal; line-height: 1.45; margin-bottom: 16px; overflow: auto; padding: 16px; word-wrap: normal;"><code style="background: transparent; border-radius: 3px; border: 0px; box-sizing: border-box; display: inline; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 11.9px; line-height: inherit; margin: 0px; overflow: visible; padding: 0px; word-break: normal; word-wrap: normal;">npm install</code></pre>
<br />
<b>Step 2: Create a .babelrc file
</b><br />
<br />
We'll have to tell babel how we want the code transpiled from ES2015 to ES5. So create a new file called <i>.babelrc</i> in the root of your plugin project and populate it with the following lines:<br />
<br />
<pre style="background-color: #f7f7f7; border-radius: 3px; box-sizing: border-box; color: #333333; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 11.9px; font-stretch: normal; line-height: 1.45; margin-bottom: 16px; overflow: auto; padding: 16px; word-wrap: normal;"><code style="background: transparent; border-radius: 3px; border: 0px; box-sizing: border-box; display: inline; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 11.9px; line-height: inherit; margin: 0px; overflow: visible; padding: 0px; word-break: normal; word-wrap: normal;">{
"presets": [
"es2015"
]
}</code></pre>
<br />
<b>Step 3: Write your ES2015 code
</b><br />
<br />
I like to add a new directory under the <i>src</i> folder called <i>src/js</i>. It is in this folder that I like to keep my ES2015 compliant code.<br />
<br />
<b>Step 4: Transpile your code</b><br />
<br />
Once your ES2015 code is written it is time to transpile it to ES2015 so you can publish to NPM and Github. For this open <i>package.json</i> and add a new line to the <i>scripts</i> section:<br />
<br />
<pre style="background-color: #f7f7f7; border-radius: 3px; box-sizing: border-box; font-stretch: normal; margin-bottom: 16px; overflow: auto; padding: 16px; word-wrap: normal;"><span style="color: #333333; font-family: "consolas" , "liberation mono" , "menlo" , "courier" , monospace;"><span style="font-size: 11.9px; line-height: 17.255px;"> "scripts": {
"build": "babel src/js --out-dir www",
}</span></span><span style="color: #333333; font-family: "consolas" , "liberation mono" , "menlo" , "courier" , monospace; font-size: 11.9px; line-height: 1.45;">
</span></pre>
<div>
Now if you run the command:<br />
<br /></div>
<pre style="background-color: #f7f7f7; border-radius: 3px; box-sizing: border-box; color: #333333; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 11.9px; font-stretch: normal; line-height: 1.45; margin-bottom: 16px; overflow: auto; padding: 16px; word-wrap: normal;"><code style="background: transparent; border-radius: 3px; border: 0px; box-sizing: border-box; display: inline; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 11.9px; line-height: inherit; margin: 0px; overflow: visible; padding: 0px; word-break: normal; word-wrap: normal;">npm run build</code></pre>
You will find your transpiled code in the <i>www</i> folder of your plugin.<br />
<br />
<b>Step 5: Link to the ES5 code in plugin.xml</b><br />
<br />
It is key that you don't actually deliver the ES2015 code as part of the plugin as you want to make sure your users are executing the ES5 version. To do that open plugin.xml and make sure that your <i>js-module</i> tag refers to code in the <i>www</i> directory like:<br />
<br />
<pre style="background-color: #f7f7f7; border-radius: 3px; box-sizing: border-box; color: #333333; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 11.9px; font-stretch: normal; line-height: 1.45; margin-bottom: 16px; overflow: auto; padding: 16px; word-wrap: normal;"><code style="background: transparent; border-radius: 3px; border: 0px; box-sizing: border-box; display: inline; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 11.9px; line-height: inherit; margin: 0px; overflow: visible; padding: 0px; word-break: normal; word-wrap: normal;"><js-module name="PushNotification" src="www/push.js">
<clobbers target="PushNotification">
</clobbers></js-module></code></pre>
and not:
<br />
<pre style="background-color: #f7f7f7; border-radius: 3px; box-sizing: border-box; color: #333333; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 11.9px; font-stretch: normal; line-height: 1.45; margin-bottom: 16px; overflow: auto; padding: 16px; word-wrap: normal;"><code style="background: transparent; border-radius: 3px; border: 0px; box-sizing: border-box; display: inline; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 11.9px; line-height: inherit; margin: 0px; overflow: visible; padding: 0px; word-break: normal; word-wrap: normal;"><js-module name="PushNotification" src="js/src/push.js">
<clobbers target="PushNotification">
</clobbers></js-module></code></pre>
<b>Bonus Material</b><br />
<b><br /></b>
If you are anything like me, writing ES2015 code is not quite second nature yet. In order to help me along I setup my project to be linted automatically.<br />
<b><br /></b>
<b>Step 1: Add the necessary packages to package.json</b><br />
<br />
We need to add ESLint to our <i>package.json</i> so open the file and add the following lines.<br />
<br />
<pre style="background-color: #f7f7f7; border-radius: 3px; box-sizing: border-box; font-stretch: normal; margin-bottom: 16px; overflow: auto; padding: 16px; word-wrap: normal;"><code style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border-image-outset: initial; border-image-repeat: initial; border-image-slice: initial; border-image-source: initial; border-image-width: initial; border-radius: 3px; border: 0px; box-sizing: border-box; display: inline; margin: 0px; overflow: visible; padding: 0px; word-break: normal; word-wrap: normal;"><span style="color: #333333; font-family: "consolas" , "liberation mono" , "menlo" , "courier" , monospace;"><span style="font-size: 11.9px; line-height: inherit;"> "devDependencies": {
"babel-eslint": "^6.1.0",
</span><span style="font-size: 11.9px; line-height: 17.255px;"> "eslint": "^2.13.1",
"eslint-config-airbnb": "^9.0.1",
"eslint-plugin-import": "^1.9.2",
"eslint-plugin-jsx-a11y": "^1.5.3",
"eslint-plugin-react": "^5.2.2"
</span><span style="font-size: 11.9px; line-height: inherit;"> }</span></span></code></pre>
Then run the command:<br />
<br />
<pre style="background-color: #f7f7f7; border-radius: 3px; box-sizing: border-box; color: #333333; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 11.9px; font-stretch: normal; line-height: 1.45; margin-bottom: 16px; overflow: auto; padding: 16px; word-wrap: normal;"><code style="background: transparent; border-radius: 3px; border: 0px; box-sizing: border-box; display: inline; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 11.9px; line-height: inherit; margin: 0px; overflow: visible; padding: 0px; word-break: normal; word-wrap: normal;">npm install</code></pre>
<br />
<b>Step 2: Create a .eslintrc file
</b><br />
<br />
We'll have to tell ESLint how we want the code linted. So create a new file called <i>.eslintrc</i> in the root of your plugin project and populate it with the following lines:<br />
<br />
<pre style="background-color: #f7f7f7; border-radius: 3px; box-sizing: border-box; font-stretch: normal; margin-bottom: 16px; overflow: auto; padding: 16px; word-wrap: normal;"><span style="color: #333333; font-family: "consolas" , "liberation mono" , "menlo" , "courier" , monospace;"><span style="font-size: 11.9px; line-height: 17.255px;">{
"extends": "airbnb",
"parser": "babel-eslint",
"ecmaFeatures": {
"experimentalObjectRestSpread": true
},
"rules": {
"spaced-comment": 0,
"no-console": 0,
"no-unused-expressions": [2, { "allowShortCircuit": true }]
},
"env": {
"node": true,
"mocha": true,
"browser": true
}
}</span></span><span style="color: #333333; font-family: "consolas" , "liberation mono" , "menlo" , "courier" , monospace; font-size: 11.9px; line-height: 1.45;">
</span></pre>
<div>
<b>Step 3: Setup Your Editor</b></div>
<div>
<br /></div>
<div>
Not sure what editor you are using to write JS but I'm using <a href="https://atom.io/">Atom</a> at the moment so I have installed the <a href="https://github.com/AtomLinter/linter-eslint">linter-eslint</a> package which automatically picks up my <i>.eslintrc</i> file and lints my code on the fly.</div>
<div>
<br /></div>
<div>
Happy ES2015 coding everyone!</div>
<br />Simon MacDonaldhttp://www.blogger.com/profile/14749383583517044214noreply@blogger.com0tag:blogger.com,1999:blog-72386855013225666.post-7658232407046483122016-05-22T10:32:00.000-04:002016-06-27T12:18:57.687-04:00Apps Crashing with phonegap-plugin-push and Google Play Services 9.0.0Late last week Google pushed a new version of Google Play Services out to phones and since them some users of the phonegap-plugin-push have been seeing crashes in their app. The stack trace for that crash looks like this:<br />
<br />
<pre style="background-color: #f7f7f7; border-radius: 3px; box-sizing: border-box; color: #333333; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 11.9px; font-stretch: normal; line-height: 1.45; margin-bottom: 16px; overflow: auto; padding: 16px; word-wrap: normal;"><code style="background: transparent; border-radius: 3px; border: 0px; box-sizing: border-box; display: inline; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 11.9px; line-height: inherit; margin: 0px; overflow: visible; padding: 0px; word-break: normal; word-wrap: normal;">05-22 16:21:42.868 10979 11117 E AndroidRuntime: java.lang.IncompatibleClassChangeError: The method 'java.io.File android.support.v4.content.ContextCompat.getNoBackupFilesDir(android.content.Context)' was expected to be of type virtual but instead was found to be of type direct (declaration of 'com.google.android.gms.iid.zzd' appears in /data/app/io.cordova.hellocordova-1/base.apk)
05-22 16:21:42.868 10979 11117 E AndroidRuntime: at com.google.android.gms.iid.zzd.zzeC(Unknown Source)
05-22 16:21:42.868 10979 11117 E AndroidRuntime: at com.google.android.gms.iid.zzd.<init>(Unknown Source)
05-22 16:21:42.868 10979 11117 E AndroidRuntime: at com.google.android.gms.iid.zzd.<init>(Unknown Source)
05-22 16:21:42.868 10979 11117 E AndroidRuntime: at com.google.android.gms.iid.InstanceID.zza(Unknown Source)
05-22 16:21:42.868 10979 11117 E AndroidRuntime: at com.google.android.gms.iid.InstanceID.getInstance(Unknown Source)
05-22 16:21:42.868 10979 11117 E AndroidRuntime: at com.adobe.phonegap.push.PushPlugin$1.run(PushPlugin.java:75)
05-22 16:21:42.868 10979 11117 E AndroidRuntime: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
05-22 16:21:42.868 10979 11117 E AndroidRuntime: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
05-22 16:21:42.868 10979 11117 E AndroidRuntime: at java.lang.Thread.run(Thread.java:818)
05-22 16:21:42.882 5060 6828 W ActivityManager: Force finishing activity io.cordova.hellocordova/.MainActivity</init></init></code></pre>
The crash is being cause because of a incompatibility between the newly released Google Play Services and Android Support Library v4. The phonegap-plugin-push does not use Android Support Library v4 but another plugin in your app may. You can check by doing:<br />
<pre style="background-color: #f7f7f7; border-radius: 3px; box-sizing: border-box; color: #333333; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 11.9px; font-stretch: normal; line-height: 1.45; margin-bottom: 16px; overflow: auto; padding: 16px; word-wrap: normal;"><code style="background: transparent; border-radius: 3px; border: 0px; box-sizing: border-box; display: inline; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 11.9px; line-height: inherit; margin: 0px; overflow: visible; padding: 0px; word-break: normal; word-wrap: normal;">grep -r com.android.support plugins</code></pre>
To see which other plugin is using Android Support Library v4. Removing that plugin, recompile and reinstall the application fixes the problem. Obviously this is not a desired or long term fix. Trying to figure out a way to prevent this but I fear we will require a new version of Android Support Library v4 from Google.<br />
<br />
Subscribe to the <a href="https://github.com/phonegap/phonegap-plugin-push/issues/909">Issue #909</a> on the plugin's repo for more info and updates.Simon MacDonaldhttp://www.blogger.com/profile/14749383583517044214noreply@blogger.com0tag:blogger.com,1999:blog-72386855013225666.post-78722509522386192082016-03-28T12:38:00.003-04:002016-06-27T12:18:20.265-04:00Cordova Magic CommandsI was inspired by the following tweet:<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="en">
heres some git aliases to fully unite the dark magic and git experiences <a href="https://t.co/ew8xPSAvS6">pic.twitter.com/ew8xPSAvS6</a></div>
— becca (@gardensimulator) <a href="https://twitter.com/gardensimulator/status/713537207282216960">March 26, 2016</a></blockquote>
<br />
conjure = cordova create $1 $2 $3 ; cd $1<br />
summon = cordova platform add $1<br />
banish = cordova platform rm $1<br />
enchant = cordova plugin add $1<br />
curse = cordova plugin rm $1<br />
mix = cordova build $1<br />
cast = cordova run $1<br />
spells = cordova platforms ; cordova plugins<br />
<br />
You can see the commands in action in this terminal session recording:<br />
<br />
<script async="" charset="utf-8" src="//platform.twitter.com/widgets.js"></script>
To create my own set of magic commands for Cordova. You can grab the additions I put into my <a href="https://gist.github.com/macdonst/d9b02b2eed56f11ef1f3">.bash_profile file from this gist</a>.<script async="" id="asciicast-bm6bquc969szm1e981kv7r17h" src="https://asciinema.org/a/bm6bquc969szm1e981kv7r17h.js" type="text/javascript"></script><br />
There is no real good reason for this other than I giggle to myself everytime I enchant or curse a plugin.
Simon MacDonaldhttp://www.blogger.com/profile/14749383583517044214noreply@blogger.com0tag:blogger.com,1999:blog-72386855013225666.post-27749405291649283302015-10-27T10:41:00.001-04:002016-06-27T12:25:44.266-04:00PhoneGap-Plugin-Push Version 1.4.0 Has Been Released<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmAerZty0lTA_i_5FBwCQS_2eIbf6xujgQys_TR1yHaY18RBJ6m2r1allplGP3uyKIQChskx9eFlsYxoQg2R-9aRe5g_xhfWZKeo9K7w-RHBX91xZrcBsiek-z5lfsCioH96LMWcaTZfzo/s1600/Phonegap-Logo-Simple.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmAerZty0lTA_i_5FBwCQS_2eIbf6xujgQys_TR1yHaY18RBJ6m2r1allplGP3uyKIQChskx9eFlsYxoQg2R-9aRe5g_xhfWZKeo9K7w-RHBX91xZrcBsiek-z5lfsCioH96LMWcaTZfzo/s200/Phonegap-Logo-Simple.png" width="200" /></a></div>
The latest release of the <a href="https://github.com/phonegap/phonegap-plugin-push">PushPlugin</a> is now available on npm. This release is the long awaited release that is fully tested with iOS9. I was able to test on an iPhone 6+ running iOS 8.4.1, iPod Touch running iOS 9.0.2 and an iPad Air 2 running iOS 9.1.0. Please let me know if you run into any problems with this release.<br />
<br />
On Android the switch over to using Gradle is now complete. The deprecated gcm.jar has been removed from the plugin and replaced with the Google Play Services GCM framework. Even better news is that <a href="https://build.phonegap.com/">PhoneGap Build</a> now <a href="http://phonegap.com/blog/2015/09/28/android-using-gradle/">supports Gradle builds</a>.<br />
<br />
The big feature that people have been clamoring for is background or silent notifications. It is now possible for your 'notification' event handler to run when you app is in the background on <a href="https://github.com/phonegap/phonegap-plugin-push#background-notifications-1">iOS</a> and <a href="https://github.com/phonegap/phonegap-plugin-push#background-notifications">Android</a> (support for Windows coming soon).<br />
<h2>
<a aria-hidden="true" class="anchor" href="https://www.blogger.com/blogger.g?blogID=72386855013225666#140-2015-10-27" id="user-content-140-2015-10-27"><span class="octicon octicon-link"></span></a><a href="https://github.com/phonegap/phonegap-plugin-push/tree/1.4.0">1.4.0</a> (2015-10-27)</h2>
<a href="https://github.com/phonegap/phonegap-plugin-push/compare/1.3.0...1.4.0">Full Changelog</a><br />
<strong>Implemented enhancements:</strong><br />
<ul>
<li>Use Google's InstanceID API <a href="https://github.com/phonegap/phonegap-plugin-push/issues/188">#188</a></li>
</ul>
<strong>Closed issues:</strong><br />
<ul>
<li>How to handle a re-installed app? <a href="https://github.com/phonegap/phonegap-plugin-push/issues/203">#203</a></li>
<li>interactive push notifications? <a href="https://github.com/phonegap/phonegap-plugin-push/issues/266">#266</a></li>
<li>Empty registrationId Android <a href="https://github.com/phonegap/phonegap-plugin-push/issues/265">#265</a></li>
<li>Run callback when clicking of notification body <a href="https://github.com/phonegap/phonegap-plugin-push/issues/261">#261</a></li>
<li>Android BUILD FAILED <a href="https://github.com/phonegap/phonegap-plugin-push/issues/251">#251</a></li>
<li>Re-register <a href="https://github.com/phonegap/phonegap-plugin-push/issues/250">#250</a></li>
<li>how to work in background ? <a href="https://github.com/phonegap/phonegap-plugin-push/issues/249">#249</a></li>
<li>installing plugin <a href="https://github.com/phonegap/phonegap-plugin-push/issues/244">#244</a></li>
<li>No Sound and vibration <a href="https://github.com/phonegap/phonegap-plugin-push/issues/242">#242</a></li>
<li>Unable to build apk <a href="https://github.com/phonegap/phonegap-plugin-push/issues/241">#241</a></li>
<li>still having problems with build. <a href="https://github.com/phonegap/phonegap-plugin-push/issues/239">#239</a></li>
<li>Registering on iOS 9 <a href="https://github.com/phonegap/phonegap-plugin-push/issues/238">#238</a></li>
<li>Custom sound repeated multiple times on Android <a href="https://github.com/phonegap/phonegap-plugin-push/issues/237">#237</a></li>
<li>Android: status bar notification is not shown <a href="https://github.com/phonegap/phonegap-plugin-push/issues/236">#236</a></li>
<li>Multiple Push Notifications - phonegap build <a href="https://github.com/phonegap/phonegap-plugin-push/issues/234">#234</a></li>
<li> error: cannot find symbol String token = InstanceID.getInstance(getApplicationContext()).getToken(senderID, GCM); <a href="https://github.com/phonegap/phonegap-plugin-push/issues/231">#231</a></li>
<li>Problem using "ledColor" and "VibrationPattern" <a href="https://github.com/phonegap/phonegap-plugin-push/issues/229">#229</a></li>
<li>Notification event receive, but not notification showing on android <a href="https://github.com/phonegap/phonegap-plugin-push/issues/228">#228</a></li>
<li>Events for registration not being fired <a href="https://github.com/phonegap/phonegap-plugin-push/issues/227">#227</a></li>
<li>'registration' event not firing on windows phone <a href="https://github.com/phonegap/phonegap-plugin-push/issues/224">#224</a></li>
<li>Can i subscribe to a topic in using plugin? <a href="https://github.com/phonegap/phonegap-plugin-push/issues/219">#219</a></li>
<li>GCMIntentService.java:472: error: cannot find symbol iconColor <a href="https://github.com/phonegap/phonegap-plugin-push/issues/217">#217</a></li>
<li>Push Plugin registering on iOS 9 Devices but not showing Notification <a href="https://github.com/phonegap/phonegap-plugin-push/issues/216">#216</a></li>
<li>Receiving a notification "outside app" while in it? <a href="https://github.com/phonegap/phonegap-plugin-push/issues/213">#213</a></li>
<li>iOS push not working for device tokens when spaces removed <a href="https://github.com/phonegap/phonegap-plugin-push/issues/212">#212</a></li>
<li>Error: Plugin PushPlugin failed to install. <a href="https://github.com/phonegap/phonegap-plugin-push/issues/210">#210</a></li>
<li>Build error <a href="https://github.com/phonegap/phonegap-plugin-push/issues/205">#205</a></li>
<li>Android push.on('registration', cb) fires correctly on device, but not in emulator. <a href="https://github.com/phonegap/phonegap-plugin-push/issues/204">#204</a></li>
<li>1.3.0 version not compatible with "crosswalk" by PGB <a href="https://github.com/phonegap/phonegap-plugin-push/issues/199">#199</a></li>
<li>How to get data on didReceiveNotification Background Process <a href="https://github.com/phonegap/phonegap-plugin-push/issues/198">#198</a></li>
<li>PushNotification is not defined in some devices <a href="https://github.com/phonegap/phonegap-plugin-push/issues/196">#196</a></li>
<li>not getting notifications on the Android device <a href="https://github.com/phonegap/phonegap-plugin-push/issues/195">#195</a></li>
<li>Installation Errors <a href="https://github.com/phonegap/phonegap-plugin-push/issues/186">#186</a></li>
<li>IOS: on registration fired twice <a href="https://github.com/phonegap/phonegap-plugin-push/issues/185">#185</a></li>
<li>Build failed with exit code 8 <a href="https://github.com/phonegap/phonegap-plugin-push/issues/184">#184</a></li>
<li>iOS: Not able to schedule local notification after adding the plugin <a href="https://github.com/phonegap/phonegap-plugin-push/issues/183">#183</a></li>
<li>How to show multiple notifications individually in android? <a href="https://github.com/phonegap/phonegap-plugin-push/issues/181">#181</a></li>
<li>iOS init option type <a href="https://github.com/phonegap/phonegap-plugin-push/issues/180">#180</a></li>
<li>Building for Android is a quest <a href="https://github.com/phonegap/phonegap-plugin-push/issues/179">#179</a></li>
<li>How do i tell if the user open the app by tapping the notification? <a href="https://github.com/phonegap/phonegap-plugin-push/issues/176">#176</a></li>
<li>IOS custom push sound when app is in background <a href="https://github.com/phonegap/phonegap-plugin-push/issues/175">#175</a></li>
<li>Hi guys please post full working procedure, I'm not able to get registration id also. Please help <a href="https://github.com/phonegap/phonegap-plugin-push/issues/174">#174</a></li>
<li>Has anyone tested this plugin on windows? <a href="https://github.com/phonegap/phonegap-plugin-push/issues/173">#173</a></li>
</ul>
Simon MacDonaldhttp://www.blogger.com/profile/14749383583517044214noreply@blogger.com0tag:blogger.com,1999:blog-72386855013225666.post-48288073718777888172015-09-21T08:30:00.000-04:002015-09-21T08:30:00.411-04:00PhoneGap-Plugin-Push Version 1.3.0 Has Been Released<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmAerZty0lTA_i_5FBwCQS_2eIbf6xujgQys_TR1yHaY18RBJ6m2r1allplGP3uyKIQChskx9eFlsYxoQg2R-9aRe5g_xhfWZKeo9K7w-RHBX91xZrcBsiek-z5lfsCioH96LMWcaTZfzo/s1600/Phonegap-Logo-Simple.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmAerZty0lTA_i_5FBwCQS_2eIbf6xujgQys_TR1yHaY18RBJ6m2r1allplGP3uyKIQChskx9eFlsYxoQg2R-9aRe5g_xhfWZKeo9K7w-RHBX91xZrcBsiek-z5lfsCioH96LMWcaTZfzo/s200/Phonegap-Logo-Simple.png" width="200" /></a></div>
The latest release of the <a href="https://github.com/phonegap/phonegap-plugin-push">PushPlugin</a> is now available on npm. This release switches the plugin over to using Gradle to include the Android Support Framework jar instead of it being included in the plugin. This should fix the issue where this plugin would conflict with others, like the Facebook plugin when building. Just make sure you have version 23 or later of the Android Support Library which can be installed from the Android SDK Manager.<br />
<br />
Unfortunately, PhoneGap Build does not yet support Gradle so if you are using this plugin with PhoneGap Build you will need to use version 1.2.3 or earlier for the time being.<br />
<br />
I know last time I said I would be making sure that iOS9 works with version 1.3.0 but I wanted to get that Gradle change out as quick as I could. Next release 1.4.0 will be full tested with iOS9 and I won't wait a full month, I'll release it just as soon as it's tested.<br />
<br />
<b>Full Change Log</b><br />
<h2>
<a href="https://github.com/phonegap/phonegap-plugin-push/tree/1.3.0">1.3.0</a> (2015-09-21)</h2>
<strong>Implemented enhancements:</strong><br />
<ul>
<li>How to use GCM 3.0 with this plugin? <a href="https://github.com/phonegap/phonegap-plugin-push/issues/127">#127</a></li>
<li>Android: possibility to send a notification with a title and without message <a href="https://github.com/phonegap/phonegap-plugin-push/issues/122">#122</a></li>
<li>Enhancement - Led, Vibration Pattern, Priority on Android <a href="https://github.com/phonegap/phonegap-plugin-push/issues/105">#105</a></li>
</ul>
<strong>Fixed bugs:</strong><br />
<ul>
<li>It is using in gcm data.additionalData ? <a href="https://github.com/phonegap/phonegap-plugin-push/issues/126">#126</a></li>
<li>iOS notification from cold boot <a href="https://github.com/phonegap/phonegap-plugin-push/issues/117">#117</a></li>
<li>Notification LED is not working <a href="https://github.com/phonegap/phonegap-plugin-push/issues/97">#97</a></li>
</ul>
<strong>Closed issues:</strong><br />
<ul>
<li>Know which version is used in build service <a href="https://github.com/phonegap/phonegap-plugin-push/issues/151">#151</a></li>
<li>Registration is not working in IOS9 <a href="https://github.com/phonegap/phonegap-plugin-push/issues/150">#150</a></li>
<li>build fail on android <a href="https://github.com/phonegap/phonegap-plugin-push/issues/149">#149</a></li>
<li>iconColor does not set icon background on Android <a href="https://github.com/phonegap/phonegap-plugin-push/issues/146">#146</a></li>
<li>Prevent windows toast notification when in foreground <a href="https://github.com/phonegap/phonegap-plugin-push/issues/145">#145</a></li>
<li>How to implement push notification for ios with this plug-in? <a href="https://github.com/phonegap/phonegap-plugin-push/issues/143">#143</a></li>
<li>After installing this plugin I can't build on Android <a href="https://github.com/phonegap/phonegap-plugin-push/issues/141">#141</a></li>
<li>version 1.2.3 <a href="https://github.com/phonegap/phonegap-plugin-push/issues/134">#134</a></li>
<li>New inbox style on android <a href="https://github.com/phonegap/phonegap-plugin-push/issues/131">#131</a></li>
<li>impossible to install the phonegap-plugin-push Error <a href="https://github.com/phonegap/phonegap-plugin-push/issues/130">#130</a></li>
<li>Hello, i am developing a cordova app which requires push notifications to be sent to users android phone, so i tried using this new phonegap push plugin as old one is deprecated, and it keeps giving me an error in console: Uncaught ReferenceError: module is not defined --- Line 154 Push.js and i dont have much experience with cordova, so can anyone assist me ? <a href="https://github.com/phonegap/phonegap-plugin-push/issues/128">#128</a></li>
<li>INVALID_REGISTRATION when http post request with to IOS <a href="https://github.com/phonegap/phonegap-plugin-push/issues/123">#123</a></li>
<li>Andriod :More than 2 notifications in status bar it is not works. <a href="https://github.com/phonegap/phonegap-plugin-push/issues/121">#121</a></li>
<li>Release notes for 1.2.x <a href="https://github.com/phonegap/phonegap-plugin-push/issues/119">#119</a></li>
<li>Google cloud messaging GCM - Push Notification not being sent (Server Side) <a href="https://github.com/phonegap/phonegap-plugin-push/issues/110">#110</a></li>
</ul>
<h2>
<a href="https://github.com/phonegap/phonegap-plugin-push/tree/1.2.3">1.2.3</a> (2015-09-08)</h2>
<strong>Fixed bugs:</strong><br />
<ul>
<li>Notification not showing..... <a href="https://github.com/phonegap/phonegap-plugin-push/issues/101">#101</a></li>
<li>Same data payload for messages with action buttons <a href="https://github.com/phonegap/phonegap-plugin-push/issues/90">#90</a></li>
</ul>
<strong>Closed issues:</strong><br />
<ul>
<li>Notification doesn't show the app icon <a href="https://github.com/phonegap/phonegap-plugin-push/issues/112">#112</a></li>
<li>Notification doesn't show the app icon <a href="https://github.com/phonegap/phonegap-plugin-push/issues/111">#111</a></li>
<li>Issue with plugin facebook connect <a href="https://github.com/phonegap/phonegap-plugin-push/issues/107">#107</a></li>
<li>Cordova Support <a href="https://github.com/phonegap/phonegap-plugin-push/issues/99">#99</a></li>
<li>Uncaught ReferenceError: cordova is not defined, http://localhost:8100/lib/push.js, Line: 7 <a href="https://github.com/phonegap/phonegap-plugin-push/issues/98">#98</a></li>
<li>Notifications never received on Android <a href="https://github.com/phonegap/phonegap-plugin-push/issues/96">#96</a></li>
<li>How know the way the app was launched <a href="https://github.com/phonegap/phonegap-plugin-push/issues/95">#95</a></li>
<li>Android, example doesn't work when it goes into background <a href="https://github.com/phonegap/phonegap-plugin-push/issues/94">#94</a></li>
<li>Utilizing push plugin <a href="https://github.com/phonegap/phonegap-plugin-push/issues/91">#91</a></li>
</ul>
<h2>
<a href="https://github.com/phonegap/phonegap-plugin-push/tree/1.2.2">1.2.2</a> (2015-08-31)</h2>
<strong>Closed issues:</strong><br />
<ul>
<li>PushPlugin notification icon is too big <a href="https://github.com/phonegap/phonegap-plugin-push/issues/88">#88</a></li>
</ul>
<h2>
<a href="https://github.com/phonegap/phonegap-plugin-push/tree/1.2.1">1.2.1</a> (2015-08-31)</h2>
<strong>Implemented enhancements:</strong><br />
<ul>
<li>Question about GCM Notifications and data in the message payload <a href="https://github.com/phonegap/phonegap-plugin-push/issues/87">#87</a></li>
</ul>
<strong>Fixed bugs:</strong><br />
<ul>
<li>Notification callback for pushes without a message <a href="https://github.com/phonegap/phonegap-plugin-push/issues/80">#80</a></li>
</ul>
<strong>Closed issues:</strong><br />
<ul>
<li>Android: No notification displayed on device. Notification event never called. <a href="https://github.com/phonegap/phonegap-plugin-push/issues/86">#86</a></li>
<li>it seem no wp8 version for now <a href="https://github.com/phonegap/phonegap-plugin-push/issues/56">#56</a></li>
</ul>
Simon MacDonaldhttp://www.blogger.com/profile/14749383583517044214noreply@blogger.com4tag:blogger.com,1999:blog-72386855013225666.post-39581728962374718982015-08-25T18:32:00.000-04:002015-08-25T18:32:13.980-04:00PhoneGap-Plugin-Push Version 1.2.0 Released!<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmAerZty0lTA_i_5FBwCQS_2eIbf6xujgQys_TR1yHaY18RBJ6m2r1allplGP3uyKIQChskx9eFlsYxoQg2R-9aRe5g_xhfWZKeo9K7w-RHBX91xZrcBsiek-z5lfsCioH96LMWcaTZfzo/s1600/Phonegap-Logo-Simple.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmAerZty0lTA_i_5FBwCQS_2eIbf6xujgQys_TR1yHaY18RBJ6m2r1allplGP3uyKIQChskx9eFlsYxoQg2R-9aRe5g_xhfWZKeo9K7w-RHBX91xZrcBsiek-z5lfsCioH96LMWcaTZfzo/s200/Phonegap-Logo-Simple.png" width="200" /></a></div>
The latest release of the <a href="https://github.com/phonegap/phonegap-plugin-push">PushPlugin</a> is now available on npm. This release focuses on bringing a number of enhancements to Android notifications.<br />
<br />
Fear not fans of other platforms as subsequent releases will have more features for your OS of choice. In fact release 1.3.0 will center around iOS9 support.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjysdafqeK2lIkHDqSWlNbxN_I2yAb_M_gN3KlPYcIDb1MgHkdE73pdHK1VZdiBR3R0ApiQtcx1_1Glihyphenhyphens3ICkjQX6xXT8iNj9SAa2Kh8oAQnMbPQSc7eXTFuZzNd5XTXqaWo2UsoRwGs-/s1600/2015-08-25+16.08.00.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="130" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjysdafqeK2lIkHDqSWlNbxN_I2yAb_M_gN3KlPYcIDb1MgHkdE73pdHK1VZdiBR3R0ApiQtcx1_1Glihyphenhyphens3ICkjQX6xXT8iNj9SAa2Kh8oAQnMbPQSc7eXTFuZzNd5XTXqaWo2UsoRwGs-/s200/2015-08-25+16.08.00.png" width="200" /></a></div>
<b>Picture Notifications</b><br />
<br />
Embed a large picture in your notification. You let the plugin know you want to display a picture by setting the <span style="background-color: cyan;">style</span> of the push to <span style="background-color: cyan;">picture</span> and then giving it a <span style="background-color: cyan;">picture</span> property.<br />
<br />
For example:<br />
<blockquote>
<pre>{
title:"Big Picture",
message: "This is my big picture message",
style: "picture",
picture: "http://36.media.tumblr.com/c066cc2238103856c9ac506faa6f3bc2/tumblr_nmstmqtuo81tssmyno1_1280.jpg",
summaryText: "The internet is built on cat pictures"
}</pre>
</blockquote>
Produces the cat picture on the right.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRjwFIamC4C-qCZq0trymPPwINk_3odL9MUE5RI7zCTcgWkunivUsat_tV6X9eR_je-RbpOtXmPaR15WG_IYs6EY-1UZa5MFGHK3TirpMWj30zSqUa50u91DbIONJr8Q_VthjVal3BQ0TL/s1600/2015-08-25+14.01.35.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="93" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRjwFIamC4C-qCZq0trymPPwINk_3odL9MUE5RI7zCTcgWkunivUsat_tV6X9eR_je-RbpOtXmPaR15WG_IYs6EY-1UZa5MFGHK3TirpMWj30zSqUa50u91DbIONJr8Q_VthjVal3BQ0TL/s320/2015-08-25+14.01.35.png" width="320" /></a></div>
<b>Inbox Notifications</b><br />
<br />
Instead of stacking notifications in the tray you can now add multiple notifications to a single entry in the tray by setting the <span style="background-color: cyan;">style</span> to <span style="background-color: cyan;">inbox</span>. The first notification that arrives looks like normal but the subsequent ones will look like an inbox.<br />
<br />
For example:<br />
<blockquote>
<pre>{
title:"My Title",
message: "My first message",
style: "inbox",
summaryText: "There are %n% notifications"
}</pre>
</blockquote>
Followed by:<br />
<blockquote>
<pre>{
title:"My Title",
message: "My second message",
style: "inbox",
summaryText: "There are %n% notifications"
}</pre>
</blockquote>
Produces the notification above.<br />
<div>
<br /></div>
Finally, my favourite new addition...<br />
<br />
<b>Action Buttons</b><br />
<br />
Your notification can include action buttons. If you wish to include an icon along with the button name they must be placed in the <span style="background-color: cyan;">res/drawable</span> directory of your Android project. Then you can send the following JSON from GCM:
<br />
<blockquote>
<pre>{
title:"AUX Scrum",
message: "Scrum: Daily touchbase @ 10am Please be on time so we can cover everything on the agenda.",
actions: [
{ icon: "emailGuests", title: "EMAIL GUESTS", callback: "app.emailGuests"},
{ icon: "snooze", title: "SNOOZE", callback: "app.snooze"},
]
}</pre>
</blockquote>
This will produce the following notification in your tray:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://cloud.githubusercontent.com/assets/353180/9313435/02554d2a-44f1-11e5-8cd9-0aadd1e02b18.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="144" src="https://cloud.githubusercontent.com/assets/353180/9313435/02554d2a-44f1-11e5-8cd9-0aadd1e02b18.png" width="320" /></a></div>
<br />
When the user clicks on one of the buttons it will execute the JavaScript code you specified as a callback for that button.<br />
<br />
<div class="separator" style="clear: both;">
Check out the plugin's <a href="https://github.com/phonegap/phonegap-plugin-push/blob/master/README.md">README</a> for more details.</div>
<br />
<b>Full Change Log</b><br />
<b>
<a href="https://github.com/phonegap/phonegap-plugin-push/tree/1.2.0">1.2.0</a> (2015-08-25)</b><br />
<strong><br /></strong>
<strong>Implemented enhancements:</strong><br />
<ul>
<li>Implement Big Picture Style for Android <a href="https://github.com/phonegap/phonegap-plugin-push/issues/75">#75</a></li>
<li>Implement Inbox style for Android <a href="https://github.com/phonegap/phonegap-plugin-push/issues/74">#74</a></li>
<li>on("registration" is not getting called... <a href="https://github.com/phonegap/phonegap-plugin-push/issues/66">#66</a></li>
<li>multi-line text support <a href="https://github.com/phonegap/phonegap-plugin-push/issues/63">#63</a></li>
<li>Add image property to iOS and Android <a href="https://github.com/phonegap/phonegap-plugin-push/issues/39">#39</a></li>
<li>Programmatically register <a href="https://github.com/phonegap/phonegap-plugin-push/issues/31">#31</a></li>
</ul>
<strong>Fixed bugs:</strong><br />
<ul>
<li>Pushes being deleted from notification bar when cold start <a href="https://github.com/phonegap/phonegap-plugin-push/issues/67">#67</a></li>
<li>No default sound in Android <a href="https://github.com/phonegap/phonegap-plugin-push/issues/53">#53</a></li>
<li>Multiple push notification problem <a href="https://github.com/phonegap/phonegap-plugin-push/issues/48">#48</a></li>
</ul>
<strong>Closed issues:</strong><br />
<ul>
<li>oficial push plugin and windows and wp8 compatibility <a href="https://github.com/phonegap/phonegap-plugin-push/issues/71">#71</a></li>
<li>On Android, GCMIntentService.onError() doesn't get passed to the JavaScript "error" event <a href="https://github.com/phonegap/phonegap-plugin-push/issues/65">#65</a></li>
<li>Android: add property to vibrate phone on received notification <a href="https://github.com/phonegap/phonegap-plugin-push/issues/61">#61</a></li>
<li>push.on => "registration" will trigger twice times that only in iOS <a href="https://github.com/phonegap/phonegap-plugin-push/issues/57">#57</a></li>
<li>Publish plugin to PhoneGap Build <a href="https://github.com/phonegap/phonegap-plugin-push/issues/22">#22</a></li>
</ul>
<strong>Merged pull requests:</strong><br />
<ul>
<li>usage typo <a href="https://github.com/phonegap/phonegap-plugin-push/pull/60">#60</a> (<a href="https://github.com/ericb">ericb</a>)</li>
<li>Updating example to sync with docs <a href="https://github.com/phonegap/phonegap-plugin-push/pull/52">#52</a> (<a href="https://github.com/rakatyal">rakatyal</a>)</li>
</ul>
Simon MacDonaldhttp://www.blogger.com/profile/14749383583517044214noreply@blogger.com2tag:blogger.com,1999:blog-72386855013225666.post-45573948378914340092015-07-27T12:37:00.000-04:002015-07-27T12:37:17.213-04:00PhoneGap-Plugin-Push Version 1.1.1 Released!<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmAerZty0lTA_i_5FBwCQS_2eIbf6xujgQys_TR1yHaY18RBJ6m2r1allplGP3uyKIQChskx9eFlsYxoQg2R-9aRe5g_xhfWZKeo9K7w-RHBX91xZrcBsiek-z5lfsCioH96LMWcaTZfzo/s1600/Phonegap-Logo-Simple.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmAerZty0lTA_i_5FBwCQS_2eIbf6xujgQys_TR1yHaY18RBJ6m2r1allplGP3uyKIQChskx9eFlsYxoQg2R-9aRe5g_xhfWZKeo9K7w-RHBX91xZrcBsiek-z5lfsCioH96LMWcaTZfzo/s200/Phonegap-Logo-Simple.png" width="200" /></a></div>
Back during PhoneGap Day EU 2015 I announced our new <a href="https://github.com/phonegap/phonegap-plugin-push">PushPlugin</a> with it's normalized API and a promise of continued support. With the release of the 1.1.1 version of the plugin we continue to fulfill that promise with some new features and bug fixes.<br />
<br />
The most exciting new feature in this release is official support for the Windows platform! This is thanks to the wonderful team at <a href="http://www.microsoft.com/">Microsoft</a> who contributed to the plugin to make it happen. Special thanks to Raghav Katyal and Nikhi Khandelwal!<br />
<br />
On the Android side of things you now have way more options on how to set what icon is displayed with your push notifications:<br />
<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiC3pi79KPkXJqqR26H0pdql5ViMglYHYupsawVwOG6KxJavxbCuYXFVlZS4tMGA5gpUAOuy9Jr-sTidftOKHFEE1nPl_t8IprrR0qfChmDByOTgXQCKi25NWY2TOM3s7hM7SJZe2VMc-Fw/s1600/2df00c3c-3190-11e5-8552-96201fb4424b.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="51" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiC3pi79KPkXJqqR26H0pdql5ViMglYHYupsawVwOG6KxJavxbCuYXFVlZS4tMGA5gpUAOuy9Jr-sTidftOKHFEE1nPl_t8IprrR0qfChmDByOTgXQCKi25NWY2TOM3s7hM7SJZe2VMc-Fw/s320/2df00c3c-3190-11e5-8552-96201fb4424b.png" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDJy7L94b_qoBdFxOHK26Bj-h-GOZuW_7I_-9jgYRqXB3TcgNTnjdOmhZPnLHoCAkmXs-bv-U4NT_UaG7WuL3cPd0DajDuU5myTQtFpUy12SQNPjqa6rUYxUu-wq9ud1yBo9P2sKRfMsu1/s1600/2df3276e-3190-11e5-842a-c8cd95615ab0.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="52" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDJy7L94b_qoBdFxOHK26Bj-h-GOZuW_7I_-9jgYRqXB3TcgNTnjdOmhZPnLHoCAkmXs-bv-U4NT_UaG7WuL3cPd0DajDuU5myTQtFpUy12SQNPjqa6rUYxUu-wq9ud1yBo9P2sKRfMsu1/s320/2df3276e-3190-11e5-842a-c8cd95615ab0.png" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhImA_GYZ6hT2Mn7LrVw1dpVhYpkgwvNomods-V9kSrelTpC0phcAkrGSiILWoxkoFX2z4dm_Sdq_bf-6njPyFzWXBhCNg6sdqJ1VQwczzWuanfkL27EvXwpFcH6M9b_by-recKCAGF2E4l/s1600/2df19052-3190-11e5-8c16-a355c59209f3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="56" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhImA_GYZ6hT2Mn7LrVw1dpVhYpkgwvNomods-V9kSrelTpC0phcAkrGSiILWoxkoFX2z4dm_Sdq_bf-6njPyFzWXBhCNg6sdqJ1VQwczzWuanfkL27EvXwpFcH6M9b_by-recKCAGF2E4l/s320/2df19052-3190-11e5-8c16-a355c59209f3.png" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVoDOLfbFLw6B-68TfzpuyAc-mqt9ZaspQBdBy8XW8rMMDMUjwwySjwYUF-iBL5TBfrXcn2w0QUWQi63PdVjxJEzN9a9sPuaWEvLEAbj8tvv1lIvkluLjTcP9DS3uiI0xoNBv5fhdOA4sZ/s1600/2df48028-3190-11e5-8176-fe8b3f7c5aab.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="49" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVoDOLfbFLw6B-68TfzpuyAc-mqt9ZaspQBdBy8XW8rMMDMUjwwySjwYUF-iBL5TBfrXcn2w0QUWQi63PdVjxJEzN9a9sPuaWEvLEAbj8tvv1lIvkluLjTcP9DS3uiI0xoNBv5fhdOA4sZ/s320/2df48028-3190-11e5-8176-fe8b3f7c5aab.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEie7y6KTPAmtvM0WkaGEjmM1ai9fekqFz7RaBUxx3saS_7pSkOICf5jqJ7zM7_6Ef_wUeUBr1o83IiYgBqFan5wAheg47UXGry9_y1bkfAjwJNBgRZPSD01dLgeL21Xx9PAZ33qxULmZBdp/s1600/2df0ab06-3190-11e5-9a81-fdb85bb0f5a4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="52" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEie7y6KTPAmtvM0WkaGEjmM1ai9fekqFz7RaBUxx3saS_7pSkOICf5jqJ7zM7_6Ef_wUeUBr1o83IiYgBqFan5wAheg47UXGry9_y1bkfAjwJNBgRZPSD01dLgeL21Xx9PAZ33qxULmZBdp/s320/2df0ab06-3190-11e5-9a81-fdb85bb0f5a4.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Check out the plugin's <a href="https://github.com/phonegap/phonegap-plugin-push/blob/master/README.md">README</a> for more details on how to setup the each of the image types.</div>
<br />
<b>Full Changelog</b><br />
<strong>Implemented enhancements:</strong><br />
<ul>
<li>iOS doesn't add foreground key <a href="https://github.com/phonegap/phonegap-plugin-push/issues/41">#41</a></li>
<li>Android: Notification icon problem <a href="https://github.com/phonegap/phonegap-plugin-push/issues/20">#20</a></li>
<li>iOS badge number <a href="https://github.com/phonegap/phonegap-plugin-push/issues/18">#18</a></li>
<li>How i can set icons for push notifications in status bar and push view in android <a href="https://github.com/phonegap/phonegap-plugin-push/issues/14">#14</a></li>
<li>Support Win8.1 + Phone 8.1 Universal Apps (WNS), drop support for WP8.0 (MPNS) <a href="https://github.com/phonegap/phonegap-plugin-push/issues/13">#13</a></li>
</ul>
<strong>Fixed bugs:</strong><br />
<ul>
<li>iOS only reads out "aps" payload <a href="https://github.com/phonegap/phonegap-plugin-push/issues/29">#29</a></li>
<li>Event not fired when in background <a href="https://github.com/phonegap/phonegap-plugin-push/issues/24">#24</a></li>
<li>Custom notification sound in background mode? <a href="https://github.com/phonegap/phonegap-plugin-push/issues/17">#17</a></li>
</ul>
<strong>Closed issues:</strong><br />
<ul>
<li>iOS only receives first notification in foreground <a href="https://github.com/phonegap/phonegap-plugin-push/issues/42">#42</a></li>
<li>Cannot register on iOS <a href="https://github.com/phonegap/phonegap-plugin-push/issues/30">#30</a></li>
<li>Fix Android paths in src folder <a href="https://github.com/phonegap/phonegap-plugin-push/issues/23">#23</a></li>
<li>PushNotification not defined <a href="https://github.com/phonegap/phonegap-plugin-push/issues/21">#21</a></li>
<li>Error trying to remove the plugin <a href="https://github.com/phonegap/phonegap-plugin-push/issues/19">#19</a></li>
<li>Handling multiple notifications on Android devices <a href="https://github.com/phonegap/phonegap-plugin-push/issues/12">#12</a></li>
<li>PGB (build.phonegap.com) problem <a href="https://github.com/phonegap/phonegap-plugin-push/issues/11">#11</a></li>
<li>reporting location via gcm <a href="https://github.com/phonegap/phonegap-plugin-push/issues/6">#6</a></li>
</ul>
<strong>Merged pull requests:</strong><br />
<ul>
<li>Updating Readme to document toast capable setting <a href="https://github.com/phonegap/phonegap-plugin-push/pull/47">#47</a> (<a href="https://github.com/rakatyal">rakatyal</a>)</li>
<li>fix issue #41 <a href="https://github.com/phonegap/phonegap-plugin-push/pull/44">#44</a> (<a href="https://github.com/Deminetix">Deminetix</a>)</li>
<li>fix issue #42 <a href="https://github.com/phonegap/phonegap-plugin-push/pull/43">#43</a> (<a href="https://github.com/Deminetix">Deminetix</a>)</li>
<li>Adding hyperlinks to README <a href="https://github.com/phonegap/phonegap-plugin-push/pull/40">#40</a> (<a href="https://github.com/rakatyal">rakatyal</a>)</li>
<li>Updating Readme <a href="https://github.com/phonegap/phonegap-plugin-push/pull/37">#37</a> (<a href="https://github.com/rakatyal">rakatyal</a>)</li>
<li>Adding windows support to plugin <a href="https://github.com/phonegap/phonegap-plugin-push/pull/36">#36</a> (<a href="https://github.com/rakatyal">rakatyal</a>)</li>
<li>Raghav/update <a href="https://github.com/phonegap/phonegap-plugin-push/pull/35">#35</a> (<a href="https://github.com/rakatyal">rakatyal</a>)</li>
<li>Adding behavior for different notification types <a href="https://github.com/phonegap/phonegap-plugin-push/pull/28">#28</a> (<a href="https://github.com/rakatyal">rakatyal</a>)</li>
<li>Initial commit to add support for windows universal platform <a href="https://github.com/phonegap/phonegap-plugin-push/pull/15">#15</a> (<a href="https://github.com/rakatyal">rakatyal</a>)</li>
</ul>
Simon MacDonaldhttp://www.blogger.com/profile/14749383583517044214noreply@blogger.com7tag:blogger.com,1999:blog-72386855013225666.post-55712296000167948122015-06-19T15:57:00.000-04:002015-06-19T15:57:05.088-04:00Including Plugins with Cordova Command Line Interface 5<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpsNN5_qrcjjO0L-0t_57sbyd68a-jrii0tG_zyp3o6zprDKrKFXXJQt5gdpjjmbQD3LptAl-rCDwCY7wdzae3hPl0_DsqhFzwgKReIPWm5SI3GntsTg_HkfRp3Ew0AszJmRLnrbJFeshyphenhyphen/s1600/buildbot2013-2.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="169" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpsNN5_qrcjjO0L-0t_57sbyd68a-jrii0tG_zyp3o6zprDKrKFXXJQt5gdpjjmbQD3LptAl-rCDwCY7wdzae3hPl0_DsqhFzwgKReIPWm5SI3GntsTg_HkfRp3Ew0AszJmRLnrbJFeshyphenhyphen/s200/buildbot2013-2.png" width="200" /></a></div>
You may have noticed that things have changed up a bit as of Cordova CLI 5.0.0 release. Specifically, we are now encouraging the the use of <span style="background-color: cyan;"><plugin></span> tags in your <span style="background-color: cyan;">config.xml</span> file over the previously used <span style="background-color: cyan;"><feature></span> tags.<br />
<br />
You may be wondering why you should use the <span style="background-color: cyan;"><plugin></span> tag. The main reason is that when you use the <span style="background-color: cyan;"><plugin></span> tag it will fetch and install the plugin for you during the <span style="background-color: cyan;">cordova prepare</span> phase of building your project.<br />
<br />
So if you have the following feature tags in your current <span style="background-color: cyan;">config.xml</span>:<br />
<pre><feature name="org.apache.cordova.file">
<param name="id" value="org.apache.cordova.file@1.0.1"/>
</feature>
<feature name="org.apache.cordova.file-transfer">
<param name="id" value="org.apache.cordova.file-transfer@0.4.2"/>
</feature>
<feature name="org.apache.cordova.device">
<param name="id" value="org.apache.cordova.device@0.2.8"/>
</feature>
<feature name="com.telerik.plugins.nativepagetransitions">
<param name="id" value="https://github.com/Telerik-Verified-Plugins/NativePageTransitions#0.2.11"/>
</feature>
<feature name="com.phonegap.plugins.pushplugin">
<param name="id" value="https://github.com/phonegap-build/PushPlugin#1979d972b6ab37e28cf2077bc7ebfe706cc4dacd"/>
</feature></pre>
Then you'd just replace it with:<br />
<pre><plugin name="cordova-plugin-file" spec="^2.0.0" />
<plugin name="cordova-plugin-file-transfer" spec="^1.0.0" />
<plugin name="cordova-plugin-device" spec="^1.0.0" />
<plugin name="com.telerik.plugins.nativepagetransitions" spec="https://github.com/Telerik-Verified-Plugins/NativePageTransitions#0.2.11" />
<plugin name="com.phonegap.plugins.pushplugin" spec="https://github.com/phonegap-build/PushPlugin#1979d972b6ab37e28cf2077bc7ebfe706cc4dacd" />
</pre>
You may have noticed that the package ID for <span style="background-color: cyan;">org.apache.cordova.file</span> has changed to <span style="background-color: cyan;">cordova-plugin-file</span>. The is part of the way plugins are now <a href="https://cordova.apache.org/announcements/2015/04/21/plugins-release-and-move-to-npm.html">hosted on npm</a>. You'll notice that all the core plugins (<span style="background-color: cyan;">org.apache.cordova</span>) have been renamed (see table below).<br />
<br />
For non-core plugins you can still download them from a git repository. In order to specify a specific version you use <span style="background-color: cyan;">#versionNumber</span> for example, NativePageTransistion above or to download from a specific commit use <span style="background-color: cyan;">#commitHash</span> for example, PushPlugin above.<br />
<br />
<table style="border: 1px solid black">
<tbody>
<tr>
<th>Old ID</th>
<th>NPM ID</th>
</tr>
<tr>
<td>org.apache.cordova.battery-status</td>
<td>cordova-plugin-battery-status</td>
</tr>
<tr>
<td>org.apache.cordova.camera</td>
<td>cordova-plugin-camera</td>
</tr>
<tr>
<td>org.apache.cordova.contacts</td>
<td>cordova-plugin-contacts</td>
</tr>
<tr>
<td>org.apache.cordova.device</td>
<td>cordova-plugin-device</td>
</tr>
<tr>
<td>org.apache.cordova.device-motion</td>
<td>cordova-plugin-device-motion</td>
</tr>
<tr>
<td>org.apache.cordova.device-orientation</td>
<td>cordova-plugin-device-orientation</td>
</tr>
<tr>
<td>org.apache.cordova.dialogs</td>
<td>cordova-plugin-dialogs</td>
</tr>
<tr>
<td>org.apache.cordova.file</td>
<td>cordova-plugin-file</td>
</tr>
<tr>
<td>org.apache.cordova.file-transfer</td>
<td>cordova-plugin-file-transfer</td>
</tr>
<tr>
<td>org.apache.cordova.geolocation</td>
<td>cordova-plugin-geolocation</td>
</tr>
<tr>
<td>org.apache.cordova.globalization</td>
<td>cordova-plugin-globalization</td>
</tr>
<tr>
<td>org.apache.cordova.inappbrowser</td>
<td>cordova-plugin-inappbrowser</td>
</tr>
<tr>
<td>org.apache.cordova.media-capture</td>
<td>cordova-plugin-media-capture</td>
</tr>
<tr>
<td>org.apache.cordova.media</td>
<td>cordova-plugin-media</td>
</tr>
<tr>
<td>org.apache.cordova.network-information</td>
<td>cordova-plugin-network-information</td>
</tr>
<tr>
<td>org.apache.cordova.splashscreen</td>
<td>cordova-plugin-splashscreen</td>
</tr>
<tr>
<td>org.apache.cordova.statusbar</td>
<td>cordova-plugin-statusbar</td>
</tr>
<tr>
<td>org.apache.cordova.whitelist</td>
<td>cordova-plugin-whitelist</td>
</tr>
<tr>
<td>org.apache.cordova.vibration</td>
<td>cordova-plugin-vibration</td>
</tr>
</tbody></table>
Simon MacDonaldhttp://www.blogger.com/profile/14749383583517044214noreply@blogger.com0tag:blogger.com,1999:blog-72386855013225666.post-75241317515263714182015-06-13T12:55:00.000-04:002015-06-13T12:55:00.043-04:00Mud Hero 2015<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghbH2xJpFrF2iZPqxG6BZfZsxhG_49tCD14xK1vlUsOPKZCuEN4tDFFUW_culAwSgELR1XYQ_IogDKiw0KrpH8ks7qrNPxVEvht0X4nwZsXD5ERcB8BzuE02P_8OKwdcwKL49EJKdzIhPy/s1600/IMG_20150606_123125.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghbH2xJpFrF2iZPqxG6BZfZsxhG_49tCD14xK1vlUsOPKZCuEN4tDFFUW_culAwSgELR1XYQ_IogDKiw0KrpH8ks7qrNPxVEvht0X4nwZsXD5ERcB8BzuE02P_8OKwdcwKL49EJKdzIhPy/s200/IMG_20150606_123125.jpg" width="150" /> </a></div>
So last Saturday Anna and I participated in the <a href="http://www.mudhero.com/en/events/ottawa/">Mud Hero Ottawa</a> run. It was an absolute blast as you can probably tell by looking at the smiles on our faces. We took a bunch of pictures during the day which I have in an <a href="https://goo.gl/photos/KSvbzp6JZgi3GXCo9">album over here</a>.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3zdgermTmyZksSE9Y4VZAi720D32MbtAhlM0eiX7qxC9FCZvXwgU1vQU_TrRYywDhrjEvT6r3U_9X9tTzpj-v4Dw0wp5fw2EK61SYyALeWFnKRQ8oICOnISjlpLOE0YcO9TS37_lNBNJL/s1600/IMG_20150606_104342.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3zdgermTmyZksSE9Y4VZAi720D32MbtAhlM0eiX7qxC9FCZvXwgU1vQU_TrRYywDhrjEvT6r3U_9X9tTzpj-v4Dw0wp5fw2EK61SYyALeWFnKRQ8oICOnISjlpLOE0YcO9TS37_lNBNJL/s200/IMG_20150606_104342.jpg" width="150" /></a></div>
First up Anna ran the kids course which was three 500 meter laps with 6 obstacles. The announcer constantly mentioned to parents to make sure that the kids schools were on tight or else they would lose them in the mud pit. Predictably, this led to a bunch of parents having to dig in the mud pit for their child's missing shoe.<br />
<br />
Anna escaped with both of her shoes but as you can see she got super muddy which I encouraged whole heartedly.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0miECTTwz0Jpn7z7s5fbp7TZ15plPpu4RvDBWw8aoRBdcP1sKzJlqPNhcs9-xyj3lL9dOk9arpUnsa3BfrVv8e5tf2ooEypgE2n7aZWUIifPDe30w3lb3N5zCQ5OMmM765CBtjenc0uLE/s1600/IMG_20150606_122754.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0miECTTwz0Jpn7z7s5fbp7TZ15plPpu4RvDBWw8aoRBdcP1sKzJlqPNhcs9-xyj3lL9dOk9arpUnsa3BfrVv8e5tf2ooEypgE2n7aZWUIifPDe30w3lb3N5zCQ5OMmM765CBtjenc0uLE/s200/IMG_20150606_122754.jpg" width="150" /></a></div>
Then I finally had my chance to run the 6km course with 20 obstacles with my buddy Hicham and one of his neighbours. There were some really fun obstacles like walls, tires, ropes, slides but by far the most fun was the waist deep (or deeper) mud. You can see in this pic I've just come down the slide and luckily retrieved my hat from the mud puddle.<br />
<br />
After the race the team from Muscle Mlk was there to hand out <a href="http://www.musclemlk.ca/en/products/ready-drink/">ready to drink protein shakes</a>. I don't know if it was because I just ran 6km but that was the best vanilla shake I've had in a long time.<br />
<br />
For anyone who is interested in these types of races I can offer a few tips:<br />
<br />
<ol>
<li>Bring a complete change of clothes including shoes. You will not want to put your muddy shoes on after getting clean.</li>
<li>Wear non-cotton underwear. You really need something that isn't going to trap in a pound of dirt in your skivvies. </li>
<li>Bring a big fluffy towel to get warm. The "showers" are generally hoses of cold water so you will go from being over heated to freezing in no time. The fluffy towel will help.</li>
</ol>
<div>
Next up is the <a href="http://badassdash.com/event/2015-ottawa-badass-dash-ottawa-on/">Bad Ass Dash</a> on July 18th in Nepean. Anyone interested in joining?</div>
<br />
<br />Simon MacDonaldhttp://www.blogger.com/profile/14749383583517044214noreply@blogger.com0tag:blogger.com,1999:blog-72386855013225666.post-17997253264454595602015-06-10T12:39:00.000-04:002015-06-10T12:39:23.274-04:00Video of PhoneGap Day EU 2015 - Push N' Pull PresentationThe video for my Push N' Pull presentation is now available.<br />
<br />
<iframe allowfullscreen="" frameborder="0" height="270" src="https://www.youtube.com/embed/LmWcc7cjCBU" width="480"></iframe><br />
<br />
If you want to get a copy of the slides please check out my <a href="http://simonmacdonald.blogspot.ca/2015/05/phonegap-day-eu-2015-push-n-pull.html">previous post</a>.Simon MacDonaldhttp://www.blogger.com/profile/14749383583517044214noreply@blogger.com0tag:blogger.com,1999:blog-72386855013225666.post-46328550903781148242015-05-19T19:36:00.000-04:002015-05-19T19:36:33.443-04:00PhoneGap Day EU 2015 - Push N' Pull<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpsNN5_qrcjjO0L-0t_57sbyd68a-jrii0tG_zyp3o6zprDKrKFXXJQt5gdpjjmbQD3LptAl-rCDwCY7wdzae3hPl0_DsqhFzwgKReIPWm5SI3GntsTg_HkfRp3Ew0AszJmRLnrbJFeshyphenhyphen/s1600/buildbot2013-2.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="169" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpsNN5_qrcjjO0L-0t_57sbyd68a-jrii0tG_zyp3o6zprDKrKFXXJQt5gdpjjmbQD3LptAl-rCDwCY7wdzae3hPl0_DsqhFzwgKReIPWm5SI3GntsTg_HkfRp3Ew0AszJmRLnrbJFeshyphenhyphen/s200/buildbot2013-2.png" width="200" /></a></div>
Yesterday, I was happy to present at PhoneGap Day EU in Amsterdam. It's one of my favourite days of the year. Besides getting to hang out with all of my co-workers who I rarely get to see in person as we are separated by half a continent I get to talk in person with the people who use our software.<br />
<br />
At PG Day I was presenting on the work that we've been doing in order to make the lives of developers easier. My presentation introduces the new and improved <a href="https://github.com/phonegap/phonegap-plugin-push">Push Plugin</a> as well as the completely new <a href="https://github.com/phonegap/phonegap-plugin-contentsync">Content Sync Plugin</a>. I'll be blogging more about these two new plugins in the up coming weeks but for now if anyone wants to check out the slides they are embedded below:<br />
<br />
<iframe allowfullscreen="" frameborder="0" height="420" mozallowfullscreen="" scrolling="no" src="//slides.com/simonmacdonald/deck/embed" webkitallowfullscreen="" width="576"></iframe>Simon MacDonaldhttp://www.blogger.com/profile/14749383583517044214noreply@blogger.com3tag:blogger.com,1999:blog-72386855013225666.post-35786932068148316132014-12-02T15:37:00.000-05:002014-12-02T15:37:07.008-05:00VideoPlayer Plugin Updated for Cordova/PhoneGap 3.x and Above<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPzhpOouHqJIDplJDDipkg8S0SwpLLg7JPov0GTxtIWCJpydhQI_iPUCzmMKUjsepphDDA2SPljVwbpsLhL0bGbckl2ThjVodwdbLC0aowjEyyUhBk983gcBmWMiDYHJmpJSaekdR461VA/s1600/pg.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPzhpOouHqJIDplJDDipkg8S0SwpLLg7JPov0GTxtIWCJpydhQI_iPUCzmMKUjsepphDDA2SPljVwbpsLhL0bGbckl2ThjVodwdbLC0aowjEyyUhBk983gcBmWMiDYHJmpJSaekdR461VA/s200/pg.png" height="200" width="159" /></a></div>
Happily, I'm getting the chance to go back and visit some of my older plugins. I've just updated the <a href="https://github.com/macdonst/VideoPlayer">VideoPlayer</a> plugin so you can install it via the command line tools. To install via the command line just do:<br />
<br />
<pre>cordova plugin add https://github.com/macdonst/VideoPlayer</pre>
<br />
For more information on how the plugin works <a href="http://simonmacdonald.blogspot.ca/2011/11/video-player-plugin-for-phonegap.html">check out my old post</a> on the topic.Simon MacDonaldhttp://www.blogger.com/profile/14749383583517044214noreply@blogger.com1tag:blogger.com,1999:blog-72386855013225666.post-83989715934969003492014-11-17T11:59:00.000-05:002014-11-19T19:39:16.940-05:00My Speech Rec Presentation at InfoQ NYThe <a href="http://www.infoq.com/presentations/state-speech-recognition-mobile">slides and video</a> for my speech recognition presentation are up now at the InfoQ site. Feel free to watch it and laugh at my demo fail.Simon MacDonaldhttp://www.blogger.com/profile/14749383583517044214noreply@blogger.com0tag:blogger.com,1999:blog-72386855013225666.post-22756163578363573582014-08-04T12:05:00.000-04:002014-08-04T12:05:27.397-04:00Books I've Read This Week<table><tbody>
<tr><td><img align="left" src="http://www.syndetics.com/index.aspx?isbn=0307361179/SC.GIF&client=ottap&type=xw12&oclc=" /><a href="http://www.amazon.ca/gp/product/B00GL3HU4Y/ref=as_li_ss_tl?ie=UTF8&camp=15121&creative=390961&creativeASIN=B00GL3HU4Y&linkCode=as2&tag=simmacsblo-20">Creativity, Inc.: Overcoming the Unseen Forces That Stand in the Way of True Inspiration</a> by <a href="http://en.wikipedia.org/wiki/Edwin_Catmull">Ed Catmull</a> is a book that I enjoyed because it does a pretty good job of giving you the back story on how the company Pixar came to be. Pixar is the fascinating company that has given us wonderful movies like Toy Story, Up and Wall-E. It is really interesting to hear how they overcame various challenges over their lifetime.<br />
<br />
Where it doesn't work for me is a business book. Most of what Mr. Catmull tries to import as knowledge seems like rehashed platitudes to me. He even makes allusion to this in the book. What's even worse is a lot of his people first approach in this book rings false as he's been implicated as a central figure in a <a href="http://www.cartoonbrew.com/business/pixars-ed-catmull-emerges-as-central-figure-in-the-wage-fixing-scandal-101362.html">wage fixing scandal</a>.<br />
<br />
So I'd rate this book as a solid borrow for those of us who want to learn more about how movies are made at Pixar.</td></tr>
</tbody></table>
Simon MacDonaldhttp://www.blogger.com/profile/14749383583517044214noreply@blogger.com0tag:blogger.com,1999:blog-72386855013225666.post-20980308315735606022014-07-28T18:45:00.001-04:002014-07-28T18:45:08.059-04:00Books I've Read This Week<table><tbody>
<tr><td><img align="left" src="http://ecx.images-amazon.com/images/I/51OOTQK4bkL._AA160_.jpg" /><a href="http://www.amazon.ca/gp/product/0312291450/ref=as_li_ss_tl?ie=UTF8&camp=15121&creative=390961&creativeASIN=0312291450&linkCode=as2&tag=simmacsblo-20">If Chins Could Kill: Confessions of a B Movie Actor</a> by <a href="http://www.bruce-campbell.com/">Bruce Campbell</a>. Look I love Bruce Campbell, probably more than the next guy, I mean he's been making movies and TV shows since the early 80's so there is something there for everyone to love. But read a memoir of a B movie actor, seems sketchy.<br />
<br />
It isn't, it is every bit as hilarious and charming as Bruce Campbell. It is an amazing look at his life starting with him making independent films as a teenager, meeting his friend and frequent collaborator <a href="http://www.imdb.com/name/nm0000600/">Sam Rami</a> and all the way up to his rise to somewhat stardom.<br />
<br />
This is a really funny book and a very cautionary tale of what it takes to get into the movie business. Highly recommended.</td></tr>
<tr><td><img align="left" src="http://www.syndetics.com/index.aspx?isbn=9780062310095/SC.GIF&client=ottap&type=xw12&oclc=" /><a href="http://www.amazon.ca/gp/product/0062310097/ref=as_li_ss_tl?ie=UTF8&camp=15121&creative=390961&creativeASIN=0062310097&linkCode=as2&tag=simmacsblo-20">Night Watch</a> by <a href="http://rusf.ru/lukian/english/">Sergei Lukyanenko</a> is the first book in a 5 book series of this translated from Russian urban fantasy series. In this world all of the magical beings and creatures we read stories about are real but they are hidden from regular humans. The magical beings or "Others" as they are called are split into two factions, predictably, light and dark.<br />
<br />
There are two groups, The Day Watch who police the light others and The Night Watch, which this book focuses on, who police the dark others. The two groups are in a bit of a stalemate. You see if a light magician does some great good then it gives a dark magician the license to do great evil.<br />
<br />
This books is split into three stories where we follow Anton Gorodetsky, a light magician and member of The Night Watch. Anton is a member of the technical staff but due to events out of his control he has to step up and assume more responsibility. Throughout the novel we see Anton struggling with the differences between good and evil.<br />
<br />
I enjoyed this book and I'm interested in reading the next novel, The Day Watch, to see the story for the opposite viewpoint.</td></tr>
</tbody></table>
Simon MacDonaldhttp://www.blogger.com/profile/14749383583517044214noreply@blogger.com0tag:blogger.com,1999:blog-72386855013225666.post-12557491624853508582014-07-07T23:32:00.000-04:002014-07-07T23:32:01.812-04:00Books I've Read This Week<table><tbody>
<tr><td><img align="left" src="http://www.syndetics.com/index.aspx?isbn=9780765330277/SC.GIF&client=ottap&type=xw12&oclc=" /><a href="http://www.amazon.ca/gp/product/B00AF62ET4/ref=as_li_ss_tl?ie=UTF8&camp=15121&creative=390961&creativeASIN=B00AF62ET4&linkCode=as2&tag=simmacsblo-20">London Falling</a> by <a href="http://www.paulcornell.com/">Paul Cornell</a> is an urban fantasy novel featuring a good old fashion witch but I'm getting ahead of myself. In London four police officers are closing in on a mobster. During the course of their investigation they bump up against the supernatural. Now they are all cursed with the ability to see the shadowy underbelly of London. This brings them into conflict with a real witch. This particular witch loves one of London's football teams and is part of the legend where any opponent who scores 3 goals against her beloved team will die.<br />
<br />
This is a really entertaining book. I love the idea of a police force that protects us from the supernatural. It reminds me a lot of Ben Aaronovitch's Rivers of London series that way. Plus it is full of Cornell's wit which is British so that's always a plus.</td></tr>
<tr><td><img align="left" src="http://ecx.images-amazon.com/images/I/61Oa-ShuOSL._AA160_.jpg" /><a href="http://www.amazon.ca/gp/product/0989574490/ref=as_li_ss_tl?ie=UTF8&camp=15121&creative=390961&creativeASIN=0989574490&linkCode=as2&tag=simmacsblo-20">Stuff of Legend Omnibus Two</a> written by Mike Raicht and Brian Smith, lavishly illustrated by Charles Paul Wilson III. As we rejoin the story our intrepid toys are still looking for their boy in The Dark in order to save him from the Boogeyman. After the events of the first omnibus they are separated as the first half of the book deals with the Jester and the second half focusing in on getting all the toys back together.<br />
<br />
I really do love this series. If I had any complaint it would be how long it is between books but I shouldn't complain as all of that extra time is poured into the art. The toys just leap off the page and the sepia colouring they use invokes the World War II time period in which the story takes place.</td></tr>
</tbody></table>
Simon MacDonaldhttp://www.blogger.com/profile/14749383583517044214noreply@blogger.com0tag:blogger.com,1999:blog-72386855013225666.post-79309934681583815602014-06-22T19:17:00.002-04:002014-06-22T19:17:58.525-04:00Books I've Read This Week<table><tbody>
<tr><td><img align="left" src="http://www.syndetics.com/index.aspx?isbn=9780451464392/SC.GIF&client=ottap&type=xw12&oclc=" /><a href="http://www.amazon.ca/gp/product/B00HUVUSZ4/ref=as_li_ss_tl?ie=UTF8&camp=15121&creative=390961&creativeASIN=B00HUVUSZ4&linkCode=as2&tag=simmacsblo-20">Skin Game</a> is the latest novel in <a href="http://www.jim-butcher.com/">Jim Butcher's</a> <a href="http://www.jim-butcher.com/books/dresden">Dresden Files</a>. I've been a fan of this series for a long time and each novel is an enjoyable fast paced read. In this outing the wizard Harry Dresden who became the Winter's Knight a few books ago must obey Queen Mab and pull a "bank job" with one is his most hated enemies. Obviously Harry is going to get backstabbed but he's gotta play by the rules until his enemy makes a play then all bets are off.</td></tr>
<tr><td><img align="left" src="http://www.syndetics.com/index.aspx?isbn=9781421527611/SC.GIF&client=ottap&type=xw12&oclc=" /><a href="http://www.amazon.ca/gp/product/B005LJETYI/ref=as_li_ss_tl?ie=UTF8&camp=15121&creative=390961&creativeASIN=B005LJETYI&linkCode=as2&tag=simmacsblo-20">All You Need Is Kill</a> by <a href="http://en.wikipedia.org/wiki/Hiroshi_Sakurazaka">Hiroshi Sakurazaka</a> is now adapted into the movie <a href="http://www.imdb.com/title/tt1631867/?ref_=fn_al_tt_1">Edge of Tomorrow</a>. I am such a sucker for reading a book before going to watch a movie. It really is the best way to jump a book to the top of my queue. I'm not even sure if I'm going to go see the <i>Edge of Tomorrow</i> but I figured I'd read this first.<br />
<br />
This is actually a pretty damn good book. It reminds me a bit of the older power armour books like Starship Troopers by <a href="http://en.wikipedia.org/wiki/Robert_A._Heinlein">Heinlein</a> and Armor by <a href="http://en.wikipedia.org/wiki/John_Steakley">John Steakly</a> with a dash of the <a href="http://en.wikipedia.org/wiki/Ken_Grimwood">Ken Grimwood's</a> Replay. Anyway in it we follow a Jacket Jockey (power armor) as he fights the invading aliens, then dies only to wake up 48 hours earlier with all of his memories in order to do it all over again. Each battle he gets a little bit better until he is a combat wizard. That's where he runs into another soldier who is experiencing the same thing as he is. Will they be able to figure it out and use this power to defeat the invading aliens?<br />
<br />
Anyway, this is a greatly entertaining short (200 pages) or so read. Has anyone seen the movie yet?</td></tr>
</tbody></table>
Simon MacDonaldhttp://www.blogger.com/profile/14749383583517044214noreply@blogger.com0tag:blogger.com,1999:blog-72386855013225666.post-61460840867730369002014-06-16T17:57:00.000-04:002014-06-16T17:57:18.047-04:00Books I've Read This Week<table><tbody>
<tr><td><img align="left" src="http://www.syndetics.com/index.aspx?isbn=9780316246620/SC.GIF&client=ottap&type=xw12&oclc=" /><a href="http://www.amazon.ca/gp/product/B00BAXFDLM/ref=as_li_ss_tl?ie=UTF8&camp=15121&creative=390961&creativeASIN=B00BAXFDLM&linkCode=as2&tag=simmacsblo-20">Ancillary Justice</a> by <a href="http://www.annleckie.com/">Ann Leckie</a> is the multiple award winning debut novel in the Ancillary series. In it we are following Breq, the last vestige of a massive star cruiser the Justice of Toren, who's bodies or ancillaries one numbered in the thousands. We follow along with Breq as she attempts to obtain a device which will allow her to get revenge on the killer of the Justice of Toren.<br />
<br />
This is a fascinating novel exploring what it means to be human in a world where you can have multiple bodies and artificial intelligences run most things. I don't want to give too much away but I really enjoyed this book and I can't wait for the sequel.</td></tr>
<tr><td><img align="left" src="http://www.syndetics.com/index.aspx?isbn=9780385349055/SC.GIF&client=ottap&type=xw12&oclc=" /><a href="http://www.amazon.ca/gp/product/038534905X/ref=as_li_ss_tl?ie=UTF8&camp=15121&creative=390961&creativeASIN=038534905X&linkCode=as2&tag=simmacsblo-20">Dad Is Fat</a> is a hilarious memoir of raising 5 kids by stand up comedian <a href="http://www.jimgaffigan.com/">Jim Gaffigan</a>. If you are a parent you this material is rolling on the floor laugh out loud stuff. Even if you don't have kids you will find this book genuinely entertaining.</td></tr>
</tbody></table>
Simon MacDonaldhttp://www.blogger.com/profile/14749383583517044214noreply@blogger.com0tag:blogger.com,1999:blog-72386855013225666.post-12013585384055180712014-06-09T10:10:00.001-04:002014-06-09T10:10:11.074-04:00Books I've Read This Week<table><tbody>
<tr><td><img align="left" src="http://www.syndetics.com/index.aspx?isbn=9780316129084/SC.GIF&client=ottap&type=xw12&oclc=" /><a href="http://www.amazon.ca/gp/product/0316129089/ref=as_li_ss_tl?ie=UTF8&camp=15121&creative=390961&creativeASIN=0316129089&linkCode=as2&tag=simmacsblo-20">Leviathan Wakes</a> by <a href="http://en.wikipedia.org/wiki/James_S._A._Corey">James SA Corey</a> is my new favourite space opera. I'm glad there is two more books in the series with a fourth one coming out soon. Anyway, in the future humanity has colonized Mars as well as the outer asteroid belt. In this universe where tension between Earth, Mars and the belt, the ice mining ship, Scopuli, responds to a distress signal. Now XO James Holden is in possession of a huge secret that multiple forces are pursing while he attempts to keep himself and his crew alive. At the same time Detective Miller is looking for a missing girl who's investigation will cause him to cross paths with the Scopuli.<br />
<br />
Can they figure out what the hell is going on an advert an inter-planetary war?</td></tr>
<tr><td><img align="left" src="http://www.syndetics.com/index.aspx?isbn=9781443416511/SC.GIF&client=ottap&type=xw12&oclc=" /><a href="http://www.amazon.ca/gp/product/1443416517/ref=as_li_ss_tl?ie=UTF8&camp=15121&creative=390961&creativeASIN=1443416517&linkCode=as2&tag=simmacsblo-20">Think Like A Freak</a> by <a href="http://en.wikipedia.org/wiki/Steven_Levitt">Steven Levitt</a> and <a href="http://en.wikipedia.org/wiki/Stephen_J._Dubner">Stephen Dubner</a> is the third book in their Freakonomic's series. This book is a bit of a departure from the first two. Instead of diving deep into a number of different topics the author's instead try to teach the reader how to think like a freak. There is some good stuff in this book especially the chapters on how to admit "I don't know", how to think like a child and the upside of quitting.<br />
<br />
The bad is the book is pretty short clocking in at just over 200 pages. The actual book is 256 pages but I'm only counting the actual content and not all the Notes and Index sections. That's not a lot of content for $34. Additionally if you are a listener of the <a href="http://freakonomics.com/radio/freakonomics-radio-podcast-archive/">Freakonomic's podcast</a>, and you should be it's great, you will find much of the content of this book is a rehash of the podcast.<br />
<br />
If you want to save the cash you can get the book from the library or listen to the episodes on <a href="http://freakonomics.com/2014/05/22/think-like-a-child-a-new-freakonomics-radio-podcast/">How to Think Like a Child</a> and <a href="http://freakonomics.com/2014/05/29/the-upside-of-quitting-a-freakonomics-radio-rebroadcast/">The Upside of Quitting</a>.<br />
<br />
<br /></td></tr>
</tbody></table>
Simon MacDonaldhttp://www.blogger.com/profile/14749383583517044214noreply@blogger.com0tag:blogger.com,1999:blog-72386855013225666.post-90645690332822454322014-06-01T14:12:00.000-04:002014-06-01T14:12:04.004-04:00Most Expensive Starbucks Rewards Coffee Ever<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6L6nea8XmAudgs98LEIWGR2DcV2lCQO7d9Zmh8BJ9bXQxtJ68riN2ZvZsoqLVjL8ADJOzUCIwEeniqEQNoCaUDFh5lOTKYdJz3L5v7UaaNf1PZTPYe4OFH3EHBT_xuk3bBSHv-0mAIvxE/s1600/starbucks.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6L6nea8XmAudgs98LEIWGR2DcV2lCQO7d9Zmh8BJ9bXQxtJ68riN2ZvZsoqLVjL8ADJOzUCIwEeniqEQNoCaUDFh5lOTKYdJz3L5v7UaaNf1PZTPYe4OFH3EHBT_xuk3bBSHv-0mAIvxE/s320/starbucks.jpg" /></a></div>
I haven't posted a coffee related link in awhile but this one is too good to pass up. From Boing Boing:<br />
<br />
<b><a href="http://boingboing.net/2014/05/30/most-expensive-caffeinated-st.html">Most expensive, caffeinated Starbucks drink ever</a></b><br />
<br />
<i>Andrew Chifari of Dallas, Texas used the free drink earned with his Starbucks Rewards card to get a $54.75 frappuccino containing 60 shots of espresso.</i><br />
<i><br /></i>
What makes it even more awesome is it was his "free" drink. As well this post brought the website <a href="http://www.caffeineinformer.com/">Caffeine Informer</a> to my attention.Simon MacDonaldhttp://www.blogger.com/profile/14749383583517044214noreply@blogger.com1tag:blogger.com,1999:blog-72386855013225666.post-24889884654908937152014-06-01T12:52:00.003-04:002014-06-01T12:52:58.625-04:00Books I've Read This Week<table><tbody>
<tr><td><img align="left" src="http://www.syndetics.com/index.aspx?isbn=9780765333698/SC.GIF&client=ottap&type=xw12&oclc=" /><a href="http://www.amazon.ca/gp/product/0765333694/ref=as_li_ss_tl?ie=UTF8&camp=15121&creative=390961&creativeASIN=0765333694&linkCode=as2&tag=simmacsblo-20">Homeland</a> by <a href="http://craphound.com/">Cory Doctorow</a> is a follow to his previous novel Little Brother. Once again the protagonist, Marcus Yallow is caught up in events surrounding shady government agencies. Marcus is given a set of documents by a hacker acquaintance that contains startling wikileaks/Edward Snowden level information and the instructions to publish them on the internet if anything ever happens to her.<br />
<br />
This causes no end of problems for Marcus as he's recently been employed as a web master for a crusading politician. How does he get the word out without getting fired or worse getting snatched up by a shadowy government organization.<br />
<br />
You don't need to read Little Brother to enjoy this book but I'd recommend that one to anyone as well. This book is part entertainment and part warning of the surveillance state. Based on all of the revelations coming out about the global surveillance infrastructure it is a excellent but chilling read.<br />
<br />
As with all of Cory Doctorow's books you can<a href="http://craphound.com/homeland/download/"> download them free from his website</a>.</td></tr>
<tr><td><img align="left" src="http://ecx.images-amazon.com/images/I/51H1mbYkLqL._AA160_.jpg" height="90" width="90" /><a href="http://www.amazon.ca/gp/product/1607068605/ref=as_li_ss_tl?ie=UTF8&camp=15121&creative=390961&creativeASIN=1607068605&linkCode=as2&tag=simmacsblo-20">Revival Volume 3: A Faraway Place TP</a> by <a href="http://timseeleyart.blogspot.ca/">Tim Seeley</a>, art by <a href="http://www.ihatemike.com/">Mike Norton</a> continues this rural noir tale. Officer Dana Cyprus is closing in on the killer of her sister Em, a reviver, while at the same time Em is looking further into the mystery of the ghostly figures in the woods.<br />
<br />
This continues to be one of my favourite series being published. Can't wait for volume 4.</td></tr>
</tbody></table>
Simon MacDonaldhttp://www.blogger.com/profile/14749383583517044214noreply@blogger.com0tag:blogger.com,1999:blog-72386855013225666.post-29868677766773038072014-05-20T18:32:00.000-04:002014-05-20T18:32:12.859-04:00Books I've Read This Week<table><tbody>
<tr><td><div class="separator" style="clear: both; text-align: center;">
<a href="http://d138hkes00e90m.cloudfront.net/release_images/Saga_vol3-1.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://d138hkes00e90m.cloudfront.net/release_images/Saga_vol3-1.png" height="200" width="130" /></a></div>
<a href="http://www.amazon.ca/gp/product/1607069318/ref=as_li_ss_tl?ie=UTF8&camp=15121&creative=390961&creativeASIN=1607069318&linkCode=as2&tag=simmacsblo-20">Saga, Vol. 3</a> by <a href="http://en.wikipedia.org/wiki/Brian_K._Vaughan">Bryan K Vaughn</a> with art by <a href="http://fionastaples.tumblr.com/">Fiona Staples</a> continues to be one of the best comics on the stands. It's wild mash up of Romeo and Juliet with Star Wars is one of my favourite books. In this volume new parents Marko and Alana visit the author of their favourite book hoping he'll have some answers for them while bounty hunters from both sides of the war are hot on their trail.<br />
<br />
This is a great book and one single page in which Lying Cat and Slave Girl have a conversation is worth the price of the entire trade.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://24.media.tumblr.com/986b2636f6976f67e2ed1632a58a5e95/tumblr_mgsdfgDE7o1qj97xmo1_500.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="http://24.media.tumblr.com/986b2636f6976f67e2ed1632a58a5e95/tumblr_mgsdfgDE7o1qj97xmo1_500.jpg" height="166" width="200" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Lying Cat</td></tr>
</tbody></table>
<br /></td></tr>
<tr><td><div class="separator" style="clear: both; text-align: center;">
<a href="https://s3-us-west-1.amazonaws.com/imagecomics/release_images/chew-vol-08-releases.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="200" src="https://s3-us-west-1.amazonaws.com/imagecomics/release_images/chew-vol-08-releases.jpg" width="132" /></a></div>
<a href="http://www.amazon.ca/gp/product/1607069385/ref=as_li_ss_tl?ie=UTF8&camp=15121&creative=390961&creativeASIN=1607069385&linkCode=as2&tag=simmacsblo-20">Chew Volume 8: Family Recipes TP</a> by John Layman and Rob Guillory continues it's strong story. After the shocking events of the last volume Tony is left picking up the pieces of his life and gets help solving a murder from a very unexpected source.<br />
<br />
Like Saga this is one of my favourite books and well worth a read. Check out the first volume for it's out of this world premise and laugh out loud shocks.</td></tr>
</tbody></table>
Simon MacDonaldhttp://www.blogger.com/profile/14749383583517044214noreply@blogger.com0tag:blogger.com,1999:blog-72386855013225666.post-45642971980791088812014-05-19T22:57:00.003-04:002014-05-19T22:57:40.899-04:00ChromeCast Presentations<div class="separator" style="clear: both; text-align: center;">
<a href="http://www.themainmtl.com/wp-content/uploads/2014/03/Chromecast.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://www.themainmtl.com/wp-content/uploads/2014/03/Chromecast.jpg" height="179" width="320" /></a></div>
Over the past couple of months I did a couple of ChromeCast presentations on <a href="https://dl.dropboxusercontent.com/u/887989/chromecast/OttawaJSChromeCast/index.html#/">Sender apps</a> and <a href="https://dl.dropboxusercontent.com/u/887989/chromecast/OttawaJSChromeCastReceiver/index.html#/">Receiver apps</a> at <a href="http://ottawajs.org/">Ottawa JS</a>. The presentations don't have much extra content than what you would get on the main <a href="https://developers.google.com/cast/">Google ChromeCast</a> site but it was a great excuse for me to play around with the SDK. I love my ChromeCast and I'd love to program a game for it sometime when I can generate some free time.Simon MacDonaldhttp://www.blogger.com/profile/14749383583517044214noreply@blogger.com0