Fix a Typo, Go to Rails

Posted on timeNovember 24th, 2010 by userRay Baxter in catRuby/Rails    flagNo Comments

Look Mom, I’ve made the smallest possible contribution to Rails.

Or, to put it another way.

Happy Thanksgiving!


Embedding Private and Shared Calendars – Google Apps for Your Domain

Posted on timeJune 22nd, 2009 by userRay Baxter in catCalendar    flagNo Comments

This embedded calendar links to 4 calendars, 1 private, 1 shared, 1 public and 1 public (free/busy only).


Embedding Private and Shared Google Calendars

Posted on timeJune 21st, 2009 by userRay Baxter in catCalendar    flagNo Comments

Here is an embedded calendar with four calendars. There is a public calendar, a public calendar sharing only free busy information, a private calendar and a shared calendar. You can only see the private calendar if you are logged in as, you can only see the shared calendar if I have invited you to see it and you are logged in with that address and anyone can see the public calendar and the public free busy information, but on the Free Busy calendar you will only see times when calendar maven is busy.


Restyle Google Calendar

Posted on timeApril 3rd, 2009 by userRay Baxter in catGCalendar    flagNo Comments

Single Purpose Web Dev Browser

Posted on timeFebruary 7th, 2009 by userRay Baxter in catCalendar    flag(2) Comments

I’m writing more Javascript and AJAX these days, so not coincidentally, I am also spending more time:

  • Inspecting the DOM of pages.
  • Checking the validity of CSS and XHTML.
  • Checking for Javascript syntax errors.
  • Breakpointing Javascript.
  • Viewing the rendered source of pages.

On top of that, there are a number of other tasks that I do frequently as I develop for the web:

  • Measuring page load time.
  • Snoop on, and alter, http requests and responses.
  • Clear and/or disable the cache.
  • Clear all or selected cookies.
  • Spoof a site as a different browser.

For all of these tasks, Firefox is the browser for me. There are useful tools for Safari, Internet Explorer and, I assume, Google Chrome, but Firefox with the Firebug, DOM Inspector, Live HTTP Headers, Tamper Data, User Agent Switcher, View Source Chart, Web Developer and YSlow plugins is the set of tools that I am the most comfortable using for these tasks.

The problem usually is that I don’t really want all of these extensions around when I am focused on reading or casually surfing the web. This morning, it occurred to me that I could use the techniques that I used in creating Firefoxen to create a special purpose web application development browser.

A few minutes later:

WebFox in action!

Here is what I did.

# Make a copy of Firefox
cp -pr /Applications/ /Applications/
# Create a new profile, I called mine WebFox -P
# I used my existing profile as a baseline, you might not want to
cd ~/Library/Application\ Support/Firefox/Profiles/
rm -fr 40of1s4x.WebFox/
cp -pr u5qu37ob.default 40of1s4x.WebFox
# Change the Bundle Name to "WebFox"
open /Applications/ 
# Change launch-ff command to (no quotes) 
# "/Applications/ -P WebFox"
vi /Applications/ 
# CFBundleName is WebFox for display in the tool bar
# You probably need the Developer Tools installed for this to work
open /Applications/

Here’s the gist, if you roll that way.

Once you’ve done all that, then you can WebFox (open -a WebFox, or clicking) and modify the extensions to suit your way of working.

That’s it. How it helps someone.


The iCalendar validation project « Jon Udell

Posted on timeFebruary 7th, 2009 by userRay Baxter in catCalendar, iCalendar    flagNo Comments

Jon Udell is pushing a project for the validation of iCalendar data, The iCalendar validation project .


Running Multiple Versions of Firefox

Posted on timeNovember 10th, 2008 by userRay Baxter in catVisual Elements    flag(2) Comments

A question:

“I want to create a custom launcher for Firefox 2 and Firefox 3 with different profiles. Perhaps the real question is how do we create a custom version of a Mac application launcher, passing in the arguments we need?”

… without having to invoke it on the command line every time.

Mac OS X is assumed.

Firefoxen is an answer in code. It’s a script to automatically configure multiple installations of Firefox so that they open with different profiles. The script encapsulates what I needed to do to figure out how to solve this problem.

The steps are:

  1. Modify each application’s Info.plist CFBundleExecutable to point to a shell script inside the application’s bundle
  2. Create the appropriate shell script that runs ./firefox-bin -P profile-name in each bundle.
  3. Reregister the application’s bundle with launchservices so that the changes are picked up. Normally they are cached.

Only the last of these took too longer to figure out. You can trigger an update of launchservices by renaming the application bundle ( =>, but if you rename it back it seems to revert to the previous db entry. (Cached by application name?)

Unfortunately, you can’t combine 1 and 2 either. I tried multiple permutations on changing the CFBundleExecutable parameter in each bundle from the default firefox-bin to something like firefox-bin -P versioned-profile but I couldn’t make it work with any amount of quoting.

Git it here:

Here’s a screen grab:

Running 4 versions of Firefox.

Running 4 versions of Firefox.


Adding Events to Secondary Google Calendars in Python

Posted on timeSeptember 28th, 2008 by userRay Baxter in catCalendar, GCalendar, GData, SecondaryCalendarEvents    flag(4) Comments

Before writing, I assumed that I would need to refer any reader to the introductory post of this series on adding events to secondary calendars. Depending on your skill level and experience that may still be true, and it definitely is true if you want to understand what you are doing, but if you just want to get it done, you can probably muddle through with the following instructions.

Here’s the really short story: when you call the insertEvent method, you pass the event that you are creating and optionally, the edit url of the calendar where you want the event to appear. So, to create an event on a secondary calendar, just pass the edit link of the calendar. (You can get the edit link of a calendar in python by calling GetEditLink().href on it.)

For the longer story, I’ll assume that you have installed Python, ElementTree and the Google Data Python Library, following Google’s instructions.

Run through the tests and the sample code. When I ran the it failed with this stack trace:

Traceback (most recent call last):
  File "./samples/calendar/", line 577, in <module>
  File "./samples/calendar/", line 574, in main
  File "./samples/calendar/", line 498, in Run
  File "./samples/calendar/", line 99, in _PrintAllEventsOnDefaultCalendar
    print '\t\t\t%s' % (a_participant.attendee_status.value,)
AttributeError: 'NoneType' object has no attribute 'value'

Since all I wanted to do was to make this sample code run for the single case of adding an event to a secondary calendar, I commented out line 99, but the code should be checking that there is an attendee status before writing its value. After that change the sample code ran fine for me.

To insert a single event in a secondary calendar, I copied to Then I commented out everything in the Run method except this line:

    see = self._InsertSingleEvent()

and made the following change,

new_event = self.cal_client.InsertEvent(event, 

This instructs the InsertEvent method to create the event in my secondary calendar by POSTing to the url of my “Secondary Calendar” (id instead of my primary calendar (id default). I found the calendar ID on the calendar settings page of the calendar, but as I said above, if you have accessed a calendar programatically, you can just call GetEditLink().href on it to get the proper link.

You can see that a “One Time Tennis with Beth” event was inserted beginning at the moment I did the insert and lasting for one hour, as described in the sample code.

[Update 2008-11-14: You can’t see this if you are using Safari. In general embedded calendar’s show in Safari, but there is something about this particular calendar that causes it not to display. Google does a number of separate calls and redirects to obtain the correct data for this calendar and it looks like one of the calls returns data that doesn’t correspond to the mime-types. The point that I was trying to communicate with this illustration was that the event did in fact appear and that it was on the secondary calendar.]


Q & A – Sharing Calendars

Posted on timeSeptember 9th, 2008 by userRay Baxter in catCalendar, GCalendar, Visual Elements    flagNo Comments

This is a little out of my normal area here, but I received this question in my email and I figured I’d answer it here for everyone’s future reference. Maybe I’ll become the next “Ask Dave“?

On Sep 9, 2008, at 9:05 AM, nadine wrote:
Dear Ray,

I do hope you don’t mind my email you… I am desperate!!!

I work for a gentleman who in turn works for 6 different companies. Because his calendar entries need to be colour coded I have obviously set up a calendar representing each different company which shows a different colour. This works fine between he and I.

However, he would like to share his calendar with a number of colleagues. Do I firstly have to ask each of his colleagues to open a Google account and then do I send an invite to them? However, I think this invites them only to his one calendar and not to all the associated company calendars?
Read the rest of this entry »


Adding Events to Secondary Google Calendars

Posted on timeSeptember 1st, 2008 by userRay Baxter in catCalendar, GCalendar, GData, SecondaryCalendarEvents    flag(5) Comments

The most frequently asked question posed in the Google Calendar Date API Group is, “How do I add events to a secondary calendar?”

In this series of posts, I am going to attempt to provide an answer for using every language that has a client library. I discuss the “official” client libraries for Python, Php, .NET, Java and Javascript as well as the slightly less official Objective-C library and some of the attempts to create Ruby library for interacting with Google Calendar and GData. If there are other client libraries, just let me know in the comments and I’ll add instructions here, or link to them elsewhere as I have time, interest and understanding.

I start with describing how to POST XML to a calendar url. This is “The Protocol”. You should read this information about the protocol, even if you plan to use a client library. Each client library is using this protocol under the covers, so understanding what is happening will help you better use your client library. In addition, I’ll only explain some terms in this section, so you’ll need to read it to understand what I am talking about.

All information in these posts comes from the Google Developer’s Guides, the Client Library Documentation, the source code for the client library and my own exploration and testing. I’ll provide links to these resources in the text as appropriate. For simplicity’s sake, I only cover creating single-occurrence events for users that have properly authenticated using client login. These cases should be sufficient for illustrating how to add to secondary calendars, but 1) I’m not aware of any differences in creating single-occurrence versus quickadd or recurrent events on secondary calendars in any of the client libraries and 2) I haven’t used AuthSub.

I have personally tested all of the code that I present here, unless otherwise noted. That means that I was able to create an event on a calendar using that code. In all cases, I am adding events to my Secondary Calendar which is public, so have a look. I’ll be trying to add an event that occurs at the time when the relevant article is posted.

Here is a table of contents of the language-specific treatments. I’ll update the links as I complete the sections.

Python – Complete September 29, 2008
Objective C

Read the rest of this entry »



Recent Posts


Relevant Links


Date and Time



iCalendar Tools

Online Calendars




Zend GData