Wednesday, June 18, 2014

Minecraft in Math at Bev Facey

Students in Yolanda Chang's Math 20-2 classes at Bev Facey participated in a week-long MinecraftEdu project that had them building models and doing related calculations to demonstrate their learning of rates and scale factors. At the end of the week, she had her students write reflections, here are some of the highlights.

This project improved my understanding of scale factor and rates and ratios because I realize how much you have to convert and apply your knowledge to make your scale factor work. In real life the measurements that things are in can be different than what you’re using. Like the material.

Being able to see the blocks helped me understand how scale factor works and how different scale factors can change the size of a sculpture.

The calculations of the actual design improved my understandings of scale factor as well as my understanding of rates and ratios. The only way to keep track of all the calculations was to be very organized and methodical.

It was a good learning experience considering everyone has different answers and the question really makes you think. So it’s not just a breeze by project.

It makes so much more sense when you’re in control of what you’re doing and making it bigger and such.

It allowed me to think of a real life situation and everything was 3-D which make it easier to think about and calculate.

It’s a good game to help you with math, it’s better than doing worksheets.

It was related to real life things. Everyone’s answers differed so you had to learn to do it on your own.

It shows you that you use these things in real life and it helps you get a better understanding of what’s going on. It also gives you a visual image and gives you the opportunity to show your own work and understanding on the project.

For me, my learning style is auditory and visual so doing this project allowed me to visually see and explore real life scenarios of how to use scale factors. This helped significantly for my learning and enjoyment of this class.

It made it more fun to do scale factors, rates and ratios. Combining elements of abstract learning and mainstream video gaming.

It was more real life. I can see what I’m figuring out in front of me. It’s easier than trying to read a question and having to envision.

Yes, it helped me understand how to use scale factor and the rates and ratios. I understand how to apply this to my everyday life. As well for my future working in the trades.

It helped to show that when you extend the outside, the interior amount got much bigger. It was easier to see pictorially instead of in numbers.

It helped me to understand construction and how much work actually has to go into it.

Because there were so many different steps of math to go through, I really included everything on some level.

It helped me learn the concept in a way that was more fun and challenging to myself.

Because it was very challenging it made us think hard.

Tuesday, May 6, 2014

Task Force for Teaching Excellence

Along with about 1300 other people I attended the Task Force for Teaching Excellence Symposium yesterday where the report was released. It contains 25 recommendations to the Minister, which are summarized here.

Throughout the day there was great discussion at my table and during the break times. At the end of the day panel members answered questions that had been sent in, the answers to those and other questions will be posted here and on the Alberta Education Twitter account (using the hashtag #InspiringEd).

Unfortunately most of what gets reported on are negative reactions to these recommendations. However you can read the report for yourself, and provide feedback (via a survey, email, or discussion board) by June 5th, 2014.

Friday, May 2, 2014

Automating Chromebook Enrollment with Arduino/Teensy

If you find yourself enrolling large numbers of Chromebooks on your domain, and you don't have students to help, I've written an Arduino program that can expedite the process.

Because many Arduinos (and Arduino clones such my favorite Teensy) can act as a keyboard, they can be programmed to output keystrokes (and mouse clicks) when a button is pushed. In this case a button is connected to ground and pin 2 on a Teensy that is running the following code (this is also available on GitHub).

Edit: The code on GitHub has been updated to allow two buttons using a Teensy or a Trinket, with the additional button for inputting the Wi-Fi passphrase. I've included a demo video of the new version at the bottom of this post.

String email = "example@example.com";
String password = "thisisaweakpassword";
const int enrolButton = 2;

#include <Bounce.h>
Bounce button1 = Bounce(enrolButton, 10); // 10 ms debouce

void setup() {
 pinMode(enrolButton, INPUT_PULLUP);
}

void loop() {
 button1.update();
 if(button1.fallingEdge()) {enrol();} // call the enrol function
}

void enrol() {
 Keyboard.begin();
 Keyboard.press(KEY_LEFT_CTRL);
 Keyboard.press(KEY_LEFT_ALT);
 Keyboard.press('e');
 delay(50); // wait for 50 milliseconds before releasing those keys
 Keyboard.releaseAll();
 delay(2000); // wait for 2 seconds to get the enrol screen
 Keyboard.print(email);
 Keyboard.press(KEY_TAB); //tab to get to the password field
 delay(50);
 Keyboard.releaseAll();
 Keyboard.print(password);
 Keyboard.press(KEY_ENTER);
 delay(50);
 Keyboard.releaseAll();
 Keyboard.end();
}


When you hit the button connected to ground and pin 2, this will send the keystrokes Ctrl-Alt-e and your email and password for enrolling a Chromebook. You'll still manually connect to the Wi-Fi or LAN and click Accept on the licence agreement, but you could probably figure out how to automate that with a few more lines of code here (i.e. using KEY_TAB and KEY_SPACE).

Hopefully this will save you some typing and speed up the Chromebook enrolling process. Let me know if you try this.


Minecraft on a Dell Chromebook

This is what worked on a Dell Chromebook that I tried. It will likely work on other Chromebooks but YMMV.

In order to play Minecraft or use other Java-based programs on a Chromebook, you need to install Linux. However that's not a particularly difficult process thanks to crouton.

Unfortunately it requires the Chromebook to remain in developer mode, meaning you'll need to press Ctrl-d every time you boot it up. As well, is not supported by Google (it may cause hardware, software, or security issues) and may void your warranty.

Make sure you backup/upload any files that are stored locally on your Chromebook before you begin.
  1. Enter recovery mode by holding the esc and refresh keys while you press the power button.
  2. At the recovery screen, press Ctrl-d to reboot into developer mode.
  3. Every time you boot up the Chromebook from now on, you'll need to press Ctrl-d at the "OS verification is OFF" screen. If you "Press SPACE to re-enable" then it will erase the Linux install that we are about to do.
  4. Log in to the Chromebook as usual.
  5. Download crouton from goo.gl/fd3zc.
  6. Press Ctrl-Alt-t to open crosh
  7. Type shell, press enter, and you should be at a chronos@localhost / $ prompt.
  8. To run the crouton install script, type sh -e ~/Downloads/crouton -t unity
  9. It will take a while to run the script and download the files
  10. Answer any questions that the script asks you.
  11. Once that finishes, you can start Linux by typing sudo startunity
You're now running Linux, and you can install software such as Java to run Minecraft.

  1. While still on the Linux side of your Chromebook, press Ctrl-Alt-t to open a terminal window. You should see a prompt that is something like (trusy)username@localhost:~$  where you enter the following commands
  2. sudo apt-add-repository ppa:webupd8team/java
  3. sudo apt-get update
  4. sudo apt-get install oracle-java8-installer
  5. sudo apt-get install oracle-java8-set-default
  6. Make sure you type your password that you entered when setting up Linux, and answer yes to the question about the Java licence.
You can now run Java programs in the Linux install on your Chromebook, which includes Minecraft. If you'd like to use Firefox as a browser on the Linux side, it's as simple as opening a terminal (Ctrl-Alt-t) and typing sudo apt-get install firefox You can also install other Linux games, including the Steam platform.

To start Linux after rebooting the Chromebook (always with Ctrl-d), remember Ctrl-Alt-t then shell then sudo startunity

To switch back and forth between ChromeOS and Linux, press Ctrl-Alt-Shift-Back or Ctrl-Alt-Shift-Forward. Back and forward are the arrow buttons at the top left of your keyboard.

To undo all of this and go back to just a regular Chromebook, reboot and press the spacebar to re-enable OS-verification.

Wednesday, April 30, 2014

Flow Rate and Conservation: Water and Bytes

HWT Image Library
During my short shower this morning, the water pressure was a little low as a result of the water supply line relocation. Residents have been asked to reduce water consumption during this time.

Network bandwidth is similar to water flow, it's a somewhat limited resource. Soon all schools will have a 100 Mbit connection to Central, and there should be lots of bandwidth to the Internet from there. However despite continuing efforts by Tech Services to open up a bigger pipe, demand will often outstrip supply.

While a 100 Mbit connection is a decent speed, as more devices and users connect we need to be cognizant that it is for the entire staff and student population. Technical measures are in place to limit individual connection speeds, particularly on the schoolguest Wi-Fi networks, but there are only a certain number of streaming videos that can be watched simultaneously.

Part of digital citizenship education for students is discussion about mindful and appropriate use. For example you can remind them about using streaming music sites such as Songza, Grooveshark, or Calm.com rather than having YouTube music videos playing while they work (video uses approximately 40 times as much bandwidth as audio).

Of course this will become a more pressing concern as more schools implement "bring your own device" (BYOD) and require students to use their devices for educational activities.

Wednesday, April 9, 2014

Check if Google Apps Users Have Logged in (Google Apps Script)

If you're using Google Apps for Education (with the provisioning API enabled) and have a list of domain users that you want to check if they've logged in or not, here's a quick Spreadsheet script you can try. It queries to see if the user has agreed to the terms or not. Of course you'll need to run this from an account that has admin permissions on your domain.

function onOpen() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var entries = [{name : "Start Checking", functionName : "startLoop"}];
  spreadsheet.addMenu("Check Users", entries);
}

function startLoop() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var activeSheet = sheet.getActiveSheet();
  var maxRows = activeSheet.getMaxRows();
  var result = Browser.msgBox('This script will check ' + maxRows + ' rows worth of data from the currently selected cell.', Browser.Buttons.OK_CANCEL);
  if (result != 'cancel') {
    for (var i=0;i<maxRows;i++) {checkUser();}
  } else {Browser.msgBox('Okay, maybe some other time');}
}

function checkUser() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var range = SpreadsheetApp.getActiveRange();
  var newRange =  range.offset(0, 1);
  var username = range.getValue();
  var user = UserManager.getUser(username);
  var agreedToTerms = user.getAgreedToTerms();
  newRange.setValue(agreedToTerms);
  var newSelection = range.offset(1, 0);
  newSelection.activate();
}

I'm assuming that you're somewhat familiar with Google Apps Script and using it with Spreadsheets. Let me know in the comments if you need clarification.

Tuesday, March 18, 2014

Google Apps Script: Auto-Query FortiGuard Category List

In case someone is curious, here's a little Google Apps Script I put together for querying FortiGuard's Web Filtering Service site category list from a spreadsheet. It takes a URL from the selected cell in a Google Spreadsheet, and FortiGuard's category for that URL in the cell to the right of it.

function onOpen() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var menuEntries = [ {name: "pasteCategory", functionName: "pasteCategory"},
                      {name: "Say Hello", functionName: "sayHello"} ];
  sheet.addMenu("FortiGuard", menuEntries);
}

function pasteCategory() { //you can also set this to loop for the number of rows
  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var range = SpreadsheetApp.getActiveRange();
  var newRange = range.offset(0, 1); //the cell to the right
  var site = range.getValue();//from the currently selected cell
  var category = getCategory(site);
  newRange.setValue(category) //paste in the category
  var newSelection = range.offset(1, 0);
  newSelection.activate();
}

function sayHello() {
  Browser.msgBox("Hello");
}

function getCategory(site) {
  var urlToFetch = "http://www.fortiguard.com/ip_rep/index.php?data="+site
  var html = UrlFetchApp.fetch(urlToFetch).getContentText();
  var startTag = 'Category: ';
  var endTag = '</h3>';
  var startIndex = html.indexOf(startTag) + 10; // add 10 to the index to get rid of 'Category: '
  var endIndex = html.indexOf(endTag);
  var category = html.slice(startIndex,endIndex);
  return(category);
}