Pages

Monday 29 April 2013

PROJECT: mark*N*mail - Rubric/Marking App


mark*N*mail is an app for educators that will transform the marking process for your classroom.

mark*N*mail will take any Google Form you create for student marking (rubrics, tests, etc.) and email the results of the form to your students in a neatly formatted manner. The app works with any device (tablet, smartphone, desktop) on any OS that can run a modern web browser with a Google Docs account.

Simply add your marking criteria items to a Google Form, include an email entry as one of your form elements and then mark your assignments. When you have completed marking the assignments, use the mark*N*mail app to send the results to your students.

  • Harness the power of Google Docs and Gmail to get your marks out to students quickly and easily. 
  • Reuse your marking forms, share rubrics and marking criteria with colleagues or create templates for your classroom, school or district.
  • Simplify and streamline your marking process.
  • Save some trees!

To give the mark*N*mail app a go, CLICK HERE!

Sunday 28 April 2013

The Turbulent and Frenetic Pace of EdTech...

Now, to be sure, I am not that old, unless you count 42 years on this beautiful orb as aged. Perhaps I am showing my age when I hearken back to yesteryear blurting the cliched term, "When I was your age..." However, I am noticing a trend, and a rather unsettling one at that - it is abundantly apparent that innovation is happening at a blistering pace that astounds and many teachers are trying desperately to keep pace with all of the "progress" in their classrooms. At times, this can seem like an exercise in futility.

As access to inexpensive electronics explodes, more and more new technologies are rearing their beautifully sleek and shiny countenance each and every day. The educational benefits are heralded...
  • here is something that will help a child read
  • this technology will bridge the gap between students with special needs and their peers
  • your child's core test scores will soar with this app
  • our technology that will most assuredly improve behaviour and accountability in class
And when the sirens that beckon call out their mesmerizing and enchanting claims, educators are often lulled to their hapless doom and lay amongst the wreckage that has become their teaching methodology as they try to collect their thoughts by years end. Even more regretful, some educators are doomed to repeat the cycle over and over again...a dog chasing its tail as it tries in vain to catch the next big thing.

Do not get me wrong, I love to use technology in the classroom when I see a clear benefit in efficiency or engagement. Yet, I believe that as a whole, we are at times hornswaggled by the dubious claims of the educational perks of new technologies. By this I mean there has not been a great deal of pedagogical research done into what benefits, if any, there are to be found in many of the current EdTech tools.

There are a few areas where research has shown that students have benefited from technology use in the classroom. Students studying Math seem to show improved scores on standardized tests (Technology's Edge: The Educational Benefits of Computer-Aided Instruction. Lisa Barrow, Lisa Markman, Cecilia E. Rouse). However, does this higher score translate into an increased ability in problem solving and critical thinking? Maybe...maybe not. Probably the area that has shown the most promise is the use of tech for students with disabilities. (Benefits of Technology Integration in Education, Antony Saba). This indeed looks to be very promising.

All in all, I believe instructors need to think first before rushing out to test the newest app or use the most recent piece of kit available in our classrooms. Experimentation is fine. Try the shiny new toys out and briefly give them a run with your students. However, make sure you give yourself time to enhance your class with EdTech tools that have proven themselves to be useful in their efficiency and efficacy in an educational setting. Perhaps we need to be a bit more choosy when deciding what tech to use in the classroom.

It is high time teachers hone their skills on platforms that have some semblance of permanence to them. For teachers in my district, that would mean giving serious consideration to building knowledge and skills in the usage of the Google Docs/Apps for Education platform. In doing so, we could better develop a solid pedagogical approach instead of rushing from the next big thing to the next BIGGER thing; all the while burning through copious amounts of time while never mastering more useful skills sets and processes.

Friday 26 April 2013

PROJECT: Links Database Using Google Spreadsheets [GAS]

GAS PROJECT: linkDB

GOALS:
  • To create a Google Apps Script [GAS] to pull data off of a Google Spreadsheet (linkDB) and display the links, tags and descriptions of websites collected by users. 
  • Organize the tags to collect data by user input.
  • linkDB pulls the following KEYS as categories:
    • linkDB [Title, Tags, Description, URL, Rating, Date Added] 
    • linkTags [list of available tags]
    • Rating (future feature)
  • The Google Apps Script (linkDB Script) handles the pulling from the spreadsheet and writes the contents to an app that is displayed on thedtn.org site.
  • added search feature:
    • search by Tags
    • search by Keywords
    • search by Phrases [ in quotes ]
    • search sorted by relevance ... as best as I could get it for now :)
*FUTURE GOALS: 
  • improve search and relevance
  • further develop link analyzer
  • add a "+1" button to vote for blogs

Thursday 25 April 2013

The Web is the App...

One thing I have been noticing lately as I work on developing web apps is the ease of use when utilizing the most open of platforms - the web. By bypassing an app store, I can have users directly interface with my apps using virtually any device or OS. It is indeed a thing of beauty. Once the app has been installed on  on an account, it is instantly accessible by that account no matter the device. Not only that, in order to update the app, all I have to do is make changes to the script on my end and upload them to the server. the user does not even have to download a single file...amazing.

Now, I am not predicting the death of apps and app stores, but rather a slow decline and shift in the delivery paradigm. A new way of thinking should evolve on the net over the upcoming years. The shift to an open platform via the flexibility afforded by the Internet should be on the near horizon. Using tools such as HTML 5 and other online platforms like Google Apps Script, Javascript, jQuery and others, the web has suddenly become an incredible place to develop your applications.

The arrival of Chrome OS is somewhat of a game-changer in my opinion. The idea that all applications can be run from the web allows for a lightweight, flexible and nimble set of apps that can be utilized without having to be installed. Additionally, updates can be rolled out at any time without worrying that the developer or the user will break the program with an incompatible or outdated OS.

While the current set of apps that can be run in a web browser are not nearly as feature rich as their desktop counterparts, that gap is narrowing very quickly. In fact, as alluded to earlier, there are some excellent features and benefits that web based apps can provide that are difficult for desktop only based systems. The great news is, as long as you can run a modern browser on your system, you will be able to partake in the new web based app revolution.  You no longer need a powerhouse computer that is chained to your desk. Take your pick, tablet, smartphone, desktop, wearable, even the Rasberry pi will have unfettered access to the new breed of web based apps. A new world of choice without the absolute need for the locked in ecosystems of the monolithic corporate oligarchy would be a cool thing indeed.

Wednesday 24 April 2013

mySites: The EPSB Version of a Better Sites App [Chrome Extension]


This Google Chrome App will allow you to access all of your EPSB [Edmonton Public Schools] Google Sites with one click from your Chrome browser. View ALL sites in a sorted list or navigate via an alpha-numeric index. If you have a lot of sites, I hope this app will help make life a little bit easier for you.

NOTE: I have an open domain version of this that I will be posting to the blog shortly. :)

PRIVACY NOTICE: You will have to authorize the extension to access your Google Sites. No data or information is sent to the developer - this is strictly to allow you to use the app for Edmonton Public Schools.


PROJECT: Blogroll [Google Apps Script]

GOALS:
  • To create a Google Apps Script [GAS] to pull data off of a Google Spreadsheet (blogDB) into thedtn.org site [left panel below] and display the Blogroll of current blogs on thedtn.org site
  • To develop and utilize a custom Social Network Search relevant search engine from Google to search blog writer names and get Social Network results [right panel below] and display in a Google Site via an XML Gadget (socialSearch.xml).
    • The custom search engine will pull relevant Social Network search queries FIRST then anything else after that.
  • The blogDB pulls the following KEYS as categories:
    • Blog Name
    • Blog Author
    • Blog Category
    • Blog Description
    • Blog URL
    • Rating (future feature)
  • The Google Apps Script (blogDB Script) handles the pulling from the spreadsheet and writes the contents to an app that is displayed on thedtn.org site.
  • Added a link analyzer to allow users to add their own blog links to the database
*FUTURE GOALS: 
  • further develop link analyzer
  • allow for more than one blog category tag to be chosen...or create your own tag
  • add a "+1" button to vote for blogs



On That Note...Building a Notification System

As a part time teacher and Director of Technology for the PCCE (Prairie Centre for Christian Education) I have constantly been on the lookout for practical teaching tools for both my classroom and my fellow colleagues. Google Apps for Education initially caught my attention a few year ago and since then, has continued to amazed me with the amount of care and development that has gone into this outstanding suite of tools for educators.

One of my initiatives with the PCCE was to build a curriculum development environment (www.tftshare.ca) for our teachers that utilized the highly collaborative Google Apps for Education platform. It is a place where teachers can create units, lesson plans and resources using the Google Apps and Google Docs suite of tools and share them with one another. When the unit is finished, the user can post the unit for others in the domain to view. Naturally, the fantastic flexibility of Google Apps script was used as the glue that holds it all together. We now are extremely pleased to have over 2000 educational units currently under development by our instructors! Even with this wonderful success story, we saw a few issues and some definite areas for improvement.

Ultimately, we wanted to increase collaboration and facilitate the sharing of information between staff. However, many people did not check the email address associated with their tftshare.ca account; and who could blame them? Most of us have a plethora of accounts that seems to be growing from year to year. Having one more account to check just seems like one more thing. What to do? Well, I decided that the environment needed an email notification system that would inform people when important emails were sent out to them. Emails that would:
  • notify the user when a request was made to share a unit
  • let the user know when one of their units was posted
  • inform the user when they received a Google + notification from a colleague
  • share important information from TfT Share administrators (updates, new features, etc.)
Building the email notification system was surprisingly easy with the Gmail Service provided through Google Apps Script. For example, when users share a unit or a TfT Coordinator posts a unit, the user will be informed via email using a script sent via an app on the tftshare.ca website.


First, the Gmail account is scanned to see if a [TfT Share] label has been created. This is the label that will be used to archive the email notification when the link is clicked to view its contents or the user clicks the close button:
// Check the user’s labels to see if a “[TfT Share]” label exists. If not, create one
var labels = GmailApp.getUserLabels();
var x = labels.length;
var found = false;
 while (x--) {
   var label = labels[x].getName();
   if (label == "[TfT Share]") {
    found = true;
    }
 }
 if (found == false) {
  GmailApp.createLabel('[TfT Share]');
 }

The user's messages are then scanned via the GmailApp.getInboxThreads() function:
// scan the first 50 threads of a user’s inbox and store the results in an array
// next, scan the messages first subject text of a thread via the .getFistMessageSubject() function
var threads = GmailApp.getInboxThreads(0, 50);
var x = threads.length;
var message = threads[x].getFirstMessageSubject();

Once I have the subject text of the first message in a thread, I scan the subject text for key words and perform functions depending on specific keyword matches:
// find a match in the subject text and create a notification box based on the text - this particular notification is for a unit shared with editing privileges
if (message.search(/\[TfT Share\]/) !== -1 && message.search('EDITING Permission') !== -1) {
 // found a match so do create the notification
 var threadId = threads[x].getId();
 var date = threads[x].getLastMessageDate();     
 // image for the notification icon
 var nImg = app.createImage('https://sites.google.com/a/tftshare.ca/g-g/3-0/n-edit.png');
 // URL to identify the email if clicked
 var mailUrl = "https://mail.google.com/mail/u/0/#all/" + threadId;
 // set the id of this element via .setId(‘panel’+threadId) to retrieve when element is is clicked
 var msgPanel = app.createVerticalPanel().setId('panel'+threadId)
     .setStyleAttribute('borderRadius','10px')
     .setStyleAttribute('margin','7px')
     .setStyleAttribute('background','rgb(220,235,190)')
     .setStyleAttribute('padding','10px');
 // top message for the notification      
 var topMsg = app.createLabel('A TfT Unit Was Shared With You With EDITING Permission:').setStyleAttribute('minWidth','375px')
     .setStyleAttribute('fontSize','14px')
     .setStyleAttribute('fontWeight','bold')
     .setStyleAttribute('color','rgb(0,57,101)');
 // Link to open the notification email
 // set the id of this element via .setId(threadId) to retrieve when element is is clicked
 var botLink = app.createAnchor(message, mailUrl).setId(threadId).setStyleAttribute('minWidth','435px')
     .setStyleAttribute('fontWeight','bold')
     .setStyleAttribute('fontFamily','arial')
     .setStyleAttribute('color','rgb(37,132,201)')
     .setStyleAttribute('textDecoration','none');
 // add the date to the notification
 var dateMsg = app.createLabel(date)
     .setStyleAttribute('fontSize','10px')
     .setStyleAttribute('fontStyle','italic')
     .setStyleAttribute('color','green');
 // click handler archives the email to [TfT Share] label - created automatically by script on open    
 var linkCkH = app.createServerClickHandler('archive');
 botLink.addClickHandler(linkCkH).addClickHandler(ClH);
 // close button - archives the link and removes it from notification system if it isn’t read
 // set the id of this element via .setId(‘close’+threadId) to retrieve when element is is clicked
 var close = app.createImage('https://sites.google.com/a/tftshare.ca/g-g/3-0/button-close-n.png').setId('close'+threadId);
 var closeCkH = app.createServerClickHandler('archiveClose');
 close.addClickHandler(closeCkH).addClickHandler(ClH);  
 var msgGrid = app.createFlexTable();
 msgGrid.setWidget(0,0,nImg).setWidget(0,1,topMsg).setWidget(0,2,close);
 msgPanel.add(msgGrid).add(botLink).add(dateMsg);
 vPanel.add(msgPanel);
 // add one more to the total number of email notifications for the red notification indicator total
 total++;
}

The archive functions archive the selected email notification under the [TfT Share] label that is created at the beginning of the script:
// EMAIL URL ANCHOR LINK CLICKED: this function captures the threadId via “e.parameter.source” and .getId() function to archive the email and close the panel. The function also decreases the total counter and sets the text to show the change in the total
function archive(e) {
 var app = UiApp.getActiveApplication();
 // read the threadID set up via .setId() from the source of the clicked element
 var threadId = e.parameter.source;
 // close the panel containing the clicked element
 app.getElementById('panel'+threadId).setVisible(false);
 // archive the email that has the threadId
 var thread = GmailApp.getThreadById(threadId);
 var label = GmailApp.getUserLabelByName('[TfT Share]');
 thread.addLabel(label).moveToArchive();
 // decrease the total count in the visible counter
 var tempTotal = parseInt(UserProperties.getProperty('nTotal'));
 var nTotal = tempTotal -1;
 UserProperties.setProperty('nTotal',nTotal);
 app.getElementById('nTotal').setText(nTotal);
 app.getElementById('screenerPanel').setVisible(false);
 if (nTotal == 0) app.getElementById('noNotesPanel').setVisible(true);
 return app;  
}

// CLOSE BUTTON CLICKED: this function captures the threadId via “e.parameter.source” and .getId() function to archive the email and close the panel. The function also decreases the total counter and sets the text to show the change in the total
function archiveClose(e) {
 var app = UiApp.getActiveApplication();
 // read the threadID set up via .setId() from the source of the clicked element
 var tempId = e.parameter.source;
 // remove the word ‘close’ from the Id to extract the threadId variable
 var threadId = tempId.substr(5);
 // close the panel containing the clicked element
 app.getElementById('panel'+threadId).setVisible(false);
 // archive the email that has the threadId
 var thread = GmailApp.getThreadById(threadId);
 var label = GmailApp.getUserLabelByName('[TfT Share]');
 thread.addLabel(label).moveToArchive();
 // decrease the total count in the visible counter
 var tempTotal = parseInt(UserProperties.getProperty('nTotal'));
 var nTotal = tempTotal -1;
 UserProperties.setProperty('nTotal',nTotal);
 app.getElementById('nTotal').setText(nTotal);
 app.getElementById('screenerPanel').setVisible(false);
 if (nTotal == 0) app.getElementById('noNotesPanel').setVisible(true);
 return app;  
}

And there you have it! Essentially, the notification system has three major functions:
  1. SCAN user emails for keywords to trigger notifications
  2. CREATE notifications and add them to the total
  3. ADD clickHandlers to handle close events and anchor click events to close the panel, archive the email and decrease the total count

Although designed for an educational setting, this notification system design could be adapted to any number of use cases, from a classroom student notification system to a organizational notification system for businesses and non-profits. Quick and easy to modify, the notifications can also be customized by colour and icon to suit any need.

Sample Notification from the System
Sample Notification from the System
Email Notification

Notification System with the Curriculum Creation/sharing Environment
[written entirely in Google Apps Script]



Pyjamas on Wall Street...Welcome to theDtN.org Blog

I have often daydreamed about being 'the guy' who got to decide on the status quo for modern day business attire. If I had my druthers, everyone on Wall Street would be sporting some comfy pyjamas! Just think about it...not a tight neck tie in sight...no constraints on the already tight-fisted, hypertensive business types. They could finally loosen up and enjoy the day rather than ruthlessly run the hamster wheel, trying to acquire and hoard the wealth of the world.

What would the colour of choice be? Black perhaps? Maybe banana yellow with fire-trucks or gun metal blue with some hockey players that look like their equipment wouldn't stop a beach ball (if you are a Canadian boy over the age of 30, you know what I'm talking about!). The obvious choice would be the classic teddy bears or some other cutesy animal. Imagine how threatening Steve Jobs would have looked berating an employee whilst sporting a yellow onesie that was plastered with rubber duckies. Hmmmmnnnn...the business world starts to take on a whole different shape and feel does it not?

It goes without saying that the sheer variety of p.j.'s vastly outnumbers the standard business suit. Really, whatever tickles your fancy is the order of the day. Perhaps a new era of 'jammy' bi-literalism would kick in with other countries that have adopted the same dress code. I have visions of slippers and tea, relaxed negotiations taking place over meaningful dialogue such as, "Is that Mississippi cotton or Persian cotton?" Inevitably though, the designer hacks and elitists would worm their way into my system to shatter my dream. In time there would be exclusive pyjama shops sprouting up all over Manhattan, offering exotic fabrics and fancy trimmings. Sigh...

But I can still have my dream...just think for a moment about how relaxed and non-threatening the business world could be. Financial crisis? I think not; the only crisis will be running out of cream and sugar during one of those long, yet serene business meetings where you just might find the CEO of WorldCorp reaching for his blankie as he snuggles in for the remainder of what may prove to be the deal of the century.

Welcome to The Digital Teacher's Network Blog...how original. I am hoping to throw some stuff up here now and again. If I have the time, perhaps it may even become a regular occurrence.