I got this email a little while ago from the Google Apps team:
We recently announced upcoming changes to the maximum number of users for Google Apps. We want to let you know that, as a current customer, the changes will not affect you.
As of May 10, any organization that signs up for a new account will be required to use the paid Google Apps for Business product in order to create more than 10 users. We honor our commitment to all existing customers and will allow you to add more than 10 users to your account for softwarethings.com at no additional charge, based on the limit in place when you joined us.
The Google Apps Team
As a long time Google Apps user (I have 2 Google Apps domains of my own, and use 3 others for various companies), I don’t understand the motivation behind this. On the one hand, at $50 per user per year, it’s not like $550/year is going to break the bank for 11 users. On the other hand, every penny counts at a startup. Although this doesn’t impact me, I’m not a huge fan. Seems like a PHB (Pointy Haired Boss) move to me, but I may be alone in that thinking.
If you have ever booked travel online, it sucks. Two wonderful travel related exceptions are Kayak (but, I can’t actually book there) and TripIt (same). Below are a list of frustrations that I dealt with today but especially for the airlines, I have seen these same sites have the same problems for literally months.
Airtran: Simply impossible to redeem rewards. Trying to book rewards travel in any browser (FF, Chrome, IE) brings you to the last step but when you click submit you just get taken back to the same location with no error message. You also have the least amount of time to claim mileage for their rewards program; 90 days. My favorite airline, my least favorite website to actually have to use.
Hertz: Literally just about every single operation I performed resulted in a “We’re Sorry” screen of death or a helpful error message like [ERRF][AL49]-FIZZ-BUZZ. Operations would seemingly fail taking you to the “We’re Sorry” screen but then you would get a confirmation email.
US Airways: Decided to use flash for all kinds of totally unnecessary things like the little modal wait popups. You get 6 months from the date of travel to claim mileage.
Delta: Best of the 3 airline sites I had to use today, you get 9 months to claim a mileage credit.
I literally lost several hours of my life today, that I will never get back, to shitty travel companies. No wonder half these guys are going out of business.
I recently found a link comparing ec2 instance sizes and it reminded me of something I had discovered. The standard small has 1 compute unit, 1.7GB of RAM, 160GB of storage, and is 32-bit. The High-CPU medium has 5 compute units, 1.7GB of RAM, 350GB of storage, and is 32-bit. When deploying a system recently we decided to move from 6 mediums to 12 smalls (the price is the same, 2 smalls costs the same as one medium). We didn’t need the extra disk space, and believed the app was primarily memory bound and thought we would benefit from having the additional IO throughput on the extra machines. What we didn’t account for was that on a standard small you don’t actually get an entire CPU and so you end up with a lot of stolen time. What this ended up leading to was an increase in page load time by 50-100%.
In short, 2 smalls, although identical in price to a medium, has significantly worse performance (for this app) than a single medium. The stolen CPU time is just a killer.
Having had enough of AT&T, back in June 2010 I packed up my things, and headed over to Sprint. Having been a long time iPhone/AT&T user, I wasn’t sure whether Sprint would be able to compete but I thought the HTC Evo could at least give the iPhone a run for its money. And any carrier could beat AT&T on service so I wasn’t worried about that.
Fast forward to March 2011 and Google announces that it is partnering with Sprint specifically for Google Voice integration. As a long time GV user (I was migrated over from when the service was GrandCentral), I was hoping that Sprint/Google would fix some of the annoyances of having to use the GV Android app.
Today I was added to the early preview and able to successfully integrate my Sprint phone with Google Voice. Since I was already a GV user, all this meant was that I basically clicked a button. After clicking the magic button, all outbound calls and texts come from my GV number without having to use the GV app. Very nice. And, my old number still works.
The only down side is that the GV app doesn’t allow you to receive status bar notifications for just new voice mails, it’s an all (text and voice) or nothing thing. Since I prefer to use my messaging app for texts, and google voice for voice mails, this wasn’t ideal for me. What I ended up doing was configuring GV to send me text messages without transcriptions, so that I at least get a text when I have a voice mail. Then I just fire up the GV app to listen in, or I use my text message app to reply.
Recently DHH (creator of rails) posted about his, uhm, dislike of Cucumber. I’ve used both Cucumber and rSpec for unit/functional/integration testing and have my own opinions but I’ve never thought about Cucumber as strictly a test tool. DHH said, “Cucumber makes no sense to me unless you have clients reading the tests.”
Where I’ve found Cucumber to be most useful is in creating pseudo-DSL’s. It already has a parser for English and creating steps for Cucumber is dead simple. Below is an example of a little Cucumber feature I put together for Solr:
Feature: Solr Works
In order to serve up search pages
Our system must have a working search index
Scenario Outline: Search
Given the solr URL <url>
When I search for <term>
Then I should see <count> results
And it should take <time> milliseconds
| url | term | count | time |
| http://localhost:8983/solr | generic post | over 5 | under 250 |
| http://localhost:8983/solr | lkjasdlkjasd post | under 1 | under 250 |
To me what Cucumber gives you, is readability and documentation. Cucumber is much better suited at being an effective specification and communication tool than strictly for testing. In the example above, it’s useful for a sysadmin to be able to read that and easily make changes to it. Integrating it into your monitoring environment is another plus.
Today I joined the Amazon office hours session for their Elastic MapReduce product. Office hours are a neat idea. Instead of marketers talking to engineers, it’s engineers talking to engineers. I liked the format a lot more than any other webinars I’ve been on.
They covered a few new features:
S3 multipart uploads (good for parallelization)
Elastic IP address integration (good for your master node)
Automatic EC2 instance tagging (good for finding your stuff)
They leaked a few upcoming features including:
You will be able to use spot instances for EMR in the next 4-6 weeks.
Updated version of Pig coming in the next few weeks
They also walked through bringing up a Hadoop based hive cluster that worked well with S3 and ephemeral storage. From start to finish it was only a half dozen slides or so, pretty cool stuff.
Recently I was working on a project where I had gotten access to a no.de smartmachine and was trying to keep the system requirements minimal. One of the features of this project required that social networks be polled periodically for each user. I wasn’t anxious to run something like delayed_job or even worse, quartz so I rigged up a solution using just node.js primitives with Redis.
First, I created a sorted set for my users. A neat feature of sorted sets in Redis is that the ordering of an element is determined by it’s score, where the score is an arbitrary floating point value. Using the unix timestamp of the last poll time gave me a reasonable ordering for the data set. Every time their social network is polled, the score is updated for that user.
Next, I just used setInterval for each user. The interval handles polling social networks using user specific credentials. Obviously this would be problematic for many users, but the scheme makes it easy to partition the work across multiple instances if that happened to be needed.
Anyhow, nothing groundbreaking here but I thought it was a nice use of ordered sets and not needing a separate scheduling package of some sort was an added bonus. Curious if/when node will go mainstream, it’s a lot of fun to work with.
You know those machines you see at grocery stores for turning 2 years of pocket change into actual bills? Those are Coinstar machines, and Coinstar basically owns that market. They also charge nearly 10% for that ‘service’. Typically I redeem as a gift certificate (Amazon usually) to avoid the service fee. Today the machine had some kind of technical difficulties while fulfilling my gift certificate order, so they gave me a cash voucher but with no service fee. $40 later, well, it paid for gas. Some of it.
Last day in Kona with Katherine and the family. Such a beautiful place filled with beautiful people. Looking forward to a 16 hour hackathon on the way home, but definitely going to miss my family. April is going to be a crazy month culminating in a move to New York, just trying to squeeze every last minute out of this amazing trip.