Setting Up and Move to Amazon EC2

This is really cool.  I have moved this blog and the dozen or so other websites I maintain to this new server.  I am pretty excited about the initial results.  Though I shouldn’t be surprised by any means.  It is just exciting to see the difference.

The old server and slow internet:

Home Server


On stella it got the worst rating, as it should.

Now for the performance of the Amazon EC2 Micro instance:

Amazon Ec2

Talk about a huge difference in time.  It is really the performance of what the website should be.

So far the cloud and the Amazon EC2 setup has not been bad at all.  I configured an Ubuntu 10.10 Maverick x64 instance.

The documentation is pretty good.  It was a bit difficult figuring out which ubuntu cloud instance I should choose from.  I ended up finding the following page useful: the images

And then to figure out how to login using PuTTY on a windows box since you can’t use the normal username/password combination:

All in all – the information is available once you can find it.


Jumped in on Amazon EC2

I have obviously heard all the hype of the cloud infrastructures. Never had a need to jump in and try it though. I have been happy with my server machine that happily runs 24/7 using ubuntu. I have had it running over a full year without having to restart that machine even once. I made the mistake of looking at performance of the server. Not a good idea. I quickly realized that some of the websites I was hosting need to be on a more production like server. Now where do I turn? Maybe the cloud was my answer?

I really enjoy controlling the server so I immediately ruled out Google’s App cloud. It also ruled out the old $7 dollars/month domain hosting sites. Though some do allow ssh access they do not allow you to do upgrades on the server. I am down to only a few select. There may be others out there but it came down to Slicehost and Amazon EC2. Basically, since Amazon had the free year and I have heard so many good things about it. It ended up being a easy choice. The only probably is how much I will pay after the free year is up. I might end up going back to my old server if the cost is too high. Time will tell :-)

I personally went with the Ubuntu Maverick x64 bit install. Here is the details –

Here is some help for connecting with PuTTY for the first time:

User Experience

At CodeFreeze this year, I went to the User Experience (UX).  They went through things that I have picked up from our UX team but it ended up providing valuable reminders.

One such idea is that on our team we can do user experience testing during requirements, prototype and final stages of development.  Persona’s are necessary, of course, during all stages of development. It is key to understand your customer and how they end up using the system.

Here are a list of things to think about and general tips when going to a customer site to do user testing:

  • Look at the users cube, cheat sheets, etc.
  • Users will often say and do things differently
  • Record their interactions with others
  • How often do they use the software?  all day? occasionally?
  • Who conducts the test?  Business as well as ux team members.  Business / Developers can also be great observers.

Cognitive Walkthrough

  • Take a story and go through it as if you were this person.
  • Getting context around what the person is, what they are doing, etc.
  • Quote: “Take a user to the edge of the cliff and then watch them step off.  Let the user struggle a bit and then come back and ask questions later.”
  • Question you can ask when the user is struggling: Do you see anything else that would help you?

IndexedDB vs. WebSQL

At this point, it sounds like IndexedDB will be more highly adopted then WebSQL.

Mark West did a nice overview. I summarized a his comparison slides below:

• A real, relational db implementation on the client (SQLite)
• Data can be highly structured, and JOIN enables quick, ad-hoc access
• Big conceptual overhead (SQL)
• Not very JavaScripty, browser support is poor, and the spec has been more or less abandoned.

• Sits between full-on SQL and unstructured key-value pairs in “localStorage”
• Values are stored as structured JavaScript objects, and an indexing system facilitates filtering and lookup.
• Asynchronous, with moderately granular locking
• Joining normalized data is a completely manual process

“The working group is designing this API so it could be wrapped by JavaScript libraries; for instance, there’s plenty of room for a CouchDB-style API on top of our IndexedDB implementation. It would also be very possible to build a SQL-based API on top of IndexedDB (such as WebDatabase).” – Arun Ranganathan, Firefox Developer

Code Comparisons:

Mysqld Fails to Start

When I ran mysqld I would get:

> 090127 10:00:30 InnoDB: Operating system error number 13 in a file
> operation.
> InnoDB: The error means mysqld does not have the access rights to
> InnoDB: the directory.
> InnoDB: File name ./ibdata1
> InnoDB: File operation call: ‘open’.
> InnoDB: Cannot continue operation.

Finally I looked in /etc/mysql/my.cnf and figured out that my bind-address needed to be updated. So took about an hour to figure that one out. It would be best if I could just leave it to localhost for the bind_address but I can not do that right now.

For others where it is not the bind_address it could be number of other things. I started reading through this thread:  It was very helpful to think through the scenarios.

Hudson Modify Environment Variables Properties

Myself and another have been trying to figure out how to modify the environment variables programmaticly using groovy in Hudson. After a little of tinkering we were able to do it.

def hudson = hudson.model.Hudson.instance
def globalProps = hudson.globalNodeProperties
def props = globalProps.getAll(hudson.slaves.EnvironmentVariablesNodeProperty.class)
for (prop in props) {
    prop.envVars.put("TEST_ENV", "WORKS")
} //This is needed in order to persist the change

Then if you want to expand this for the slaves:

def slaves = hudson.model.Hudson.instance.getNodes()
for (slave in slaves) {
    println "-----------------------"
    println "-----------------------"

    def props = slave.nodeProperties.getAll(hudson.slaves.EnvironmentVariablesNodeProperty.class)
    for (prop in props) {
        prop.envVars.put("TEST_ENV", "WORKS")

Comcast Download/Upload Speed

I was considering doing a CLEAR plan which says it averages around 3-6 Mbps download speed. Not quite as fast as I would want. My guess is that the CLEAR plan does not truly ever reach 6 Mbps.

Think I will stick with Comcast for a while…
Comcast Speedtest