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:

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 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 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.


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:


  • 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.

Tiktrac updates: Reports

16 Oct 2008 | By Alex Young | Comments | Tags tiktrac

Tiktrac has been upgraded with the following fixes:

  • Reports set to show tasks with client filters will now work correctly
  • Certain reports weren’t exporting CSV data, this has now been fixed

A few Tiktrac fans have suggested that they’d like more flexibility from the RSS feeds. This made me realise reports should be available as RSS. I’ve just finished work on this and you can check it out now.

Navigate to one of your reports (or add one), then click the Export menu and select RSS Feed:

Your browser will show you the feed:

You can then subscribe in your feed reader of choice. Note that these screenshots were taken in Firefox 3. If you use Safari or Firefox you can subscribe to feeds within the browser.


  • If you want to create a list of tasks (rather than summarised data), make sure you create a report with Summarise set to Tasks and Group by set to All
  • Try to use report filters creatively to create really useful feeds
  • If your browser doesn’t support feeds, right click the RSS Feed item in the Export menu and select “Copy link”. You can then subscribe anywhere
  • Tiktrac RSS feeds require you to enter your email address and password for security reasons
  • Tiktrac RSS feeds are limited to 20 items. We’ll offer pagination as a URL parameter if people need it

Rails plugin: AssetAutoInclude

16 Oct 2008 | By Alex Young | Comments | Tags rails programming ruby plugins

AssetAutoInclude is a new Rails plugin written by Gabriel (who helps me out with Helicoid’s projects and works on Rails projects for all kinds of big companies in the US). It’s designed to make JavaScript and CSS includes more efficient, by only including the JavaScript or CSS you require for each controller and action.

The motivation for this project is to:

  • Help manage your CSS and JavaScript in a familiar Rails-friendly way
  • Only include the required CSS and JavaScript on each page

This is in contrast to the common technique of appending JavaScript or CSS into monolithic files.


Install using script/plugin:

  script/plugin install git://

By adding the following to a layout:

 <%= javascript_auto_include_tags %>
 <%= stylesheet_auto_include_tags %>

You’ll get JavaScript and CSS automatically included according to the following scheme:             # includes controller.js and controller.css      # includes controller.js, edit.js, and edit.css      # includes controller.js             # includes roles.js          # no files included   # includes show.js and show-new-edit-create.js      # includes show-new-edit-create.js   # includes show-new-edit-create.js   # includes show-new-edit-create.js

This allows you to share JavaScript in controller.js files, and add action-specific includes where required. Many controllers have shared JavaScript, with only minimal tailoring for add/edit actions, so this makes sense for most instances.

The plugin only includes assets that exist, so you don’t need to create empty files for controllers or actions you don’t need.

Expected JavaScript and CSS file system layout

The expected file structure is as follows:


This makes managing your JavaScript files easier, and more consistent with the Rails style too.

Top 5 uses for Capistrano

02 Oct 2008 | By Alex Young | Comments | Tags capistrano programming ruby

This is a technical post about Capistrano, a tool that makes deploying software to servers more manageable.

I use Capistrano to deploy changes to Helicoid’s applications to our servers. However, Capistrano also comes in handy for lots of things beyond deployment. Here’s my top 5 Capistrano tips beyond deployment.

1. Signup statistics

When running advertising campaigns I find it’s useful to see the impact on signup statistics. I used Capistrano to connect to servers and query our databases to gather registration data. It’s fairly easy to output tables and graphs as well.

In Analytics with Capistrano I wrote about this in more detail with some code snippets.

2. Server backups

For a small or medium-sized project, Capistrano can be used to automate off-site backups. I wrote a Capfile to backup one server to another one in another datacentre using rsync and mysql dumps. By relying on existing backup software (or the often used rsync) Capistrano is simply used to orchestrate remote and local backup-related tasks.

You can prompt for database passwords if you don’t want to store them in your Capfiles:

set(:mysql_password) do
  Capistrano::CLI.ui.ask 'Enter mysql admin password: '

run "mysqldump -u username -p my_database > /home/alex/Backups/my_database.sql" do |ch, stream, out|
  ch.send_data "#{mysql_password}\n" if out =~ /^Enter password:/

sudo "gzip /home/alex/Backups/my_database.sql"

Using rsync to backup files to the local machine would call system rather than run:

system "rsync -a -e ssh #{BACKUP_TARGET}/files/"

This came in handy when I wanted an additional backup to the service the datacentre provided internally.

3. Quickly viewing remote Rails objects

When addressing a bug report I occasionally need to see the properties of live data. I use the following little snippet to let me do this:

cap show -s command='User.find(1)'

task :show, :roles => :app do
run <<-COMMAND
/u/apps/tiktrac/current/script/runner -e production ‘require “pp”; pp #{command}’

4. cap shell, distributed uptime

This is an obvious one, but if you haven’t tried it before it’s worth adding to your toolbox.

Typing cap shell will give you a Capistrano shell on your remote machines. Issuing a command will issue it on each machine. Typing with role_name before the command will run it on one machine.

Seeing as the commands are executed on each machine, an innocuous issuing of uptime will let you see the state of several servers at once.

5. Upgrade more than one machine at once

Now apply the previous tip to sysadmin tasks. Consider this:

cap shell
sudo apt-get update

See where I’m going with that? More proof that Capistrano and similar tools are another step to Henry Ford’ing your most repetitive drudge work.