This page is a discussion of ideas for a possible, perhaps useful, bit of software, but it has not been written, it's just a discussion for now. There are a few reasons why it probably won't be written, which will be discussed below. If you have comments, or suggestions why it's a good or bad idea, please send them in by email.

The basic idea is of a reminder tool, which tells you when the next tram (or bus, train, plane, whatever) is about to leave. It's not a general reminder tool for the afternoon work meeting, it's for repeating events which you can often ignore. It's for the tram which leaves work every 15 minutes and it'd be a pain to go outside just after one has left.

Maybe there is only one route home, and you always take the 17:55. In that case, you don't need this. Maybe the timetable is easy to memorize, and you already know that the buses leave at 8 minutes past the hour. Again, then this isn't for you. This is for varying times and varying schedules, possibly multiple routes and so on. The big advantage proposed here is that you don't need to do anything to check whether to leave now or not (or rush or not) except glance to the task tray and maybe mouse over it.

Tooltip over task tray icon

So let's start with the basics - an invisible application which just hides in your task tray, doing nothing most of the time. It should keep out of your way until you mouse over it. You're about ready to go, so you mouse over the task tray icon to see the popup. When's the next tram?

Next Connection:
No 2 Tram
16:49 from Paradeplatz
Leave in 7 minutes

This tells me just the very minimum of information, what time is the tram and when do I have to leave here in order to get it? The app knows how long it takes to get from your workplace to the station where that connection leaves from, so it tells you when to go.

Basic information

So far so good, but maybe that's not enough time, so what's the connection after that? Click on the icon to launch the application, and show more details about the next connection and allow scrolling for earlier or later connections.


Next Connection:
No 2 Tram from Paradeplatz
To: Letzigrund
Departure: 16:49
Arrival: 17:04

Leave in 7 minutes


Connection list

That's nice, but I've got to be somewhere tomorrow morning and I'd like to see the connections now. So the "Show All" button on the above screen shows a list of all connections in a scrollable list, clicking on one shows the whole details.


Connection details:
No 2 Tram from Paradeplatz
To: Letzigrund
Departure: 16:49
Arrival: 17:04


Now comes the tricky part. Where does all that data come from? So this application needs a way to configure the data, especially the list of timetables which it uses for the real-time information. Probably a menu entry would lead to the configuration screen:


Use task tray colours to warn of connections
Only warn after
Show     when less than minutes before need to leave
Show     when less than minutes before need to leave

This screen shows the list of currently stored timetables, for different transport options. Maybe they are different ways of getting to the same destination, or maybe they go in completely opposite directions. The most important functions are to add a new timetable to this list or edit an existing one, and these are done by the following screen.

The lower half of the configuration panel is a sketch of the configuration options for the task tray icon, changing colour as the leaving time approaches.

Add/Edit timetable

By clicking the 'Add' or 'Modify' buttons on the timetable configuration screen, we get to the details of an individual timetable. These include the name, start and end points, journey time (although maybe this varies by connection), and the time it takes to get to the departure station. Plus of course a list of departure times.

Timetable name:
Departing from:
Arriving at:
Journey time: minutes

Getting to departure point
needs minutes

The big missing question here is what the 'Import' button does - clearly it should provide an easy way to load the departure times of the connection rather than require entering each one individually by hand. But it's hard to see a general way in which an import function could gather and parse the timetable, whether from a copy-paste function or a text file load or from an internet url.

Extensions, issues

This could get quite complicated if you let it. Probably the timetables should be grouped according to goal, for example I could take that tram or that bus if I want to go home, but I'll take this other tram to get to the gym or that train to get to the cinema. Maybe Monday is always cinema night and Thursdays always means gym. So the used timetables might automatically switch according to the day of the week. This is almost certainly overkill, but selecting a destination might be useful from the basic information screen.

For the timetable config, maybe it's easier to have a journey time and a list of departure times, as the journey time for trams is pretty constant. But for trains maybe you need a list of departure and arrival times instead if the journey time varies.

Maybe each entry in the timetable needs a comment field, to let you know about where to change trains, etc.

The timetables can wrap over midnight, but there could be a "last" connection which you really have to make, or face a long walk home. This could easily be determined by spotting the biggest time gap until the next connection. Then the warning could be extra-insistent leading up to this last opportunity. Warnings could also be visual (with a popup) rather than just a change to the task tray icon.

Of course the main problem still remains, how to get the timetable information. A nice way would be to automatically parse the appropriate webpage, for example directly from the train website. This would be incredibly specific though, as each train website is different and a general parseable format doesn't exist. Maybe people could write their own parsers / filters / plugins but chances are slim to none. And that still leaves the personal customization of choosing timetables and measuring the time it takes to get to the tram stop.

Closing thoughts

It would be quite cool to have an app like this, at least for a limited subset of circumstances. The locations and journeys have to be predictable, the connections have to be fairly frequent (to give various possibilities), and the journey times have to be flexible (otherwise a fixed reminder could be used). This makes the potential audience rather limited. All those who commute by car or bicycle can be ruled out immediately, plus those who work in various different locations.

The main problem is that each individual user of this app would have to invest their own time in configuring all the data. This effort would be very difficult to share effectively. One person's timetable is after all not somebody else's. So of the potential audience of the application, this is then even further restricted down to those willing to manually enter the timetables and get it up and running.

So this may be a project for an audience of 1. It might be a nice idea, or on the other hand it might be transferrable to a completely different domain, maybe nothing to do with transport at all. Who knows? So I throw these thoughts out there. Any suggestions or feedback you have to contribute on this would be very welcome.

Update : It seems that getting hold of this timetable information is just the first hurdle involved here. As this very desperate and unhappy UK blogger protests, the organisations which should be trying hard to make it as easy as possible for customers to find out about the train times, actually go to great lengths to prevent non-profit projects like these from accessing the data. How very frustrating. That particular app is phone-based and accesses real-time information about train delays too, not just timetables, but the intent is clear, to stop people developing free gadgets to make public transport easier. This could be yet another reason not to go further with the timetabler ideas.

OsmWrangler // OsmWrangler 2 // Timetabler // TextRactor // RockMySlocs // MobileJass