Merge pull request #19 from jeremybanks/read-this

Update README to mention the need to set PROXIED on Heroku.
add socket error listener to prevent exception

if there's no listener an exception is thrown (default node EventEmitter
behavior)
catch malformed JSON exceptions

JSON.parse is known to throw exceptions, it's necessary to catch them
Add function to normalize titles by stripping trailing periods
Reset to original channel
Add bootstrap and style the tables so they're more readable
Apply normalization for matching without modifying original suggestion
Call normalization function only once
Merge pull request #25 from galambalazs/master

Catch socket errors and JSON.parse exceptions
Merge pull request #26 from hartez/NormalizeTitles

Normalize titles
Merge pull request #27 from hartez/BetterTables

Add bootstrap and style the tables so they're more readable
reset to #atp.
add try/catch to sendToAll().
Memcached changeset.

Includes a bit of refactoring to minimize the amount
of data per title we cache, since all titles are cached
under a single key. Even with a 1 MB limit per key,
this will hold a lot of titles. Caching is automatically
enabled if a MEMCACHED_SERVERS (or MEMCACHIER_SERVERS)
environment variable is set.

The list of IPs that voted for each title is stored in
a separate key, again to minimize the amount of data
placed in the titles data structure, but also to
limit writes to the titles key, so we aren't updating
the larger structure in Memcached for each vote.
Similarly, vote counts are stored separately as well.

Finally, there is a bit of sanity checking done for
submitted links (including an overall limit to the
link length).