             (cb) =>
                 async.parallel([
                     (cb) =>
-                        winston.debug("get info from Google Compute engine api about all instances")
-                        @get_instances
+                        winston.debug("get info from Google Compute engine api about all VMs")
+                        @get_vms
                             cb : (err, data) =>
                                 if err
                                     cb(err)
                                 else
                                     for x in data
                                         gce_data[x.name] = x
-                                    winston.debug("got gce api data about #{misc.len(gce_data)} instances")
+                                    winston.debug("got gce api data about #{data.length} VMs")
                                     cb()
                     (cb) =>
-                        winston.debug("get info from our database about all instances")
+                        winston.debug("get info from our database about all VMs")
                         table.pluck('name', 'gce_sha1').run (err, data) =>
                             if err
                                 cb(err)
                             else
                                 for x in data
                                     db_data[x.name] = x.gce_sha1
-                                winston.debug("got database data about #{misc.len(db_data)} instances")
+                                winston.debug("got database data about #{misc.len(db_data)} VMs")
                                 cb()
                 ], cb)
             (cb) =>
                 objects = []
                 for name, x of gce_data
-                    new_sha1 = JSON.stringify(x)
+                    new_sha1 = misc_node.sha1(JSON.stringify(x))
                     sha1 = db_data[name]
                     if new_sha1 != sha1
                         objects.push(name:name, gce:x, gce_sha1:new_sha1)

###
Rewrite this to use the official node.js driver, which is pretty good now, and seems an order
of magnitude faster than using the gcloud command line!

https://googlecloudplatform.github.io/gcloud-node/#/docs/v0.23.0/compute/snapshot
https://github.com/GoogleCloudPlatform/gcloud-node

npm install --save gcloud
gcloud = require('gcloud')(projectId: 'sage-math-inc')
gce=gcloud.compute()
snapshot = gce.snapshot('test')
snapshot.getMetadata((err, metadata, apiResponse) -> console.log(err, metadata, apiResponse))
zone = gce.zone('us-central1-c')
vm = zone.vm('test')
vm.getMetadata((err, metadata, apiResponse) -> console.log(err, metadata, apiResponse))
vm.stop((err, op, apiResponse) -> console.log(err, op, apiResponse);global.op=op)
op.onComplete(->console.log("DONE"))
###



###
For now the only rules we care about are:

1. If an instance is TERMINATED, but the desired state is RUNNING and preempt is true, then:
     if it was TERMINATED within 5 minutes create it as non-preempt and start it
     if it was TERMINATED > 5 minutes ago create it as preempt and start it.

2. If an instance has been RUNNING for 12 hours and is not preempt, but the desired state
   is RUNNING and preempt is true, then:
     stop the instance and recreate and start it as prempt.

###
winston     = require('winston')

        @_disk_cache ?= {}
        return (@_disk_cache[key] ?= new Disk(@, opts.name, opts.zone))

    snapshot: (opts) =>
        opts = defaults opts,
            name : required
