Wunderlist Tags Hack

wunderlist

Wunderlist Tags Hack

Wunderlist is a task management tool. I've been using it for a bit to manage my tasks. I love it's simplicity, interface, and that it's available for mobile and browswer.

I have also been using GQueues. The one feature I love about GQueues is the ability to tag tasks. For the moment this feature is missing from Wunderlist. Enter the Tags Hack.

Quick #Tags Hack

To work around this short coming I use a combination of hash tags in the task description and the search facility within Wunderlist.

Suppose I enter a task to buy plantains at the local bodega that I want to tag "groceries", I might create a task with description "buy dozen plantains #groceries". I could similar tasks to a "grocery" list, but with the "#groceries" hash tag, we can simply search for "#groceries". ()Note that the mobile apps do not have a search feature, however, browser version on the ipad appears to work pretty well.)

wunderlist hashtag

Bonus: For quick access to #groceries you can bookmark the url of the search query, i.e., http://www.wunderlist.com/#/search/#groceries.

The Matrix - Bullet Time in Analog, Slinky, and Edgerton

The Matrix - Bullet Time - Homemade

The Matrix - Bullet Time in Analog, Slinky, and Edgerton

The video is an "Analog" version of The Matrix - Bullet Scene. It took a fair amount of creativity to figure out the effects without CGI. Almost as much creativity as it took to make it with CGI!

It's purely coincidental that The Slinky was invented around 1940, near the time MIT professor Doc Edgerton used strobe lights to capture the iconic photos of bullets. Watch the video for the connection...

Slinky circa 1946

Slinky circa 1946

Professor Edgerton's Iconic Bullet Photos

Edgerton Bullet Photo

More Edgerton Photos

Mothers and The Sound of the Big Bang

Lucas at Science Fair

Mothers and The Sound of the Big Bang

I'm a father of two wonderful kids, always sharp and inquisitive. The kids that is. Unfortunately, they have homework and a knack for tapping into life's vast well of unanswered questions. So as a dad, I try desperately to stay one step ahead of them. That's all likely to change some day. In the meantime, with a little Google juice I can usually find the answer I need and retain my crown as Champ of "whatever the subject may be"... at least to my kids.

We'll Google doesn't always have what you're looking for. So what does a dad do when he can't find what he's looking? Not sure. But kids are resourceful, they escalate and ultimately go to Google's toughest competition, Mom.

Mom's

When 11 year old Daniel asked "What did the Big Bang sound like?", his mom went to guy who made a big stink about the thing but never produced the Universe's Epic Soundtrack.

Enter Professor John G. Cramer of the University of Washington. When a "Mom" asks for something, you best deliver it. And that's what John did. So now you have it, the sound of the first 760,000 years of evolution of the universe. Thanks to a Mom, or a Dad who fell a little short:) Maybe Daniel get's some credit for asking.

The Big Bang Soundtrack

More about it here.

And if you're kid asks, "How did the Big Bang make that sound?", Prof Cramer has your back. Here's what he said...

The Big Bang Sound in the simulation is derived from the sound propagating as compression waves through the plasma/hydrogen medium of the early universe some 100 to 700 thousand years after the initial Big Bang. The density of this medium was changing as the universe expanded, but should have been considerably more dense than air on our little planet. One does NOT need air to have sound, only some medium in which compression/rarefaction waves can propagate. The sound waves were very low in frequency and had wavelengths comparable to some fraction of the size of the universe. For the convenience of humans, who could not hear such low frequencies, I have increased them to the audio range of the human ear. - John G. Cramer - Analog Science Fiction and Fact

Good luck at the Science Fair.

(Photo includes my son, Lucas at his science fair)

Bike fitting for JDRF Ride to Cure Diabetes

JDRF 100 Mile Ride to Cure Diabetes in Death Valley

Bike Fitting for JDRF Ride to Cure Diabetes

Next October I'll be riding 100 miles through Death Valley for the JDRF - Juvenile Diabetes Research Foundation.

10 million children and adults live with Type 1 diabetes in the US alone. For many years my wife and I have been helping JDRF fight this terrible disease. We've never worked with a more passionate and dedicated group of people. My wife and I aren't cyclists… and you don't have to be. We simply want to inspire others to help.

The Bike

I have a few friends who are very serious cyclists. They told me 100 miles through Death Valley will be grueling. The 2 pieces of advice they've all given are;

  1. Get the best bike you can - make sure it's right for you.
  2. Ride Forest, Ride… You got to put in the miles.

I can't do the second(ride) without the first(bike) so I went for a fitting. Based on my goals, weight, height, flexibility, power, alignment and more, Blake at http://signaturecycles.com measured me for the ideal bike. It took about 2 hours. And I'll have to go back for tweaks once I've found the right bike.

They boiled it down to 3 bikes…

  1. Parlee Z5 Small Tall @parlee_z1
  2. Specialized Roubaix 53cm @iAmSpecialized
  3. Trek Domane 5/6 Series 52cm @TrekBikes

Any of these will fit me just right. But these engineering marvels are not cheap, so I'm looking for a used one. Please, Please, Please let me know if you know of one.

Email or Tweet Me with your recommendation.

I'll keep you posted on my training. Follow me @MartinRuiz

There was one more piece of advice I've heard time and time again… Spare no expense on extremely well padded shorts. Makes sense.

Good luck to us:)

Please donate to my personal Fund Raising Campaign

Go to http://www2.jdrf.org/goto/MartinRuiz

About JDRF Ride to Cure Diabetes

http://www.youtube.com/watch?v=SwX5xOZwbiw

For more about the JDRF Rides check out http://ride.jdrf.org

Better Mailboxapp GMail Integration

Mailboxapp

Better Mailboxapp GMail Integration

I love the Mailboxapp mobile email client. It's simple, clean and very effective. But it's missing a few things for me. With a little Google Apps Scripting I was able to make a few improvements.

What's Missing in Mailboxapp? (for me)

  • Robust GMail Labeling
    Currently Mailboxapp only allows you to use sublabels under the [Mailbox] label.
  • Marking as SPAM I want to move messages in [Mailbox]/Spam to Spam label.
  • Easy forwarding
    I want to create tasks in Wunderlist and forward emails to work.

Google App Script

Google App Script allows you to write javascript apps and hook into Google APIs like Gmail.

Check out https://developers.google.com/apps-script/your_first_script for documentation and a video tutorial.

Before using Google App Script, I tried to do some of this using ifttt… It almost did the trick but I couldn't quite get it to work.

Using Google App Script I was able to leverage the Gmail Script API. I was also able to schedule the script to run once every minute.

Robust GMail Labeling

Now I'll show you how I handled GMail Labeling, i.e., moving messages from [Mailbox]/>labelName to labelName. Note the script creates labelName if it doesn't already exist.

First I set some variables like where to forward emails and some regex to identify which folders to label/archive. I also create a simple Gmailapp API wrapper to reduce API calls.

var WORK_EMAIL = 'martin.ruiz@wellsfargo.com';
var WORK_LABEL = 'Fwd To Work';
var MAILBOX = '[Mailbox]';
var ARCHIVE_PREFIX = '>';
var MAILBOX_ARCHIVE_REGEX = new RegExp('^\\[Mailbox\\]/' + ARCHIVE_PREFIX);
var MAILBOX_REGEX = new RegExp(/^\[Mailbox\]\/\>/);
var TODO_LABEL = 'Todo';
var TODO_EMAIL = 'me@wunderlist.com';
var MESSAGE_URL_BASE = 'https://mail.google.com/mail/u/0/#all/';
var SPAM_LABEL = 'Spam';
/**
 * A simple wrapper for GmailApp API so I can minimize the
 * number of API calls and keep it below the service limit.
 * 10,000 calls is the limit.  Using this wrapper I cache
 * the results and reuse across function calls.
 * https://developers.google.com/apps-script/class_gmailapp
 */
var Gmail = (function () {
  var labels = GmailApp.getUserLabels();
  var labelMap = {};

  for (var i in labels) {
    var label = labels[i];
    labelMap[label.getName()] = label;
  }

  var getLabelByName = function (labelName) {
    return labelMap[labelName];
  };

  return {
    getUserLabels: function () { return labelMap; },
    getUserLabelByName: getLabelByName
  };
})();

The following code moves messages in [Mailbox]/>labelName to labelName. I use the prefix, >, to identify labels I want to archive. Every minute messages are archived and cleared.

/**
 * archives messages in [Mailbox]/>labelName to
 * labelName.  It also sets the message as read.
 * Note that I use '>' to signal which labels to
 * archive.
 */
function archiveMessages(labelName) {
  var label, archiveLabel, page, mailboxLabel;

  mailboxLabel = MAILBOX + '/' + ARCHIVE_PREFIX + labelName;

  label = Gmail.getUserLabelByName(mailboxLabel);
  archiveLabel = Gmail.getUserLabelByName(labelName);
  // create labelName if it doesn't exist
  if (!archiveLabel) {
    archiveLabel = GmailApp.createLabel(labelName);
  }

  page = null;

  while(!page || page.length == 100) {
    page = label.getThreads(0, 100);
    if (page.length > 0) {
      archiveLabel.addToThreads(page);
      label.removeFromThreads(page);
      GmailApp.markThreadsRead(page);
    }
  }
}

function doArchive() {
  var labelName, labels;

  labels = Gmail.getUserLabels();

  // find and archive all labels in [Mailbox] with '>' prefix
  for (labelName in labels) {
    if (MAILBOX_ARCHIVE_REGEX.test(labelName)) {
      labelName = labelName.replace(MAILBOX_ARCHIVE_REGEX,'');
      archiveMessages(labelName);
    }
  }
}

You can find the rest of the code here.

To install, cut-n-paste-modify code in a new script @ script.google.com. Click on clock to schedule runMailboxCompanion every minute.

Email me at mr.ruiz@gmail.com if you have any questions

Next Steps

  • add simple UI to configure.
  • make available as installable plugin/script.
  • add some new features like auto-filter creator for scheduling. There are some emails I only want to read on weekends or evenings etc. I want to write a script that creates a filter for emails labeled [Mailbox]/Weekend that skips inbox and moves messages back to inbox on weekends. This way I don't have to do manually everytime.

Holiday Party 2012

Holiday Party 2012

A big thanks to all the friends that celebrated with us. These photos capture a few moments in the first hour of the party afterwhich I was too busy to keep snapping…

Treegonometry for Perfect Christmas Tree

Griswold Family Christmas Tree

Treegonometry for Perfect Christmas Tree

The Perfect Tree courtesy of Students Nicole Wrightham and Alex Craig, both aged 20, from the University of Sheffield.

I added a factor of 12 * 2.54 to convert from cm to feet.

Formulas

Number of Bulbs = sqrt(27)/20 * 12 * 2.54 * (tree height)
Height of Star = (tree height) / 10
Tinsel Length = 13 * pi/8 * (tree height)
Lights Length = pi * (tree height)

Calculator