Static Hosting with Google Cloud and Cloudflare
Today I stumbled on a simple and flexible way to host a static site using Google Cloud Storage and Cloudflare. This isn’t very well documented so I wanted to write it up.
Today I stumbled on a simple and flexible way to host a static site using Google Cloud Storage and Cloudflare. This isn’t very well documented so I wanted to write it up.
In 2008 I stumbled across the opportunity to work as a sysadmin at the OSU Open Source Lab. When I started there I didn’t have much experience with internet infrastructure, but it quickly became a passion of mine and inspired a mission that has had a profound influence on my life. My Twitter profile has a (necessarily) succinct summary of that mission: Building infrastructure that makes the internet more usable to more people.
Today I was reminded of one of my neatest Node.js hacks. A few years ago, in the process of optimizing how Rackspace Cloud Monitoring compiles user-supplied alarms (a javascript-like DSL used to implement thresholds) we discovered that we were spending a significant amount of CPU time in a widely used Javascript implemetation of sprintf. This was back in the dark ages of Node.js, before util.format landed. The CPU time spent in sprintf wasn’t enough to be a problem: even compiling a few hundred thousand alarms is pretty fast, as compared to reading them out of a database, serializing the compiled alarms to XML, and loading them into Esper.
For the last few months I’ve been working on and off for Cloudkick (now Rackspace) on a project that we are calling Cast. I’m happy to announce that this afternoon we’re releasing Cast version 0.1. The source has been on Github all along, but with this release we feel that the project has finally progressed to a point where: We’ve implemented the functionality planned for the first iteration. The afforementioned functionality actually works against the current version of Node.
After writing my last post about the flow control techniques we are using in cast I realized that the process of writing the post was probably as valuable to me as the post will be to anyone else (especially since it was on such a well covered topic). It forced me to explicitly state and justify my reasoning, and caused me to rethink a few things in the process. Since then, whenever I’ve found myself contemplating a design issue I’ve tried to think of how I would write it up.
Late last summer I began working on Cloudkick’s new deployment tool, cast which is written in Node.js. At the time I had only minimal experience with JavaScript, having occasionally used it for frontend work on personal projects. After a crash course from Bjorn, Cloudkick’s in-house JavaScript wizard, I was able to write mostly working code. The Problem As others have found however, writing a Node app that is maintainable is a lot different than just writing one that works.
I’m nearly half way through my senior year here at Oregon State University (if all goes well I should graduate in June), but for the next few months it appears that my life will be dominated by a few major projects and a whole lot of minor ones. Since I haven’t been very successful in my efforts to think of a good topic to write about recently, hopefully a brief synopsis of my various projects will work instead.
I’ve had the privilege of spending this summer down in San Francisco working as an intern at Cloudkick (side note: if you like the cloud and you’re interested in working with an incredible team on some sweet projects, check out our jobs page) working on all sorts of cool projects. In any case, one of the projects I’ve been working on this summer is an Android client for Cloudkick. Earlier today I pushed version 0.
This will be the 4th post on this blog announcing that I’m switching to new blogging software - of 6 total posts. Maybe I just like deploying things more than maintaining them. But in this particular case, Wordpress had to go. Every few days it would just die randomly. The php-cgi processes would just lock up until I came in and killed things manually. Wordpress is actually pretty decent from a user perspective, and I suspect the lockups had something to do with the way I was running it or one of the plugins I was using.
For the last few months at the OSL we’ve been experimenting with a program called Ganeti. Ganeti is a system for managing a virtualization cluster. There are a lot of benefits to using Ganeti, which I’ll save for another time, but one of my favorites is that it has an HTTP API. For example (with hostnames redacted) russell_h@skyship ~ $ curl -k https://localhost:8889/2/nodes [ { "id": "node1.example.com", "uri": "/2/nodes/node1.example.com" }, { "id": "node2.