Deadline SMS support (plus Fluid and Ubiquity!)

02 Jan 2009 | By Alex Young | Comments | Tags deadline sms announcements

Deadline now supports SMS (text messages). The feature is currently available as a trial while we estimate costs. To get on the trial, see the SMS page in Deadline Settings for more details.

Notes on Deadline’s SMS support

  • The trial is free, but SMS support will be a paid feature in the future. This is because sending an SMS costs money and Deadline is currently a free service. We may subsidise SMS using context-sensitive adverts in the future.
  • Two-way SMS may be available in the future, we’re still looking into costs and international support issues.
  • You’re currently limited to 10 messages a day. This number may change depending on popularity and costs.

Other improvements in this upgrade

  • Deadline now supports Fluid
  • Deadline now supports Mozilla Ubiquity
  • Setting “Remember me” during login should always work now
  • The settings page has been tidied up, with some secondary navigation to help you find things
  • We fixed a bug in Jabber

Rapid Fluid support

26 Dec 2008 | By Alex Young | Comments | Tags fluid webapps javascript programming tutorial

Fluid is a Site Specific Browser (SSB) for Mac OS. It allows web applications to run in their own window with a dock icon, dock badge and supports Growl notifications. You can support Fluid in your web app without any server-side code changes.

I recently added Fluid support to Deadline. Deadline basically a calendar/reminder system, so it works particularly well with Growl notifications. It was a rewarding development experience: Fluid’s API is clean and delivers excellent results with minimal effort.

Browser support detection

It’s important to check if Fluid is available before trying to call its API.

The easiest way to do this is:


  if (!Object.isUndefined(window.fluid)) {
    return new FluidAppMode
  }

This stops browsers from trying to load Fluid functionality when its not available.

Auto-refresh

Deadline displays a list of events with no automatic browser refresh. When adding Fluid support I decided to automatically update the displayed items using PeriodicalExecuter (from Prototype). This makes it feel a little bit more application-like. Deadline shows inline editors, so it’s trivial to check if any inline editors are visible to hold off PeriodicalExecuter to prevent it from updating while the user is editing.

As time goes by each deadline’s event date is reached and a notification is displayed. To track which ones have been displayed I use a cookie that stores a list of deadline IDs.

Dock badge

Deadline reminders that are ready are counted and displayed in the dock icon:

Changing the dock icon is easy: window.fluid.dockBadge = count. To avoid changing server-side code, I derive the dock badge count by counting the number of deadlines marked with “Now”.

Growl Notifications

Growl notifications can be displayed with this Fluid API call:


    window.fluid.showGrowlNotification({
        title: "Deadline Reminder", 
        description: message, 
        priority: 1, 
        sticky: false,
        identifier: message_id
    })

You can’t just display notifications blindly, however. For Deadline I decided to record the displayed deadline IDs using a cookie. We have an internal JavaScript library called Azuki which abstracts cookie management, but you should be able to follow this code without it:


  showNotifierMessage: function(message, message_id) {
    if (this.displayedMessage(message_id)) {
      return
    }
        
    window.fluid.showGrowlNotification({
        title: "Deadline Reminder", 
        description: message, 
        priority: 1, 
        sticky: false,
        identifier: message_id
    })
    
    this.logMessageDisplay(message_id)
  },

  logMessageDisplay: function(message_id) {
    // Log message to cookie
    var deadline_notifier_messages = Azuki.Storage.Cookie.find('deadline_notifier_messages')
    
    if (Object.isUndefined(deadline_notifier_messages)) {
      deadline_notifier_messages = message_id
    } else {
      deadline_notifier_messages = deadline_notifier_messages + ',' + message_id
    }
    
    Azuki.Storage.Cookie.create('deadline_notifier_messages', deadline_notifier_messages, 365)
    
    this.log(deadline_notifier_messages)
  },
  
  displayedMessage: function(message_id) {
    var deadline_notifier_messages = Azuki.Storage.Cookie.find('deadline_notifier_messages')
    message_id = parseInt(message_id)
    
    if (Object.isUndefined(deadline_notifier_messages)) {
      return false
    }
    
    var message_ids = $A(deadline_notifier_messages.split(','))
    
    return message_ids.find(function(logged_id) {
      if (parseInt(logged_id) == message_id) {
        return true
      }
    })
  }

As you can see I store each displayed deadline ID separated by commas in a cookie. This then allows Deadline to only notify new deadlines.

Supporting multiple SSBs

There’s a few SSBs available. I’ve chosen to support Bubbles for Windows.

To support multiple SSBs you could either use inheritance or delegation to manage shared code. In Deadline’s case I’ve shared the notification cookie management code and the use of PeriodicalExecuter between Fluid and Bubbles using inheritance. Remember that Prototype’s inheritance mechanism is now specified through Class.create


var FluidAppMode = Class.create(WebAppMode, {
  initialize: function() {

I’ve detected the availability of Bubbles as follows:


  if (typeof(SSB) != 'undefined') {
    return new BubblesAppMode
  }

Bubbles’ API is accessed through the SSB singleton object.

Share your SSB support

Have you supported an SSB with your web app? Why not share your links and experiences in the comments?

Deadline: Colours, backgrounds and themes

24 Dec 2008 | By Alex Young | Comments | Tags deadline announcements

The Deadline colours update has just gone live! This update adds:

  • Configuration options for colours and background images in Settings, Appearance
  • Almost all of the colours in Deadline’s interface can be controlled: background, buttons, navigation (footer), highlight hover, “odd” rows, search bar border
  • A generous helping of our own preset themes to get you started
  • Background images can also be uploaded and tiled if required
  • We’ve also added a print stylesheet
  • Fixes for date parsing when descriptions contain numbers

The preset themes come from my own designs and photo collection. Here’s the current set:

The Appearance settings look like this:

To change a colour, click on it then drag the sliders.

If you come up with an awesome theme, please send a screenshot to our support email address or get in touch through our contact form.

Deadline upgrade: Recurring reminders

17 Dec 2008 | By Alex Young | Comments | Tags deadline announcements

Deadline has been upgraded:

  • Support for recurring reminders has been added with documentation in the Help section
  • The last email reminder can now be set as “important” (this should show up in Gmail, Outlook, Apple’s Mail and Thunderbird)

Writing recurring events that Deadline can understand

Write a date with the word “every” to denote a recurring event. Once the deadline’s date has been reached it will be automatically rescheduled.

For example:

  • Alex’s birthday every January 21st
  • Art lesson every Monday morning
  • English lesson every 4pm

Recurring reminders are indicated with an icon:

Currently there’s no way to manually set an event as recurring.

Deadline: Fixes and tips

04 Dec 2008 | By Alex Young | Comments | Tags deadline tips

This week we’ve made the following fixes to Deadline:

  • Google Calendar will now show text instead of just “busy”
  • Time zone bugs have been resolved (sometimes typing “tonight” resulted in a date for tomorrow)
  • Internet Explorer 6 and Chrome support improved
  • Selecting “-——” as a date in the full date entry form returned XML instead of a friendly error

If Google Calendar still says busy for all of your Deadline events:

  1. Remove the calendar
  2. Go to Deadline and copy the link to the iCal feed from the Settings page
  3. Paste in the calendar link, but add “?999” to the end of the link

The reason you need to add ?999 is a random number will fool Google into thinking it’s a different URL and thus download the new version instead of using a cached copy.

Your URL should look something like this:

http://deadlineapp.com/exports/YOUR_ID/YOUR_CODE/file.ics?999

Deadline: New features for this week

26 Nov 2008 | By Alex Young | Comments | Tags deadline

Later this week we’ll be updating Deadline with the following upgrades:

  • New reminder system – this will reduce server load and allow us to add some clever new features
  • Reminder previews – when editing your reminder settings you’ll be able to view a table of reminders to easily see what the settings do
  • Additional reminders (minutes) – you’ll be able to set days, hours and minutes for additional reminders (thanks jrk)
  • Jabber bot – the IM bot will work properly with Jabber (it’ll have a new account name)
  • More date parsing improvements (especially for phrases including the word “today”) (thanks Dougal)

These updates are still being tested but we’ll let you know when they’re deployed.

Update: We’ve just deployed these changes to our servers. Note that you should switch to using talk@deadlineapp.com for IM.

Tiktrac upgraded: HH:MM support and email imports

24 Nov 2008 | By Alex Young | Comments | Tags tiktrac upgrades

Tiktrac has just been upgraded:

  • Email imports are now supported
  • HH:MM can now be displayed as well as typed in (switch to it by editing a time sheet)
  • The login form looks nicer
  • Minor browser bug fixes (Firefox/IE both improved)

Email imports are incredibly useful if you’d like to schedule regular imports from a back office system. Set them up like this:

  • Each sheet has a unique email address, click “Import” on a time sheet to view the address
  • Import a CSV file the usual way, but instead of saving the import select “Set as Email Template”
  • The sheet is now ready to accept emails
  • Send an email to this address with an attached CSV file to import

Deadline and Tiktrac updates

19 Nov 2008 | By Alex Young | Comments | Tags deadline tiktrac

We’ve just updated Deadline with these fixes/improvements:

  • Calendar feeds that don’t need HTTP auth are now available for those of you who want to subscribe to Deadline in Google Calendar
  • Reminders are now switched off/on properly (thanks debaire)
  • Fixed parsing of phrases like “hunt rabbit 3am tomorrow” (thanks voamash)

These issues have been acknowledged but not fixed yet:

  • Phrases containing “today” aren’t interpreted 100% correctly yet
  • Jabber bot isn’t working across Google Talk to Jabber. We’re testing our own Jabber server, and it may be that we have to run a service for Google Talk and Jabber separately — thanks to dag for helping us with this

These are things we’ve been asked about a lot this week:

  • We’re looking into the costs for SMS alerts and international support
  • Time zone support quality is being looked into
  • We are indeed building a Mac and iPhone application (Helipad iPhone will be out first)
  • If anyone builds a cool and user-friendly Adobe Air application we’ll modestly reward you (possibly serious Amazon/iTunes vouchers, we haven’t decided yet)

Tiktrac

Tiktrac has new features tested and ready to go live, we’re just waiting for the Deadline press to quiet down before deploying:

  • HH:MM display option is coming soon
  • Email imports will be going live with the HH:MM update, this will allow you to set up back office applications to email CSV files into Tiktrac
  • Interface bug fixes

Deadline API live

15 Nov 2008 | By Alex Young | Comments | Tags api deadline announcements

The Deadline API is now live:

Deadline API documentation

A lot of people were asking for it, so we prioritised releasing it this week. We want to run a competition for the best apps people write with it, so stay tuned for details on that soon.

Deadline

11 Nov 2008 | By Alex Young | Comments | Tags announcements deadline

Deadline is our latest app: a new take on the web calendar. It uses natural language parsing to interpret events you write in plain English. Searching is also intelligent: typing “next week” shows all your events for next week, whereas “meet kev” will look for those keywords.

Deadline works with Jabber/Gtalk: it sends reminders and also allows you to delete, delay and hide events through your IM client.

It also accepts and sends email. That means if your mobile phone supports email or MMS you can get and set reminders anywhere. There’s also a mobile interface too just like the rest of Helicoid’s projects.

If it can’t understand the date and time you’ve typed in, it’ll prompt you to enter one with a form like this:

Deadline is the second application to use Helicoid auth server, which means if you have a Helipad it’s single sign-on!

Deadline looks very different to our other web applications. There’s barely any navigation and no footer. When you hover the logo minimal navigation appears. I really wanted to make something that looked graphical, almost like an album cover: big helvetica fonts, bold colours, with an emphasis on your data over application chrome.

Accounts are free and signup is quick (remember you can just login if you use Helipad). If you’d like to know about the technical stuff, or upcoming API details, post a comment and I’ll get back to you.

There’s also more details here: http://pad.helicoid.net/document/public/93f5a1ce

Updates

  • 13th November: Cleaned up help text interface, fixed a typo on the homepage
  • 13th November: Improved IM and email help (inline help on the Settings page, complete with screenshots)
  • 12th November: Acknowledged that if you have a Helipad account and try to reset your password on Deadline it doesn’t work if you haven’t used Deadline before. This will be fixed soon.