Don’t lose your data if Todoist goes away

January 24th, 2012

I keep both work and personal to-do lists in Todoist, to which I refer frequently on a daily basis. This past weekend, Todoist was down for something like 12 hours; from what I subsequently read online, it’s not the first time it has gone down.

I can cope without access to my to-do lists for 12 hours, but what scared me about this outage was the realization that my to-do lists are only in Todoist. If it were to suddenly go away for a more than a day, or if (horror or horrors!) they suddenly went down forever, all my data would be lost. That’s not OK.

Many other people have this same concern and have begged Todoist to provide a mechanism for exporting their data to back it up somewhere. Thus far, the closest they’ve come to this is supporting offline use in their iPhone / iPod / iPad app, which is better than nothing, but not good enough.

So I wrote my own. It’s a Perl script you can download here. Here’s the documentation:


NAME

todoist-fetch.pl – Simple todoist backup / restore script, to reassure you that you won’t lose all of your data if Todoist suddenly goes belly-up.

 

SYNOPSIS

todoist-fetch.pl [--help] [--manual] [--project=project] [--username=username] [--password=password] –text | –reorder [input-file] | –backup [--nocompleted]

 

DESCRIPTION

 

Modes

This script has three modes:

–text Fetch all of the items in a specific project and print them one per line, including the item ID and content for each item.
–reorder Read a list in the format produced by –text and reorder the project so it matches the (presumably reordered) list.
–backup Fetch all of your project and item data (not notes or labels, since I don’t use them, but patches are welcome :-) and print them in JSON format with some text annotations explaining what the various JSON blobs are.

 

Backup notes

The format of the backup mode output isn’t intended to be particularly user-friendly, or easy to read, or easy to import into another application. If/when you need to do anything real with the data, you’ll probably need to write another script to convert it into something useful. All it’s intended to do is snapshot your data so you’ll have it in an emergency.

Backup mode uses a non-public API call, because the public API doesn’t allow all completed tasks to be fetched except for premium users, and I’m not a premium user. If the folks at todoist change the non-public API, this will break.

 

OPTIONS

Other options in addition to the mode options described above:

–help Print usage message and exit.
–manual Print entire manual and exit.
–username (or set $TODOIST_USERNAME) Specify Todoist username.
–password (or set $TODOIST_PASSWORD) Specify Todoist password.
–project (or set $TODOIST_PROJECT) Specify Todoist password for –text or –reorder.
–nocompleted Don’t export completed items in backup.

 

AUTHOR

Jonathan Kamens <jik@kamens.us>. Please feel free to contact me with questions, comments, or suggestions! Also, please consider making a donation at http://blog.kamens.us/support-my-blog/ to support future development of this and other free tools.

 

COPYRIGHT

Copyright (C) 2012 Jonathan Kamens. Released under the terms of the GNU General Public License, Version 3 or any subsequent version at your discretion. See http://www.gnu.org/copyleft/gpl.html.

 

VERSION

$Id: todoist-fetch.pl,v 1.5 2012/01/24 19:34:17 jik Exp $

Some final words about Winters Plumbing

January 19th, 2012

I have written previously about the problems I had with Winters Plumbing when they replaced the heating system in my house. I wanted to post an update because while I still wouldn’t recommend them, they’ve done some things to address my complaints which they deserve to get credit for.

  • They fixed the duct opening which their subcontractor made too small, and replaced the screw in the duct cover that was damaged when I had to unscrew the cover from its frame because the frame was wedged to tightly into the too-small opening.
  • They fixed the air leaking from the furnace manifold.
  • At their expense, they replaced the whole-house humidifier that was wasting a huge amount of water, with a Humid-a-Mist humidifier that doesn’t.

Read the rest of this entry »

Honda Village fires us as a customer

January 18th, 2012

Long-time readers of my blog may remember my multiple postings about Honda Village in Newton, Massachusetts. You can read the whole series of Honda Village postings here.

Read the rest of this entry »

We love A-Z Auto Center

January 18th, 2012

I want to give a loud shout-out to our favorite auto-body shop and service station, A-Z Auto Center in Brighton, MA.

My wife and I have used them numerous times for many different services, including routine maintenance (e.g., oil and filter), auto-body work, repairing a broken automatic minivan door, and tire repair and replacement.

In all cases they have been friendly, responsive, and affordable and have delivered high-quality work on time.

Here are two examples of how great they are:

1. We needed a couple of body panels repaired and repainted after someone borrowing our minivan ran it into the side of his garage door (d’oh!). Stadium Auto Body said that all of the damaged panels would have to be replaced and gave us an estimate of $2,400. A-Z repaired the existing panels — no replacement parts needed — for only $860. While they were at it, they detailed the interior of the minivan at no extra charge!

2. Herb Chambers Honda said it would cost $400 to fix one of our automatic minivan doors, which was repeatedly sticking when we tried to open or close it. A-Z did the repair for only $169.

In all of our dealings with A-Z, it has felt like they were being completely honest and up-front with us. Not once have we gotten that unpleasant feeling, so common with car-repair places, that they were trying to jack up the price of a repair or sell us something we didn’t need. In short, these guys are great, and we heartily recommend them!

Abhorrent proposal to close the MBTA’s budget gap

January 5th, 2012
To: Kevin.Honan@mahouse.gov, William.Brownsberger@mahouse.gov, mayor@cityofboston.gov, City.Council@cityofboston.gov
CC: fareproposal@mbta.com

Dear Gov. Patrick (via Fax), Rep. Honan, Rep. Brownsberger, Mayor Menino, and members of the Boston City Council,

I am writing to you all in incensed opposition to the abhorrent plan currently under discussion to close the MBTA’s budget gap by decimating Massachusetts public transportation.

Read the rest of this entry »

“That’s Life” comic fixed in aggregator

December 21st, 2011

I’ve fixed the comic “That’s Life”, which was broken in my comics aggregator.

 

Comics added to aggregator

December 13th, 2011

By popular demand (i.e., somebody asked), the following comics have been added to my comics aggregator:

  • Banana Triangle
  • Birdbrains
  • Dog Eat Doug
  • F Minus
  • Ink Pen
  • Luann
  • The Other Coast
  • Overboard
  • Pluggers
  • Rubes
  • Scary Gary
  • Strange Brew

Enjoy!

P.S. If you find the aggregator useful, please consider making a donation. Thanks!

 

Gov. Patrick, it’s a Christmas tree, not a holiday tree

December 12th, 2011

Dear Governor Patrick,

Speaking as a religious Jew, I can assure you that I do not find it “inclusive” or “welcoming” for you to call the tree you’re lighting today a “holiday tree”.

If it were my choice, there would be no religious symbols of any sort on public property. But since that’s never going to happen, at the very least the symbols that are erected to recognize various people’s religious observances should actually recognize those observances, not water them down and engage in ludicrous newspeak to imply they’re something they’re not.

The only December holiday that involves a tree is Christmas. Please call it what it is and stop pandering to a class of people that don’t actually exist. Nobody who’s offended by Christmas trees on public property is mollified by calling them something different.

Sincerely,

Jonathan Kamens

Herman Cain judged appropriately

December 5th, 2011

Today’s letter to the editor of the Herald:


To the editor:

Herman Cain was forced out of the campaign by his immoral acts and lies about them, not by liberal ideologues as Joe Fitzgerald claims. Cain’s plummeting poll numbers came from conservatives who might have actually voted for him.

It’s true that other politicians, on both sides of the aisle, have dallied, gotten caught, and emerged with little damage. The difference is not their politics or their race, but rather their reaction to exposure. It’s obvious that Cain is lying through his teeth, and as usual, the coverup was worse than the crime.

As is befitting in an America which is increasingly post-racial, Cain was judged not by the color of his skin, but by the content of his character.

Sincerely,

Jonathan Kamens

Ongoing large-scale distributed SSH brute-force attack

December 4th, 2011

In the past, securing SSH on the public internet has been pretty much as easy as (a) keep your OS patched, (b) don’t let root log in with a password, and (c) run fail2ban to stop brute-force attacks.

Unfortunately, it looks like the bad guys have finally figured out how to put their bots to work running distributed SSH brute-force attacks. If so, then fail2ban is no longer going to be good enough, and more sophisticated (and inconvenient) measures are going to be needed.

Prior to December 1, the five machines I maintain with SSH servers accessible to the public have been probed by an average of 13 different IP addresses per day. On December 1, they were probed by 109 different IP addresses, a 738% increase over the prior average. On December 2 and 3, they were probed by 79 and 72 different IP addresses. Not as high as the first day, but still quite a jump!

I saw this increase across the board on five different machines on four distinct networks run by four different network service providers. I’ve been in correspondence with someone at the SANS Internet Storm Center who says he’s seen a similar spike on machines he maintains.

It seems clear to me that someone is engaging in a distributed brute-force attack trying to break into servers as root via ssh.

Read the rest of this entry »