Installing AWS Command Line Tools on Mountain Lion

A lot of this probably works just fine under Linux, too.

A bunch of the tools require java, which can be downloaded from Apple, and you’ll want to set your environment’s JAVA_HOME variable (in ~/.bash_profile, unless it’s .bash_login or .bashrc).

export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Home

Then you’ll need to log into AWS console, and download your access and secret keys. While you’re there, download the EC2 CLI tools.

I install them into a custom directory. I like /opt, but your mileage may vary. You’ll have to change all the path declarations below, though.

Add the following lines to ~/.bash_profile (as above for Java)

export EC2_HOME=
export AWS_ACCESS_KEY=""
export AWS_SECRET_KEY=""

Next, download and install Amazon’s Elastic Load Balancer CLI Tools, and configure them by adding a couple lines to your ~/.bash_profile.

export AWS_ELB_HOME=/opt/aws/elb

Then download Amazon’s Elastic Beanstalk CLI Tools, which require Ruby 1.8.7 or greater, and Python 2.7 or 3.0 (both of which are pre-installed on Mountain Lion).

You will need to create an AWS Credentials File. I’m not sure what changed, and why these tools don’t use BASH environment variables, but I use ~/.aws_credentials. You’ll also need to do this if you use the RDS CLI tools.


And then you need to create a BASH environment variable pointing to the newly created file. Put this in ~/.bash_profile.

export AWS_CREDENTIAL_FILE=$HOME/.aws_credentials
export AWS_EB_HOME=/opt/aws/eb

If you want to use a different default region (instead of us-east), you’ll need to add this line to your BASH profile.


To install Amazon’s Relational Database Service CLI Tools, you will need to be sure to include the credentials file created above, and the BASH line to point to it. You will then simply need to add a couple more lines to ~/.bash_profile.

export AWS_RDS_HOME=/opt/aws/rds

That’s it. Your AWS environment is set up.

Back to work.

Filed under:


Poisoning the DOM By Thumbnailing a Video

I’m building a large-scale Content Management System (CMS) for Video, tied to a Content Delivery Network (CDN), and one of the big issues we’ve identified relates to the difficulty of thumbnailing video files which are loaded into our system with missing images.

HTML5 is great, and the good folks at have built a tidy little video player which enables us to display the video in a <video> element on the page. Flowplayer allows quite a lot of control over the video.

And, the wonderful <canvas> tag allows the developer to extract a thumbnail image, directly from that video.

function takeThumbnail() {
	$('#new_thumbs').prepend('<canvas id="thingamajigger' + cnt + 
		'" style="height:240px; width:428px;"></canvas>');
	var tc = document.getElementById('thingamajigger' + cnt);
	var v = document.getElementById('vidyo');

	ctx = tc.getContext('2d');

It would seem that all I have to do is call canvas.getImageData() to get a base64-encoded copy of the image, which I can then post to a server.

And, this works fine.

If the page, and the video are on the same server. I’m told that if the server hosting the image has the proper headers for CORS, then it works, too. Our CDN does not, so I cannot verify.

Anyway, when I try this with a video on my CDN, I get an exception (18) indicating that I have poisoned my DOM, and cannot access the resultant image programatically.

IMHO, this is stupid. Fucking hackers.

So, the solution, is the great folks over at Great API for doing this.

Filed under:


Colorado Doesn't Need The Death Penalty

Earlier this month, almost as soon as the Colorado legislative session began, the Denver Post reported that legislators may attempt to repeal the death penalty in Colorado. I hope they do.

I’m half-tempted to launch into a diatribe about morality, and how a single innocent person dying at the state’s hands, and… But, I won’t. I’ll simply say this.

We have a government, allegedly, by the people, for the people, and of the people. I’ll agree that sometimes in our history (maybe today), our government is less by/for/of the people than other times. People are messy, and a lot of the time we do things badly. Mostly, we mean well, and we try.

But, if government is by, for, and of, the people, when government kills someone - however much that person has done to earn it - government does so in our names. Government kills for us. The person killed is killed by us. The person killed is of us.

I understand the rage - anger enough to wish death upon someone. I’ve felt it. You’ve felt it. But, when the chips are down, I won’t kill someone, and, I suspect, neither will you. To allow the state to kill based on that rage is simply rationalization. If government is us, and government kills someone, then we killed someone. I did. You did.

“Why” is just the rationalization. “Why” helps us sleep at night.

It doesn’t make it right.

So, when, or if, a bill comes before him, I hope that my State Representative, Dave Young, a man I’d like to call my friend, can risk his job to prevent the State of Colorado from ever killing someone in my name - or yours.

Filed under:


Another Lesson For Online Fundraisers from Obama 2012

Filed under:


Lessons For Online Fundraising From Obama 2012

Filed under:


Election Prediction 2012

Well, tomorrow is the end of all that awful advertising. If you’re like me, you are really happy to be done with that. Here’s what I expect to happen tomorrow night.

  • President Obama wins with 303 Electoral Votes (OH, NH, CO, VA)
  • Presidential Election is called by 11pm EST
  • Elizabeth Warren wins MA-Sen
  • Claire McCaskill wins MO-Sen
  • Dave Young wins CO State House 50.
  • Democrats take control of CO House
  • Democrats maintain control of CO Senate
  • Colorado legalizes & regulates Marijuana for all
  • Cory Gardner (CO-04), and Oil/Gas Whore wins re-election (I predict this in 2014, too)

You heard it here, first.

Filed under:


You Will Have Only Yourself to Blame

Earlier today, David Sirota tweeted from Colorado, suggesting that our Secretary of State, Scott Gessler, is gearing up to be a pivotal figure in the coming election.

He’s right. In 2010, I was close to the Betsy Markey (CO-04) campaign, and heard regular polling information which showed two different things. Some data showed that challenger Cory Gardner was up solidly. Other data showed that the race with neck-in-neck. The difference between the polling was the “likely voter” models that the polls used.

I also heard a lot about how disappointed many liberals and long-time, activist Democrats were in Colorado’s 4th district. Lots of people were unhappy that President Obama and the Democratic Congress didn’t pursue Single Payer, or they caved on Banking Reform, or they didn’t close Guantanamo Bay, or some other issue. Andrew Romanoff even led a challenge to appointed incumbent Senator Michael Bennet, based on these thing.

All of this added up to the Republican wave in Colorado, which was only broken by Sen. Bennet’s effort to paint Weld DA, Ken Buck, his opponent, as anti-woman. Bennet won by about five-votes-per-precinct in Colorado. But, it was otherwise a horrible year for Democrats in the state, as we lost the state House, Treasurer, Attorney General, and two Congressional seats.

Basically, the GOP polls were right. Those polls indicated that many left-leaning voters were disaffected and would stay home. They did.

Fast forward to today. Sirota’s point that Gessler is in a position to play a pivotal role in our election, and possibly a nefarious one, is obvious.

What is not obvious is that the fact that Democratic-leaning voters stayed home led to Gessler’s success in 2010, and his positioning himself to be able to play a role in 2012’s Presidential election. And this illustrates a significant difference between the bases of the two parties in Colorado (or at least the 4th CD). The Republicans handle their angst in their primaries. The Democrats handle it in the general. If a Republican doesn’t like the incumbent Republican, they primary him/her, and then support the winner in the general. If a Democrat is unhappy with the incumbent Democrat, we stay home for the general.

And we let people like Scott Gessler get elected.

So, when Gessler is in a position to hand Colorado to Romney, please remember: you - the guy who didn’t vote because Obama or Bennet or Markey wasn’t liberal enough - helped elect Mitt Romney POTUS.

Filed under:


A successful Git branching model

A successful Git branching model »

In this post I present the development model that I’ve introduced for all of my projects (both at work and private) about a year ago, and which has turned out to be very successful. I’ve been meaning to write about it for a while now, but I’ve never really found the time to do so thoroughly, until now. I won’t talk about any of the projects’ details, merely about the branching strategy and release management.

Filed under:


REST from Ruby. IBM Thoughts

Filed under:


Wanted: Internet-Entrepreneurial Government Affairs Organization

Last week, in the wake of the Internet-Entrepreneurial community’s celebration over the defeat of SOPA/PIPA, Joel Spolsky posted a great piece about the need for our community to become proactive about governmental and regulatory changes that affect our industry. He makes some sage points.

First, he and Marco Ament, in another article, point out that the defeat of this particular law will not really achieve anything. If there is one thing I must be understood, it’s that the powerful, the entrenched interests, are tenacious. This bill will be back, and the organizations pushing the bills will have learned from this episode. The idea that if big content can stop piracy it will save their models will return, and with greater force. We will lose this fight, if we don’t act now to change the dynamics at play.

I diverge from Spolsky where he bemoans the ill effects that money has on politics, and suggest that if our community offers candidates something better than money-for-tv, in the form of YouTube, or somethings, that we can begin changing the conversation. While agree that Lessig is right, about the corrupting power of money in politics, and about the general argument that huge, monied interests are basically able to buy and sell our government, I don’t see an answer to our problems - at least not in the near (read: next session of Congress) term.

Until the entire game changes, our focus needs to be on two things, playing the game as the rules set out now, and a concerted effort at demonstrating that we are not some rabble - a bunch of hackers in garages - but a community of serious, innovative, nimble, job-creators.

To achieve these ends, we need an industry organization which can follow legislation as it is introduced - not in the two weeks prior to a floor vote. That organization needs to provide unbiased information about the legislation to its members, and then must build strategy for supporting or defeating it. The organization also needs to identify members of both houses of Congress who are either our allies, or reasonable enough to give our positions serious consideration, and we need to support those members with significant money. As much as I hate to say it, that’s the way the game is played.

That’s the short term plan. I think we probably have a break for the next few months, while the business of Washington turns toward a presidential campaign, but once a new Congress is seated, we have got to be back on this.

I’m willing to take an early lead, starting a 501c(3) and (4), building some tech infrastructure for information sharing, etcetera, but this won’t have the slightest effect if this project is not “we” - with a fearsome board of directors, and some shared vision and direction. Who’s in (@lofdev)?

Filed under:

Politics Tech Startups