Google Calendar


iGoogleBar is my latest Firefox extension that adds Google Apps favicons to the Google Apps Bar, using them as triggers for the Apps’ respective iGoogle Gadgets. As a courtesy to some of

100 mg viagra price
viagra, cialis, clomid, tramadol, levitra
buy viagra
buy cialis
buy tramadol
buy levitra
buy clomid
buy and purchase viagra online
buy australian viagra
buy buy cheap medved viagra
buy buy cheap viagra
buy buy discount viagra viagra viagra
buy buy free viagra viagra viagra
buy buy medved viagra viagra
buy buy online sale viagra viagra
buy buy online viagra viagra
buy buy sale viagra viagra
buy buying sale viagra
buy cailis viagra singapore
buy can reply viagra
buy canada in viagra
buy canada viagra
buy cheao cgeap kamagra uk viagra
buy cheap cheap kamagra uk viagra
buy cheap cialis generic levitra viagra
buy cheap deal online viagra viagra
buy cheap deal pill viagra
buy cheap deal viagra viagra viagra
buy cheap discount pill viagra viagra
buy cheap free online viagra viagra
buy cheap generic online viagra
buy cheap generic viagra
buy cheap generic viagra online
buy cheap online prescription viagra
buy cheap online uk viagra
buy cheap online viagra
buy cheap online viagra viagra
buy cheap p viagra
buy cheap phentermine moreover order viagra
buy cheap purchase uk viagra
buy cheap sale viagra
buy cheap site viagra
buy cheap uk viagra
buy cheap viagra
buy cheap viagra 32
buy cheap viagra cheap viagra online
buy cheap viagra in uk
my colleagues, I included their projects in the bar so they’re easier to get to (or just preview) from Gmail and Calendar.

I built this extension using Chickenfoot, which hit version 1.0 recently. Part of that release included improvements to the extension-packaging tool, which made it much easier for me to convert my iGoogleBar prototype into a full-fledged Firefox extension!

The iGoogleBar page acknowledges that there are some missing features from the extension, so I put the source code in the Chickenfoot Scripts Wiki. That means, if you’d like to see a new feature added, please go and update the Wiki instead of just nagging me :) If I like your patch, then I’ll make a new release. And if I don’t like your patch, then you can at least install your modified version of iGoogleBar as a trigger in Chickenfoot.

Will this method of software development actually work? Probably not, but it should be fun to try!

Because I haven’t posted in awhile, you might think that I haven’t been hacking, but I assure you that is not the case! Between the Facebook Platform and the iPhone, there are many new opportunities to explore lately. Nevertheless, my most recent (published) work is still related to my favorite product!

Last week, I posted about the introduction of Calendar Gadgets on the Google Code Blog. Although most people are probably most excited about the new horoscope and sudoku calendars, my biggest contribution is my updated xkcd calendar:

xkcd with full tooltip

Normally, if you looked at Friday’s xkcd comic in Firefox and moused over it, you would see Could be worse. The last guy in that situation fell for one of the transient trumpeting a… because Firefox 2 clips the title attribute of the image at 80 characters. After great debate on the subject, the 80-character limit is going to be fixed in Firefox 3, but until then, I created a Google Gadget that displays an image with its full tooltip (you can optionally hyperlink your image as well) that I use to host the content of the xkcd calendar. (This was inspired by Mihai Parparita who fixed this for Google Reader.)

Also, since school is back in session, Mike Lambert and I updated mitcalendars.com with links to all of the Fall 2007 MIT course schedules hosted on wikicalendars.com. Sadly, wikicalendars.com has not taken off as we had hoped (it does get a lot of spam, though!), but if we ever have time to make it as easy to add events to wikicalendars.com as it is to add events to Google Calendar, then I think we’ll do a lot better.

Oh! And unfortunately I missed Google Developer Day this year because I was too busy working on the Google Calendar gallery, so I didn’t have a chance to comment on mapplets, which are really cool! With a few PHP includes, I was able to turn CalMap into a mapplet. I’m sure you can do the same with your own Maps mashups, so give it a try!

Some of you have probably seen the experiment on google.com that brings Google apps closer to the home page. But if you find that they still aren’t close enough for you, then I have a new gadget for iGoogle (which is a much better name than Google Personalized Homepage) that might help you out. My gadget is called Your Page Here because it lets you use any page you like as the content for one of your iGoogle tabs:

Your Page Here screenshot

Note that if you add this gadget to a tab, it eclipses all of the other gadgets on the page, so you probably want to create a new tab for Your Page Here before installing it. Once you have it on your page, the settings are pretty simple:

Your Page Here settings screenshot

All you have to do is enter a URL and you’re ready to go. Come on! Try it for yourself: Add to Google

And if Calendar isn’t your thing, then I recommend trying out Google Reader (http://reader.google.com/) with Your Page Here.

Thanks to Chris McAndrew for suggesting this hack to iGoogle.

Not too long ago, I imported MLB schedule data into WikiCalendars.com. This made it simple to see when the Mets were playing next, but not where they would be playing next, so I decided to create CalMap: a mashup that takes a calendar feed and plots the locations of the events on a map:

CalMap screenshot

Currently, CalMap only plots the locations it knows, which are listed in a JSON data file. I also use this to assign marker colors so baseball teams in the same division will have the same color — this makes the interleague games easy to pick out on the map!

If you inspect the default URL for CalMap, you will see that the URL to the calendar feed that you want to load is simply passed as a GET parameter:

http://calmap.bolinfest.com/?url=http://www.wikicalendars.com/wiki/MLB_2007_nym_protected

For WikiCalendars, you can also splice a number of calendars together and plot them as one calendar. For example, you can combine the calendars for all of the NL East teams and display them as one on CalMap:

http://calmap.bolinfest.com/?url=http://www.wikicalendars.com/splice.php?cal=MLB_2007_nym_protected,MLB_2007_phi_protected,MLB_2007_atl_protected,MLB_2007_fla_protected,MLB_2007_was_protected

The supplied calendar feed needs to follow the GData JSON conventions, so it needs to honor alt=json-in-script, start-min, start-max, etc. This means that, yes, CalMap may execute arbitrary JavaScript from foreign sites, which is why I put it on its own subdomain of bolinfest.com where there are no cookies to steal.

Also, so that my demo does not get trashed, I created copies of the original MLB calendars and made versions of them that only I can edit so that the CalMap home page does not become spammy. I have written a Chickenfoot script to update these new versions of the calendars with data from mlb.com, so if you added one of the old MLB calendars to your Google Calendar account, I recommend replacing it with one from the list of protected calendars as the new calendars will be updated fairly frequently with legitimate data. (You can also subscribe to one of my “protected” MLB calendars by following the Subscribe link at the bottom of CalMap.)

The only thing left to do is to figure out how to run Chickenfoot reliably as a cronjob…

I wrote a Chickenfoot script to generate the 2007 Major League Baseball schedules from mlb.com. Instead of putting the schedules directly into Google Calendar, I posted them on wikicalendars.com. Just visit the site, click on your favorite team (let’s go Mets!), and click on the “Google Calendar” button above the calendar preview to add the schedule to your Calendar account (or click the iCal icon to add it to Apple iCal).

Subscribe to New York Mets 2007 Schedule from wikicalendars.com

But wait, “What is wikicalendars.com?” you wonder. I realized that I forgot to post about it before, so I should explain. Last fall, I wrote about how I created mitcalendars.com with Mike Lambert to make it easy to add MIT course schedules to Google Calendar. After getting feedback from students, we realized that there were two major issues with our site:

  • Students could not update or correct the calendars we had auto-generated.
  • We had to guess which permutations of calendars for a course we should generate: if there are 2 lecture choices , 8 recitation choices, and 3 lab choices, should we generate 48 calendars for the course? How do we present all 48 options a to user?

To address the first issue, we decided to store the calendar data in a wiki so that anyone on the web could update it. This way, if a class were rescheduled, or if a final exam were added, anyone from the class could adjust the course’s calendar accordingly. Obviously spam would be a concern, so we decided to go with the ever-popular MediaWiki, since we assumed that Wikipedia has more experience with spam than anyone, so they likely have the best tools to combat it. Also, because it was open-source, it was easy for Mike and I to hack it up as we needed.

To address the second issue, we added a feature called “calendar splice” that enables you to combine multiple calendars from wikicalendars.com to dynamically create a new calendar. This way, we could create a calendar for each lecture and recitation offering for a course, but leave it up to the students to combine a lecture and recitation into one calendar. Unfortunately, this is not obvious from the wikicalendars.com user interface yet, but the feature is there. (Incidentally, we offer a number of output formats for calendar data, facilitating the use of wikicalendar data in mashups, etc.)

Because we wanted to make it as easy as possible to edit calendar data, we decided that we needed to create our own wiki-language for the site. Here’s a snippet from the NY Mets 2007 calendar:

__CALENDAR__
CalendarName: New York Mets 2007 MLB Schedule
CalendarTimezone: America/New_York
CalendarURL: http://mlb.mlb.com/schedule/sortable.jsp?c_id=nym
	
DefaultEventDuration: 3h
	
EventWhen: 4/1/2007 8:05pm
EventWhat: Mets vs. Cardinals (Away)
EventWhere: Away

Unfortunately, unlike WikiMedia’s wiki-language, our format strongly favors English speakers — especially those who use American date and time formats. Though we were not thrilled with this decision, we felt it was acceptable for our first version of the site. We tried to focus on simplicity, and I think many will agree that 4/1/2007 8:05pm is much simpler for the average person to work with than 200704012005/200704012305. The calendar syntax is documented in detail on the web site.

So given all of this, what makes a good wikicalendar? Arguably, any calendar whose events come from a community of people rather than from one well-defined leader. For example, I started a calendar for release dates of Wii games which would ideally take contributions from those who troll gaming rumor boards and web sites. (I would love to see people start contributing!) I also created a calendar to track when NYC Marathon qualifier races are, as there are many of us who aren’t interested in the non-qualifier races. I try to keep the calendar fairly up-to-date myself, but if I fall behind, hopefully another calendar subscriber will notice and pick up the slack!

Which brings me to why I decided to store the MLB calendars on wikicalendars.com: though the schedule data is correct now, the baseball season is subject to rain outs and reschedulings, and I can’t stay on top of all of those changes, but Time’s Person of the Year can! This is, in many ways, an experiment. Will anyone keep these calendars up to date? Will they lie dormant and become inaccurate, or even worse, become littered with spam? I guess we’ll see!

Recently, my Web Content Wizard for Google Calendar (which I recently blogged about) was listed as a featured project on Google Code. But what is even more exciting is the Colorado Avalanche calendar that Rob Moore built with the web content wizard! It looks hot and it is a great example of web content can be used in Google Calendar — great work, Rob!

With a little bit of Python, I was able to create a web content calendar for the web comic xkcd.com. (Feel free to view the code and use it however you wish – I would love to see more calendars with web content!)

Click to subscribe in: 

Fueled by my curiosity in learning about AuthSub and my desire to promote web content events, I created a web content wizard for Google Calendar. I believe this will dramatically lower the barrier to entry for creating web content events. To see a screenshot of the wizard in action, check out its Help link, or if you want more information about what prompted me to do this, read the About section.

In the process of creating the wizard, I learned quite a bit about web applications, web security, and the state of free JavaScript datepickers. I plan to write up what I have learned in the weeks to come, but first I need to allocate some of my time online for Christmas shopping!

Honestly, there’s a lot more I could post about this wizard today, but I believe everything is already there on the site, and I hate repeating myself, so like we [apparently] say back home in New Jersey: come and see for yourself.