Wednesday, March 26, 2014

Doodle Yourself with a Google Drawing

I've been working with my students on writing a biography, and we will be transitioning into writing reflections. As a part of this work, I've asked them to create a self portrait using Google drawings. We will be using links to make the drawings interactive, then using them on a Google site.

As a part of the process, I've created a short video to describe how to create a cartoon version of yourself. This is a method that I experimented with and learned through trial-and-error. Apologies to graphic artists everywhere!

If you're interested in creating your own self portrait, post a comment and share your creation (if you dare). Don't worry if it looks horrendous when you're 90% done - it's supposed to. Just before you finish, you'll look like a clown that got into a brawl, but don't worry. Stick with it, and you might be surprised by what you end up with.

Good luck and, as always, enjoy!

Tuesday, March 18, 2014

Social Justice and the Digital Divide

As a technology enthusiast, I often lament over the high cost of the latest and greatest toys. That new smart phone? I want one. The next generation tool? Sign me up. The software that's the latest buzz? Gimme!

However, despite not using my financial resources to afford the latest tech, I can't say that I'm deprived. I own a lot of technology. Some would say I have an overabundance. I mean, does anyone really need to run three routers on their home network? Probably not, but I do.

Image: Madame Justice by
W4nderlust (via deviantART)
And here's why: I like to tinker with technology. I tell all my friends and family that if they've got a piece of technology that's old, broken, or outdated, that they should give it to me instead of throwing it out. I can resurrect technology and put it to use. At the very worst, I'll end up breaking something that's already broken or useless. So yeah, I do have a lot of technology, but most of it is old. Most of it cost me nothing, or very close to nothing. I can fix quite a lot of things, and I like to think I'm doing my part for the environment by extending a product's life cycle.

But what about those who aren't willing or able to fix something? Well, that's easy, right? Just buy new stuff. Things that are under warranty. That's what most people do, right?

Now think of people who struggle to put food on the table. 

Those who have to choose between an iPod or paying the rent. What are they supposed to do? Just go without? With the United Nations declaring that internet access is a fundamental human right, how can we justify the existence of the digital divide?

This leads me to consider the issue of social justice. I'm proud to say that I live in a society in which every citizen, no matter their income, has certain basic rights. The right to health care. The right to an income. The right to participate in government. We, as a society, place a premium on certain rights, to the point where we all agree to share the cost on behalf of those who can't otherwise afford it.

But what about technology? Is that a right? Do we value access to information? Sure, there are computers in public libraries, but is the process of signing up for a time slot at a nearby building to sit on a shared computer the same thing as carrying a record of the world's combined knowledge in your pocket? I would argue that no, it isn't. There is a portion of the population who are at a disadvantage in many areas of life. Access to information empowers the individual, and those people who are already at a disadvantage are getting left further behind.
The Digital Divide
From: 9th World Telecommunications/ICT Indicators Meeting

So how can we change this? 

I believe strongly and passionately that education is a vehicle for social change. We can change the way the world operates by teaching the citizens (and future citizens) that we value social justice and equality. We can narrow this gap. But we need to be the model for social justice. We need to put our money where our mouth is, so to speak, and show the world and the students that we're educating what we believe, not perpetuating the status quo.

And I don't believe we need to take away from the "haves" in order to provide for the "have-nots." What we need to do is to think of creative solutions. Look for unique ways to solve the problem. Access to technology can be an issue, so let's find technology that's unused or underused and change the way it's being implemented. How many schools have classroom computers that sit idle most of the time? How many out-of-date computers are there in people's basements? How many drawers hide a smart phone or iPod touch that's still functional or can be easily repaired?

We need to look for solutions in new places. 

One place that I believe we can find solutions is in other problems. E-waste can provide technology, while at the same time preventing or delaying its eventual destiny of sitting in a landfill. If we are the teachers of critical thinking and creative problem solving, then we need to be critical of our current social practice, and think creatively about how to solve the problems inherent in the way things are currently done.

So the next time you see an advertisement for the latest piece of tech, and you think "Oooh! I want it!" please consider how your behaviour affects society. I know that things I do aren't always in the best interest of those how are least fortunate. I like to believe that much of what I do will benefit humanity. I share my thoughts, ideas, and beliefs. I try to think critically about what I do, and how my actions reflect what I believe. I'm not perfect, but I'm aware of my faults and I'm working on changing them.

Are you?

Saturday, March 15, 2014

My First Script for Google Sites

After reading the fantastic book "Google Apps Script for Beginners," (read the review here), I decided to get my hands dirty and write a script to automate a task in Google Sites.

I've been getting things ready to have my students build a digital portfolio, using Google Sites. We're already using Google Drive for most of our work in English and Math, and I want them to create a digital record of what they've been doing, what they're proud of, and what they want to record.

One of the things I love about Google Drive is that you're always working on the latest version of a document. Changes are automatically saved. Updates are automatic. This is fantastic. No worrying about clicking on a save button.

But this leads to a conundrum with a digital portfolio: what if you want to document the learning process? Keeping a record of changes over time is easy for anyone with access to edit the document: you just look at the revision history. However, people who only have read access can't do this. In fact, if you want to publish a document, you have to make sure that you've shared it with the public. If you forget, when you look at your site, everything looks fine, but when anyone else wants to see it, the sharing settings won't let them see your work.

I thought of a way around this: using a file cabinet page to upload a version of the work that will serve as a snapshot of the learning. However, it can be a long process (relatively speaking) to download a pdf of your document then upload it as an attachment to your file cabinet page. This seemed like something that would be relatively simple to do with a script. It also happens to be one of my pet peeves about having a website: when I create something, I don't like being bothered with uploading it to my site.

So I sat down and started writing. Well, actually, the first thing I did was a search. I found some examples of publishing a folder to your site, which has been deprecated since you can now use a gadget to insert a folder directly into your site. But the bones of the script looked very similar to what I wanted to achieve. So I sat down and started writing. Here's what I came up with.
  1. Look at a folder specified by the user, and pull a list of all the documents contained in the folder (this is a particular application where I didn't want it to pull spreadsheets, presentations, folders, or any other items).
  2. For each item in the folder, check against the attachments already in the file cabinet page. If the file already exists, the script will skip attaching it.
  3. If the file does not exist, the script will create a pdf version of the document, and attach it to the page.
  4. It will star each item that has been successfully uploaded. This is for testing purposes, but I may implement functionality where if the document is already uploaded but is no longer starred, it will replace the attachment with a new copy.
I will set up a trigger to run the script once every night. This will keep attachments up to date on my site without any bother of uploading attachments. If you're interested in having a copy of the script, click on this link to generate a copy for yourself. You'll need to change the folder key and page URL variables at the top, and add a trigger to run the script when you want.

This is a very basic script that doesn't do much fancy stuff. I'm proud of what it does, and I'm happy that I was able to put it together without too much difficulty. If it sounds like something that interests you, please feel free to use it, modify it, and share it. I've included the full text of the script below, but only for the interest of my fellow geeks. If you're not sure about what any of that means, don't worry. If you want a hand setting up the script for yourself, let me know: I'm always happy to help out.


// publishFileCabinet Script written by James Petersen.
// Full description is available online at
// Published under the Creative Commons 4.0 Attribution - ShareAlike license.
// For more information, visit
// Use this script to automatically publish documents from a folder to a file cabinet page.
// Paste the folder key and the page URL into the variables below.
// If you want to automate the script, add a trigger by using the Resources - Current Project's Triggers
// menu option.

// Paste the folder key of the folder you'd like to pull files from into the line below.
var folder = '0B7uRH5XJTbFzY0s4UVMwdDZqYmM';

// Paste the URL of the file cabinet page into the line below.
var pageUrl = "";

// Modifying any of the code below may break the script. Do so at your own risk.
function publishChecklists() {
  var files = DocsList.getFolderById(folder).getFilesByType("DOCUMENT");
  var page = SitesApp.getPageByUrl(pageUrl);
  var attachments = page.getAttachments();

  for (i in files) {
    Logger.log(i); // debugging console output
    var exists = false; 
    for (j in attachments) {
         if ((files[i].getName() + ".pdf") == attachments[j].getTitle()) {
           if (files[i].isStarred()){
             Logger.log(files[i].getName() + " is already attached.");
             exists = true;
           } else {
             Logger.log(attachments[j].getTitle() + " has been successfully deleted.");
    if (!exists){
       //page.addWebAttachment(files[i].getName(), '', files[i].getUrl());
       page.addHostedAttachment((files[i]), files[i].getName());
       Logger.log(files[i].getName() + " attached to the File Cabinet page.");
  Logger.log("Script Finished");

Wednesday, March 12, 2014

Review: Google Apps Script for Beginners

I was recently offered a copy of the new book "Google Apps Script for Beginners" for review. I was thrilled with the opportunity, as one of my professional goals this year is to begin writing code again, not just using it or copying/pasting it without comprehension.

The author has done a good job of covering the basic use of Apps Script, providing examples of how it can be implemented to automate certain tasks. It covers the use of Apps Scripts in documents, spreadsheets, forms, and sites, then continues into running an Apps script as a web app. I found that since the author comes from a teaching background, I was able to follow the examples and the motivation behind them. Since I can identify with the use-cases presented, I was able to delve into the code the author has included to understand the workflow.

I found that the book was a good introduction to Google Apps Script. It is by no means an exhaustive reference manual. Rather, it serves as a good starting point, allowing the reader to gain an understanding of the overall use and implementation of Apps Script. The author has included links to many fantastic resources online which go into more depth and detail.

This is very important, as I found out on March 11th, when Google announced that scripts would now be available through a new add-ons menu in Docs and Sheets. There are some significant changes to the ways scripts are built (notably that Google wants us to use the HTML service rather than the UiApp), but since this serves as an overview with links to documentation online, it will likely stay relevant for a long time.

Tuesday, March 4, 2014

Getting "those" stories

"So, tell me about that teacher you had. You know the one. You still remember them all these years later. Why?"

Image: Wikimedia Commons
One of the things I love to do as an educator is to ask people to tell me about that one teacher they had. I've never had anyone ask me what I mean, or have them say they didn't have any story to share.

I've discovered that every person, without exception, has a story about a teacher they remember. It could be because the teacher saw something in that person, because the teacher did something exceptional, or because the teacher was simply just terrible. The funny thing is that everyone's got a story to share.

So why do I ask? What's the point in getting people to share? I'm looking for the best ideas, so that I can shamelessly steal them. I'm looking for what inspired people. I'm trying to find out what made those teachers exceptional.

And there's no universal formula. Exceptional means something different to every person with whom I've spoken. Some felt that their teacher was amazing because he saw some hidden potential. Others have told me that they felt that their teachers were unique because they had a great sense of humour. Still more have shared that their exceptional teacher connected with them as a person, not just as a student.

And then there are the exceptionally bad teachers. The ones who yelled. The ones who showed no understanding of students' lives outside the classroom. The ones who never smiled. The ones who had terrible coffee breath.

What have I learned after doing this "research?"

I've discovered something that underlies every one of these stories. Unique teachers don't follow a set formula. There's no secret that I can follow and become the uber-teacher I want to be. Every individual has something they appreciate, but there's such a variety that I believe it is impossible to be everything to everyone. I tend to have high expectations of myself, so I try to mitigate them by thinking of the following:

  • I can't be everything to everyone. However, that doesn't mean I shouldn't try to reach each and every one of my students.
  • There will be some students I just can't reach. I will try, but I know that failure is inevitable.
  • There will be some students I can reach, and I'm going to try as hard as possible to reach them.
  • Every student is a unique individual. I need to remember to appreciate every student's positive characteristics. I may have to look a little harder sometimes in order to find them, but it's always possible.
Finally, I have one guiding principle that I try to carry with me every day.

I take my job very seriously, but I try not to take myself too seriously.

This may seem odd, but I believe there's a difference. I will work hard, not because I'm obligated, but because I'm passionate. I care deeply about what I do. But I'll never shy away from laughing at myself. I can be a serious teacher, but a light-hearted one at the same time. I will try new things, and occasionally fail gloriously, but I will always enjoy doing what I do.