Archive for October, 2013

A post about backing up your data.

Posted on October 29th, 2013 in security | No Comments »

Death of my Macbook Air

A few weeks ago my Macbook air died. It’s SSD drive went out (and coincidentally Apple issued a notice that they are replacing SSD’s on all new Macbook Air’s a few weeks later.) The main reason for this post is to tell you to BACK UP YOUR DATA. Luckily, I had all my important data backed up in Dropbox and larger files that I don’t want replicated to all machines to Amazon S3/Glacier via the amazing Arq software.

A warning on local backups

To save money, one might find it most cost effective to plunker down $99 for a 1TB USB hard drive and just run Time Machine (on Mac) or Carbon Copy Cloner but really that’s not good enough as an only backup. A fire in your home or theft would wipe out all your precious files and memories.

Dropbox to save the day?

Above, I mentioned I used both Dropbox and Arq. Dropbox is just convenient, drag files to the DB folder—it’s backed up. One might even tell me that now you can store files on Dropbox and choose not to replicate them across all machines (an annoyance in the past) but still, at $40+ a month for 500GB of storage, that’s ridiculously expensive — almost 500 bucks a year!) If you were to put that data on Amazon S3 it’d cost you roughly $8.34 a month.

Amazon S3 and Arq

Amazon S3 is big, fast, and cheap. The problem with Amazon S3 though is that it’s not user friendly. It’s really for developers writing apps to store large amount of data—but Amazon has no restriction on use cases so it’s perfectly fine to use for personal data storage.

I really dig Arq because its a one time fee of $40 and then after that you simply connect it up to Amazon S3 or Glacier and pay for only what you use, forever. Amazon however charges per download and upload of your files and every time you access the files (but we’re talking fractions of a penny, so though it probably does end up being a lot cheaper we really can’t compare the two products.) Here’s Amazon’s S3 pricing chart. The other two great things about Arq is that it can do progressive backups, meaning it only backs up changes over time, reducing your costs and time to upload, and Arq also encrypts your data before placing it on Amazon so even if someone were to break into Amazon’s servers or illegally access your account there, your data is still encrypted from the outside and only Arc (with your password) can decrypt it.

Enter Bitcasa

Saying the above, Arq is probably still too complicated for the average computer user. Simply signing up for Amazon S3 alone and generating an access key is above most people’s heads. I’m sure there’s a lot of alternatives out there but I’m looking for one I can recommend to friends and family. I discovered Bitcasa, a hot local startup with big names behind it offering unlimited storage. I honestly haven’t used it enough to recommend it—nor is the company old enough to gain my trust yet, who knows if it will flounder. But U did ask their support team some questions:

Davita: Hello! Do you have any questions I can help answer for you?
You: hi
i don’t get how this can be infinite
what if I have 100TB to transfer
also do i have immediate access to download it
Davita: Hi there :) How are you today?
I get it, you’re thinking “what’s the catch”
no catch
You: this is not financially viable as a company
Davita: we’re able to do this because of our deduplication process
You: oh ok
do you throttle upload after a certain amount?
Davita: Nope, we do not throttle
You: and where do you store this data?
on amazon s3 or an internal data center?
Davita: Amazon s3
You: what about Amazon Glacier
do you use that or no?
Davita: Currently, no
You: If i upload 1TB to S3 that’s the equiv of paying Amazon $100 a year. So bitcasa is betting that my content will be similar to others so they can make somewhat of a profit
by reducing the upload size on s3
Davita: That’s one way to think about it :)
You: Cool. Thanks for the info!

If this company does go under, they will certianly give you enough time (weeks) to download all your data before hand. If someone actually wants to give it a try let me know how it is.


Start with Dropbox for your small stuff which is a no-brainer (free 2GB on signup) and then find a way to backup your larger data offsite. Try Arq (feel free to comment if you need help with it) or follow other suggestions in the comments.

Improving prototypal inheritance in JavaScript with a surrogate class.

Posted on October 29th, 2013 in JavaScript | No Comments »

A friend of mine encountered this page by Michael Bolin, author of Closure: The Definitive Guide. It’s a very great writeup that distills a lot of JavaScript edge-cases and “gotchas” for a person just starting to get advanced in the language. I would have appreciated something like that back in the day and like most just learned it slowly through experience and bug-bashing over the years.

Though the page did cover prototypal inheritance well and it’s powerful ability to do pretty much everything that regular inheritance models of languages like Java can do, one small bit that the page didn’t cover was trying to call super on a parent class. The issue is that there is no built-in “init” method on a JavaScript constructor. The simple act of initializing a “class” in JavaScript both creates the object and calls its setup routine inside the class. This might be perfectly fine in most people’s day-to-day Javascript but if you ever need your parents class to do some additional setup work for example in the case of a factory pattern, you need this support. JavaScript frameworks like Backbone.js and jQuery invented their own ways to solve this issue but it’s important to know the minimum amount of effort to solve this problem without relying on a 3rd party framework.

The answer is to create an empty “surrogate” class to hold the parents prototype. That way when it is initialized, you have the chance to run the contents of constructor when you’re good and ready:

function Mammal(obj) { = || 'Anonymous Mammal';

    // Basic conditional code you normally couldn't do.
        this.category = 'marsupial';

Mammal.prototype.legs = 4;

var lion = new Mammal({ name: 'Lion' });
var tiger = new Mammal({ name: 'Tiger' });

// This middle constructor is required because we can't instantiate `Mammal` directly as `Marsupial`'s prototype
// or else it would run through its "initialize" stuff too early.
function Surrogate(){};
Surrogate.prototype = Mammal.prototype;

function Marsupial(obj) {
    Mammal.apply(this, arguments);

Marsupial.prototype = new Surrogate();
Marsupial.prototype.pouch = true;
Marsupial.prototype.legs = 2;

var kangaroo = new Marsupial({name: 'kangy'});

The above example is highly contrived but you can see that you can actually push off a bunch of responsibility from the child class to its parent. Which means less setup work for each child and the ability for the parent class to decide the “DNA” of the child based on the parameters passed in. For example if this was a vehicle parent class, mixin the diesel engine class or if the child is a truck or hybrid engine if the child is an electric car.