- Come up with a definition for gamification.
- Identify the difference between gamified and game-based learning.
- Consider how you think student motivation might be affected by gamified learning.
- Consider how you think learner self-efficacy might be affected by gamified learning.
- Decide whether or not to continue working on these challenges.
- Read the Wikipedia article on gamification.
- Do a survey of those around you to see what percentage of them play games (video games, board games, sports, etc.).
- Reflect and share how gamification might be similar to some things you've tried in the past.
- Discuss how gamification might affect student engagement.
- Investigate Csikszentmihalyi's concept of "flow" as it relates to games and/or learning.
- Find a peer-reviewed academic article on the benefits (or risks) of gamification.
- Discuss how gamification might align with Inspiring Education, High School Flexibility, and/or Curriculum Redesign.
- Read about Quest to Learn (Q2L), a public school in New York City.
- Find and share an example of gamified learning, such as the UofA's EDU210: http://goo.gl/cgoRrt
- Share online (social media, blog, etc.) an example of gamification, in education or some other field.
- Explore how "serious games" (also called persuasive games or applied games) are similar to and different from gamified environments.
- Check out "Games for Change", "Fold.it", and "Play to Cure: Genes in Space".
- Brainstorm a quick and easy way you (or someone you know) can quickly and easily gamify something.
- Come up with a list of things to consider when designing gamified activities or environments.
- Watch a TED talk by Jane McGonigal, Gabe Zichermann, Seth Priebatsch, Ali Carr-Chellman, Tom Chatfield, or Mihaly Csikszentmihalyi.
- Read about some of the criticisms of gamification, such as Ian Bogost's "exploitationware", Jane McGonigal's "gameful design", or others who discuss dangers of extrinsic motivation.
- Have an extended conversation about why gamification might or might not be a good idea.
- Write about your experiences with gamification (either here or elsewhere) in your blog, journal, social media, or on paper.
- Come up with three pairs of statements in the form "I used to think _____, now I think _____.
Friday, February 14, 2014
Gamification Challenges
If you're interested in learning more about gamification, I set up some challenges for a session at Convention last week. I'm reposting them here. Unfortunately we won't have a leaderboard or group discussions though.
Thursday, February 13, 2014
Simon Breakspear - Innovative Learning Environments
I've heard Simon Breakspear speak a couple of times lately, including at Convention last week, and I've been very impressed. Here's a YouTube clip of him talking about "How do the innovative learning environments get created?"
Monday, January 20, 2014
Projecting from an iPad or iPhone
A while ago I wrote about showing your iPad/iPhone on the big screen using iOS 6, but now that most people have upgraded to iOS 7 perhaps it's time for another post.
I you have an Apple TV (or a computer running Reflector) connected to your projector or TV, you can wirelessly project your iPad, iPhone, or iPod screen using AirPlay Mirroring. AirPlay will work from any Apple device (and some non-Apple devices), but the screen mirroring part doesn't work on some older devices.
To start, make sure you are connected to the same network as your AirPlay receiver (Apple TV or computer running Reflector).
Swipe your finger up from the bottom of the screen to access the Control Center. If there's an AirPlay receiver on the network, tap on AirPlay and select which device you'd like to AirPlay to.
Once you've selected an AirPlay receiver, you can turn on Mirroring if it's supported.
I you have an Apple TV (or a computer running Reflector) connected to your projector or TV, you can wirelessly project your iPad, iPhone, or iPod screen using AirPlay Mirroring. AirPlay will work from any Apple device (and some non-Apple devices), but the screen mirroring part doesn't work on some older devices.
To start, make sure you are connected to the same network as your AirPlay receiver (Apple TV or computer running Reflector).
Swipe your finger up from the bottom of the screen to access the Control Center. If there's an AirPlay receiver on the network, tap on AirPlay and select which device you'd like to AirPlay to.
Once you've selected an AirPlay receiver, you can turn on Mirroring if it's supported.
If you have AirPlay security enabled on your AirPlay receiver (either Onscreen Code or Password) you will be prompted to enter it.
When AirPlay is active, the top bar of your device will be blue, and you'll see the AirPlay icon
at the top right.
When you want to stop AirPlaying, swipe up from the bottom again, tap AirPlay, and choose iPad.
Tuesday, January 14, 2014
A Simpler Leaderboard
The other day a teacher was looking for an easy way to display a leaderboard for her students. You may recall a previous blog post describing a somewhat complicated (but cool IMHO) way that we set up a leaderboard for Scratch Day 2013.
Of course a leaderboard isn't all you need for a gamified classroom, but it might be part of what you want.
So again we'll use a Google Spreadsheet and publish part of it so that students will be able to see the "levels" that they, and others, have achieved, but they won't be able to see the points that you've awarded.
Create a new spreadsheet and name it whatever you'd like.
On the first line, label the columns "Name", "Points", and "Level". Then leave a blank line and put in the names (or pseudonyms) of the participants.
To the right of that (starting in cell D1), title the rows "Maximum Value" and "Level". Decide on the names for the levels and the maximum values, but you can always change those later.
In cell C3 (the third cell down in the "Level" column) paste in the following formula:
=if(B3<=$E$1,$E$2,if(B3<=$F$1,$F$2,if(B3<=$G$1,$G$2,if(B3<=$H$1,$H$2,if(B3<=$I$1,$I$2,if(B3<=$J$1,$J$2,$K$2))))))
Then press enter and place your mouse cursor at the bottom right of cell C3 (where you just pasted the formula). Click and drag it down in order to fill that formula in for the rest of the column.
When you're done, it should look like this:
Now when you change the points value, it will automatically change the "Level". If you don't mind students seeing the "points" values then you can just share the spreadsheet with them as viewers and you're done.
However if you want to allow the participants to see the "levels" but not the "points", then you need to create another sheet that you can publish. Click the + sign at the bottom left to add another sheet.
Open that new sheet by clicking on "Sheet2".
In cell A1 of the new sheet, paste or type =Sheet1!A1 and press enter so that cell A1 in this sheet will display the contents of cell A1 in the other sheet.
Again, click and drag from the bottom right corner of cell A1 to fill in the formula for the rest of the column. Do the same for cell B1, but use the formula =Sheet1!C1 so that it will display the contents of cell C1 from the other sheet. Fill down again, and it should look like this:
Now publish just Sheet2 and share the link with your participants by posting it on your website or LMS.
Sorry, that was a little more complicated than I initially though, but you can do it. If you want to see the spreadsheet that I used for this post, click this link.
Let me know if it works for you.
Of course a leaderboard isn't all you need for a gamified classroom, but it might be part of what you want.
So again we'll use a Google Spreadsheet and publish part of it so that students will be able to see the "levels" that they, and others, have achieved, but they won't be able to see the points that you've awarded.
Create a new spreadsheet and name it whatever you'd like.
To the right of that (starting in cell D1), title the rows "Maximum Value" and "Level". Decide on the names for the levels and the maximum values, but you can always change those later.
In cell C3 (the third cell down in the "Level" column) paste in the following formula:
=if(B3<=$E$1,$E$2,if(B3<=$F$1,$F$2,if(B3<=$G$1,$G$2,if(B3<=$H$1,$H$2,if(B3<=$I$1,$I$2,if(B3<=$J$1,$J$2,$K$2))))))
Then press enter and place your mouse cursor at the bottom right of cell C3 (where you just pasted the formula). Click and drag it down in order to fill that formula in for the rest of the column.
When you're done, it should look like this:
Now when you change the points value, it will automatically change the "Level". If you don't mind students seeing the "points" values then you can just share the spreadsheet with them as viewers and you're done.
However if you want to allow the participants to see the "levels" but not the "points", then you need to create another sheet that you can publish. Click the + sign at the bottom left to add another sheet.
Open that new sheet by clicking on "Sheet2".
In cell A1 of the new sheet, paste or type =Sheet1!A1 and press enter so that cell A1 in this sheet will display the contents of cell A1 in the other sheet.
Again, click and drag from the bottom right corner of cell A1 to fill in the formula for the rest of the column. Do the same for cell B1, but use the formula =Sheet1!C1 so that it will display the contents of cell C1 from the other sheet. Fill down again, and it should look like this:
Now publish just Sheet2 and share the link with your participants by posting it on your website or LMS.
Let me know if it works for you.
Friday, January 10, 2014
setting up a MinecraftEdu server
If you'd like your students to be able to play (or work in) Minecraft together, you can easily set up a MinecraftEdu server. There is more documentation on the MinecraftEdu wiki, but I'll quickly go over the basics.
From the MinecraftEdu launcher, click the "Start Minecraft Servertool" button.
If a teacher password hasn't been set yet, it will ask you to set one. You can always change this later.
You'll then be given some options about what kind of world you'd like to create (or open).
For example "Generate a Completely Flat World" if you'd like student to build things without worrying about cutting down trees or hills.
Once you have started the server, you can see the information and change settings from this window. It also shows you the IP address that students should directly connect to in order to join your world.
Before you quit the server, remember to save the world.
I also highly recommend that you make a backup of your saved world. Copy the appropriate folder to a USB drive or a network location that is backed up. If MinecraftEdu was installed by EIPS Tech Services, saved worlds will be in C:\Program Files (x86)\minecraftedu\servertool\worlds\savedworlds
Of course if you want to try out a simpler process, you (or a student) can start a single player world and allow others to join by typing /publish in the Minecraft chat or by opening the game menu and clicking the "Open to LAN" button. Unfortunately this doesn't allow you to use many of the MinecraftEdu features.
From the MinecraftEdu launcher, click the "Start Minecraft Servertool" button.
You'll then be given some options about what kind of world you'd like to create (or open).
For example "Generate a Completely Flat World" if you'd like student to build things without worrying about cutting down trees or hills.
Once you have started the server, you can see the information and change settings from this window. It also shows you the IP address that students should directly connect to in order to join your world.
Before you quit the server, remember to save the world.
I also highly recommend that you make a backup of your saved world. Copy the appropriate folder to a USB drive or a network location that is backed up. If MinecraftEdu was installed by EIPS Tech Services, saved worlds will be in C:\Program Files (x86)\minecraftedu\servertool\worlds\savedworlds
Of course if you want to try out a simpler process, you (or a student) can start a single player world and allow others to join by typing /publish in the Minecraft chat or by opening the game menu and clicking the "Open to LAN" button. Unfortunately this doesn't allow you to use many of the MinecraftEdu features.
Friday, December 20, 2013
Displaying Calendar Events on Digital Signage Using a Raspberry Pi and Google Apps Script
In our office many of us are often out of the building, so we decided to hang a TV that would display our calendar events. The hardware consists of a 40" LED mounted on the wall, with a Raspberry Pi (with a Wi-Fi adapter) connected to the HDMI input.
To display the calendars, a Google Apps Script edits a Google Sites page, that is refreshed on the Raspberry Pi every 30 minutes. Google Apps Script is great at parsing Google Calendars, but unfortunately there is some incompatibility with our Exchange calendars, so I ended up using Yahoo!Pipes to parse the ICS files served by our Exchange server.
I'll write out some instructions for recreating what I've done, but your results may vary. Feel free to ask for help in the comments or on social media.
Start by creating yourself a Google Site that has no navigation elements or other clutter. Probably the easiest is to create one from this template I've shared.
Next, a Yahoo!Pipe to parse the ICS files. If you can subscribe to the calendars in Google Calendar then you don't need this because you can use the Calendar Service in Google Apps Script. I'll leave it to you to figure out how to do that, though. If you want to use Yahoo!Pipes to parse ICS files, check out the pipe I created.
Then a Google Apps Script to add events to the Google Site you created. If you're not familiar with Google Sites, there are many tutorials and code examples. I'll just paste my script code in here and hope you can make sense of it.
Finally, on the Raspberry Pi://Remember to set up a trigger set up to run every 30 minutes, or at whatever frequency you prefer function runThis() { var page = SitesApp.getPageByUrl("https://sites.google.com/whatever-your-site-is-should-be-here"); var dateToday = new Date(); //format the date to print at the top of the webpage var dayToday = Utilities.formatDate(dateToday, Session.getTimeZone(), "EEEE, MMMM dd"); //put the date at the top of the web page var pageContent = "<div style='font-size:larger'>Today is " + dayToday + "</div><br>"; //add the calendar stuff by calling the appropriate functions and appending to the variable var pageContent = pageContent + parseCalendar("Your Name","#00FF00","http://your-link-to-an-online-ics-file.ics"); var pageContent = pageContent + parseCalendar("Another Name","#FF0000","http://a-link-to-another-online-ics-file.ics"); page.setHtmlContent(pageContent); } function parseCalendar(name,color,iCalUrl) { //declare and empty pageContent variable that we will fill with calendar entries var pageContent = ""; //format the iCal URL for submission to Yahoo!Pipes var replaceColon = iCalUrl.replace(":","%3A"); var replaceSlash = replaceColon.replace(/\//g,"%2F"); var translatediCalUrl = replaceSlash.replace(/@/g,"%40"); //replace spaces with + signs var translatedName = name.replace(" ","+"); //concatenate the strings to make a URL var rssUrl = "http://pipes.yahoo.com/pipes/pipe.run?CalendarURL=" + translatediCalUrl + "&Name=" + translatedName + "&_id=9e11d02f251ade5c10a6f5501bfe181f&_render=rss"; //fetch the RSS feed from that URL var rssContent = UrlFetchApp.fetch(rssUrl).getContentText(); //parse the RSS feed that we just fetched var items = XmlService.parse(rssContent).getRootElement().getChild("channel").getChildren("item"); //loop through the items we just parsed for (var i = 0; i < items.length; i++) { var item = items[i]; var title = item.getChild("title").getText(); // if there is a location, then get it from the "description" field if (item.getChild("description") != null) { var location = item.getChild("description").getText(); var output = title + " at " + location; } // if there isn't a location, output just the title else {output = title}; var pageContent = pageContent + "<div style='color:" + color + "'>" + output + "</div>\r"; } return pageContent; }
- Set up Debian Linux on the Pi:http://www.raspberrypi.org/downloads
- (optional): Force the Raspberry Pi to use HDMI output even if it doesn't detect a display there:
- in the terminal emulator type sudo leafpad /boot/config.txt
- add the following lines to that file:
- hdmi_force_hotplug=1
- hdmi_drive=2
- remove (or comment out) any similar lines at the bottom of the file that may have been added by the NOOBS install process
- save and close the config.txt file
- Have the mouse cursor auto-hide using unclutter: in the terminal emulator type sudo apt-get install unclutter
- Edit the autostart file: in the terminal emulator type sudo leafpad /etc/xdg/lxsession/LXDE/autostart
- Disable screen sleeping and autostart the browser by adding the following lines to the file you just opened for editing (include the @ signs, but not the line numbers):
- @xset s off
- @set -dpms
- @xset s noblank
- @midori -e Fullscreen -i 1800 -a https://sites.google.com/whatever-your-site-is-should-be-here
- @unclutter -display :0.0 -idle 5
- Reboot the Raspberry Pi, and you're done.
Friday, October 18, 2013
School Announcements: Auto-Generating Announcement Documents (printable and viewable online)
Rather than having to manually create a document every day with the daily announcements, I've created a script that will do it for you. There are, of course, other features that could be added, but this is good enough for today.
To start, announcements are submitted via a Google Form, so they end in a spreadsheet. There are three pieces of data: the text of the announcement, the category, and the expiry date.
To start, announcements are submitted via a Google Form, so they end in a spreadsheet. There are three pieces of data: the text of the announcement, the category, and the expiry date.
The script creates a new Google Document (in a public folder), then takes data from the spreadsheet and pastes it into that newly created document. The code for the script follows. (Creative Commons Attribution-ShareAlike).
function createAnnoucementDocument() {
// Set up a trigger to run this every weekday, perhaps at 8:00 am
// Define a custom paragraph style.
var styleHeading = {};
styleHeading[DocumentApp.Attribute.HORIZONTAL_ALIGNMENT] = DocumentApp.HorizontalAlignment.CENTER;
styleHeading[DocumentApp.Attribute.FONT_SIZE] = 18;
styleHeading[DocumentApp.Attribute.BOLD] = true;
var styleCategory = {};
styleCategory[DocumentApp.Attribute.HORIZONTAL_ALIGNMENT] = DocumentApp.HorizontalAlignment.LEFT;
styleCategory[DocumentApp.Attribute.FONT_SIZE] = 12;
styleCategory[DocumentApp.Attribute.BOLD] = true;
var styleText = {};
styleText[DocumentApp.Attribute.HORIZONTAL_ALIGNMENT] = DocumentApp.HorizontalAlignment.LEFT;
styleText[DocumentApp.Attribute.FONT_SIZE] = 12;
styleText[DocumentApp.Attribute.BOLD] = false;
// Get the current date
var app = UiApp.createApplication();
var dateToday = new Date();
// date formatting here: http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html
var formattedDateToday = Utilities.formatDate(new Date(), "MST", "yyyy-MM-dd");
// Create the document
var documentName = formattedDateToday + " School Announcements";
var doc = DocumentApp.create(documentName);
// Move the document to the shared folder entitled "Announcements"
var documentFile = DocsList.getFileById(doc.getId());
var folderName = DocsList.getFolder("Announcements");
documentFile.addToFolder(folderName);
// the spreadsheet that contains the results of the announcement submission form
var sheet = SpreadsheetApp.openById("***INSERT_SPREADSHEET_KEY_HERE***").getSheets()[0];
// Start creating the body of the document
var body = doc.getBody();
body.appendParagraph("Name of School Goes Here\r"+formattedDateToday).setAttributes(styleHeading);
// Read the whole spreadsheet into a list
// if Expiry Date (column D) is > or equal to today's date then process it, else ignore
// switch if category match then append to document
var data = sheet.getRange(2, 2, sheet.getLastRow(), sheet.getLastColumn()).getValues();
for (var row=0, total=data.length; row < total; row++) {
var rowData = data[row];
var announcementText = rowData[0];
var announcementCategory = rowData[1];
var announcementExpiry = rowData[2];
if (announcementExpiry >= dateToday) {
switch (announcementCategory) {
case "General":
body.appendParagraph(announcementText).setAttributes(styleText);
break;
}
}
}
body.appendParagraph("Events and Meetings").setAttributes(styleCategory);
for (var row=0, total=data.length; row < total; row++) {
var rowData = data[row];
var announcementText = rowData[0];
var announcementCategory = rowData[1];
var announcementExpiry = rowData[2];
if (announcementExpiry >= dateToday) {
switch (announcementCategory) {
case "Events and Meetings":
body.appendParagraph(announcementText).setAttributes(styleText);
break;
}
}
}
body.appendParagraph("Athletics").setAttributes(styleCategory);
for (var row=0, total=data.length; row < total; row++) {
var rowData = data[row];
var announcementText = rowData[0];
var announcementCategory = rowData[1];
var announcementExpiry = rowData[2];
if (announcementExpiry >= dateToday) {
switch (announcementCategory) {
case "Athletics":
body.appendParagraph(announcementText).setAttributes(styleText);
break;
}
}
}
body.appendParagraph("Cafeteria").setAttributes(styleCategory);
for (var row=0, total=data.length; row < total; row++) {
var rowData = data[row];
var announcementText = rowData[0];
var announcementCategory = rowData[1];
var announcementExpiry = rowData[2];
if (announcementExpiry >= dateToday) {
switch (announcementCategory) {
case "Cafeteria":
body.appendParagraph(announcementText).setAttributes(styleText);
break;
}
}
}
return app;
}
Subscribe to:
Posts (Atom)




















