Deprecated: Return type of I::current() should either be compatible with Iterator::current(): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/public/kirby/toolkit/lib/i.php on line 62

Deprecated: Return type of I::next() should either be compatible with Iterator::next(): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/public/kirby/toolkit/lib/i.php on line 91

Deprecated: Return type of I::key() should either be compatible with Iterator::key(): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/public/kirby/toolkit/lib/i.php on line 71

Deprecated: Return type of I::valid() should either be compatible with Iterator::valid(): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/public/kirby/toolkit/lib/i.php on line 101

Deprecated: Return type of I::rewind() should either be compatible with Iterator::rewind(): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/public/kirby/toolkit/lib/i.php on line 53

Deprecated: Return type of Collection::count() should either be compatible with Countable::count(): int, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/public/kirby/toolkit/lib/collection.php on line 80

Deprecated: parse_str(): Passing null to parameter #1 ($string) of type string is deprecated in /home/public/kirby/toolkit/lib/url.php on line 135
One Tap Less | Aware of my Addiction with Tally 2.0.1

Aware of my Addiction with Tally 2.0.1

I've been a smoker for 7 years and day after day my need to quit grows. Need, not desire and breaking an habit unwillingly is hard, specially when it entangles your brain and runs through your veins. I tried to just quit on the spot and it created a monster unable to achieve any result on a regular day, after 72 hours without a cigarette I was behaving as you'd expect from a crack addict.

I'm ashamed, but I keep trying and being aware of how many cigarettes I smoke daily warns me I went too far. By the end of the day it is not just another smoke, it is the 18th cigarette and that's alarming. I built a system around Tally to keep me in line, every time I light a cigarette, I pull the Today widget and add one to the counter, but there is still more to it.

Being able to interact with the Notification Center is one of the greatest achievements for productivity on iOS, unfortunately, Apple has been stubborn to allow it to reach its peak and fear for rejection spread amongst app developers. Previously, I would get my iPhone, unlock it, open Launch Center Pro from my dock and trigger an action on Tally, but now I can pull the screen down and tap once to increment my counter. The progress on how we interact with our devices is remarkable, despite Apple's overreaction.

Yet, the system does slightly more, using Launch Center Pro I can schedule an action by the end of the day to collect, store and reset Tally's information. I name the tally Cigarettes and I schedule the following action on Launch Center Pro to notify me 1 minute past midnight every day:

Cigarettes' Reset:

tally2://x-callback-url/get?title=Cigarettes&retParam=text&x-success={{workflow://run-workflow?name={{Cigarette Backup}}&input=text}}

I'll take a paragraph to dump my wrath upon the retParam parameter, it is also used by Terminology and Clean Links to designate a parameter in the next chained app into which the value will be attached. The problem with retParam is that it demands an extra action if you want to customize this text afterwards. Since Drafts can't call itself, I appeal to Workflow to handle the text on my behalf.

You can get the workflow I use here, but you must customize the last action. First, create a new draft in Drafts and include this principle of a MultiMarkdown table:

| Date | Cigarettes |
|:-----|:----------:|

You'll need the UUID for this draft afterwards. UUID is an unique identifier, every draft has its own and you can grab it with this helpful action from the Drafts Action Directory. With the UUID in your clipboard, return to Workflow and paste the value in the Draft UUID field for the Add to Drafts action at the bottom of the workflow.

The last step will be a Drafts action to reset your Tally counter, you can get this action here. The reset url scheme was added in the 2.0.1 update for Tally, released earlier today.

Reset Cigarettes Tally:

tally2://x-callback-url/reset?title=Cigarettes

If you missed any beat on this system, throughout the day, whenever you light a cigarette, pull down the notification center and increment the Cigarettes tally from Tally's Today widget. At 1 minute after midnight, Launch Center Pro will notify you to run an action to collect the value from the Cigarettes tally and send it to Workflow which will format the date for the previous day. The output is appended to a document in Drafts as a MultiMarkdown table and, afterwards, restarts the tally to start the day from scratch.

This workflow shows how well a Today Widget can serve your daily needs and also how chaining apps for your actions is yet not irrelevant. Most important is to point out how iOS automation can help you improve your life, it is here for you after all, so wish me luck and if I get cranky on Twitter, give me a heads up, I won't be on my best days and any help is welcome.