Last weekend I wrote a small Chrome extension that helps me to avoid facebook & livejournal. I mean I allow myself to stare at them for 10 minutes max & then Antislaker (the extension) kicks in & blocks those 2 domains for the rest of the day.
The idea is this:
- In background.coffee we look for a domain name match. If the match was successfully, we inject a chunk of JS code.
- The injected peace of the code contains a counter that every 5 seconds updates a record in localStore.
- When a time limit comes, we move user to our internal page withing Chrome extension that shows a random Dilbert comics.
The most tricky part was making a 'mutex' for localStore records. Because the user can open several facebook pages & the counter (in the worst case) will count 2 times faster. It's actually a pity that we don't have any concurrency primitives in JS & so we have to invert poor man's busy waiting when using timers.