jQuery Mobile, AngularJS and PhoneGap – getting started – Part1

Last updated: 2013-10-18

I want to develop with jQuery Mobile (jQM), AngularJS and PhoneGap on Windows8, x64.

  • Part 1 (this blog): Install Editor, PhoneGap and Android (emulator)

You can get further info on these links:

Reasons

View Controller

Angular vs. Backbone vs. Knockout vs. …

Angular Pros

  • You avoid most eventhandler wiring from the html. Angular automatic create and wire eventhandlers according to how the browsers likes it.
  • Less code – 1/3.

Angular Cons

  • Angular makes DOM changes – this conflicts with other libs like jQM, which also makes DOM changes – who changes after who? – how much area needs refresh?
  • You might need to write wrappers around 3rd party UI widgets to make them integrate well with Angular.

Navigation and History

Angular vs. jQM vs….

UI Controls

jQM vs. Sencha Touch vs. Twitter Bootstrap vs. …

jQM has themes that closely resembles native controls on IOS and Android. For WindowsPhone there is Metro theme.

Native builder

PhoneGap vs. Appcelerator vs. Xamarin  vs. …

Telerik’s Icenium has a great way of viewing development. It give online editing, online testing and online building/packaging using PhoneGap. You will miss some local tools, probably, but it will certainly make it possible to deliver fast. I wonder if their online simulators responds well? It is not free.

Server Service

.NET vs. Sencha Ext vs. Ruby vs. …

Cloud Provider

Azure vs. Heroku vs.  …

Installation

I am doing this installation on Windows 8.

AngularJS

You need an editor for Angular.

You could use Visual Studio or Eclipse (since you’ll need them for WP8 and Android builds anyway) – is there a plugin for Angular? Yes – see list below.

I’ll follow advice from http://learnangularjs.blogspot.dk/2013/03/setting-up-development-environment-for.html and choose one from the list

I’ve read JetBrains WebStorm should be exceptional good with intellisense etc, but that requires a need large enough to pay for it. Since JetBrains also makes ReSharper not surprisingly you also are provided help there, which is good news to the VisualStudio users with such a license.

The OpenSourse Aptana makes sense if you like the PhoneGap rival Appcelerator. Aptana is an extension of Eclipse and Appcelerators IDE Titanium is an extension of Aptana.
Eclipse i also used for building to Android, so this could be your reason to choose this tool.

DreamWeaver has ability to create PhoneGap projects out-of-the-box (Adope own both), so that might be a reason to choose that IDE.

I’ll start with Sublime Text 3 (still in beta) and see how that will do. There is quite a few plugins available, where several are Javascript lib related.

SublimeText3 (ST3)

Installing Sublime Text is just to execute the setup file. To install plugins (as Angular) you can get help from another plugin called Package Control. Current version is Build 3047.

Package Control Plugin

For Windows you need to do manual installation of Package Control. The Plugin is currently version 2.0.

The instruction from the author is a little misleading.

  • In ST3 do Preferences – Browse Packages. This will open “C:\Users\<yourname>\AppData\Roaming\Sublime Text 3\Packages”.
  • You need to change directory to “C:\Users\<yourname>\AppData\Roaming\Sublime Text 3\Installed Packages”. In there you drop Package Control.sublime-package.
  • Now restart ST3.
  • Do Tools – Command Palette (ctrl – shft – p).
  • Start entering Package Cont… If you see a bunch of lines starting with “Package Control” then things are working.

Package Control commands

AngularJs Plugin

Continuing from above…

  • Choose Package Control: Install Package
  • Type Angular

AngularJs plugins

  • Select AngularJS. The plugin will install and issue a confirm message:

Confirmed AngularJS install

  • Test the plugin by creating a new file and type “<html ng-“
  • At the cursor a list of available AngularJS attributes should appear.

PhoneGap

From http://phonegap.com/install/

You need NodeJs to install PhoneGap: http://nodejs.org/dist/v0.10.18/x64/node-v0.10.18-x64.msi

Search for “Node.js cmd prompt”.

Download PhonegGap by typing:

C:\>npm install -g phonegap
npm http GET https://registry.npmjs.org/phonegap
npm http 200 https://registry.npmjs.org/phonegap
npm http GET https://registry.npmjs.org/phonegap/-/phonegap-3.0.0-0.14.0.tgz
npm http 200 https://registry.npmjs.org/phonegap/-/phonegap-3.0.0-0.14.0.tgz
npm http GET https://registry.npmjs.org/colors/0.6.0-1
npm http GET https://registry.npmjs.org/cordova/3.0.0
npm http GET https://registry.npmjs.org/node-static/0.7.0
npm http GET https://registry.npmjs.org/optimist/0.6.0
npm http GET https://registry.npmjs.org/phonegap-build/0.8.3
npm http GET https://registry.npmjs.org/pluralize/0.0.4
npm http GET https://registry.npmjs.org/qrcode-terminal/0.9.4
npm http GET https://registry.npmjs.org/semver/1.1.0
npm http GET https://registry.npmjs.org/prompt/0.2.11
npm http GET https://registry.npmjs.org/shelljs/0.1.4
npm http 200 https://registry.npmjs.org/colors/0.6.0-1
npm http GET https://registry.npmjs.org/colors/-/colors-0.6.0-1.tgz
npm http 200 https://registry.npmjs.org/node-static/0.7.0
npm http 200 https://registry.npmjs.org/optimist/0.6.0
npm http 200 https://registry.npmjs.org/phonegap-build/0.8.3
npm http GET https://registry.npmjs.org/node-static/-/node-static-0.7.0.tgz
npm http GET https://registry.npmjs.org/optimist/-/optimist-0.6.0.tgz
npm http 200 https://registry.npmjs.org/cordova/3.0.0
npm http GET https://registry.npmjs.org/phonegap-build/-/phonegap-build-0.8.3.tgz
npm http GET https://registry.npmjs.org/cordova/-/cordova-3.0.0.tgz
npm http 200 https://registry.npmjs.org/pluralize/0.0.4
npm http GET https://registry.npmjs.org/pluralize/-/pluralize-0.0.4.tgz
npm http 200 https://registry.npmjs.org/qrcode-terminal/0.9.4
npm http GET https://registry.npmjs.org/qrcode-terminal/-/qrcode-terminal-0.9.4.tgz
npm http 200 https://registry.npmjs.org/semver/1.1.0
npm http GET https://registry.npmjs.org/semver/-/semver-1.1.0.tgz
npm http 200 https://registry.npmjs.org/prompt/0.2.11
npm http GET https://registry.npmjs.org/prompt/-/prompt-0.2.11.tgz
npm http 200 https://registry.npmjs.org/shelljs/0.1.4
npm http GET https://registry.npmjs.org/shelljs/-/shelljs-0.1.4.tgz
npm http 200 https://registry.npmjs.org/colors/-/colors-0.6.0-1.tgz
npm http 200 https://registry.npmjs.org/optimist/-/optimist-0.6.0.tgz
npm http 200 https://registry.npmjs.org/node-static/-/node-static-0.7.0.tgz
npm http 200 https://registry.npmjs.org/phonegap-build/-/phonegap-build-0.8.3.tgz
npm http 200 https://registry.npmjs.org/pluralize/-/pluralize-0.0.4.tgz
npm http 200 https://registry.npmjs.org/cordova/-/cordova-3.0.0.tgz
npm http 200 https://registry.npmjs.org/qrcode-terminal/-/qrcode-terminal-0.9.4.tgz
npm http 200 https://registry.npmjs.org/semver/-/semver-1.1.0.tgz
npm http 200 https://registry.npmjs.org/prompt/-/prompt-0.2.11.tgz
npm http 200 https://registry.npmjs.org/shelljs/-/shelljs-0.1.4.tgz
npm http GET https://registry.npmjs.org/wordwrap
npm http GET https://registry.npmjs.org/minimist
npm http GET https://registry.npmjs.org/pkginfo
npm http GET https://registry.npmjs.org/read
npm http GET https://registry.npmjs.org/revalidator
npm http GET https://registry.npmjs.org/utile
npm http GET https://registry.npmjs.org/winston
npm http 200 https://registry.npmjs.org/wordwrap
npm http 200 https://registry.npmjs.org/minimist
npm http GET https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz
npm http GET https://registry.npmjs.org/minimist/-/minimist-0.0.1.tgz
npm http GET https://registry.npmjs.org/colors
npm http GET https://registry.npmjs.org/plist
npm http GET https://registry.npmjs.org/xcode/0.5.1
npm http GET https://registry.npmjs.org/express/3.0.0
npm http GET https://registry.npmjs.org/plugman/0.9.10
npm http GET https://registry.npmjs.org/shelljs/0.1.2
npm http GET https://registry.npmjs.org/ncallbacks/1.0.0
npm http GET https://registry.npmjs.org/elementtree/0.1.3
npm http GET https://registry.npmjs.org/request/2.22.0
npm http GET https://registry.npmjs.org/ripple-emulator/0.9.18
npm http GET https://registry.npmjs.org/glob
npm http GET https://registry.npmjs.org/follow-redirects
npm http GET https://registry.npmjs.org/prompt/0.2.7
npm http GET https://registry.npmjs.org/tar
npm http GET https://registry.npmjs.org/open/0.0.3
npm http 200 https://registry.npmjs.org/read
npm http 200 https://registry.npmjs.org/pkginfo
npm http 200 https://registry.npmjs.org/utile
npm http GET https://registry.npmjs.org/read/-/read-1.0.5.tgz
npm http GET https://registry.npmjs.org/pkginfo/-/pkginfo-0.3.0.tgz
npm http 200 https://registry.npmjs.org/revalidator
npm http GET https://registry.npmjs.org/utile/-/utile-0.2.0.tgz
npm http GET https://registry.npmjs.org/revalidator/-/revalidator-0.1.5.tgz
npm http GET https://registry.npmjs.org/mime
npm http 200 https://registry.npmjs.org/colors
npm http GET https://registry.npmjs.org/colors/-/colors-0.6.0.tgz
npm http 200 https://registry.npmjs.org/plist
npm http 200 https://registry.npmjs.org/xcode/0.5.1
npm http GET https://registry.npmjs.org/plist/-/plist-0.4.3.tgz
npm http GET https://registry.npmjs.org/xcode/-/xcode-0.5.1.tgz
npm http 200 https://registry.npmjs.org/express/3.0.0
npm http GET https://registry.npmjs.org/express/-/express-3.0.0.tgz
npm http 200 https://registry.npmjs.org/ncallbacks/1.0.0
npm http GET https://registry.npmjs.org/ncallbacks/-/ncallbacks-1.0.0.tgz
npm http 200 https://registry.npmjs.org/plugman/0.9.10
npm http 200 https://registry.npmjs.org/elementtree/0.1.3
npm http GET https://registry.npmjs.org/plugman/-/plugman-0.9.10.tgz
npm http 200 https://registry.npmjs.org/shelljs/0.1.2
npm http GET https://registry.npmjs.org/elementtree/-/elementtree-0.1.3.tgz
npm http GET https://registry.npmjs.org/shelljs/-/shelljs-0.1.2.tgz
npm http 200 https://registry.npmjs.org/winston
npm http GET https://registry.npmjs.org/winston/-/winston-0.6.2.tgz
npm http 200 https://registry.npmjs.org/request/2.22.0
npm http GET https://registry.npmjs.org/request/-/request-2.22.0.tgz
npm http 200 https://registry.npmjs.org/ripple-emulator/0.9.18
npm http GET https://registry.npmjs.org/ripple-emulator/-/ripple-emulator-0.9.18.tgz
npm http GET https://registry.npmjs.org/shelljs
npm http GET https://registry.npmjs.org/qrcode-terminal
npm http 200 https://registry.npmjs.org/prompt/0.2.7
npm http GET https://registry.npmjs.org/phonegap-build-api/0.3.3
npm http GET https://registry.npmjs.org/optimist
npm http GET https://registry.npmjs.org/prompt/-/prompt-0.2.7.tgz
npm http 200 https://registry.npmjs.org/tar
npm http 200 https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz
npm http GET https://registry.npmjs.org/tar/-/tar-0.1.17.tgz
npm http 200 https://registry.npmjs.org/minimist/-/minimist-0.0.1.tgz
npm http 200 https://registry.npmjs.org/utile/-/utile-0.2.0.tgz
npm http 200 https://registry.npmjs.org/pkginfo/-/pkginfo-0.3.0.tgz
npm http 200 https://registry.npmjs.org/open/0.0.3
npm http GET https://registry.npmjs.org/open/-/open-0.0.3.tgz
npm http 200 https://registry.npmjs.org/follow-redirects
npm http GET https://registry.npmjs.org/follow-redirects/-/follow-redirects-0.0.3.tgz
npm http 200 https://registry.npmjs.org/mime
npm http GET https://registry.npmjs.org/mime/-/mime-1.2.9.tgz
npm http 200 https://registry.npmjs.org/revalidator/-/revalidator-0.1.5.tgz
npm http 200 https://registry.npmjs.org/colors/-/colors-0.6.0.tgz
npm http 200 https://registry.npmjs.org/plist/-/plist-0.4.3.tgz
npm http 200 https://registry.npmjs.org/xcode/-/xcode-0.5.1.tgz
npm http 200 https://registry.npmjs.org/qrcode-terminal
npm http GET https://registry.npmjs.org/qrcode-terminal/-/qrcode-terminal-0.8.0.tgz
npm http 200 https://registry.npmjs.org/read/-/read-1.0.5.tgz
npm http 200 https://registry.npmjs.org/phonegap-build-api/0.3.3
npm http GET https://registry.npmjs.org/phonegap-build-api/-/phonegap-build-api-0.3.3.tgz
npm http 200 https://registry.npmjs.org/shelljs
npm http 200 https://registry.npmjs.org/express/-/express-3.0.0.tgz
npm http 200 https://registry.npmjs.org/ncallbacks/-/ncallbacks-1.0.0.tgz
npm http GET https://registry.npmjs.org/shelljs/-/shelljs-0.0.9.tgz
npm http 200 https://registry.npmjs.org/optimist
npm http 200 https://registry.npmjs.org/plugman/-/plugman-0.9.10.tgz
npm http GET https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz
npm http 200 https://registry.npmjs.org/elementtree/-/elementtree-0.1.3.tgz
npm http 200 https://registry.npmjs.org/shelljs/-/shelljs-0.1.2.tgz
npm http 200 https://registry.npmjs.org/winston/-/winston-0.6.2.tgz
npm http 200 https://registry.npmjs.org/request/-/request-2.22.0.tgz
npm http 200 https://registry.npmjs.org/ripple-emulator/-/ripple-emulator-0.9.18.tgz
npm http 200 https://registry.npmjs.org/prompt/-/prompt-0.2.7.tgz
npm http 200 https://registry.npmjs.org/tar/-/tar-0.1.17.tgz
npm http 200 https://registry.npmjs.org/open/-/open-0.0.3.tgz
npm http 200 https://registry.npmjs.org/glob
npm http GET https://registry.npmjs.org/glob/-/glob-3.2.3.tgz
npm http 200 https://registry.npmjs.org/follow-redirects/-/follow-redirects-0.0.3.tgz
npm http 200 https://registry.npmjs.org/mime/-/mime-1.2.9.tgz
npm http 200 https://registry.npmjs.org/qrcode-terminal/-/qrcode-terminal-0.8.0.tgz
npm http 200 https://registry.npmjs.org/phonegap-build-api/-/phonegap-build-api-0.3.3.tgz
npm http 200 https://registry.npmjs.org/shelljs/-/shelljs-0.0.9.tgz
npm http 200 https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz
npm http 200 https://registry.npmjs.org/glob/-/glob-3.2.3.tgz
npm http GET https://registry.npmjs.org/mute-stream
npm http GET https://registry.npmjs.org/deep-equal
npm http GET https://registry.npmjs.org/i
npm http GET https://registry.npmjs.org/mkdirp
npm http GET https://registry.npmjs.org/async
npm http GET https://registry.npmjs.org/ncp
npm http GET https://registry.npmjs.org/rimraf
npm http 200 https://registry.npmjs.org/mute-stream
npm http GET https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.4.tgz
npm http GET https://registry.npmjs.org/request
npm http GET https://registry.npmjs.org/stack-trace
npm http GET https://registry.npmjs.org/cycle
npm http GET https://registry.npmjs.org/eyes
npm http GET https://registry.npmjs.org/pkginfo
npm http 200 https://registry.npmjs.org/ncp
npm http GET https://registry.npmjs.org/ncp/-/ncp-0.2.7.tgz
npm http 200 https://registry.npmjs.org/deep-equal
npm http 200 https://registry.npmjs.org/mkdirp
npm http GET https://registry.npmjs.org/deep-equal/-/deep-equal-0.0.0.tgz
npm http GET https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz
npm http 200 https://registry.npmjs.org/i
npm http GET https://registry.npmjs.org/i/-/i-0.3.1.tgz
npm http 200 https://registry.npmjs.org/rimraf
npm http GET https://registry.npmjs.org/rimraf/-/rimraf-2.2.1.tgz
npm http 200 https://registry.npmjs.org/stack-trace
npm http GET https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.7.tgz
npm http GET https://registry.npmjs.org/wordwrap
npm http 200 https://registry.npmjs.org/cycle
npm http GET https://registry.npmjs.org/cycle/-/cycle-1.0.2.tgz
npm http GET https://registry.npmjs.org/request
npm http 200 https://registry.npmjs.org/eyes
npm http GET https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz
npm http 304 https://registry.npmjs.org/pkginfo
npm http 304 https://registry.npmjs.org/wordwrap
npm http GET https://registry.npmjs.org/pkginfo/-/pkginfo-0.2.3.tgz
npm http 200 https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.4.tgz
npm http 200 https://registry.npmjs.org/ncp/-/ncp-0.2.7.tgz
npm http 200 https://registry.npmjs.org/deep-equal/-/deep-equal-0.0.0.tgz
npm http 200 https://registry.npmjs.org/i/-/i-0.3.1.tgz
npm http 200 https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz
npm http 200 https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.7.tgz
npm http 200 https://registry.npmjs.org/cycle/-/cycle-1.0.2.tgz
npm http 200 https://registry.npmjs.org/request
npm http 200 https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz
npm http 200 https://registry.npmjs.org/rimraf/-/rimraf-2.2.1.tgz
npm http 200 https://registry.npmjs.org/pkginfo/-/pkginfo-0.2.3.tgz
npm http GET https://registry.npmjs.org/request/-/request-2.9.203.tgz
npm http 200 https://registry.npmjs.org/async
npm http GET https://registry.npmjs.org/async/-/async-0.1.22.tgz
npm http 200 https://registry.npmjs.org/request
npm http GET https://registry.npmjs.org/request/-/request-2.11.4.tgz
npm http 200 https://registry.npmjs.org/request/-/request-2.9.203.tgz
npm http 200 https://registry.npmjs.org/async/-/async-0.1.22.tgz
npm http 200 https://registry.npmjs.org/request/-/request-2.11.4.tgz
npm http GET https://registry.npmjs.org/graceful-fs
npm http 200 https://registry.npmjs.org/graceful-fs
npm http GET https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz
npm http 200 https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz
npm WARN engine ncallbacks@1.0.0: wanted: {"node":"~0.6.7"} (current: {"node":"v0.10.13","npm":"1.3.2"})
npm http GET https://registry.npmjs.org/underscore
npm http GET https://registry.npmjs.org/sax/0.3.5
npm http GET https://registry.npmjs.org/minimatch
npm http GET https://registry.npmjs.org/inherits
npm http GET https://registry.npmjs.org/graceful-fs
npm http 200 https://registry.npmjs.org/underscore
npm http GET https://registry.npmjs.org/underscore/-/underscore-1.5.1.tgz
npm http GET https://registry.npmjs.org/read
npm http GET https://registry.npmjs.org/revalidator
npm http GET https://registry.npmjs.org/pkginfo
npm http GET https://registry.npmjs.org/utile
npm http GET https://registry.npmjs.org/winston
npm http 304 https://registry.npmjs.org/graceful-fs
npm http GET https://registry.npmjs.org/connect/2.6.0
npm http GET https://registry.npmjs.org/commander/0.6.1
npm http GET https://registry.npmjs.org/range-parser/0.0.4
npm http GET https://registry.npmjs.org/mkdirp/0.3.3
npm http GET https://registry.npmjs.org/cookie/0.0.4
npm http GET https://registry.npmjs.org/crc/0.2.0
npm http GET https://registry.npmjs.org/fresh/0.1.0
npm http GET https://registry.npmjs.org/methods/0.0.1
npm http GET https://registry.npmjs.org/send/0.1.0
npm http GET https://registry.npmjs.org/debug
npm http 200 https://registry.npmjs.org/sax/0.3.5
npm http 200 https://registry.npmjs.org/inherits
npm http 304 https://registry.npmjs.org/revalidator
npm http 200 https://registry.npmjs.org/underscore/-/underscore-1.5.1.tgz
npm http GET https://registry.npmjs.org/graceful-fs/-/graceful-fs-2.0.0.tgz
npm http 304 https://registry.npmjs.org/pkginfo
npm http GET https://registry.npmjs.org/inherits/-/inherits-2.0.0.tgz
npm http GET https://registry.npmjs.org/sax/-/sax-0.3.5.tgz
npm http 304 https://registry.npmjs.org/utile
npm http 304 https://registry.npmjs.org/winston
npm http GET https://registry.npmjs.org/fstream
npm http GET https://registry.npmjs.org/block-stream
npm http GET https://registry.npmjs.org/utile/-/utile-0.1.7.tgz
npm http GET https://registry.npmjs.org/inherits/-/inherits-1.0.0.tgz
npm http 200 https://registry.npmjs.org/range-parser/0.0.4
npm http GET https://registry.npmjs.org/range-parser/-/range-parser-0.0.4.tgz
npm http 200 https://registry.npmjs.org/connect/2.6.0
npm http 200 https://registry.npmjs.org/commander/0.6.1
npm http 304 https://registry.npmjs.org/read
npm http GET https://registry.npmjs.org/connect/-/connect-2.6.0.tgz
npm http 200 https://registry.npmjs.org/mkdirp/0.3.3
npm http GET https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.3.tgz
npm http GET https://registry.npmjs.org/commander/-/commander-0.6.1.tgz
npm http 200 https://registry.npmjs.org/cookie/0.0.4
npm http 200 https://registry.npmjs.org/crc/0.2.0
npm http 200 https://registry.npmjs.org/fresh/0.1.0
npm http 200 https://registry.npmjs.org/methods/0.0.1
npm http 200 https://registry.npmjs.org/minimatch
npm http 200 https://registry.npmjs.org/send/0.1.0
npm http GET https://registry.npmjs.org/cookie/-/cookie-0.0.4.tgz
npm http GET https://registry.npmjs.org/minimatch/-/minimatch-0.2.12.tgz
npm http GET https://registry.npmjs.org/send/-/send-0.1.0.tgz
npm http GET https://registry.npmjs.org/fresh/-/fresh-0.1.0.tgz
npm http GET https://registry.npmjs.org/crc/-/crc-0.2.0.tgz
npm http GET https://registry.npmjs.org/methods/-/methods-0.0.1.tgz
npm http 200 https://registry.npmjs.org/inherits/-/inherits-2.0.0.tgz
npm http 200 https://registry.npmjs.org/block-stream
npm http 200 https://registry.npmjs.org/graceful-fs/-/graceful-fs-2.0.0.tgz
npm http 200 https://registry.npmjs.org/debug
npm http GET https://registry.npmjs.org/block-stream/-/block-stream-0.0.6.tgz
npm http 200 https://registry.npmjs.org/fstream
npm http GET https://registry.npmjs.org/debug/-/debug-0.7.2.tgz
npm http GET https://registry.npmjs.org/fstream/-/fstream-0.1.23.tgz
npm http 200 https://registry.npmjs.org/utile/-/utile-0.1.7.tgz
npm http 200 https://registry.npmjs.org/range-parser/-/range-parser-0.0.4.tgz
npm http 200 https://registry.npmjs.org/sax/-/sax-0.3.5.tgz
npm http 200 https://registry.npmjs.org/connect/-/connect-2.6.0.tgz
npm http 200 https://registry.npmjs.org/inherits/-/inherits-1.0.0.tgz
npm http 200 https://registry.npmjs.org/commander/-/commander-0.6.1.tgz
npm http 200 https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.3.tgz
npm http 200 https://registry.npmjs.org/cookie/-/cookie-0.0.4.tgz
npm http 200 https://registry.npmjs.org/minimatch/-/minimatch-0.2.12.tgz
npm http 200 https://registry.npmjs.org/send/-/send-0.1.0.tgz
npm http 200 https://registry.npmjs.org/fresh/-/fresh-0.1.0.tgz
npm http 200 https://registry.npmjs.org/crc/-/crc-0.2.0.tgz
npm http 200 https://registry.npmjs.org/methods/-/methods-0.0.1.tgz
npm http 200 https://registry.npmjs.org/block-stream/-/block-stream-0.0.6.tgz
npm http 200 https://registry.npmjs.org/debug/-/debug-0.7.2.tgz
npm http 200 https://registry.npmjs.org/fstream/-/fstream-0.1.23.tgz
npm http GET https://registry.npmjs.org/qs
npm http GET https://registry.npmjs.org/json-stringify-safe
npm http GET https://registry.npmjs.org/http-signature
npm http GET https://registry.npmjs.org/tunnel-agent
npm http GET https://registry.npmjs.org/hawk
npm http GET https://registry.npmjs.org/forever-agent
npm http GET https://registry.npmjs.org/oauth-sign
npm http GET https://registry.npmjs.org/aws-sign
npm http GET https://registry.npmjs.org/node-uuid
npm http GET https://registry.npmjs.org/cookie-jar
npm http GET https://registry.npmjs.org/form-data/0.0.8
npm http GET https://registry.npmjs.org/mime
npm http GET https://registry.npmjs.org/pegjs/0.6.2
npm http GET https://registry.npmjs.org/node-uuid/1.3.3
npm http 200 https://registry.npmjs.org/http-signature
npm http 200 https://registry.npmjs.org/tunnel-agent
npm http 200 https://registry.npmjs.org/json-stringify-safe
npm http GET https://registry.npmjs.org/http-signature/-/http-signature-0.10.0.tgz
npm http GET https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.3.0.tgz
npm http GET https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-4.0.0.tgz
npm http 200 https://registry.npmjs.org/qs
npm http 200 https://registry.npmjs.org/forever-agent
npm http 200 https://registry.npmjs.org/oauth-sign
npm http 200 https://registry.npmjs.org/aws-sign
npm http GET https://registry.npmjs.org/forever-agent/-/forever-agent-0.5.0.tgz
npm http GET https://registry.npmjs.org/qs/-/qs-0.6.5.tgz
npm http 304 https://registry.npmjs.org/mime
npm http 200 https://registry.npmjs.org/node-uuid
npm http 200 https://registry.npmjs.org/cookie-jar
npm http 200 https://registry.npmjs.org/form-data/0.0.8
npm http GET https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.3.0.tgz
npm http GET https://registry.npmjs.org/aws-sign/-/aws-sign-0.3.0.tgz
npm http 200 https://registry.npmjs.org/pegjs/0.6.2
npm http 200 https://registry.npmjs.org/node-uuid/1.3.3
npm http GET https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.0.tgz
npm http GET https://registry.npmjs.org/cookie-jar/-/cookie-jar-0.3.0.tgz
npm http GET https://registry.npmjs.org/mime/-/mime-1.2.9.tgz
npm http GET https://registry.npmjs.org/form-data/-/form-data-0.0.8.tgz
npm http GET https://registry.npmjs.org/node-uuid/-/node-uuid-1.3.3.tgz
npm http GET https://registry.npmjs.org/pegjs/-/pegjs-0.6.2.tgz
npm http 200 https://registry.npmjs.org/http-signature/-/http-signature-0.10.0.tgz
npm http 200 https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.3.0.tgz
npm http 200 https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-4.0.0.tgz
npm http 200 https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.3.0.tgz
npm http 200 https://registry.npmjs.org/aws-sign/-/aws-sign-0.3.0.tgz
npm http 200 https://registry.npmjs.org/forever-agent/-/forever-agent-0.5.0.tgz
npm http 200 https://registry.npmjs.org/qs/-/qs-0.6.5.tgz
npm http 200 https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.0.tgz
npm http 200 https://registry.npmjs.org/cookie-jar/-/cookie-jar-0.3.0.tgz
npm http 200 https://registry.npmjs.org/mime/-/mime-1.2.9.tgz
npm http 200 https://registry.npmjs.org/form-data/-/form-data-0.0.8.tgz
npm http 200 https://registry.npmjs.org/node-uuid/-/node-uuid-1.3.3.tgz
npm http 200 https://registry.npmjs.org/pegjs/-/pegjs-0.6.2.tgz
npm http 200 https://registry.npmjs.org/hawk
npm http GET https://registry.npmjs.org/hawk/-/hawk-0.13.1.tgz
npm http 200 https://registry.npmjs.org/hawk/-/hawk-0.13.1.tgz
npm http GET https://registry.npmjs.org/mute-stream
npm http GET https://registry.npmjs.org/lru-cache
npm http GET https://registry.npmjs.org/sigmund
npm http GET https://registry.npmjs.org/mkdirp
npm http GET https://registry.npmjs.org/rimraf
npm http GET https://registry.npmjs.org/ncp
npm http GET https://registry.npmjs.org/async
npm http GET https://registry.npmjs.org/deep-equal
npm http GET https://registry.npmjs.org/i
npm http 304 https://registry.npmjs.org/mute-stream
npm http 304 https://registry.npmjs.org/ncp
npm http 200 https://registry.npmjs.org/sigmund
npm http GET https://registry.npmjs.org/sigmund/-/sigmund-1.0.0.tgz
npm http 304 https://registry.npmjs.org/async
npm http 200 https://registry.npmjs.org/lru-cache
npm http 304 https://registry.npmjs.org/mkdirp
npm http 304 https://registry.npmjs.org/deep-equal
npm http 304 https://registry.npmjs.org/rimraf
npm http 304 https://registry.npmjs.org/i
npm http GET https://registry.npmjs.org/rimraf/-/rimraf-1.0.9.tgz
npm http GET https://registry.npmjs.org/lru-cache/-/lru-cache-2.3.0.tgz
npm http GET https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz
npm http GET https://registry.npmjs.org/deep-equal/-/deep-equal-0.0.0.tgz
npm http GET https://registry.npmjs.org/graceful-fs
npm http 200 https://registry.npmjs.org/sigmund/-/sigmund-1.0.0.tgz
npm http GET https://registry.npmjs.org/pkginfo
npm http GET https://registry.npmjs.org/cycle
npm http GET https://registry.npmjs.org/eyes
npm http GET https://registry.npmjs.org/stack-trace
npm http GET https://registry.npmjs.org/request
npm http 200 https://registry.npmjs.org/rimraf/-/rimraf-1.0.9.tgz
npm http 200 https://registry.npmjs.org/lru-cache/-/lru-cache-2.3.0.tgz
npm http 200 https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz
npm http 200 https://registry.npmjs.org/deep-equal/-/deep-equal-0.0.0.tgz
npm http 304 https://registry.npmjs.org/graceful-fs
npm http 304 https://registry.npmjs.org/request
npm http 304 https://registry.npmjs.org/pkginfo
npm http 304 https://registry.npmjs.org/eyes
npm http 304 https://registry.npmjs.org/cycle
npm http 304 https://registry.npmjs.org/stack-trace
npm http GET https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz
npm http GET https://registry.npmjs.org/cycle/-/cycle-1.0.2.tgz
npm http GET https://registry.npmjs.org/pkginfo/-/pkginfo-0.2.3.tgz
npm http 200 https://registry.npmjs.org/cycle/-/cycle-1.0.2.tgz
npm http 200 https://registry.npmjs.org/pkginfo/-/pkginfo-0.2.3.tgz
npm http 200 https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz
npm http GET https://registry.npmjs.org/assert-plus/0.1.2
npm http GET https://registry.npmjs.org/asn1/0.1.11
npm http GET https://registry.npmjs.org/ctype/0.5.2
npm http 200 https://registry.npmjs.org/ctype/0.5.2
npm http 200 https://registry.npmjs.org/assert-plus/0.1.2
npm http GET https://registry.npmjs.org/ctype/-/ctype-0.5.2.tgz
npm http 200 https://registry.npmjs.org/asn1/0.1.11
npm http GET https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.2.tgz
npm http GET https://registry.npmjs.org/asn1/-/asn1-0.1.11.tgz
npm http GET https://registry.npmjs.org/hoek
npm http GET https://registry.npmjs.org/boom
npm http GET https://registry.npmjs.org/cryptiles
npm http GET https://registry.npmjs.org/sntp
npm http GET https://registry.npmjs.org/mime/1.2.6
npm http GET https://registry.npmjs.org/combined-stream
npm http 200 https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.2.tgz
npm http GET https://registry.npmjs.org/async
npm http 200 https://registry.npmjs.org/ctype/-/ctype-0.5.2.tgz
npm http 200 https://registry.npmjs.org/asn1/-/asn1-0.1.11.tgz
npm http 200 https://registry.npmjs.org/boom
npm http 200 https://registry.npmjs.org/cryptiles
npm http GET https://registry.npmjs.org/boom/-/boom-0.4.2.tgz
npm http GET https://registry.npmjs.org/cryptiles/-/cryptiles-0.2.2.tgz
npm http 200 https://registry.npmjs.org/sntp
npm http 304 https://registry.npmjs.org/async
npm http 200 https://registry.npmjs.org/mime/1.2.6
npm http GET https://registry.npmjs.org/sntp/-/sntp-0.2.4.tgz
npm http GET https://registry.npmjs.org/mime/-/mime-1.2.6.tgz
npm http GET https://registry.npmjs.org/async/-/async-0.2.9.tgz
npm http 200 https://registry.npmjs.org/combined-stream
npm http GET https://registry.npmjs.org/combined-stream/-/combined-stream-0.0.4.
tgz
npm http 200 https://registry.npmjs.org/hoek
npm http 200 https://registry.npmjs.org/boom/-/boom-0.4.2.tgz
npm http 200 https://registry.npmjs.org/cryptiles/-/cryptiles-0.2.2.tgz
npm http GET https://registry.npmjs.org/hoek/-/hoek-0.8.5.tgz
npm http 200 https://registry.npmjs.org/mime/-/mime-1.2.6.tgz
npm http 200 https://registry.npmjs.org/sntp/-/sntp-0.2.4.tgz
npm http 200 https://registry.npmjs.org/async/-/async-0.2.9.tgz
npm http 200 https://registry.npmjs.org/combined-stream/-/combined-stream-0.0.4.tgz
npm http 200 https://registry.npmjs.org/hoek/-/hoek-0.8.5.tgz
npm http GET https://registry.npmjs.org/qs/0.5.1
npm http GET https://registry.npmjs.org/formidable/1.0.11
npm http GET https://registry.npmjs.org/bytes/0.1.0
npm http GET https://registry.npmjs.org/pause/0.0.1
npm http GET https://registry.npmjs.org/send/0.0.4
npm http 200 https://registry.npmjs.org/pause/0.0.1
npm http 200 https://registry.npmjs.org/send/0.0.4
npm http 200 https://registry.npmjs.org/bytes/0.1.0
npm http 200 https://registry.npmjs.org/formidable/1.0.11
npm http GET https://registry.npmjs.org/send/-/send-0.0.4.tgz
npm http GET https://registry.npmjs.org/pause/-/pause-0.0.1.tgz
npm http 200 https://registry.npmjs.org/qs/0.5.1
npm http GET https://registry.npmjs.org/bytes/-/bytes-0.1.0.tgz
npm http GET https://registry.npmjs.org/formidable/-/formidable-1.0.11.tgz
npm http GET https://registry.npmjs.org/qs/-/qs-0.5.1.tgz
npm http GET https://registry.npmjs.org/hoek/-/hoek-0.9.1.tgz
npm http 200 https://registry.npmjs.org/bytes/-/bytes-0.1.0.tgz
npm http 200 https://registry.npmjs.org/send/-/send-0.0.4.tgz
npm http 200 https://registry.npmjs.org/formidable/-/formidable-1.0.11.tgz
npm http 200 https://registry.npmjs.org/pause/-/pause-0.0.1.tgz
npm http 200 https://registry.npmjs.org/qs/-/qs-0.5.1.tgz
npm http 200 https://registry.npmjs.org/hoek/-/hoek-0.9.1.tgz
npm http GET https://registry.npmjs.org/delayed-stream/0.0.5
npm http 200 https://registry.npmjs.org/delayed-stream/0.0.5
npm http GET https://registry.npmjs.org/delayed-stream/-/delayed-stream-0.0.5.tgz
npm http GET https://registry.npmjs.org/nopt
npm http GET https://registry.npmjs.org/elementtree/0.1.5
npm http GET https://registry.npmjs.org/xcode/0.6.1
npm http GET https://registry.npmjs.org/bplist-parser
npm http GET https://registry.npmjs.org/osenv
npm http GET https://registry.npmjs.org/ncallbacks/1.1.0
npm http GET https://registry.npmjs.org/underscore/1.4.4
npm http GET https://registry.npmjs.org/dep-graph/1.1.0
npm http GET https://registry.npmjs.org/semver
npm http 200 https://registry.npmjs.org/delayed-stream/-/delayed-stream-0.0.5.tgz
npm http 200 https://registry.npmjs.org/bplist-parser
npm http 200 https://registry.npmjs.org/elementtree/0.1.5
npm http 200 https://registry.npmjs.org/osenv
npm http 200 https://registry.npmjs.org/xcode/0.6.1
npm http 200 https://registry.npmjs.org/ncallbacks/1.1.0
npm http 200 https://registry.npmjs.org/dep-graph/1.1.0
npm http GET https://registry.npmjs.org/elementtree/-/elementtree-0.1.5.tgz
npm http GET https://registry.npmjs.org/xcode/-/xcode-0.6.1.tgz
npm http GET https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.0.4.tgz
npm http GET https://registry.npmjs.org/osenv/-/osenv-0.0.3.tgz
npm http 200 https://registry.npmjs.org/nopt
npm http 200 https://registry.npmjs.org/underscore/1.4.4
npm http GET https://registry.npmjs.org/ncallbacks/-/ncallbacks-1.1.0.tgz
npm http GET https://registry.npmjs.org/dep-graph/-/dep-graph-1.1.0.tgz
npm http GET https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz
npm http GET https://registry.npmjs.org/underscore/-/underscore-1.4.4.tgz
npm http 200 https://registry.npmjs.org/semver
npm http GET https://registry.npmjs.org/semver/-/semver-2.0.10.tgz
npm http 200 https://registry.npmjs.org/elementtree/-/elementtree-0.1.5.tgz
npm http 200 https://registry.npmjs.org/xcode/-/xcode-0.6.1.tgz
npm http 200 https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.0.4.tgz
npm http 200 https://registry.npmjs.org/ncallbacks/-/ncallbacks-1.1.0.tgz
npm http 200 https://registry.npmjs.org/osenv/-/osenv-0.0.3.tgz
npm http 200 https://registry.npmjs.org/dep-graph/-/dep-graph-1.1.0.tgz
npm http 200 https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz
npm http 200 https://registry.npmjs.org/underscore/-/underscore-1.4.4.tgz
npm http 200 https://registry.npmjs.org/semver/-/semver-2.0.10.tgz
npm http GET https://registry.npmjs.org/express/3.1.0
npm http GET https://registry.npmjs.org/request/2.12.0
npm http GET https://registry.npmjs.org/moment
npm http GET https://registry.npmjs.org/accounting
npm http GET https://registry.npmjs.org/connect-xcors/0.5.2
npm http GET https://registry.npmjs.org/colors/0.6.0-1
npm http 200 https://registry.npmjs.org/connect-xcors/0.5.2
npm http 200 https://registry.npmjs.org/accounting
npm http 200 https://registry.npmjs.org/express/3.1.0
npm http 200 https://registry.npmjs.org/request/2.12.0
npm http GET https://registry.npmjs.org/request/-/request-2.12.0.tgz
npm http GET https://registry.npmjs.org/connect-xcors/-/connect-xcors-0.5.2.tgz
npm http GET https://registry.npmjs.org/express/-/express-3.1.0.tgz
npm http GET https://registry.npmjs.org/accounting/-/accounting-0.3.2.tgz
npm http 304 https://registry.npmjs.org/colors/0.6.0-1
npm http GET https://registry.npmjs.org/colors/-/colors-0.6.0-1.tgz
npm http 200 https://registry.npmjs.org/moment
npm http GET https://registry.npmjs.org/moment/-/moment-1.7.2.tgz
npm http 200 https://registry.npmjs.org/request/-/request-2.12.0.tgz
npm http 200 https://registry.npmjs.org/connect-xcors/-/connect-xcors-0.5.2.tgz
npm http 200 https://registry.npmjs.org/accounting/-/accounting-0.3.2.tgz
npm http 200 https://registry.npmjs.org/express/-/express-3.1.0.tgz
npm http 200 https://registry.npmjs.org/colors/-/colors-0.6.0-1.tgz
npm http 200 https://registry.npmjs.org/moment/-/moment-1.7.2.tgz
npm http GET https://registry.npmjs.org/xmlbuilder
npm http GET https://registry.npmjs.org/xmldom
npm http GET https://registry.npmjs.org/mime/1.2.6
npm http 200 https://registry.npmjs.org/xmldom
npm http GET https://registry.npmjs.org/xmldom/-/xmldom-0.1.16.tgz
npm http 200 https://registry.npmjs.org/xmlbuilder
npm http GET https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-0.4.2.tgz
npm http 304 https://registry.npmjs.org/mime/1.2.6
npm http GET https://registry.npmjs.org/mime/-/mime-1.2.6.tgz
npm http 200 https://registry.npmjs.org/xmldom/-/xmldom-0.1.16.tgz
npm http 200 https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-0.4.2.tgz
npm http 200 https://registry.npmjs.org/mime/-/mime-1.2.6.tgz
npm http GET https://registry.npmjs.org/abbrev
npm http GET https://registry.npmjs.org/sax/0.3.5
npm http GET https://registry.npmjs.org/underscore/1.2.1
npm http 304 https://registry.npmjs.org/sax/0.3.5
npm http GET https://registry.npmjs.org/sax/-/sax-0.3.5.tgz
npm http 200 https://registry.npmjs.org/underscore/1.2.1
npm http GET https://registry.npmjs.org/underscore/-/underscore-1.2.1.tgz
npm http 200 https://registry.npmjs.org/abbrev
npm http GET https://registry.npmjs.org/abbrev/-/abbrev-1.0.4.tgz
npm http GET https://registry.npmjs.org/pegjs/0.6.2
npm http GET https://registry.npmjs.org/node-uuid/1.3.3
npm http 200 https://registry.npmjs.org/sax/-/sax-0.3.5.tgz
npm http 200 https://registry.npmjs.org/abbrev/-/abbrev-1.0.4.tgz
npm http 200 https://registry.npmjs.org/underscore/-/underscore-1.2.1.tgz
npm http 304 https://registry.npmjs.org/node-uuid/1.3.3
npm http 304 https://registry.npmjs.org/pegjs/0.6.2
npm http GET https://registry.npmjs.org/pegjs/-/pegjs-0.6.2.tgz
npm http 200 https://registry.npmjs.org/pegjs/-/pegjs-0.6.2.tgz
npm http GET https://registry.npmjs.org/connect/2.7.2
npm http GET https://registry.npmjs.org/cookie/0.0.5
npm http GET https://registry.npmjs.org/buffer-crc32/0.1.1
npm http GET https://registry.npmjs.org/cookie-signature/0.0.1
npm http GET https://registry.npmjs.org/range-parser/0.0.4
npm http GET https://registry.npmjs.org/mkdirp/0.3.3
npm http GET https://registry.npmjs.org/commander/0.6.1
npm http GET https://registry.npmjs.org/fresh/0.1.0
npm http GET https://registry.npmjs.org/methods/0.0.1
npm http GET https://registry.npmjs.org/send/0.1.0
npm http GET https://registry.npmjs.org/debug
npm http 200 https://registry.npmjs.org/cookie-signature/0.0.1
npm http GET https://registry.npmjs.org/cookie-signature/-/cookie-signature-0.0.1.tgz
npm http 200 https://registry.npmjs.org/buffer-crc32/0.1.1
npm http 304 https://registry.npmjs.org/range-parser/0.0.4
npm http GET https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.1.1.tgz
npm http 304 https://registry.npmjs.org/mkdirp/0.3.3
npm http GET https://registry.npmjs.org/range-parser/-/range-parser-0.0.4.tgz
npm http GET https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.3.tgz
npm http 200 https://registry.npmjs.org/cookie/0.0.5
npm http 200 https://registry.npmjs.org/connect/2.7.2
npm http GET https://registry.npmjs.org/cookie/-/cookie-0.0.5.tgz
npm http GET https://registry.npmjs.org/connect/-/connect-2.7.2.tgz
npm http 304 https://registry.npmjs.org/commander/0.6.1
npm http 304 https://registry.npmjs.org/fresh/0.1.0
npm http 304 https://registry.npmjs.org/methods/0.0.1
npm http GET https://registry.npmjs.org/fresh/-/fresh-0.1.0.tgz
npm http GET https://registry.npmjs.org/commander/-/commander-0.6.1.tgz
npm http 304 https://registry.npmjs.org/send/0.1.0
npm http 304 https://registry.npmjs.org/debug
npm http GET https://registry.npmjs.org/send/-/send-0.1.0.tgz
npm http 200 https://registry.npmjs.org/range-parser/-/range-parser-0.0.4.tgz
npm http 200 https://registry.npmjs.org/cookie-signature/-/cookie-signature-0.0.1.tgz
npm http 200 https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.1.1.tgz
npm http 200 https://registry.npmjs.org/cookie/-/cookie-0.0.5.tgz
npm http 200 https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.3.tgz
npm http 200 https://registry.npmjs.org/connect/-/connect-2.7.2.tgz
npm http 200 https://registry.npmjs.org/fresh/-/fresh-0.1.0.tgz
npm http 200 https://registry.npmjs.org/commander/-/commander-0.6.1.tgz
npm http 200 https://registry.npmjs.org/send/-/send-0.1.0.tgz
npm http GET https://registry.npmjs.org/mime/1.2.6
npm http 304 https://registry.npmjs.org/mime/1.2.6
npm http GET https://registry.npmjs.org/qs/0.5.1
npm http GET https://registry.npmjs.org/pause/0.0.1
npm http GET https://registry.npmjs.org/bytes/0.1.0
npm http GET https://registry.npmjs.org/formidable/1.0.11
npm http 304 https://registry.npmjs.org/formidable/1.0.11
npm http GET https://registry.npmjs.org/formidable/-/formidable-1.0.11.tgz
npm http 304 https://registry.npmjs.org/pause/0.0.1
npm http 304 https://registry.npmjs.org/qs/0.5.1
npm http 304 https://registry.npmjs.org/bytes/0.1.0
npm http GET https://registry.npmjs.org/qs/-/qs-0.5.1.tgz
npm http GET https://registry.npmjs.org/bytes/-/bytes-0.1.0.tgz
npm http 200 https://registry.npmjs.org/bytes/-/bytes-0.1.0.tgz
npm http 200 https://registry.npmjs.org/qs/-/qs-0.5.1.tgz
npm http 200 https://registry.npmjs.org/formidable/-/formidable-1.0.11.tgz
C:\Users\raSor\AppData\Roaming\npm\phonegap -> C:\Users\raSor\AppData\Roaming\npm\node_modules\phonegap\bin\phonegap.js
phonegap@3.0.0-0.14.0 C:\Users\raSor\AppData\Roaming\npm\node_modules\phonegap
├── pluralize@0.0.4
├── colors@0.6.0-1
├── semver@1.1.0
├── qrcode-terminal@0.9.4
├── shelljs@0.1.4
├── optimist@0.6.0 (wordwrap@0.0.2, minimist@0.0.1)
├── node-static@0.7.0 (colors@0.6.0, mime@1.2.9)
├── prompt@0.2.11 (revalidator@0.1.5, pkginfo@0.3.0, read@1.0.5, utile@0.2.0, winston@0.6.2)
├── phonegap-build@0.8.3 (qrcode-terminal@0.8.0, optimist@0.3.7, shelljs@0.0.9,phonegap-build-api@0.3.3)
└── cordova@3.0.0 (ncallbacks@1.0.0, colors@0.6.0, open@0.0.3, shelljs@0.1.2, fo
llow-redirects@0.0.3, glob@3.2.3, tar@0.1.17, xcode@0.5.1, prompt@0.2.7, element
tree@0.1.3, request@2.22.0, express@3.0.0, plist@0.4.3, plugman@0.9.10, ripple-emulator@0.9.18)
C:\>

….. wow it downloaded almost the whole internet ….

The files ended up in C:\Users\<userid>\AppData\Roaming\npm-cache\

To get help:

C:\>phonegap

Change the nodejs prompt to start where you want your code to stay

  • Open C:\Program Files\nodejs\nodevars.bat
  • Change “%HOMEDRIVE%%HOMEPATH%” to some path of your choise. I changed to “E:\sor\projs-angular”
  • Save the file somewhere else, since you probably will be denied access.
  • Overwrite nodevars.bat with copy-paste.

To create a project – later, when the development envirs are installed:

C:\>phonegap create my-app
C:\>cd my-app
C:\>phonegap run android

Android

The requirements are at http://docs.phonegap.com/en/edge/guide_platforms_android_index.md.html#Android%20Platform%20Guide

Requirements for Android is

There are two IDE’s to choose from:

  • Android Studio based Intelli IDEA (JetBrains java tool with AngularJs plugin). Still only an early access preview
  • ADT bundle based on Eclipse

The Android Eclipse IDE you get from http://developer.android.com/sdk/index.html. You can get a whole ADT bundle for Windows -Size: 460 MB. Current is adt-bundle-windows-x86_64-20130917.zip.

It includes:

  • Eclipse 3.6.2 (Helios) or greater // Current is Eclipse Standard 4.3, 198 MB.
  • Eclipse JDT plugin (included in most Eclipse IDE packages).
  • Android Development Tools plugin (recommended)
  • Apache Ant for cmdline building – You find it in \eclipse\plugins\org.apache.ant_1.8.3.v201301120609\bin
  • and more…

Instructions for installing the bundle: http://developer.android.com/sdk/installing/bundle.html (and specific for Eclipse: http://wiki.eclipse.org/Eclipse/Installation)

Eclipse has some recommendations for Mobile devs: http://eclipse.org/mobile/ -just for info…

Return to the PhoneGap guide for Android: http://docs.phonegap.com/en/edge/guide_platforms_android_index.md.html#Android%20Platform%20Guide:

  • Add Environment variables by
    • Search for “Envir” – select “Edit the system Environment variables”
    • Press “Environment Variables…”
    • Unders System Variables scroll down to Path
    • Press Edit
    • Append to end of value: “;C:\Development\adt-bundle\sdk\platform-tools;C:\Development\adt-bundle\sdk\tools”

Test drive PhoneGap on Android

  • Open nodejs prompt

E:\sor\projs-angular>phonegap create pg-test1

 [warning] missing library phonegap/www/3.0.0
[phonegap] downloading https://github.com/phonegap/phonegap-app-hello-world/archive/3.0.0.tar.gz...
[phonegap] created project at E:\sor\projs-angular\pg-test1
  • Now try to build and run
E:\sor\projs-angular\pg-test1>phonegap local run android
[phonegap] adding the Android platform...
 [warning] missing library cordova/android/3.0.0
[phonegap] downloading https://git-wip-us.apache.org/repos/asf?p=cordova-android.git;a=snapshot;h=3.0.0;sf=tgz...
 [error] Please install Android target 17 (the Android 4.2 SDK). Make sure you have the latest Android tools installed 
as well. Run `android` from your command-line to install/update any missing SDKs or tools.
  • Opening Eclipse – Window – Android SDK Manager

Android SDK Manager

Correct – SDK Platform 17 was not installed – and neither was its build tools. Select those and install them

API 17

  • It turned out the ARM System Image for API 17 has to be installed. Install that too.
  • Next you need a virtual device to put the image onto. Goto Window – Android Virtual Device Manager – New

Android Virtual Device

  • Choose Target: API 17
  • Uncheck Use Host GPU, if you want to be able to capture an image like below
  • OK
  • Select the device and press Start
  • You might get and error similar to this
Starting emulator for AVD '768-1280'
emulator: WARNING: Requested RAM size of 1907MB is too large for your environment, and is reduced to 1072MB.
Failed to allocate memory: 8
  • If you get such an error just decrease the RAM and try again. The Emulator should now start.

Android Emulator

  • Now retry to build and run
E:\sor\projs-angular\pg-test1>phonegap local run android
[phonegap] adding the Android platform...
 [error] An error occured during creation of android sub-project. The JAVA_HOME environment variable is not set.
Set JAVA_HOME to an existing JRE directory.
Remember to also add JAVA_HOME to the PATH variable.
After updating system variables, open a new command window and retry.

OK – more environment variable gym needed.

  • Find JRE directory
    • Control Panel\Programs – Java – Tab: Java – View – Path: C:\Program Files\Java\jre7\bin
    • When you search for javac.exe in \java\ you find it in C:\Program Files\Java\jdk1.7.0_40\bin
  • Add Environment variables by
    • Search for “Envir” – select “Edit the system Environment variables”
    • Press “Environment Variables…”
    • Unders System Variables
      • Press New
      • Name: JAVA_HOME
      • Value: C:\Program Files\Java\jdk1.7.0_40
      • scroll down to Path
      • Press Edit
      • Append to end of value: “;%JAVA_HOME%\bin”
  • Close nodejs prompt and reopen it
  • Verify JAVA_HOME with c:\>set
  • Now retry to build and run
E:\sor\projs-angular>cd pg-test1
E:\sor\projs-angular\pg-test1>phonegap local run android
[phonegap] adding the Android platform...
 [error] An error occured during creation of android sub-project. Cannot locate ant.bat using the PATH environment variable
Retry after adding directory containing ant.bat to the PATH variable.
Remember to open a new command window after updating the PATH variable.
Visit http://ant.apache.org if you need to install Apache Ant.
Now ANT is missing. It was retrived when ADT bundle was retrieved.
  • Add Environment variables by
    • Search for “Envir” – select “Edit the system Environment variables”
    • Press “Environment Variables…”
    • Unders System Variables
      • Press New
      • Name: ANT_HOME
      • Value: C:\Development\adt-bundle\eclipse\plugins\org.apache.ant_1.8.3.v201301120609
      • scroll down to Path
      • Press Edit
      • Append to end of value: “;%ANT_HOME%\bin”
  • Close nodejs prompt and reopen it
  • Verify ANT_HOME with c:\>set
  • If you build and get the error
[error] An error occurred while building the android project.
  • .. then it could be some permissions. If you type c:\> path
  • .. then %JAVA_HOME% should have been replaced by its environment var. Try restart nodejs prompt as admin to get the right permissions and then restart back into the non-admin mode.
  • Now retry to build and run
E:\sor\projs-angular>cd pg-test1
E:\sor\projs-angular\pg-test1>phonegap local run android
[phonegap] adding the Android platform...
[phonegap] compiling Android...
[phonegap] successfully compiled Android app
[phonegap] trying to install app onto device
[phonegap] successfully installed onto device
Great - but where is the device emulator?
  • Well the emulator you need to specify, too:
E:\sor\projs-angular\pg-test1>phonegap local install android --emulator
[phonegap] installing app onto emulator
  • If emulator is not running phonegap will start it.

HelloWorld on emulator

HelloWorld among apps

Nice – we are rolling :-)

Ongoing…


The End

4 Comments

Add yours →

  1. Great introduction to start. Is there a part 2 of this?

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: