Complete overkill, but my router enforces a daily limit for sites I visit too often. It's not that difficult to set up. Make a iptables chain, route all traffic that matches certain ips to that chain, add a --limit and --limit-burst counter to that chain, deny by default, allow when below said limit.
For bonus points, make all http connections redirect to your favorite todo list when you've exceeded your limit, and deny all ssh access (to the router) during working hours.
Setting it up was complete procrastination of course, but it works better than any manual block list. By slightly lowering my daily time waste allowance I can reduce the time I spend on sites like these.
EDIT:
Blocking with hosts is terrible, because you don't want to block sites permanently, and if you continually enable/disable the block list your muscle memory will unblock a site even before you realize you should be working. Cron job limits don't work when you don't have very strict working hours. Basically, you want to take a break for a few minutes every hour or so, and you need soft limits to enforce that.
We're actually pretty close to this (just soft-launched our windows version-- mac version hot on its heels). Starting with focus "toggling" ("Shut of the bad parts of the internet for 30 minutes") and moving on to nudges ("let me know when I exceed 30m of news time") and blocking ("block social networking if I exceed X hours or X %").
Disabling the internet is a baby/bathwater thing for a lot of people, I think. There's too much value there to turn it off completely (research, etc).
I intend to write something to do this soon, at the request of my wife. Basically, you need a cron job or something similar that edits /etc/hosts - shouldn't be too difficult.
But it would work better for people who don't know enough to manually edit /etc/hosts.
EDIT: the /etc/hosts thing would be to block specific sites, but it's just as easy to take the internet connection down completely with ifconfig or whatever your system uses.