Using Bower with Travis-CI

I ran into a couple hang-ups while trying to get a client-side library running on Travis-CI. Due to the nature of client-side dependency conflicts and a few quirks with bower, it ended up being a little more work than anticipated, but I managed to get it working.

The first issue I hit was with conflicting libraries. When running bower install from the command line, it will give you a choice of which version you would like to use. To get around this, you can use bower install -f which will force the more recent version, but if you want more control, you can also specify resolutions in your bower.json.

{
    "dependencies": {...}, 
    "resolutions": {
      "underscore": "~1.5.2"
    }
} 

Then I hit this issue.

The authenticity of host 'github.com (192.30.252.129)' can't be established. RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48. Are you sure you want to continue connecting (yes/no)?

Bower was trying to download dependencies over ssh/git and Travis does not have the Github RSA key fingerprint. NPM defaults to https so you never hit this (unless you manually specify someting like git@github.com:jashkenas/underscore.git in your package.json). To get around this you can turn off the check by placing StrictHostKeyChecking no in ~/.ssh/config. So here is my working .travis.yml.

before_script:
  - npm install -g grunt-cli
  - npm install -g bower
  - echo -e "Host github.com\n\tStrictHostKeyChecking no\n" >> ~/.ssh/config
  - bower install -f

language: node_js
node_js:
    - "0.10"

Push State with Node.js and Express

I spent some time getting a single page app with push-state set up on heroku, so I figured I would share how I did it. For those unfamiliar, push state allows you to manipulate the url in the browser without refreshing the page. This is great for client-side apps which had to rely on location.hash in the past.

This doesn’t seem like much of a server-side issue, and it isn’t until the user tries to do something like bookmark the page or send it to a friend. Obviously, the server doesn’t know by default that http://example.com/posts is a client-side route. It will try to match the route and you will likely end up with a 404. So the key is getting any route to load your index page while still allowing static assets such as javascript, css, images, fonts, ect.. to be loaded.

To get it working I ended up using express and it was actually pretty simple. Here is my server script.

var express = require('express'),
    path = require('path'),
    port = process.env.PORT || 8080,
    app = express();
 
app.configure(function() {
  app.use(express.static(__dirname + '/public'));
});

app.get('*', function(request, response){
  response.sendfile('./public/index.html');
});

app.listen(port);
console.log("server started on port " + port);


Also, you should be able to add routes before the app.get('*', .... Hope this helps someone in the future.

I’m finally getting around to uploading some of the videos I took from my 3 week trip to Europe last May. This is was from the Inter vs AC Milan match that Meghan and I went to at the San Siro stadium in Milan, Italy.   We were sitting pretty far up although closer than the video makes it out to be.  The fans in Italy were pretty crazy compared to the fans in London.   They were setting off flares and fireworks for most the game.  You can see some of it in the first video below.

Fans setting off flares

Pre-match

I made it to the NPower Championship Playoff Final at Wembley Stadium in London. I managed to scalp a ticket about 30 minutes before the game.  The match was Blackpool vs West Ham with the winner being promoted to the Premier League.  I sat in the West Ham section. West Ham won with a late goal in the  87’ minute. This is after the match. If you have any spare 3D glasses lying around, you can change the quality to HD and click the 3D link that shows up.  Google can apparently make video’s that you upload to youtube 3D.  They also give you the option to fix shakiness if they detect it.  It works, but in order to do it, they have to crop frames in the picture which can make your picture look a little distorted at times.  This video is a good example: Duomo di Milano (Milan Cathedral) - Milan, Italy

We took a boat from Interlaken to Thun and spent the day in Thun. This was taken with a GoPro Hero 2.

Very cool video by Bret Victor. Instant feedback is a very important part of software development and it’s often overlooked.

Writing code? That’s the easy part. Getting your application in the hands of users, and creating applications that people actually want to use — now that’s the hard stuff.

Jeff Atwood - http://www.codinghorror.com

My Experiences with Zecco.com

So, a little over a year and a half ago, I decided I wanted to give the stock market a try for myself. I wanted a site that had a low trading costs and a low minimum balance. Enter Zecco.com.

Zecco, which stands for “Zero Commission Cost”, is an online trading community that, like its name implies, offers commission free trades. There are, however, a few guidelines…

  • Account minimum of $2,500

  • 10 free trades a month

Update: As of March 2009, the minimum balance was raised to $25,000 to get 10 free trades a month.

Accounts that do not meet these guidelines or for every trade after your first 10 are $4.50 a trade which is still lower than most sites that I am aware of.

Other than a few minor mishaps, my experience with Zecco has been excellent. The site seems like it was built to teach and inform the beginning investor. The forum is very active and full of members willing to share their knowledge of investing and give their opinions on companies. The community side of Zecco also allows, but does not obligate, users to share their portfolios and daily trades.

I would highly recommend Zecco to anyone who wants to give the stock market a try for themselves.

Yodlee Moneycenter

Update: I now use Mint.com in place of Yodlee Moneycenter. It has come a long way since I wrote this post.

Yodlee Moneycenter it is an online application that allows you to group all of your bank, credit card, investment, loans, and even reward accounts in a single application. If you have more than a few of accounts at different institutions, this can be a huge convenience and time-saver. HSBC’s “Easy View”, Bank of America’s “My Portfolio”, and Wachovia’s “One Stop” are all themed versions of Yodlee, but anyone can use it free at http://moneycenter.yodlee.com.

Yodlee categorizes your transactions and gives you a chance to set up and manage a monthly budget for each category. You can also set up email alerts for accounts reaching a minimum balance, a CD maturing, large withdraws/deposits from/to an account, and many others. There is a net-worth tracker, which tells you the overall worth of all your assets minus any liabilities. Monthly records are kept so you can see how your wealth is changing over time.

Most people are probably a little hesitant to add all their accounts into an application like this, but let me ensure you that Yodlee has a strong focus on security. A few months back they also added multi-factor authentication.

I have been using Yodlee for about a two years now.Yodlee is free; you can register for an account here.