At the Forge - Sunbird and iCalendar
When I first started to write server-side software, I laughed at the thought that I was writing applications. After all, I was writing only small bits of code; nothing I did could hold a candle to what a real program, running on the desktop of someone's computer, could do.
Of course, things have changed quite a bit in the computer industry since those early days. Today, Web-based applications are not only an established fact of life, but they seem to be playing an increasingly prominent role in our daily lives. Recently, I began to look into software that I could use to prepare my US income taxes. I shouldn't have been surprised to discover that many companies now are offering Web-based tax calculation programs. The term ASP, or application service provider, was hot several years ago, when it seemed as if all software would work over the Web. Although there have been some obvious success stories, there also were many failures, for technical and business reasons alike.
It's easy to understand why Web-based applications are attractive to a business: you no longer have to test your software on every platform but instead only on a handful of browsers. You no longer need to support many different versions of the software, because only one version is accessible at any given time. Bug fixes and software updates can be integrated into the system almost continuously. The software is available from anywhere with an Internet connection, instead of only on the computer on which it was installed. The list goes on and on. From many perspectives, this approach makes more sense than stamping out thousands of CDs, testing the software on hundreds of configurations and staffing a large call center to support all of those configurations.
But for all of the hoopla, Web applications still are limited compared to their desktop counterparts. Because all serious processing is done on the server, including writing to and reading from databases and files, instantaneous feedback from the interface is almost impossible. Even with the fastest servers and a lot of clever magic, such programs still can seem somewhat tedious. Google's new maps system (see the on-line Resources), for example, demonstrates that it is possible, albeit difficult, to create Web applications that feel much like their desktop counterparts.
Those of us without Google's resources increasingly are turning to another solution, namely using hybrid software—desktop applications that rely heavily on Web technologies. It used to be that Web technology could be described, with a fair degree of precision, as HTML-formatted documents retrieved by way of HTTP using a URL. Web browsers were, for a long time, the only programs that made serious use of these standards.
Today, however, a growing number of desktop programs make use of HTML, HTTP and URLs, even though they aren't Web browsers. They use URLs to locate remote resources, HTML for its simple, universally understood method of creating hyperlinked documents and HTTP because it is reliable, simple, universal and cacheable. There aren't too many examples of word processors and spreadsheets using these protocols—at least, not that I'm aware of—but one hybrid program has been playing an increasingly prominent role in my life, Mozilla Sunbird.
Sunbird (Figure 1) is the standalone version of the calendar extension that can be installed along with either Firefox or Thunderbird. Integration with these two programs is far from perfect, and I sometimes want to run or restart one without the other. So I installed Sunbird over the summer and have been pleased with each new release as it is made available.
Now, you might think there is nothing inherently useful about having a calendar use Web technologies. But in the case of Sunbird and the iCalendar standard, there is a major benefit—namely, the ability to create calendars for public consumption. This month, we begin a several-month journey through the creation, distribution and sharing of calendars based on the iCalendar standard. Along the way, we'll see not only how to work with iCalendar, but how the hybrid applications can provide a powerful combination of features and an enhanced user experience.
iCalendar is an Internet standard for sharing calendar information across different computers. The basic idea is simple: if everyone at my office keeps track of their schedules on their own computers, it makes things efficient for those individuals but no better for the group than if everyone were using a pocket diary. Scheduling meetings still would be a hassle. Moreover, group events would have to be entered once on each person's calendar—meaning that when a meeting moves from Monday to Wednesday, each of the people on the team needs to adjust their individual calendars accordingly.
iCalendar was designed to solve this problem by standardizing the calendar files themselves such that those files can be transferred from one program to another. The original vision, as far as I can tell, pictured everyone using programs that implement iCalendar on their computers and sharing that information with others by way of the network and Internet. The reality has taken some time to catch up with this theory, but a variety of programs now are available that do implement parts of the iCalendar suite.
I should note that the entire iCalendar Project has been the victim of some bad and unlucky naming problems. The file in which data is stored and that can be used to interchange information is called vCalendar, just as the electronic business-card format is known as vCard. But many people and applications, including Sunbird, refer to the file format as iCalendar, even though the file identifies itself as vCalendar. As you can imagine, the term iCalendar has been shortened to iCal, which is especially unfortunate, given that Apple's Mac OS X operating system comes with a program called iCal that uses the vCalendar file format. Because the use of vCalendar to describe these files seems to have gone the way of the dodo, I simply use the word iCalendar to refer to both the file format and the overall standard.
Download and install the appropriate version of the Sunbird standalone calendar program; see Resources for the URL. If you're a bit more daring, you can install one of the nightly builds; I actually am using Sunbird as my primary calendaring application, so I have been using the official builds. If you prefer to have your calendar integrated into either Firefox or Thunderbird, go to the main download page and choose the appropriate extension and version that you would like to install. If you install an extension to Firefox or Thunderbird, you need to restart the host program before continuing.
Sunbird allows you to create two types of items, events and tasks. Events normally appear on the calendar itself and can include holidays and meetings. Tasks normally appear on the left side of the screen and indicate things that you should get done, with an optional starting and ending date. Sunbird changes the color of tasks according to how soon they need to be done; overdue tasks are in red, current ones are in blue and future ones are in green. Gray tasks are in the far-off future, and crossed-out ones—if you choose to display them—are completed tasks.
Both events and tasks can be repeating, meaning we can schedule a meeting for every Wednesday at 4 pm over the next ten weeks rather than entering ten individual events in the calendar. We can enter exceptions to such recurring events as needed, and we can set them to recur every few days, months or years, with “every few” being user-definable.
Editorial Advisory Panel
Thank you to our 2014 Editorial Advisors!
- Jeff Parent
- Brad Baillio
- Nick Baronian
- Steve Case
- Chadalavada Kalyana
- Caleb Cullen
- Keir Davis
- Michael Eager
- Nick Faltys
- Dennis Frey
- Philip Jacob
- Jay Kruizenga
- Steve Marquez
- Dave McAllister
- Craig Oda
- Mike Roberts
- Chris Stark
- Patrick Swartz
- David Lynch
- Alicia Gibb
- Thomas Quinlan
- Carson McDonald
- Kristen Shoemaker
- Charnell Luchich
- James Walker
- Victor Gregorio
- Hari Boukis
- Brian Conner
- David Lane