Beeminder Forum

Cold Turkey (Blocker / Micromanager) vs. Focus

I’m currently evaluating Focus for Mac and am thinking of also evaluating Cold Turkey.

Please share your experience with either of these (or some other similar app that I missed), especially in combination with Beeminder. Focus has a scripting interface so that’s rather neat for integration purposes.

1 Like

I’ve had good experiences with Focus. The scripting stuff works great, and the developer is pretty responsive.

1 Like

Why not use RescueTime which already has a beeminder integration?

2 Likes

RescuteTime doesn’t block stuff.

Rescuetime pro does:

https://www.rescuetime.com/rescuetime-pro

4 Likes

Worth every dollar of the subscription :slight_smile:

1 Like

I tried both but prefer Cold Turkey. I forgot what was missing back when I tried Focus but Cold Turkey has been exactly what I’ve needed.

There is no scripting in Cold Turkey so I’m not sure how you’d use it with Beeminder.

I’m still missing something to help me avoid losing track of what I set out to do in a browsing session.

What are you trying to get out of a website blocker?

1 Like

I’m utterly in love with https://freedom.to/ and I think @adamwolf and @justanotherjon use it too.

@adamwolf also noted that it’s introduced (or is about to introduce—I can’t recall) an API and he brought up the idea of something that would block certain websites until your beemergencies were cleared. Once I stood back up after the swoon, I wrote that down as something I could totally see doing in the future (but if someone were to do it first, I’d be very happy to freeload off of their script).

4 Likes

If anyone’s interested in doing this with Focus, I wrote this script a while back for myself. It’s been a while since I’ve used it, but if someone else wants to use it I’m happy to help them navigate setting it up.

3 Likes

Thanks everyone for your input! I just recently returned from my vacation and am slowly getting back on the productivity train. Working through this thread here is high up my todo list :slight_smile:

2 Likes

Cold Turkey is really nice but there does not seem to be any kind of scripting support and https://freedom.to looks cute and all but their API is not exactly meant for end users it would seem.
The only thing out there is Focus so that’s where I’ll be taking my money it would seem.

Also I hate subscriptions. I’d much rather pay upfront for a good product and then be done with it. Unfortunately in my experience many products despite being only available through subscription are lacking in quality. And there’s so many companies who just charge ridiculous amounts for their subscription. So no, if there is a subscription-free alternative that works for me that’s where I’ll be taking my money.

Ok I’m giving Cold Turkey another shot. It might not have a scripting interface BUT obviously it gotta store its stuff somewhere. So I looked where mac apps usually store their stuff: At Library/Application Support et voilà there’s two sqlite3 files.
A note to DB admins: You might wanna close your eyes for this because clearly the author of Cold Turkey decided to hell with normalization:

PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE IF NOT EXISTS "current" ("key" TEXT PRIMARY KEY NOT NULL, "value" TEXT NOT NULL);
INSERT INTO "current" VALUES('ignoreIncognito','false');
INSERT INTO "current" VALUES('blockList','facebook.com@twitter.com@netflix.com@collegehumor.com@imgur.com@youtube.com@vimeo.com@ebay.com@mashable.com@amazon.com@9gag.com@reddit.com@4chan.org@tumblr.com@pinterest.com@instagram.com@flickr.com@fmylife.com@deviantart.com@stumbleupon.com@myspace.com@tagged.com@pof.com@orkut.com@delicious.com@vk.com@theonion.com@theoatmeal.com@twitch.tv@espn.go.com@addictinggames.com@bored.com@break.com@bufferapp.com@boingboing.net@buzzfeed.com@buy.com@cheezburger.com@cracked.com@dailymotion.com@digg.com@ebaumsworld.com@feedly.com@funnyjunk.com@funnyordie.com@kickstarter.com@liveleak.com@miniclip.net@newgrounds.com@ok.ru@penny-arcade.com@runescape.com@xkcd.com@ytmnd.com');
INSERT INTO "current" VALUES('blockListApp','');
INSERT INTO "current" VALUES('exceptionList','');
INSERT INTO "current" VALUES('statsEnabled','false');
INSERT INTO "current" VALUES('statsEnabledIncognito','false');
INSERT INTO "current" VALUES('blockActive','true');
CREATE TABLE IF NOT EXISTS "settings" ("key" TEXT PRIMARY KEY NOT NULL, "value" TEXT NOT NULL);
INSERT INTO settings VALUES('settings','{"additional":{"win10":[]},"settings":{"sprintC":"","scheduleLimited":"true","limitE":"","frozenTurkey":"false","notifyDone":"true","limitD":"","weekStartMonday":"false","scheduleLocked":"","sprintB":",","password":"","notifyWarning":"true","statsEnabledIncognito":"false","statsEnabled":"false","show24hour":"false","timerLocked":"true","sprintA":",","notifyBreak":"true"},"lists":[{"apps":[],"web":["facebook.com","twitter.com","netflix.com","collegehumor.com","imgur.com","youtube.com","vimeo.com","ebay.com","mashable.com","amazon.com","9gag.com","reddit.com","4chan.org","tumblr.com","pinterest.com","instagram.com","flickr.com","fmylife.com","deviantart.com","stumbleupon.com","myspace.com","tagged.com","pof.com","orkut.com","delicious.com","vk.com","theonion.com","theoatmeal.com","twitch.tv","espn.go.com","addictinggames.com","bored.com","break.com","bufferapp.com","boingboing.net","buzzfeed.com","buy.com","cheezburger.com","cracked.com","dailymotion.com","digg.com","ebaumsworld.com","feedly.com","funnyjunk.com","funnyordie.com","kickstarter.com","liveleak.com","miniclip.net","newgrounds.com","ok.ru","penny-arcade.com","runescape.com","xkcd.com","ytmnd.com"],"listName":"Distractions","exceptions":[],"win10":[]}],"timers":[{"startTime":"2019,11,25,14,41","locked":"true","endTime":"2019,11,25,14,56","listName":"Distractions","enabled":"true","break":"none"}],"scheduler":[]}');
CREATE TABLE IF NOT EXISTS "stats" ("date" REAL NOT NULL, "file" TEXT NOT NULL, "seconds" REAL NOT NULL, PRIMARY KEY ("date", "file"));
COMMIT;

We’re looking at… JSON inside of a sqlite3 db. We’re also looking at a @ separated list of domains.

As we can see there’s a currently active timer:

"timers":[{"startTime":"2019,11,25,14,41","locked":"true","endTime":"2019,11,25,14,56","listName":"Distractions","enabled":"true","break":"none"}]

It’s not perfect but it’s something. All it needs is something that watches for changes in that file. An sqlite lib to read the file and some json lib to get the info out of there.
And if worst comes to worst there is also AppleScript / JavaScript.

1 Like