The Mystery of the Unsharable Calendar

I was working with my good buddy Rotimi on a Google Calendar issue tonight. His school (like mine) uses a Google Calendar for campus events with an iframe used to display events on the school website’s calendar page.

Unfortunately, something changed so that events only showed “busy” with  no descriptions or details when viewed by anyone who wasn’t logged in to a school-managed Google account. Rotimi logged into the calendar owner’s account but he was not able to change the sharing settings to show all event details to the public as that option was greyed out and unavailable:

I thought that there may have been a change in the Google Admin Control Panel for the account’s OU, but that turned out not to be the case. Rotimi went back to the user account that owned the calendar and looked more closely at the list of people in the “Share with specific people” section. Interestingly, two of those who were able to make changes and manage sharing were domain admins. When Rotimi accessed the sharing page from his Google Administrator account (rather than the calendar owner’s account) he was able to access the “See all event details” option in the calendar sharing settings. As soon as he saved this setting, all event details were once again showing on the website even if the viewer was not logged into a school Google account.

We think that one of the domain admins may have inadvertently  changed the sharing settings for this calendar to hide event details from viewers who are not logged into a school account. Apparently, if a domain administrator changes the sharing settings of an individual user’s calendar, it overrides the sharing settings available to the calendar’s owner so that he/she can no longer share it more openly than what the admin user set. In other words, it looks as though if an admin changes a user’s calendar sharing setting, the user can make the sharing more restrictive, but not more open than the setting made by the admin.

Ripping DRM DVDs on MacOS with libdvdcss and Handbrake

Many educational materials producers use DVDs (12cm flat disks with a mirror-like surface on one side, a digital storage media popular in the 1990s) to distribute materials to teachers. To assist our modern staff update their media resources, we secured some drives to access content on DVDs . Unfortunately, media producers, in a misguided attempt to be pains in the neck, used a tool called DRM to increase the effort required to convert the media content to a useable format. The following is a tutorial on how we convert outdated DRM media into a useable format. The key is to install the libdvdcss library. To get there, takes a little work, but the easiest way is to install xcode tools and  Homebrew (helpful for installing lots of different tools) which makes installing libdvdcss and Hombrew easy.

  1. Install xcode tools (this may take a while):
    sudo xcode-select --install
    sudo xcodebuild -license accept
  2. Install Homebrew:
    /usr/bin/ruby -e "$(curl -fsSL"
  3. Install libdvdcss:
    brew install libdvdcss
  4. Install Handbrake:
    /usr/bin/ruby -e "$(curl -fsSL"
  5. Install libdvdcss:
    brew install handbrake

Now, you should be able to fire up Handbrake and rip your content to your computer. Handbrake tutorials are plentiful on the Interwebs if you need more support with ripping DVDs.

Bulk Editing Google Docs with a Script

We used Google Docs for elementary progress reports. A spreadsheet and Autocrat let me create all the files and even drop them into folders by homeroom class. But that’s not what this is about.

After teachers started entering grades, the principal noticed that the grading key was missing some information. The easy fix would have been to recreate the docs and have the teachers start over. But this would have created extra work for teachers on one of their least enjoyable tasks.

A quick Google search led to a script that would allow me to edit the documents en masse. Not surprisingly, the starter script came to me via Amit at It takes the folder path containing the docs to be edited, the “search” text and the “replace” text. Then it goes through all the docs in the folder, makes a backup and then does the search/replace in each doc.

Amit’s script is effective but limited to a basic find/replace in the body text of Google Docs in one folder.  I expanded it to allow formatting text in addition to find/replace in Google Doc headers, bodies, and footers across multiple folders. You can find my script here.

Just as I expanded Amit’s script, when you’re ready to expand mine, visit the Class Text section of Google Apps Script tutorials for more options.