In architectural terms, the way we craft large-scale applications in JavaScript has (in my opinion) changed in one fundamental way in the last three years. Once you remove the minutia of machinery bringing forth data-binding, immutable data-structures and virtual-DOM the one key concept that many devs seem to have organically converged on is composition. Composition is incredibly powerful, allowing us to stitch together reusable pieces of functionality to "compose" a larger application. Composition eschews in a mindset of things being good when they're modular, smaller and easier to test. Easier to reason with. Easier to distribute. Heck, just look at how well that works for Node via npm. Composition is one of the reasons we regularly talk about React "Components", "Ember.Component", Angular directives, Polymer elements and of course, straight-up Web Components. We may argue about the frameworks and libraries surrounding these different flavours of component, but not that co
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// This event emitter emits events, but reserves the right to publish events to | |
// for its creator. It uses a WeakMap for true encapsulation. | |
const eesToEventMaps = new WeakMap(); | |
export default class EventEmitter { | |
constructor(publisher) { | |
const eventMap = Object.create(null); | |
eesToEventMaps.set(this, eventMap); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// unminifed version of https://apis.google.com/js/plusone.js | |
// see https://developers.google.com/+/plugins/+1button/#getting-started | |
window.___jsl = window.___jsl || {}; | |
window.___jsl.h = window.___jsl.h || 'm;\/_\/apps-static\/_\/js\/gapi\/__features__\/rt=j\/ver=zVTxVnVbJog.en_US.\/sv=1\/am=!FRwcaGMpC1CIJ0aI4g\/d=1\/'; | |
window.___jsl.l = []; | |
window.___gpq = []; | |
window.gapi = window.gapi || {}; | |
window.gapi.plusone = window.gapi.plusone || (function () { | |
function f(n) { |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//Code to create a list of touches called pointerList | |
var pointerList = []; //Array of all the pointers on the screen | |
window.addEventListener("pointerdown", updatePointer, true); | |
window.addEventListener("pointermove", updatePointer, true); | |
window.addEventListener("pointerup", remPointer, true); | |
window.addEventListener("pointercancel", remPointer, true); | |
function updatePointer(e) { | |
if(e.pointerType === "touch") { |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
let tee = (a) => {console.log(String(a)); return a} | |
// our applicator | |
let $_ = (n) => { | |
let args = new Array(n); | |
for (let i = 1; i <= n; i++) { | |
args[i-1] = `$${i}` | |
} | |
return (raw, ...values) => | |
Function(...args.concat(tee('return ' + raw.reduce( |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
SELECT repository_name, count(repository_name) as pushes, repository_description, repository_url | |
FROM [githubarchive:github.timeline] | |
WHERE type="PushEvent" | |
AND repository_language="Ruby" | |
AND PARSE_UTC_USEC(created_at) >= PARSE_UTC_USEC('2012-04-01 00:00:00') | |
GROUP BY repository_name, repository_description, repository_url | |
ORDER BY pushes DESC | |
LIMIT 5 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function onOpen() { | |
var ss = SpreadsheetApp.getActiveSpreadsheet(); | |
var menuEntries = [ {name: "Run Query", functionName: "runQuery"} ]; | |
ss.addMenu("HTTP Archive + BigQuery", menuEntries); | |
} | |
function runQuery() { | |
var projectNumber = 'httparchive'; | |
var sheet = SpreadsheetApp.getActiveSheet(); |
A hopefully short and concise explanation as to how Clojure deals with Objects. If you already write Clojure, this isn't for you.
You know what an Interface is if you write/read Java or PHP 5+. In Clojure it might be called defprotocol.
user> (defprotocol IABC
(also-oo [this])
(another-fn [this x]))
IABC
Hello,
Here is the list of demos showcased in the introduction to the demoscene I did during the Monster Audio-Visual demos in a TCP packet talk I gave at JSconf EU 2014.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"name": "my-app", | |
"version": "1.0.0", | |
"description": "My test app", | |
"main": "src/js/index.js", | |
"scripts": { | |
"jshint:dist": "src/js/*.js'", | |
"jshint": "npm run jshint:dist", | |
"jscs": "jscs src/*.js", | |
"browserify": "browserify -s Validating -o ./dist/js/build.js ./lib/index.js", |