This is the sort of input that you'd selectively pick in a unit test, too. What you don't do is also picking inputs like "llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch" too (all lowercase) :)
We use Charles extensively at work, it's a great tool.
The only thing that really annoys me is that, this being a Java app, the interface works slightly different than the standard OS X interface I'm using to.
I regularly use cmd + backspace, for example, to delete all text until between the beginning of the line and the cursor. In Charles this is a hot key that removes all recorded requests. There are more of such things.
I've been looking for a similar app with a native UI, but haven't been able to find one yet.
Processes can communicate. I reckon you could have a process that's responsible for managing the cache instead of managing a separate cache from each process.
Instead of the fencing token, could the scenario in the blog post be prevented using a good hashing function?
When you perform a write, instead of the token, send a hash of the object previously read. The storage can then compare this against a hash of the resource's current state. If it doesn't match the lock expired and the write is not accepted.
This would reduce the state to keep track off to the resources themselves.
Taking money gives you all sorts of unpleasant responsibilities to deal with. That's not something everyone wants, especially not if you've got a day job you're not planning on leaving.
When I lock my front door and leave a spare key under the doormat, my insurance company is not obliged by law to pay for any damages if the spare key is used by thieves to enter my house. I could have easily prevented the situation.
Content publishers should properly lock their front doors, too, and not have spare keys lying around all over the place.
Those aren't very fair to the dynamic languages and JIT compiled languages (this includes Scala).
* For the dynamic languages execution time includes the time it takes to lex, parse and interpret the source code.
* For language implementations with a JIT execution time includes the time the JIT takes to properly optimise hot code paths. Generally you start benchmarking after a warm up period in such cases.
The only fair comparisons are those between ahead of time compiled languages.
Question for OP: how would you feel about a browser extension that automatically recognises submissions of this nature and hides them?