The problem with Amazon’s Load Balancing
Feb0
A year later, Amazon still haven’t fixed a fundamental problem with their load balancing product (Amazon ELB).
Amazon don’t provider customers with a fixed IP for a ELB, only a CNAME.
Since a CNAME can’t be the root of your domain (it must be an A record) – you can’t fully balance traffic to your domain.
At the moment, customers have to forward all traffic to a CNAME, from http://example.com to http://www.example.com, to load balance their domains. This introduces a single point of failure. If the server you allocate to serve traffic from the root of your domain goes down, nobody gets forwarded.
In addition, this root server isn’t load balanced, so it receives all the initial traffic to your site. This defeats ELB’s purpose somewhat.
There’s a post that’s been on Amazon’s ELB forums for about a year – with about 60 replies, this clearly is a popular ‘feature’ (or I would argue requirement). It’s a deal breaker for some.
Amazon’s response is this:
Thanks for all the feedback. We understand your concerns and supporting this feature is on our roadmap. Unfortunately, we do not have a specific timeline for its availability.
As one commentator puts it:
Serving HTTP traffic off your root domain out of your core stack is really a basic thing that any load balancing solution needs to support.
Amazon, when do you expect to launch this feature?
P2P using TCP & Ruby
Aug10
This is going to be a fairly technical post about the technologies behind Machsend and using P2P over TCP rather than UDP. I’v written a lot of context to the problem, so if you want to skip to the juicy protocol details look for the set of bullet points.
We recently launched Machsend, which enables people to send unlimited amounts of data from inside the browser. You literally drag a file onto the site, send the recipient a link, and they can download it straight away. Machsend uses TCP P2P connections to transfer data between clients.
Bowline Roadmap – Call for contributors
Aug3
I’ve been fairly overwhelmed in the amount of coverage my last post on Bowline got, more than 10,000 hits and in the top 50 Delicious links for the day – it’s great to see the Ruby community’s support for building desktop applications. This post is just to put out a brief roadmap and show any potential contributers how to get involved.
Currently I’m working on getting Ruby Threads working, Bowline would be a bit useless if it locked up every time you called out to Ruby. This involves upgrading upgrading Titanium’s Ruby version to 1.9, and using a rather obscure API for blocking the threads when Titanium calls Ruby (since Ruby isn’t thread safe). You can find the ticket here – if you’ve any experience with C++ please feel free to weigh in and help. This is the one major bottleneck to Bowline development – once it’s resolved we can get on with more interesting things.
I’m also working on closing the tickets – most of them to do with Windows support. At the moment I don’t have a Windows environment, just Linux and OSX – so more testers are welcomed.
I’ll be writing more documentation, tutorials, and a website. You can also expect a “twitter client in 5 minutes” screencast.
I’ve started up a Google Group for Bowline development here. This is one of the best times to contribute since the project is fairly young and can accommodate API changes without any issues.
Bowline – A Ruby GUI framework
Aug53
Recently I’ve been working on a Ruby GUI framework called Bowline.
In a nutshell, Bowline lets you build cross platform desktop applications with Ruby, HTML and JavaScript. The idea is to make building desktop apps as simple (and fun) as building Rails websites.
Bowline is built on top of Titanium, a desktop SDK which essentially provides a Webkit window (and loads of useful APIs). The fact that Titanium uses Webkit (and a fairly edge version at that) means that you can take advantage of all those nice CSS3 and HTML5 features, and you can design for one browser.
On top of Titanium, Bowline provides:
- A way of binding up Ruby and HTML
- MVC development
- Helpers, Models etc
- Gem packaging
- Generators, console & more
In a desktop app you don’t have the request/response cycle that web frameworks, like Rails, are built around. So, to replace that, Bowline has the idea of ‘Binders’ – Ruby classes that you can bind HTML to – so when the Ruby class changes, the HTML automatically updates.
Additionally I’ve ported the beautiful Aristo theme to CSS3, you can find it on Github here.
Using Titanium’s Developer tool, you can package your applications up for all three OSes, it’ll be sent up to the cloud and built.

The rule is show, don’t tell – so here’s a basic Twitter client I’ve written with Bowline. Download the app (OSX only at the moment) here.
Twitter clients are truly the new ‘Hello World’.

It’s early days for both Bowline and Titanium, but progress is quick and I hope we’ll have a fully fledged desktop framework soon.
Machsend release – P2P file transfers inside the browser
Jul1
After a private beta of Machsend, it’s now being released publicly – check it out.
Machsend lets you send files to people without any size restrictions. Files are sent in a P2P fashion, straight from one client to another – which means transfers are faster, and you don’t have to trust a third party with your data.
If you’re on the same LAN, files are sent directly. Otherwise a type of firewall traversal allows the two clients connect (which works on about 80% of firewalls). There are few good papers that explain more here and here.
Machsend uses Yahoo! BrowserPlus to perform this TCP magic.
Data transfers are unlimited – I’ve sent gigabytes over the system without any trouble.
Machsend works on OSX and Windows. Unfortunately there isn’t a version of BrowserPlus for Linux yet, but one is being developed.
There are a few more details on the ‘about‘ page.






