Convert IFTTT Timestamps into Date and Time Values You Can Use

If you use IFTTT to log data in Google Sheets then you might have wondered if you can make any functional use of the timestamp that goes in the first column by default.  In order to use the actual date from the timestamp I have in the past used formulae in a separate sheet (I call it the Interpreter) to duplicate the raw input data and then to extract the date and time.  The reason for needing the separate sheet is that if you include a formula in IFTTT, e.g. =LEFT(A2,LEN(A2)-11) which will give you the date from a timestamp, the cell reference A2 will become invalid after the recipe first runs.  It isn’t possible for IFTTT to compute the correct cell reference to input each time the recipe runs. But the problem with the Interpreter sheet is that you have to keep filling all the formulae down to accommodate new data, or occasionally fill down formulae a couple hundred rows in advance.  So it’s far from ideal.

The ideal situation is to design a formula that can correctly reference the cell with the time stamp without needing to enter an actual cell reference.  That way IFTTT can input it automatically every time the recipe runs.  Well here is a formula that will return the value of a cell itself:

That will give you a circular reference error, so don’t use that!  We can use the OFFSET() function to reference the cell to the left of itself:
Or the cell to the left of that:
So how can this be used to extract the date and time?  If you examine IFTTT timestamps they are all different lengths but the time part of the stamp is a constant number of characters.  Here are a couple of examples:
• February 04, 2016 at 04:09PM
• April 27, 2016 at 09:24AM
The dates are obviously different lengths but the time part is always seven characters long, e.g. “04:09PM”, they can be extracted to provide the time.  To extract the date from the timestamp we just need to cut off the time and the preceding ” at ” part of the string (that’s the last eleven characters of the string).  So the spreadsheet formulae to use are:
• Date:
• Time: 

If you want to set this up in an IFTTT recipe you would have something like this, where {{OccurredAt}} is the marker for where IFTTT will insert the timestamp, and ||| is the marker for a cell division:

{{OccurredAt}} ||| =LEFT(OFFSET(INDIRECT(CHAR(COLUMN()+64)&ROW()),0,-1),LEN(OFFSET(INDIRECT(CHAR(COLUMN()+64)&ROW()),0,-1))-11) ||| =RIGHT(OFFSET(INDIRECT(CHAR(COLUMN()+64)&ROW()),0,-2),7) |||
Hope that’s of help to some of you wanting to work with IFTTT timestamps.
Update 12/10/16
An alternative to the above formulae is to use the IFTTT timestamp string directly in the formula, e.g.
I’ve had trouble with Google Sheets interpreting the output as a true date value (it interprets it as a string).  To get around that use DATEVALUE(), like this:

The 3.5 mm Headphone Jack

I can understand the drive to replace the 3.5 mm jack with something (genuinely) better and more efficient BUT
1. “Thinner” is irrelevant for smartphones.  Check out this from David Pogue:

The cylinder that accommodates your headphone jack is now among the thickest components of your phone! It’s thicker than the screen guts, the circuit board, or the battery.

The headphone jack is what’s preventing phones from getting any thinner. It’s the limiting factor.

They don’t need to be thinner! That is an outmoded design concept. Existing battery technology is not particularly new either, we have had lithium ion cells for a long time and so we have had pretty much the same energy density in our batteries.  Making thinner phones means less volume available for batteries so less total energy available for use.  Most smartphones cannot survive longer than a day with moderate use.  None can survive longer than several hours with intensive use.  They are first and foremost meant to be mobile devices so having to plug them into charge (at the wall or with a charging device) defeats their primary purpose.

Phones should certainly not get any thinner as that would not solve any problems they face at present.  It would not improve their ergonomics; it might in fact make their ergonomics worse.  Phones would benefit from getting a bit thicker and having larger batteries.

2. Secondly, with the abolition of the 3.5 mm jack we will face a choice of multiple connections to replace it.  The good thing about the 3.5 mm jack was that it was essentially the standard.  Replacing it with a choice of many is not good because we will need to use one type of connection for one device and another for a different device, so in addtion to headphones a range of adapters will be required.  That’s a more wasteful approach to resources in comparison to having a single standard.  Choice is not always good.

Now  consider a usage scenario offered by using the new jacks e.g. the Lightning connector for the iPhone.  They enable the phone to supply power to headphones.  But that’s exactly what is not needed – more power going out of the phone!  We need more energy in the phone; not more going out.    Also with the 3.5 mm jack it is possible to listen through headphones and charge your phone.  Without it you will have to make a choice: charge phone or listen on headphones.  Unless of course you buy another adapter!

What do you think: are you happy to see the back of the 3.5 mm jack, will you miss it, or were you hoping for something better to come out of its demise than has done?

Good Bye Numerous, you will be Missed

Since the announcement that the fantastic app Numerous would cease to be on the 1 May I and many other Numerous users have been wanting to find something that could replace it.  The ever so slightly quirky app excelled at displaying important numbers in a clean and clear way that helped us keep track of numbers that meant something to us.  Some people, like me, started out dubious that we would find much use for the app.  But it quickly proved its worth.  It will leave a big dent in the routines of many people when it shuts down.  Well done Numerous team you made something truly excellent and many, many of us will be sad to see you go.

Despite the best efforts of many nothing has been found that can adequately replace Numerous.  So as the deadline for Numerous’ end drew nearer I put my mind to work about how I could hack together something to simply display useful numbers. The rest of this post is about a spreadsheet (Google Sheet) I’ve designed that can do just that.

Let me start by outlining the main aspects of functionality of Numerous that this spreadsheet does not replace and its limitations in comparison to Numerous.
1. It can only display numbers that are already in a Google Sheet (this might change in the future but the procedure won’t be as straight forward).
2. There is no social aspect. You can’t browse a catalogue of numbers and individually select numbers from a community to follow. But if you have friends tracking numbers in Google Sheets you can give each other access to each other’s spreadsheets on a case by case basis.
3. All numbers are technically public; no private numbers.
4. No value history or graph.

But, that said, a potential benefit to some people will be the ability to display dynamic text and not numbers only.

Now onto how to use the spreadsheet for your own numbers. You must first appreciate the nature of this spreadsheet. It doesn’t actually do any computation of your numbers, it simply hooks into the spreadsheets you already have to display those numbers in a way much like Numerous: clear and nicely contextualised. Also it will display those numbers in a web browser so you can get faster access to your numbers wihtout having to search through your spreadsheet directories.

The spreadsheet is published here: Number Dashboard. Follow the link to the spreadsheet and save a copy to your Google Drive so that you can edit your own copy.

In the spreadsheet there are two sheets: “Dashboard” and “Data”. Dashboard displays your numbers and Data is where you input information so that the spreadsheet can collect your numbers from your other spreadsheets.
Number Dashboard - Dashboard.png

Each Google Sheet has a unique URL. In the URL is a unique spreadsheet key. You will need to copy the keys of the spreadsheets that have any numbers you want displayed in the Dashboard. Below is a screenshot of a Google Sheet URL with the spreadsheet key indicated. The format of the URL is: key/edit#gid…
Google Sheet URL

Paste the key into the relevant column in the Data sheet. Next you need to input the address of the cell containing the number you want to display. For example, if I had a spreadsheet with a sheet called “Fuel Log” and the car mileage was in cell “D5” then the address I would need to write in the Data sheet would be: Fuel Log!D5. Include all spaces as spaces and you don’t need to include any extra quotation marks.

Once you do this the spreadsheet will begin the process of trying to look up the value. But you will need to give permission to link the spreadsheet with the number with the Number Dashboard. To do that hover the mouse over the cell in column E that displays the #REF! error. Then a pop over wil show that has a button that says “Allow access”, click that and the value will display.
Number Dashboard - Permission to link spreadsheets.png

In the table in the Data sheet don’t overwrite anything in columns A, E or H. The value and image are automatically inserted based on the information you put in (instructions included below for inserting your own images).  For best results use square images.  Everything else in the table in the Data sheet should be pretty self explanatory. Annotated screenshot below.
Number Dashboard - Data

All your numbers by now will show up in the Dashboard sheet. The next stage to get your numbers accessible without having to open up a spreadsheet app and then navigating to the spreadsheet is to publish the Dashboard to the web. I’ve included some annotated screenshots below showing the steps to do this. At the end of the (very short) process you will be provided with a link to the published Dashboard. Bookmark the link, or even better save it to your smartphone homescreen. Now your numbers are accessible with a tap from the homescreen.

Other features / limitations:
1. Inserting your own images. To insert an image you need it to be available on the internet. If you want to use your own image you need to insert it into a website or cloud storage and copy the link to the image, then paste that link into the Data sheet. I have used Google Photos for my images. I upload the image to G Photos, then navigate to view the image there and right click it to copy the image address.
2. If you know your way around Google Sheets you can customise info in the Data sheet further. For example you can have a dynamic name for a number. In my Data table I link to a number that counts down to the next school holiday. But also on that spreadsheet there is a cell that displays the name of the next holiday (e.g. “May Half Term” or “Christmas Holidays”). So I used the IMPORTRANGE() function in the Data table to reference that cell and have a dynamic name for that number.
2. Countdowns are/were a great feature of Numerous. They can be created in Google Sheets. But remember that this spreadsheet just displays your numbers. You will need a standalone spreadsheet to do the countdowns. Lucky for you I have one, you can get it here. My one is designed for counting down to college / school holidays. So when one holiday is reached it automatically updates to the next holiday. But it can be used to track just one date too.
3. Customising the size to fit your smartphone. If you find that the published dashboard is not the right size for your smartphone then open the spreadsheet in Google Sheets and resize the columns on Dashbaord so that you get a suitable fit. Note that it takes several minutes for the display to update so be patient as you see what works for you.
4. The layout is fixed. Numerous would give you a different view in landscape and portrait; that won’t happen with this spreadsheet.

This is clearly an inferior setup compared to Numerous, but I do hope that it will be of some use in Numerous’ absence. If you have any questions or tips to share please leave a comment here or on Google Plus or reach me on Twitter.

All the best tracking your numbers.

Fast HTML Table Creation and Editing with a Spreadsheet

If you are designing a table in html there is a lot of tedious repetitive typing to do. A spreadsheet can be used to take a lot of the tedium out of the process. Previoulsy I have used spreadsheets to generate repetitive text and html in what I think was a relatively efficient way. I also thought that it was a very quirky method unlikley to appeal to other people. Until, that was, I read this blog post on the Zapier blog. Then I realised perhaps my quirky method might be of some interest to the mark up community.

So here is my contribution, it builds on Matthew’s post on the Zapier blog by showing how I would use Google Sheets to build a html table. The method is different to Matthew’s as it avoids the very long concatenate formula and makes it easier to make quick edits to the table formatting. It is more complex to set up, but much easier to work with once it’s done.

What follows are the steps to make the key parts of a html generating spreadsheet from scratch, but I have published a spreadsheet here which is based on the table that Matthew shared in his blog post. You can download and tweak it for your own use.

Step 1. Create a spreadsheet

Create the spreadsheet with two sheets: “Templates & Output” and “Row Details”

Step 2. Set up your templates in the “Templates & Output” sheet

In one cell set up a template of the html for the whole table, using a text placeholder (e.g. [rows]) for where you want the rows to go. I put my placeholders in square brackets but you can customise this to your own preferred style, just make sure they won’t be mistaken for html.

Screen Shot 2016-04-24 at 21.02.55


In another cell set up a template for the table rows, using text placeholders (e.g. [Name], [Description], [Link] etc) for the specific details of each row.

Screen Shot 2016-04-24 at 21.03.58


html creator - Templates and Output
Templates on the left.  Output (explained later) on the right.

Step 3. Make a table for the unique details in the Row Details Sheet

Make a table with a header row, the header items are the placeholders in the templates. Each row of the table here will provide the unique details for each row in the html table. So if you were producing a table with details about a range of apps, each row will include the details of one app.

html creator - Row Details

Step 4. Write a formula to replace the placeholders in the row template

In a column to the right of all the details write a formula using SUBSTITUTE(). This formula requires three arguments SUBSTITUTE(arg1,arg2,arg3).
* For argument one point to the template for table rows, this will form the base text of SUBSTITUTE(). This reference should be absolute because the layout of all rows is based on the same template (“A1” is a relative cell reference and “$A$1” is an absolute cell reference).
* Then use the formula to replace a placeholder with the detail from the table. Argument two should point to the placeholder text, i.e. the header of the table column. This argument should use an absolute row reference (“B$1” for example) because the placeholder text is a constant for all rows in the table.

* Argument three points to the detail in the table that the placeholder should be replaced with (e.g. “B2”).

Nest multiple SUBSTITUTE() formulae for as many placeholders as you have. If you had five unique details to place into your template for each row then you would need five nested SUBSTITUTE() formulae. E.g.
Where the absolute row references point to the headers of the table. Fill that formula down the length of the table.[1]

Step 5. Concatenate the html for all rows

In one cell, can be anywhere I put mine in the Templates & Output sheet, concatenate all the html that your spreadsheet has generated for the rows. You can manually write a CONCATENATE() formula, or use ampersands “&”, or my favourite is to use JOIN() with an OFFSET() formula. The beauty of JOIN() is twofold:
1. I can easily concatenate all the html with a line break as a delimiter which gives me a tidier html output. You can certainly add a line break with CONCATENATE() but it requires a lot more work. NB Add a line break in a formula by typing CRTL+Return.
2. I can pass in a dynamically resizing array of items with OFFSET(). In my spreadsheet the OFFSET() formula only picks up the number of html items that correspond to a table row that I have actually filled in. If I used CONCATENATE() I would have to go into and edit the formula everytime I wanted to add or subtract rows from my table. But with JOIN() I can add five new rows to my Row Detail table and the html creator will automatically accomodate those extra additions – it is beautiful!

I know I haven’t fully explained how to use JOIN() or OFFSET() here – I didn’t want to add a lot more information than necessary. If you check out my shared spreadsheet hopefully you will be able to work out how I did it. If not and you really want to know more then add a comment to this post and I will add an update with an explanation of my method.

Step 6. Compile the html for the table

In a cell in the “Templates and Output” sheet use SUBSTITUTE() again to replace the [rows] placeholder with the concatenated html for the rows.  That cell then provides the html for your table. Copy and paste it into your website / blog.

Setting everything up was a lengthy process but now your hard work will pay off.  Should you need to tweak the formatting of the html table it is now really, really easy and fast to do.  All you have to do is update the relevant code in your template. For example, if you wanted to make all of the columns a little wider you can simply change the width value in the row template and your html output will automatically update – no need to adjust a concatenate function and re-fill.  And when you come to design your next html table you will already have a spreadsheet ready, needing only a few minor tweaks before it can be used.

Below you can see the output for one of my tables[2]. The full table can be seen live on my website here. I hope that you found this method useful. If you need further clarification on setting this up let me know in the comments.

  1. With some logic formulae, such as IF(B2=“”,“”,SUBSTITUTE(…)), you can automatically hide irrelevant data from the concatenation stages. A formula like the one above checks to see if you entered anything in cell B2, if you didn’t it returns a blank cell, if you did it will return the output from the SUBSTITUTE() formula.  ↩
  2. HTML table ouput.
    Screen Shot 2016-04-24 at 21.07.02.png


Are You Planning to See the Total Eclipse of 2017?

On 21 August 2017 a Total Eclipse will travel across the USA from West Coast to East – right across!

The eclipse will hit the West Coast just after 10:15 AM PDT, it will then reach the East Coast about 90 minutes later at just gone 2:45 pm EDT.

A great website with loads of information about the eclipse can be found here: Great American Eclipse.  They’ve got maps covering a wide range of eclipse information, videos, eclipse viewing glasses for sale, and lots of information about viewing the eclipse.  The maps available on Great American Eclipse are fantastically detailed – make sure you download the high resolution computer wallpaper.  If you are able to make it to view the eclipse you will certainly find their resources very helpful.

If you are interested in seeing the path overlaid on Google Maps I have added it and you can access it with this link:  Also embedded below.  Now you will be able to navigate there and confirm you are indeed in the path of the oncoming eclipse right in your Google Maps app.*

I really hope I can make it out to the States to see this, what about you?


*Please note that there will undoubtedly be some inaccuracies in the data displayed on my overlay of the map.  So to be certain of being right in the path of the eclipse it would be advisable to move a reasonable distance inside the path and not stay on the very edges as denoted by the black lines.

Act fast to show your support for Numerous

Numerous has been on my blog to do list for some time now.  That is, to write about how great it is – especially in conjunction with Google Forms and Sheets.  It has proven to be an incredibly functional app for me and for many others.  But they recently announced their imminent closure due to being unable to become self sufficient.

However, the are many people who find Numerous incredibly useful and yet it is a free app and service.  Perhaps there are enough of us out there willing to pay to keep Numerous going.*  If you love / rely on / appreciate Numerous take a moment to show your support by filling out this form and then follow the result on Numerous.  This method of course showcases how cool Numerous is: Google Sheets picks up input to the form and Numerous hooks into the sheet to display a number summarising the results.  Multiple cells on the spreadsheet can be linked to from Numerous so you can display multiple results.  For example, with this poll I am taking here I can display (1) how many people are willing to pay for Numerous, (2) on average how much they are willing to pay and (3) the most popular monthly fee for Numerous.

* I appreciate that getting enough revenue might in itself not be enough to keep Numerous going, but maybe just maybe it is.

UPDATE 13/2/16: 

For a more detailed analysis of responses check out the published results here.

Here are a couple of other numbers on Numerous to track results of the poll:

Average Numerous Fee
The average fee that users are willing to pay
Most popular fee
The most popular monthly fee for Numerous

Update 3/3/16:

Tweet from @NumerousApp :

@nadnosliw We’ve heard from dozens of people, which is very gratifying, but it needs to be more like 10,000 or 100,000…

Apple, please don’t shave <0.5 mm off of the next iPhone / MacBook

Apple need a significant change in their design philosophy of “thinness”.

Apple, stop making thin devices “thinner”.  Apple seems to think that it can’t sell new iPhones or laptops unless they are thinner than their predecessor. This has taken on a ridiculous manifestation now. Supreme effort is put into shaving tenths of a millimetre off of already thin devices. Practically the differences make very little difference to most people, but they are championed at Keynotes as a key selling point.

In order to achieve these reductions Apple goes to extraordinary lengths to make more room for the battery in a thinner chassis so that they can (apparently) maintain battery life. This is the other side of the fallacious coin. If you ask most people using an iPhone or MacBook they won’t tell you they hope for the same battery life – they want a longer battery life!

So rather than attempt to shave 0.2 mm off the next device I hope Apple will instead go to extraordinary lengths to make more room available for a bigger battery in a device of the same thickness.

Swipes, snoozes, services and pdf export : Welcome to Spark.

When Dropbox announced that it was closing down Mailbox I thought that was the end of email efficiency for me.  Parallel to use of Mailbox I had played around with Inbox, Boxer and Cloudmagic but never found them up to the mark for how I did email.  Part of that was certainly due to the fact that I had setup my email accounts to work well with Mailbox but there was still a significant part that was down to core features of those apps.
So I was over the moon to discover Spark.  It is an email app that incorporates all of Mailbox’s best features but then does even more on top.  In Spark you can swipe emails in your inbox to archive, delete, snooze, move or several other options.  You see that’s a particularly great thing about Spark: it is so customisable.  Swiping emails makes it super easy to process your inbox.  In the same way that Mailbox offered a short or long swipe (to the left and right) Spark does that too.

Boxer and Cloudmagic have always allowed users to hook other services directly into their email, services such as Evernote, Dropbox, Drive.  Mailbox didn’t offer that, which was a slight source of frustration to me.  Sure I could use IFTTT to hack the service in but that meant having to label emails especially for that service but that’s not necessarily the best way to actually handle your emails.  Spark offers those third party service connections too.  That doesn’t give it the edge over Boxer or Cloudmagic but it does nudge it over Mailbox and Inbox.  So now in Spark I can long swipe left and send my emails direct to Evernote.  I send shed loads of emails to Evernote so the process just got a lot faster and made more awesome by Spark.

Upon news of Mailbox’s demise I decided to set up shop in Inbox.  My most important email accounts are Gmail accounts.  Gmail is awesome.  Ever since the release of Inbox I have subconsciously willed it to be great and I do like it.  But there are some things that really irritate me about it.  Firstly, it doesn’t have a unified inbox.  Why not?  I do not know, but Google have for some reason forced us to keep our inboxes separate and made checking email across multiple accounts that much more tedious.  Secondly, if you want to check a bundle once a day Google have decided that you may only check it at the time they decide.  Well I’m sorry Google but that time does not suit me.  Thirdly, due to the non-unified inbox fiasco described above you can’t have a badge for how many emails are in your inbox.  I like to maintain inbox zero, but Inbox won’t remind me if I have emails to process.  Related to that point is that reminders are pretty much useless if I am in another account’s inbox – oops.  Fourthly, this point I understand but it is there so it should be stated: Inbox only works with Gmail accounts.  I don’t see that changing anytime soon for the obvious reason that I can’t imagine an app made by Google support Yahoo or any other mail.  I do have email accounts with other providers so this situation forces me to use multiple email apps which is undesirable.
A major persuading factor for me switching to Inbox from Mailbox was the ability to snooze emails.  I find that so useful.  (A doff of the cap to the Mailbox team for introducing this feature.)  Well Spark allows me to snooze emails too so a big tick to Spark.
After coming across news about Spark a few days ago I decided to investigate further.  I was impressed by the inclusion of features I had come to love and rely upon in Mailbox and there was more on top: Save emails as PDF, send full attachments, hook third party services directly into the app etc.  Here is a list of Spark’s killer features that have won me over:
  • Spark supports Gmail, iCloud, Exchange, Yahoo!, Outlook and other email providers.
  • With Spark you can send full file attachments not photos or links only.  Attachments are created from cloud storage services (e.g. Drive and Dropbox).  The attachment process gives you the option of sending a link to a file or sending ac copy of the file itself.
  • The services that can be hooked into your email include: Evernote, Dropbox, Drive, Box, Pocket and more.
  • Snooze your emails easily with a swipe and tap.  The list of snooze times is customisable to keep things snappy and convenient.
  • Emails can be exported as a PDF straight to any relevant services you’ve connected.
  • Spark has a smart inbox (which is optional).  It lists all your new/unread emails at the top.  As you read them they move down to a separate section for read emails.  From either section you can process emails by swiping them.
    If you want to pin an email to your inbox you can do that too.  Pinned emails are kept in their own section.
  • Want to find an attachment?  You can view a list of just attachments from your email accounts in Spark.
  • You can customise so much within Spark: which accounts contribute toward the app badge, how the sidebar is laid out, what your swipes do, what widgets are shown on the home screen of the app, you can change which actions are available in your email viewer toolbar (archive, delete or both) and more!
  • Quick replies.  Wow these are good.  At the bottom of an email you can tap an icon to send a reply such as “👍🏻 Like”, “✅ Thanks”, or “😀 Great idea”.  As you can imagine even these are customisable.  You can change the order of the list and create your own quick replies.
  • Respond to calendar invitations from emails.
Mailbox did have one feature that I found useful and that is not available in Spark, which is the ability to auto-swipe emails.  I used this to auto swipe emails from mailing lists to a Gmail label called either “Updates” or “Promotions”.  Then I had an IFTTT recipe to send me an email digest daily for Updates and weekly for Promotions.  Whilst using Inbox I had hoped the bundles would serve as the same thing, but the inability to change the time of day each bundle would be shown prevented it working for me.   So even though Spark doesn’t offer something like this Inbox doesn’t have a useful equivalent for me.
Version 1.5 was released today which allows you to change the notification actions and assign default signatures to specific email accounts.  Spark is on fire.  It is an incredibly well thought through app that is going from strength to strength.  Currently Spark is only available on iPhone, but an iPad app is slated for release in the future.  I cannot wait!

This slideshow requires JavaScript.