Skip to content

Instantly share code, notes, and snippets.

I may be slow to respond.

David Aurelio davidaurelio

I may be slow to respond.
  • Munich, Germany
Block or report user

Report or block davidaurelio

Hide content and notifications from this user.

Learn more about blocking users

Contact Support about this user’s behavior.

Learn more about reporting abuse

Report abuse
View GitHub Profile
#!/usr/bin/env python
Fixes file names for downloads from delivers downloaded files with file names in e-mail header format. The
fix_filename function from this module can decode such file names.
When this module is executed as main program, all file names passed as program
arguments are renamed properly:
davidaurelio / create.js
Created Feb 22, 2011
Constructor-less inheritance for ECMAScript 5
View create.js
var BaseObject = {
create: function create() {
var instance = Object.create(this);
instance._construct.apply(instance, arguments);
return instance;
extend: function extend(properties, propertyDescriptors) {
propertyDescriptors = propertyDescriptors || {};
davidaurelio / hastouch.html
Created Sep 6, 2011
Checking for touch support
View hastouch.html
<!doctype html>
<title>has touch?</title>
<h1>Has this device touch? </h1>
var isTouch = (function(){
var event = document.createEvent("TouchEvent"); // Should throw an error if not supported
return !!event.initTouchEvent; // Check for existance of initialization method
return false;
davidaurelio / EventEmitter.js
Created Mar 22, 2012
Constructable mixins in JavaScript
View EventEmitter.js
EventEmitter is usable as constructor and as mixin.
function EventEmitter() {}
// this does the trick
EventEmitter.prototype = EventEmitter;
EventEmitter.addListener = function(type, listener) {
this.listeners(type, true).push(listener);
View Usage
var a = new Angle().radians(Math.PI * 3 / 4),
b = new Angle().degrees(135);
var c = new Angle(a + b);
a.add(new Angle().degrees(30));
davidaurelio / point.js
Created Jul 18, 2012
A toString()’able point that allows addition
View point.js
function Point(x, y) {
if (arguments.length === 1 && typeof x === 'string') {
return x.slice(1, -1)
.map(function(tuple) {
return tuple.split(',', 2).map(parseFloat)
.reduce(function(point, coords) {
point.x += coords[0];
point.y += coords[1];
davidaurelio / point.js
Created Jul 18, 2012
A Point class that supports addition and subtraction of instances. Precision is 16bit fixed point per coordinate.
View point.js
A point constructor that creates objects supporting addition and subtraction.
The "trick" is to use 32bit integers and stuff two fixed 16bit fixed point
numbers into them that represent the coordinates of the point.
This approach has problems with overflow. E.g. when adding two points (0, 2)
and (0, -2), the addition will cause the y values to overflow into the 17th
bit, which is part of the x-value. When subtracting two points, e.g.
(.00390625, 0) - (0, -128)
davidaurelio / naive-super.js
Created Sep 7, 2012
Naive implementation of super in JS
View naive-super.js
Object.defineProperty(Object.prototype, 'super', {
get: function() { return Object.getPrototypeOf(this); }
function Foo() {}
Foo.prototype.reset = function() {
this.fooProp = 'reset';
davidaurelio / super-proxy.js
Created Sep 7, 2012
`super` using `Proxy.create`
View super-proxy.js
Object.defineProperty(Object.prototype, 'super', {
value: function(Constructor) {
var context = this;
var superProto = Object.getPrototypeOf(Constructor.prototype);
return Proxy.create({
get: function(_, name) {
return function() {
return superProto[name].apply(context, arguments);
davidaurelio / lazy-property.js
Created Dec 3, 2012
Lazy properties for ES5
View lazy-property.js
function lazyProperty(object, name, create) {
Object.defineProperty(object, name, {
configurable: true, // or false if defined on prototype objects
enumerable: false,
get: function() {
return this[name] = create(this);
set: function(value) {
Object.defineProperty(this, name, {
configurable: true,
You can’t perform that action at this time.