Skip to content

Instantly share code, notes, and snippets.

View ianb's full-sized avatar

Ian Bicking ianb

View GitHub Profile
$ cat packages.txt
minimock
formencode
sqlobject
tempita
initools
zptkit
pastewebkit
deliverance
httpencode
@ianb
ianb / tjs-bookmarklet
Created October 25, 2013 17:55
TogetherJS bookmarklet
javascript:(function%20()%20%7Bwindow._TogetherJSBookmarklet%20%3D%20true%3Bs%3Ddocument.createElement('script')%3Bs.src%3D%22https%3A%2F%2Ftogetherjs.com%2Ftogetherjs.js%22%3Bdocument.head.appendChild(s)%3B%7D)()%3Bvoid(0)
class Detector:
def __init__(self):
self.detectors = []
self._pending = []
self.matches = []
def feed_input(self, obj, index):
"""After instantiating Detector and adding individual detector coroutines, call
feed_input(obj, index) over and over until you are done. You should end with a
sentinal obj. Look in .matches to get the results.
@ianb
ianb / assert.js
Last active December 16, 2015 17:19
assert() for Javascript
function AssertionError(msg) {
this.message = msg || "";
this.name = "AssertionError";
}
AssertionError.prototype = Error.prototype;
/* Call assert(cond, description1, ...)
An AssertionError will be thrown if the cond is false. All parameters will be logged to the console,
and be part of the error.
*/
@ianb
ianb / promisizer.js
Last active December 15, 2015 19:29
function promisize(func) {
return function () {
try {
var promise = func.apply(this, arguments);
if (! promise.isThenable) {
var result = new Resolver();
result.resolve(promise);
return result.promise;
} else {
return promise;
@ianb
ianb / new.js
Created January 28, 2013 21:37
Thinking about what the new operator really looks like, if you treat Object.create() as the more fundamental operation
function new_(constructor /* arguments to constructor */) {
var args = Array.prototype.slice.call(arguments, 1);
var obj = Object.create(constructor.prototype);
var result = constructor.apply(obj, args);
if (result === undefined) {
result = obj;
}
return result;
}
@ianb
ianb / Class.js
Last active December 11, 2015 07:19
A simple implementation of a class pattern for Javascript
var Class = function (superClass, prototype) {
if (prototype === undefined) {
prototype = superClass;
} else {
var newPrototype = Object.create(superClass);
for (var a in prototype) {
newPrototype[a] = prototype[a];
}
prototype = newPrototype;
}
@ianb
ianb / .emacs.el
Created January 14, 2013 19:28
My .emacs
(custom-set-variables
;; custom-set-variables was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
'(auto-save-file-name-transforms (quote (("\\`/[^/]*:\\(.+/\\)*\\(.*\\)" "/Users/ianbicking/.emacs-saves/autosave"))))
'(backup-directory-alist (quote ((".*" . "/Users/ianbicking/.emacs-saves/backup/"))))
'(delete-old-versions t)
'(flymake-allowed-file-name-masks (quote (("\\.\\(?:c\\(?:pp\\|xx\\|\\+\\+\\)?\\|CC\\)\\'" flymake-simple-make-init) ("\\.cs\\'" flymake-simple-make-init) ("\\.p[ml]\\'" flymake-perl-init) ("\\.php[345]?\\'" flymake-php-init) ("\\.h\\'" flymake-master-make-header-init flymake-master-cleanup) ("\\.java\\'" flymake-simple-make-java-init flymake-simple-java-cleanup) ("[0-9]+\\.tex\\'" flymake-master-tex-init flymake-master-cleanup) ("\\.tex\\'" flymake-simple-tex-init) ("\\.idl\\'" flymake-simple-make-init))))
'(frame-background-mode (quote
@ianb
ianb / gist:4162743
Created November 28, 2012 17:33
func_closure
def make_adder(n):
def adder(x):
return n + x
return adder
two = make_adder(2)
print two.__code__.co_freevars
# => ('n',)
print two.func_closure[0].cell_contents
# => 2
@ianb
ianb / gist:4162673
Created November 28, 2012 17:24
smalltalk introspection?
Object extend [
makeAdder: value [
^ [ :x | x + value]
]
].
closure := Object new makeAdder: 5.
"Now: how to you inspect the closure object to reveal that x == 5 ?"