Heroku introduced a major update today to the platform. In addition to the press release and blog post, here is a list of all updated content:
Devcenter.heroku.com
// If no exception is passed into 'getScriptName', it will only | |
// retrieve the URL of the script where 'getScriptName' is defined. | |
// In order to get the URL of a different script file, you must | |
// pass an exception generated in this script file to 'getScriptName'. | |
try { | |
(0)(); | |
} catch(ex) { | |
getScriptName(ex, onScriptNameKnown); | |
} |
_XMLHttpRequest = XMLHttpRequest; | |
XMLHttpRequest = function () { | |
Object.defineProperty(this, | |
"__onreadystatechange", | |
{value: null, | |
writable: true, | |
enumerable: false}); | |
Object.defineProperty(this, | |
"onreadystatechange", |
// Injecting JavaScript | |
// Basic compact | |
document.body.appendChild(document.createElement("script")).src="foo.js" | |
// Function wrapped | |
(function(d){d.body.appendChild(d.createElement("script")).src="foo.js"})(document) | |
// With "with" | |
with(document){body.appendChild(createElement("script")).src="foo.js"} | |
// Injecting CSS |
Heroku introduced a major update today to the platform. In addition to the press release and blog post, here is a list of all updated content:
Devcenter.heroku.com
// Storage decorator base class | |
function StorageDecorator(storage) { | |
this._storage = storage; | |
} | |
StorageDecorator.prototype.getItem = function(key) { | |
return this._storage.getItem(key); | |
} | |
StorageDecorator.prototype.setItem = function(key, value) { | |
return this._storage.setItem(key, value); |
In a perfect world, where things are done well, not just quickly, I would expect to find the following when joining the company:
Documentation
Accurate / up-to-date systems architecture diagram
Accurate / up-to-date network diagram
Out-of-hours support plan
Incident management plan
This article has been given a more permanent home on my blog. Also, since it was first written, the development of the Promises/A+ specification has made the original emphasis on Promises/A seem somewhat outdated.
Promises are a software abstraction that makes working with asynchronous operations much more pleasant. In the most basic definition, your code will move from continuation-passing style:
getTweetsFor("domenic", function (err, results) {
// the rest of your code goes here.
tlrobinson ~/tmp $ node promise-repl.js | |
q> require("q-fs").read("promise-repl.js") | |
<Buffer 0a 76 61 72 20 56 4d 20 3d 20 72 65 71 75 69 72 65 28 22 76 6d 22 29 3b 0a 76 61 72 20 52 45 50 4c 20 3d 20 72 65 71 75 69 72 65 28 22 72 65 70 6c 22 29 ...> | |
q> |
See https://en.bitcoin.it/wiki/BIP_0070 for the latest version of this document; I'll keep this document so the process of discussion/revision isn't lost.
This document proposes protocol buffer-based formats for a simple payment protocol between a customer's bitcoin client software and a merchant.
ror, scala, jetty, erlang, thrift, mongrel, comet server, my-sql, memchached, varnish, kestrel(mq), starling, gizzard, cassandra, hadoop, vertica, munin, nagios, awstats