Skip to content

Instantly share code, notes, and snippets.

View constantology's full-sized avatar

christos constandinou constantology

View GitHub Profile
@constantology
constantology / LICENSE.txt
Created May 18, 2011 12:20 — forked from 140bytes/LICENSE.txt
140byt.es -- Click ↑↑ fork ↑↑ to play!
Copyright (c) 2011 YOUR_NAME_HERE, YOUR_URL_HERE
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
@constantology
constantology / npm.dedupe.sh
Created October 14, 2012 10:41
shell script to update and deduplicate npm modules
#!/bin/sh
# change the below line to point to your: PATH/TO/INSTALLED/NODEJS/lib/node_modules or just cd into the directory before running it
# cd $NODE_PATH;
npm update;
modules=`ls`;
for dir in $modules
@constantology
constantology / node.update.sh
Created October 14, 2012 10:49
shell script to update node to a specific version
#!/bin/sh
# add these two variables to your: ~/.bash_profile or ~/.bashrc or just hardcode the directories in place of the variables below
# export NODE_REPO=/usr/local/Library/node/repo
# export NODE_JS=/usr/local/Library/node/js
# example of upgrading to version 0.8.12
# $ sh node.update.sh v0.8.12
cd $NODE_REPO;
@constantology
constantology / SuperView.js
Created November 14, 2012 15:24
Backbone.View.$uper
;!function() {
"use strict";
// fn is the super class' callSuper that has being curried with its __super__ prototype
// proto was curried in by $uper's custom extend method
function callNestedSuper( fn, proto/*, ...args*/ ) {
var args = Super._.toArray( arguments ).slice( 1 ), val1, val2;
if ( args[1] === this.__lastMethod__ ) // avoid possible recursion errors
return this;
@constantology
constantology / event_keycode.js
Created November 14, 2012 19:18
1 character string range
var Events = Array.apply( [], Array( 90 ).reduce( function( e, v, i ) { // String.fromCharCode( 122 ) === 'z'
v = 33 + i; // String.fromCharCode( 33 ) === '!'
// so 123 - 33 === 90
e.KEY_CODE[v] = String.fromCharCode( v );
e.KEY_MAP[e.KEY_CODE[v]] = v;
return e;
}, { KEY_CODE : Object.create( null ), KEY_MAP : Object.create( null ) } );
/**
@constantology
constantology / more_goodera_example.js
Last active October 13, 2015 15:28
using functions to `case` match in `switch` statements

the main caveat is that each case function will be executed until a match is found, however, this would not be any different from doing the same thing using if/else.

note: i am not advocating this method, it's just something i've never seen done before and thought it was interesting enough to share.

@constantology
constantology / element_expandos.js
Created December 9, 2012 22:14
easy way to get a list of every expando property on all the supplied element in a list
var val = [document, new Date(), true, 1, 'foo'];
'a abbr acronym address area article aside audio b bdi bdo big blockquote body br button canvas caption '
+ 'cite code col colgroup command datalist dd del details dfn div dl dt em embed fieldset figcaption '
+ 'figure footer form frame frameset h1 h2 h3 h4 h5 h6 head header hgroup hr html i iframe img input ins '
+ 'kbd keygen label legend li link map mark meta meter nav noscript object ol optgroup option output p '
+ 'param pre progress q rp rt ruby samp script section select small source span split strong style sub '
+ 'summary sup table tbody td textarea tfoot th thead time title tr track tt ul var video wbr'.split( ' ' ).map( function( tag ) {
var el = document.createElement( tag );
return Object.getOwnPropertyNames( el ).filter( function( attr ) {
var value = val.concat( [attr] ), i = value.length;
@constantology
constantology / __proto__.js
Last active October 14, 2015 01:28
An explanation of `__proto__` using an example and a `__proto__` "polyfill" for MSIE 9 & 10.
function Collection() {
this.push.apply( this, arguments );
}
Collection.prototype = [];
Collection.prototype.push = function( item ) { // we need to wrap this.push in a function or we'll get a recursion error from
if ( arguments.length > 1 ) { // the arguments.length always being > 1 since the Array index is passed to the iterator
this.slice.call( arguments ).map( function( val ) { this.push( val ); }, this );
return this.length;
function Person(/* whatever args your gonna have*/) {
this.onSave_ = this.onSave.bind( this );
this.onSetAge_ = this.onSetAge.bind( this );
}
Person.prototype.save = function() {
this.database.insert( this.properties, this.onSave_ );
};
Person.prototype.setAge = function( newAge ) {
this.constructor.validate( "age", this, newAge, this.onSetAge_ );
@constantology
constantology / process.logger.js
Created July 24, 2014 09:39
using node's process to emit events to log stuff from anywhere
// use like this:
// process.emit( 'app:log', module, arg1, arg2, ..., argN );
var Module = require('module');
function logConsole(method, module) {
var args = [(new Date()).toJSON(), method];
var index = 1;
if (module instanceof Module) {