We’ve found that tracking everything is key to moving fast, but the only way to do it is to make tracking anything easy.
You can actually get pretty far on a single MySQL database and not even have to worry about partitioning at the application level. You can "scale up" to a machine with lots of cores and tons of ram, plus a replica. If you have a layer of memcached servers in front of the databases (which are easy to scale out) then the database basically only has to worry about writes. You can also use S3 or some other distributed hash table to take the largest objects out of rows in the database. There's no need to burden yourself with making a system scale more than 10x further than it needs to, as long as you're confident that you'll be able to scale it as you grow.
Imagine that your task for the day is to localize a piece of software -- and luckily for you, the only output the program emits is two messages [..] how hard could that be?
[... some time later ...]
[..] where $directory_count % 10 is 2, 3, or 4 (except where $directory_count % 100 is 12, 13, or 14), the word for "directories" is forced to be genitive singular -- which means another ending [..] But with all other integer values, since "directory" is an inanimate noun, when preceded by a number and in the nominative or accusative cases (as it is here, just your luck!), it does stay plural, but it is forced into the genitive case -- yet another ending.
14 months ago, my fiancé and I moved to Berlin, and it's been pretty awesome, frankly. It's cheap to live, it gets PROPER winters, with SNOW that hangs around for AGES, but the city somehow copes and keeps the trains running, the food is decent, and I can walk to work in 25 minutes if the mood takes me. It's the first place I've lived for any length of time other than London, and it's great.
But alas, stuff ends. For personal reasons, we're moving back to London in the first week of April, leaving behind Berlin, a nice flat, a lot of good friends, and a really decent Thai curry place that I hold an unassailable mayorship on (11 checkins in the last 2 months). We haven't been to London in more than a year now, so this may be a little weird*.
Leaving Berlin also means leaving my job. I'm looking for a new one, ideally one where I can work in a small team, in person, and ship interesting and beautiful things. I'm not too picky about programming language, and I know how to scale things and the sorts of things you haven't thought of yet that'll hurt you. I have a CV and a portfolio and a github repository - all the usual stuff. Contact me if you have anything interesting.
* Looking forward to that first Shepherdess, though.
Every response should contain hyperlinks to other resources, where the structure/metadata around it indicates what's on the other end. It should still be self-describing even if the URL is completely opaque -- "nice URLs" do not make you RESTful.
You should never need an "endpoint" or any documentation at all, whether machine or human-readable. I should be able to explore your whole API just using HTTP. Ideally you'd use the exact same URLs for your API and browser-human interfaces, using the Accept: header to get different representations of the response.
Almost everybody fucks this up, and just uses 'meaningful' URLs that you're expected to build yourself, and lots of sassy human documentation to tell you what the constants are.
Total rubbish, of course. The only actual 'proper' REST interface anyone I talk to can come up with is AtomPub and that's awful. Me, I like XMLRPC. Forget the 'XML' part - it's RPC. RPC that is very very simple and works and every endpoint works the same. I've lost count of the number of times I've had to write yet another bloody 'encode form variables and parse response as JSON' clients for supposedly 'REST' APIs.
In a recent update, TextMate changed the next/previous tab switching keyboard shortcuts to match the ones that Safari uses:
[CHANGED] Change next/previous file tab key equivalents to shift command [ and ]. This has become the de facto standard.
If you use a European keyboard, these are now awful defaults - ⌥⌘8 and ⌥⌘9. I believe that Safari on these platforms uses ⌥^ left & right, but TextMate doesn't.
This is a pity, especially as there's a blog entry on their site from 2007 about this exact problem. But never mind, it's fixable, because MacOS lets you change keyboard shortcuts at a system level.
Open System Preferences, and select the 'Keyboard' applet. Pick the "Keyboard shortcuts" tab, and the "application shortcuts" option on the left. Then click the '+'. Choose TextMate from the drop-down, and type the exact name of the TextMate menu option to want to override ("Next File Tab" here). Then add the keyboard shortcut you want. Do the same for the other direction.
I think it’s interesting to compare the anger and fury vented over the App Store, and consider that almost nobody is railing against these stores, even though they’re much more closed than Apple’s platform, and may collectively reach more users.
That's it in a nutshell, right? Granting another person, or entity, or coven veto power over your business, which is veto power over your creative destiny. You only make that choice when it's not actually a choice. Xbox Live Arcade, that larval contraption on the original Xbox, is now a billion dollar business because people use it. They like universal demos and apparently their token currency isn't a BFD. Its success means that Microsoft's stewardship of the platform has gone from entrepreneurial to sadomasochistic in the space of about three years.
– Penny Arcade on XBox live. Though of course, it might have been about the iTunes App Store.