Skip to content

Instantly share code, notes, and snippets.

View glenjamin's full-sized avatar

Glen Mailer glenjamin

View GitHub Profile
@glenjamin
glenjamin / index.js
Last active February 19, 2016 16:09
Get Font Styles
var getComputedStyle = require('computed-style');
var fontStyles = ['font-family', 'font-size', 'font-weight', 'font-style'];
module.exports = function getFontStyles(domElement) {
return {
element: domElement,
styles: extractFontStyles(domElement)
}
}
@glenjamin
glenjamin / github-pages.sh
Last active February 7, 2016 21:07
Script that automatically rebuilds a github pages branch
#!/bin/sh
set -e
# !!!!
echo "*** REPLACE this with the line which builds docs"
# !!!!
echo "*** Docs built ***"
tmpdir=`mktemp -d /tmp/gh-pages-build.XXXXXX`
@glenjamin
glenjamin / server-hot-reload.js
Created July 15, 2015 16:23
Hack way to "hot reload" when server rendering via NodeJS
// assuming that the React app is inside /client/
// clear cached client modules so next server render uses new stuff
webpack.plugin('done', function() {
Object.keys(require.cache).forEach(id => {
if (/\/client\//.test(id)) {
delete require.cache[id];
}
});
});
@glenjamin
glenjamin / example.js
Created January 15, 2016 17:29
Record Immutable is Map
var Immutable = require('immutable');
var FooRecord = Immutable.Record({ a: 1, b: 2 }, 'foo');
Immutable.is(new FooRecord(), new Immutable.Map({a: 1, b: 2}));
// => true
@glenjamin
glenjamin / test.php
Created December 12, 2013 17:38
PHPUnit data providers can have test docs too!
<?php
public function providerGetEventId() {
return array(
'wrong way around' => array(
'Premier League',
array('id' => 5,'name' => 'Hull', 'shortname' => 'HUL'),
array('id' => 6,'name' => 'Manchester City', 'shortname' => 'MNC'),
null
),
'different event type' => array(
@glenjamin
glenjamin / objectZip.js
Created December 10, 2013 17:36
objectZip iterator for javascript
var _ = require('underscore');
/**
* functional zip() for JS objects
*
* Skips keys not present in both sides
*
* @param a left object
* @param b right object
* @param f(key, aval, bval) iterator
@glenjamin
glenjamin / pgk.sh
Last active December 30, 2015 17:09
Portable shell function to neatly wrap the pgrep/pkill combo
# List processes via pgrep, then prompt to pkill
pgk() {
[ -z "$*" ] && echo 'Usage: pgk <pattern>' && return 1
pgrep -fl $*
[ "$?" = "1" ] && echo 'No processes match' && return 1
echo 'Hit [Enter] to pkill, [Ctrl+C] to abort'
read && pkill -f $*
}
@glenjamin
glenjamin / water.clj
Last active December 28, 2015 04:59
*That* interview question, explored
(ns water
(require [clojure.string :as s]))
(defn right-reductions [f l]
"just like (reductions) but form the right"
(reverse (reductions f (reverse l))))
(defn transpose [m]
"Transpose a list of lists"
(apply mapv vector m))
@glenjamin
glenjamin / all-buffered-io-ever.js
Created November 6, 2013 08:37
What's the "fast" way to read all the data from a socket?
// Basically every data read ever looks something like this
// Can this be optimised using the callback advice from http://blog.trevnorris.com/2013/08/long-live-callbacks.html
function getData(callback) {
http.get('http://localhost/whatever', function(err, res) {
if (err) return callback(err);
res.on('error', callback);
var buffers = [], length = 0;
res.on('data', function(chunk) {
@glenjamin
glenjamin / slowish.js
Last active December 27, 2015 12:29
How to optimise callbacks that need state
var app = express();
database.connect(function(err, db) {
app.db = db;
app.listen(1337);
})
app.get('/stuff/:id', stuffHandler);
function stuffHandler(req, res) {
app.db.fetch(req.params.id, function datastoreCallback(err, data) {