Monday, April 8, 2013

installing Red5 in Ubuntu from the command line

First install the requirements for Red5:

sudo apt-get install java-package openjdk-7-jre openjdk-7-jdk ant subversion

Next download and untar Red5:

tar xvfz red5-1.0.0.tar.gz

Rename the folder:

mv red5-1.0.0 red5

And then run Red5:

cd red5
sh red5.sh

After scrolling through a lot of verbose information about the startup of Red5, you'll know it's running when you see the line that ends with Installer service created.


If you're browsing from the computer that it's installed on, you can see if the Red5 server is running by going to http://localhost:5080 .

Monday, January 28, 2013

Google script to email form data

I helped someone set up a Google Form with email notifications the other day. This morning they asked if they could be emailed the submitted data, rather than just a link to the spreadsheet. Since there's only one question on the form, that's an easy script:


function onSubmit(e) {
  var timestamp = e.values[0];
  var question1 = e.values[1];
  var address = "firstaddress@example.com, anotheraddress@example.com";
  var subject = "Feedback form submitted";
  var body = "Someone submitted the form at " + timestamp + " and said " + question1;
  MailApp.sendEmail(address, subject, body);
}


This script will send an email to the address(es) in quotes after the var address = . The body of the email will contain the string that is in quotes after var body =  , which includes the timestamp (from column A of the spreadsheet) and what the user submitted in the form (the contents of column B).

To get this to work for you, paste the above code into a new blank script that's associated with a form you've created, and then set up a trigger that runs the function onSubmit(e) when the form is submitted.

To set up the trigger, follow the instructions from this page:


  1. Open or a create a new form, then go to the results spreadsheet of that form.
  2. Click the Unsaved Spreadsheet dialog box and change the name.
  3. Choose Tools > Script Editor and write the function you want to run.
  4. Choose Resources > Current script's triggers. You see a panel with the message No triggers set up. Click here to add one now.
  5. Click the link.
  6. Under Run, select the function you want executed by the trigger.
  7. Under Events, select From Spreadsheet.
  8. From the next drop-down list, select On form submit.
  9. Click Save.
Of course if you have more than one question in your form, you'll need a variable for each of them (e.g. var question2 = e.values[2];) and you'll need to call those variables in the var body =  statement.

Let me know if this works for you.

Thursday, January 24, 2013

automatically adding column data to google form submissions with a script


I've often come across the issue of wanting to manipulate data that has been submitted with a Google Spreadsheets Form. For example, automatically marking and totaling formative quizzes where students submit their answers in a Google Form.

Unfortunately when a user submits a form, a new row with those data is inserted on the spreadsheet. This means any formulas that you've manually added to the Spreadsheet will be above or below that row.

To solve this issue, I wrote a Script that copies (to that inserted row) the contents of the columns you've added in the first row.


function addFormula() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var startRow = 2;
  var startColumn = 8;
  var numberRows = 1;
  var numberColumns = 15;
  var lastRow = sheet.getLastRow();
  var sourceRange = sheet.getRange(startRow, startColumn, numberRows, numberColumns);
  var destinationRange = sheet.getRange(lastRow, startColumn, numberRows, numberColumns);
  sourceRange.copyTo(destinationRange);
};


The meanings of the variables are:
sheet is a shortcut so we don't have to keep typing SpreadsheetApp.getActiveSheet()
startRow is the row number that's the source of your formula that you want to copy
startColumn is the column number where your source formula starts
numberRows should usually be 1, it's the number of rows that you would like to copy each time
numberColumns is the number of columns that contain your source formula
lastRow is a shortcut so we don't have to type sheet.getLastRow() when we want to use it
sourceRange collects together the information to tell copyTo where to get the data
destinationRange collects together the the information to tell copyTo where to put it


If you prefer, this could also be done in a single line without all of the variable declarations:


function addFormula() {SpreadsheetApp.getActiveSheet().getRange(2, 8, 1, 15).copyTo(SpreadsheetApp.getActiveSheet().getRange(SpreadsheetApp.getActiveSheet().getLastRow(), 8, 1, 15))};


To add this script to your spreadsheet of data from a Google Form
  1. open the spreadsheet and under the Tools menu choose Script editor...
  2. under "Create script for" click Spreadsheet
  3. delete everything in the Code.gs pane and replace it with the script from this blog post
  4. if necessary, change the numbers for the variables to what they should be for your spreadsheet
  5. under the File menu click Save
  6. under the Resources menu click Current script's triggers...
  7. if you haven't already named your project, do so now in the box that comes up
  8. click No triggers set up. Click here to add one now.
  9. in the third drop-down list, select On form submit
  10. click the Save button
And you're done. The script will run whenever a user submits the form, and it will copy the formulas that you've set up on the first line of submitted data. Leave a comment below if this works for you or if you have any questions.

Monday, August 20, 2012

presenting at Destination Innovation 2012

Today I'm presenting at the Destination Innovation 2012 conference at the Banff Centre on "Makers and the DIY Revolution".

If you want to follow along with the conference, the Twitter hash tag is #Dest_2012.

Wednesday, June 27, 2012

ISTE12 Conference Closing Keynote

The closing keynote was by Dr. Willie Smits from DeforestACTION together with Liza Heavener and  Chris Gauthier about "global collaborative projects with, for, and by students around the world". Dr. Smits talked about some of the projects that they've been involved in, and some of the work of the foundation.


It wasn't particularly technology-focused, but it was somewhat interesting and applicable to education. It was good to hear about some of the things they are doing, and the tool Earthwatchers that crowdsources students to analyse satellite photos and watch for logging and other related activities to make a difference in the world.


There were many comments on Twitter that this should have been the opening keynote rather than the closing one. Unfortunately, as is often the case, many people had left the conference by the time the keynote started. I suppose the advantage was that there was more seating space and the Wi-Fi worked much better than at other keynote events this week.

A Balance Between Consuming and Sharing

As I've tried to blog about my experiences here at the ISTE conference, I've been forced to think about the balance between gathering or experiencing and making things public for others. It takes time and some effort to digest and to sit and write about what I'm seeing, hearing, and learning.

During this conference I've occasionally found myself writing about one topic while attending a session on something completely different. This has perhaps been detrimental in that I've probably missed some things when I've not been fully present. Task switching is a skill that I'm still working on developing futher.

Over all I think this process been helpful for me, though, to summarize things to help clarify my own thinking.


I'd certainly recommend blogging in general as a way to communicate ideas and share back what you've received. However I think blogging is almost essential when attending a conference that many people are unable to be at, or one as large as this with more sessions than one person could possibly attend.


As the conference winds down, I need to go back over my notes and see what hasn't made it into blog posts or Twitter posts to make sure that I'm sharing as much as I can. I've also realized that this is not just about sharing with others, but also sharing with the future me when I look back at these posts in September.

Meeting People at the ISTE Conference

I've been meeting a lot of great people here, and of course spending time with people that I already know. It's interesting, though, to see the differences in "famous" people here at the ISTE conference. Keynote speakers from other conferences, and even authors who's books are being sold here, are often walking around as attendees. I passed Marc Prensky, from the keynote panel, wearing a conference lanyard and walking with a couple of other attendees. I resisted the urge to ask if I could get a picture with him. I also sat and chatted for a few minutes with Dean Shareski, a past keynote speaker at the ATLE conference, and Steve Dembo, an upcoming keynote speaker at the ATLE conference. On the street I passed Scott Kinney, a former ATLE keynote speaker. I've also seen posts on Twitter by David Warlick, who will be the keynote speaker at our division professional development day, and I've also seen Gary Stager around.


On the other hand, Dr. Mayim Bialik (a mainstream celebrity) was much more guarded. Her time was protected and proscribed, and only certain people were able to get a photo taken with her. Don't get me wrong, she came across as very friendly in the keynote panel and during the session she helped present, but I'm sure if she would have been stuck talking to a thousand people if she hadn't been sheltered.


I have been able to talk to a number of great people here, though. Yesterday I ended up sitting beside Brett Kopf, the very enthusiastic Co-founder of remind101, a service that I often recommend for teachers. I also waited in a line and had a good conversation with John Lindsay, the husband of flat classroom author Julie Lindsay. A few people that I've met and interacted with in person and/or on Twitter are Jenn WagnerStacci Barganz, and Amanda Pelsor.


I've also appreciated the opportunity to spend some time with people I know in person, such as Todd Kennedy and Treva Emter from the ATLE, and of course people from my own school district:
Faye McConnell, Director of Education Technology and AISI
Donna Griffin, Innovation Facilitator
Aaron Tuckwood, Technology Consultant
Les Sereda, Media Specialist
Tim Knell, Director of Technology Services
Scott McFadyen, Chief Financial Officer
Ali Nazarali, Support Analyist
Shawna Jenkins, Literacy Consultant
Dianne Molzan, Student Support Consultant
Jenn Cowie, Teacher